diff --git a/Jenkinsfile b/Jenkinsfile index 83a37666f..c1b28bad0 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -18,7 +18,7 @@ pipeline { npm_registry = "${env.ARTIFACTORY_NPM_REPO}" npm_noproxy = "${env.ORACLE_NO_PROXY}" - node_version = "16.20.0" + node_version = "18.19.1" project_name = "$JOB_NAME" version_prefix = sh(returnStdout: true, script: 'cat electron/package.json | grep version | awk \'match($0, /[0-9]+.[0-9]+.[0-9]+/) { print substr( $0, RSTART, RLENGTH )}\'').trim() diff --git a/THIRD_PARTY_LICENSES.txt b/THIRD_PARTY_LICENSES.txt index dda75c143..b699bb349 100644 --- a/THIRD_PARTY_LICENSES.txt +++ b/THIRD_PARTY_LICENSES.txt @@ -13,7 +13,7 @@ Third Party Runtime Dependencies The following packages are licensed under The MIT License: -@babel/runtime@7.22.15 +@babel/runtime@7.23.9 Copyright (c) 2014-present Sebastian McKenzie and other contributors @colors/colors@1.5.0 @@ -27,14 +27,14 @@ Additional Functionality @dabh/diagnostics@2.0.3 Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman, the Contributors. -@types/geojson@7946.0.10 +@types/geojson@7946.0.11 Copyright (c) Microsoft Corporation. -@types/node@18.16.16 +@types/node@20.11.20 Copyright (c) Microsoft Corporation. -@types/signals@1.0.1 -Copyright (c) Microsoft Corporation. All rights reserved. +@types/signals@1.0.2 +Copyright (c) Microsoft Corporation. @types/yauzl@2.10.0 Copyright (c) Microsoft Corporation. @@ -63,7 +63,7 @@ Copyright (c) 2013 Brian J. Brennan buffer-from@1.1.2 Copyright (c) 2016, 2018 Linus Unnebäck -builder-util-runtime@9.2.1 +builder-util-runtime@9.2.3 Copyright (c) 2015 Loopline Systems color@3.2.1 @@ -97,7 +97,7 @@ Copyright (c) 2013-2018, Viacheslav Lotsmanov duplexify@3.7.1 Copyright (c) 2014 Mathias Buus -electron-updater@6.1.4 +electron-updater@6.1.8 Copyright (c) 2015 Loopline Systems enabled@2.0.0 @@ -137,13 +137,13 @@ Copyright (c) 2016 Mathias Buus hammerjs@2.0.8 Copyright (C) 2011-2014 by Jorik Tangelder (Eight Media) -https-proxy-agent@7.0.2 +https-proxy-agent@7.0.4 Copyright (c) 2013 Nathan Rajlich -i18next@23.5.1 -Copyright (c) 2023 i18next +i18next@23.10.0 +Copyright (c) 2024 i18next -i18next-fs-backend@2.2.0 +i18next-fs-backend@2.3.1 Copyright (c) 2021 i18next immediate@3.0.6 @@ -235,7 +235,7 @@ Copyright (c) 2017 Node.js API collaborators node-fetch@2.7.0 Copyright (c) 2016 David Frank -object-hash@2.2.0 +object-hash@3.0.0 Copyright (c) 2014 object-hash contributors one-time@1.0.0 @@ -247,7 +247,7 @@ Copyright (c) 2014 Mathias Buus pend@1.2.0 Copyright (c) 2014 Andrew Kelley -preact@10.11.3 +preact@10.17.1 Copyright (c) 2015-present Jason Miller prebuild-install@7.1.1 @@ -256,7 +256,7 @@ Copyright (c) 2015 Mathias Buus process-nextick-args@2.0.1 Copyright (c) 2015 Calvin Metcalf -proj4@2.8.0 +proj4@2.9.2 Copyright (c) 2014, Mike Adair, Richard Greenwood, Didier Richard, Stephen Irons, Olivier Terral and Calvin Metcalf pump@3.0.0 @@ -268,7 +268,7 @@ Copyright (c) 2014 Mathias Buus readable-stream@2.3.7 Copyright Node.js contributors. All rights reserved. -regenerator-runtime@0.14.0 +regenerator-runtime@0.14.1 Copyright (c) 2014-present, Facebook, Inc. require-css@0.1.10 @@ -331,9 +331,12 @@ Copyright (c) 2020 Zurab Benashvili (binier) tr46@0.0.3 Copyright (c) Sebastian Mayr -triple-beam@1.3.0 +triple-beam@1.4.1 Copyright (c) 2017 winstonjs +undici-types@5.26.5 +***** No Copyright Found ***** + universalify@2.0.0 Copyright (c) 2017, Ryan Zimmerman @@ -346,13 +349,13 @@ Copyright (c) 2010-2020 Robert Kieffer and other contributors whatwg-url@5.0.0 Copyright (c) 2015–2016 Sebastian Mayr -winston@3.10.0 +winston@3.11.0 Copyright (c) 2010 Charlie Robbins -winston-daily-rotate-file@4.7.1 -Copyright (c) 2015 winstonjs +winston-daily-rotate-file@5.0.0 +Copyright (c) 2015-2024 winstonjs -winston-transport@4.5.0 +winston-transport@4.7.0 Copyright (c) 2015 Charlie Robbins & the contributors. wkt-parser@1.3.3 @@ -426,7 +429,7 @@ Copyright (c) Isaac Z. Schlueter and Contributors tar@6.2.0 Copyright (c) Isaac Z. Schlueter and Contributors -which@3.0.1 +which@4.0.0 Copyright (c) Isaac Z. Schlueter and Contributors wrappy@1.0.2 @@ -1990,7 +1993,7 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION The following packages are licensed under The 3-Clause BSD License, Version 2.0: -ace-builds@1.27.0 +ace-builds@1.32.6 Copyright (c) 2010, Ajax.org B.V. ieee754@1.2.1 @@ -2029,16 +2032,16 @@ POSSIBILITY OF SUCH DAMAGE. The following packages are licensed under The Universal Permissive License (UPL), Version 1.0: -@oracle/oraclejet@14.1.8 -Copyright (c) 2023 Oracle and/or its affiliates. +@oracle/oraclejet@16.0.0 +Copyright (c) 2024 Oracle and/or its affiliates. -@oracle/oraclejet-core-pack@14.1.8 +@oracle/oraclejet-core-pack@16.0.0 Copyright (c) 2023 Oracle and/or its affiliates. -@oracle/oraclejet-preact@14.1.8 +@oracle/oraclejet-preact@16.0.0 Copyright (c) 2023 Oracle and/or its affiliates. -@oracle/wrc-jet-pack@2.4.6 +@oracle/wrc-jet-pack@2.4.7 Copyright (c) 2022 Oracle and/or its affiliates. @@ -2092,7 +2095,7 @@ DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- -@oracle/oraclejet-webdriver@14.1.8 +@oracle/oraclejet-webdriver@16.0.0 MIT License @@ -2194,13 +2197,13 @@ Copyright (c) 2014-present Sebastian McKenzie and other contributors @develar/schema-utils@2.6.5 Copyright JS Foundation and other contributors -@electron/asar@3.2.5 +@electron/asar@3.2.8 Copyright (c) 2014 GitHub Inc. @electron/get@2.0.2 Copyright (c) Contributors to the Electron project -@electron/notarize@2.1.0 +@electron/notarize@2.3.0 Copyright 2018 Samuel Attard and contributors @electron/universal@1.4.1 @@ -2212,10 +2215,10 @@ Copyright (c) 2018 Toru Nagashima @eslint-community/regexpp@4.8.1 Copyright (c) 2018 Toru Nagashima -@eslint/eslintrc@2.1.2 +@eslint/eslintrc@2.1.4 Copyright OpenJS Foundation and other contributors, -@eslint/js@8.49.0 +@eslint/js@8.57.0 Copyright OpenJS Foundation and other contributors, @istanbuljs/schema@0.1.3 @@ -2230,7 +2233,7 @@ Copyright 2019 Justin Ridgewell @jridgewell/set-array@1.1.2 Copyright 2022 Justin Ridgewell -@jridgewell/source-map@0.3.2 +@jridgewell/source-map@0.3.5 Copyright 2019 Justin Ridgewell @jridgewell/sourcemap-codec@1.4.14 @@ -2269,7 +2272,7 @@ Copyright (c) Microsoft Corporation. @types/concat-stream@1.6.1 Copyright (c) Microsoft Corporation. -@types/debug@4.1.8 +@types/debug@4.1.12 Copyright (c) Microsoft Corporation. @types/form-data@0.0.33 @@ -2284,17 +2287,17 @@ Copyright (c) Microsoft Corporation. @types/keyv@3.1.4 Copyright (c) Microsoft Corporation. -@types/ms@0.7.31 -Copyright (c) Microsoft Corporation. All rights reserved. +@types/ms@0.7.34 +Copyright (c) Microsoft Corporation. -@types/node@18.16.16 +@types/node@20.11.20 Copyright (c) Microsoft Corporation. @types/node@10.17.60 Copyright (c) Microsoft Corporation. -@types/plist@3.0.2 -Copyright (c) Microsoft Corporation. All rights reserved. +@types/plist@3.0.5 +Copyright (c) Microsoft Corporation. @types/qs@6.9.7 Copyright (c) Microsoft Corporation. @@ -2302,33 +2305,32 @@ Copyright (c) Microsoft Corporation. @types/responselike@1.0.0 Copyright (c) Microsoft Corporation. All rights reserved. -@types/verror@1.10.6 +@types/verror@1.10.9 Copyright (c) Microsoft Corporation. @types/yauzl@2.10.0 Copyright (c) Microsoft Corporation. -@typescript-eslint/types@5.36.1 -Copyright (c) 2019 TypeScript ESLint and other contributors +@typescript-eslint/types@6.13.2 +Copyright (c) 2019 typescript-eslint and other contributors -@typescript-eslint/visitor-keys@5.36.1 -Copyright (c) 2019 TypeScript ESLint and other contributors +@typescript-eslint/visitor-keys@6.13.2 +Copyright (c) 2019 typescript-eslint and other contributors @xmldom/xmldom@0.8.10 Copyright 2019 - present Christopher J. Brody and other contributors, as listed in: https://github.com/xmldom/xmldom/graphs/contributors Copyright 2012 - 2017 @jindw and other contributors, as listed in: https://github.com/jindw/xmldom/graphs/contributors -@xmldom/xmldom@0.8.6 -Copyright 2019 - present Christopher J. Brody and other contributors, as listed in: https://github.com/xmldom/xmldom/graphs/contributors -Copyright 2012 - 2017 @jindw and other contributors, as listed in: https://github.com/jindw/xmldom/graphs/contributors - -7zip-bin@5.1.1 +7zip-bin@5.2.0 Copyright (c) 2016 Vladimir Krivosheev accepts@1.3.8 Copyright (c) 2014 Jonathan Ong Copyright (c) 2015 Douglas Christopher Wilson +acorn@8.11.3 +Copyright (C) 2012-2022 by various contributors (see AUTHORS) + acorn@8.10.0 Copyright (C) 2012-2022 by various contributors (see AUTHORS) @@ -2341,13 +2343,16 @@ Copyright (c) 2012 Another-D-Mention Software and other contributors, agent-base@6.0.2 Copyright (c) 2013 Nathan Rajlich +agent-base@7.1.0 +Copyright (c) 2013 Nathan Rajlich + aggregate-error@3.1.0 Copyright (c) Sindre Sorhus (sindresorhus.com) ajv@6.12.6 Copyright (c) 2015-2017 Evgeny Poberezkin -ajv@8.10.0 +ajv@8.12.0 Copyright (c) 2015-2021 Evgeny Poberezkin ajv-formats@2.1.1 @@ -2371,7 +2376,7 @@ Copyright (c) Sindre Sorhus (sindresorhus.com) app-builder-bin@4.0.0 Copyright (c) 2015 Loopline Systems -app-builder-lib@24.6.4 +app-builder-lib@24.12.0 Copyright (c) 2015 Loopline Systems append-transform@2.0.0 @@ -2401,9 +2406,15 @@ Copyright (c) 2018, Joyent, Inc. and assert-plus authors assertion-error@1.1.0 Copyright (c) 2013 Jake Luer jake@qualiancy.com (http://qualiancy.com) +ast-traverse@0.1.1 +Copyright (c) 2013 Olov Lassus + astral-regex@2.0.0 Copyright (c) Kevin Mårtensson (github.com/kevva) +astring@1.8.6 +Copyright (c) 2015, David Bonnet + async@3.2.4 Copyright (c) 2010-2018 Caolan McMahon @@ -2465,10 +2476,10 @@ No Copyright buffer-from@1.1.2 Copyright (c) 2016, 2018 Linus Unnebäck -builder-util@24.5.0 +builder-util@24.9.4 Copyright (c) 2015 Loopline Systems -builder-util-runtime@9.2.1 +builder-util-runtime@9.2.3 Copyright (c) 2015 Loopline Systems bytes@3.1.2 @@ -2496,7 +2507,7 @@ Copyright (c) Sindre Sorhus (sindresorhus.com) camelcase@5.3.1 Copyright (c) Sindre Sorhus (sindresorhus.com) -chai@4.3.8 +chai@4.4.1 Copyright (c) 2017 Chai.js Assertion Library chalk@4.1.2 @@ -2505,7 +2516,7 @@ Copyright (c) Sindre Sorhus (sindresorhus.com) chardet@0.7.0 Copyright (C) 2018 Dmitry Shirokov -check-error@1.0.2 +check-error@1.0.3 Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) chokidar@3.5.3 @@ -2514,8 +2525,8 @@ Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com), Elan Shanker chromium-pickle-js@0.2.0 No Copyright -ci-info@3.8.0 -Copyright (c) 2016-2023 Thomas Watson Steen +ci-info@3.9.0 +Copyright (c) 2016 Thomas Watson Steen clean-stack@2.2.0 Copyright (c) Sindre Sorhus (sindresorhus.com) @@ -2565,7 +2576,7 @@ No Copyright concat-stream@1.6.2 Copyright (c) 2013 Max Ogden -config-file-ts@0.2.4 +config-file-ts@0.2.6 Copyright (c) 2020 lee mighdoll connect@3.7.0 @@ -2608,17 +2619,17 @@ Copyright (c) 2014 Chris Talkington, contributors. cross-spawn@7.0.3 Copyright (c) 2018 Made With MOXY Lda -css-tree@1.0.0-alpha.39 -Copyright (C) 2016-2019 by Roman Dvornov +css-tree@2.3.1 +Copyright (C) 2016-2022 by Roman Dvornov csso@4.2.0 Copyright (C) 2015-2019 by Roman Dvornov Copyright (C) 2011-2015 by Sergey Kryzhanovsky -cssstyle@3.0.0 +cssstyle@4.0.1 Copyright (c) Chad Walker -data-urls@4.0.0 +data-urls@5.0.0 Copyright © Domenic Denicola debug@4.3.4 @@ -2681,29 +2692,26 @@ Copyright 2014 Liviu Grigorescu (grigoresculiviu@gmail.com) dir-glob@3.0.1 Copyright (c) Kevin Mårtensson (github.com/kevva) -dmg-builder@24.6.4 +dmg-builder@24.12.0 Copyright (c) 2015 Loopline Systems dmg-license@1.0.11 Copyright © 2019 argv-minus-one -dom-serializer@0.2.2 +dom-serializer@2.0.0 Copyright (c) 2014 The cheeriojs contributors -domexception@4.0.0 -Copyright © Domenic Denicola - ee-first@1.1.1 Copyright (c) 2014 Jonathan Ong me@jongleberry.com -electron@25.9.8 +electron@29.0.1 Copyright (c) Electron contributors Copyright (c) 2013-2020 GitHub Inc. -electron-builder@24.6.4 +electron-builder@24.12.0 Copyright (c) 2015 Loopline Systems -electron-publish@24.5.0 +electron-publish@24.9.4 Copyright (c) 2015 Loopline Systems emoji-regex@8.0.0 @@ -2744,7 +2752,7 @@ Copyright (c) 2015 Tiancheng "Timothy" Gu escape-string-regexp@4.0.0 Copyright (c) Sindre Sorhus (https://sindresorhus.com) -eslint@8.49.0 +eslint@8.57.0 Copyright OpenJS Foundation and other contributors, eslint-plugin-requirejs@4.0.1 @@ -2767,7 +2775,7 @@ Copyright (c) 2012, Joyent, Inc. All rights reserved. fast-deep-equal@3.1.3 Copyright (c) 2017 Evgeny Poberezkin -fast-glob@3.2.12 +fast-glob@3.3.2 Copyright (c) Denis Malinochkin fast-json-stable-stringify@2.1.0 @@ -2777,7 +2785,7 @@ Copyright (c) 2013 James Halliday fast-levenshtein@2.0.6 Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/) -faye-websocket@0.10.0 +faye-websocket@0.11.4 Copyright 2010-2021 James Coglan fd-slicer@1.1.0 @@ -2829,7 +2837,7 @@ Copyright (c) 2018 Mathias Buus fs-extra@9.1.0 Copyright (c) 2011-2017 JP Richardson -fs-extra@11.1.1 +fs-extra@11.2.0 Copyright (c) 2011-2017 JP Richardson fsevents@2.3.2 @@ -2871,7 +2879,7 @@ Copyright (c) Sindre Sorhus (https://sindresorhus.com) get-symbol-description@1.0.0 Copyright (c) 2021 Inspect JS -globals@13.21.0 +globals@13.24.0 Copyright (c) Sindre Sorhus (https://sindresorhus.com) globalthis@1.0.3 @@ -2919,13 +2927,13 @@ Copyright (c) Sindre Sorhus (https://sindresorhus.com) he@1.2.0 Copyright Mathias Bynens -html-encoding-sniffer@3.0.0 +html-encoding-sniffer@4.0.0 Copyright © Domenic Denicola html-escaper@2.0.2 Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection -htmlparser2@3.10.1 +htmlparser2@8.0.1 Copyright 2010, 2011, Chris Winberry . All rights reserved. http-basic@8.1.3 @@ -2941,16 +2949,16 @@ Copyright (c) 2015 Tim Caswell (https://github.com/creationix) and other http-proxy-agent@5.0.0 Copyright (c) 2013 Nathan Rajlich +http-proxy-agent@7.0.2 +Copyright (c) 2013 Nathan Rajlich + http-response-object@3.0.2 Copyright (c) 2014 Forbes Lindesay http2-wrapper@1.0.3 Copyright (c) 2018 Szymon Marczak -https-proxy-agent@7.0.2 -Copyright (c) 2013 Nathan Rajlich - -https-proxy-agent@5.0.1 +https-proxy-agent@7.0.4 Copyright (c) 2013 Nathan Rajlich iconv-corefoundation@1.1.7 @@ -2962,6 +2970,9 @@ Copyright (c) 2011 Alexander Shtuchkin iconv-lite@0.4.24 Copyright (c) 2011 Alexander Shtuchkin +ignore@5.3.1 +Copyright (c) 2013 Kael Zhang , contributors + ignore@5.2.4 Copyright (c) 2013 Kael Zhang , contributors @@ -3070,16 +3081,22 @@ Copyright (c) 2015-2018, Jon Schlinkert. is-wsl@1.1.0 Copyright (c) Sindre Sorhus (sindresorhus.com) -isbinaryfile@5.0.0 +isarray@1.0.0 +No Copyright + +isbinaryfile@5.0.2 Copyright (c) 2019 Garen J. Torikian +isobject@2.1.0 +Copyright (c) 2014-2016, Jon Schlinkert. + js-tokens@4.0.0 Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell js-yaml@4.1.0 Copyright (C) 2011-2015 by Vitaly Puzrin -jsdom@22.1.0 +jsdom@24.0.0 Copyright (c) 2010 Elijah Insua jsesc@2.5.2 @@ -3119,10 +3136,13 @@ Copyright (c) 2013 J. Pommerening, contributors. levn@0.4.1 Copyright (c) George Zahariev +line-column@1.0.2 +Copyright (c) 2016 IRIDE Monad + linkify-it@3.0.3 Copyright (c) 2015 Vitaly Puzrin. -livereload-js@2.4.0 +livereload-js@3.4.1 Copyright (c) 2010-2012 Andrey Tarantsov locate-path@6.0.0 @@ -3230,7 +3250,7 @@ Copyright Joyent, Inc. and other Node contributors. All rights reserved. mkdirp@1.0.4 Copyright James Halliday (mail@substack.net) and Isaac Z. Schlueter (i@izs.me) -mocha@10.2.0 +mocha@10.3.0 Copyright (c) 2011-2022 OpenJS Foundation and contributors, https://openjsf.org mock-http-server@1.4.2 @@ -3250,9 +3270,6 @@ Copyright (c) 2014 Douglas Christopher Wilson nanocolors@0.1.12 Copyright 2021 Jorge Bucaran , -nanoid@3.3.3 -Copyright 2017 Andrey Sitnik - natural-compare@1.4.0 Copyright (c) 2012-2015 Lauri Rooden @@ -3276,7 +3293,7 @@ Copyright (c) 2014-2018, Jon Schlinkert. normalize-url@6.1.0 Copyright (c) Sindre Sorhus (sindresorhus.com) -nwsapi@2.2.5 +nwsapi@2.2.7 Copyright (c) 2007-2019 Diego Perini (http://www.iport.it/) object-assign@4.1.1 @@ -3398,6 +3415,9 @@ Copyright (c) 2014 Mathias Buus punycode@2.3.0 Copyright Mathias Bynens +punycode@2.3.1 +Copyright Mathias Bynens + querystringify@2.2.0 Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. @@ -3430,6 +3450,9 @@ Copyright Node.js contributors. All rights reserved. readdirp@3.6.0 Copyright (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) +readline-sync@1.4.10 +Copyright (c) 2019 anseki + really-relaxed-json@0.2.24 Copyright (c) 2018 TwelveTone LLC @@ -3615,7 +3638,7 @@ Copyright (c) 2014 Forbes Lindesay through@2.3.8 Copyright (c) 2011 Dominic Tarr -tiny-lr@1.1.1 +tiny-lr@2.0.0 Copyright (c) 2012-2016 Mickael Daniel tmp@0.2.1 @@ -3637,11 +3660,11 @@ Copyright (c) 2015-present, Jon Schlinkert. toidentifier@1.0.1 Copyright (c) 2016 Douglas Christopher Wilson -tr46@4.1.1 +tr46@5.0.0 Copyright (c) Sebastian Mayr -tsutils@3.21.0 -Copyright (c) 2017 Klaus Meinhardt +ts-api-utils@1.2.1 +***** No Copyright Found ***** type-check@0.4.0 Copyright (c) George Zahariev @@ -3673,6 +3696,9 @@ Copyright (c) 2019 Jordan Harband underscore@1.13.6 Copyright (c) 2009-2022 Jeremy Ashkenas, Julian Gonggrijp, and DocumentCloud and Investigative Reporters & Editors +undici-types@5.26.5 +***** No Copyright Found ***** + universalify@2.0.0 Copyright (c) 2017, Ryan Zimmerman @@ -3700,19 +3726,19 @@ Copyright (c) 2014-2017 Douglas Christopher Wilson verror@1.10.1 Copyright (c) 2016, Joyent, Inc. All rights reserved. -w3c-xmlserializer@4.0.0 +w3c-xmlserializer@5.0.0 Copyright (c) Sebastian Mayr wcwidth@1.0.1 Copyright (C) 2012 by Jun Woong. -whatwg-encoding@2.0.0 +whatwg-encoding@3.1.1 Copyright © Domenic Denicola -whatwg-mimetype@3.0.0 +whatwg-mimetype@4.0.0 Copyright © Domenic Denicola -whatwg-url@12.0.1 +whatwg-url@14.0.0 Copyright (c) Sebastian Mayr which-boxed-primitive@1.0.2 @@ -3724,7 +3750,7 @@ Copyright (c) Sindre Sorhus (https://sindresorhus.com) wrap-ansi-cjs@7.0.0 Copyright (c) Sindre Sorhus (https://sindresorhus.com) -ws@8.13.0 +ws@8.16.0 Copyright (c) 2011 Einar Otto Stangvik Copyright (c) 2013 Arnout Kazemier and contributors Copyright (c) 2016 Luigi Pinca and contributors @@ -3785,6 +3811,9 @@ Copyright (c) 2019, Contributors @trysound/sax@0.2.0 Copyright (c) Isaac Z. Schlueter and Contributors +@ungap/structured-clone@1.2.0 +Copyright (c) 2021, Andrea Giammarchi, @WebReflection + anymatch@3.1.3 Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com) @@ -3830,7 +3859,7 @@ Copyright 2018 Stefan Penner glob@7.2.3 Copyright (c) Isaac Z. Schlueter and Contributors -glob@10.3.4 +glob@10.3.10 Copyright (c) 2009-2023 Isaac Z. Schlueter and Contributors glob-parent@6.0.2 @@ -3920,7 +3949,7 @@ Copyright (c) Isaac Z. Schlueter and Contributors test-exclude@6.0.0 Copyright (c) 2016, Contributors -which@3.0.1 +which@4.0.0 Copyright (c) Isaac Z. Schlueter and Contributors wrappy@1.0.2 @@ -3997,7 +4026,7 @@ The following packages are licensed under The 2-Clause BSD License, Version 2.0: Copyright (c) Electron contributors Copyright (c) 2015-2016 Zhuo Lu, Jason Hinkle, et al. -@typescript-eslint/typescript-estree@5.36.1 +@typescript-eslint/typescript-estree@6.13.2 Copyright JS Foundation and other contributors, https://js.foundation css-select@4.3.0 @@ -4006,13 +4035,13 @@ Copyright (c) Felix Böhm css-what@5.0.1 Copyright (c) Felix Böhm -domelementtype@1.3.1 +domelementtype@2.3.0 Copyright (c) Felix Böhm -domhandler@2.4.2 +domhandler@5.0.3 Copyright (c) Felix Böhm -domutils@1.7.0 +domutils@3.1.0 Copyright (c) Felix Böhm dotenv@9.0.2 @@ -4021,7 +4050,7 @@ Copyright (c) 2015, Scott Motte dotenv-expand@5.1.0 Copyright (c) 2016, Scott Motte -entities@1.1.2 +entities@4.5.0 Copyright (c) Felix Böhm eslint-scope@7.2.2 @@ -4031,7 +4060,7 @@ Copyright (C) 2012-2013 Yusuke Suzuki (twitter: @Constellation) and other contri espree@9.6.1 Copyright (c) Open JS Foundation -espree@9.4.0 +espree@9.5.2 Copyright (c) Open JS Foundation esrecurse@4.3.0 @@ -4052,7 +4081,7 @@ Copyright 2016-2018 Kornel Lesiński nth-check@2.1.1 Copyright (c) Felix Böhm -terser@5.14.2 +terser@5.19.4 Copyright 2012-2018 (c) Mihai Bazon uri-js@4.4.1 @@ -4093,7 +4122,7 @@ The following packages are licensed under Apache License, Version 2.0: @ampproject/remapping@2.2.0 Copyright 2019 Google LLC -@humanwhocodes/config-array@0.11.11 +@humanwhocodes/config-array@0.11.14 No Copyright @humanwhocodes/module-importer@1.0.1 @@ -4132,10 +4161,10 @@ Copyright (c) 2015-2018 Google, Inc., Netflix, Inc., Microsoft Corp. and contrib sumchecker@3.0.1 Copyright 2016, 2017, 2019, 2021 Mark Lee and contributors -typescript@4.9.5 +typescript@5.3.3 Copyright (c) Microsoft Corporation. All rights reserved. -typescript@4.1.2 +typescript@5.3.2 Copyright (c) Microsoft Corporation. All rights reserved. websocket-driver@0.7.4 @@ -4147,7 +4176,7 @@ Copyright 2014-2020 James Coglan workerpool@6.2.1 Copyright (C) 2014-2020 Jos de Jong wjosdejong@gmail.com -xml-name-validator@4.0.0 +xml-name-validator@5.0.0 No Copyright @@ -4323,12 +4352,9 @@ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION The following packages are licensed under The 3-Clause BSD License, Version 2.0: -@humanwhocodes/object-schema@1.2.1 +@humanwhocodes/object-schema@2.0.2 Copyright (c) 2019, Human Who Codes -abab@2.0.6 -Copyright © 2019 W3C and Jeff Carpenter \ - charenc@0.0.2 Copyright © 2011, Paul Vorbach. All rights reserved. Copyright © 2009, Jeff Mott. All rights reserved. @@ -4386,6 +4412,9 @@ Copyright 2014 Yahoo! Inc. source-map@0.6.1 Copyright (c) 2009-2011, Mozilla Foundation and contributors +source-map-js@1.0.2 +Copyright (c) 2009-2011, Mozilla Foundation and contributors + sprintf-js@1.1.2 Copyright (c) 2007-present, Alexandru Mărășteanu @@ -5170,14 +5199,14 @@ Creative Commons may be contacted at creativecommons.org. The following packages are licensed under The Universal Permissive License (UPL), Version 1.0: -@oracle/ojet-cli@14.1.0 -Copyright (c) 2023 Oracle and/or its affiliates. +@oracle/ojet-cli@16.0.0 +Copyright (c) 2024 Oracle and/or its affiliates. -@oracle/oraclejet-audit@14.1.14 +@oracle/oraclejet-audit@16.0.0 Copyright (c) 2019, 2024 Oracle and/or its affiliates -@oracle/oraclejet-tooling@14.1.2 -Copyright (c) 2023 Oracle and/or its affiliates. +@oracle/oraclejet-tooling@16.0.0 +Copyright (c) 2024 Oracle and/or its affiliates. The Universal Permissive License (UPL), Version 1.0 @@ -5232,7 +5261,7 @@ DEALINGS IN THE SOFTWARE. The following packages are licensed under ***** Unrecognized SPDX License Type BlueOak-1.0.0 *****: -jackspeak@2.3.3 +jackspeak@2.3.6 copyright in it. path-scurry@1.10.1 @@ -5424,7 +5453,7 @@ For more information, please see The following packages are licensed under CC0 1.0 Universal Public Domain Dedication: -mdn-data@2.0.6 +mdn-data@2.0.30 No Copyright @@ -5548,11 +5577,11 @@ For more information, please see -------------------------------------------------------------------------------- -@oracle/oraclejet-templates@14.1.1 +@oracle/oraclejet-templates@16.0.0 # Oracle JET -Copyright (c) 2023 Oracle and/or its affiliates. +Copyright (c) 2024 Oracle and/or its affiliates. The Universal Permissive License (UPL), Version 1.0 diff --git a/documentation/1.6/content/release/_index.md b/documentation/1.6/content/release/_index.md index 83ab96e6d..ba07757da 100644 --- a/documentation/1.6/content/release/_index.md +++ b/documentation/1.6/content/release/_index.md @@ -1,11 +1,11 @@ +++ title = "Release Notes" date = 2022-11-03T12:48:00-05:00 -weight = 88 +weight = 87 pre = " " +++ -### Changes in Release 1.6.2 +### Changes in Release 1.6.3 - [Major New Features](#major-new-features) - [Other Changes](#other-changes) - [Bugs Fixes](#bug-fixes) @@ -15,10 +15,10 @@ pre = " " None #### Other Changes -- #287 - Added support for WebLogic Kubernetes Operator domain specification's `precreateService` setting. +- #293 - Updated Model Design View to use WebLogic Remote Console 2.4.8 #### Bug Fixes -- #286 - Fixed an issue related to SSL termination and pass through Ingress resource generation. +None #### Known Issues - On Linux, the open and save dialogs open behind the main application window. This is due to diff --git a/documentation/1.6/content/release/release-1.5.2.md b/documentation/1.6/content/release/release-1.5.2.md index ff477def9..ae50e2a73 100644 --- a/documentation/1.6/content/release/release-1.5.2.md +++ b/documentation/1.6/content/release/release-1.5.2.md @@ -1,5 +1,5 @@ +++ -title = "Release Notes 1.5.2" +title = "Release 1.5.2" date = 2022-11-03T12:48:00-05:00 weight = 91 pre = " " diff --git a/documentation/1.6/content/release/release-1.5.3.md b/documentation/1.6/content/release/release-1.5.3.md index ef0c63a6e..ed79d00db 100644 --- a/documentation/1.6/content/release/release-1.5.3.md +++ b/documentation/1.6/content/release/release-1.5.3.md @@ -1,5 +1,5 @@ +++ -title = "Release Notes 1.5.3" +title = "Release 1.5.3" date = 2022-11-03T12:48:00-05:00 weight = 90 pre = " " diff --git a/documentation/1.6/content/release/release-1.6.0.md b/documentation/1.6/content/release/release-1.6.0.md index e5cac67fa..cb2fc6746 100644 --- a/documentation/1.6/content/release/release-1.6.0.md +++ b/documentation/1.6/content/release/release-1.6.0.md @@ -1,5 +1,5 @@ +++ -title = "Release Notes 1.6.0" +title = "Release 1.6.0" date = 2022-11-03T12:48:00-05:00 weight = 90 pre = " " diff --git a/documentation/1.6/content/release/release-1.6.1.md b/documentation/1.6/content/release/release-1.6.1.md index 091206ac7..8a69af441 100644 --- a/documentation/1.6/content/release/release-1.6.1.md +++ b/documentation/1.6/content/release/release-1.6.1.md @@ -1,5 +1,5 @@ +++ -title = "Release Notes 1.6.1" +title = "Release 1.6.1" date = 2022-11-03T12:48:00-05:00 weight = 89 pre = " " diff --git a/documentation/1.6/content/release/release-1.6.2.md b/documentation/1.6/content/release/release-1.6.2.md new file mode 100644 index 000000000..63a656fd9 --- /dev/null +++ b/documentation/1.6/content/release/release-1.6.2.md @@ -0,0 +1,30 @@ ++++ +title = "Release 1.6.2" +date = 2022-11-03T12:48:00-05:00 +weight = 88 +pre = " " ++++ + +### Changes in Release 1.6.2 +- [Major New Features](#major-new-features) +- [Other Changes](#other-changes) +- [Bugs Fixes](#bug-fixes) +- [Known Issues](#known-issues) + +#### Major New Features +None + +#### Other Changes +- #287 - Added support for WebLogic Kubernetes Operator domain specification's `precreateService` setting. + +#### Bug Fixes +- #286 - Fixed an issue related to SSL termination and pass through Ingress resource generation. + +#### Known Issues +- On Linux, the open and save dialogs open behind the main application window. This is due to + [Electron bug 32857](https://github.com/electron/electron/issues/32857). +- When deploying a Verrazzano application, the `Get Application Status` button only checks the status of the project's + Verrazzano component containing the WebLogic domain specification. +- Verrazzano installation does not support a multicluster installation. +- Verrazzano Application components Ingress Trait Rules table's URL column does not properly account for multicluster + applications. The Update URL button will only get information from the admin (i.e., `local`) cluster. diff --git a/electron/app/js/credentialManager.js b/electron/app/js/credentialManager.js index bd9c25282..45ef410b9 100644 --- a/electron/app/js/credentialManager.js +++ b/electron/app/js/credentialManager.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const CredentialEncryptor = require('./credentialEncryptor'); @@ -9,7 +9,6 @@ const { getLogger } = require('./wktLogging'); const DECRYPTION_FAILED_STRING = 'Unsupported state or unable to authenticate data'; -/* global Buffer */ class CredentialManager { constructor(credentialStorePolicy) { this.credentialStorePolicy = credentialStorePolicy; @@ -57,63 +56,17 @@ class CredentialManager { refObj.reference = { }; } const cipherText = refObj.reference[refObj.field]; - refObj.reference[refObj.field] = await this.manager.loadCredential(jsonPath, cipherText); + if (cipherText) { + refObj.reference[refObj.field] = await this.manager.loadCredential(jsonPath, cipherText); + } else { + logger.debug('Failed to load credential from %s so skipping it', jsonPath); + } } } return Promise.resolve(loadedProject); } } -class CredentialStoreManager extends CredentialManager { - constructor(projectGuid) { - super('native'); - const CredentialStore = require('./credentialStore'); - - this.projectGuid = projectGuid; - this.credentialStore = new CredentialStore(); - super.credentialManager = this; - } - - get credentialStoreType() { - return super.credentialStoreType; - } - - async storeCredentials(project) { - return super.storeCredentials(project); - } - - async loadCredentials(project) { - return super.loadCredentials(project); - } - - async storeCredential(jsonPath, clearText) { - return new Promise((resolve, reject) => { - if (clearText) { - this.credentialStore.storeCredential(this._getCredentialName(jsonPath), clearText) - .then(() => resolve()) - .catch(err => reject(new Error(`Failed to save credential for ${jsonPath}: ${err}`))); - } else { - this.credentialStore.deleteCredential(this._getCredentialName(jsonPath)) - .then(() => resolve()) - .catch(err => reject(new Error(`Failed to delete empty credential for ${jsonPath}: ${err}`))); - } - }); - } - - // eslint-disable-next-line no-unused-vars - async loadCredential(jsonPath, cipherText) { - return new Promise((resolve, reject) => { - this.credentialStore.getCredential(this._getCredentialName(jsonPath)) - .then(clearText => resolve(clearText)) - .catch(err => reject(new Error(`Failed to load credential for ${jsonPath}: ${err}`))); - }); - } - - _getCredentialName(jsonPath) { - return Buffer.from(`${this.projectGuid}:${jsonPath}`, 'utf8').toString('base64'); - } -} - class EncryptedCredentialManager extends CredentialManager { static BAD_PASSPHRASE_KEY = 'Incorrect passphrase'; @@ -199,6 +152,5 @@ class CredentialNoStoreManager extends CredentialManager { module.exports = { CredentialNoStoreManager, - CredentialStoreManager, EncryptedCredentialManager }; diff --git a/electron/app/js/ipcRendererPreload.js b/electron/app/js/ipcRendererPreload.js index 3ae32d939..92f0e03b7 100644 --- a/electron/app/js/ipcRendererPreload.js +++ b/electron/app/js/ipcRendererPreload.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const { contextBridge, ipcRenderer } = require('electron'); @@ -89,13 +89,6 @@ contextBridge.exposeInMainWorld( 'start-k8s-domain-deploy', 'start-k8s-domain-undeploy', 'start-get-k8s-domain-status', - 'start-verrazzano-install', - 'start-get-verrazzano-install-status', - 'start-deploy-verrazzano-component', - 'start-get-vz-application-status', - 'start-undeploy-verrazzano-component', - 'start-deploy-verrazzano-application', - 'start-undeploy-verrazzano-application', 'start-app-quit', 'start-window-close' ]; @@ -138,6 +131,7 @@ contextBridge.exposeInMainWorld( 'choose-java-home', 'choose-model-file', 'choose-oracle-home', + 'choose-private-key', 'choose-variable-file', 'choose-extra-path-directory', 'export-archive-file', @@ -219,29 +213,10 @@ contextBridge.exposeInMainWorld( 'openssl-generate-certs', 'validate-k8s-namespaces-exist', 'validate-wko-domain-exist', - 'validate-vz-application-exist', - 'vz-get-application-status', 'get-wrc-home-directory', 'get-wrc-app-image', 'wrc-get-home-default-value', 'wrc-set-home-and-start', - 'get-verrazzano-release-versions', - 'is-verrazzano-installed', - 'install-verrazzano-platform-operator', - 'verify-verrazzano-platform-operator-install', - 'install-verrazzano', - 'verify-verrazzano-install-status', - 'deploy-verrazzano-components', - 'undeploy-verrazzano-components', - 'get-verrazzano-component-names', - 'get-verrazzano-secret-names', - 'get-verrazzano-host-names', - 'get-verrazzano-cluster-names', - 'get-verrazzano-deployment-names-all-namespaces', - 'verify-verrazzano-components-exist', - 'deploy-verrazzano-project', - 'deploy-verrazzano-application', - 'undeploy-verrazzano-application', ]; return new Promise((resolve, reject) => { if (validChannels.includes(channel)) { diff --git a/electron/app/js/jsonPath.js b/electron/app/js/jsonPath.js index 84af7d08e..2658c1118 100644 --- a/electron/app/js/jsonPath.js +++ b/electron/app/js/jsonPath.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ function getJsonPathReference(jsonPath, jsonObject) { @@ -12,9 +12,12 @@ function getJsonPathReference(jsonPath, jsonObject) { for (const field of fields) { objectReference = traverseField(objectReference, field); + if (!objectReference) { + break; + } } - if (fieldName.includes('[') || fieldName.includes(']')) { + if (objectReference && (fieldName.includes('[') || fieldName.includes(']'))) { const lastArrayReferenceIndex = fieldName.lastIndexOf('['); const traversalFieldName = fieldName.slice(0, lastArrayReferenceIndex); objectReference = traverseField(objectReference, traversalFieldName); diff --git a/electron/app/js/kubectlUtils.js b/electron/app/js/kubectlUtils.js index d711c6c61..92b9c0d95 100644 --- a/electron/app/js/kubectlUtils.js +++ b/electron/app/js/kubectlUtils.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -17,9 +17,6 @@ const { getErrorMessage } = require('./errorUtils'); const osUtils = require('./osUtils'); const k8sUtils = require('./k8sUtils'); -const VZ_NOT_INSTALLED_ERROR_MESSAGE = 'the server doesn\'t have a resource type "Verrazzano"'; -const VZ_OPERATOR_SUCCESS_MESSAGE = 'deployment "verrazzano-platform-operator" successfully rolled out'; - /* global process */ async function validateKubectlExe(kubectlExe) { const results = { @@ -181,14 +178,6 @@ async function getWkoDomainStatus(kubectlExe, domainUID, domainNamespace, option }); } -// Currently, this call returns the status of the domain component with domainUID, similar to getWkoDomainStatus. -// In future releases, there may be additional information about the application and other components. -async function getApplicationStatus(kubectlExe, application, domainUID, namespace, options) { - const results = await getWkoDomainStatus(kubectlExe, domainUID, namespace, options); - results['application'] = application; - return results; -} - async function getOperatorStatus(kubectlExe, operatorNamespace, options) { const args = [ 'get', 'pods', '-n', operatorNamespace, '-o', 'json']; const httpsProxyUrl = getHttpsProxyUrl(); @@ -371,32 +360,6 @@ async function validateDomainExist(kubectlExe, options, domain, namespace) { return Promise.resolve(result); } -async function validateApplicationExist(kubectlExe, options, application, namespace) { - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: true, - isValid: true, - }; - - const args = [ 'get', 'appconfig', application, '-n', namespace ]; - - try { - await executeFileCommand(kubectlExe, args, env); - } catch (err) { - if (isNotFoundError(err)) { - result.isValid = false; - } else { - result.isSuccess = false; - result.reason = getErrorMessage(err); - return Promise.resolve(result); - } - } - return Promise.resolve(result); -} - async function isOperatorAlreadyInstalled(kubectlExe, operatorNamespace, options) { // We are currently using kubectl to see if the operator deployment exists. The operator deployment // name is always weblogic-operator... @@ -680,29 +643,6 @@ async function getIngresses(kubectlExe, namespace, serviceType, options) { }); } -async function applyUsingUrl(kubectlExe, dataUrl, options) { - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: true - }; - - return new Promise(resolve => { - const args = [ 'apply', '-f', dataUrl ]; - executeFileCommand(kubectlExe, args, env).then(stdout => { - result.message = stdout; - resolve(result); - }).catch(err => { - result.isSuccess = false; - result.reason = i18n.t('kubectl-apply-url-failed-error-message', { url: dataUrl, error: getErrorMessage(err) }); - resolve(result); - }); - }); -} - async function apply(kubectlExe, fileData, options) { const httpsProxyUrl = getHttpsProxyUrl(); const bypassProxyHosts = getBypassProxyHosts(); @@ -868,171 +808,6 @@ async function createOrReplaceSecret(kubectlExe, namespace, secret, createArgs, }); } -async function isVerrazzanoInstalled(kubectlExe, options) { - const getArgs = [ 'get', 'Verrazzano', '--output=json' ]; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - - const result = { - isInstalled: false - }; - - return new Promise(resolve => { - executeFileCommand(kubectlExe, getArgs, env).then(vzJson => { - const vzObjectList = JSON.parse(vzJson).items; - if (vzObjectList.length > 0) { - const vzObject = vzObjectList[0]; - result.isInstalled = true; - result.name = vzObject.metadata?.name; - - let statusVersion = vzObject.status?.version; - if (statusVersion?.startsWith('v')) { - statusVersion = statusVersion.slice(1); - } - result.version = statusVersion; - } - resolve(result); - }).catch(err => { - const error = getErrorMessage(err); - if (! error.includes(VZ_NOT_INSTALLED_ERROR_MESSAGE)) { - result.reason = i18n.t('kubectl-get-vz-install-failed-error-message', { error }); - } - resolve(result); - }); - }); -} - -async function verifyVerrazzanoPlatformOperatorRollout(kubectlExe, options) { - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: true - }; - - return new Promise(resolve => { - const args = [ 'rollout', 'status', 'deployment/verrazzano-platform-operator', '-n', 'verrazzano-install' ]; - executeFileCommand(kubectlExe, args, env).then(stdout => { - if (!stdout.includes(VZ_OPERATOR_SUCCESS_MESSAGE)) { - result.isSuccess = false; - result.reason = i18n.t('kubectl-verify-vz-operator-rollout-stdout-error-message', { message: stdout }); - } - resolve(result); - }).catch(err => { - result.isSuccess = false; - result.reason = i18n.t('kubectl-verify-vz-operator-rollout-error-message', { error: getErrorMessage(err) }); - resolve(result); - }); - }); -} - -async function getVerrazzanoInstallationObject(kubectlExe, kubectlOptions) { - const getArgs = [ 'get', 'Verrazzano', '--output=json' ]; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(kubectlOptions, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: false - }; - - return new Promise(resolve => { - executeFileCommand(kubectlExe, getArgs, env).then(vzJson => { - const vzObjectList = JSON.parse(vzJson).items; - if (vzObjectList.length > 0) { - const vzObject = vzObjectList[0]; - result.isSuccess = true; - result.payload = vzObject; - } - resolve(result); - }).catch(err => { - result.reason = getErrorMessage(err); - resolve(result); - }); - }); -} - -async function getKubernetesObjectsByNamespace(kubectlExe, kubectlOptions, type, namespace) { - const getArgs = [ 'get', type, '-n', namespace, '--output=json' ]; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(kubectlOptions, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: false - }; - - return new Promise(resolve => { - executeFileCommand(kubectlExe, getArgs, env).then(vzJson => { - result.isSuccess = true; - result.payload = JSON.parse(vzJson).items || []; - resolve(result); - }).catch(err => { - result.reason = getErrorMessage(err); - resolve(result); - }); - }); -} - -async function getKubernetesObjectsFromAllNamespaces(kubectlExe, kubectlOptions, type) { - const getArgs = [ 'get', type, '--all-namespaces', '--output=json' ]; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(kubectlOptions, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: false - }; - - return new Promise(resolve => { - executeFileCommand(kubectlExe, getArgs, env).then(vzJson => { - result.isSuccess = true; - result.payload = JSON.parse(vzJson).items || []; - resolve(result); - }).catch(err => { - result.reason = getErrorMessage(err); - resolve(result); - }); - }); -} - -async function verifyVerrazzanoComponentsDeployed(kubectlExe, componentNames, namespace, kubectlOptions) { - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - - const env = getKubectlEnvironment(kubectlOptions, httpsProxyUrl, bypassProxyHosts); - - const result = { - isSuccess: true - }; - - const missingComponentNames = []; - for (const componentName of componentNames) { - const args = [ 'get', 'Component', componentName, '-n', namespace ]; - try { - const stdout = await executeFileCommand(kubectlExe, args, env); - getLogger().debug('Found component %s in namespace %s: %s', componentName, namespace, stdout); - } catch (err) { - getLogger().warn('Error getting component %s in namespace %s: %s', componentName, namespace, getErrorMessage(err)); - missingComponentNames.push(componentName); - } - } - - if (missingComponentNames.length > 0) { - result.isSuccess = false; - result.reason = i18n.t('kubectl-verify-vz-components-deployed-error-message', - { namespace: namespace, missingComponents: missingComponentNames.join(', ')}); - } - return Promise.resolve(result); -} - async function doCreateSecret(kubectlExe, createArgs, env, namespace, secret, resolve, results, key) { executeFileCommand(kubectlExe, createArgs, env, true).then(() => { resolve(results); @@ -1044,96 +819,6 @@ async function doCreateSecret(kubectlExe, createArgs, env, namespace, secret, re }); } -async function getVerrazzanoIngressExternalAddress(kubectlExe, options) { - const gatewayService = 'istio-ingressgateway'; - const gatewayNamespace = 'istio-system'; - - const args = [ 'get', 'service', gatewayService, '-n', gatewayNamespace, '-o', 'json']; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - const results = { - isSuccess: true - }; - - return new Promise(resolve => { - executeFileCommand(kubectlExe, args, env).then(serviceJson => { - const service = JSON.parse(serviceJson); - const ingressArray = service.status?.loadBalancer?.ingress; - - if (Array.isArray(ingressArray) && ingressArray.length > 0) { - results.externalAddress = ingressArray[0].ip; - } - if (!results.externalAddress) { - results.reason = i18n.t('kubectl-get-vz-ingress-external-address-not-found', - { gatewayService, gatewayNamespace }); - } - resolve(results); - }).catch(err => { - results.isSuccess = false; - results.reason = - i18n.t('kubectl-get-vz-ingress-external-address-error-message', - { gatewayService, gatewayNamespace, error: getErrorMessage(err) }); - resolve(results); - }); - }); -} - -async function getVerrazzanoApplicationHostnames(kubectlExe, applicationName, applicationNamespace, options) { - const gatewayType = 'gateways.networking.istio.io'; - const appGatewayName = `${applicationNamespace}-${applicationName}-gw`; - - const args = [ 'get', gatewayType, appGatewayName, '-n', applicationNamespace, '-o', 'json']; - const httpsProxyUrl = getHttpsProxyUrl(); - const bypassProxyHosts = getBypassProxyHosts(); - const env = getKubectlEnvironment(options, httpsProxyUrl, bypassProxyHosts); - const results = { - isSuccess: true - }; - - return new Promise(resolve => { - // the external address will help to determine the generated application host name. - // this address is returned as the generated host name if no matching DNS name is found. - getVerrazzanoIngressExternalAddress(kubectlExe, options).then(externalAddressResults => { - if(!externalAddressResults.isSuccess) { - resolve(externalAddressResults); - return; - } - const externalAddress = externalAddressResults.externalAddress; - results.generatedHostname = externalAddress; - - executeFileCommand(kubectlExe, args, env).then(gatewayJson => { - const gateway = JSON.parse(gatewayJson); - const serversArray = gateway.spec?.servers; - if (Array.isArray(serversArray) && serversArray.length > 0) { - const hostsArray = serversArray[0].hosts; - if (Array.isArray(hostsArray) && hostsArray.length > 0) { - results.hostnames = hostsArray; - - // see if a DNS name contains the external address - for(const hostname of hostsArray) { - if(hostname.includes(externalAddress)) { - results.generatedHostname = hostname; - } - } - } - } - if (!results.hostnames) { - results.reason = i18n.t('kubectl-get-vz-app-hostnames-not-found', - { appName: applicationName, appNamespace: applicationNamespace }); - } - resolve(results); - }).catch(err => { - results.isSuccess = false; - results.reason = - i18n.t('kubectl-get-vz-app-hostnames-error-message', - { appName: applicationName, appNamespace: applicationNamespace, error: getErrorMessage(err) }); - resolve(results); - }); - }); - }); -} - function maskPasswordInCommand(err) { // How about other cases? return err.replace(/--docker-password=[^\s]+/, '--docker-password=*****'); @@ -1157,7 +842,6 @@ function _parseLogEntryAsJson(logEntry) { module.exports = { apply, - applyUsingUrl, createNamespaceIfNotExists, createNamespacesIfNotExists, createNamespaceLabelIfNotExists, @@ -1169,7 +853,6 @@ module.exports = { getCurrentContext, getOperatorVersion, isOperatorAlreadyInstalled, - isVerrazzanoInstalled, setCurrentContext, validateKubectlExe, deleteObjectIfExists, @@ -1177,18 +860,10 @@ module.exports = { getIngresses, getK8sConfigView, getK8sClusterInfo, - getVerrazzanoApplicationHostnames, getWkoDomainStatus, - getApplicationStatus, getOperatorStatus, getOperatorVersionFromDomainConfigMap, - getVerrazzanoInstallationObject, - getKubernetesObjectsByNamespace, - getKubernetesObjectsFromAllNamespaces, validateNamespacesExist, validateDomainExist, - validateApplicationExist, verifyClusterConnectivity, - verifyVerrazzanoComponentsDeployed, - verifyVerrazzanoPlatformOperatorRollout, }; diff --git a/electron/app/js/project.js b/electron/app/js/project.js index 45a135dca..868cb900d 100644 --- a/electron/app/js/project.js +++ b/electron/app/js/project.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const {app, dialog} = require('electron'); @@ -17,7 +17,7 @@ const fsUtils = require('./fsUtils'); const { getLogger } = require('./wktLogging'); const { sendToWindow } = require('./windowUtils'); const i18n = require('./i18next.config'); -const { CredentialStoreManager, EncryptedCredentialManager, CredentialNoStoreManager } = require('./credentialManager'); +const { EncryptedCredentialManager, CredentialNoStoreManager } = require('./credentialManager'); const errorUtils = require('./errorUtils'); const projectFileTypeKey = 'dialog-wktFileType'; @@ -376,17 +376,26 @@ async function _createNewProjectFile(targetWindow, projectFileName) { return new Promise((resolve) => { const projectContents = _addProjectIdentifiers(projectFileName, emptyProjectContents); const projectContentsJson = JSON.stringify(projectContents, null, 2); - writeFile(projectFileName, projectContentsJson, {encoding: 'utf8'}) - .then(() => { - _addOpenProject(targetWindow, projectFileName, false, new CredentialStoreManager(projectContents.uuid)); - sendToWindow(targetWindow, 'project-created', projectFileName, projectContents); - resolve(true); - }) - .catch(err => { + getCredentialPassphrase(targetWindow).then(passphrase => { + if (passphrase) { + writeFile(projectFileName, projectContentsJson, {encoding: 'utf8'}) + .then(() => { + _addOpenProject(targetWindow, projectFileName, false, new EncryptedCredentialManager(passphrase)); + sendToWindow(targetWindow, 'project-created', projectFileName, projectContents); + resolve(true); + }) + .catch(err => { + _showSaveError(projectFileName, err); + getLogger().error('Failed to save new project in file %s: %s', projectFileName, err); + resolve(false); + }); + } else { + const err = new Error('Passphrase is required but the user did not provide one.'); _showSaveError(projectFileName, err); getLogger().error('Failed to save new project in file %s: %s', projectFileName, err); resolve(false); - }); + } + }); }); } @@ -878,12 +887,7 @@ async function _createCredentialManager(targetWindow, projectFileJsonContent) { }) .catch(err => reject(new Error(`Failed to create passphrase credential manager: ${err}`))); } else { - let credentialManager; - if (credentialStorePolicy === 'native') { - credentialManager = new CredentialStoreManager(projectFileJsonContent.uuid); - } else { - credentialManager = new CredentialNoStoreManager(); - } + const credentialManager = new CredentialNoStoreManager(); _setCredentialManager(targetWindow, credentialManager); resolve(credentialManager); } @@ -893,6 +897,7 @@ async function _createCredentialManager(targetWindow, projectFileJsonContent) { async function _getCredentialManagerForSavingProject(targetWindow, projectContents) { const currentProjectCredentialStorePolicy = _getProjectCredentialStorePolicy(projectContents); const windowCredentialManager = _getCredentialManager(targetWindow); + if (!windowCredentialManager || windowCredentialManager.credentialStoreType !== currentProjectCredentialStorePolicy) { try { await _createCredentialManager(targetWindow, projectContents); @@ -904,7 +909,7 @@ async function _getCredentialManagerForSavingProject(targetWindow, projectConten } function _getProjectCredentialStorePolicy(projectContents) { - let currentCredentialStorePolicy = 'native'; + let currentCredentialStorePolicy = 'passphrase'; if (projectContents && 'settings' in projectContents && 'credentialStorePolicy' in projectContents['settings'] && projectContents['settings']['credentialStorePolicy']) { diff --git a/electron/app/js/vzInstaller.js b/electron/app/js/vzInstaller.js deleted file mode 100644 index 3b2c922c1..000000000 --- a/electron/app/js/vzInstaller.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -const githubUtils = require('./githubUtils'); -const kubectlUtils = require('./kubectlUtils'); -const i18n = require('./i18next.config'); -const { compareVersions } = require('./versionUtils'); -const {getLogger} = require('./wktLogging'); - -const VZ_BASE_API_URL = 'https://api.github.com/repos/verrazzano/verrazzano'; -const VZ_BASE_URL = 'https://github.com/verrazzano/verrazzano'; - -async function getVerrazzanoReleaseVersions(minVersion = '1.3.0') { - return new Promise(resolve => { - githubUtils.getReleaseVersions('Verrazzano', VZ_BASE_API_URL).then(results => { - const mappedResults = []; - results.forEach(result => { - const version = getVersionFromTag(result.tag); - // Filter out versions less than the minimum we want to support... - if (compareVersions(version, minVersion) >= 0) { - mappedResults.push({ ...result, version }); - } - }); - resolve(mappedResults); - }); - }); -} - -async function isVerrazzanoInstalled(kubectlExe, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.isVerrazzanoInstalled(kubectlExe, kubectlOptions).then(vzInstallData => { - if (vzInstallData.isInstalled) { - _normalizeVersionData(vzInstallData); - } - resolve(vzInstallData); - }); - }); -} - -async function installVerrazzanoPlatformOperator(kubectlExe, k8sOptions, vzOptions) { - let platformOperatorUrl; - - if (vzOptions.tag) { - const version = vzOptions.tag.slice(1); - getLogger().debug('installVerrazzanoPlatformOperator: vzOptions.tag = %s and version = %s', vzOptions.tag, version); - if (compareVersions(version, '1.4.0') >= 0) { - platformOperatorUrl = `${VZ_BASE_URL}/releases/download/${vzOptions.tag}/verrazzano-platform-operator.yaml`; - } else { - // Before Verrazzano 1.4, the operator file name was operator.yaml... - // - platformOperatorUrl = `${VZ_BASE_URL}/releases/download/${vzOptions.tag}/operator.yaml`; - } - } else { - platformOperatorUrl = `${VZ_BASE_URL}/releases/latest/verrazzano-platform-operator.yaml`; - } - - return new Promise(resolve => { - kubectlUtils.applyUsingUrl(kubectlExe, platformOperatorUrl, k8sOptions).then(result => resolve(result)); - }); -} - -// eslint-disable-next-line no-unused-vars -async function verifyVerrazzanoPlatformOperatorInstall(kubectlExe, k8sOptions, _vzOptions) { - return kubectlUtils.verifyVerrazzanoPlatformOperatorRollout(kubectlExe, k8sOptions); -} - -async function installVerrazzano(kubectlExe, k8sOptions, verrazzanoResource) { - return new Promise(resolve => { - kubectlUtils.verifyVerrazzanoPlatformOperatorRollout(kubectlExe, k8sOptions).then(verifyResult => { - if (!verifyResult.isSuccess) { - verifyResult.reason = i18n.t('vz-installer-operator-not-ready-error-message', verifyResult.reason); - return resolve(verifyResult); - } - - kubectlUtils.apply(kubectlExe, verrazzanoResource, k8sOptions).then(applyResult => { - resolve(applyResult); - }); - }); - }); -} - -async function verifyVerrazzanoInstallStatus(kubectlExe, k8sOptions, vzOptions) { - const status = { - isSuccess: true, - isComplete: false, - }; - - return new Promise(resolve => { - kubectlUtils.getVerrazzanoInstallationObject(kubectlExe, k8sOptions).then(result => { - if (!result.isSuccess) { - status.isSuccess = false; - - // Two possible cases: - // 1. Verrazzano CRD is not installed - // 2. Some lower-level error in finding the Verrazzano object - // - if (_isVerrazzanoDefinitionNotFound(result.reason)) { - status.reason = i18n.t('vz-installer-check-install-status-no-resource-error-message'); - } else { - status.reason = i18n.t('vz-installer-check-install-status-failed-error-message', { name: vzOptions.name, error: result.reason }); - } - } else { - // Two possible scenarios: - // 1. Verrazzano installed but under a different name (this is a failure condition). - // 2. Verrazzano installed with the same name. - // - const vzObject = result.payload; - _getStatusFromConditions(result.payload, status); - if (vzOptions.name !== vzObject.metadata?.name) { - status.isSuccess = false; - status.reason = i18n.t('vz-installer-check-install-status-mismatched-names-error-message', - { name: vzObject.metadata?.name, version: status.version }); - } - } - resolve(status); - }); - }); -} - -function _isVerrazzanoDefinitionNotFound(vzErrorMessage) { - return vzErrorMessage.includes('server doesn\'t have a resource type "verrazzano"'); -} - -function _getStatusFromConditions(vzObject, status) { - const version = vzObject.status?.version; - const conditions = vzObject.status?.conditions || []; - - let latestCondition; - let latestConditionTime = 0; - for (const condition of conditions) { - const conditionTime = _convertTimeStringToTime(condition['lastTransitionTime']) || 0; - if (conditionTime > latestConditionTime) { - latestConditionTime = conditionTime; - latestCondition = condition; - } - } - - status.payload = latestCondition; - if (latestCondition && - (latestCondition.type === 'InstallComplete' || latestCondition.type === 'UpgradeComplete') && - Boolean(latestCondition.status)) { - status.isComplete = true; - status.version = version; - _normalizeVersionData(status); - } -} - -function _convertTimeStringToTime(str) { - if (typeof str === 'string') { - return new Date(str).getTime(); - } else if (typeof str === 'object' && typeof str.getTime === 'function') { - return str.getTime(); - } else { - return str; - } -} - -function getVersionFromTag(tag) { - return tag.slice(1); -} - -function getTagFromVersion(version) { - return `v${version}`; -} - -function _normalizeVersionData(vzInstallData) { - if (vzInstallData.version) { - const firstDashIndex = vzInstallData.version.indexOf('-'); - if (firstDashIndex !== -1) { - vzInstallData.version = vzInstallData.version.substring(0, firstDashIndex); - vzInstallData.tag = getTagFromVersion(vzInstallData.version); - } - } -} - -module.exports = { - getVerrazzanoReleaseVersions, - installVerrazzano, - installVerrazzanoPlatformOperator, - isVerrazzanoInstalled, - verifyVerrazzanoInstallStatus, - verifyVerrazzanoPlatformOperatorInstall, -}; diff --git a/electron/app/js/vzUtils.js b/electron/app/js/vzUtils.js deleted file mode 100644 index 3a9f0f16c..000000000 --- a/electron/app/js/vzUtils.js +++ /dev/null @@ -1,135 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -const kubectlUtils = require('./kubectlUtils'); -const { getLogger } = require('./wktLogging'); - -async function deployComponents(kubectlExe, components, kubectlOptions) { - if (!Array.isArray(components)) { - components = [components]; - } - - let result = { isSuccess: true }; - for (const component of components) { - result = await kubectlUtils.apply(kubectlExe, component, kubectlOptions); - if (!result.isSuccess) { - break; - } - } - return Promise.resolve(result); -} - -async function undeployComponents(kubectlExe, componentNames, namespace, kubectlOptions) { - if (!Array.isArray(componentNames)) { - componentNames = [ componentNames ]; - } - - let result = { isSuccess: true }; - for (const componentName of componentNames) { - result = await kubectlUtils.deleteObjectIfExists(kubectlExe, namespace, componentName, 'Component', kubectlOptions); - if (!result.isSuccess) { - break; - } - } - return Promise.resolve(result); -} - -async function deployProject(kubectlExe, project, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.apply(kubectlExe, project, kubectlOptions).then(result => resolve(result)); - }); -} - -async function deployApplication(kubectlExe, application, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.apply(kubectlExe, application, kubectlOptions).then(result => resolve(result)); - }); -} - -async function undeployApplication(kubectlExe, isMultiClusterApplication, applicationName, namespace, kubectlOptions) { - const kind = isMultiClusterApplication ? 'MultiClusterApplicationConfiguration' : 'ApplicationConfiguration'; - - return new Promise(resolve => { - kubectlUtils.deleteObjectIfExists(kubectlExe, namespace, applicationName, kind, kubectlOptions).then(result => resolve(result)); - }); -} - -async function getComponentNamesByNamespace(kubectlExe, namespace, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.getKubernetesObjectsByNamespace(kubectlExe, kubectlOptions, 'component', namespace).then(result => { - if (!result.isSuccess) { - return resolve(result); - } - - result.payload = result.payload.map(component => component.metadata?.name); - resolve(result); - }); - }); -} - -async function getSecretNamesByNamespace(kubectlExe, namespace, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.getKubernetesObjectsByNamespace(kubectlExe, kubectlOptions, 'secret', namespace).then(result => { - if (!result.isSuccess) { - return resolve(result); - } - - result.payload = result.payload.map(secret => secret.metadata?.name); - resolve(result); - }); - }); -} - -async function getHostNames(kubectlExe, applicationName, applicationNamespace, options) { - return new Promise(resolve => { - kubectlUtils.getVerrazzanoApplicationHostnames(kubectlExe, applicationName, applicationNamespace, options).then(result => { - if (!result.isSuccess) { - return resolve(result); - } - resolve(result); - }); - }); -} - -async function getVerrazzanoClusterNames(kubectlExe, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.getKubernetesObjectsByNamespace(kubectlExe, kubectlOptions, 'VerrazzanoManagedCluster', 'verrazzano-mc').then(result => { - if (!result.isSuccess) { - return resolve(result); - } - - result.payload = result.payload.map(vmc => vmc.metadata?.name); - result.payload.splice(0, 0, 'local'); - getLogger().debug('Found verrazzano clusters: %s', result.payload); - resolve(result); - }); - }); -} - -async function getDeploymentNamesFromAllNamespaces(kubectlExe, kubectlOptions) { - return new Promise(resolve => { - kubectlUtils.getKubernetesObjectsFromAllNamespaces(kubectlExe, kubectlOptions, 'deployment').then(result => { - if (!result.isSuccess) { - return resolve(result); - } - - result.payload = result.payload.map(deployment => `${deployment.metadata.namespace}/${deployment.metadata.name}`); - resolve(result); - }); - }); -} - -module.exports = { - deployApplication, - deployComponents, - deployProject, - getComponentNamesByNamespace, - getDeploymentNamesFromAllNamespaces, - getHostNames, - getSecretNamesByNamespace, - getVerrazzanoClusterNames, - undeployApplication, - undeployComponents, -}; diff --git a/electron/app/js/wdtArchive.js b/electron/app/js/wdtArchive.js index b4afe6ba1..c6e4b9c9f 100644 --- a/electron/app/js/wdtArchive.js +++ b/electron/app/js/wdtArchive.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ @@ -60,7 +60,7 @@ function getEntryTypes() { extensions: ['xml'], fileLabel: i18n.t('wdt-archiveType-coherenceConfig-fileLabel'), fileHelp: i18n.t('wdt-archiveType-coherenceConfig-fileHelp'), - pathPrefix: 'wlsdeploy/coherence/' + pathPrefix: 'config/wlsdeploy/coherence/' }, 'coherencePersistenceDirectory': { name: i18n.t('wdt-archiveType-coherenceStore'), @@ -85,7 +85,7 @@ function getEntryTypes() { fileHelp: i18n.t('wdt-archiveType-custom-fileHelp'), pathLabel: i18n.t('wdt-archiveType-custom-pathLabel'), pathHelp: i18n.t('wdt-archiveType-custom-pathHelp'), - pathPrefix: 'wlsdeploy/custom/' + pathPrefix: 'config/wlsdeploy/custom/' }, 'databaseWallet': { name: i18n.t('wdt-archiveType-databaseWallet'), @@ -96,7 +96,7 @@ function getEntryTypes() { dirHelp: i18n.t('wdt-archiveType-databaseWallet-dirHelp'), fileLabel: i18n.t('wdt-archiveType-databaseWallet-fileLabel'), fileHelp: i18n.t('wdt-archiveType-databaseWallet-fileHelp'), - pathPrefix: 'wlsdeploy/dbWallets/' + pathPrefix: 'config/wlsdeploy/dbWallets/' }, 'domainBin': { name: i18n.t('wdt-archiveType-domainBin'), @@ -128,7 +128,7 @@ function getEntryTypes() { extensions: ['properties'], fileLabel: i18n.t('wdt-archiveType-jmsForeignServerBinding-fileLabel'), fileHelp: i18n.t('wdt-archiveType-jmsForeignServerBinding-fileHelp'), - pathPrefix: 'wlsdeploy/jms/foreignServer/' + pathPrefix: 'config/wlsdeploy/jms/foreignServer/' }, 'mimeMapping': { name: i18n.t('wdt-archiveType-mimeMapping'), @@ -136,14 +136,14 @@ function getEntryTypes() { extensions: ['properties'], fileLabel: i18n.t('wdt-archiveType-mimeMapping-fileLabel'), fileHelp: i18n.t('wdt-archiveType-mimeMapping-fileHelp'), - pathPrefix: 'wlsdeploy/config/' + pathPrefix: 'config/wlsdeploy/config/' }, 'nodeManagerKeystore': { name: i18n.t('wdt-archiveType-nodeManagerKeystore'), subtype: 'file', fileLabel: i18n.t('wdt-archiveType-nodeManagerKeystore-fileLabel'), fileHelp: i18n.t('wdt-archiveType-nodeManagerKeystore-fileHelp'), - pathPrefix: 'wlsdeploy/nodeManager/' + pathPrefix: 'config/wlsdeploy/nodeManager/' }, 'opssWallet': { name: i18n.t('wdt-archiveType-opssWallet'), @@ -166,7 +166,7 @@ function getEntryTypes() { subtype: 'file', fileLabel: i18n.t('wdt-archiveType-script-fileLabel'), fileHelp: i18n.t('wdt-archiveType-script-fileHelp'), - pathPrefix: 'wlsdeploy/scripts/' + pathPrefix: 'config/wlsdeploy/scripts/' }, 'serverKeystore': { name: i18n.t('wdt-archiveType-serverKeystore'), @@ -175,7 +175,7 @@ function getEntryTypes() { segregatedHelp: i18n.t('wdt-archiveType-serverSegregationHelp'), fileLabel: i18n.t('wdt-archiveType-serverKeystore-fileLabel'), fileHelp: i18n.t('wdt-archiveType-serverKeystore-fileHelp'), - pathPrefix: 'wlsdeploy/servers/' + pathPrefix: 'config/wlsdeploy/servers/' }, 'sharedLibrary': { name: i18n.t('wdt-archiveType-sharedLibrary'), diff --git a/electron/app/js/wdtDiscovery.js b/electron/app/js/wdtDiscovery.js index 44100a697..657211857 100644 --- a/electron/app/js/wdtDiscovery.js +++ b/electron/app/js/wdtDiscovery.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const path = require('path'); @@ -65,8 +65,9 @@ async function _runDiscover(targetWindow, discoverConfig, online) { argList.push(discoverConfig['oracleHome']); argList.push('-java_home'); argList.push(discoverConfig['javaHome']); - argList.push('-domain_home'); - argList.push(discoverConfig['domainHome']); + + addArgumentIfPresent(discoverConfig['domainHome'], '-domain_home', argList); + argList.push('-domain_type'); argList.push(discoverConfig['domainType']); @@ -79,6 +80,13 @@ async function _runDiscover(targetWindow, discoverConfig, online) { argList.push(discoverConfig['adminPass']); } + addArgumentIfPresent(discoverConfig['sshHost'], '-ssh_host', argList); + addArgumentIfPresent(discoverConfig['sshPort'], '-ssh_port', argList); + addArgumentIfPresent(discoverConfig['sshUser'], '-ssh_user', argList); + addArgumentIfPresent(discoverConfig['sshPassword'], '-ssh_pass', argList); + addArgumentIfPresent(discoverConfig['sshPrivateKey'], '-ssh_private_key', argList); + addArgumentIfPresent(discoverConfig['sshPrivateKeyPassphrase'], '-ssh_private_key_pass', argList); + const isRemote = discoverConfig['isRemote']; if (!isRemote) { argList.push('-archive_file'); @@ -144,6 +152,13 @@ async function _runDiscover(targetWindow, discoverConfig, online) { return Promise.resolve(results); } +function addArgumentIfPresent(value, argName, argList) { + if(value) { + argList.push(argName); + argList.push(value); + } +} + module.exports = { runOfflineDiscover, runOnlineDiscover, diff --git a/electron/app/js/wdtPrepareModel.js b/electron/app/js/wdtPrepareModel.js index b8b227e07..0677bd7fa 100644 --- a/electron/app/js/wdtPrepareModel.js +++ b/electron/app/js/wdtPrepareModel.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -45,7 +45,7 @@ async function prepareModel(currentWindow, stdoutChannel, stderrChannel, prepare // const env = { JAVA_HOME: javaHome, - WDT_CUSTOM_CONFIG: getWdtCustomConfigDirectory() + WLSDEPLOY_CUSTOM_CONFIG: getWdtCustomConfigDirectory() }; if (logger.isDebugEnabled()) { diff --git a/electron/app/js/wdtValidateModel.js b/electron/app/js/wdtValidateModel.js index 48d077676..264a14e76 100644 --- a/electron/app/js/wdtValidateModel.js +++ b/electron/app/js/wdtValidateModel.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2022, Oracle and/or its affiliates. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -42,7 +42,7 @@ async function validateModel(currentWindow, stdoutChannel, stderrChannel, valida const env = { JAVA_HOME: javaHome, - WDT_CUSTOM_CONFIG: getWdtCustomConfigDirectory() + WLSDEPLOY_CUSTOM_CONFIG: getWdtCustomConfigDirectory() }; const wktLogger = getLogger(); diff --git a/electron/app/js/wktLogging.js b/electron/app/js/wktLogging.js index e43c2857f..e6457e39a 100644 --- a/electron/app/js/wktLogging.js +++ b/electron/app/js/wktLogging.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const path = require('path'); @@ -188,7 +188,7 @@ function getRotatingFileTransport(fileLogConfig) { _logFileName = newFilename; // this _logger call is safe only because it happens after the logger has been initialized. // - _logger.notice(`Log file rotated from ${oldFilename} to ${newFilename}`); + _logger.info(`Log file rotated from ${oldFilename} to ${newFilename}`); }); return fileTransport; diff --git a/electron/app/js/wktWindow.js b/electron/app/js/wktWindow.js index 940f5fd3b..44994151c 100644 --- a/electron/app/js/wktWindow.js +++ b/electron/app/js/wktWindow.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const { app, BrowserWindow, dialog, Menu, shell } = require('electron'); @@ -39,7 +39,7 @@ class WktAppMenu { // hasOpenDialog: the focused window has a dialog displayed this._hasOpenDialog = getWindowStatus(window, 'hasOpenDialog'); - // targetType: the target type for the window, such as 'wko', 'vz' + // targetType: the target type for the window, such as 'wko' const targetType = getWindowStatus(window, 'targetType'); this._isWkoTarget = targetType === 'wko'; @@ -363,7 +363,6 @@ class WktAppMenu { { id: 'installOperator', label: i18n.t('menu-go-install-operator'), - visible: this._isWkoTarget, enabled: !this._hasOpenDialog, click(item, focusedWindow) { if (!focusedWindow) { @@ -378,7 +377,6 @@ class WktAppMenu { { id: 'updateOperator', label: i18n.t('menu-go-update-operator'), - visible: this._isWkoTarget, enabled: !this._hasOpenDialog, click(item, focusedWindow) { if (!focusedWindow) { @@ -393,7 +391,6 @@ class WktAppMenu { { id: 'uninstallOperator', label: i18n.t('menu-go-uninstall-operator'), - visible: this._isWkoTarget, enabled: !this._hasOpenDialog, click(item, focusedWindow) { if (!focusedWindow) { @@ -408,7 +405,6 @@ class WktAppMenu { { id: 'deployDomain', label: i18n.t('menu-go-deploy-domain'), - visible: this._isWkoTarget, enabled: !this._hasOpenDialog, click(item, focusedWindow) { if (!focusedWindow) { @@ -423,7 +419,6 @@ class WktAppMenu { { id: 'domainStatus', label: i18n.t('menu-go-domain-status'), - visible: this._isWkoTarget, enabled: !this._hasOpenDialog, click(item, focusedWindow) { if (!focusedWindow) { @@ -495,112 +490,6 @@ class WktAppMenu { sendToWindow(focusedWindow,'start-ingress-uninstall'); } }, - // Verrazzano-related Go menu items - { - id: 'installVerrazzano', - label: i18n.t('menu-go-install-verrazzano'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-install-verrazzano-error-title'), - i18n.t('menu-go-install-verrazzano-error-message') - ); - } - sendToWindow(focusedWindow,'start-verrazzano-install'); - } - }, - { - id: 'installVerrazzanoStatus', - label: i18n.t('menu-go-install-verrazzano-status'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-install-verrazzano-status-error-title'), - i18n.t('menu-go-install-verrazzano-status-error-message') - ); - } - sendToWindow(focusedWindow,'start-get-verrazzano-install-status'); - } - }, - { - id: 'deployVerrazzanoComponent', - label: i18n.t('menu-go-deploy-verrazzano-component'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-deploy-verrazzano-component-error-title'), - i18n.t('menu-go-deploy-verrazzano-component-error-message') - ); - } - sendToWindow(focusedWindow,'start-deploy-verrazzano-component'); - } - }, - { - id: 'undeployVerrazzanoComponent', - label: i18n.t('menu-go-undeploy-verrazzano-component'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-undeploy-verrazzano-component-error-title'), - i18n.t('menu-go-undeploy-verrazzano-component-error-message') - ); - } - sendToWindow(focusedWindow,'start-undeploy-verrazzano-component'); - } - }, - { - id: 'deployVerrazzanoApplication', - label: i18n.t('menu-go-deploy-verrazzano-application'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-deploy-verrazzano-application-error-title'), - i18n.t('menu-go-deploy-verrazzano-application-error-message') - ); - } - sendToWindow(focusedWindow,'start-deploy-verrazzano-application'); - } - }, - { - id: 'checkVerrazzanoApplicationStatus', - label: i18n.t('menu-go-check-verrazzano-application-status'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-check-verrazzano-application-status-error-title'), - i18n.t('menu-go-check-verrazzano-application-status-error-message') - ); - } - sendToWindow(focusedWindow, 'start-get-vz-application-status'); - } - }, - { - id: 'undeployVerrazzanoApplication', - label: i18n.t('menu-go-undeploy-verrazzano-application'), - visible: !this._isWkoTarget, - enabled: !this._hasOpenDialog, - click(item, focusedWindow) { - if (!focusedWindow) { - return dialog.showErrorBox( - i18n.t('menu-go-undeploy-verrazzano-application-error-title'), - i18n.t('menu-go-undeploy-verrazzano-application-error-message') - ); - } - sendToWindow(focusedWindow,'start-undeploy-verrazzano-application'); - } - }, ] }, { diff --git a/electron/app/locales/en/electron.json b/electron/app/locales/en/electron.json index cd2769f12..48dd09411 100644 --- a/electron/app/locales/en/electron.json +++ b/electron/app/locales/en/electron.json @@ -84,27 +84,6 @@ "menu-go-uninstall-ingress": "Uninstall Ingress Controller", "menu-go-uninstall-ingress-error-title": "No Active Project Window", "menu-go-uninstall-ingress-error-message": "Cannot uninstall Ingress Controller since there is no active window, and therefore no ingress controller configuration to uninstall.", - "menu-go-install-verrazzano": "Install Verrazzano", - "menu-go-install-verrazzano-error-title": "No Active Project Window", - "menu-go-install-verrazzano-error-message": "Cannot install Verrazzano since there is no active window, and therefore no project with the Verrazzano configuration to install.", - "menu-go-install-verrazzano-status": "Get Verrazzano Installation Status", - "menu-go-install-verrazzano-status-error-title": "No Active Project Window", - "menu-go-install-verrazzano-status-error-message": "Cannot get Verrazzano installation status since there is no active window, and therefore no project with a Verrazzano configuration to install.", - "menu-go-deploy-verrazzano-component": "Deploy Verrazzano Component", - "menu-go-deploy-verrazzano-component-error-title": "No Active Project Window", - "menu-go-deploy-verrazzano-component-error-message": "Cannot deploy Verrazzano component since there is no active window, and therefore no project with the Verrazzano component configuration to deploy.", - "menu-go-undeploy-verrazzano-component": "Undeploy Verrazzano Component", - "menu-go-undeploy-verrazzano-component-error-title": "No Active Project Window", - "menu-go-undeploy-verrazzano-component-error-message": "Cannot undeploy Verrazzano component since there is no active window, and therefore no project with the Verrazzano component configuration to undeploy.", - "menu-go-deploy-verrazzano-application": "Deploy Verrazzano Application", - "menu-go-deploy-verrazzano-application-error-title": "No Active Project Window", - "menu-go-deploy-verrazzano-application-error-message": "Cannot deploy Verrazzano application since there is no active window, and therefore no project with the Verrazzano application configuration to deploy.", - "menu-go-check-verrazzano-application-status": "Check Verrazzano Application Status", - "menu-go-check-verrazzano-application-status-error-title": "No Active Project Window", - "menu-go-check-verrazzano-application-status-error-message": "Cannot check Verrazzano application status since there is no active window, and therefore no project with the Verrazzano application configuration to check.", - "menu-go-undeploy-verrazzano-application": "Undeploy Verrazzano Application", - "menu-go-undeploy-verrazzano-application-error-title": "No Active Project Window", - "menu-go-undeploy-verrazzano-application-error-message": "Cannot undeploy Verrazzano application since there is no active window, and therefore no project with the Verrazzano application configuration to undeploy.", "menu-window": "Window", "menu-window-minimize": "Minimize", @@ -142,6 +121,7 @@ "dialog-chooseArchiveFile": "Select an Archive File", "dialog-chooseModelFile": "Select a Model File", + "dialog-choosePrivateKey": "Select a Private Key File", "dialog-chooseProjectSaveFile": "Save Project", "dialog-chooseVariableFile": "Select a Variable File", "dialog-getJdkInstaller": "Select JDK Installer", @@ -317,8 +297,6 @@ "kubectl-apply-write-file-failed-error-message": "Unable to run kubectl apply due to an error writing the data to a temporary file: {{error}}", "kubectl-apply-failed-error-message": "kubectl apply command failed: {{error}}", "kubectl-apply-url-failed-error-message": "kubectl apply command from {{url}} failed: {{error}}", - "kubectl-verify-vz-operator-rollout-stdout-error-message": "Verrazzano platform operator rollout status did not return expected text: {{message}}", - "kubectl-verify-vz-operator-rollout-error-message": "Verrazzano platform operator rollout status check failed: {{error}}", "kubectl-label-get-ns-failed-error-message": "Unable to add label {{label}} to Kubernetes namespace {{namespace}} due to an error while getting the existing labels for the namespace: {{error}}", "kubectl-label-ns-failed-error-message": "Unable to add labels {{labels}} to Kubernetes namespace {{namespace}} due to an error: {{error}}", "kubectl-delete-object-failed-error-message": "Failed to delete {{object}} in {{namespace}}, reason: {{error}}", @@ -336,15 +314,7 @@ "kubectl-tlsfile-not-specified-error-message": "TLS file path was not provided", "kubectl-tlsfile-not-exists-error-message": "TLS file {{filePath}} does not exist", "kubectl-tlsfile-failed-error-message": "Unable to verify TLS file {{filePath}} exists: {{error}}", - "kubectl-get-vz-install-failed-error-message": "Unable to get Verrazzano installation: {{error}}", - "kubectl-get-named-vz-install-error-message": "Unable to get Verrazzano installation with name {{name}}: {{error}}", - "kubectl-get-vz-application-status-error-message": "Unable to get Verrazzano application status: {{error}}", "kubectl-get-operator-version-not-found-error-message": "Failed to find the operator version from its log entries", - "kubectl-verify-vz-components-deployed-error-message": "Unable to find one or more components in namespace {{namespace}}: {{missingComponents}}", - "kubectl-get-vz-ingress-external-address-not-found": "Unable to find the External IP Address in the Istio Gateway service {{gatewayService}} in Kubernetes namespace {{gatewayNamespace}}", - "kubectl-get-vz-ingress-external-address-error-message": "Failed to find the External IP Address in the Istio Gateway service {{gatewayService}} in Kubernetes namespace {{gatewayNamespace}}: {{error}}", - "kubectl-get-vz-app-hostnames-error-message": "Unable to get Verrazzano application host names: {{error}}", - "kubectl-get-vz-app-hostnames-not-found": "Verrazzano application host names not found", "helm-not-specified-error-message": "Helm executable path was not provided", "helm-not-exists-error-message": "Helm executable {{filePath}} does not exist", @@ -526,11 +496,6 @@ "project-save-model-files-error-title": "Project Model Files Save Error", "project-save-model-files-error-message": "Failed to save one of the WebLogic Deploy Tooling model files associated with the project: {{error}}", - "vz-installer-operator-not-ready-error-message": "Cannot proceed with Verrazzano installation because the Verrazzano Platform Operator is not ready: {{error}}", - "vz-installer-check-install-status-no-resource-error-message": "No Verrazzano installation exists", - "vz-installer-check-install-status-failed-error-message": "Cannot proceed with Verrazzano install status check for {{name}} because of an error: {{error}}", - "vz-installer-check-install-status-mismatched-names-error-message": "Verrazzano {{version}} is installed under the name {{name}}", - "wrc-home-error-title": "Invalid WebLogic Remote Console Location", "wrc-init-error-title": "Initializing WebLogic Remote Console Backend Failed", "wrc-location-existence-check-failed": "Unable to start the WebLogic Remote Console backend at {{location}} due to an error while trying to determine its existence: {{error}}.", diff --git a/electron/app/locales/en/webui.json b/electron/app/locales/en/webui.json index aaa95645b..323eb9ea1 100644 --- a/electron/app/locales/en/webui.json +++ b/electron/app/locales/en/webui.json @@ -10,11 +10,6 @@ "nav-operator": "WebLogic Operator", "nav-domain": "WebLogic Domain", "nav-ingress": "Ingress Controller", - "nav-verrazzano": "Verrazzano", - "nav-vz-config": "Client Configuration", - "nav-vz-install": "Installation", - "nav-vz-component": "Component", - "nav-vz-application": "Application", "nav-collapse-arrow-tooltip": "Collapse Navigation Pane", "nav-expand-arrow-tooltip": "Expand Navigation Pane", @@ -43,23 +38,9 @@ "kubectl-instructions-heading": "Instructions", "kubectl-executables-heading": "Client Executables", "kubectl-wko-connectivity-heading": "Kubernetes Cluster Connectivity Configuration", - "kubectl-vz-connectivity-heading": "Verrazzano Admin Cluster Connectivity Configuration", - "kubectl-vz-managed-clusters-heading": "Verrazzano Managed Clusters Connectivity Configuration", - "kubectl-vz-managed-clusters-table-aria-label": "Verrazzano Managed Clusters Connectivity Table", - "kubectl-vz-managed-clusters-add-row-tooltip": "Add a new Verrazzano Managed Cluster Connectivity row", - "kubectl-vz-managed-clusters-delete-row-tooltip": "Delete the Verrazzano Managed Cluster Connectivity row", - "kubectl-vz-managed-cluster-name-heading": "Verrazzano Managed Cluster Name", - "kubectl-vz-managed-cluster-name-help": "Name of the Verrazzano Managed Cluster.", - "kubectl-vz-managed-cluster-kubeconfig-heading": "Kubernetes Client Config File(s)", - "kubectl-vz-managed-cluster-kubeconfig-help": "The Kubernetes client configuration file(s) to use for connecting to the Verrazzano Managed Cluster.", - "kubectl-vz-managed-cluster-kubecontext-heading": "Kubectl Config Context to Use", - "kubectl-vz-managed-cluster-kubecontext-help": "The Kubernetes client configuration context name to use for connecting to the Verrazzano Managed Cluster.", - "kubectl-vz-managed-cluster-choose-kubecontext-tooltip": "Choose the Kubernetes cluster context for the Verrazzano Managed Cluster from the available contexts in the Kubernetes Client Config File", - "kubectl-vz-managed-cluster-get-context-tooltip": "Get the current Kubernetes cluster context for the Verrazzano Managed Cluster from the Kubernetes Client Config File", "kubectl-k8s-flavor-label": "Kubernetes Cluster Type", "kubectl-k8s-flavor-help": "The Kubernetes cluster provider type where the Oracle Fusion Middleware domain will be deployed.", - "kubectl-vz-oke-warning": "WARNING: When creating an OKE cluster, the default Native Pod Networking is not compatible with Verrazzano unless the Kubernetes version is 1.26.2 or higher. For earlier Kubernetes versions, you must use Flannel networking for Verrazzano to install and work properly.", "kubectl-exe-file-path-label": "Kubectl Executable to Use", "kubectl-exe-file-path-help": "The full path to the Kubernetes kubectl client executable that is compatible with the target Kubernetes cluster.", "kubectl-exe-file-path-tooltip": "Choose the Kubectl Executable", @@ -68,7 +49,6 @@ "kubectl-config-file-tooltip": "Choose the Kubernetes Client Config File(s)", "kubectl-config-context-label": "Kubectl Config Context to Use", "kubectl-config-wko-choose-context-tooltip": "Choose the Kubernetes cluster context from the available contexts in the Kubernetes Client Config File", - "kubectl-config-vz-choose-admin-context-tooltip": "Choose the Kubernetes cluster context for the Verrazzano Admin Cluster from the available contexts in the Kubernetes Client Config File", "kubectl-config-context-tooltip": "Get the current Kubernetes cluster context from the Kubernetes Client Config File", "kubectl-config-context-help": "The Kubernetes config file context name for the cluster to which you want to connect. The default is to use whatever the current context is, if any.", "kubectl-helm-exe-file-path-label": "Helm Executable to Use", @@ -104,14 +84,11 @@ "kubectl-helper-project-not-saved-error-prefix": "Unable to verify Kubernetes client connectivity because project save failed", "kubectl-helper-set-context-error-message": "Unable to verify Kubernetes client connectivity because setting the Kubernetes client cluster context failed: {{error}}.", "kubectl-helper-verify-connect-in-progress": "Verifying Kubernetes Client Connectivity", - "kubectl-helper-verify-connect-success-title": "Verify Kubernetes Client Connectivity Success to Cluster {{clusterName}}", - "kubectl-helper-verify-connect-success-message": "Kubernetes client (version {{clientVersion}}) successfully connected to the Kubernetes cluster {{clusterName}} (version {{serverVersion}}).", - "kubectl-helper-verify-connect-failed-title": "Verify Kubernetes Client Connectivity Failed for Cluster {{clusterName}}", - "kubectl-helper-verify-connect-failed-error-message": "Failed to verify Kubernetes client connectivity to cluster {{clusterName}}: {{error}}.", + "kubectl-helper-verify-connect-success-title": "Verify Kubernetes Client Connectivity Success", + "kubectl-helper-verify-connect-success-message": "Kubernetes client (version {{clientVersion}}) successfully connected to the Kubernetes cluster (version {{serverVersion}}).", + "kubectl-helper-verify-connect-failed-title": "Verify Kubernetes Client Connectivity Failed", + "kubectl-helper-verify-connect-failed-error-message": "Failed to verify Kubernetes client connectivity: {{error}}.", "kubectl-helper-verify-connect-catch-all-error-message": "Failed to verify Kubernetes client connectivity due to an unexpected error: {{error}}.", - "kubectl-helper-choose-cluster-dialog-title": "Choose the Verrazzano cluster to verify connectivity", - "kubectl-helper-choose-cluster-name-label": "Verrazzano Cluster Name", - "kubectl-helper-choose-cluster-name-help": "The Verrazzano cluster name for which to verify connectivity.", "project-settings-form-name": "Project Settings", "project-settings-title": "Project Settings", @@ -140,14 +117,6 @@ "project-settings-domain-location-mii-message": "The WebLogic Kubernetes Operator creates the domain in the container used to represent the Administration Server.", "project-settings-domain-location-dii-message": "The WebLogic Image Tool creates the domain inside the image during the image creation process.", "project-settings-domain-location-pv-message": "In WebLogic Kubernetes Operator versions prior to 4.1.0, the target domain must already exist in a Kubernetes Persistent Volume that is accessible to the target Kubernetes cluster. Because no new domain is being created, there is no need to have a model. Starting in version 4.1.0, WebLogic Kubernetes Operator can initialize the domain on the Kubernetes Persistent Volume, if desired. In this case, a domain creation image containing a model will be required.", - "project-settings-wdt-target-type-question": "What type of Kubernetes cluster would you like to target?", - "project-settings-wdt-target-type-label": "Kubernetes Environment Target Type", - "project-settings-wdt-target-type-help": "Select the target type to use for preparing the model for and deploying the domain to the target Kubernetes environment.", - "project-settings-wdt-target-type-vz-label": "Verrazzano", - "project-settings-wdt-target-type-wko-label": "WebLogic Kubernetes Operator", - "project-settings-wdt-target-type-k8s-label": "Generic Kubernetes", - "project-settings-wdt-target-type-none-label": "None (model already prepared)", - "project-settings-wdt-target-type-answer-message": "When deploying a domain to Kubernetes, the WebLogic Kubernetes Toolkit UI application needs to know what type of Kubernetes environment you plan to use.", "project-settings-image-builder-type-question": "Which program do you want to use for building the new image and pushing it to an image registry?", "project-settings-image-builder-type-label": "Program for Building Images", "project-settings-image-builder-type-docker-label": "Docker", @@ -178,10 +147,9 @@ "project-settings-credential-store-policy-question": "How should the project's credentials be stored for this project?", "project-settings-credential-store-policy-label": "Credential Store Policy", "project-settings-credential-store-policy-help": "Specifies if and how credentials will be stored for the project.", - "project-settings-credential-store-native-label": "Store in Native OS Credential Store", "project-settings-credential-store-passphrase-label": "Store Encrypted in Project File", "project-settings-credential-store-none-label": "Not Stored", - "project-settings-credential-store-policy-answer-message": "The Credential Store Policy controls how credentials are handled when the project is saved and loaded. The options are to store them in the machine's native credential store, store them in the project file encrypted with a passphrase, or not store them at all.", + "project-settings-credential-store-policy-answer-message": "The Credential Store Policy controls how credentials are handled when the project is saved and loaded. The options are to store them in the project file encrypted with a passphrase or not store them at all.", "macos-path-directories-dialog-title": "System Path", "macos-path-directories-dialog-table-aria-label": "System Path Environment Variable Directories", @@ -953,8 +921,8 @@ "ingress-design-ingress-annotations": "Optional Annotations", "ingress-design-ingress-route-name-help": "The name to be used for creating this ingress route.", "ingress-design-ingress-route-virtualhost-help": "The virtual host name is used as the host routing rule for this ingress route.", - "ingress-design-ingress-route-targetservice-help": "The target service is the where this ingress route will send the request to the backend Kubernetes service address.", - "ingress-design-ingress-route-targetport-help": "The target port is the where this ingress route will send the request to the backend Kubernetes service port.", + "ingress-design-ingress-route-targetservice-help": "The target service where this ingress route will send the request to the backend Kubernetes service address.", + "ingress-design-ingress-route-targetport-help": "The target port where this ingress route will send the request to the backend Kubernetes service port.", "ingress-design-ingress-route-path-help": "The URL path routing rule for this ingress route.", "ingress-design-ingress-route-annotations-table-title": "Ingress Route Annotations", "ingress-design-ingress-route-annotation-key-help": "The name of the annotation used for this ingress route.", @@ -962,7 +930,7 @@ "ingress-design-ingress-route-annotation-add-row-tooltip": "Add Annotation", "ingress-design-ingress-route-annotation-delete-row-tooltip": "Delete Annotation", "ingress-design-ingress-route-traefik-mw-label": "Traefik Middleware", - "ingress-design-ingress-route-traefik-mw-help": "Customize Traefik Middlewares Object", + "ingress-design-ingress-route-traefik-mw-help": "Customize Traefik Middleware Object", "ingress-design-ingress-routes-get-services-in-namespace-title" : "Retrieving existing domain service details", "ingress-design-ingress-routes-get-services-in-namespace-error-message": "Failed to get existing domain services from Kubernetes namespace {{namespace}}: {{error}}.", @@ -1109,6 +1077,30 @@ "discover-dialog-remote-discovery-help": "Discover without collecting archive artifacts", "discover-dialog-domain-home-remote-help": "The directory of the domain to be discovered on the remote system", "discover-dialog-domain-home-remote-label": "Remote Domain Home", + "discover-dialog-discover-type-local-label": "Collect artifacts from local file system", + "discover-dialog-discover-type-remote-label": "Do not collect artifacts", + "discover-dialog-discover-type-ssh-label": "Use SSH to collect artifacts for remote domain", + "discover-dialog-discover-type-help": "Choose a method for collecting archive artifacts", + "discover-dialog-discover-type-label": "Archive Artifacts", + "discover-dialog-ssh-user-label": "Remote User Name", + "discover-dialog-ssh-user-help": "User name for remote system, if different", + "discover-dialog-ssh-host-label": "Host Name", + "discover-dialog-ssh-host-help": "Host name for SSH connection", + "discover-dialog-ssh-port-label": "SSH Port", + "discover-dialog-ssh-port-help": "Port for SSH connection, default is 22", + "discover-dialog-ssh-password-label": "Password", + "discover-dialog-ssh-password-help": "Password for SSH connection", + "discover-dialog-ssh-private-key-label": "Private Key File", + "discover-dialog-ssh-private-key-help": "File containing private key for SSH connection", + "discover-dialog-ssh-private-key-tooltip": "Select the private key file", + "discover-dialog-ssh-private-key-passphrase-label": "Private Key Passphrase", + "discover-dialog-ssh-private-key-passphrase-help": "Passphrase for private key, if required", + "discover-dialog-ssh-connection-title": "SSH Connection", + "discover-dialog-ssh-credential-type-default-label": "Use default private key", + "discover-dialog-ssh-credential-type-private-key-label": "Use private key file", + "discover-dialog-ssh-credential-type-password-label": "Use password", + "discover-dialog-ssh-credential-type-label": "SSH Credential Type", + "discover-dialog-ssh-credential-type-help": "Choose an option for specifying SSH credentials", "discover-result-dialog-title": "Discover Domain Result", "discover-result-dialog-archive-message": "The following files need to be collected from the remote system and placed in the archive file at the specified paths", @@ -1594,21 +1586,7 @@ "flow-validate-k8s-domain-in-progress": "Validating domain {{domain}} exists", "flow-get-domain-status-name": "Get Domain Status", "flow-getting-k8s-domain-status-in-progress": "Getting domain {{domain}} status", - "flow-getting-vz-application-status-in-progress": "Getting Application Status", "flow-checking-operator-version-in-progress": "Checking operator version", - "flow-checking-vz-already-installed-in-progress": "Checking if Verrazzano is already installed.", - "flow-checking-vz-app-components-deployed-in-progress": "Checking if Verrazzano application's components are deployed.", - "flow-install-verrazzano-name": "Install Verrazzano", - "flow-verrazzano-install-status-check-name": "Check Verrazzano Install Status", - "flow-verrazzano-get-install-version-name": "Get Verrazzano Installed Version", - "flow-verrazzano-deploy-component-name": "Deploy Verrazzano Component", - "flow-verrazzano-undeploy-component-name": "Undeploy Verrazzano Component", - "flow-verrazzano-deploy-application-name": "Deploy Verrazzano Application", - "flow-verrazzano-undeploy-application-name": "Undeploy Verrazzano Application", - "flow-verrazzano-get-application-status-name": "Get Application Status", - "flow-validate-vz-application-namespace-in-progress": "Validating application namespace {{namespace}} exists", - "flow-validate-vz-application-in-progress": "Validating application {{application}} exists", - "flow-validate-vz-domain-in-progress": "Validating domain UID {{domain}} exists", "add-archive-file-title": "Add Archive File", "add-archive-file-replace-message": "This will replace the existing archive, continue?", @@ -1678,356 +1656,6 @@ "validation-error-dialog-default-title": "Unknown action failed", - "vz-application-title": "Verrazzano Application", - "vz-application-coming-soon": "Coming Soon...", - - "vz-install-page-button-installVerrazzano": "Install Verrazzano", - "vz-install-page-hints-installVerrazzano": "Install Verrazzano in the Kubernetes Cluster", - "vz-install-page-button-installStatus": "Check Verrazzano Install Status", - "vz-install-page-hints-installStatus": "Check Verrazzano installation status", - - "vz-install-code-script-title": "Install Script", - "vz-install-code-verrazzano-resource-title": "Verrazzano Resource", - - "vz-install-design-form-name": "Verrazzano Installation", - "vz-install-design-profile-prod": "Production", - "vz-install-design-profile-dev": "Dev", - "vz-install-design-profile-managed-cluster": "Managed Cluster", - "vz-install-design-title": "Install Verrazzano", - "vz-install-design-name-label": "Install Name", - "vz-install-design-name-help": "The name to add to the Verrazzano object during installation.", - "vz-install-design-profile-label": "Install Profile", - "vz-install-design-profile-help": "The profile to use to install Verrazzano.", - "vz-install-design-version-label": "Release Version", - "vz-install-design-version-help": "The GitHub release version to use to install Verrazzano.", - "vz-install-design-install-jaeger-label": "Install Jaeger", - "vz-install-design-install-jaeger-help": "Whether to install the optional Jaeger transaction tracing component.", - "vz-install-design-istio-sampling-label": "Istio Tracing Sampling Rate", - "vz-install-design-istio-sampling-help": "The percentage of Istio requests that will be traced in Jaeger.", - "vz-install-design-install-argocd-label": "Install Argo CD", - "vz-install-design-install-argocd-help": "Whether to install the optional Argo CD continuous delivery component.", - - "vz-installer-aborted-error-title": "Installing Verrazzano Aborted", - "vz-installer-kubectl-exe-invalid-error-message": "Unable to install Verrazzano because the Kubernetes client executable is invalid: {{error}}.", - "vz-installer-project-not-saved-error-prefix": "Unable to install Verrazzano because project save failed", - "vz-installer-set-context-error-message": "Unable to install Verrazzano because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-installer-install-check-failed-error-message": "Unable to install Verrazzano because checking to see if it is already installed failed: {{error}}.", - "vz-installer-already-installed-error-message": "Unable to install Verrazzano because Verrazzano {{version}} is already installed under the name {{name}}.", - "vz-installer-install-operator-in-progress": "Installing the Verrazzano Platform Operator.", - "vz-installer-operator-install-failed-error-message": "Unable to install Verrazzano because installing the Verrazzano Platform Operator using tag {{tag}} failed: {{error}}.", - "vz-installer-verify-operator-in-progress": "Waiting for Verrazzano Platform Operator deployment to complete.", - "vz-installer-verify-operator-failed-error-message": "Verifying Verrazzano Platform Operator deployment failed: {{error}}", - "vz-installer-install-in-progress": "Starting Verrazzano installation", - "vz-installer-install-started-title": "Verrazzano Installation Started", - "vz-installer-install-started-message": "Verrazzano installation {{name}} initiated for version {{version}} started. Installation can take 15 to 30 minutes to complete so please verify the Verrazzano Install Status after waiting an appropriate amount of time.", - "vz-installer-install-failed-title": "Verrazzano Installation Failed", - "vz-installer-install-failed-error-message": "Failed to install Verrazzano {{name}}: {{error}}", - "vz-installer-install-catch-all-error-message": "Verrazzano installation failed with an unexpected error: {{error}}", - - "vz-install-status-checker-aborted-error-title": "Checking Verrazzano Install Status Aborted", - "vz-install-status-checker-kubectl-exe-invalid-error-message": "Unable to check the Verrazzano install status because the Kubernetes client executable is invalid: {{error}}.", - "vz-install-status-checker-project-not-saved-error-prefix": "Unable to check the Verrazzano install status because project save failed", - "vz-install-status-checker-set-context-error-message": "Unable to check the Verrazzano install status because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-install-status-checker-checking-vz-is-installed-in-progress": "Verifying Verrazzano install already started", - "vz-install-status-checker-install-check-failed-error-message": "Unable to check the Verrazzano install status because checking to see if it is installed failed: {{error}}.", - "vz-install-status-checker-install-check-not-installed-error-message": "Unable to check the Verrazzano install status because Verrazzano is not installed.", - "vz-install-status-checker-checking-status-in-progress": "Checking Verrazzano install status", - "vz-install-status-checker-status-complete-title": "Verrazzano Installation Complete", - "vz-install-status-checker-status-complete-message": "Verrazzano {{name}} installation is complete", - "vz-install-status-checker-status-incomplete-title": "Verrazzano Installation In Progress", - "vz-install-status-checker-status-incomplete-message": "Verrazzano {{name}} installation is not yet complete: message = {{message}} and status = {{status}}", - "vz-install-status-checker-status-failed-title": "Verrazzano Install Status Check Failed", - "vz-install-status-checker-status-failed-error-message": "Failed to verify Verrazzano {{name}} installation status: {{error}}.", - "vz-install-status-checker-status-catch-all-error-message": "Checking the status of the Verrazzano installation with an unexpected error: {{error}}", - - "vz-get-install-version-aborted-error-title": "Getting Installed Verrazzano Version Aborted", - "vz-get-install-version-kubectl-exe-invalid-error-message": "Unable to get the installed Verrazzano version because the Kubernetes client executable is invalid: {{error}}.", - "vz-get-install-version-project-not-saved-error-prefix": "Unable to get the installed Verrazzano version because project save failed", - "vz-get-install-version-set-context-error-message": "Unable to get the installed Verrazzano version because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-get-install-version-get-in-progress": "Getting the installed version of Verrazzano", - "vz-get-install-version-install-check-failed-error-message": "Unable to get the installed version of Verrazzano because checking to see if it is installed failed: {{error}}.", - "vz-get-install-version-not-installed-error-message": "unable to get the installed version of Verrazzano because Verrazzano is not installed.", - - "vz-component-page-button-deployComponent": "Deploy Component", - "vz-component-page-hints-deployComponent": "Deploy Component to Verrazzano", - "vz-component-page-button-undeployComponent": "Undeploy Component", - "vz-component-page-hints-undeployComponent": "Undeploy Component from Verrazzano", - - "vz-component-design-form-name": "Component", - "vz-component-design-title": "Define the Verrazzano Component for the WebLogic Domain", - "vz-component-design-name-label": "Component Name", - "vz-component-design-name-help": "The name of the Verrazzano component.", - "vz-component-design-namespace-label": "Component Namespace", - "vz-component-design-namespace-help": "The Kubernetes namespace to which the Verrazzano component will be deployed.", - "vz-component-design-installed-version-label": "Verrazzano Version", - "vz-component-design-installed-version-help": "The three digit version number of the installed Verrazzano version from the target environment.", - "vz-component-design-installed-version-tooltip": "Get the installed version of Verrazzano from the target environment", - - "vz-component-code-script-title": "Install Script", - "vz-component-code-component-resource-title": "Component Resource", - "vz-component-code-configmap-resource-title": "ConfigMap Resource", - - "vz-component-deployer-aborted-error-title": "Deploying Verrazzano Component(s) Aborted", - "vz-component-deployer-kubectl-exe-invalid-error-message": "Unable to deploy Verrazzano component(s) because the Kubernetes client executable is invalid: {{error}}.", - "vz-component-deployer-project-not-saved-error-prefix": "Unable to deploy Verrazzano component(s) because project save failed", - "vz-component-deployer-set-context-error-message": "Unable to deploy Verrazzano component(s) because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-component-deployer-install-check-failed-error-message": "Unable to deploy Verrazzano component(s) because checking to see if Verrazzano is installed failed: {{error}}.", - "vz-component-deployer-not-installed-error-message": "Unable to deploy Verrazzano component(s) because Verrazzano is not installed.", - "vz-component-deployer-create-ns-in-progress": "Creating Namespace {{componentNamespace}}", - "vz-component-deployer-create-ns-error-message": "Unable to deploy Verrazzano component(s) due to an error creating the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-component-deployer-label-ns-in-progress": "Labeling Namespace {{componentNamespace}}", - "vz-component-deployer-label-ns-error-message": "Unable to deploy Verrazzano component(s) due to an error adding labels to the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-component-deployer-create-image-pull-secret-in-progress": "Creating image pull secret {{secretName}} in Kubernetes namespace {{namespace}}", - "vz-component-deployer-create-image-pull-secret-error-message": "Unable to deploy Verrazzano component(s) due to an error creating the image pull secret {{secretName}} in the Kubernetes namespace {{namespace}}: {{error}}", - "vz-component-deployer-create-runtime-secret-in-progress": "Creating runtime encryption secret {{secretName}} in Kubernetes namespace {{namespace}}", - "vz-component-deployer-create-runtime-secret-error-message": "Unable to deploy Verrazzano component(s) due to an error creating the runtime encryption secret {{secretName}} in the Kubernetes namespace {{namespace}}: {{error}}", - "vz-component-deployer-create-wallet-password-secret-in-progress": "Creating OPSS wallet password secret {{secretName}} in Kubernetes namespace {{namespace}}", - "vz-component-deployer-create-wallet-password-secret-error-message": "Unable to deploy Verrazzano component(s) due to an error creating the OPSS wallet password secret {{secretName}} in the Kubernetes namespace {{namespace}}: {{error}}", - "vz-component-deployer-create-wl-secret-in-progress": "Creating secret {{secretName}} for WebLogic domain {{domainName}} in Kubernetes namespace {{namespace}}", - "vz-component-deployer-create-wl-secret-failed-error-message": "Failed to create WebLogic credentials secret {{secretName}} in Kubernetes namespace {{namespace}}: {{error}}", - "vz-component-deployer-create-secrets-in-progress": "Creating secrets for WebLogic domain {{domainName}} in Kubernetes namespace {{namespace}}", - "vz-component-deployer-create-secret-failed-error-message": "Failed to create secret {{secretName}} in Kubernetes namespace {{namespace}}: {{error}}", - "vz-component-deployer-deploy-component-in-progress": "Deploying Component(s)", - "vz-component-deployer-deploy-success-title": "Component(s) Deployed to Verrazzano", - "vz-component-deployer-deploy-resource-only-success-message": "Deployed Verrazzano component {{resourceName}} to namespace {{namespace}}.", - "vz-component-deployer-deploy-success-message": "Deployed Verrazzano components {{resourceName}} and {{configMapName}} to namespace {{namespace}}.", - "vz-component-deployer-deploy-failed-title": "Deploy Component(s) to Verrazzano Failed", - "vz-component-deployer-deploy-resource-only-failed-message": "Failed to deploy Verrazzano component {{resourceName}} to namespace {{namespace}}: {{error}}.", - "vz-component-deployer-deploy-failed-message": "Failed to deploy Verrazzano components {{resourceName}} and {{configMapName}} to namespace {{namespace}}: {{error}}.", - "vz-component-deployer-deploy-catch-all-error-message": "Verrazzano component deployment from Kubernetes failed with an unexpected error: {{error}}", - - "vz-component-undeployer-aborted-error-title": "Undeploying Verrazzano Component(s) Aborted", - "vz-component-undeployer-remove-namespace-prompt-title": "Undeploy Verrazzano Component(s) Scope", - "vz-component-undeployer-remove-namespace-1-component-prompt-question": "After undeploying the Verrazzano component {{componentName}}, would you like to also delete the Kubernetes namespace {{namespace}} (and all of its data)?", - "vz-component-undeployer-remove-namespace-2-component-prompt-question": "After undeploying the Verrazzano components {{componentName}} and {{configMapComponentName}}, would you like to also delete the Kubernetes namespace {{namespace}} (and all of its data)?", - "vz-component-undeployer-remove-namespace-prompt-details": "Undeploying the Verrazzano component(s) will make any Verrazzano applications referencing these components invalid. Removing the Verrazzano components' namespace {{componentNamespace}} will remove all applications, components, secrets, config maps, and other Kubernetes objects that exist in the Kubernetes namespace.", - "vz-component-undeployer-kubectl-exe-invalid-error-message": "Unable to undeploy Verrazzano component(s) because the Kubernetes client executable is invalid: {{error}}.", - "vz-component-undeployer-project-not-saved-error-prefix": "Unable to undeploy Verrazzano component(s) because project save failed", - "vz-component-undeployer-set-context-error-message": "Unable to undeploy Verrazzano component(s) because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-component-undeployer-install-check-failed-error-message": "Unable to undeploy Verrazzano component(s) because checking to see if Verrazzano is installed failed: {{error}}.", - "vz-component-undeployer-not-installed-error-message": "Unable to undeploy Verrazzano component(s) because Verrazzano is not installed.", - "vz-component-undeployer-undeploy-namespace-in-progress": "Removing namespace {{componentNamespace}}", - "vz-component-undeployer-undeploy-component-in-progress": "Removing component {{componentName}}", - "vz-component-undeployer-undeploy-components-in-progress": "Removing components {{componentName}} and {{configMapComponentName}}", - "vz-component-undeployer-k8s-namespace-delete-failed-error-message": "Unable to undeploy the Verrazzano component(s) because an error occurred while trying to delete the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-component-undeployer-undeploy-complete-title": "Verrazzano Component Undeployment Complete", - "vz-component-undeployer-undeploy-namespace-2-components-complete-message": "Verrazzano components {{componentName}} and {{configMapComponentName}} and Kubernetes namespace {{componentNamespace}} successfully undeployed.", - "vz-component-undeployer-undeploy-namespace-1-component-complete-message": "Verrazzano component {{componentName}} and Kubernetes namespace {{componentNamespace}} successfully undeployed.", - "vz-component-undeployer-undeploy-2-components-complete-message": "Verrazzano components {{componentName}} and {{configMapComponentName}} successfully undeployed from Kubernetes namespace {{componentNamespace}}.", - "vz-component-undeployer-undeploy-1-component-complete-message": "Verrazzano component {{componentName}} successfully undeployed from Kubernetes namespace {{componentNamespace}}.", - "vz-component-undeployer-undeploy-failed-title": "Verrazzano Component Undeployment Failed", - "vz-component-undeployer-undeploy-2-components-failed-error-message":"Unable to undeploy Verrazzano components {{componentName}} and {{configMapComponentName}} from Kubernetes namespace {{componentNamespace}}: {{error}}.", - "vz-component-undeployer-undeploy-1-component-failed-error-message":"Unable to undeploy Verrazzano component {{componentName}} from Kubernetes namespace {{componentNamespace}}: {{error}}.", - "vz-component-undeployer-undeploy-catch-all-error-message": "Verrazzano component undeployment from Kubernetes failed with an unexpected error: {{error}}", - - "vz-application-page-button-deployApplication": "Deploy Application", - "vz-application-page-hints-deployApplication": "Deploy Application to Verrazzano", - "vz-application-page-button-applicationStatus": "Get Application Status", - "vz-application-page-hints-applicationStatus": "Check Application Deployment Status", - "vz-application-page-button-undeployApplication": "Undeploy Application", - "vz-application-page-hints-undeployApplication": "Undeploy Application from Verrazzano", - - "vz-application-design-form-name": "Application", - "vz-application-design-title": "Define the Verrazzano Application", - "vz-application-design-name-label": "Application Name", - "vz-application-design-name-help": "The name of the Verrazzano application.", - "vz-application-design-namespace-label": "Application Namespace", - "vz-application-design-namespace-help": "The Kubernetes namespace to which the Verrazzano application will be deployed.", - "vz-application-design-version-label": "Application Version", - "vz-application-design-version-help": "The version annotation value to add to the Verrazzano application.", - "vz-application-design-description-label": "Application Description", - "vz-application-design-description-help": "The description annotation value to add to the Verrazzano application.", - "vz-application-design-use-multi-cluster-app-label": "Use Multicluster Application", - "vz-application-design-use-multi-cluster-app-help": "Whether to make this application a multicluster application.", - "vz-application-design-create-project-label": "Create Verrazzano Project", - "vz-application-design-create-project-help": "Whether to create a new Verrazzano Project object that includes the namespace for this multicluster application. A Verrazzano Project object that includes the current application's namespace must exist to deploy a multicluster application.", - "vz-application-design-project-name-label": "Verrazzano Project Name", - "vz-application-design-project-name-help": "The name to use when creating the new Verrazzano project for this multicluster application.", - "vz-application-design-components-title": "Components", - "vz-application-design-components-label": "Components", - "vz-application-design-component-name-label": "Component Name", - "vz-application-design-component-name-help": "The name of the Verrazzano component used by this application.", - "vz-application-design-delete-component-button-label": "Delete Component", - "vz-application-design-delete-component-button-help": "Delete the component reference from the application.", - "vz-application-design-add-component-button-label": "Add Component", - "vz-application.design-add-component-flow-nane": "Add Component", - "vz-application-design-add-component-validation-error-title": "Add Component to Application Aborted", - "vz-application-design-get-components-in-progress": "Getting Verrazzano Components from namespace {{namespace}}", - "vz-application-design-get-components-error-message": "Unable to add component due to an error while getting the list of available components: {{error}}.", - "vz-application-design-choose-component-dialog-title": "Choose Verrazzano Component to Add to the Application", - "vz-application-design-choose-component-name-label": "Component to Add", - "vz-application-design-choose-component-name-help": "Select the existing Verrazzano component to add to the application.", - "vz-application-design-no-assigned-components-message": "Application has no components. Use the Add Component button to add components.", - "vz-application-design-secret-names-label": "Secret Names", - "vz-application-design-secret-names-help": "The secret names in the current namespace to associate with the application. Use the Choose Secrets button below to edit this field.", - "vz-application-design-choose-secrets-button-label": "Choose Secrets", - "vz-application.design-choose-secrets-flow-nane": "Choose Secrets", - "vz-application-design-choose-secrets-validation-error-title": "Choose Secrets for Application Aborted", - "vz-application-design-get-secrets-in-progress": "Getting secrets from namespace {{namespace}}", - "vz-application-design-get-secrets-error-message": "Unable to choose secrets due to an error while getting the list of available secrets: {{error}}.", - "vz-application-design-choose-secrets-dialog-title": "Choose Secrets to Add to the Application", - "vz-application-design-choose-secrets-name-label": "Secrets to Add", - "vz-application-design-choose-secrets-name-help": "Select the secrets to add to the application.", - "vz-application-design-choose-secret-button-label": "Choose Secret", - "vz-application.design-choose-secret-flow-nane": "Choose Secret", - "vz-application-design-choose-secret-validation-error-title": "Choose Secret Aborted", - "vz-application-design-choose-secret-dialog-title": "Choose Secret", - "vz-application-design-choose-secret-name-label": "Secret to Use", - "vz-application-design-choose-secret-name-help": "Select the secret to use.", - "vz-application-design-cluster-names-label": "Verrazzano Clusters for Application Placement", - "vz-application-design-cluster-names-help": "The Verrazzano cluster names where the application should be placed. Use the Choose Verrazzano Clusters button below to edit this field.", - "vz-application-design-choose-clusters-button-label": "Choose Verrazzano Clusters", - "vz-application-design-choose-clusters-flow-nane": "Choose Verrazzano Clusters", - "vz-application-design-choose-clusters-validation-error-title": "Choose Verrazzano Clusters for Application Placement Aborted", - "vz-application-design-get-clusters-in-progress": "Getting Verrazzano Clusters", - "vz-application-design-use-context-error-message": "Unable to choose clusters due to an error while switching the Kubernetes cluster context: {{error}}.", - "vz-application-design-get-clusters-error-message": "Unable to choose clusters due to an error while getting the list of available clusters: {{error}}.", - "vz-application-design-choose-clusters-dialog-title": "Choose Verrazzano Clusters for Application Placement", - "vz-application-design-choose-clusters-name-label": "Verrazzano Cluster Names", - "vz-application-design-choose-clusters-name-help": "Select the Verrazzano Clusters to use for application placement.", - "vz-application-design-get-hosts-error-message": "Unable get hosts for the application: {{error}}.", - "vz-application-design-get-hosts-error-title": "Get Hosts for Application Aborted", - "vz-application-design-get-hosts-in-progress": "Getting Hosts for Application", - - "vz-application-design-component-ingress-trait-enabled-label": "Enable Ingress Trait", - "vz-application-design-component-ingress-trait-enabled-help": "Enable the Ingress Trait for this component.", - "vz-application-design-component-ingress-trait-secret-name-label": "Secret Name", - "vz-application-design-component-ingress-trait-secret-name-help": "The name of the TLS secret to associate with the routes defined by this ingress.", - "vz-application-design-component-ingress-trait-secret-name-tooltip": "Choose the Secret Name", - "vz-application-design-choose-ingress-trait-secret-validation-error-title": "Choose Secret for Ingress Trait Aborted", - "vz-application-design-choose-ingress-trait-get-secrets-error-message": "Unable to choose secret due to an error while getting the list of available secrets: {{error}}.", - "vz-application-design-ingress-trait-rules-table-title": "Ingress Rules", - "vz-application-design-ingress-trait-rules-table-aria-label": "Ingress Rules table", - "vz-application-design-ingress-trait-rules-hosts-label": "Hosts", - "vz-application-design-ingress-trait-rules-first-path-type-label": "First Path Type", - "vz-application-design-ingress-trait-rules-first-path-label": "First Path", - "vz-application-design-ingress-trait-rules-first-path-url-label": "URL", - "vz-application-design-ingress-trait-rules-update-urls-button-label": "Update URLs", - "vz-application-design-ingress-trait-rules-update-urls-button-tooltip": "Use Update URLs to get the Ingress Controller hostname after the application status reaches complete.", - "vz-application-design-ingress-trait-rule-edit-destination-title": "Destination", - "vz-application-design-ingress-trait-rules-destination-label": "Destination", - "vz-application-design-add-rule-tooltip": "Add Ingress Rule", - "vz-application-design-edit-rule-tooltip": "Edit Ingress Rule", - "vz-application-design-delete-rule-tooltip": "Delete Ingress Rule", - - "vz-application-design-component-logging-trait-enabled-label": "Enable Logging Trait", - "vz-application-design-component-logging-trait-enabled-help": "Enable the Logging Trait for this component.", - "vz-application-design-component-logging-trait-image-label": "Custom Fluentd Image Tag", - "vz-application-design-component-logging-trait-image-help": "The custom Fluentd image to use.", - "vz-application-design-component-logging-trait-configuration-label": "Fluentd Configuration", - "vz-application-design-component-logging-trait-configuration-help": "The Fluentd configuration to use.", - - "vz-application-design-component-manual-scaler-trait-enabled-label": "Enable Manual Scaler Trait", - "vz-application-design-component-manual-scaler-trait-enabled-help": "Enable the Manual Scaler Trait for this component.", - "vz-application-design-component-manual-scaler-trait-replica-count-label": "Replica Count", - "vz-application-design-component-manual-scaler-trait-replica-count-help": "The target number of replicas to create for this component.", - - "vz-application-design-component-metrics-trait-enabled-label": "Enable Metrics Trait", - "vz-application-design-component-metrics-trait-enabled-help": "Enable the Metrics Trait for this component.", - "vz-application-design-component-metrics-trait-http-port-label": "HTTP Port", - "vz-application-design-component-metrics-trait-http-port-help": "The HTTP Port for the related metrics endpoint.", - "vz-application-design-component-metrics-trait-http-path-label": "HTTP Path", - "vz-application-design-component-metrics-trait-http-path-help": "The HTTP Path for the related metrics endpoint.", - "vz-application-design-component-metrics-trait-secret-label": "Secret Name", - "vz-application-design-component-metrics-trait-secret-help": "The name of the secret containing the credentials needed to access the metrics endpoint.", - "vz-application-design-component-metrics-trait-secret-tooltip": "Choose the Secret Name", - "vz-application-design-choose-metrics-trait-secret-validation-error-title": "Choose Secret for Metrics Trait Aborted", - "vz-application-design-choose-metrics-trait-get-secrets-error-message": "Unable to choose secret due to an error while getting the list of available secrets: {{error}}.", - "vz-application-design-component-metrics-trait-deployment-label": "Prometheus Deployment to Use", - "vz-application-design-component-metrics-trait-deployment-help": "The Prometheus deployment name used to scrape the related metrics endpoints. Defaults to verrazzano-system/vmi-system-prometheus-0.", - "vz-application-design-component-metrics-trait-deployment-tooltip": "Choose the Prometheus Deployment", - "vz-application-design-choose-deployment-validation-error-title": "Choose Prometheus Deployment for Metrics Trait Aborted", - "vz-application-design-choose-deployment-flow-nane": "Choose Prometheus Deployment", - "vz-application-design-get-deployments-in-progress": "Getting Verrazzano deployments", - "vz-application-design-get-deployments-error-message": "Unable to choose Prometheus deployment due to an error getting the list of available deployments: {{error}}.", - "vz-application-design-choose-deployment-dialog-title": "Choose Prometheus Deployment to Use", - "vz-application-design-choose-deployment-name-label": "Deployment Name", - "vz-application-design-choose-deployment-name-help": "The namespace-qualified deployment name of the Prometheus deployment to use.", - - "vz-application-design-ingress-trait-rule-edit-dialog-title": "Ingress Trait Rule Editor", - "vz-application-design-ingress-trait-rule-edit-hosts-label": "Hosts", - "vz-application-design-ingress-trait-rule-edit-hosts-help": "Hosts to be exposed by the Ingress Trait. If there are no valid hosts provided, then a DNS host name is automatically generated and used.", - "vz-application-design-ingress-trait-rule-edit-paths-table-title": "Paths", - "vz-application-design-ingress-trait-rule-edit-paths-table-aria-label": "Paths table", - "vz-application-design-ingress-trait-rule-edit-path-label": "Path", - "vz-application-design-ingress-trait-rule-edit-path-help": "The path value to match using the specified Path Type value.", - "vz-application-design-ingress-trait-rule-edit-path-placeholder": "Enter Path Value", - "vz-application-design-ingress-trait-rule-edit-path-type-label": "Path Type", - "vz-application-design-ingress-trait-rule-edit-path-type-prefix-label": "Prefix", - "vz-application-design-ingress-trait-rule-edit-path-type-exact-label": "Exact", - "vz-application-design-ingress-trait-rule-edit-path-type-regex-label": "Regular Expression", - "vz-application-design-ingress-trait-rule-edit-path-type-help": "The expression type to use to process the Path value.", - "vz-application-design-ingress-trait-rule-edit-path-type-placeholder": "Select Path Type", - "vz-application-design-ingress-trait-rule-edit-path-add-row-tooltip": "Add Path", - "vz-application-design-ingress-trait-rule-edit-path-delete-row-tooltip": "Delete Path", - "vz-application-design-ingress-trait-rule-editASdd-destination-title": "Destination", - "vz-application-design-ingress-trait-rule-edit-destination-host-label": "Host", - "vz-application-design-ingress-trait-rule-edit-destination-host-help": "Destination host for the ingress path.", - "vz-application-design-ingress-trait-rule-edit-destination-port-label": "Port", - "vz-application-design-ingress-trait-rule-edit-destination-port-help": "Destination port for the ingress path.", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-name-label": "Session Affinity Cookie Name", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-name-help": "The name of the HTTP Cookie to use for session affinity for this path.", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-path-label": "Session Affinity Cookie Path", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-path-help": "The path of the HTTP Cookie to use for session affinity for this path.", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-ttl-label": "Session Affinity Cookie Time-to-Live Seconds", - "vz-application-design-ingress-trait-rule-edit-destination-cookie-ttl-help": "The lifetime of the HTTP Cookie in seconds to use for session affinity for this path.", - - "vz-application-code-script-title": "Deploy Script", - "vz-application-code-application-resource-title": "Application Resource", - "vz-application-code-project-resource-title": "Project Resource", - - "vz-application-deployer-aborted-error-title": "Deploying Verrazzano Application Aborted", - "vz-application-deployer-kubectl-exe-invalid-error-message": "Unable to deploy Verrazzano application because the Kubernetes client executable is invalid: {{error}}.", - "vz-application-deployer-project-not-saved-error-prefix": "Unable to deploy Verrazzano application because project save failed", - "vz-application-deployer-set-context-error-message": "Unable to deploy Verrazzano application because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-application-deployer-install-check-failed-error-message": "Unable to deploy Verrazzano application because checking to see if Verrazzano is installed failed: {{error}}.", - "vz-application-deployer-not-installed-error-message": "Unable to deploy Verrazzano application because Verrazzano is not installed.", - "vz-application-deployer-verify-components-error-message": "Unable to deploy Verrazzano application because one or more referenced components are not deployed in the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-application-deployer-deploy-project-in-progress": "Deploying Verrazzano Project", - "vz-application-deployer-deploy-project-error-message": "Unable to deploy Verrazzano application because an error occurred while deploying the Verrazzano project {{projectName}}: {{error}}.", - "vz-application-deployer-deploy-application-in-progress": "Deploying Application", - "vz-application-deployer-deploy-application-success-title": "Deployed Application to Verrazzano", - "vz-application-deployer-deploy-application-success-message": "Verrazzano application {{name}} successfully deployed to namespace {{namespace}}.", - "vz-application-deployer-deploy-failed-title": "Deploy Application to Verrazzano Failed", - "vz-application-deployer-deploy-failed-message": "Failed to deploy Verrazzano application {{name}} to namespace {{namespace}}: {{error}}.", - "vz-application-deployer-deploy-catch-all-error-message": "Verrazzano application deployment from Kubernetes failed with an unexpected error: {{error}}", - - "vz-application-undeployer-aborted-error-title": "Undeploying Verrazzano Application Aborted", - "vz-application-undeployer-remove-namespace-prompt-title": "Undeploy Verrazzano Application Scope", - "vz-application-undeployer-remove-namespace-prompt-question": "After undeploying the Verrazzano application {{name}}, would you like to also delete the Kubernetes namespace {{namespace}} (and all of its data)?", - "vz-application-undeployer-remove-namespace-prompt-details": "Undeploying the Verrazzano application will stop the pods associated with the Verrazzano application. Removing the Verrazzano application's namespace {{namespace}} will remove all applications, components, secrets, config maps, and other Kubernetes objects that exist in the Kubernetes namespace.", - "vz-application-undeployer-kubectl-exe-invalid-error-message": "Unable to undeploy Verrazzano application because the Kubernetes client executable is invalid: {{error}}.", - "vz-application-undeployer-project-not-saved-error-prefix": "Unable to undeploy Verrazzano application because project save failed", - "vz-application-undeployer-set-context-error-message": "Unable to undeploy Verrazzano application because setting the Kubernetes client cluster context failed: {{error}}.", - "vz-application-undeployer-install-check-failed-error-message": "Unable to undeploy Verrazzano application because checking to see if Verrazzano is installed failed: {{error}}.", - "vz-application-undeployer-not-installed-error-message": "Unable to undeploy Verrazzano application because Verrazzano is not installed.", - "vz-application-undeployer-undeploy-namespace-in-progress": "Removing namespace {{namespace}}", - "vz-application-undeployer-undeploy-application-in-progress": "Removing application {{name}}", - "vz-application-undeployer-k8s-namespace-delete-failed-error-message": "Unable to undeploy the Verrazzano application because an error occurred while trying to delete the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-application-undeployer-undeploy-complete-title": "Verrazzano Application Undeployment Complete", - "vz-application-undeployer-undeploy-namespace-complete-message": "Verrazzano application {{name}} and Kubernetes namespace {{namespace}} successfully undeployed.", - "vz-application-undeployer-undeploy-complete-message": "Verrazzano application {{name}} successfully undeployed from Kubernetes namespace {{namespace}}.", - "vz-application-undeployer-undeploy-failed-title": "Verrazzano Application Undeployment Failed", - "vz-application-undeployer-undeploy-failed-error-message":"Unable to undeploy Verrazzano application {{name}} from Kubernetes namespace {{namespace}}: {{error}}.", - "vz-application-undeployer-undeploy-catch-all-error-message": "Verrazzano application undeployment from Kubernetes failed with an unexpected error: {{error}}", - - "vz-application-status-checker-get-status-failed-title-message": "Get Application Status Failed", - "vz-application-status-checker-get-status-failed-error-message": "Unable to get the application status due to an error: {{error}}.", - "vz-application-status-checker-validate-ns-failed-error-message": "Unable to get the application status because an error occurred while trying to validate the Kubernetes namespace {{namespace}}: {{error}}.", - "vz-application-status-checker-application-not-exist-error-message": "Unable to get the application status because the application {{application}} does not exist.", - "vz-application-status-checker-ns-not-exist-error-message": "Unable to get the application status because the application namespace {{namespace}} does not exist.", - "vz-application-status-checker-domain-not-exist-error-message": "Unable to get the application status because the domain UID {{domain}} does not exist.", - "vz-application-status-checker-vz-managed-cluster-not-found-error": "Unable to get the Verrazzano multicluster application status because the Verrazzano managed cluster connectivity configuration for managed cluster {{clusterName}} was not found", - "vz-application-status-checker-check-failed-title": "Verrazzano Application Status Check Failed", - "vz-application-status-checker-check-catch-all-error-message": "Verrazzano application status check failed with an unexpected error: {{error}}.", - - "vz-application-status-choose-cluster-dialog-title": "Choose the Verrazzano Cluster to Check Application Status", - "vz-application-status-choose-cluster-name-label": "Verrazzano Cluster Name", - "vz-application-status-choose-cluster-name-help": "Choose the Verrazzano cluster on which to check the status of the deployed application.", - - "vz-application-status-title": "Application Status for \"{{application}}\" in Cluster \"{{clusterName}}\"", - "vz-application-status-domain-title": "Domain \"{{domain}}\"", - "app-update-title": "Application Update", "app-update-new-release": "A new release is available: {{releaseName}}", "app-update-release-notes": "Release Notes", @@ -2047,7 +1675,7 @@ "quickstart-page1-list-item-1": "This is a native application with its own native application menus.", "quickstart-page1-list-item-2": "The application is broken out by sections: Model, Image, and Kubernetes. Use the left side navigation pane to switch between these sections.", "quickstart-page1-list-item-3": "Most sections provide a Design View and Code View page. Design View is intended to simplify project configuration while Code View shows you the code.", - "quickstart-page1-list-item-4": "Sections contain actions that perform work using external tools, like the WebLogic Kubernetes Toolkit (WebLogic Kubernetes Operator, WebLogic Deploy Tooling, or WebLogic Image Tool), Verrazzano, and other container-related tools (docker/podman, kubectl, and Helm).", + "quickstart-page1-list-item-4": "Sections contain actions that perform work using external tools, like the WebLogic Kubernetes Toolkit (WebLogic Kubernetes Operator, WebLogic Deploy Tooling, or WebLogic Image Tool), and other container-related tools (docker/podman, kubectl, and Helm).", "quickstart-page2-title": "Before You Get Started", "quickstart-page2-list-heading": "The WKT UI application relies on Internet access for:", @@ -2069,7 +1697,7 @@ "quickstart-page3-list2-item-1": "The file is in JSON format and must have a .wktproj file extension.", "quickstart-page3-list2-item-2": "Only fields with non-default values are saved in the file.", "quickstart-page3-list2-item-3": "The file only stores references to the WDT model-related files. While the files are generally treated as part of the project, they are always stored in their WDT files.", - "quickstart-page3-list2-item-4": "Credential fields are never stored in clear text. They may be stored in the native OS credential store, encrypted in the project file, or not stored at all.", + "quickstart-page3-list2-item-4": "Credential fields are never stored in clear text. They may be encryoted and stored in the project file, or not stored at all.", "quickstart-page3-paragraph-2": "The WKT UI application uses a one project per window paradigm. If you try to open the same project file more than once, the application will simply bring the existing window into focus to prevent corruption of the file.", "quickstart-page4-title": "Project Settings Section", @@ -2080,9 +1708,8 @@ "quickstart-page4-list1-item-4": "Which Java Home and Oracle Home directories to use for running the WKT tools.", "quickstart-page4-list1-item-5": "Which image build tool to use--Docker or podman.", "quickstart-page4-list2-heading": "Where you store the credentials affects sharing of the project file; the options are:", - "quickstart-page4-list2-item-1": "Storing the credentials in the native OS credential store means that the credentials are only stored on the local machine.", - "quickstart-page4-list2-item-2": "Storing the passphrase-encrypted credentials in the WKT project file means that you have to know the passphrase needed to decrypt the credentials.", - "quickstart-page4-list2-item-3": "Not storing the credentials means that you need to re-enter credentials whenever the project file is opened.", + "quickstart-page4-list2-item-1": "Storing the passphrase-encrypted credentials in the WKT project file means that you have to know the passphrase needed to decrypt the credentials.", + "quickstart-page4-list2-item-2": "Not storing the credentials means that you need to re-enter credentials whenever the project file is opened.", "quickstart-page4-list3-heading": "Where you store the domain affects the life cycle of the domain; the options are:", "quickstart-page4-list3-item-1": "Storing the model of the domain in the image. WebLogic Kubernetes Operator creates the domain inside the containers started from the image.", "quickstart-page4-list3-item-2": "Storing the domain in the image. WebLogic Image Tool creates the domain while it is creating the image.", @@ -2157,26 +1784,6 @@ "quickstart-page10-list4-item-2": "Code view provides a shell script that shows how you can automate the installation as well as the YAML resource definitions.", "quickstart-page10-list4-item-3": "The Install Ingress Controller and Update Ingress Routing buttons (and Go menu items) perform the necessary actions to install the ingress controller and update routes on an existing ingress controller.", - "quickstart-page11-title": "Verrazzano-Specific Sections", - "quickstart-page11-paragraph-1": "When using Verrazzano as the WDT target type, the following sections will be shown.", - "quickstart-page11-subheading-1": "Installation Section", - "quickstart-page11-list2-heading": "This section makes it easy to install Verrazzano into your Kubernetes cluster.", - "quickstart-page11-list2-item-1": "Design view provides values for the various fields needed to install Verrazzano, including installation of the optional Jaeger component.", - "quickstart-page11-list2-item-2": "Code view provides a shell script that shows how you can automate the installation.", - "quickstart-page11-list2-item-3": "The Install Verrazzano button (and Go menu item) performs the necessary actions to install Verrazzano.", - - "quickstart-page11-subheading-2": "Component Section", - "quickstart-page11-list3-heading": "This section provides support for creating and deploying the Verrazzano component for the WebLogic domain.", - "quickstart-page11-list3-item-1": "Design view provides values for the various Kubernetes objects, including model variable override values and secret values.", - "quickstart-page11-list3-item-2": "Code view provides a shell script for deploying the Verrazzano component for this WebLogic domain into Verrazzano and creating its dependent resources, as well as the YAML resource definitions.", - "quickstart-page11-list3-item-3": "The Deploy Component button (and Go menu item) creates the domain custom object and any of its dependent objects (for example, namespace, secrets, ConfigMap) in Kubernetes.", - - "quickstart-page11-subheading-3": "Application Section", - "quickstart-page11-list4-heading": "This section makes it easy to compose an application that includes the component for the WebLogic domain.", - "quickstart-page11-list4-item-1": "Design view provides values for defining the application and customizing it for the target environment.", - "quickstart-page11-list4-item-2": "Code view provides a shell script for deploying the Verrazzano application for the WebLogic domain into Verrazzano as well as the application YAML resource definition and, if applicable, the project resource definition.", - "quickstart-page11-list4-item-3": "The Deploy Application button (and Go menu item) deploys the application to Verrazzano.", - "archive-type-APPLICATION_PLAN": "Application Plans", "archive-type-APPLICATION": "Application", "archive-type-CLASSPATH_LIB": "Classpath Libraries", @@ -2200,5 +1807,8 @@ "wrc-wdt-archive-add-failed-error": "Failed to add WebLogic Remote Console entry type {{wrcType}} to archive: {{error}}", "wrc-wdt-archive-remove-empty-path-error": "Failed to remove from archive because the archive path was empty.", "wrc-wdt-archive-remove-failed-to-match-path-error": "Failed to remove {{archivePath}} from the archive because an error occurred while trying to match the path to its archive entry: {{error}}.", - "wrc-wdt-archive-remove-no-matching-node-error": "Failed to match WRC archive path {{archivePath}}'" + "wrc-wdt-archive-remove-no-matching-node-error": "Failed to match WRC archive path {{archivePath}}'", + + "wkt-project-verrazzano-removal-warning": "WKTUI 2.0 has removed support for Verrazzano so the project has been converted to remove all Verrazzano-related fields.", + "wkt-project-keytar-removal-warning": "WKTUI 2.0 has removed support for the native credential store due to the deprecation of the keytar JavaScript library so the project has been updated to use the credential manager that stores encrypted credentials in the project file." } diff --git a/electron/app/main.js b/electron/app/main.js index 8a2fa9164..1501abc45 100644 --- a/electron/app/main.js +++ b/electron/app/main.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ const { app, BrowserWindow, dialog, ipcMain, shell } = require('electron'); @@ -37,11 +37,6 @@ const githubUtils = require('./js/githubUtils'); const { initializeAutoUpdater, registerAutoUpdateListeners, installUpdates, getUpdateInformation } = require('./js/appUpdater'); const { startWebLogicRemoteConsoleBackend, getDefaultDirectoryForOpenDialog, setWebLogicRemoteConsoleHomeAndStart, getDefaultWebLogicRemoteConsoleHome, getWebLogicRemoteConsoleBackendPort } = require('./js/wlRemoteConsoleUtils'); -const { getVerrazzanoReleaseVersions, isVerrazzanoInstalled, installVerrazzanoPlatformOperator, - verifyVerrazzanoPlatformOperatorInstall, installVerrazzano, verifyVerrazzanoInstallStatus } = require('./js/vzInstaller'); -const { deployApplication, deployComponents, deployProject, getComponentNamesByNamespace, getSecretNamesByNamespace, - getVerrazzanoClusterNames, getDeploymentNamesFromAllNamespaces, undeployApplication, undeployComponents, getHostNames -} = require('./js/vzUtils'); const { getHttpsProxyUrl, getBypassProxyHosts } = require('./js/userSettings'); const { sendToWindow } = require('./js/windowUtils'); @@ -488,6 +483,18 @@ class Main { fileExtensions, currentValue); }); + ipcMain.handle('choose-private-key', async (event, privateKeyFile) => { + const title = i18n.t('dialog-choosePrivateKey'); + + return chooseFromFileSystem(event.sender.getOwnerBrowserWindow(), { + title: title, + message: title, + defaultPath: privateKeyFile, + buttonLabel: i18n.t('button-select'), + properties: [ 'openFile', 'dontAddToRecent'] + }); + }); + ipcMain.handle('add-archive-entry', async(event, itemType, itemData) => { return wdtArchive.addArchiveEntry(event.sender.getOwnerBrowserWindow(), itemType, itemData); }); @@ -775,14 +782,6 @@ class Main { return kubectlUtils.validateDomainExist(kubectlExe, kubectlOptions, domain, namespace); }); - ipcMain.handle('validate-vz-application-exist', async (event, kubectlExe, kubectlOptions, application, namespace) => { - return kubectlUtils.validateApplicationExist(kubectlExe, kubectlOptions, application, namespace); - }); - - ipcMain.handle('vz-get-application-status', async (event, kubectlExe, application, domainUid, namespace, options) => { - return kubectlUtils.getApplicationStatus(kubectlExe, application, domainUid, namespace, options); - }); - ipcMain.handle('is-wko-installed', async (event, kubectlExe, operatorNamespace, kubectlOptions) => { return kubectlUtils.isOperatorAlreadyInstalled(kubectlExe, operatorNamespace, kubectlOptions); }); @@ -1022,91 +1021,6 @@ class Main { }); }); }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-release-versions', async (event, minimumVersion = undefined) => { - return getVerrazzanoReleaseVersions(minimumVersion); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('is-verrazzano-installed', async(event, kubectlExe, kubectlOptions) => { - return isVerrazzanoInstalled(kubectlExe, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('install-verrazzano-platform-operator', async(event, kubectlExe, kubectlOptions, vzOptions) => { - return installVerrazzanoPlatformOperator(kubectlExe, kubectlOptions, vzOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('verify-verrazzano-platform-operator-install', async (event, kubectlExe, kubectlOptions, vzOptions) => { - return verifyVerrazzanoPlatformOperatorInstall(kubectlExe, kubectlOptions, vzOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('install-verrazzano', async (event, kubectlExe, kubectlOptions, verrazzanoResource) => { - return installVerrazzano(kubectlExe, kubectlOptions, verrazzanoResource); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('verify-verrazzano-install-status', async (event, kubectlExe, kubectlOptions, vzOptions) => { - return verifyVerrazzanoInstallStatus(kubectlExe, kubectlOptions, vzOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('deploy-verrazzano-components', async (event, kubectlExe, components, kubectlOptions) => { - return deployComponents(kubectlExe, components, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('undeploy-verrazzano-components', async (event, kubectlExe, componentNames, namespace, kubectlOptions) => { - return undeployComponents(kubectlExe, componentNames, namespace, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-component-names', async (event, kubectlExe, namespace, kubectlOptions) => { - return getComponentNamesByNamespace(kubectlExe, namespace, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-secret-names', async (event, kubectlExe, namespace, kubectlOptions) => { - return getSecretNamesByNamespace(kubectlExe, namespace, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-host-names', async (event, kubectlExe, applicationName, applicationNamespace, options) => { - return getHostNames(kubectlExe, applicationName, applicationNamespace, options); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-cluster-names', async (event, kubectlExe, kubectlOptions) => { - return getVerrazzanoClusterNames(kubectlExe, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('get-verrazzano-deployment-names-all-namespaces', async (event, kubectlExe, kubectlOptions) => { - return getDeploymentNamesFromAllNamespaces(kubectlExe, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('deploy-verrazzano-application', async (event, kubectlExe, application, kubectlOptions) => { - return deployApplication(kubectlExe, application, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('undeploy-verrazzano-application', async (event, kubectlExe, isMultiClusterApplication, applicationName, namespace, kubectlOptions) => { - return undeployApplication(kubectlExe, isMultiClusterApplication, applicationName, namespace, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('deploy-verrazzano-project', async (event, kubectlExe, project, kubectlOptions) => { - return deployProject(kubectlExe, project, kubectlOptions); - }); - - // eslint-disable-next-line no-unused-vars - ipcMain.handle('verify-verrazzano-components-exist',async (event, kubectlExe, componentNames, namespace, kubectlOptions) => { - return kubectlUtils.verifyVerrazzanoComponentsDeployed(kubectlExe, componentNames, namespace, kubectlOptions); - }); } async getLatestWdtInstaller(targetWindow) { diff --git a/electron/app/test/credentialStore-test.js b/electron/app/test/credentialStore-test.js deleted file mode 100644 index 466e9064a..000000000 --- a/electron/app/test/credentialStore-test.js +++ /dev/null @@ -1,128 +0,0 @@ -/** - * @license - * Copyright (c) 2021, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - * @ignore - */ -'use strict'; - -const proxyquire = require('proxyquire'); -const { assert, expect } = require('chai'); -const { before, describe, it } = require('mocha'); -const osUtils = require('../js/osUtils'); - -/* global process */ -describe('Credential Store tests', () => { - const wktLoggerMock = { - getLogger: () => { - return console; - } - }; - - const CredentialStore = proxyquire('../js/credentialStore', { './wktLogging': wktLoggerMock }); - let credStore; - - let skipTestsInJenkins = false; - if (!osUtils.isWindows() && 'JENKINS_NODE_COOKIE' in process.env) { - skipTestsInJenkins = true; - } - - before(async () => { - credStore = new CredentialStore('wktui-test'); - await cleanStaleCredentials(); - }); - - async function cleanStaleCredentials() { - const staleCreds = credStore.findCredentials(); - if (staleCreds && Array.isArray(staleCreds)) { - for (const staleCred of staleCreds) { - await credStore.deleteCredential(staleCred.account); - } - } - } - - if (!skipTestsInJenkins) { - it('store new credential works', async () => { - try { - await credStore.storeCredential('test1', 'f00b@r!'); - } catch (err) { - assert.fail(`Failed to store credential test1: ${err}`); - } - }); - - // On the Jenkins MacOS slaves, this test fails at least half the time with the error: - // The specified item already exists in the keychain. This causes some of the subsequent - // tests to fail. - // - // This has never once reproduced on a developer's MacOS machine so we will just not run - // the tests in the Jenkins MacOS environment. - // - it('replace existing credential works', async () => { - try { - await credStore.storeCredential('test1', '8e7rty9wrfhofhd98@92382093ue09udjo8dfsyu'); - const newCredentialValue = await credStore.getCredential('test1'); - expect(newCredentialValue).to.equal('8e7rty9wrfhofhd98@92382093ue09udjo8dfsyu'); - } catch (err) { - assert.fail(`Failed to replace existing credential test1: ${err}`); - } - }); - - it('get existing credential works', async () => { - try { - const credentialValue = await credStore.getCredential('test1'); - expect(credentialValue).to.equal('8e7rty9wrfhofhd98@92382093ue09udjo8dfsyu'); - } catch (err) { - assert.fail(`Failed to get existing credential test1: ${err}`); - } - }); - - it('get non-existent credential works as expected', async () => { - try { - const credentialValue = await credStore.getCredential('test2'); - expect(credentialValue).to.be.null; - } catch (err) { - assert.fail(`Failed to get non-existent credential test2: ${err}`); - } - }); - - it('find credentials to work', async () => { - try { - const credentials = await credStore.findCredentials(); - expect(credentials).to.not.be.null; - expect(credentials).to.have.length(1); - expect(credentials[0].name).to.equal('test1'); - expect(credentials[0].value).to.equal('8e7rty9wrfhofhd98@92382093ue09udjo8dfsyu'); - } catch (err) { - assert.fail(`Failed to get credentials: ${err}`); - } - }); - - it('delete non-existent credential works as expected', async () => { - try { - const result = await credStore.deleteCredential('test2'); - expect(result).to.be.false; - } catch (err) { - assert.fail(`Failed to handle delete for non-existent credential: ${err}`); - } - }); - - it('delete existing credential works as expected', async () => { - try { - const result = await credStore.deleteCredential('test1'); - expect(result).to.be.true; - } catch (err) { - assert.fail(`Failed to handle delete for existing credential: ${err}`); - } - }); - - it('find credentials when there are none works as expected', async () => { - try { - const credentials = await credStore.findCredentials(); - expect(credentials).to.not.be.null; - expect(credentials).to.have.length(0); - } catch (err) { - assert.fail(`Failed to get credentials when there were none: ${err}`); - } - }); - } -}); diff --git a/electron/package-lock.json b/electron/package-lock.json index 1d2170327..60739aabc 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -1,38 +1,37 @@ { "name": "wktui", - "version": "1.6.2", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "wktui", - "version": "1.6.2", + "version": "2.0.0", "license": "UPL-1.0", "dependencies": { - "electron-updater": "^6.1.4", + "electron-updater": "^6.1.8", "extract-zip": "^2.0.1", "gunzip-maybe": "^1.4.2", - "https-proxy-agent": "^7.0.2", - "i18next": "^23.5.1", - "i18next-fs-backend": "^2.2.0", + "https-proxy-agent": "^7.0.4", + "i18next": "^23.10.0", + "i18next-fs-backend": "^2.3.1", "js-yaml": "^4.1.0", "jszip": "^3.10.1", - "keytar": "^7.9.0", "node-fetch": "^2.7.0", "tar": "^6.2.0", "uuid": "^9.0.1", - "which": "^3.0.1", - "winston": "^3.10.0", - "winston-daily-rotate-file": "^4.7.1" + "which": "^4.0.0", + "winston": "^3.11.0", + "winston-daily-rotate-file": "^5.0.0" }, "devDependencies": { - "@electron/notarize": "^2.1.0", - "chai": "^4.3.8", + "@electron/notarize": "^2.3.0", + "chai": "^4.4.1", "chai-as-promised": "^7.1.1", - "electron": "^25.9.8", - "electron-builder": "^24.6.4", - "eslint": "^8.49.0", - "mocha": "^10.2.0", + "electron": "^29.0.1", + "electron-builder": "^24.12.0", + "eslint": "^8.57.0", + "mocha": "^10.3.0", "nyc": "^15.1.0", "proxyquire": "^2.1.3" } @@ -473,9 +472,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -577,9 +576,9 @@ } }, "node_modules/@electron/asar": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.5.tgz", - "integrity": "sha512-Ypahc2ElTj9YOrFvUHuoXv5Z/V1nPA5enlhmQapc578m/HZBHKTbqhoL5JZQjje2+/6Ti5AHh7Gj1/haeJa63Q==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.8.tgz", + "integrity": "sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg==", "dev": true, "dependencies": { "commander": "^5.0.0", @@ -647,9 +646,9 @@ } }, "node_modules/@electron/notarize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz", - "integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.0.tgz", + "integrity": "sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -750,9 +749,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -773,22 +772,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -809,11 +808,107 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -1047,6 +1142,16 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -1093,9 +1198,9 @@ } }, "node_modules/@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "dependencies": { "@types/ms": "*" @@ -1126,21 +1231,24 @@ } }, "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, "node_modules/@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==", - "devOptional": true + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "devOptional": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", "dev": true, "optional": true, "dependencies": { @@ -1158,9 +1266,9 @@ } }, "node_modules/@types/verror": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", - "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "version": "1.10.9", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.9.tgz", + "integrity": "sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==", "dev": true, "optional": true }, @@ -1173,6 +1281,12 @@ "@types/node": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -1183,15 +1297,15 @@ } }, "node_modules/7zip-bin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", "dev": true }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1312,9 +1426,9 @@ "dev": true }, "node_modules/app-builder-lib": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.6.4.tgz", - "integrity": "sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.12.0.tgz", + "integrity": "sha512-t/xinVrMbsEhwljLDoFOtGkiZlaxY1aceZbHERGAS02EkUHJp9lgs/+L8okXLlYCaDSqYdB05Yb8Co+krvguXA==", "dev": true, "dependencies": { "@develar/schema-utils": "~2.6.5", @@ -1323,15 +1437,14 @@ "@electron/universal": "1.4.1", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", - "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.4", "ejs": "^3.1.8", - "electron-publish": "24.5.0", + "electron-publish": "24.9.4", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", @@ -1350,6 +1463,35 @@ "node": ">=14.0.0" } }, + "node_modules/app-builder-lib/node_modules/@electron/notarize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz", + "integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/app-builder-lib/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, + "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/app-builder-lib/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -1491,6 +1633,7 @@ "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", @@ -1515,29 +1658,6 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -1628,6 +1748,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, "funding": [ { "type": "github", @@ -1642,6 +1763,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1673,16 +1795,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/builder-util": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.5.0.tgz", - "integrity": "sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==", + "version": "24.9.4", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.9.4.tgz", + "integrity": "sha512-YNon3rYjPSm4XDDho9wD6jq7vLRJZUy9FR+yFZnHoWvvdVCnZakL4BctTlPABP41MvIH5yk2cTZ2YfkOhGistQ==", "dev": true, "dependencies": { "@types/debug": "^4.1.6", - "7zip-bin": "~5.1.1", + "7zip-bin": "~5.2.0", "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.1", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", @@ -1697,9 +1819,9 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz", + "integrity": "sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -1812,18 +1934,18 @@ ] }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -1858,10 +1980,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -1920,9 +2045,9 @@ "dev": true }, "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true, "funding": [ { @@ -2086,13 +2211,87 @@ "dev": true }, "node_modules/config-file-ts": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz", - "integrity": "sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", "dev": true, "dependencies": { - "glob": "^7.1.6", - "typescript": "^4.0.2" + "glob": "^10.3.10", + "typescript": "^5.3.3" + } + }, + "node_modules/config-file-ts/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/config-file-ts/node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/convert-source-map": { @@ -2174,6 +2373,7 @@ "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, "dependencies": { "mimic-response": "^3.1.0" }, @@ -2188,6 +2388,7 @@ "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, "engines": { "node": ">=10" }, @@ -2207,14 +2408,6 @@ "node": ">=6" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2271,14 +2464,6 @@ "node": ">=0.4.0" } }, - "node_modules/detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", - "engines": { - "node": ">=8" - } - }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -2306,14 +2491,14 @@ } }, "node_modules/dmg-builder": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.6.4.tgz", - "integrity": "sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.12.0.tgz", + "integrity": "sha512-nS22OyHUIYcK40UnILOtqC5Qffd1SN1Ljqy/6e+QR2H1wM3iNBrKJoEbDRfEmYYaALKNFRkKPqSbZKRsGUBdPw==", "dev": true, "dependencies": { - "app-builder-lib": "24.6.4", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "app-builder-lib": "24.12.0", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -2400,6 +2585,12 @@ "stream-shift": "^1.0.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", @@ -2416,14 +2607,14 @@ } }, "node_modules/electron": { - "version": "25.9.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", - "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", + "version": "29.0.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-29.0.1.tgz", + "integrity": "sha512-hsQr9clm8NCAMv4uhHlXThHn52UAgrHgyz3ubBAxZIPuUcpKVDtg4HPmx4hbmHIbYICI5OyLN3Ztp7rS+Dn4Lw==", "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", + "@types/node": "^20.9.0", "extract-zip": "^2.0.1" }, "bin": { @@ -2434,16 +2625,16 @@ } }, "node_modules/electron-builder": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.6.4.tgz", - "integrity": "sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.12.0.tgz", + "integrity": "sha512-dH4O9zkxFxFbBVFobIR5FA71yJ1TZSCvjZ2maCskpg7CWjBF+SNRSQAThlDyUfRuB+jBTMwEMzwARywmap0CSw==", "dev": true, "dependencies": { - "app-builder-lib": "24.6.4", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "app-builder-lib": "24.12.0", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", - "dmg-builder": "24.6.4", + "dmg-builder": "24.12.0", "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", @@ -2474,14 +2665,14 @@ } }, "node_modules/electron-publish": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.5.0.tgz", - "integrity": "sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==", + "version": "24.9.4", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.9.4.tgz", + "integrity": "sha512-FghbeVMfxHneHjsG2xUSC0NMZYWOOWhBxfZKPTbibcJ0CjPH0Ph8yb5CUO62nqywXfA5u1Otq6K8eOdOixxmNg==", "dev": true, "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", @@ -2509,11 +2700,11 @@ "dev": true }, "node_modules/electron-updater": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.4.tgz", - "integrity": "sha512-yYAJc6RQjjV4WtInZVn+ZcLyXRhbVXoomKEfUUwDqIk5s2wxzLhWaor7lrNgxODyODhipjg4SVPMhJHi5EnsCA==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.8.tgz", + "integrity": "sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==", "dependencies": { - "builder-util-runtime": "9.2.1", + "builder-util-runtime": "9.2.3", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", @@ -2622,18 +2813,19 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -2775,14 +2967,6 @@ "node": ">=0.10.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "engines": { - "node": ">=6" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -3040,11 +3224,6 @@ } ] }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -3173,11 +3352,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3245,9 +3419,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3460,9 +3634,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -3483,9 +3657,9 @@ } }, "node_modules/i18next": { - "version": "23.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.5.1.tgz", - "integrity": "sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg==", + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", "funding": [ { "type": "individual", @@ -3501,13 +3675,13 @@ } ], "dependencies": { - "@babel/runtime": "^7.22.5" + "@babel/runtime": "^7.23.2" } }, "node_modules/i18next-fs-backend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", - "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.1.tgz", + "integrity": "sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg==" }, "node_modules/iconv-corefoundation": { "version": "1.1.7", @@ -3542,6 +3716,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, "funding": [ { "type": "github", @@ -3555,12 +3730,13 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "optional": true }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -3620,11 +3796,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -3789,12 +3960,12 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isbinaryfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", - "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz", + "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==", "dev": true, "engines": { - "node": ">= 14.0.0" + "node": ">= 18.0.0" }, "funding": { "url": "https://github.com/sponsors/gjtorikian/" @@ -3803,7 +3974,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -3908,6 +4080,24 @@ "node": ">=8" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.8.7", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", @@ -4019,21 +4209,6 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, - "node_modules/keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - } - }, - "node_modules/keytar/node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, "node_modules/keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", @@ -4266,6 +4441,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4312,15 +4488,10 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -4330,13 +4501,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -4351,10 +4521,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/cliui": { @@ -4369,37 +4535,24 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": 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" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -4479,54 +4632,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-abi": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.43.0.tgz", - "integrity": "sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ==", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -4761,9 +4872,9 @@ } }, "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "engines": { "node": ">= 6" } @@ -4936,6 +5047,31 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -5056,31 +5192,6 @@ "node": ">=10.4.0" } }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5218,28 +5329,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/read-config-file": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", @@ -5284,9 +5373,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/release-zalgo": { "version": "1.0.0", @@ -5559,49 +5648,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -5765,6 +5811,21 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "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, + "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", @@ -5777,6 +5838,19 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "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, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -5850,50 +5924,6 @@ "node": ">=10" } }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -6005,9 +6035,12 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", + "engines": { + "node": ">= 14.0.0" + } }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", @@ -6018,17 +6051,6 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6072,18 +6094,24 @@ } }, "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -6187,17 +6215,17 @@ } }, "node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.13.0 || >=18.0.0" } }, "node_modules/which-module": { @@ -6206,12 +6234,20 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "dev": true }, + "node_modules/which/node_modules/isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", + "engines": { + "node": ">=16" + } + }, "node_modules/winston": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", - "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", "dependencies": { - "@colors/colors": "1.5.0", + "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", @@ -6228,14 +6264,14 @@ } }, "node_modules/winston-daily-rotate-file": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", - "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", "dependencies": { "file-stream-rotator": "^0.6.1", - "object-hash": "^2.0.1", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" }, "engines": { "node": ">=8" @@ -6245,16 +6281,16 @@ } }, "node_modules/winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "dependencies": { "logform": "^2.3.2", "readable-stream": "^3.6.0", "triple-beam": "^1.3.0" }, "engines": { - "node": ">= 6.4.0" + "node": ">= 12.0.0" } }, "node_modules/winston-transport/node_modules/readable-stream": { @@ -6270,6 +6306,14 @@ "node": ">= 6" } }, + "node_modules/winston/node_modules/@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/winston/node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -6306,6 +6350,24 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "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, + "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", @@ -6793,9 +6855,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -6874,9 +6936,9 @@ } }, "@electron/asar": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.5.tgz", - "integrity": "sha512-Ypahc2ElTj9YOrFvUHuoXv5Z/V1nPA5enlhmQapc578m/HZBHKTbqhoL5JZQjje2+/6Ti5AHh7Gj1/haeJa63Q==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.8.tgz", + "integrity": "sha512-cmskk5M06ewHMZAplSiF4AlME3IrnnZhKnWbtwKVLRkdJkKyUVjMLhDIiPIx/+6zQWVlKX/LtmK9xDme7540Sg==", "dev": true, "requires": { "commander": "^5.0.0", @@ -6929,9 +6991,9 @@ } }, "@electron/notarize": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz", - "integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.3.0.tgz", + "integrity": "sha512-EiTBU0BwE7HZZjAG1fFWQaiQpCuPrVGn7jPss1kUjD6eTTdXXd29RiZqEqkgN7xqt/Pgn4g3I7Saqovanrfj3w==", "dev": true, "requires": { "debug": "^4.1.1", @@ -7003,9 +7065,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -7020,19 +7082,19 @@ } }, "@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" } }, @@ -7043,11 +7105,76 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -7222,6 +7349,13 @@ "fastq": "^1.6.0" } }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -7256,9 +7390,9 @@ } }, "@types/debug": { - "version": "4.1.8", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz", - "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==", + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, "requires": { "@types/ms": "*" @@ -7289,21 +7423,24 @@ } }, "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==", + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true }, "@types/node": { - "version": "18.16.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.16.tgz", - "integrity": "sha512-NpaM49IGQQAUlBhHMF82QH80J08os4ZmyF9MkpCzWAGuOHqE4gTEbhzd7L3l5LmWuZ6E0OiC1FweQ4tsiW35+g==", - "devOptional": true + "version": "20.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "devOptional": true, + "requires": { + "undici-types": "~5.26.4" + } }, "@types/plist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.2.tgz", - "integrity": "sha512-ULqvZNGMv0zRFvqn8/4LSPtnmN4MfhlPNtJCTpKuIIxGVGZ2rYWzFXrvEBoh9CVyqSE7D6YFRJ1hydLHI6kbWw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", + "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", "dev": true, "optional": true, "requires": { @@ -7321,9 +7458,9 @@ } }, "@types/verror": { - "version": "1.10.6", - "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.6.tgz", - "integrity": "sha512-NNm+gdePAX1VGvPcGZCDKQZKYSiAWigKhKaz5KF94hG6f2s8de9Ow5+7AbXoeKxL8gavZfk4UquSAygOF2duEQ==", + "version": "1.10.9", + "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.9.tgz", + "integrity": "sha512-MLx9Z+9lGzwEuW16ubGeNkpBDE84RpB/NyGgg6z2BTpWzKkGU451cAY3UkUzZEp72RHF585oJ3V8JVNqIplcAQ==", "dev": true, "optional": true }, @@ -7336,6 +7473,12 @@ "@types/node": "*" } }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "@xmldom/xmldom": { "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", @@ -7343,15 +7486,15 @@ "dev": true }, "7zip-bin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", "dev": true }, "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "dev": true }, "acorn-jsx": { @@ -7437,9 +7580,9 @@ "dev": true }, "app-builder-lib": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.6.4.tgz", - "integrity": "sha512-m9931WXb83teb32N0rKg+ulbn6+Hl8NV5SUpVDOVz9MWOXfhV6AQtTdftf51zJJvCQnQugGtSqoLvgw6mdF/Rg==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.12.0.tgz", + "integrity": "sha512-t/xinVrMbsEhwljLDoFOtGkiZlaxY1aceZbHERGAS02EkUHJp9lgs/+L8okXLlYCaDSqYdB05Yb8Co+krvguXA==", "dev": true, "requires": { "@develar/schema-utils": "~2.6.5", @@ -7448,15 +7591,14 @@ "@electron/universal": "1.4.1", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", - "7zip-bin": "~5.1.1", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chromium-pickle-js": "^0.2.0", "debug": "^4.3.4", "ejs": "^3.1.8", - "electron-publish": "24.5.0", + "electron-publish": "24.9.4", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", @@ -7472,6 +7614,31 @@ "temp-file": "^3.4.0" }, "dependencies": { + "@electron/notarize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.1.0.tgz", + "integrity": "sha512-Q02xem1D0sg4v437xHgmBLxI2iz/fc0D4K7fiVWHa/AnW8o7D751xyKNXgziA6HrTOme9ul1JfWN5ark8WH1xA==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "dependencies": { + "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, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + } + } + }, "brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -7584,7 +7751,8 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true }, "binary-extensions": { "version": "2.2.0", @@ -7592,28 +7760,6 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -7685,6 +7831,8 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "optional": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -7707,16 +7855,16 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "builder-util": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.5.0.tgz", - "integrity": "sha512-STnBmZN/M5vGcv01u/K8l+H+kplTaq4PAIn3yeuufUKSpcdro0DhJWxPI81k5XcNfC//bjM3+n9nr8F9uV4uAQ==", + "version": "24.9.4", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.9.4.tgz", + "integrity": "sha512-YNon3rYjPSm4XDDho9wD6jq7vLRJZUy9FR+yFZnHoWvvdVCnZakL4BctTlPABP41MvIH5yk2cTZ2YfkOhGistQ==", "dev": true, "requires": { "@types/debug": "^4.1.6", - "7zip-bin": "~5.1.1", + "7zip-bin": "~5.2.0", "app-builder-bin": "4.0.0", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.1", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", @@ -7754,9 +7902,9 @@ } }, "builder-util-runtime": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.1.tgz", - "integrity": "sha512-2rLv/uQD2x+dJ0J3xtsmI12AlRyk7p45TEbE/6o/fbb633e/S3pPgm+ct+JHsoY7r39dKHnGEFk/AASRFdnXmA==", + "version": "9.2.3", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.3.tgz", + "integrity": "sha512-FGhkqXdFFZ5dNC4C+yuQB9ak311rpGAw+/ASz8ZdxwODCv1GGMWgLDeofRkdi0F3VCHQEWy/aXcJQozx2nOPiw==", "requires": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -7814,18 +7962,18 @@ "dev": true }, "chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "requires": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" } }, "chai-as-promised": { @@ -7848,10 +7996,13 @@ } }, "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } }, "chokidar": { "version": "3.5.3", @@ -7892,9 +8043,9 @@ "dev": true }, "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "dev": true }, "clean-stack": { @@ -8024,13 +8175,62 @@ "dev": true }, "config-file-ts": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.4.tgz", - "integrity": "sha512-cKSW0BfrSaAUnxpgvpXPLaaW/umg4bqg4k3GO1JqlRfpx+d5W0GDXznCMkWotJQek5Mmz1MJVChQnz3IVaeMZQ==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", + "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", "dev": true, "requires": { - "glob": "^7.1.6", - "typescript": "^4.0.2" + "glob": "^10.3.10", + "typescript": "^5.3.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + } + }, + "minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } } }, "convert-source-map": { @@ -8094,6 +8294,7 @@ "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, "requires": { "mimic-response": "^3.1.0" }, @@ -8101,7 +8302,8 @@ "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==" + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true } } }, @@ -8114,11 +8316,6 @@ "type-detect": "^4.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -8157,11 +8354,6 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, "detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", @@ -8186,14 +8378,14 @@ } }, "dmg-builder": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.6.4.tgz", - "integrity": "sha512-BNcHRc9CWEuI9qt0E655bUBU/j/3wUCYBVKGu1kVpbN5lcUdEJJJeiO0NHK3dgKmra6LUUZlo+mWqc+OCbi0zw==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.12.0.tgz", + "integrity": "sha512-nS22OyHUIYcK40UnILOtqC5Qffd1SN1Ljqy/6e+QR2H1wM3iNBrKJoEbDRfEmYYaALKNFRkKPqSbZKRsGUBdPw==", "dev": true, "requires": { - "app-builder-lib": "24.6.4", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "app-builder-lib": "24.12.0", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "dmg-license": "^1.0.11", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", @@ -8262,6 +8454,12 @@ "stream-shift": "^1.0.0" } }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "ejs": { "version": "3.1.9", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", @@ -8272,27 +8470,27 @@ } }, "electron": { - "version": "25.9.8", - "resolved": "https://registry.npmjs.org/electron/-/electron-25.9.8.tgz", - "integrity": "sha512-PGgp6PH46QVENHuAHc2NT1Su8Q1qov7qIl2jI5tsDpTibwV2zD8539AeWBQySeBU4dhbj9onIl7+1bXQ0wefBg==", + "version": "29.0.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-29.0.1.tgz", + "integrity": "sha512-hsQr9clm8NCAMv4uhHlXThHn52UAgrHgyz3ubBAxZIPuUcpKVDtg4HPmx4hbmHIbYICI5OyLN3Ztp7rS+Dn4Lw==", "dev": true, "requires": { "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", + "@types/node": "^20.9.0", "extract-zip": "^2.0.1" } }, "electron-builder": { - "version": "24.6.4", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.6.4.tgz", - "integrity": "sha512-uNWQoU7pE7qOaIQ6CJHpBi44RJFVG8OHRBIadUxrsDJVwLLo8Nma3K/EEtx5/UyWAQYdcK4nVPYKoRqBb20hbA==", + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.12.0.tgz", + "integrity": "sha512-dH4O9zkxFxFbBVFobIR5FA71yJ1TZSCvjZ2maCskpg7CWjBF+SNRSQAThlDyUfRuB+jBTMwEMzwARywmap0CSw==", "dev": true, "requires": { - "app-builder-lib": "24.6.4", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "app-builder-lib": "24.12.0", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", - "dmg-builder": "24.6.4", + "dmg-builder": "24.12.0", "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", @@ -8315,14 +8513,14 @@ } }, "electron-publish": { - "version": "24.5.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.5.0.tgz", - "integrity": "sha512-zwo70suH15L15B4ZWNDoEg27HIYoPsGJUF7xevLJLSI7JUPC8l2yLBdLGwqueJ5XkDL7ucYyRZzxJVR8ElV9BA==", + "version": "24.9.4", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.9.4.tgz", + "integrity": "sha512-FghbeVMfxHneHjsG2xUSC0NMZYWOOWhBxfZKPTbibcJ0CjPH0Ph8yb5CUO62nqywXfA5u1Otq6K8eOdOixxmNg==", "dev": true, "requires": { "@types/fs-extra": "^9.0.11", - "builder-util": "24.5.0", - "builder-util-runtime": "9.2.1", + "builder-util": "24.9.4", + "builder-util-runtime": "9.2.3", "chalk": "^4.1.2", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", @@ -8349,11 +8547,11 @@ "dev": true }, "electron-updater": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.4.tgz", - "integrity": "sha512-yYAJc6RQjjV4WtInZVn+ZcLyXRhbVXoomKEfUUwDqIk5s2wxzLhWaor7lrNgxODyODhipjg4SVPMhJHi5EnsCA==", + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.1.8.tgz", + "integrity": "sha512-hhOTfaFAd6wRHAfUaBhnAOYc+ymSGCWJLtFkw4xJqOvtpHmIdNHnXDV9m1MHC+A6q08Abx4Ykgyz/R5DGKNAMQ==", "requires": { - "builder-util-runtime": "9.2.1", + "builder-util-runtime": "9.2.3", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", @@ -8443,18 +8641,19 @@ "dev": true }, "eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -8550,11 +8749,6 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" - }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -8753,11 +8947,6 @@ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", "dev": true }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, "fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -8851,11 +9040,6 @@ "pump": "^3.0.0" } }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" - }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -8907,9 +9091,9 @@ } }, "globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -9067,9 +9251,9 @@ } }, "https-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", - "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "requires": { "agent-base": "^7.0.2", "debug": "4" @@ -9086,17 +9270,17 @@ } }, "i18next": { - "version": "23.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.5.1.tgz", - "integrity": "sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg==", + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", "requires": { - "@babel/runtime": "^7.22.5" + "@babel/runtime": "^7.23.2" } }, "i18next-fs-backend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.2.0.tgz", - "integrity": "sha512-VOPHhdDX0M/csRqEw+9Ectpf6wvTIg1MZDfAHxc3JKnAlJz7fcZSAKAeyDohOq0xuLx57esYpJopIvBaRb0Bag==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/i18next-fs-backend/-/i18next-fs-backend-2.3.1.tgz", + "integrity": "sha512-tvfXskmG/9o+TJ5Fxu54sSO5OkY6d+uMn+K6JiUGLJrwxAVfer+8V3nU8jq3ts9Pe5lXJv4b1N7foIjJ8Iy2Gg==" }, "iconv-corefoundation": { "version": "1.1.7", @@ -9121,12 +9305,14 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "optional": true }, "ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true }, "immediate": { @@ -9171,11 +9357,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", @@ -9292,15 +9473,16 @@ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isbinaryfile": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.0.tgz", - "integrity": "sha512-UDdnyGvMajJUWCkib7Cei/dvyJrrvo4FIrsvSFWdPpXSUorzXrDJ0S+X5Q4ZlasfPjca4yqCNNsjbCeiy8FFeg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz", + "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -9383,6 +9565,16 @@ "istanbul-lib-report": "^3.0.0" } }, + "jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, "jake": { "version": "10.8.7", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", @@ -9473,22 +9665,6 @@ } } }, - "keytar": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", - "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", - "requires": { - "node-addon-api": "^4.3.0", - "prebuild-install": "^7.0.1" - }, - "dependencies": { - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - } - } - }, "keyv": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", @@ -9672,7 +9848,8 @@ "minimist": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "dev": true }, "minipass": { "version": "5.0.0", @@ -9703,15 +9880,10 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" - }, "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -9721,13 +9893,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -9749,28 +9920,16 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "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" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "minimatch": { @@ -9841,41 +10000,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node-abi": { - "version": "3.43.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.43.0.tgz", - "integrity": "sha512-QB0MMv+tn9Ur2DtJrc8y09n0n6sw88CyDniWSX2cHW10goQXYPK9ZpFJOktDS4ron501edPX6h9i7Pg+RnH5nQ==", - "requires": { - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, "node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", @@ -10056,9 +10186,9 @@ } }, "object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" }, "object-keys": { "version": "1.1.1", @@ -10186,6 +10316,24 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, + "path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "requires": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true + } + } + }, "pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -10278,25 +10426,6 @@ "xmlbuilder": "^15.1.1" } }, - "prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - } - }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10401,24 +10530,6 @@ "safe-buffer": "^5.1.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } - } - }, "read-config-file": { "version": "6.3.2", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", @@ -10457,9 +10568,9 @@ } }, "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "release-zalgo": { "version": "1.0.0", @@ -10662,21 +10773,6 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -10807,6 +10903,17 @@ "strip-ansi": "^6.0.1" } }, + "string-width-cjs": { + "version": "npm:string-width@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, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -10816,6 +10923,15 @@ "ansi-regex": "^5.0.1" } }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, "strip-bom": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", @@ -10865,48 +10981,6 @@ "yallist": "^4.0.0" } }, - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, "temp-file": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", @@ -11005,9 +11079,9 @@ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" }, "truncate-utf8-bytes": { "version": "1.0.2", @@ -11018,14 +11092,6 @@ "utf8-byte-length": "^1.0.1" } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -11057,11 +11123,17 @@ } }, "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "devOptional": true + }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -11138,11 +11210,18 @@ } }, "which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", + "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "requires": { - "isexe": "^2.0.0" + "isexe": "^3.1.1" + }, + "dependencies": { + "isexe": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", + "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==" + } } }, "which-module": { @@ -11152,11 +11231,11 @@ "dev": true }, "winston": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.10.0.tgz", - "integrity": "sha512-nT6SIDaE9B7ZRO0u3UvdrimG0HkB7dSTAgInQnNR2SOPJ4bvq5q79+pXLftKmP52lJGW15+H5MCK0nM9D3KB/g==", + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", + "integrity": "sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==", "requires": { - "@colors/colors": "1.5.0", + "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", @@ -11169,6 +11248,11 @@ "winston-transport": "^4.5.0" }, "dependencies": { + "@colors/colors": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -11182,20 +11266,20 @@ } }, "winston-daily-rotate-file": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", - "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-5.0.0.tgz", + "integrity": "sha512-JDjiXXkM5qvwY06733vf09I2wnMXpZEhxEVOSPenZMii+g7pcDcTBt2MRugnoi8BwVSuCT2jfRXBUy+n1Zz/Yw==", "requires": { "file-stream-rotator": "^0.6.1", - "object-hash": "^2.0.1", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" + "object-hash": "^3.0.0", + "triple-beam": "^1.4.1", + "winston-transport": "^4.7.0" } }, "winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", + "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", "requires": { "logform": "^2.3.2", "readable-stream": "^3.6.0", @@ -11231,6 +11315,17 @@ "strip-ansi": "^6.0.0" } }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/electron/package.json b/electron/package.json index 7e3302f91..7aeb8e561 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,7 +1,7 @@ { "name": "wktui", "productName": "WebLogic Kubernetes Toolkit UI", - "version": "1.6.2", + "version": "2.0.0", "description": "WebLogic Kubernetes Toolkit UI", "copyright": "Copyright (c) 2021, 2023, Oracle and/or its affiliates.", "homepage": "https://github.com/oracle/weblogic-toolkit-ui", @@ -48,32 +48,31 @@ ], "license": "UPL-1.0", "devDependencies": { - "@electron/notarize": "^2.1.0", - "chai": "^4.3.8", + "@electron/notarize": "^2.3.0", + "chai": "^4.4.1", "chai-as-promised": "^7.1.1", - "electron": "^25.9.8", - "electron-builder": "^24.6.4", - "eslint": "^8.49.0", - "mocha": "^10.2.0", + "electron": "^29.0.1", + "electron-builder": "^24.12.0", + "eslint": "^8.57.0", + "mocha": "^10.3.0", "nyc": "^15.1.0", "proxyquire": "^2.1.3" }, "dependencies": { - "electron-updater": "^6.1.4", + "electron-updater": "^6.1.8", "extract-zip": "^2.0.1", "gunzip-maybe": "^1.4.2", - "https-proxy-agent": "^7.0.2", - "i18next": "^23.5.1", - "i18next-fs-backend": "^2.2.0", + "https-proxy-agent": "^7.0.4", + "i18next": "^23.10.0", + "i18next-fs-backend": "^2.3.1", "js-yaml": "^4.1.0", "jszip": "^3.10.1", - "keytar": "^7.9.0", "node-fetch": "^2.7.0", "tar": "^6.2.0", "uuid": "^9.0.1", - "which": "^3.0.1", - "winston": "^3.10.0", - "winston-daily-rotate-file": "^4.7.1" + "which": "^4.0.0", + "winston": "^3.11.0", + "winston-daily-rotate-file": "^5.0.0" }, "build": { "appId": "com.oracle.weblogic.wktui", diff --git a/tools/wdt-config/targets/vz-dii/target.json b/tools/wdt-config/targets/vz-dii/target.json deleted file mode 100644 index c6743fcab..000000000 --- a/tools/wdt-config/targets/vz-dii/target.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "model_filters" : { - "discover": [ - { "id": "wko_filter" } - ] - }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, - "validation_method" : "lax", - "results_output_method" : "json", - "exclude_domain_bin_contents": true, - "wls_credentials_name" : "__weblogic-credentials__", - "additional_output" : "vz-application.yaml", - "set_cluster_replicas": true -} diff --git a/tools/wdt-config/targets/vz-pv/target.json b/tools/wdt-config/targets/vz-pv/target.json deleted file mode 100644 index 15fa9ea5d..000000000 --- a/tools/wdt-config/targets/vz-pv/target.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "model_filters" : { - "discover": [ - { "id": "wko_filter" } - ] - }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, - "validation_method" : "lax", - "results_output_method" : "json", - "exclude_domain_bin_contents": true, - "credentials_method" : "secrets", - "wls_credentials_name" : "__weblogic-credentials__", - "additional_output" : "vz-application.yaml", - "use_persistent_volume" : true -} diff --git a/tools/wdt-config/targets/vz/target.json b/tools/wdt-config/targets/vz/target.json deleted file mode 100644 index 116dfb447..000000000 --- a/tools/wdt-config/targets/vz/target.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "model_filters" : { - "discover": [ - { "id": "wko_filter" } - ] - }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, - "validation_method" : "wktui", - "credentials_method" : "secrets", - "results_output_method" : "json", - "exclude_domain_bin_contents": true, - "wls_credentials_name" : "__weblogic-credentials__", - "additional_secrets": "runtime-encryption-secret", - "additional_output" : "vz-application.yaml", - "set_cluster_replicas": true -} diff --git a/tools/wdt-config/targets/wko-dii/target.json b/tools/wdt-config/targets/wko-dii/target.json index 564b8b536..d192ff267 100644 --- a/tools/wdt-config/targets/wko-dii/target.json +++ b/tools/wdt-config/targets/wko-dii/target.json @@ -4,11 +4,16 @@ { "id": "wko_filter" } ] }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, + "final_filters" : [ + { "id": "wko_final_filter" } + ], + "variable_injectors" : ["port", "host", "url"], "validation_method" : "wktui", "results_output_method" : "json", + "domain_home_source_type" : "dii", "exclude_domain_bin_contents": true, "wls_credentials_name" : "__weblogic-credentials__", + "product_version" : "v4", "additional_output" : "wko-domain.yaml", "set_cluster_replicas": true } diff --git a/tools/wdt-config/targets/wko-pv/target.json b/tools/wdt-config/targets/wko-pv/target.json index 7b3dbea17..c358d22b2 100644 --- a/tools/wdt-config/targets/wko-pv/target.json +++ b/tools/wdt-config/targets/wko-pv/target.json @@ -4,12 +4,17 @@ { "id": "wko_filter" } ] }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, + "final_filters" : [ + { "id": "wko_final_filter" } + ], + "variable_injectors" : ["port", "host", "url"], "validation_method" : "wktui", "results_output_method" : "json", + "domain_home_source_type" : "pv", "exclude_domain_bin_contents": true, "credentials_method" : "secrets", "wls_credentials_name" : "__weblogic-credentials__", + "product_version" : "v4", "additional_output" : "wko-domain.yaml", "use_persistent_volume" : true } diff --git a/tools/wdt-config/targets/wko/target.json b/tools/wdt-config/targets/wko/target.json index fce77b5b3..7c39b05d8 100644 --- a/tools/wdt-config/targets/wko/target.json +++ b/tools/wdt-config/targets/wko/target.json @@ -4,11 +4,16 @@ { "id": "wko_filter" } ] }, - "variable_injectors" : {"PORT": {},"HOST": {},"URL": {}}, + "final_filters" : [ + { "id": "wko_final_filter" } + ], + "variable_injectors" : ["port", "host", "url"], "validation_method" : "wktui", + "domain_home_source_type" : "mii", "credentials_method" : "secrets", "results_output_method" : "json", "exclude_domain_bin_contents": true, + "product_version" : "v4", "wls_credentials_name" : "__weblogic-credentials__", "additional_secrets": "runtime-encryption-secret", "additional_output" : "wko-domain.yaml", diff --git a/webui/oraclejetconfig.json b/webui/oraclejetconfig.json index babc9631e..8fd7286ca 100644 --- a/webui/oraclejetconfig.json +++ b/webui/oraclejetconfig.json @@ -3,7 +3,6 @@ "source": { "common": "src", "web": "src-web", - "hybrid": "src-hybrid", "javascript": "js", "typescript": "ts", "styles": "css", @@ -11,15 +10,16 @@ }, "staging": { "web": "web", - "hybrid": "hybrid", "themes": "staged-themes" } }, "defaultBrowser": "chrome", - "sassVer": "7.0.1", + "sassVer": "8.0.0", "defaultTheme": "redwood", - "typescriptLibraries": "typescript@4.8.4 yargs-parser@~13.1.2", - "webpackLibraries": "webpack@5.60.0 @types/node@18.8.3 webpack-dev-server style-loader css-loader ts-loader raw-loader noop-loader html-webpack-plugin html-replace-webpack-plugin copy-webpack-plugin @prefresh/webpack @prefresh/babel-plugin webpack-merge compression-webpack-plugin mini-css-extract-plugin clean-webpack-plugin css-fix-url-loader", + "typescriptLibraries": "typescript@5.3.2 yargs-parser@~13.1.2", + "webpackLibraries": "webpack@5.76.0 @types/node@18.16.3 webpack-dev-server style-loader css-loader sass-loader sass ts-loader@8.4.0 raw-loader noop-loader html-webpack-plugin html-replace-webpack-plugin copy-webpack-plugin @prefresh/webpack @prefresh/babel-plugin webpack-merge compression-webpack-plugin mini-css-extract-plugin clean-webpack-plugin css-fix-url-loader", + "mochaTestingLibraries": "karma mocha sinon chai coverage karma-chai@0.1.0 karma-coverage@2.2.0 karma-chrome-launcher@3.1.1 karma-mocha@2.0.1 karma-mocha-reporter@2.2.5 karma-requirejs@1.1.0 karma-fixture@0.2.6 karma-sinon@1.0.5 karma-typescript@5.5.4 @types/chai@4.3.4 @types/karma-fixture@0.2.5 @types/mocha@10.0.1 @types/sinon@10.0.13", + "jestTestingLibraries": "jest@29.6.2 @testing-library/preact@3.2.3 @types/jest@29.5.3 jest-environment-jsdom@29.6.2 @oracle/oraclejet-jest-preset@~16.0.0", "architecture": "mvvm", "watchInterval": 1000 } \ No newline at end of file diff --git a/webui/package-lock.json b/webui/package-lock.json index 7ef9b6c37..20a291f93 100644 --- a/webui/package-lock.json +++ b/webui/package-lock.json @@ -5,28 +5,28 @@ "packages": { "": { "dependencies": { - "@oracle/oraclejet": "^14.1.8", - "@oracle/oraclejet-core-pack": "^14.1.8", - "@oracle/wrc-jet-pack": "~2.4.6", - "ace-builds": "^1.27.0", - "i18next": "^23.5.1", + "@oracle/oraclejet": "~16.0.0", + "@oracle/oraclejet-core-pack": "~16.0.0", + "@oracle/wrc-jet-pack": "~2.4.8", + "ace-builds": "^1.32.6", + "i18next": "^23.10.0", "jquery": "^3.7.1", "js-yaml": "^4.1.0" }, "devDependencies": { - "@oracle/ojet-cli": "^14.1.0", - "@oracle/oraclejet-audit": "^14.1.8", - "@oracle/oraclejet-tooling": "^14.1.2", - "chai": "^4.3.8", + "@oracle/ojet-cli": "~16.0.0", + "@oracle/oraclejet-audit": "~16.0.0", + "@oracle/oraclejet-tooling": "~16.0.0", + "chai": "^4.4.1", "chai-as-promised": "^7.1.1", - "eslint": "^8.49.0", + "eslint": "^8.57.0", "eslint-plugin-requirejs": "^4.0.1", "extract-zip": "^2.0.1", - "fs-extra": "^11.1.1", - "glob": "^10.3.4", - "jsdom": "^22.1.0", + "fs-extra": "^11.2.0", + "glob": "^10.3.10", + "jsdom": "^24.0.0", "json-query": "^2.2.2", - "mocha": "^10.2.0", + "mocha": "^10.3.0", "nyc": "^15.1.0", "underscore": "^1.13.6" }, @@ -455,9 +455,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -548,9 +548,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -622,22 +622,22 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -658,9 +658,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@isaacs/cliui": { @@ -899,9 +899,9 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", @@ -909,9 +909,9 @@ } }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", @@ -974,14 +974,13 @@ } }, "node_modules/@oracle/ojet-cli": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@oracle/ojet-cli/-/ojet-cli-14.1.0.tgz", - "integrity": "sha512-xutoFL2edUueihyKa/6gNDRXMtoYuIJbFNfAOlhRa+2jIdzTmr1MjU10QaSuD6zpdw/uCgkWpuEf/lXZWy+z0A==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/ojet-cli/-/ojet-cli-16.0.0.tgz", + "integrity": "sha512-o8YJmUrYWFI+/YHuD39v3TR16jxYKDeCZ0KXFd+KscYOX7xH8+aTYT23kkCmIkNZR19L4/1iPmL2oYUaqlLFKQ==", "dev": true, "dependencies": { - "@oracle/oraclejet-templates": "~14.1.0", - "@oracle/oraclejet-tooling": "~14.1.0", - "@xmldom/xmldom": "0.8.6", + "@oracle/oraclejet-templates": "~16.0.0", + "@oracle/oraclejet-tooling": "~16.0.0", "adm-zip": "~0.4.7", "fs-extra": "~8.1.0", "glob": "7.2.0", @@ -1048,54 +1047,57 @@ } }, "node_modules/@oracle/oraclejet": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet/-/oraclejet-14.1.8.tgz", - "integrity": "sha512-pUybfzlhVqwTmTerosPQAIH+t61Agsv7lloRt23x28qbr1KlVCyCvSB8ijnlfCSlujIY2PjwGvj1yJ+j8220Gg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet/-/oraclejet-16.0.0.tgz", + "integrity": "sha512-peHOJRl6/+FUqVMU8xBWNKs2dyhd0CTJF3o6JQ/zJ8jQo/mz6gSqJwBC1d9VgF5jibiYaApPUGG65tx2Np3NJg==", "dependencies": { - "@oracle/oraclejet-preact": "14.1.8", - "@types/geojson": "latest", - "@types/signals": "latest", + "@oracle/oraclejet-preact": "16.0.0", + "@types/geojson": "7946.0.11", + "@types/signals": "1.0.2", "hammerjs": "2.0.8", - "jquery": "3.6.1", + "jquery": "3.6.4", "jquery-ui": "1.13.2", "knockout": "3.5.1", - "preact": "10.11.3", - "proj4": "2.8.0", + "preact": "10.17.1", + "proj4": "2.9.2", "require-css": "0.1.10", "requirejs": "2.3.6", "requirejs-text": "2.0.16", "signals": "1.0.0" - }, - "engines": { - "node": ">=4.0.0" } }, "node_modules/@oracle/oraclejet-audit": { - "version": "14.1.14", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-audit/-/oraclejet-audit-14.1.14.tgz", - "integrity": "sha512-Y2Nj6AJpQcktkcTJ5xy4gUSjt0f50KHB89GWshtUU9pkYrpwaRm03jUklNO1OSD1PvktAFs2e377i9zEu9VNHQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-audit/-/oraclejet-audit-16.0.0.tgz", + "integrity": "sha512-e9OQUJuMaEndYyCGHmqodlx2E8KdvWMH0Pj7gUBxvTR641WF1bvZYAA45U0BASYDl86pGdGZr91xLMrKIYWMEA==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "5.36.1", + "@babel/generator": "^7.19.5", + "@babel/parser": "^7.19.4", + "@typescript-eslint/typescript-estree": "6.13.2", "adm-zip": "0.4.16", - "ajv": "8.10.0", + "ajv": "8.12.0", "ajv-formats": "2.1.1", - "css-tree": "1.0.0-alpha.39", + "ast-traverse": "^0.1.1", + "astring": "^1.8.3", + "css-tree": "2.3.1", "decache": "4.6.0", "es-abstract": "1.20.5", - "espree": "9.4.0", + "espree": "9.5.2", "glob": "7.1.6", - "htmlparser2": "3.10.1", + "htmlparser2": "8.0.1", + "line-column": "^1.0.2", "markdown-it": "12.2.0", "md5": "2.3.0", "mock-http-server": "1.4.2", "parserlib": "1.1.1", + "readline-sync": "^1.4.10", "really-relaxed-json": "0.2.24", "semver": "6.3.0", "strip-json-comments": "2.0.1", "sync-request": "6.1.0", "tmp": "0.0.33", - "typescript": "4.1.2" + "typescript": "5.3.2" }, "bin": { "ojaf": "jaf.js" @@ -1122,43 +1124,47 @@ } }, "node_modules/@oracle/oraclejet-core-pack": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-core-pack/-/oraclejet-core-pack-14.1.8.tgz", - "integrity": "sha512-9oHRZiXrxjP9Tzko1s/0oqpoH/h/nCUlvkqpSMbjGEM5uNs3+c1xqwN9tqXUy3oOg6/DTnijK+tfCWlqbeNU2w==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-core-pack/-/oraclejet-core-pack-16.0.0.tgz", + "integrity": "sha512-MerFa4L0NhhxtKO/ZDze6nS0GTH2OSFolpEGqfrPac+QXdG3YagJ5JxGuRZPBbPQWYPrdLp6t8d9uyUGPSgbWw==", "dependencies": { - "@oracle/oraclejet": "14.1.8", - "@oracle/oraclejet-webdriver": "14.1.8" + "@oracle/oraclejet": "16.0.0", + "@oracle/oraclejet-preact": "16.0.0", + "@oracle/oraclejet-webdriver": "16.0.0" }, "peerDependencies": { "selenium-webdriver": ">=3.6.0" } }, "node_modules/@oracle/oraclejet-preact": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-preact/-/oraclejet-preact-14.1.8.tgz", - "integrity": "sha512-PIYoKanu0ToWs7P/6mXhPvNF7rwYjtzTlTB72lKV7BpD0FbY/hwk8aVOklhHAMmc2XbObFQ9fjpSM3NLZn37vw==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-preact/-/oraclejet-preact-16.0.0.tgz", + "integrity": "sha512-SlUmA0UxbOtyMxwSzNd9Qk7Ntmw9OJ0ePy/YALXjDp8HkjIjvFrq0GqRCTHuku4kJOxH5K60E4L4BlDUg0GueA==", "peerDependencies": { - "preact": "10.11.3" + "preact": "10.17.1" } }, "node_modules/@oracle/oraclejet-templates": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-templates/-/oraclejet-templates-14.1.1.tgz", - "integrity": "sha512-thyXv28X2f3xOJbtX/O2NdFG7JG/n/UN4iSEnvzfPLMRzrtcIuyMKhlVQ3MJgZpiuqFolDTQq+yyQ8jif9lRJQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-templates/-/oraclejet-templates-16.0.0.tgz", + "integrity": "sha512-mfe+DOkJOobinaQoCp8fSGWoER6b/KR4wTEqtGrKjcXPfZ32TT2kFkZpJYe1U5ygBBCWPBE/aY/d0vqNTQwgOQ==", "dev": true, "engines": { "node": ">= 0.8.0" } }, "node_modules/@oracle/oraclejet-tooling": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-tooling/-/oraclejet-tooling-14.1.2.tgz", - "integrity": "sha512-1M+4+aX+dxP6keUGBx7LuCMBEjJ/Zbtdh2uiin9ChAs414/HVeCylCgTlDcbyZBwo6y5kzWKk9NYtCCjiKYzHg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-tooling/-/oraclejet-tooling-16.0.0.tgz", + "integrity": "sha512-ifA7sgUxQqpHpqWeyQOXUvORDa2VZpKKVh1la5vD3yeT7dCxZWWYxy+cYLKpUhv1LbzbJkjR1SB6tzk4M492xQ==", "dev": true, "dependencies": { + "acorn": "8.8.0", + "acorn-jsx": "5.3.2", "archiver": "~5.2.0", "connect-livereload": "~0.6.0", "css-what": "~5.0.1", + "eslint-visitor-keys": "1.3.0", "express": "~4.17.1", "extract-zip": "~1.7.0", "form-data": "~2.5.1", @@ -1176,14 +1182,26 @@ "serve-index": "~1.9.1", "serve-static": "~1.13.0", "svgo": "~2.7.0", - "terser": "~5.14.2", - "tiny-lr": "~1.1.0", + "terser": "~5.19.2", + "tiny-lr": "2.0.0", "underscore": "~1.13.1" }, "engines": { "node": ">=12.21.0" } }, + "node_modules/@oracle/oraclejet-tooling/node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/@oracle/oraclejet-tooling/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -1193,6 +1211,15 @@ "ms": "2.0.0" } }, + "node_modules/@oracle/oraclejet-tooling/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/@oracle/oraclejet-tooling/node_modules/extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -1267,28 +1294,29 @@ } }, "node_modules/@oracle/oraclejet-webdriver": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-webdriver/-/oraclejet-webdriver-14.1.8.tgz", - "integrity": "sha512-4VTOcVuIyEZ7PiPcjfvbTdNjT+LCGmQLMO1pBxTS+EnPoKP3ummfPuYCT4fkeuZAhZbC/ih/Y5OiZLyQYSvYMA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-webdriver/-/oraclejet-webdriver-16.0.0.tgz", + "integrity": "sha512-/qyEIlAIJUf1ODU/cSd6ptqDekBz1/ZQgYPsJRFCvDIOWS5tVJ24TSnLlXnQXNMt5GMSV9KYJK/C1m0lzTatIA==", "dependencies": { - "@oracle/oraclejet": "14.1.8" + "@oracle/oraclejet": "16.0.0" }, "bin": { "ojwd-generate": "bin/generate" }, "peerDependencies": { + "@types/selenium-webdriver": ">=3.6.0", "selenium-webdriver": ">=3.6.0" } }, "node_modules/@oracle/oraclejet/node_modules/jquery": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", - "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" }, "node_modules/@oracle/wrc-jet-pack": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@oracle/wrc-jet-pack/-/wrc-jet-pack-2.4.6.tgz", - "integrity": "sha512-99omu4t41Zp137sHwdlLf+VMwR4muS7MobAqN5EtYWWdvz/9FaPiV/PuZp1Ch/xf67o0KyNYOgd1DU2jKKd10w==", + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@oracle/wrc-jet-pack/-/wrc-jet-pack-2.4.8.tgz", + "integrity": "sha512-qy9vT4OqMn8DOViNxlvMJ9rARMiXJyGEEKy9LuZzv5RSUKrksaGGFWT5DVcP+1fVqq16nrmUjOJChqunPGKeAw==", "engines": { "node": ">=4.0.0" } @@ -1303,15 +1331,6 @@ "node": ">=14" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -1340,15 +1359,14 @@ } }, "node_modules/@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + "version": "7946.0.11", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.11.tgz", + "integrity": "sha512-L7A0AINMXQpVwxHJ4jxD6/XjZ4NDufaRlUJHjNIFKYUFBH1SvOW+neaqb0VTRSLW5suSrSu19ObFEFnfNcr+qg==" }, "node_modules/@types/node": { "version": "10.17.60", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -1356,10 +1374,28 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "node_modules/@types/selenium-webdriver": { + "version": "4.1.21", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.21.tgz", + "integrity": "sha512-QGURnImvxYlIQz5DVhvHdqpYNLBjhJ2Vm+cnQI2G9QZzkWlZm0LkLcvDcHp+qE6N2KBz4CeuvXgPO7W3XQ0Tyw==", + "peer": true, + "dependencies": { + "@types/ws": "*" + } + }, "node_modules/@types/signals": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/signals/-/signals-1.0.1.tgz", - "integrity": "sha512-t6qsSE/nUiDN4MO5pZIR7XdhCNt0No0oJL1y1JSYovQL7+GvWzdBI0eD0ADZ2gW4Lg+CB4/d0j1nXe9lMpEHow==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/signals/-/signals-1.0.2.tgz", + "integrity": "sha512-jQp1ZX78SbU0CckJ0ydnwp5abfoWjcP9St1ON3rd3YVESlj3Xn3DaFxRHfssvKWYpq4WwPY1VG/4qfoLMCm2zA==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "peer": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/yauzl": { "version": "2.10.0", @@ -1372,12 +1408,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz", - "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1385,21 +1421,21 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz", - "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", @@ -1445,35 +1481,26 @@ "dev": true }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz", - "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.36.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.13.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^16.0.0 || >=18.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "node_modules/accepts": { @@ -1490,9 +1517,9 @@ } }, "node_modules/ace-builds": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.27.0.tgz", - "integrity": "sha512-jOJPpZ6Ekw4c0447+POCM3KzeRHajLfX1ib5Kxm8MCLC5jHlJRQEdCK2BVUBHPBC53YcQ88nTTu9PvewehMLig==" + "version": "1.32.6", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.32.6.tgz", + "integrity": "sha512-dO5BnyDOhCnznhOpILzXq4jqkbhRXxNkf3BuVTmyxGyRLrhddfdyk6xXgy+7A8LENrcYoFi/sIxMuH3qjNUN4w==" }, "node_modules/acorn": { "version": "8.10.0", @@ -1525,15 +1552,15 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { @@ -1550,9 +1577,9 @@ } }, "node_modules/ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.1", @@ -1797,6 +1824,21 @@ "node": "*" } }, + "node_modules/ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha512-CPuE4BWIhJjsNMvFkrzjiBgOl56NJTuBPBkBqyRyfq/nZtx1Z1f5I+qx7G/Zt+FAOS+ABhghkEuWJrfW9Njjog==", + "dev": true + }, + "node_modules/astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "dev": true, + "bin": { + "astring": "bin/astring" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -2120,18 +2162,18 @@ "dev": true }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -2181,10 +2223,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -2582,18 +2627,6 @@ "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/css-select/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, "node_modules/css-select/node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", @@ -2633,16 +2666,16 @@ } }, "node_modules/css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "dependencies": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" }, "engines": { - "node": ">=8.0.0" + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, "node_modules/css-what": { @@ -2689,29 +2722,28 @@ "dev": true }, "node_modules/cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", "dev": true, "dependencies": { "rrweb-cssom": "^0.6.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/data-urls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", - "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/debug": { @@ -2874,16 +2906,20 @@ } }, "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dom-serializer/node_modules/domelementtype": { + "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", @@ -2895,50 +2931,33 @@ } ] }, - "node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "dependencies": { - "webidl-conversions": "^7.0.0" + "domelementtype": "^2.3.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", - "dev": true, - "dependencies": { - "domelementtype": "1" + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, "node_modules/eastasianwidth": { @@ -2984,10 +3003,16 @@ } }, "node_modules/entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, "node_modules/error": { "version": "7.2.1", @@ -3088,18 +3113,19 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3233,14 +3259,14 @@ "dev": true }, "node_modules/espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "dependencies": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3425,9 +3451,9 @@ "dev": true }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3474,15 +3500,15 @@ } }, "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "dependencies": { "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=0.8.0" } }, "node_modules/fd-slicer": { @@ -3708,9 +3734,9 @@ "dev": true }, "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -3877,19 +3903,19 @@ } }, "node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3963,9 +3989,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -4191,15 +4217,15 @@ } }, "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "dependencies": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/html-escaper": { @@ -4209,17 +4235,22 @@ "dev": true }, "node_modules/htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "dependencies": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "node_modules/http-basic": { @@ -4260,17 +4291,16 @@ "dev": true }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "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, "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/http-response-object": { @@ -4283,22 +4313,22 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/i18next": { - "version": "23.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.5.1.tgz", - "integrity": "sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg==", + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", "funding": [ { "type": "individual", @@ -4314,7 +4344,7 @@ } ], "dependencies": { - "@babel/runtime": "^7.22.5" + "@babel/runtime": "^7.23.2" } }, "node_modules/iconv-lite": { @@ -4762,6 +4792,18 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -4857,9 +4899,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -4905,40 +4947,38 @@ } }, "node_modules/jsdom": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", - "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "dependencies": { - "abab": "^2.0.6", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^2.11.2" }, "peerDependenciesMeta": { "canvas": { @@ -5128,6 +5168,16 @@ "immediate": "~3.0.5" } }, + "node_modules/line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", + "dev": true, + "dependencies": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, "node_modules/linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", @@ -5138,9 +5188,9 @@ } }, "node_modules/livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", + "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", "dev": true }, "node_modules/locate-path": { @@ -5247,12 +5297,12 @@ } }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { @@ -5316,9 +5366,9 @@ } }, "node_modules/mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "node_modules/mdurl": { @@ -5462,9 +5512,9 @@ } }, "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "dependencies": { "ansi-colors": "4.1.1", @@ -5474,13 +5524,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -5495,10 +5544,6 @@ }, "engines": { "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/brace-expansion": { @@ -5511,47 +5556,24 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": 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" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", @@ -5641,18 +5663,6 @@ "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", "dev": true }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5708,9 +5718,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", - "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "node_modules/nyc": { @@ -6144,18 +6154,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5/node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/parserlib": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/parserlib/-/parserlib-1.1.1.tgz", @@ -6335,9 +6333,9 @@ } }, "node_modules/preact": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", - "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==", + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz", + "integrity": "sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==", "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" @@ -6370,12 +6368,12 @@ } }, "node_modules/proj4": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.8.0.tgz", - "integrity": "sha512-baC+YcD4xsSqJ+CpCZljj2gcQDhlKb+J+Zjv/2KSBwWNjk4M0pafgQsE+mWurd84tflMIsP+7j7mtIpFDHzQfQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.2.tgz", + "integrity": "sha512-bdyfNmtlWjQN/rHEHEiqFvpTUHhuzDaeQ6Uu1G4sPGqk+Xkxae6ahh865fClJokSGPBmlDOQWWaO6465TCfv5Q==", "dependencies": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "node_modules/promise": { @@ -6417,9 +6415,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -6561,6 +6559,15 @@ "node": ">=8.10.0" } }, + "node_modules/readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/really-relaxed-json": { "version": "0.2.24", "resolved": "https://registry.npmjs.org/really-relaxed-json/-/really-relaxed-json-0.2.24.tgz", @@ -6568,9 +6575,9 @@ "dev": true }, "node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/regexp.prototype.flags": { "version": "1.5.0", @@ -6824,14 +6831,14 @@ } }, "node_modules/selenium-webdriver": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.12.0.tgz", - "integrity": "sha512-zvPzmTsky6WfO6+BGMj2mCJsw7qKnfQONur2b+pGn8jeTiC+WAUOthZOnaK+HkX5wiU6L4uoMF+JIcOVstp25A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.18.1.tgz", + "integrity": "sha512-uP4OJ5wR4+VjdTi5oi/k8oieV2fIhVdVuaOPrklKghgS59w7Zz3nGa5gcG73VcU9EBRv5IZEBRhPr7qFJAj5mQ==", "peer": true, "dependencies": { "jszip": "^3.10.1", "tmp": "^0.2.1", - "ws": ">=8.13.0" + "ws": ">=8.14.2" }, "engines": { "node": ">= 14.20.0" @@ -7153,6 +7160,15 @@ "node": ">=0.10.0" } }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "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", @@ -7415,13 +7431,13 @@ } }, "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", "dev": true, "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -7513,15 +7529,15 @@ "dev": true }, "node_modules/tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-2.0.0.tgz", + "integrity": "sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==", "dev": true, "dependencies": { "body": "^5.1.0", "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", + "faye-websocket": "^0.11.3", + "livereload-js": "^3.3.1", "object-assign": "^4.1.0", "qs": "^6.4.0" } @@ -7602,42 +7618,33 @@ } }, "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, "dependencies": { - "punycode": "^2.3.0" + "punycode": "^2.3.1" }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/tslib": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", - "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts-api-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "node_modules/tslib": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", + "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", "dev": true }, "node_modules/type-check": { @@ -7702,16 +7709,16 @@ } }, "node_modules/typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/uc.micro": { @@ -7849,15 +7856,15 @@ } }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/wcwidth": { @@ -7902,15 +7909,15 @@ } }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-encoding/node_modules/iconv-lite": { @@ -7926,25 +7933,25 @@ } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", - "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dev": true, "dependencies": { - "tr46": "^4.1.1", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/which": { @@ -8048,9 +8055,9 @@ } }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "engines": { "node": ">=10.0.0" }, @@ -8068,12 +8075,12 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xmlchars": { @@ -8525,9 +8532,9 @@ "dev": true }, "@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", "requires": { "regenerator-runtime": "^0.14.0" } @@ -8596,9 +8603,9 @@ "dev": true }, "@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "requires": { "ajv": "^6.12.4", @@ -8650,19 +8657,19 @@ } }, "@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" } }, @@ -8673,9 +8680,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "@isaacs/cliui": { @@ -8849,9 +8856,9 @@ "dev": true }, "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", "dev": true, "requires": { "@jridgewell/gen-mapping": "^0.3.0", @@ -8859,9 +8866,9 @@ }, "dependencies": { "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", "dev": true, "requires": { "@jridgewell/set-array": "^1.0.1", @@ -8914,14 +8921,13 @@ } }, "@oracle/ojet-cli": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/@oracle/ojet-cli/-/ojet-cli-14.1.0.tgz", - "integrity": "sha512-xutoFL2edUueihyKa/6gNDRXMtoYuIJbFNfAOlhRa+2jIdzTmr1MjU10QaSuD6zpdw/uCgkWpuEf/lXZWy+z0A==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/ojet-cli/-/ojet-cli-16.0.0.tgz", + "integrity": "sha512-o8YJmUrYWFI+/YHuD39v3TR16jxYKDeCZ0KXFd+KscYOX7xH8+aTYT23kkCmIkNZR19L4/1iPmL2oYUaqlLFKQ==", "dev": true, "requires": { - "@oracle/oraclejet-templates": "~14.1.0", - "@oracle/oraclejet-tooling": "~14.1.0", - "@xmldom/xmldom": "0.8.6", + "@oracle/oraclejet-templates": "~16.0.0", + "@oracle/oraclejet-tooling": "~16.0.0", "adm-zip": "~0.4.7", "fs-extra": "~8.1.0", "glob": "7.2.0", @@ -8972,19 +8978,19 @@ } }, "@oracle/oraclejet": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet/-/oraclejet-14.1.8.tgz", - "integrity": "sha512-pUybfzlhVqwTmTerosPQAIH+t61Agsv7lloRt23x28qbr1KlVCyCvSB8ijnlfCSlujIY2PjwGvj1yJ+j8220Gg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet/-/oraclejet-16.0.0.tgz", + "integrity": "sha512-peHOJRl6/+FUqVMU8xBWNKs2dyhd0CTJF3o6JQ/zJ8jQo/mz6gSqJwBC1d9VgF5jibiYaApPUGG65tx2Np3NJg==", "requires": { - "@oracle/oraclejet-preact": "14.1.8", - "@types/geojson": "latest", - "@types/signals": "latest", + "@oracle/oraclejet-preact": "16.0.0", + "@types/geojson": "7946.0.11", + "@types/signals": "1.0.2", "hammerjs": "2.0.8", - "jquery": "3.6.1", + "jquery": "3.6.4", "jquery-ui": "1.13.2", "knockout": "3.5.1", - "preact": "10.11.3", - "proj4": "2.8.0", + "preact": "10.17.1", + "proj4": "2.9.2", "require-css": "0.1.10", "requirejs": "2.3.6", "requirejs-text": "2.0.16", @@ -8992,38 +8998,44 @@ }, "dependencies": { "jquery": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.1.tgz", - "integrity": "sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==" + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" } } }, "@oracle/oraclejet-audit": { - "version": "14.1.14", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-audit/-/oraclejet-audit-14.1.14.tgz", - "integrity": "sha512-Y2Nj6AJpQcktkcTJ5xy4gUSjt0f50KHB89GWshtUU9pkYrpwaRm03jUklNO1OSD1PvktAFs2e377i9zEu9VNHQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-audit/-/oraclejet-audit-16.0.0.tgz", + "integrity": "sha512-e9OQUJuMaEndYyCGHmqodlx2E8KdvWMH0Pj7gUBxvTR641WF1bvZYAA45U0BASYDl86pGdGZr91xLMrKIYWMEA==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "5.36.1", + "@babel/generator": "^7.19.5", + "@babel/parser": "^7.19.4", + "@typescript-eslint/typescript-estree": "6.13.2", "adm-zip": "0.4.16", - "ajv": "8.10.0", + "ajv": "8.12.0", "ajv-formats": "2.1.1", - "css-tree": "1.0.0-alpha.39", + "ast-traverse": "^0.1.1", + "astring": "^1.8.3", + "css-tree": "2.3.1", "decache": "4.6.0", "es-abstract": "1.20.5", - "espree": "9.4.0", + "espree": "9.5.2", "glob": "7.1.6", - "htmlparser2": "3.10.1", + "htmlparser2": "8.0.1", + "line-column": "^1.0.2", "markdown-it": "12.2.0", "md5": "2.3.0", "mock-http-server": "1.4.2", "parserlib": "1.1.1", + "readline-sync": "^1.4.10", "really-relaxed-json": "0.2.24", "semver": "6.3.0", "strip-json-comments": "2.0.1", "sync-request": "6.1.0", "tmp": "0.0.33", - "typescript": "4.1.2" + "typescript": "5.3.2" }, "dependencies": { "glob": { @@ -9043,35 +9055,39 @@ } }, "@oracle/oraclejet-core-pack": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-core-pack/-/oraclejet-core-pack-14.1.8.tgz", - "integrity": "sha512-9oHRZiXrxjP9Tzko1s/0oqpoH/h/nCUlvkqpSMbjGEM5uNs3+c1xqwN9tqXUy3oOg6/DTnijK+tfCWlqbeNU2w==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-core-pack/-/oraclejet-core-pack-16.0.0.tgz", + "integrity": "sha512-MerFa4L0NhhxtKO/ZDze6nS0GTH2OSFolpEGqfrPac+QXdG3YagJ5JxGuRZPBbPQWYPrdLp6t8d9uyUGPSgbWw==", "requires": { - "@oracle/oraclejet": "14.1.8", - "@oracle/oraclejet-webdriver": "14.1.8" + "@oracle/oraclejet": "16.0.0", + "@oracle/oraclejet-preact": "16.0.0", + "@oracle/oraclejet-webdriver": "16.0.0" } }, "@oracle/oraclejet-preact": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-preact/-/oraclejet-preact-14.1.8.tgz", - "integrity": "sha512-PIYoKanu0ToWs7P/6mXhPvNF7rwYjtzTlTB72lKV7BpD0FbY/hwk8aVOklhHAMmc2XbObFQ9fjpSM3NLZn37vw==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-preact/-/oraclejet-preact-16.0.0.tgz", + "integrity": "sha512-SlUmA0UxbOtyMxwSzNd9Qk7Ntmw9OJ0ePy/YALXjDp8HkjIjvFrq0GqRCTHuku4kJOxH5K60E4L4BlDUg0GueA==", "requires": {} }, "@oracle/oraclejet-templates": { - "version": "14.1.1", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-templates/-/oraclejet-templates-14.1.1.tgz", - "integrity": "sha512-thyXv28X2f3xOJbtX/O2NdFG7JG/n/UN4iSEnvzfPLMRzrtcIuyMKhlVQ3MJgZpiuqFolDTQq+yyQ8jif9lRJQ==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-templates/-/oraclejet-templates-16.0.0.tgz", + "integrity": "sha512-mfe+DOkJOobinaQoCp8fSGWoER6b/KR4wTEqtGrKjcXPfZ32TT2kFkZpJYe1U5ygBBCWPBE/aY/d0vqNTQwgOQ==", "dev": true }, "@oracle/oraclejet-tooling": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-tooling/-/oraclejet-tooling-14.1.2.tgz", - "integrity": "sha512-1M+4+aX+dxP6keUGBx7LuCMBEjJ/Zbtdh2uiin9ChAs414/HVeCylCgTlDcbyZBwo6y5kzWKk9NYtCCjiKYzHg==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-tooling/-/oraclejet-tooling-16.0.0.tgz", + "integrity": "sha512-ifA7sgUxQqpHpqWeyQOXUvORDa2VZpKKVh1la5vD3yeT7dCxZWWYxy+cYLKpUhv1LbzbJkjR1SB6tzk4M492xQ==", "dev": true, "requires": { + "acorn": "8.8.0", + "acorn-jsx": "5.3.2", "archiver": "~5.2.0", "connect-livereload": "~0.6.0", "css-what": "~5.0.1", + "eslint-visitor-keys": "1.3.0", "express": "~4.17.1", "extract-zip": "~1.7.0", "form-data": "~2.5.1", @@ -9089,11 +9105,17 @@ "serve-index": "~1.9.1", "serve-static": "~1.13.0", "svgo": "~2.7.0", - "terser": "~5.14.2", - "tiny-lr": "~1.1.0", + "terser": "~5.19.2", + "tiny-lr": "2.0.0", "underscore": "~1.13.1" }, "dependencies": { + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -9103,6 +9125,12 @@ "ms": "2.0.0" } }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, "extract-zip": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", @@ -9164,17 +9192,17 @@ } }, "@oracle/oraclejet-webdriver": { - "version": "14.1.8", - "resolved": "https://registry.npmjs.org/@oracle/oraclejet-webdriver/-/oraclejet-webdriver-14.1.8.tgz", - "integrity": "sha512-4VTOcVuIyEZ7PiPcjfvbTdNjT+LCGmQLMO1pBxTS+EnPoKP3ummfPuYCT4fkeuZAhZbC/ih/Y5OiZLyQYSvYMA==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@oracle/oraclejet-webdriver/-/oraclejet-webdriver-16.0.0.tgz", + "integrity": "sha512-/qyEIlAIJUf1ODU/cSd6ptqDekBz1/ZQgYPsJRFCvDIOWS5tVJ24TSnLlXnQXNMt5GMSV9KYJK/C1m0lzTatIA==", "requires": { - "@oracle/oraclejet": "14.1.8" + "@oracle/oraclejet": "16.0.0" } }, "@oracle/wrc-jet-pack": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/@oracle/wrc-jet-pack/-/wrc-jet-pack-2.4.6.tgz", - "integrity": "sha512-99omu4t41Zp137sHwdlLf+VMwR4muS7MobAqN5EtYWWdvz/9FaPiV/PuZp1Ch/xf67o0KyNYOgd1DU2jKKd10w==" + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/@oracle/wrc-jet-pack/-/wrc-jet-pack-2.4.8.tgz", + "integrity": "sha512-qy9vT4OqMn8DOViNxlvMJ9rARMiXJyGEEKy9LuZzv5RSUKrksaGGFWT5DVcP+1fVqq16nrmUjOJChqunPGKeAw==" }, "@pkgjs/parseargs": { "version": "0.11.0", @@ -9183,12 +9211,6 @@ "dev": true, "optional": true }, - "@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "dev": true - }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -9214,15 +9236,14 @@ } }, "@types/geojson": { - "version": "7946.0.10", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.10.tgz", - "integrity": "sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA==" + "version": "7946.0.11", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.11.tgz", + "integrity": "sha512-L7A0AINMXQpVwxHJ4jxD6/XjZ4NDufaRlUJHjNIFKYUFBH1SvOW+neaqb0VTRSLW5suSrSu19ObFEFnfNcr+qg==" }, "@types/node": { "version": "10.17.60", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" }, "@types/qs": { "version": "6.9.7", @@ -9230,10 +9251,28 @@ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, + "@types/selenium-webdriver": { + "version": "4.1.21", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.1.21.tgz", + "integrity": "sha512-QGURnImvxYlIQz5DVhvHdqpYNLBjhJ2Vm+cnQI2G9QZzkWlZm0LkLcvDcHp+qE6N2KBz4CeuvXgPO7W3XQ0Tyw==", + "peer": true, + "requires": { + "@types/ws": "*" + } + }, "@types/signals": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/signals/-/signals-1.0.1.tgz", - "integrity": "sha512-t6qsSE/nUiDN4MO5pZIR7XdhCNt0No0oJL1y1JSYovQL7+GvWzdBI0eD0ADZ2gW4Lg+CB4/d0j1nXe9lMpEHow==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/signals/-/signals-1.0.2.tgz", + "integrity": "sha512-jQp1ZX78SbU0CckJ0ydnwp5abfoWjcP9St1ON3rd3YVESlj3Xn3DaFxRHfssvKWYpq4WwPY1VG/4qfoLMCm2zA==" + }, + "@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "peer": true, + "requires": { + "@types/node": "*" + } }, "@types/yauzl": { "version": "2.10.0", @@ -9246,24 +9285,24 @@ } }, "@typescript-eslint/types": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.36.1.tgz", - "integrity": "sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.13.2.tgz", + "integrity": "sha512-7sxbQ+EMRubQc3wTfTsycgYpSujyVbI1xw+3UMRUcrhSy+pN09y/lWzeKDbvhoqcRbHdc+APLs/PWYi/cisLPg==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.36.1.tgz", - "integrity": "sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.13.2.tgz", + "integrity": "sha512-SuD8YLQv6WHnOEtKv8D6HZUzOub855cfPnPMKvdM/Bh1plv1f7Q/0iFUDLKKlxHcEstQnaUU4QZskgQq74t+3w==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.1", - "@typescript-eslint/visitor-keys": "5.36.1", + "@typescript-eslint/types": "6.13.2", + "@typescript-eslint/visitor-keys": "6.13.2", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" }, "dependencies": { "lru-cache": { @@ -9293,25 +9332,19 @@ } }, "@typescript-eslint/visitor-keys": { - "version": "5.36.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.36.1.tgz", - "integrity": "sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==", + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.13.2.tgz", + "integrity": "sha512-OGznFs0eAQXJsp+xSd6k/O1UbFi/K/L7WjqeRoFE7vadjAF9y0uppXhYNQNEqygjou782maGClOoZwPqF0Drlw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.36.1", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "6.13.2", + "eslint-visitor-keys": "^3.4.1" } }, - "@xmldom/xmldom": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.6.tgz", - "integrity": "sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==", - "dev": true - }, - "abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", "dev": true }, "accepts": { @@ -9325,9 +9358,9 @@ } }, "ace-builds": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.27.0.tgz", - "integrity": "sha512-jOJPpZ6Ekw4c0447+POCM3KzeRHajLfX1ib5Kxm8MCLC5jHlJRQEdCK2BVUBHPBC53YcQ88nTTu9PvewehMLig==" + "version": "1.32.6", + "resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.32.6.tgz", + "integrity": "sha512-dO5BnyDOhCnznhOpILzXq4jqkbhRXxNkf3BuVTmyxGyRLrhddfdyk6xXgy+7A8LENrcYoFi/sIxMuH3qjNUN4w==" }, "acorn": { "version": "8.10.0", @@ -9349,12 +9382,12 @@ "dev": true }, "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "requires": { - "debug": "4" + "debug": "^4.3.4" } }, "aggregate-error": { @@ -9368,9 +9401,9 @@ } }, "ajv": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.10.0.tgz", - "integrity": "sha512-bzqAEZOjkrUMl2afH8dknrq5KEk2SrwdBROR+vH1EKVQTqaUbJVPdc/gEdggTMM0Se+s+Ja4ju4TlNcStKl2Hw==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "requires": { "fast-deep-equal": "^3.1.1", @@ -9559,6 +9592,18 @@ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, + "ast-traverse": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", + "integrity": "sha512-CPuE4BWIhJjsNMvFkrzjiBgOl56NJTuBPBkBqyRyfq/nZtx1Z1f5I+qx7G/Zt+FAOS+ABhghkEuWJrfW9Njjog==", + "dev": true + }, + "astring": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz", + "integrity": "sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==", + "dev": true + }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -9799,18 +9844,18 @@ "dev": true }, "chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "requires": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" } }, "chai-as-promised": { @@ -9845,10 +9890,13 @@ "dev": true }, "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "requires": { + "get-func-name": "^2.0.2" + } }, "chokidar": { "version": "3.5.3", @@ -10160,12 +10208,6 @@ "entities": "^2.0.0" } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, "domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", @@ -10195,13 +10237,13 @@ } }, "css-tree": { - "version": "1.0.0-alpha.39", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", - "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, "requires": { - "mdn-data": "2.0.6", - "source-map": "^0.6.1" + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" } }, "css-what": { @@ -10238,23 +10280,22 @@ } }, "cssstyle": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", - "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", + "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", "dev": true, "requires": { "rrweb-cssom": "^0.6.0" } }, "data-urls": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-4.0.0.tgz", - "integrity": "sha512-/mMTei/JXPqvFqQtfyTowxmJVwr2PVAeCcDxyFf6LhoOu/09TX2OX3kb2wzi4DMXcfj4OItwDOnhl5oziPnT6g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, "requires": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" } }, "debug": { @@ -10373,61 +10414,40 @@ } }, "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - } + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" } }, "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true }, - "domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "dev": true, - "requires": { - "webidl-conversions": "^7.0.0" - } - }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, "requires": { - "domelementtype": "1" + "domelementtype": "^2.3.0" } }, "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" } }, "eastasianwidth": { @@ -10470,9 +10490,9 @@ } }, "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, "error": { @@ -10553,18 +10573,19 @@ "dev": true }, "eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -10662,14 +10683,14 @@ "dev": true }, "espree": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", - "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", + "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==", "dev": true, "requires": { "acorn": "^8.8.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.1" } }, "esprima": { @@ -10811,9 +10832,9 @@ "dev": true }, "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", @@ -10856,9 +10877,9 @@ } }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -11029,9 +11050,9 @@ "dev": true }, "fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -11146,13 +11167,13 @@ } }, "glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "requires": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" @@ -11204,9 +11225,9 @@ } }, "globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -11364,12 +11385,12 @@ "dev": true }, "html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, "requires": { - "whatwg-encoding": "^2.0.0" + "whatwg-encoding": "^3.1.1" } }, "html-escaper": { @@ -11379,17 +11400,15 @@ "dev": true }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", + "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", "dev": true, "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "entities": "^4.3.0" } }, "http-basic": { @@ -11424,14 +11443,13 @@ "dev": true }, "http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "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, "requires": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" } }, "http-response-object": { @@ -11444,21 +11462,21 @@ } }, "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", "dev": true, "requires": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" } }, "i18next": { - "version": "23.5.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.5.1.tgz", - "integrity": "sha512-JelYzcaCoFDaa+Ysbfz2JsGAKkrHiMG6S61+HLBUEIPaF40WMwW9hCPymlQGrP+wWawKxKPuSuD71WZscCsWHg==", + "version": "23.10.0", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.10.0.tgz", + "integrity": "sha512-/TgHOqsa7/9abUKJjdPeydoyDc0oTi/7u9F8lMSj6ufg4cbC1Oj3f/Jja7zj7WRIhEQKB7Q4eN6y68I9RDxxGQ==", "requires": { - "@babel/runtime": "^7.22.5" + "@babel/runtime": "^7.23.2" } }, "iconv-lite": { @@ -11766,6 +11784,15 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -11840,9 +11867,9 @@ } }, "jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "requires": { "@isaacs/cliui": "^8.0.2", @@ -11877,34 +11904,32 @@ } }, "jsdom": { - "version": "22.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", - "integrity": "sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw==", + "version": "24.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz", + "integrity": "sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==", "dev": true, "requires": { - "abab": "^2.0.6", - "cssstyle": "^3.0.0", - "data-urls": "^4.0.0", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "domexception": "^4.0.0", "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.4", + "nwsapi": "^2.2.7", "parse5": "^7.1.2", "rrweb-cssom": "^0.6.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "ws": "^8.13.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" }, "dependencies": { "form-data": { @@ -12069,6 +12094,16 @@ "immediate": "~3.0.5" } }, + "line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", + "dev": true, + "requires": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, "linkify-it": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", @@ -12079,9 +12114,9 @@ } }, "livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", + "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", "dev": true }, "locate-path": { @@ -12176,12 +12211,12 @@ } }, "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "requires": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "lru-cache": { @@ -12235,9 +12270,9 @@ } }, "mdn-data": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", - "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==", + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "dev": true }, "mdurl": { @@ -12342,9 +12377,9 @@ } }, "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz", + "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==", "dev": true, "requires": { "ansi-colors": "4.1.1", @@ -12354,13 +12389,12 @@ "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.2.0", + "glob": "8.1.0", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "5.0.1", "ms": "2.1.3", - "nanoid": "3.3.3", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -12380,38 +12414,16 @@ } }, "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "dev": true, "requires": { "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" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "minimatch": "^5.0.1", + "once": "^1.3.0" } }, "minimatch": { @@ -12487,12 +12499,6 @@ "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", "dev": true }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -12536,9 +12542,9 @@ } }, "nwsapi": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz", - "integrity": "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, "nyc": { @@ -12867,14 +12873,6 @@ "dev": true, "requires": { "entities": "^4.4.0" - }, - "dependencies": { - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "dev": true - } } }, "parserlib": { @@ -13009,9 +13007,9 @@ } }, "preact": { - "version": "10.11.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.11.3.tgz", - "integrity": "sha512-eY93IVpod/zG3uMF22Unl8h9KkrcKIRs2EGar8hwLZZDU1lkjph303V9HZBwufh2s736U6VXuhD109LYqPoffg==" + "version": "10.17.1", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.17.1.tgz", + "integrity": "sha512-X9BODrvQ4Ekwv9GURm9AKAGaomqXmip7NQTZgY7gcNmr7XE83adOMJvd3N42id1tMFU7ojiynRsYnY6/BRFxLA==" }, "prelude-ls": { "version": "1.2.1", @@ -13034,12 +13032,12 @@ } }, "proj4": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.8.0.tgz", - "integrity": "sha512-baC+YcD4xsSqJ+CpCZljj2gcQDhlKb+J+Zjv/2KSBwWNjk4M0pafgQsE+mWurd84tflMIsP+7j7mtIpFDHzQfQ==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/proj4/-/proj4-2.9.2.tgz", + "integrity": "sha512-bdyfNmtlWjQN/rHEHEiqFvpTUHhuzDaeQ6Uu1G4sPGqk+Xkxae6ahh865fClJokSGPBmlDOQWWaO6465TCfv5Q==", "requires": { "mgrs": "1.0.0", - "wkt-parser": "^1.3.1" + "wkt-parser": "^1.3.3" } }, "promise": { @@ -13078,9 +13076,9 @@ } }, "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, "qs": { @@ -13183,6 +13181,12 @@ "picomatch": "^2.2.1" } }, + "readline-sync": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", + "integrity": "sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==", + "dev": true + }, "really-relaxed-json": { "version": "0.2.24", "resolved": "https://registry.npmjs.org/really-relaxed-json/-/really-relaxed-json-0.2.24.tgz", @@ -13190,9 +13194,9 @@ "dev": true }, "regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "regexp.prototype.flags": { "version": "1.5.0", @@ -13367,14 +13371,14 @@ } }, "selenium-webdriver": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.12.0.tgz", - "integrity": "sha512-zvPzmTsky6WfO6+BGMj2mCJsw7qKnfQONur2b+pGn8jeTiC+WAUOthZOnaK+HkX5wiU6L4uoMF+JIcOVstp25A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.18.1.tgz", + "integrity": "sha512-uP4OJ5wR4+VjdTi5oi/k8oieV2fIhVdVuaOPrklKghgS59w7Zz3nGa5gcG73VcU9EBRv5IZEBRhPr7qFJAj5mQ==", "peer": true, "requires": { "jszip": "^3.10.1", "tmp": "^0.2.1", - "ws": ">=8.13.0" + "ws": ">=8.14.2" }, "dependencies": { "tmp": { @@ -13658,6 +13662,12 @@ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, "source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -13871,13 +13881,13 @@ } }, "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", "dev": true, "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -13957,15 +13967,15 @@ "dev": true }, "tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-2.0.0.tgz", + "integrity": "sha512-f6nh0VMRvhGx4KCeK1lQ/jaL0Zdb5WdR+Jk8q9OSUQnaSDxAEGH1fgqLZ+cMl5EW3F2MGnCsalBO1IsnnogW1Q==", "dev": true, "requires": { "body": "^5.1.0", "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", + "faye-websocket": "^0.11.3", + "livereload-js": "^3.3.1", "object-assign": "^4.1.0", "qs": "^6.4.0" }, @@ -14032,37 +14042,27 @@ } }, "tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", "dev": true, "requires": { - "punycode": "^2.3.0" + "punycode": "^2.3.1" } }, + "ts-api-utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", + "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "dev": true, + "requires": {} + }, "tslib": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz", "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==", "dev": true }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } - } - }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14110,9 +14110,9 @@ } }, "typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz", + "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==", "dev": true }, "uc.micro": { @@ -14213,12 +14213,12 @@ "dev": true }, "w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, "requires": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" } }, "wcwidth": { @@ -14254,9 +14254,9 @@ "dev": true }, "whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, "requires": { "iconv-lite": "0.6.3" @@ -14274,18 +14274,18 @@ } }, "whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true }, "whatwg-url": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-12.0.1.tgz", - "integrity": "sha512-Ed/LrqB8EPlGxjS+TrsXcpUond1mhccS3pchLhzSgPCnTimUCKj3IZE75pAs5m6heB2U2TMerKFUXheyHY+VDQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", "dev": true, "requires": { - "tr46": "^4.1.1", + "tr46": "^5.0.0", "webidl-conversions": "^7.0.0" } }, @@ -14368,15 +14368,15 @@ } }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", "requires": {} }, "xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true }, "xmlchars": { diff --git a/webui/package.json b/webui/package.json index 77f5b7e58..86606c295 100644 --- a/webui/package.json +++ b/webui/package.json @@ -10,28 +10,28 @@ "jet-audit": "ojaf" }, "dependencies": { - "@oracle/oraclejet": "^14.1.8", - "@oracle/oraclejet-core-pack": "^14.1.8", - "@oracle/wrc-jet-pack": "~2.4.6", - "ace-builds": "^1.27.0", - "i18next": "^23.5.1", + "@oracle/oraclejet": "~16.0.0", + "@oracle/oraclejet-core-pack": "~16.0.0", + "@oracle/wrc-jet-pack": "~2.4.8", + "ace-builds": "^1.32.6", + "i18next": "^23.10.0", "jquery": "^3.7.1", "js-yaml": "^4.1.0" }, "devDependencies": { - "@oracle/ojet-cli": "^14.1.0", - "@oracle/oraclejet-audit": "^14.1.8", - "@oracle/oraclejet-tooling": "^14.1.2", - "chai": "^4.3.8", + "@oracle/ojet-cli": "~16.0.0", + "@oracle/oraclejet-audit": "~16.0.0", + "@oracle/oraclejet-tooling": "~16.0.0", + "chai": "^4.4.1", "chai-as-promised": "^7.1.1", - "eslint": "^8.49.0", + "eslint": "^8.57.0", "eslint-plugin-requirejs": "^4.0.1", "extract-zip": "^2.0.1", - "fs-extra": "^11.1.1", - "glob": "^10.3.4", - "jsdom": "^22.1.0", + "fs-extra": "^11.2.0", + "glob": "^10.3.10", + "jsdom": "^24.0.0", "json-query": "^2.2.2", - "mocha": "^10.2.0", + "mocha": "^10.3.0", "nyc": "^15.1.0", "underscore": "^1.13.6" }, diff --git a/webui/scripts/hooks/after_app_create.js b/webui/scripts/hooks/after_app_create.js index eadbe43dd..106736556 100644 --- a/webui/scripts/hooks/after_app_create.js +++ b/webui/scripts/hooks/after_app_create.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_app_restore.js b/webui/scripts/hooks/after_app_restore.js index c734a9a58..dfce3c20a 100644 --- a/webui/scripts/hooks/after_app_restore.js +++ b/webui/scripts/hooks/after_app_restore.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_app_typescript.js b/webui/scripts/hooks/after_app_typescript.js index cc094e043..16758d0b7 100644 --- a/webui/scripts/hooks/after_app_typescript.js +++ b/webui/scripts/hooks/after_app_typescript.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_build.js b/webui/scripts/hooks/after_build.js index 0256395f9..69ca6b8cf 100644 --- a/webui/scripts/hooks/after_build.js +++ b/webui/scripts/hooks/after_build.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_component_build.js b/webui/scripts/hooks/after_component_build.js index 4cbf8f064..f4152d5ee 100644 --- a/webui/scripts/hooks/after_component_build.js +++ b/webui/scripts/hooks/after_component_build.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_component_create.js b/webui/scripts/hooks/after_component_create.js index 893027ec7..28d5783e1 100644 --- a/webui/scripts/hooks/after_component_create.js +++ b/webui/scripts/hooks/after_component_create.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_component_package.js b/webui/scripts/hooks/after_component_package.js index aea540061..fd4703eb3 100644 --- a/webui/scripts/hooks/after_component_package.js +++ b/webui/scripts/hooks/after_component_package.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ @@ -10,4 +10,4 @@ module.exports = function (configObj) { // const componentName = configObj.component. resolve(configObj); }); - }; + }; \ No newline at end of file diff --git a/webui/scripts/hooks/after_component_typescript.js b/webui/scripts/hooks/after_component_typescript.js index a72b8eeb7..b0ad3effd 100644 --- a/webui/scripts/hooks/after_component_typescript.js +++ b/webui/scripts/hooks/after_component_typescript.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_serve.js b/webui/scripts/hooks/after_serve.js index 14ab7ca28..de8fffdcb 100644 --- a/webui/scripts/hooks/after_serve.js +++ b/webui/scripts/hooks/after_serve.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/after_watch.js b/webui/scripts/hooks/after_watch.js index 3ebcf9279..920c2c49c 100644 --- a/webui/scripts/hooks/after_watch.js +++ b/webui/scripts/hooks/after_watch.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_app_typescript.js b/webui/scripts/hooks/before_app_typescript.js index 113b784f9..9ca119ee9 100644 --- a/webui/scripts/hooks/before_app_typescript.js +++ b/webui/scripts/hooks/before_app_typescript.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_build.js b/webui/scripts/hooks/before_build.js index 3f5cf2246..fe9f81863 100644 --- a/webui/scripts/hooks/before_build.js +++ b/webui/scripts/hooks/before_build.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_component_optimize.js b/webui/scripts/hooks/before_component_optimize.js index 0f450f8ce..5564692cf 100644 --- a/webui/scripts/hooks/before_component_optimize.js +++ b/webui/scripts/hooks/before_component_optimize.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_component_package.js b/webui/scripts/hooks/before_component_package.js index 4451ee4a4..c3d98581b 100644 --- a/webui/scripts/hooks/before_component_package.js +++ b/webui/scripts/hooks/before_component_package.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ @@ -10,4 +10,4 @@ module.exports = function (configObj) { // const componentName = configObj.component. resolve(configObj); }); - }; + }; \ No newline at end of file diff --git a/webui/scripts/hooks/before_component_typescript.js b/webui/scripts/hooks/before_component_typescript.js index a0f5c4a1f..41f293585 100644 --- a/webui/scripts/hooks/before_component_typescript.js +++ b/webui/scripts/hooks/before_component_typescript.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_hybrid_build.js b/webui/scripts/hooks/before_hybrid_build.js deleted file mode 100644 index 41b456956..000000000 --- a/webui/scripts/hooks/before_hybrid_build.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. - Licensed under The Universal Permissive License (UPL), Version 1.0 - as shown at https://oss.oracle.com/licenses/upl/ - -*/ - -'use strict'; - -module.exports = function (configObj) { - return new Promise((resolve, reject) => { - console.log("Running before_hybrid_build hook."); - resolve(configObj); - }); -}; diff --git a/webui/scripts/hooks/before_injection.js b/webui/scripts/hooks/before_injection.js index d296839e3..8e489605e 100644 --- a/webui/scripts/hooks/before_injection.js +++ b/webui/scripts/hooks/before_injection.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_optimize.js b/webui/scripts/hooks/before_optimize.js index 8972682d5..257a84774 100644 --- a/webui/scripts/hooks/before_optimize.js +++ b/webui/scripts/hooks/before_optimize.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_release_build.js b/webui/scripts/hooks/before_release_build.js index c972fa30f..9f965287a 100644 --- a/webui/scripts/hooks/before_release_build.js +++ b/webui/scripts/hooks/before_release_build.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_serve.js b/webui/scripts/hooks/before_serve.js index 40a9ea844..2f00deb51 100644 --- a/webui/scripts/hooks/before_serve.js +++ b/webui/scripts/hooks/before_serve.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_watch.js b/webui/scripts/hooks/before_watch.js index 3cb52f267..12159111a 100644 --- a/webui/scripts/hooks/before_watch.js +++ b/webui/scripts/hooks/before_watch.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ diff --git a/webui/scripts/hooks/before_webpack.js b/webui/scripts/hooks/before_webpack.js index b2720833b..81dee0d16 100644 --- a/webui/scripts/hooks/before_webpack.js +++ b/webui/scripts/hooks/before_webpack.js @@ -1,5 +1,5 @@ /** - Copyright (c) 2015, 2023, Oracle and/or its affiliates. + Copyright (c) 2015, 2024, Oracle and/or its affiliates. Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ @@ -9,8 +9,8 @@ module.exports = function (configObj) { return new Promise((resolve, reject) => { - console.log("Running before_webpack hook."); + console.log("Running before_webpack hook."); // const { config } = configObj.webpack; - resolve(configObj); + resolve(configObj); }); }; diff --git a/webui/scripts/hooks/hooks.json b/webui/scripts/hooks/hooks.json index 8346b9a44..3d06b2aab 100644 --- a/webui/scripts/hooks/hooks.json +++ b/webui/scripts/hooks/hooks.json @@ -14,7 +14,6 @@ "before_watch": "scripts/hooks/before_watch.js", "after_build": "scripts/hooks/after_build.js", "after_component_build": "scripts/hooks/after_component_build.js", - "before_hybrid_build": "scripts/hooks/before_hybrid_build.js", "before_release_build": "scripts/hooks/before_release_build.js", "before_serve": "scripts/hooks/before_serve.js", "after_serve": "scripts/hooks/after_serve.js", diff --git a/webui/src/css/app.css b/webui/src/css/app.css index cfc07cf0f..86330e561 100644 --- a/webui/src/css/app.css +++ b/webui/src/css/app.css @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ .sendOffScreen { @@ -273,7 +273,7 @@ border: 1px solid var(--oj-collection-border-color); } -.wkt-paths-table, .wkt-domain-node-selectors-table, .wkt-vz-managed-clusters-table { +.wkt-paths-table, .wkt-domain-node-selectors-table { border: 1px solid var(--oj-collection-border-color); width: 100%; } diff --git a/webui/src/css/images/navbar-verrazzano.png b/webui/src/css/images/navbar-verrazzano.png deleted file mode 100644 index f3323241f..000000000 Binary files a/webui/src/css/images/navbar-verrazzano.png and /dev/null differ diff --git a/webui/src/js/models/kubectl-definition.js b/webui/src/js/models/kubectl-definition.js index 5a4e3ee3a..5453bda5e 100644 --- a/webui/src/js/models/kubectl-definition.js +++ b/webui/src/js/models/kubectl-definition.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -22,7 +22,6 @@ define(['utils/observable-properties'], executableFilePath: props.createProperty(window.api.k8s.getKubectlFilePath()), kubeConfigContextToUse: props.createProperty(), helmExecutableFilePath: props.createProperty(window.api.k8s.getHelmFilePath()), - vzManagedClusters: props.createListProperty(['uid', 'name', 'kubeConfig', 'kubeContext']).persistByKey('uid'), readFrom: function(json) { props.createGroup(name, this).readFrom(json); diff --git a/webui/src/js/models/project-settings-definition.js b/webui/src/js/models/project-settings-definition.js index 242276681..4a26c82b9 100644 --- a/webui/src/js/models/project-settings-definition.js +++ b/webui/src/js/models/project-settings-definition.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -13,7 +13,7 @@ define(['utils/observable-properties'], this.extraPathDirectories = props.createListProperty(['uid', 'value']); this.extraEnvironmentVariables = props.createListProperty(['uid', 'name', 'value']); - this.credentialStorePolicy = props.createProperty('native'); + this.credentialStorePolicy = props.createProperty('passphrase'); this.targetDomainLocation = props.createProperty('mii'); this.wdtTargetType = props.createProperty('wko'); diff --git a/webui/src/js/models/vz-application-definition.js b/webui/src/js/models/vz-application-definition.js deleted file mode 100644 index d291a6672..000000000 --- a/webui/src/js/models/vz-application-definition.js +++ /dev/null @@ -1,62 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/observable-properties', 'utils/validation-helper', 'utils/wkt-logger'], - function(props, validationHelper) { - return function (name, k8sDomain) { - function VerrazzanoApplicationModel() { - let componentChanged = false; - - this.applicationName = props.createProperty('${1}-app', k8sDomain.uid.observable); - this.applicationName.addValidator(...validationHelper.getK8sNameValidators()); - this.applicationVersion = props.createProperty(); - this.applicationDescription = props.createProperty(); - - this.useMultiClusterApplication = props.createProperty(false); - this.createProject = props.createProperty(false); - this.projectName = props.createProperty('${1}', this.applicationName.observable); - this.projectName.addValidator(...validationHelper.getK8sNameValidators()); - - this.placementClusters = props.createArrayProperty(['local']); - this.secrets = props.createArrayProperty(); - - this.componentKeys = [ 'name', 'ingressTraitEnabled', 'ingressTraitSecretName', 'ingressTraitRules', - 'manualScalerTraitEnabled', 'manualScalerTraitReplicaCount', 'metricsTraitEnabled', - 'metricsTraitHttpPort', 'metricsTraitHttpPath', 'metricsTraitSecretName', 'metricsTraitDeploymentName', - 'loggingTraitEnabled', 'loggingTraitImage', 'loggingTraitConfiguration' ]; - this.components = props.createListProperty(this.componentKeys).persistByKey('name'); - - this.readFrom = (json) => { - props.createGroup(name, this).readFrom(json); - }; - - this.writeTo = (json) => { - props.createGroup(name, this).writeTo(json); - }; - - this.isChanged = () => { - if(componentChanged) { - return true; - } - - return props.createGroup(name, this).isChanged(); - }; - - this.setNotChanged = () => { - componentChanged = false; - props.createGroup(name, this).setNotChanged(); - }; - - this.componentChanged = () => { - componentChanged = true; - }; - } - - return new VerrazzanoApplicationModel(); - }; - } -); diff --git a/webui/src/js/models/vz-component-definition.js b/webui/src/js/models/vz-component-definition.js deleted file mode 100644 index 268b89958..000000000 --- a/webui/src/js/models/vz-component-definition.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -/** - * An object which holds the Verrazzano component extra information (outside the k8s-domain-definition). - * - * Returns a constructor for the object. - */ -define(['utils/observable-properties', 'utils/validation-helper'], - function(props, validationHelper) { - return function (name, k8sDomain) { - function VerrazzanoComponentModel() { - this.componentName = props.createProperty('${1}', k8sDomain.uid.observable); - this.componentName.addValidator(...validationHelper.getK8sNameValidators()); - - this.readFrom = (json) => { - props.createGroup(name, this).readFrom(json); - }; - - this.writeTo = (json) => { - props.createGroup(name, this).writeTo(json); - }; - - this.isChanged = () => { - return props.createGroup(name, this).isChanged(); - }; - - this.setNotChanged = () => { - props.createGroup(name, this).setNotChanged(); - }; - } - - return new VerrazzanoComponentModel(); - }; - } -); diff --git a/webui/src/js/models/vz-install-definition.js b/webui/src/js/models/vz-install-definition.js deleted file mode 100644 index bf2186f9f..000000000 --- a/webui/src/js/models/vz-install-definition.js +++ /dev/null @@ -1,44 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -/** - * An object which defines installation of Verrazzano. - * - * Returns a constructor for the object. - */ -define(['utils/observable-properties'], - function(props) { - return function (name) { - function VerrazzanoInstallModel() { - this.versionTag = props.createProperty(); - this.installationName = props.createProperty('example-verrazzano'); - this.installationProfile = props.createProperty('dev'); - this.actualInstalledVersion = props.createProperty(); - this.installJaeger = props.createProperty(false); - this.istioSamplingRate = props.createProperty(1); - this.installArgoCD = props.createProperty(false); - - this.readFrom = (json) => { - props.createGroup(name, this).readFrom(json); - }; - - this.writeTo = (json) => { - props.createGroup(name, this).writeTo(json); - }; - - this.isChanged = () => { - return props.createGroup(name, this).isChanged(); - }; - - this.setNotChanged = () => { - props.createGroup(name, this).setNotChanged(); - }; - } - return new VerrazzanoInstallModel(); - }; - } -); diff --git a/webui/src/js/models/wkt-project.js b/webui/src/js/models/wkt-project.js index d02891739..82b51d622 100644 --- a/webui/src/js/models/wkt-project.js +++ b/webui/src/js/models/wkt-project.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -12,11 +12,9 @@ */ define(['knockout', 'models/wdt-model-definition', 'models/image-definition', 'models/kubectl-definition', 'models/k8s-domain-definition', 'models/wko-definition', 'models/project-settings-definition', - 'models/ingress-definition', 'models/vz-install-definition', 'models/vz-component-definition', - 'models/vz-application-definition', 'utils/common-utilities', 'utils/wkt-logger'], + 'models/ingress-definition', 'utils/common-utilities', 'utils/i18n', 'utils/wkt-logger'], function (ko, wdtConstructor, imageConstructor, kubectlConstructor, domainConstructor, wkoConstructor, - settingsConstructor, ingressConstructor, verrazzanoInstallConstructor, verrazzanoComponentConstructor, - verrazzanoApplicationConstructor, utils, wktLogger) { + settingsConstructor, ingressConstructor, utils, i18n, wktLogger) { function WktProject() { let projectFileName = null; @@ -90,9 +88,6 @@ function (ko, wdtConstructor, imageConstructor, kubectlConstructor, domainConstr this.ingress = ingressConstructor('ingress'); this.kubectl = kubectlConstructor('kubectl'); this.k8sDomain = domainConstructor('k8sDomain', this.wdtModel, this.image); - this.vzInstall = verrazzanoInstallConstructor('vzInstall'); - this.vzComponent = verrazzanoComponentConstructor('vzComponent', this.k8sDomain); - this.vzApplication = verrazzanoApplicationConstructor('vzApplication', this.k8sDomain); this.pages = [ this.wdtModel, this.image, @@ -101,9 +96,6 @@ function (ko, wdtConstructor, imageConstructor, kubectlConstructor, domainConstr this.wko, this.settings, this.ingress, - this.vzInstall, - this.vzComponent, - this.vzApplication, ]; this.convertOldProjectFormat = (wktProjectJson) => { @@ -173,6 +165,33 @@ function (ko, wdtConstructor, imageConstructor, kubectlConstructor, domainConstr } } } + + // Version 2.0 removes support for Verrazzano so remove all Verrazzano-specific state from the project. + let foundVerrazzanoInProject = false; + if ('settings' in wktProjectJson && wktProjectJson.settings.wdtTargetType === 'vz') { + foundVerrazzanoInProject = true; + wktProjectJson.settings.wdtTargetType = 'wko'; + } + if ('kubectl' in wktProjectJson && 'vzManagedClusters' in wktProjectJson.kubectl) { + foundVerrazzanoInProject = true; + delete wktProjectJson.kubectl.vzManagedClusters; + } + if ('vzInstall' in wktProjectJson) { + foundVerrazzanoInProject = true; + delete wktProjectJson.vzInstall; + } + if ('vzApplication' in wktProjectJson) { + foundVerrazzanoInProject = true; + delete wktProjectJson.vzApplication; + } + if (foundVerrazzanoInProject) { + wktLogger.warn(i18n.t('wkt-project-verrazzano-removal-warning')); + } + + // Version 2.0 removed support for the native, keytar-based credential store. The code that + // handles the conversion is in the electron credential loading code since all credential loading + // is handled on the electron side so by the time we get here, it is too late. + // }; this.setFromJson = (wktProjectJson, modelContentsJson) => { diff --git a/webui/src/js/path_mapping.json b/webui/src/js/path_mapping.json index 9eea37717..f0f398b2d 100644 --- a/webui/src/js/path_mapping.json +++ b/webui/src/js/path_mapping.json @@ -4,12 +4,12 @@ "cdns": { "jet": { - "prefix": "https://static.oracle.com/cdn/jet/14.1.0/default/js", - "css": "https://static.oracle.com/cdn/jet/14.1.0/default/css", - "csspreact": "https://static.oracle.com/cdn/jet/14.1.0/3rdparty/oraclejet-preact/amd", + "prefix": "https://static.oracle.com/cdn/jet/16.0.0/default/js", + "css": "https://static.oracle.com/cdn/jet/16.0.0/default/css", + "csspreact": "https://static.oracle.com/cdn/jet/16.0.0/3rdparty/oraclejet-preact/amd", "config": "bundles-config.js" }, - "3rdparty": "https://static.oracle.com/cdn/jet/14.1.0/3rdparty" + "3rdparty": "https://static.oracle.com/cdn/jet/16.0.0/3rdparty" }, "libs": { @@ -35,12 +35,12 @@ "debug": { "src": "jquery.js", "path": "libs/jquery/jquery-#{version}.js", - "cdnPath": "jquery/jquery-3.6.1" + "cdnPath": "jquery/jquery-3.6.4" }, "release": { "src": "jquery.min.js", "path": "libs/jquery/jquery-#{version}.min.js", - "cdnPath": "jquery/jquery-3.6.1.min" + "cdnPath": "jquery/jquery-3.6.4.min" } }, @@ -104,7 +104,7 @@ "pathSuffix": "/min'", "cdnPath": "" } - }, + }, "ojL10n": { "cdn": "jet", @@ -165,7 +165,7 @@ "cdnPath": "../../packs/oj-c/#{version}/min" } }, - + "persist": { "cdn": "3rdparty", "cwd": "node_modules/@oracle/oraclejet/dist/js/libs/persist", @@ -227,7 +227,7 @@ "cdnPath": "touchr/touchr" } }, - + "preact": { "cdn": "3rdparty", "cwd": "node_modules/preact/dist", @@ -270,7 +270,8 @@ "src": ["compat.umd.js", "compat.umd.js.map"], "path": "libs/preact/compat/dist/compat.umd.js", "cdnPath": "preact/compat/dist/compat.umd" - } + }, + "requireMap": "react" }, "preact/jsx-runtime": { "cdn": "3rdparty", @@ -286,7 +287,7 @@ "cdnPath": "preact/jsx-runtime/dist/jsxRuntime.umd" } }, - + "preact/debug": { "cdn": "3rdparty", "cwd": "node_modules/preact/debug/dist", @@ -322,7 +323,7 @@ "cwd": "node_modules/proj4/dist", "debug": { "src": "proj4-src.js", - "path": "libs/proj4js/dist/proj4-src.js", + "path": "libs/proj4js/dist/proj4-src.js", "cdnPath": "proj4js/dist/proj4" }, "release": { @@ -331,7 +332,7 @@ "cdnPath": "proj4js/dist/proj4" } }, - + "css": { "cdn": "3rdparty", "cwd": "node_modules/require-css", @@ -381,6 +382,21 @@ } }, + "chai": { + "cdn": "3rdparty", + "cwd": "node_modules/chai/", + "debug": { + "src": "chai.js", + "path": "libs/chai/chai.js", + "cdnPath": "chai/chai-4.3.10" + }, + "release": { + "src": "chai.js", + "path": "libs/chai/chai.js", + "cdnPath": "chai/chai-4.3.10.min" + } + }, + "js-yaml": { "cdn": "3rdparty", "cwd": "node_modules/js-yaml/dist", diff --git a/webui/src/js/utils/aux-image-helper.js b/webui/src/js/utils/aux-image-helper.js index 8e7dbf054..fa6168216 100644 --- a/webui/src/js/utils/aux-image-helper.js +++ b/webui/src/js/utils/aux-image-helper.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2023, Oracle and/or its affiliates. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -13,8 +13,6 @@ define(['models/wkt-project', 'utils/wkt-logger'], if (project.settings.targetDomainLocation.value === 'pv') { if (project.settings.wdtTargetType.value === 'wko') { return this.wkoVersion41OrHigher(); - } else { - return this.v8oVersion161OrHigher(); } } return false; @@ -30,15 +28,6 @@ define(['models/wkt-project', 'utils/wkt-logger'], return result; }; - this.v8oVersion161OrHigher = () => { - let result = true; - if (project.vzInstall.actualInstalledVersion.hasValue() && - window.api.utils.compareVersions(project.vzInstall.actualInstalledVersion.value, '1.6.1') < 0) { - result = false; - } - return result; - }; - this.domainUsesJRF = () => { return project.image.useAuxImage.value && project.k8sDomain.domainType.value !== 'WLS' && project.k8sDomain.domainType.value !== 'RestrictedJRF'; diff --git a/webui/src/js/utils/k8s-helper.js b/webui/src/js/utils/k8s-helper.js index 407bb968a..2ae944ee4 100644 --- a/webui/src/js/utils/k8s-helper.js +++ b/webui/src/js/utils/k8s-helper.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -31,27 +31,6 @@ function(WktActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, val return Promise.resolve(false); } - let clusterToCheck; - const availableClusters = this._getTargetClusters(); - if (availableClusters.length > 1) { - const args = [ ]; - availableClusters.forEach(availableCluster => args.push({ - name: availableCluster.name, - label: availableCluster.name - })); - const result = await dialogHelper.promptDialog('k8s-helper-choose-cluster-dialog', - { availableClusters: args }); - if (result && result.clusterName) { - clusterToCheck = result.clusterName; - } else { - return Promise.resolve(false); - } - } else if (availableClusters.length === 1) { - clusterToCheck = availableClusters[0].name; - } - - const { targetClusterKubeConfig, targetClusterKubeContext } = this._getTargetCluster(clusterToCheck); - const totalSteps = 4.0; try { let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); @@ -77,8 +56,8 @@ function(WktActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, val busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = targetClusterKubeContext || this.project.kubectl.kubeConfigContextToUse.value; - const kubectlOptions = this.getKubectlOptions(targetClusterKubeConfig); + const kubectlContext = this.project.kubectl.kubeConfigContextToUse.value; + const kubectlOptions = this.getKubectlOptions(); if (!options.skipKubectlSetContext) { if (! await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix)) { return Promise.resolve(false); @@ -87,7 +66,7 @@ function(WktActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, val busyDialogMessage = i18n.t('kubectl-helper-verify-connect-in-progress'); dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - const verifyConnectivityResult = await this.verifyConnectivity(kubectlExe, kubectlOptions, clusterToCheck); + const verifyConnectivityResult = await this.verifyConnectivity(kubectlExe, kubectlOptions); return Promise.resolve(verifyConnectivityResult); } catch (err) { dialogHelper.closeBusyDialog(); @@ -97,20 +76,19 @@ function(WktActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, val } } - async verifyConnectivity(kubectlExe, kubectlOptions, clusterToCheck) { + async verifyConnectivity(kubectlExe, kubectlOptions) { try { const verifyResult = await window.api.ipc.invoke('kubectl-verify-connection', kubectlExe, kubectlOptions); dialogHelper.closeBusyDialog(); - const clusterName = clusterToCheck || ''; if (verifyResult.isSuccess) { - const title = i18n.t('kubectl-helper-verify-connect-success-title', { clusterName }); + const title = i18n.t('kubectl-helper-verify-connect-success-title'); const message = i18n.t('kubectl-helper-verify-connect-success-message', - { clientVersion: verifyResult.clientVersion, serverVersion: verifyResult.serverVersion, clusterName }); + { clientVersion: verifyResult.clientVersion, serverVersion: verifyResult.serverVersion }); await window.api.ipc.invoke('show-info-message', title, message); } else { - const errTitle = i18n.t('kubectl-helper-verify-connect-failed-title', { clusterName }); + const errTitle = i18n.t('kubectl-helper-verify-connect-failed-title'); const errMessage = i18n.t('kubectl-helper-verify-connect-failed-error-message', - { error: verifyResult.reason, clusterName}); + { error: verifyResult.reason}); await window.api.ipc.invoke('show-error-message', errTitle, errMessage); return Promise.resolve(false); } @@ -130,35 +108,6 @@ function(WktActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, val return validationObject; } - - _getTargetClusters() { - let clusters = []; - if (this.project.settings.wdtTargetType.value === 'vz') { - clusters.push({ - name: 'local', - kubeConfig: this.project.kubectl.kubeConfig.value, - kubeContext: this.project.kubectl.kubeConfigContextToUse.value - }); - this.project.kubectl.vzManagedClusters.observable() - .forEach(managedClusterData => clusters.push(managedClusterData)); - } - return clusters; - } - - _getTargetCluster(clusterToCheck) { - const result = { - targetClusterKubeConfig: undefined, - targetClusterKubeContext: undefined - }; - if (clusterToCheck) { - const clusterData = this._getTargetClusters().find(cluster => clusterToCheck === cluster.name); - if (clusterData) { - result.targetClusterKubeConfig = clusterData.kubeConfig; - result.targetClusterKubeContext = clusterData.kubeContext; - } - } - return result; - } } return new KubernetesHelper(); diff --git a/webui/src/js/utils/project-io.js b/webui/src/js/utils/project-io.js index 07a1b1106..177b042b1 100644 --- a/webui/src/js/utils/project-io.js +++ b/webui/src/js/utils/project-io.js @@ -1,12 +1,12 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; /** - * An helper object for project IO. + * A helper object for project IO. * Returns a singleton. */ diff --git a/webui/src/js/utils/script-adapter-base.js b/webui/src/js/utils/script-adapter-base.js index bae478895..e2b74a6fe 100644 --- a/webui/src/js/utils/script-adapter-base.js +++ b/webui/src/js/utils/script-adapter-base.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; @@ -213,17 +213,6 @@ define([], alreadyInstalledMessage, notInstalledIsError, alreadyInstalledIsError), ''); } - addVerrazzanoInstalledCheckBlock(comment, kubectlExe, vzInstallName, notInstalledMessage, - alreadyInstalledMessage, notInstalledIsError, alreadyInstalledIsError) { - const args = `get verrazzano ${vzInstallName}`; - this._lines.push(...this._formatInstallCheckBlock(comment, kubectlExe, args, notInstalledMessage, - alreadyInstalledMessage, notInstalledIsError, alreadyInstalledIsError), ''); - } - - addVerrazzanoProjectCreateBlock(comment, kubectlExe, createProject, vzProjectYaml, errorMessage) { - this.addVariableEqualValueKubectlApplyBlock(comment, createProject, 'true', kubectlExe, vzProjectYaml, errorMessage); - } - addCreateNamespaceBlock(comment, kubectlExe, namespace, createErrorMessage, alreadyExistsMessage) { const getArgs = `get namespace ${namespace}`; const createArgs = `create namespace ${namespace}`; @@ -307,16 +296,6 @@ define([], this._lines.push(...this._formatRunCommandBlock(comment, kubectlExe, args, errorMessage), ''); } - addVerrazzanoPlatformOperatorRolloutBlock(comment, kubectlExe, errorMessage) { - const args = '-n verrazzano-install rollout status deployment/verrazzano-platform-operator'; - this._lines.push(...this._formatRunCommandBlock(comment, kubectlExe, args, errorMessage), ''); - } - - addVerrazzanoInstallWaitBlock(comment, kubectlExe, vzInstallName, vzInstallTimeout, errorMessage) { - const args = `wait --timeout=${vzInstallTimeout} --for=condition=InstallComplete verrazzano/${vzInstallName}`; - this._lines.push(...this._formatRunCommandBlock(comment, kubectlExe, args, errorMessage), ''); - } - addAddHelmChartToRepoBlock(comment, helmExe, chartName, chartPath, addErrorMessage) { const args = `repo add ${chartName} ${chartPath} --force-update`; this._lines.push(...this._formatRunCommandBlock(comment, helmExe, args, addErrorMessage), ''); diff --git a/webui/src/js/utils/vz-actions-base.js b/webui/src/js/utils/vz-actions-base.js deleted file mode 100644 index 805685fdf..000000000 --- a/webui/src/js/utils/vz-actions-base.js +++ /dev/null @@ -1,83 +0,0 @@ -/** - * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/k8s-domain-actions-base', 'utils/validation-helper', 'utils/dialog-helper', 'utils/i18n'], - function (K8sDomainActionsBase, validationHelper, dialogHelper, i18n) { - class VzActionsBase extends K8sDomainActionsBase { - constructor() { - super(); - } - - getValidationObject(flowNameKey) { - const validationObject = validationHelper.createValidatableObject(flowNameKey); - const kubectlFormConfig = validationObject.getDefaultConfigObject(); - kubectlFormConfig.formName = 'kubectl-form-name'; - - validationObject.addField('kubectl-exe-file-path-label', - validationHelper.validateRequiredField(this.project.kubectl.executableFilePath.value), kubectlFormConfig); - - return validationObject; - } - - async isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix) { - const result = await window.api.ipc.invoke('is-verrazzano-installed', kubectlExe, kubectlOptions); - if (result.reason) { - const errMessage = i18n.t(`${errPrefix}-install-check-failed-error-message`, {error: result.reason}); - dialogHelper.closeBusyDialog(); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - return Promise.resolve(result); - } - - async validateApplicationExists(kubectlExe, kubectlOptions, errTitle, errPrefix) { - try { - const validationResults = await window.api.ipc.invoke('validate-vz-application-exist', kubectlExe, - kubectlOptions, this.project.vzApplication.applicationName.value, this.project.k8sDomain.kubernetesNamespace.value); - if (!validationResults.isSuccess) { - const errMessage = i18n.t(`${errPrefix}-validate-application-failed-error-message`, { - application: this.project.vzApplication.applicationName.value, - error: validationResults.reason - }); - dialogHelper.closeBusyDialog(); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } else if (!validationResults.isValid) { - const errMessage = i18n.t(`${errPrefix}-application-not-exist-error-message`, - { application: this.project.vzApplication.applicationName.value }); - dialogHelper.closeBusyDialog(); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } catch (err) { - return Promise.reject(err); - } - return Promise.resolve(true); - } - - openBusyDialog(options, message) { - if (!options.skipBusyDialog) { - dialogHelper.openBusyDialog(message, 'bar', 0.0); - } - } - - updateBusyDialog(options, message, progress) { - if (!options.skipBusyDialog) { - dialogHelper.updateBusyDialog(message, progress); - } - } - - closeBusyDialog(options) { - if (!options.skipBusyDialog) { - dialogHelper.closeBusyDialog(); - } - } - } - - return VzActionsBase; - } -); diff --git a/webui/src/js/utils/vz-application-deployer.js b/webui/src/js/utils/vz-application-deployer.js deleted file mode 100644 index a10f52092..000000000 --- a/webui/src/js/utils/vz-application-deployer.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/validation-helper', 'utils/vz-application-resource-generator', - 'utils/vz-application-project-generator', 'utils/wkt-logger'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, validationHelper, - VerrazzanoApplicationResourceGenerator, VerrazzanoProjectResourceGenerator, wktLogger) { - class VzApplicationDeployer extends VzActionsBase { - constructor() { - super(); - } - - async startDeployApplication() { - await this.executeAction(this.callDeployApplication); - } - - async callDeployApplication(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-application-deployer-aborted-error-title'); - const errPrefix = 'vz-application-deployer'; - const validatableObject = this.getValidatableObject('flow-verrazzano-deploy-application-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - const createProject = this.project.vzApplication.useMultiClusterApplication.value && this.project.vzApplication.createProject.value; - - const totalSteps = createProject ? 7.0 : 6.0; - const kubectlExe = this.getKubectlExe(); - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // Apply the Kubernetes context, if needed. - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - /// Make sure Verrazzano is installed - busyDialogMessage = i18n.t('flow-checking-vz-already-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (!result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-application-deployer-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - // Verify that all referenced components are already deployed in the namespace. - const namespace = this.project.k8sDomain.kubernetesNamespace.value; - busyDialogMessage = i18n.t('flow-checking-vz-app-components-deployed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - if (!options.skipVzComponentsDeployedCheck) { - const appComponentNames = this.getApplicationComponentNames(); - wktLogger.debug('appComponentNames = %s', appComponentNames); - const result = await window.api.ipc.invoke('verify-verrazzano-components-exist', - kubectlExe, appComponentNames, namespace, kubectlOptions); - if (!result.isSuccess) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-application-deployer-verify-components-error-message', - { namespace: namespace, error: result.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - let step = 5; - if (createProject) { - const vzProjectGenerator = new VerrazzanoProjectResourceGenerator(); - const projectSpec = vzProjectGenerator.generate().join('\n'); - - busyDialogMessage = i18n.t('vz-application-deployer-deploy-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, step/totalSteps); - const result = await window.api.ipc.invoke('deploy-verrazzano-project', kubectlExe, projectSpec, kubectlOptions); - if (!result) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-application-deployer-deploy-project-error-message', - { projectName: this.project.vzApplication.projectName.value, error: result.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - step++; - } - - const vzResourceGenerator = new VerrazzanoApplicationResourceGenerator(); - const appSpec = vzResourceGenerator.generate().join('\n'); - - busyDialogMessage = i18n.t('vz-application-deployer-deploy-application-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, step/totalSteps); - const deployResult = await window.api.ipc.invoke('deploy-verrazzano-application', kubectlExe, appSpec, kubectlOptions); - dialogHelper.closeBusyDialog(); - if (deployResult.isSuccess) { - const title = i18n.t('vz-application-deployer-deploy-application-success-title'); - const message = i18n.t('vz-application-deployer-deploy-application-success-message', - { name: this.project.vzApplication.applicationName.value, namespace: this.project.k8sDomain.kubernetesNamespace.value }); - await window.api.ipc.invoke('show-info-message', title, message); - } else { - const title = i18n.t('vz-application-deployer-deploy-failed-title'); - const message = i18n.t('vz-application-deployer-deploy-failed-message', { - name: this.project.vzApplication.applicationName.value, - namespace: this.project.k8sDomain.kubernetesNamespace.value, - error: deployResult.reason - }); - await window.api.ipc.invoke('show-error-message', title, message); - } - return Promise.resolve(deployResult.isSuccess); - } catch (err) { - dialogHelper.closeBusyDialog(); - throw err; - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validationObject = this.getValidationObject(flowNameKey); - const vzApplicationFormConfig = validationObject.getDefaultConfigObject(); - vzApplicationFormConfig.formName = 'vz-application-design-form-name'; - - validationObject.addField('vz-application-design-name-label', - this.project.vzApplication.applicationName.validate(true), vzApplicationFormConfig); - validationObject.addField('vz-application-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true), vzApplicationFormConfig); - validationObject.addField('vz-component-design-installed-version-label', - validationHelper.validateRequiredField(this.project.vzInstall.actualInstalledVersion.value), vzApplicationFormConfig); - - const createProject = this.project.vzApplication.useMultiClusterApplication.value && - this.project.vzApplication.createProject.value; - if (createProject) { - validationObject.addField('vz-application-design-project-name-label', - this.project.vzApplication.projectName.validate(true), vzApplicationFormConfig); - } - - // Don't allow an application with zero components... - validationObject.addField('vz-application-design-components-label', - validationHelper.validateRequiredField(this.project.vzApplication.components.value), vzApplicationFormConfig); - - return validationObject; - } - - getApplicationComponentNames() { - return this.project.vzApplication.components.value.map(component => component.name); - } - } - return new VzApplicationDeployer(); -}); diff --git a/webui/src/js/utils/vz-application-project-generator.js b/webui/src/js/utils/vz-application-project-generator.js deleted file mode 100644 index 80149a426..000000000 --- a/webui/src/js/utils/vz-application-project-generator.js +++ /dev/null @@ -1,76 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/vz-helper', 'js-yaml', 'utils/i18n', 'utils/wkt-logger'], - function(project, VerrazzanoHelper, jsYaml) { - class VerrazzanoProjectResourceGenerator { - constructor() { - this.project = project; - this._vzHelper = undefined; - } - - generate() { - const isMultiCluster = this.project.vzApplication.useMultiClusterApplication.value; - const isCreateProject = this.project.vzApplication.createProject.value; - - if (isMultiCluster && isCreateProject) { - const projectSpec = { - apiVersion: this._getProjectApiVersion(), - kind: 'VerrazzanoProject', - metadata: { - name: this.project.vzApplication.projectName.value, - namespace: 'verrazzano-mc', - }, - spec: { - template: { - namespaces: [ - { - metadata: { - name: this.project.k8sDomain.kubernetesNamespace.value, - }, - }, - ], - }, - placement: { - clusters: [] - } - } - }; - - for (const clusterName of this.project.vzApplication.placementClusters.value) { - projectSpec.spec.placement.clusters.push({ name: clusterName }); - } - - return jsYaml.dump(projectSpec).split('\n'); - } else { - return []; - } - } - - _getProjectApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getProjectApiVersion(); - } - return result; - } - - _getVerrazzanoHelper() { - if (!this._vzHelper) { - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - this._vzHelper = new VerrazzanoHelper(vzVersion); - } - } - return this._vzHelper; - } - } - - return VerrazzanoProjectResourceGenerator; - }); diff --git a/webui/src/js/utils/vz-application-resource-generator.js b/webui/src/js/utils/vz-application-resource-generator.js deleted file mode 100644 index 1b6983ea5..000000000 --- a/webui/src/js/utils/vz-application-resource-generator.js +++ /dev/null @@ -1,330 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/vz-helper', 'js-yaml', 'utils/i18n', 'utils/wkt-logger'], - function(project, VerrazzanoHelper, jsYaml) { - class VerrazzanoApplicationResourceGenerator { - constructor() { - this.project = project; - this._vzHelper = undefined; - } - - generate() { - const isMultiCluster = this.project.vzApplication.useMultiClusterApplication.value; - let appSpec = this._generateApplicationSpec(isMultiCluster); - - if (isMultiCluster) { - const template = Object.assign({}, appSpec); - appSpec = { - apiVersion: this._getMultiClusterApplicationApiVersion(), - kind: 'MultiClusterApplicationConfiguration', - metadata: { }, - spec: { - template, - placement: { - clusters: [] - }, - }, - }; - - this._setNameAndNamespace(appSpec.metadata); - - for (const clusterName of this.project.vzApplication.placementClusters.value) { - appSpec.spec.placement.clusters.push({ name: clusterName }); - } - - if (this.project.vzApplication.secrets.value.length > 0) { - appSpec.spec.secrets = [ ...this.project.vzApplication.secrets.value ]; - } - } - return jsYaml.dump(appSpec).split('\n'); - } - - _generateApplicationSpec(isMultiCluster) { - const appSpec = { - apiVersion: this._getApplicationApiVersion(), - kind: 'ApplicationConfiguration', - metadata: { }, - spec: { - components: [ ] - } - }; - - if (isMultiCluster) { - delete appSpec.apiVersion; - delete appSpec.kind; - } else { - this._setNameAndNamespace(appSpec.metadata); - } - - this._addAnnotations(appSpec.metadata); - if (Object.keys(appSpec.metadata).length === 0) { - delete appSpec.metadata; - } - - this.project.vzApplication.components.value.forEach(component => { - this._addComponent(appSpec.spec.components, component); - }); - - return appSpec; - } - - _setNameAndNamespace(metadata) { - if (this.project.vzApplication.applicationName.value) { - metadata.name = this.project.vzApplication.applicationName.value; - } - if (this.project.k8sDomain.kubernetesNamespace.value) { - metadata.namespace = this.project.k8sDomain.kubernetesNamespace.value; - } - } - - _addAnnotations(metadata) { - if (this.project.vzApplication.applicationVersion.value) { - if (!metadata.annotations) { - metadata.annotations = {}; - } - metadata.annotations.version = this.project.vzApplication.applicationVersion.value; - } - - if (this.project.vzApplication.applicationDescription.value) { - if (!metadata.annotations) { - metadata.annotations = {}; - } - metadata.annotations.description = this.project.vzApplication.applicationDescription.value; - } - } - - _addComponent(componentsList, componentObject) { - const component = { - componentName: componentObject.name, - }; - - const traits = []; - this._addIngressTrait(componentObject, traits); - this._addLoggingTrait(componentObject, traits); - this._addManualScalerTrait(componentObject, traits); - this._addMetricsTrait(componentObject, traits); - - if (traits.length > 0) { - component.traits = traits; - } - componentsList.push(component); - } - - _addIngressTrait(component, traits) { - if (component.ingressTraitEnabled) { - const ingressTrait = { - apiVersion: this._getIngressTraitApiVersion(), - kind: 'IngressTrait', - spec: { - rules: [], - }, - }; - - if (component.ingressTraitSecretName) { - ingressTrait.spec.tls = { - secretName: component.ingressTraitSecretName, - }; - } - - if (Array.isArray(component.ingressTraitRules)) { - for (const ingressTraitRule of component.ingressTraitRules) { - const rule = { }; - - if (typeof ingressTraitRule.hosts === 'string' && ingressTraitRule.hosts.length > 0) { - rule.hosts = ingressTraitRule.hosts.split(',').map(host => host.trim()); - } else if (Array.isArray(ingressTraitRule.hosts) && ingressTraitRule.hosts.length > 0) { - rule.hosts = ingressTraitRule.hosts; - } - - if (Array.isArray(ingressTraitRule.paths) && ingressTraitRule.paths.length > 0) { - rule.paths = ingressTraitRule.paths.map(path => { - const newPath = Object.assign({}, path); - delete newPath.uid; - return newPath; - }); - } - - const destination = this._getIngressTraitRuleDestination(ingressTraitRule); - if (destination) { - rule.destination = destination; - } - - if (Object.keys(rule).length > 0) { - ingressTrait.spec.rules.push(rule); - } - } - } - - traits.push({trait: ingressTrait }); - } - } - - _addLoggingTrait(component, traits) { - if (component.loggingTraitEnabled) { - const loggingTrait = { - apiVersion: this._getLoggingTraitApiVersion(), - kind: 'LoggingTrait', - spec: { }, - }; - - if (component.loggingTraitImage) { - loggingTrait.spec.loggingImage = component.loggingTraitImage; - } - if (component.loggingTraitConfiguration) { - loggingTrait.spec.loggingConfig = component.loggingTraitConfiguration; - } - - traits.push({trait: loggingTrait}); - } - } - - _addManualScalerTrait(component, traits) { - if (component.manualScalerTraitEnabled) { - const manualScalerTrait = { - apiVersion: this._getManualScalerTraitApiVersion(), - kind: 'ManualScalerTrait', - spec: { }, - }; - - if (component.manualScalerTraitReplicaCount) { - manualScalerTrait.spec.replicaCount = component.manualScalerTraitReplicaCount; - } - - traits.push({trait: manualScalerTrait}); - } - } - - _addMetricsTrait(component, traits) { - if (component.metricsTraitEnabled) { - const metricsTrait = { - apiVersion: this._getMetricsTraitApiVersion(), - kind: 'MetricsTrait', - spec: { }, - }; - - if (component.metricsTraitHttpPort) { - metricsTrait.spec.port = component.metricsTraitHttpPort; - } - if (component.metricsTraitHttpPath) { - metricsTrait.spec.path = component.metricsTraitHttpPath; - } - if (component.metricsTraitSecretName) { - metricsTrait.spec.secret = component.metricsTraitSecretName; - } - if (component.metricsTraitDeploymentName) { - metricsTrait.spec.scaper = component.metricsTraitDeploymentName; - } - - traits.push({trait: metricsTrait}); - } - } - - _getIngressTraitRuleDestination(ingressTraitRule) { - const destination = { }; - - if (ingressTraitRule.destinationHost) { - destination.host = ingressTraitRule.destinationHost; - } - if (ingressTraitRule.destinationPort) { - destination.port = ingressTraitRule.destinationPort; - } - - const httpCookie = { }; - if (ingressTraitRule.destinationHttpCookieName) { - httpCookie.name = ingressTraitRule.destinationHttpCookieName; - } - if (ingressTraitRule.destinationHttpCookiePath) { - httpCookie.path = ingressTraitRule.destinationHttpCookiePath; - } - if (ingressTraitRule.destinationHttpCookieTTL) { - httpCookie.ttl = ingressTraitRule.destinationHttpCookieTTL; - } - if (Object.keys(httpCookie).length > 0) { - destination.httpCookie = httpCookie; - } - - if (Object.keys(destination).length === 0) { - return undefined; - } - return destination; - } - - _getMultiClusterApplicationApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getMultiClusterApplicationApiVersion(); - } - return result; - } - - _getApplicationApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getApplicationApiVersion(); - } - return result; - } - - _getIngressTraitApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getIngressTraitApiVersion(); - } - return result; - } - - _getLoggingTraitApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getLoggingTraitApiVersion(); - } - return result; - } - - _getManualScalerTraitApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getManualScalerTraitApiVersion(); - } - return result; - } - - _getMetricsTraitApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getMetricsTraitApiVersion(); - } - return result; - } - - _getVerrazzanoHelper() { - if (!this._vzHelper) { - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - this._vzHelper = new VerrazzanoHelper(vzVersion); - } - } - return this._vzHelper; - } - } - - return VerrazzanoApplicationResourceGenerator; - } -); diff --git a/webui/src/js/utils/vz-application-script-generator.js b/webui/src/js/utils/vz-application-script-generator.js deleted file mode 100644 index 59bb46a92..000000000 --- a/webui/src/js/utils/vz-application-script-generator.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/script-generator-base'], - function(project, ScriptGeneratorBase) { - const scriptDescription = [ - 'This script deploys the Verrazzano application for this WebLogic domain into', - 'Kubernetes. It depends on having the Kubernetes client configuration', - 'correctly configured to authenticate to the cluster with sufficient', - 'permissions to run the commands.' - ]; - - class VerrazzanoApplicationScriptGenerator extends ScriptGeneratorBase { - constructor(scriptType) { - super(scriptType); - } - - generate() { - const httpsProxyUrl = this.project.getHttpsProxyUrl(); - const bypassProxyHosts = this.project.getBypassProxyHosts(); - - this.adapter.addScriptHeader(scriptDescription); - this.adapter.addVariableStartBanner(); - - this.adapter.addKubectlVariablesBlock(this.project.kubectl.executableFilePath.value, httpsProxyUrl, - bypassProxyHosts, this.project.kubectl.kubeConfig.value, this.project.kubectl.kubeConfigContextToUse.value); - - const shouldCreateProject = this.project.vzApplication.useMultiClusterApplication.value && - this.project.vzApplication.createProject.value; - this.adapter.addVariableDefinition('VERRAZZANO_INSTALL_NAME', this.project.vzInstall.installationName.value); - this.adapter.addVariableDefinition('VERRAZZANO_CREATE_PROJECT', shouldCreateProject); - this.adapter.addVariableDefinition('VERRAZZANO_APPLICATION_NAME', this.project.vzApplication.applicationName.value); - this.adapter.addVariableDefinition('VERRAZZANO_PROJECT_NAME', this.project.vzApplication.projectName.value); - this.adapter.addVariableDefinition('VERRAZZANO_RESOURCE_YAML', this.fillInFileNameMask); - this.adapter.addVariableDefinition('VERRAZZANO_PROJECT_RESOURCE_YAML', this.fillInFileNameMask); - this.adapter.addEmptyLine(); - - this.adapter.addVariableEndBanner(); - - this.adapter.addKubectlExportAndUseContextBlock(); - const kubectlExe = this.adapter.getVariableReference('KUBECTL_EXE'); - const vzInstallName = this.adapter.getVariableReference('VERRAZZANO_INSTALL_NAME'); - - let comment = [ 'Make sure that Verrazzano is already installed' ]; - const notInstalledMessage = 'Verrazzano is not installed'; - const alreadyInstalledMessage = 'Verrazzano is already installed'; - this.adapter.addVerrazzanoInstalledCheckBlock(comment, kubectlExe, vzInstallName, - notInstalledMessage, alreadyInstalledMessage, true, false); - - comment = [ 'Create the Verrazzano Project, if needed' ]; - const createProject = this.adapter.getVariableReference('VERRAZZANO_CREATE_PROJECT'); - const vzProjectName = this.adapter.getVariableReference('VERRAZZANO_PROJECT_NAME'); - const vzProjectYaml = this.adapter.getVariableReference('VERRAZZANO_PROJECT_RESOURCE_YAML'); - let errorMessage = `Failed to create the Verrazzano project ${vzProjectName}`; - this.adapter.addVerrazzanoProjectCreateBlock(comment, kubectlExe, createProject, vzProjectYaml, errorMessage); - - comment = [ 'Create the Verrazzano Application for the WebLogic Domain' ]; - const vzResourceYaml = this.adapter.getVariableReference('VERRAZZANO_RESOURCE_YAML'); - const vzApplicationName = this.adapter.getVariableReference('VERRAZZANO_APPLICATION_NAME'); - errorMessage = `Failed to create the Verrazzano application ${vzApplicationName}`; - this.adapter.addKubectlApplyBlock(comment, kubectlExe, vzResourceYaml, errorMessage); - - this.adapter.addScriptFooter(); - return this.adapter.getScript(); - } - } - - return VerrazzanoApplicationScriptGenerator; - } -); diff --git a/webui/src/js/utils/vz-application-status-checker.js b/webui/src/js/utils/vz-application-status-checker.js deleted file mode 100644 index 9a82d2faa..000000000 --- a/webui/src/js/utils/vz-application-status-checker.js +++ /dev/null @@ -1,222 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/k8s-domain-resource-generator', 'utils/k8s-domain-configmap-generator', - 'utils/validation-helper', 'utils/wkt-logger'], -function (VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, K8sDomainResourceGenerator, - K8sDomainConfigMapGenerator, validationHelper, wktLogger) { - class VerrazzanoApplicationStatusChecker extends VzActionsBase { - constructor() { - super(); - } - - async startCheckApplicationStatus() { - await this.executeAction(this.callCheckApplicationStatus); - } - - async callCheckApplicationStatus() { - let errTitle = i18n.t('vz-application-status-checker-get-status-failed-title-message'); - let errPrefix = 'vz-application-status-checker'; - const validatableObject = this.getValidatableObject('flow-verrazzano-get-application-status-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - let clusterToCheck; - const targetClusters = this._getTargetClusters(); - if (targetClusters.length > 1) { - const args = [ ]; - targetClusters.forEach(targetCluster => args.push({ name:targetCluster, label: targetCluster })); - const result = await dialogHelper.promptDialog('vz-application-status-choose-cluster-dialog', - { targetClusters: args }); - if (result && result.clusterName) { - clusterToCheck = result.clusterName; - } else { - return Promise.resolve(false); - } - } else if (targetClusters.length === 1) { - clusterToCheck = targetClusters[0]; - } - - const managedClusterData = this._getTargetCluster(clusterToCheck); - const targetClusterKubeConfig = managedClusterData ? managedClusterData.kubeConfig : undefined; - const targetClusterKubeContext = managedClusterData ? managedClusterData.kubeContext : undefined; - - const totalSteps = 8.0; - try { - const kubectlExe = this.getKubectlExe(); - const kubectlOptions = this.getKubectlOptions(targetClusterKubeConfig); - const kubectlContext = targetClusterKubeContext || this.getKubectlContext(); - let operatorMajorVersion = ''; - - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0 / totalSteps); - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1 / totalSteps); - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2 / totalSteps); - if (!await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-validate-vz-application-namespace-in-progress', - {namespace: this.project.k8sDomain.kubernetesNamespace.value}); - dialogHelper.updateBusyDialog(busyDialogMessage, 3 / totalSteps); - - const nsStatus = await this.validateKubernetesNamespaceExists(kubectlExe, kubectlOptions, - this.project.k8sDomain.kubernetesNamespace.value, errTitle, errPrefix); - if (!nsStatus) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-validate-vz-application-in-progress', - {application: this.project.vzApplication.applicationName.value}); - dialogHelper.updateBusyDialog(busyDialogMessage, 4 / totalSteps); - if (! await this.validateApplicationExists(kubectlExe, kubectlOptions, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-validate-vz-domain-in-progress', - {domain: this.project.k8sDomain.uid.value}); - dialogHelper.updateBusyDialog(busyDialogMessage, 5 / totalSteps); - if (! await this.validateDomainExists(kubectlExe, kubectlOptions, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-getting-vz-application-status-in-progress', - {domain: this.project.k8sDomain.uid.value}); - dialogHelper.updateBusyDialog(busyDialogMessage, 6 / totalSteps); - - const applicationStatusResult = await window.api.ipc.invoke('vz-get-application-status', kubectlExe, - this.project.vzApplication.applicationName.value, this.project.k8sDomain.uid.value, - this.project.k8sDomain.kubernetesNamespace.value, kubectlOptions); - wktLogger.debug('applicationStatusResult = %s', JSON.stringify(applicationStatusResult, null, 2)); - if (!applicationStatusResult.isSuccess) { - const errMessage = i18n.t('vz-application-status-checker-get-status-failed-error-message', - {error: applicationStatusResult.reason}); - dialogHelper.closeBusyDialog(); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('flow-checking-operator-version-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 7 / totalSteps); - - const operatorVersionResult = await window.api.ipc.invoke('k8s-get-operator-version-from-domain-config-map', - kubectlExe, this.project.k8sDomain.kubernetesNamespace.value, kubectlOptions); - if (operatorVersionResult.isSuccess) { - operatorMajorVersion = operatorVersionResult.operatorVersion.split('.')[0]; - } - - dialogHelper.closeBusyDialog(); - - let domainStatus = applicationStatusResult.domainStatus; - if (typeof domainStatus === 'undefined') { - domainStatus = {}; - } - const results = this.buildDomainStatus(domainStatus, operatorMajorVersion); - results['domainStatus'] = domainStatus; - const options = { - clusterName: clusterToCheck, - domainStatus: results.domainStatus, - domainOverallStatus: results.domainOverallStatus, - applicationName: this.project.vzApplication.applicationName.value, - domainName: this.project.k8sDomain.uid.value - }; - dialogHelper.openDialog('vz-application-status-dialog', options); - - return Promise.resolve(true); - } catch (err) { - dialogHelper.closeBusyDialog(); - throw err; - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validationObject = validationHelper.createValidatableObject(flowNameKey); - validationObject.addField('vz-application-design-name-label', - this.project.vzApplication.applicationName.validate(true)); - validationObject.addField('vz-application-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true)); - if (this.project.vzApplication.useMultiClusterApplication.value) { - validationObject.addField('vz-application-design-cluster-names-label', - validationHelper.validateRequiredField(this.project.vzApplication.placementClusters.value)); - } - - const componentFormConfig = validationObject.getDefaultConfigObject(); - componentFormConfig.formName = 'vz-component-design-form-name'; - validationObject.addField('domain-design-uid-label', - this.project.k8sDomain.uid.validate(true), componentFormConfig); - - const kubectlFormConfig = validationObject.getDefaultConfigObject(); - kubectlFormConfig.formName = 'kubectl-title'; - validationObject.addField('kubectl-exe-file-path-label', - validationHelper.validateRequiredField(this.project.kubectl.executableFilePath.value), kubectlFormConfig); - - if (this.project.vzApplication.useMultiClusterApplication.value) { - const targetClusters = this.project.vzApplication.placementClusters.value; - if (targetClusters.length > 0) { - for (const targetCluster of targetClusters) { - if (targetCluster !== 'local') { - this._validateVerrazzanoManagedClusterConnectivityEntry(validationObject, kubectlFormConfig, targetCluster); - } - } - } - } - - return validationObject; - } - - _getTargetClusters() { - if (this.project.vzApplication.useMultiClusterApplication.value) { - return this.project.vzApplication.placementClusters.value; - } else { - return ['local']; - } - } - - _getTargetCluster(clusterName) { - if (clusterName !== 'local') { - return this.project.kubectl.vzManagedClusters.observable().find(managedCluster => - managedCluster.name === clusterName); - } - } - - _validateVerrazzanoManagedClusterConnectivityEntry(validationObject, kubectlFormConfig, targetManagedClusterName) { - let found = false; - for (const managedClusterData of this.project.kubectl.vzManagedClusters.observable()) { - if (targetManagedClusterName === managedClusterData.name) { - found = true; - break; - } - } - - if (!found) { - const errorMessage = i18n.t('vz-application-status-checker-vz-managed-cluster-not-found-error', - { clusterName: targetManagedClusterName}); - validationObject.addField('kubectl-vz-managed-cluster-name-heading', - [errorMessage], kubectlFormConfig); - } - } - } - - return new VerrazzanoApplicationStatusChecker(); -}); diff --git a/webui/src/js/utils/vz-application-undeployer.js b/webui/src/js/utils/vz-application-undeployer.js deleted file mode 100644 index 4a4c9673b..000000000 --- a/webui/src/js/utils/vz-application-undeployer.js +++ /dev/null @@ -1,156 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper) { - class VzApplicationUndeployer extends VzActionsBase { - constructor() { - super(); - } - - async startUndeployApplication() { - await this.executeAction(this.callUndeployApplication); - } - - async callUndeployApplication(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-application-undeployer-aborted-error-title'); - const errPrefix = 'vz-application-undeployer'; - const validatableObject = this.getValidatableObject('flow-verrazzano-undeploy-application-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - // Prompt user to remove just the domain or the entire domain namespace. - const applicationName = this.project.vzApplication.applicationName.value; - const applicationNamespace = this.project.k8sDomain.kubernetesNamespace.value; - const isMultiClusterApplication = this.project.vzApplication.useMultiClusterApplication.value; - - const promptTitle = i18n.t('vz-application-undeployer-remove-namespace-prompt-title'); - const promptQuestion = i18n.t('vz-application-undeployer-remove-namespace-prompt-question', - { name: applicationName, namespace: applicationNamespace }); - const promptDetails = i18n.t('vz-application-undeployer-remove-namespace-prompt-details', { namespace: applicationNamespace }); - const removeNamespacePromptResult = await this.removeNamespacePrompt(promptTitle, promptQuestion, promptDetails); - if (removeNamespacePromptResult === 'cancel') { - return Promise.resolve(false); - } - const removeNamespace = removeNamespacePromptResult === 'yes'; - - const totalSteps = 5.0; - const kubectlExe = this.getKubectlExe(); - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // Apply the Kubernetes context, if needed. - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - /// Make sure Verrazzano is installed - busyDialogMessage = i18n.t('flow-checking-vz-already-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (!result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-application-undeployer-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - if (removeNamespace) { - busyDialogMessage = i18n.t('vz-application-undeployer-undeploy-namespace-in-progress', { namespace: applicationNamespace }); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - - const result = await this.deleteKubernetesObjectIfExists(kubectlExe, kubectlOptions, - null, 'namespace', applicationNamespace, errTitle, errPrefix); - dialogHelper.closeBusyDialog(); - if (!result) { - return Promise.resolve(false); - } - const title = i18n.t('vz-application-undeployer-undeploy-complete-title'); - const message = i18n.t('vz-application-undeployer-undeploy-namespace-complete-message', - { name: applicationName, namespace: applicationNamespace }); - await window.api.ipc.invoke('show-info-message', title, message); - } else { - busyDialogMessage = i18n.t('vz-application-undeployer-undeploy-application-in-progress', { name: applicationName }); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - - const result = await window.api.ipc.invoke('undeploy-verrazzano-application', kubectlExe, - isMultiClusterApplication, applicationName, applicationNamespace, kubectlOptions); - dialogHelper.closeBusyDialog(); - if (!result.isSuccess) { - const title = i18n.t('vz-application-undeployer-undeploy-failed-title'); - const errMessage = i18n.t('vz-application-undeployer-undeploy-failed-error-message', - { name: applicationName, namespace: applicationNamespace, error: result.reason }); - await window.api.ipc.invoke('show-error-message', title, errMessage); - return Promise.resolve(false); - } - const title = i18n.t('vz-application-undeployer-undeploy-complete-title'); - const message = i18n.t('vz-application-undeployer-undeploy-complete-message', - { name: applicationName, namespace: applicationNamespace }); - await window.api.ipc.invoke('show-info-message', title, message); - } - return Promise.resolve(true); - } catch (err) { - dialogHelper.closeBusyDialog(); - throw err; - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validationObject = this.getValidationObject(flowNameKey); - const vzApplicationFormConfig = validationObject.getDefaultConfigObject(); - vzApplicationFormConfig.formName = 'vz-application-design-form-name'; - - validationObject.addField('vz-application-design-name-label', - this.project.vzApplication.applicationName.validate(true), vzApplicationFormConfig); - validationObject.addField('vz-application-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true), vzApplicationFormConfig); - - return validationObject; - } - } - return new VzApplicationUndeployer(); -}); diff --git a/webui/src/js/utils/vz-component-configmap-generator.js b/webui/src/js/utils/vz-component-configmap-generator.js deleted file mode 100644 index cafead6e8..000000000 --- a/webui/src/js/utils/vz-component-configmap-generator.js +++ /dev/null @@ -1,66 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/k8s-domain-configmap-generator', 'utils/vz-helper', 'js-yaml'], - function(project, K8sDomainConfigMapGenerator, VerrazzanoHelper, jsYaml) { - class VerrazzanoComponentConfigMapGenerator { - constructor() { - this.project = project; - this.k8sDomainConfigMapGenerator = new K8sDomainConfigMapGenerator(); - this.configMapComponentName = ''; - this.configMapComponentNamespace = ''; - } - - shouldCreateConfigMap() { - return this.k8sDomainConfigMapGenerator.shouldCreateConfigMap(); - } - - generate() { - const k8sDomainConfigMap = this.k8sDomainConfigMapGenerator.generate(false); - - if (!k8sDomainConfigMap) { - return []; - } - - this.configMapComponentName = k8sDomainConfigMap.metadata ? k8sDomainConfigMap.metadata.name : ''; - this.configMapComponentNamespace = k8sDomainConfigMap.metadata ? k8sDomainConfigMap.metadata.namespace : ''; - const component = { - apiVersion: this._getApiVersion(), - kind: 'Component', - metadata: { - name: this.configMapComponentName, - namespace: this.configMapComponentNamespace, - }, - spec: { - workload: k8sDomainConfigMap, - } - }; - return jsYaml.dump(component).split('\n'); - } - - getConfigMapComponentName() { - return this.configMapComponentName; - } - - getConfigMapComponentNamespace() { - return this.configMapComponentNamespace; - } - - _getApiVersion() { - let result = ''; - - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - const vzHelper = new VerrazzanoHelper(vzVersion); - result = vzHelper.getComponentApiVersion(); - } - return result; - } - } - return VerrazzanoComponentConfigMapGenerator; - } -); diff --git a/webui/src/js/utils/vz-component-deployer.js b/webui/src/js/utils/vz-component-deployer.js deleted file mode 100644 index 5bce9df5c..000000000 --- a/webui/src/js/utils/vz-component-deployer.js +++ /dev/null @@ -1,422 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/validation-helper', 'utils/vz-component-resource-generator', - 'utils/vz-component-configmap-generator', 'utils/aux-image-helper', 'utils/wkt-logger'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, validationHelper, - VerrazzanoComponentResourceGenerator, VerrazzanoComponentConfigMapGenerator, auxImageHelper, wktLogger) { - class VzComponentDeployer extends VzActionsBase { - constructor() { - super(); - } - - async startDeployComponent() { - await this.executeAction(this.callDeployComponent); - } - - async callDeployComponent(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-component-deployer-aborted-error-title'); - const errPrefix = 'vz-component-deployer'; - const validatableObject = this.getValidatableObject('flow-verrazzano-deploy-component-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - const totalSteps = 12.0; - const kubectlExe = this.getKubectlExe(); - const domainUid = this.project.k8sDomain.uid.value; - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // Apply the Kubernetes context, if needed. - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - /// Make sure Verrazzano is installed - busyDialogMessage = i18n.t('flow-checking-vz-already-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (!result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-component-deployer-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - // Create the namespace - const componentNamespace = this.project.k8sDomain.kubernetesNamespace.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-ns-in-progress', {componentNamespace}); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - if (! await this.createKubernetesNamespace(kubectlExe, kubectlOptions, componentNamespace, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - // Label the namespace - busyDialogMessage = i18n.t('vz-component-deployer-label-ns-in-progress', {componentNamespace}); - dialogHelper.updateBusyDialog(busyDialogMessage, 5/totalSteps); - const labels = [ 'verrazzano-managed=true', 'istio-injection=enabled' ]; - if (! await this.labelKubernetesNamespace(kubectlExe, kubectlOptions, componentNamespace, labels, errTitle, errPrefix)) { - return Promise.resolve(false); - } - - // Create the primary image pull secret, if needed. - if (this.project.k8sDomain.imageRegistryPullRequireAuthentication.value && - !this.project.k8sDomain.imageRegistryUseExistingPullSecret.value) { - const secret = this.project.k8sDomain.imageRegistryPullSecretName.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-image-pull-secret-in-progress', - {namespace: componentNamespace, secretName: secret}); - dialogHelper.updateBusyDialog(busyDialogMessage, 6/totalSteps); - const secretData = { - server: this.project.image.internal.imageRegistryAddress.value, - username: this.project.k8sDomain.imageRegistryPullUser.value, - email: this.project.k8sDomain.imageRegistryPullEmail.value, - password: this.project.k8sDomain.imageRegistryPullPassword.value - }; - const createResult = await this.createPullSecret(kubectlExe, kubectlOptions, componentNamespace, secret, - secretData, errTitle, errPrefix); - if (!createResult) { - return Promise.resolve(false); - } - } - - // Create the auxiliary image pull secret, if needed. - if (this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.value && - !this.project.k8sDomain.auxImageRegistryUseExistingPullSecret.value) { - const secret = this.project.k8sDomain.auxImageRegistryPullSecretName.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-image-pull-secret-in-progress', - {namespace: componentNamespace, secretName: secret}); - dialogHelper.updateBusyDialog(busyDialogMessage, 7/totalSteps); - const secretData = { - server: this.project.image.internal.auxImageRegistryAddress.value, - username: this.project.k8sDomain.auxImageRegistryPullUser.value, - email: this.project.k8sDomain.auxImageRegistryPullEmail.value, - password: this.project.k8sDomain.auxImageRegistryPullPassword.value - }; - const createResult = await this.createPullSecret(kubectlExe, kubectlOptions, componentNamespace, secret, - secretData, errTitle, errPrefix); - if (!createResult) { - return Promise.resolve(false); - } - } - - // Create the MII runtime encryption secret, if needed. - if (this.project.settings.targetDomainLocation.value === 'mii') { - const secret = this.project.k8sDomain.runtimeSecretName.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-runtime-secret-in-progress', - {namespace: componentNamespace, secretName: secret}); - dialogHelper.updateBusyDialog(busyDialogMessage, 8/totalSteps); - const secretData = { - password: this.project.k8sDomain.runtimeSecretValue.value - }; - const createResult = await this.createGenericSecret(kubectlExe, kubectlOptions, componentNamespace, secret, - secretData, errTitle, 'vz-component-deployer-create-runtime-secret-error-message'); - if (!createResult) { - return Promise.resolve(false); - } - } else if (auxImageHelper.supportsDomainCreationImages() && auxImageHelper.domainUsesJRF()) { - const secret = this.project.k8sDomain.walletPasswordSecretName.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-wallet-password-secret-in-progress', - {namespace: componentNamespace, secretName: secret}); - dialogHelper.updateBusyDialog(busyDialogMessage, 9 / totalSteps); - const secretData = { - walletPassword: this.project.k8sDomain.walletPassword.value - }; - const createResult = await this.createGenericSecret(kubectlExe, kubectlOptions, componentNamespace, secret, - secretData, errTitle, 'vz-component-deployer-create-wallet-password-secret-error-message'); - if (!createResult) { - return Promise.resolve(false); - } - } - - // Create the WebLogic Credential secret - const wlSecretName = this.project.k8sDomain.credentialsSecretName.value; - busyDialogMessage = i18n.t('vz-component-deployer-create-wl-secret-in-progress', - {secretName: wlSecretName, domainName: domainUid, namespace: componentNamespace}); - dialogHelper.updateBusyDialog(busyDialogMessage, 9/totalSteps); - const wlSecretData = { - username: this.project.k8sDomain.credentialsUserName.value, - password: this.project.k8sDomain.credentialsPassword.value - }; - const wlsSecretResult = await this.createGenericSecret(kubectlExe, kubectlOptions, componentNamespace, wlSecretName, - wlSecretData, errTitle, 'vz-component-deployer-create-wl-secret-failed-error-message'); - if (!wlsSecretResult) { - return Promise.resolve(false); - } - - // Create Secrets, if needed - busyDialogMessage = i18n.t('vz-component-deployer-create-secrets-in-progress', - {domainName: domainUid, namespace: componentNamespace}); - dialogHelper.updateBusyDialog(busyDialogMessage, 10 / totalSteps); - if (auxImageHelper.projectHasModel() || auxImageHelper.projectUsingExternalImageContainingModel()) { - const secrets = this.project.k8sDomain.secrets.value; - if (Array.isArray(secrets) && secrets.length > 0) { - for (const secret of secrets) { - const secretName = secret.name; - if (Array.isArray(secret.keys) && secret.keys.length > 0) { - const secretData = {}; - for (const secretKey of secret.keys) { - secretData[secretKey.key] = secretKey.value; - } - wktLogger.debug('Creating secret %s', secretName); - - const domainSecretResult = await this.createGenericSecret(kubectlExe, kubectlOptions, componentNamespace, - secretName, secretData, errTitle, 'vz-component-deployer-create-secret-failed-error-message'); - if (!domainSecretResult) { - return Promise.resolve(false); - } - } else { - wktLogger.warning('Secret %s did not contain any data...skipping', secretName); - } - } - } - } - - // Create the components needed for deployment - const vzInstalledVersion = this.project.vzInstall.actualInstalledVersion.value || undefined; - const vzResourceGenerator = new VerrazzanoComponentResourceGenerator(vzInstalledVersion); - const vzConfigMapGenerator = new VerrazzanoComponentConfigMapGenerator(); - const components = [ vzResourceGenerator.generate().join('\n') ]; - if (vzConfigMapGenerator.shouldCreateConfigMap()) { - wktLogger.debug('Adding ConfigMap for component deployment'); - components.push(vzConfigMapGenerator.generate().join('\n')); - } - - // Deploy the components - busyDialogMessage = i18n.t('vz-component-deployer-deploy-component-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 11/totalSteps); - const deployResult = await window.api.ipc.invoke('deploy-verrazzano-components', kubectlExe, components, kubectlOptions); - dialogHelper.closeBusyDialog(); - const message = this.getResponseMessage(deployResult, components, vzConfigMapGenerator); - if (deployResult.isSuccess) { - const title = i18n.t('vz-component-deployer-deploy-success-title'); - await window.api.ipc.invoke('show-info-message', title, message); - return Promise.resolve(true); - } else { - const errTitle = i18n.t('vz-component-deployer-deploy-failed-title'); - await window.api.ipc.invoke('show-error-message', errTitle, message); - return Promise.resolve(false); - } - } catch (err) { - dialogHelper.closeBusyDialog(); - throw err; - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validationObject = this.getValidationObject(flowNameKey); - const vzComponentFormConfig = validationObject.getDefaultConfigObject(); - vzComponentFormConfig.formName = 'vz-component-design-form-name'; - - validationObject.addField('vz-component-design-name-label', - this.project.vzComponent.componentName.validate(true), vzComponentFormConfig); - validationObject.addField('vz-component-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true), vzComponentFormConfig); - validationObject.addField('vz-component-design-installed-version-label', - validationHelper.validateRequiredField(this.project.vzInstall.actualInstalledVersion.value), vzComponentFormConfig); - validationObject.addField('domain-design-uid-label', this.project.k8sDomain.uid.validate(true), vzComponentFormConfig); - - validationObject.addField('domain-design-image-tag-label', - this.project.image.imageTag.validate(true), vzComponentFormConfig); - - if (this.project.k8sDomain.imageRegistryPullRequireAuthentication.value) { - validationObject.addField('domain-design-image-registry-pull-secret-name-label', - this.project.k8sDomain.imageRegistryPullSecretName.validate(true), vzComponentFormConfig); - - if (!this.project.k8sDomain.imageRegistryUseExistingPullSecret.value) { - validationObject.addField('domain-design-image-registry-address-label', - validationHelper.validateHostName(this.project.image.internal.imageRegistryAddress.value, false), - vzComponentFormConfig); - validationObject.addField('domain-design-image-registry-pull-username-label', - validationHelper.validateRequiredField(this.project.k8sDomain.imageRegistryPullUser.value), - vzComponentFormConfig); - validationObject.addField('domain-design-image-registry-pull-email-label', - this.project.k8sDomain.imageRegistryPullEmail.validate(true), - vzComponentFormConfig); - validationObject.addField('domain-design-image-registry-pull-password-label', - validationHelper.validateRequiredField(this.project.k8sDomain.imageRegistryPullPassword.value), - vzComponentFormConfig); - } - } - - if (this.project.settings.targetDomainLocation.value === 'mii' && this.project.image.useAuxImage.value) { - validationObject.addField('domain-design-aux-image-tag-label', - this.project.image.auxImageTag.validate(true), vzComponentFormConfig); - - if (this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.value) { - validationObject.addField('domain-design-aux-image-registry-pull-secret-name-label', - this.project.k8sDomain.auxImageRegistryPullSecretName.validate(true), vzComponentFormConfig); - - if (!this.project.k8sDomain.auxImageRegistryUseExistingPullSecret.value) { - validationObject.addField('domain-design-aux-image-registry-address-label', - validationHelper.validateHostName(this.project.image.internal.auxImageRegistryAddress.value, false), - vzComponentFormConfig); - validationObject.addField('domain-design-aux-image-registry-pull-username-label', - validationHelper.validateRequiredField(this.project.k8sDomain.auxImageRegistryPullUser.value), - vzComponentFormConfig); - validationObject.addField('domain-design-aux-image-registry-pull-email-label', - this.project.k8sDomain.auxImageRegistryPullEmail.validate(true), - vzComponentFormConfig); - validationObject.addField('domain-design-aux-image-registry-pull-password-label', - validationHelper.validateRequiredField(this.project.k8sDomain.auxImageRegistryPullPassword.value), - vzComponentFormConfig); - } - } - } else if (auxImageHelper.supportsDomainCreationImages() && this.project.image.useAuxImage.value) { - validationObject.addField('domain-design-domain-creation-image-tag-label', - this.project.image.auxImageTag.validate(true), vzComponentFormConfig); - - if (this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.value) { - validationObject.addField('domain-design-domain-creation-image-registry-pull-secret-name-label', - this.project.k8sDomain.auxImageRegistryPullSecretName.validate(true), vzComponentFormConfig); - - if (!this.project.k8sDomain.auxImageRegistryUseExistingPullSecret.value) { - validationObject.addField('domain-design-domain-creation-image-registry-address-label', - validationHelper.validateHostName(this.project.image.internal.auxImageRegistryAddress.value, false), - vzComponentFormConfig); - validationObject.addField('domain-design-domain-creation-image-registry-pull-username-label', - validationHelper.validateRequiredField(this.project.k8sDomain.auxImageRegistryPullUser.value), - vzComponentFormConfig); - validationObject.addField('domain-design-domain-creation-image-registry-pull-email-label', - this.project.k8sDomain.auxImageRegistryPullEmail.validate(true), - vzComponentFormConfig); - validationObject.addField('domain-design-domain-creation-image-registry-pull-password-label', - validationHelper.validateRequiredField(this.project.k8sDomain.auxImageRegistryPullPassword.value), - vzComponentFormConfig); - - if (this.project.k8sDomain.createPvc.value) { - if (this.project.k8sDomain.createPv.value) { - const pvType = this.project.k8sDomain.pvType.value; - if (pvType === 'nfs') { - validationObject.addField('domain-design-domain-creation-image-pv-nfs-server-label', - validationHelper.validateRequiredField(this.project.k8sDomain.pvNfsServer.value), - vzComponentFormConfig); - validationObject.addField('domain-design-domain-creation-image-pv-nfs-path-label', - validationHelper.validateRequiredField(this.project.k8sDomain.pvPath.value), - vzComponentFormConfig); - } else if (pvType === 'hostPath') { - validationObject.addField('domain-design-domain-creation-image-pv-host-path-label', - validationHelper.validateRequiredField(this.project.k8sDomain.pvPath.value), - vzComponentFormConfig); - } - } - } - } - } - } - - if (this.project.settings.targetDomainLocation.value === 'mii') { - validationObject.addField('domain-design-encryption-secret-label', - this.project.k8sDomain.runtimeSecretName.validate(true), vzComponentFormConfig); - validationObject.addField('domain-design-encryption-value-label', - validationHelper.validateRequiredField(this.project.k8sDomain.runtimeSecretValue.value), vzComponentFormConfig); - } else if (auxImageHelper.supportsDomainCreationImages() && auxImageHelper.domainUsesJRF()) { - validationObject.addField('domain-design-domain-creation-image-wallet-password-label', - validationHelper.validateRequiredField(this.project.k8sDomain.walletPassword.value), - vzComponentFormConfig); - } - - validationObject.addField('domain-design-wls-credential-label', - this.project.k8sDomain.credentialsSecretName.validate(true), vzComponentFormConfig); - validationObject.addField('domain-design-wls-credential-username-label', - validationHelper.validateRequiredField(this.project.k8sDomain.credentialsUserName.value), vzComponentFormConfig); - validationObject.addField('domain-design-wls-credential-password-label', - validationHelper.validateRequiredField(this.project.k8sDomain.credentialsPassword.value), vzComponentFormConfig); - - if (Array.isArray(this.project.k8sDomain.secrets.value) && this.project.k8sDomain.secrets.value.length > 0) { - for (const secret of this.project.k8sDomain.secrets.value) { - const secretConfig = validationObject.getDefaultConfigObject(); - secretConfig.formName = 'vz-component-design-form-name'; - secretConfig.fieldNameIsKey = false; - const nameFieldName = i18n.t('domain-design-secret-name-field-name'); - validationObject.addField(nameFieldName, validationHelper.validateK8sName(secret.name, true), secretConfig); - - for (const field of secret.keys) { - const fieldNameName = i18n.t('domain-design-secret-key-name', { secretName: secret.name }); - const fieldValueName = i18n.t('domain-design-secret-value-name', { secretName: secret.name, fieldName: field.key }); - - validationObject.addField(fieldNameName, validationHelper.validateRequiredField(field.key), secretConfig); - validationObject.addField(fieldValueName, validationHelper.validateRequiredField(field.value), secretConfig); - } - } - } - - if (this.project.settings.targetDomainLocation.value === 'mii' || - (auxImageHelper.supportsDomainCreationImages() && this.project.image.useAuxImage.value)) { - validationObject.addField('domain-design-configmap-label', - this.project.k8sDomain.modelConfigMapName.validate(true), vzComponentFormConfig); - } - - return validationObject; - } - - getResponseMessage(deployResult, components, vzConfigMapGenerator) { - let message; - const resourceName = this.project.vzComponent.componentName.value; - const namespace = this.project.k8sDomain.kubernetesNamespace.value; - if (deployResult.isSuccess) { - if (components.length === 2) { - const configMapName = vzConfigMapGenerator.getConfigMapComponentName(); - message = i18n.t('vz-component-deployer-deploy-success-message', - { resourceName, configMapName, namespace }); - } else { - message = i18n.t('vz-component-deployer-deploy-resource-only-success-message', { resourceName, namespace }); - } - } else { - const error = deployResult.reason; - if (components.length === 2) { - const configMapName = vzConfigMapGenerator.getConfigMapComponentName(); - message = i18n.t('vz-component-deployer-deploy-failed-message', - { resourceName, configMapName, namespace, error }); - } else { - message = i18n.t('vz-component-deployer-deploy-resource-only-success-message', { resourceName, namespace, error }); - } - } - return message; - } - } - return new VzComponentDeployer(); -}); diff --git a/webui/src/js/utils/vz-component-resource-generator.js b/webui/src/js/utils/vz-component-resource-generator.js deleted file mode 100644 index 5dfecf658..000000000 --- a/webui/src/js/utils/vz-component-resource-generator.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/vz-component-wko-v8-resource-generator', - 'utils/vz-component-wko-v9-resource-generator', 'utils/wkt-logger'], -function(project, VerrazzanoComponentWkoV8ResourceGenerator, VerrazzanoComponentWkoV9ResourceGenerator, wktLogger) { - - const WKO_V9_SWITCHOVER_VERSION = '1.5.0'; - const DEFAULT_VERRAZZANO_VERSION = WKO_V9_SWITCHOVER_VERSION; - - class VerrazzanoComponentResourceGenerator { - constructor(verrazzanoVersion = DEFAULT_VERRAZZANO_VERSION) { - this.project = project; - this.verrazzanoComponentResourceGenerator = _getVerrazzanoComponentResourceGenerator(verrazzanoVersion); - } - - generate(generateYaml = true) { - return this.verrazzanoComponentResourceGenerator.generate(generateYaml); - } - } - - function _getVerrazzanoComponentResourceGenerator(verrazzanoVersion) { - let generator; - if (window.api.utils.compareVersions(verrazzanoVersion, WKO_V9_SWITCHOVER_VERSION) < 0) { - wktLogger.debug('Using Verrazzano version %s to create Verrazzano component WKO V8 resource generator', verrazzanoVersion); - generator = new VerrazzanoComponentWkoV8ResourceGenerator(); - } else { - wktLogger.debug('Using Verrazzano version %s to create Verrazzano component WKO V9 resource generator', verrazzanoVersion); - generator = new VerrazzanoComponentWkoV9ResourceGenerator(); - } - return generator; - } - - return VerrazzanoComponentResourceGenerator; -}); diff --git a/webui/src/js/utils/vz-component-script-generator.js b/webui/src/js/utils/vz-component-script-generator.js deleted file mode 100644 index 53fa33445..000000000 --- a/webui/src/js/utils/vz-component-script-generator.js +++ /dev/null @@ -1,240 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/script-generator-base', 'utils/aux-image-helper', 'utils/wkt-logger'], - function(project, ScriptGeneratorBase, auxImageHelper, wktLogger) { - const scriptDescription = [ - 'This script deploys the Verrazzano components for this WebLogic domain into', - 'Kubernetes. It depends on having the Kubernetes client configuration', - 'correctly configured to authenticate to the cluster with sufficient', - 'permissions to run the commands.' - ]; - - class VerrazzanoComponentScriptGenerator extends ScriptGeneratorBase { - constructor(scriptType) { - super(scriptType); - } - - generate() { - const httpsProxyUrl = this.project.getHttpsProxyUrl(); - const bypassProxyHosts = this.project.getBypassProxyHosts(); - - this.adapter.addScriptHeader(scriptDescription); - this.adapter.addVariableStartBanner(); - - this.adapter.addKubectlVariablesBlock(this.project.kubectl.executableFilePath.value, httpsProxyUrl, - bypassProxyHosts, this.project.kubectl.kubeConfig.value, this.project.kubectl.kubeConfigContextToUse.value); - - this.adapter.addVariableDefinition('VERRAZZANO_COMPONENT_NAMESPACE', this.project.k8sDomain.kubernetesNamespace.value); - this.adapter.addEmptyLine(); - - this.adapter.addVariableDefinition('VERRAZZANO_INSTALL_NAME', this.project.vzInstall.installationName.value); - this.adapter.addVariableDefinition('VERRAZZANO_COMPONENT_NAME', this.project.vzComponent.componentName.value); - this.adapter.addEmptyLine(); - - this.adapter.addVariableDefinition('PULL_REQUIRES_AUTHENTICATION', - this.project.k8sDomain.imageRegistryPullRequireAuthentication.value); - this.adapter.addVariableDefinition('USE_EXISTING_PULL_SECRET', - this.project.k8sDomain.imageRegistryUseExistingPullSecret.value); - this.adapter.addVariableDefinition('PULL_SECRET_NAME', this.project.k8sDomain.imageRegistryPullSecretName.value); - this.adapter.addVariableDefinition('PULL_SECRET_HOST', this.project.image.internal.imageRegistryAddress.value); - this.adapter.addVariableDefinition('PULL_SECRET_EMAIL', this.project.k8sDomain.imageRegistryPullEmail.value); - this.adapter.addVariableDefinition('PULL_SECRET_USER', this.credentialMask); - this.adapter.addVariableDefinition('PULL_SECRET_PASS', this.credentialMask); - this.adapter.addEmptyLine(); - - if (this.usingAuxImage() || this.usingDomainCreationImage()) { - this.adapter.addVariableDefinition('AUX_PULL_REQUIRES_AUTHENTICATION', - this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.value); - this.adapter.addVariableDefinition('AUX_USE_EXISTING_PULL_SECRET', - this.project.k8sDomain.auxImageRegistryUseExistingPullSecret.value); - this.adapter.addVariableDefinition('AUX_PULL_SECRET_NAME', this.project.k8sDomain.auxImageRegistryPullSecretName.value); - this.adapter.addVariableDefinition('AUX_PULL_SECRET_HOST', this.project.image.internal.auxImageRegistryAddress.value); - this.adapter.addVariableDefinition('AUX_PULL_SECRET_EMAIL', this.project.k8sDomain.auxImageRegistryPullEmail.value); - this.adapter.addVariableDefinition('AUX_PULL_SECRET_USER', this.credentialMask); - this.adapter.addVariableDefinition('AUX_PULL_SECRET_PASS', this.credentialMask); - this.adapter.addEmptyLine(); - } - - if (this.isModelInImage()) { - this.adapter.addVariableDefinition('RUNTIME_SECRET_NAME', this.project.k8sDomain.runtimeSecretName.value); - this.adapter.addVariableDefinition('RUNTIME_SECRET_PASS', this.project.k8sDomain.runtimeSecretValue.value); - this.adapter.addEmptyLine(); - } else if (auxImageHelper.supportsDomainCreationImages() && auxImageHelper.domainUsesJRF()) { - this.adapter.addVariableDefinition('OPSS_WALLET_PASSWORD_SECRET_NAME', - this.project.k8sDomain.walletPasswordSecretName.value); - this.adapter.addVariableDefinition('OPSS_WALLET_PASS', this.credentialMask); - this.adapter.addEmptyLine(); - } - - this.adapter.addVariableDefinition('DOMAIN_SECRET_NAME', this.project.k8sDomain.credentialsSecretName.value); - this.adapter.addVariableDefinition('DOMAIN_SECRET_USER', this.credentialMask); - this.adapter.addVariableDefinition('DOMAIN_SECRET_PASS', this.credentialMask); - this.adapter.addEmptyLine(); - - if (auxImageHelper.projectHasModel() || auxImageHelper.projectUsingExternalImageContainingModel()) { - if (Array.isArray(this.project.k8sDomain.secrets.value)) { - for (const secretEntry of this.project.k8sDomain.secrets.value) { - // For cases where the model is external and the user is constructing the Secrets, - // we have to handle the case where the secret has no keys. If there are no keys, - // we will skip creating the secret altogether. - // - const secretName = secretEntry.name; - if (Array.isArray(secretEntry.keys) && secretEntry.keys.length > 0) { - this.adapter.addVariableDefinition(this.getSecretVariableName(name, 'NAME'), secretName); - for (const secretFieldEntry of secretEntry.keys) { - const fieldName = secretFieldEntry.key; - const fieldValue = this.credentialMask; - this.adapter.addVariableDefinition(this.getSecretVariableName(name, fieldName), fieldValue); - } - this.adapter.addEmptyLine(); - } else { - wktLogger.warn('Secret %s found without any fields...skipping', secretName); - } - } - } - } - - this.adapter.addVariableDefinition('VERRAZZANO_CONFIG_MAP_COMPONENT_NAME', this.project.k8sDomain.modelConfigMapName.value); - this.adapter.addVariableDefinition('VERRAZZANO_RESOURCE_YAML', this.fillInFileNameMask); - this.adapter.addVariableDefinition('VERRAZZANO_CONFIGMAP_RESOURCE_YAML', this.fillInFileNameMask); - this.adapter.addEmptyLine(); - - this.adapter.addVariableEndBanner(); - - this.adapter.addKubectlExportAndUseContextBlock(); - const kubectlExe = this.adapter.getVariableReference('KUBECTL_EXE'); - const vzInstallName = this.adapter.getVariableReference('VERRAZZANO_INSTALL_NAME'); - const componentNamespace = this.adapter.getVariableReference('VERRAZZANO_COMPONENT_NAMESPACE'); - - let comment = [ 'Make sure that Verrazzano is already installed' ]; - const notInstalledMessage = 'Verrazzano is not installed'; - const alreadyInstalledMessage = 'Verrazzano is already installed'; - this.adapter.addVerrazzanoInstalledCheckBlock(comment, kubectlExe, vzInstallName, - notInstalledMessage, alreadyInstalledMessage, true, false); - - comment = [ 'Create image pull secret, if needed.' ]; - const pullRequiresAuthentication = this.adapter.getVariableReference('PULL_REQUIRES_AUTHENTICATION'); - const useExistingPullSecret = this.adapter.getVariableReference('USE_EXISTING_PULL_SECRET'); - const pullSecretName = this.adapter.getVariableReference('PULL_SECRET_NAME'); - const pullSecretData = { - host: this.adapter.getVariableReference('PULL_SECRET_HOST'), - username: this.adapter.getVariableReference('PULL_SECRET_USER'), - password: this.adapter.getVariableReference('PULL_SECRET_PASS'), - email: this.adapter.getVariableReference('PULL_SECRET_EMAIL') - }; - let createErrorMessage = `Failed to create pull secret ${pullSecretName} in namespace ${componentNamespace}`; - let replaceMessage = `Replacing existing pull secret ${pullSecretName} in namespace ${componentNamespace}`; - let deleteErrorMessage = `Failed to delete pull secret ${pullSecretName} in namespace ${componentNamespace}`; - this.adapter.addCreatePullSecretBlock(comment, kubectlExe, pullSecretName, componentNamespace, pullSecretData, - createErrorMessage, deleteErrorMessage, replaceMessage, pullRequiresAuthentication, useExistingPullSecret); - - if (this.usingAuxImage() || this.usingDomainCreationImage()) { - comment = this.usingAuxImage() ? [ 'Create auxiliary image pull secret, if needed.' ] - : [ 'Create domain creation image pull secret, if needed.' ]; - const auxPullRequiresAuthentication = this.adapter.getVariableReference('AUX_PULL_REQUIRES_AUTHENTICATION'); - const auxUseExistingPullSecret = this.adapter.getVariableReference('AUX_USE_EXISTING_PULL_SECRET'); - const auxPullSecretName = this.adapter.getVariableReference('AUX_PULL_SECRET_NAME'); - const auxPullSecretData = { - host: this.adapter.getVariableReference('AUX_PULL_SECRET_HOST'), - username: this.adapter.getVariableReference('AUX_PULL_SECRET_USER'), - password: this.adapter.getVariableReference('AUX_PULL_SECRET_PASS'), - email: this.adapter.getVariableReference('AUX_PULL_SECRET_EMAIL') - }; - createErrorMessage = `Failed to create pull secret ${auxPullSecretName} in namespace ${componentNamespace}`; - replaceMessage = `Replacing existing pull secret ${auxPullSecretName} in namespace ${componentNamespace}`; - deleteErrorMessage = `Failed to delete pull secret ${auxPullSecretName} in namespace ${componentNamespace}`; - this.adapter.addCreatePullSecretBlock(comment, kubectlExe, auxPullSecretName, componentNamespace, auxPullSecretData, - createErrorMessage, deleteErrorMessage, replaceMessage, auxPullRequiresAuthentication, auxUseExistingPullSecret); - } - - if (this.isModelInImage()) { - comment = ['Create runtime encryption secret.']; - const runtimeSecretName = this.adapter.getVariableReference('RUNTIME_SECRET_NAME'); - const runtimeSecretData = { - password: this.adapter.getVariableReference('RUNTIME_SECRET_PASS') - }; - createErrorMessage = `Failed to create runtime encryption secret ${runtimeSecretName} in namespace ${componentNamespace}`; - replaceMessage = `Replacing existing runtime encryption secret ${runtimeSecretName} in namespace ${componentNamespace}`; - deleteErrorMessage = `Failed to delete runtime encryption secret ${runtimeSecretName} in namespace ${componentNamespace}`; - this.adapter.addCreateRuntimeSecretBlock(comment, kubectlExe, runtimeSecretName, componentNamespace, - runtimeSecretData, createErrorMessage, deleteErrorMessage, replaceMessage); - } else if (auxImageHelper.supportsDomainCreationImages() && auxImageHelper.domainUsesJRF()) { - comment = ['Create OPSS wallet password secret.']; - const opssWalletPasswordSecretName = this.adapter.getVariableReference('OPSS_WALLET_PASSWORD_SECRET_NAME'); - const opssWalletPasswordSecretData = { - walletPassword: this.adapter.getVariableReference('OPSS_WALLET_PASS') - }; - createErrorMessage = `Failed to create OPSS wallet password secret ${opssWalletPasswordSecretName} in namespace ${componentNamespace}`; - replaceMessage = `Replacing existing OPSS wallet password secret ${opssWalletPasswordSecretName} in namespace ${componentNamespace}`; - deleteErrorMessage = `Failed to delete OPSS wallet password secret ${opssWalletPasswordSecretName} in namespace ${componentNamespace}`; - this.adapter.addCreateOpssWalletPasswordSecretBlock(comment, kubectlExe, opssWalletPasswordSecretName, componentNamespace, - opssWalletPasswordSecretData, createErrorMessage, deleteErrorMessage, replaceMessage); - } - - comment = [ 'Create WebLogic domain credentials secret.' ]; - const domainSecretName = this.adapter.getVariableReference('DOMAIN_SECRET_NAME'); - const domainSecretData = { - username: this.adapter.getVariableReference('DOMAIN_SECRET_USER'), - password: this.adapter.getVariableReference('DOMAIN_SECRET_PASS') - }; - createErrorMessage = `Failed to create WebLogic domain credentials secret ${domainSecretName} in namespace ${componentNamespace}`; - replaceMessage = `Replacing existing WebLogic domain credentials secret ${domainSecretName} in namespace ${componentNamespace}`; - deleteErrorMessage = `Failed to delete WebLogic domain credentials secret ${domainSecretName} in namespace ${componentNamespace}`; - this.adapter.addCreateGenericSecretBlock(comment, kubectlExe, domainSecretName, componentNamespace, - domainSecretData, createErrorMessage, deleteErrorMessage, replaceMessage); - - if (auxImageHelper.projectHasModel() || auxImageHelper.projectUsingExternalImageContainingModel()) { - if (Array.isArray(this.project.k8sDomain.secrets.value)) { - for (const secretEntry of this.project.k8sDomain.secrets.value) { - // For cases where the model is external and the user is constructing the Secrets, - // we have to handle the case where the secret has no keys. If there are no keys, - // we will skip creating the secret altogether. - // - const secretName = this.adapter.getVariableReference(this.getSecretVariableName(secretEntry.name, 'NAME')); - const secretData = { }; - if (Array.isArray(secretEntry.keys) && secretEntry.keys.length > 0) { - for (const secretField of secretEntry.keys) { - const fieldName = secretField.key; - secretData[fieldName] = this.adapter.getVariableReference(this.getSecretVariableName(secretEntry.name, fieldName)); - } - createErrorMessage = `Failed to create secret ${secretEntry.name} in namespace ${componentNamespace}`; - replaceMessage = `Replacing existing secret ${secretEntry.name} in namespace ${componentNamespace}`; - deleteErrorMessage = `Failed to delete secret ${secretEntry.name} in namespace ${componentNamespace}`; - comment = [ `Create the ${secretEntry.name} secret` ]; - this.adapter.addCreateGenericSecretBlock(comment, kubectlExe, secretName, componentNamespace, secretData, - createErrorMessage, deleteErrorMessage, replaceMessage); - } else { - this.adapter.addComment(`Skipping secret ${secretEntry.name} due to no fields present...`); - this.adapter.addEmptyLine(); - } - } - } - } - - comment = [ 'Create the ConfigMap component, if needed' ]; - const vzConfigMapResourceYaml = this.adapter.getVariableReference('VERRAZZANO_CONFIGMAP_RESOURCE_YAML'); - const configMapComponentName = this.adapter.getVariableReference('VERRAZZANO_CONFIG_MAP_COMPONENT_NAME'); - let successMessage = `Created ConfigMap component ${configMapComponentName}`; - let errorMessage = `Failed to create the ConfigMap component ${configMapComponentName}`; - this.adapter.addNotEmptyVariableKubectlApplyBlock(comment, configMapComponentName, kubectlExe, - vzConfigMapResourceYaml, errorMessage, successMessage); - - comment = [ 'Create the Verrazzano Component for the WebLogic Domain' ]; - const vzResourceYaml = this.adapter.getVariableReference('VERRAZZANO_RESOURCE_YAML'); - const vzComponentName = this.adapter.getVariableReference('VERRAZZANO_COMPONENT_NAME'); - errorMessage = `Failed to create the Verrazzano component ${vzComponentName}`; - this.adapter.addKubectlApplyBlock(comment, kubectlExe, vzResourceYaml, errorMessage); - - this.adapter.addScriptFooter(); - return this.adapter.getScript(); - } - } - - return VerrazzanoComponentScriptGenerator; - } -); diff --git a/webui/src/js/utils/vz-component-undeployer.js b/webui/src/js/utils/vz-component-undeployer.js deleted file mode 100644 index d385e6a0e..000000000 --- a/webui/src/js/utils/vz-component-undeployer.js +++ /dev/null @@ -1,178 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper) { - class VzComponentUndeployer extends VzActionsBase { - constructor() { - super(); - } - - async startUndeployComponent() { - await this.executeAction(this.callUndeployComponent); - } - - async callUndeployComponent(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-component-undeployer-aborted-error-title'); - const errPrefix = 'vz-component-undeployer'; - const validatableObject = this.getValidatableObject('flow-verrazzano-undeploy-component-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - // Prompt user to remove just the domain or the entire domain namespace. - const componentName = this.project.vzComponent.componentName.value; - const componentNamespace = this.project.k8sDomain.kubernetesNamespace.value; - const configMapName = this.project.settings.targetDomainLocation.value === 'mii' ? - this.project.k8sDomain.modelConfigMapName.value : undefined; - - const promptTitle = i18n.t('vz-component-undeployer-remove-namespace-prompt-title'); - const promptQuestion = this._getPromptQuestion(componentName, componentNamespace, configMapName); - const promptDetails = i18n.t('vz-component-undeployer-remove-namespace-prompt-details', { componentNamespace }); - const removeNamespacePromptResult = await this.removeNamespacePrompt(promptTitle, promptQuestion, promptDetails); - if (removeNamespacePromptResult === 'cancel') { - return Promise.resolve(false); - } - const removeNamespace = removeNamespacePromptResult === 'yes'; - - const totalSteps = 5.0; - const kubectlExe = this.getKubectlExe(); - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // Apply the Kubernetes context, if needed. - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - /// Make sure Verrazzano is installed - busyDialogMessage = i18n.t('flow-checking-vz-already-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (!result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-component-undeployer-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - if (removeNamespace) { - busyDialogMessage = i18n.t('vz-component-undeployer-undeploy-namespace-in-progress', { componentNamespace }); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - - const result = await this.deleteKubernetesObjectIfExists(kubectlExe, kubectlOptions, - null, 'namespace', componentNamespace, errTitle, errPrefix); - dialogHelper.closeBusyDialog(); - if (!result) { - return Promise.resolve(false); - } - const title = i18n.t('vz-component-undeployer-undeploy-complete-title'); - const message = configMapName ? - i18n.t('vz-component-undeployer-undeploy-namespace-2-components-complete-message', - { componentName, configMapComponentName: configMapName, componentNamespace }) : - i18n.t('vz-component-undeployer-undeploy-namespace-1-component-complete-message', { componentName, componentNamespace}); - await window.api.ipc.invoke('show-info-message', title, message); - } else { - const componentNames = configMapName ? [ componentName, configMapName ] : [ componentName ]; - busyDialogMessage = configMapName ? - i18n.t('vz-component-undeployer-undeploy-components-in-progress', { componentName, configMapComponentName: configMapName }) : - i18n.t('vz-component-undeployer-undeploy-component-in-progress', { componentName }); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - - const result = await window.api.ipc.invoke('undeploy-verrazzano-components', kubectlExe, - componentNames, componentNamespace, kubectlOptions); - dialogHelper.closeBusyDialog(); - if (!result.isSuccess) { - const title = i18n.t('vz-component-undeployer-undeploy-failed-title'); - const errMessage = configMapName ? - i18n.t('vz-component-undeployer-undeploy-2-components-failed-error-message', - { componentName, configMapComponentName: configMapName, componentNamespace, error: result.reason }) : - i18n.t('vz-component-undeployer-undeploy-1-component-failed-error-message', - { componentName, componentNamespace, error: result.reason }); - await window.api.ipc.invoke('show-error-message', title, errMessage); - return Promise.resolve(false); - } - const title = i18n.t('vz-component-undeployer-undeploy-complete-title'); - const message = configMapName ? - i18n.t('vz-component-undeployer-undeploy-2-components-complete-message', - { componentName, configMapComponentName: configMapName, componentNamespace }) : - i18n.t('vz-component-undeployer-undeploy-1-component-complete-message', { componentName, componentNamespace}); - await window.api.ipc.invoke('show-info-message', title, message); - } - return Promise.resolve(true); - } catch (err) { - dialogHelper.closeBusyDialog(); - throw err; - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validationObject = this.getValidationObject(flowNameKey); - const vzComponentFormConfig = validationObject.getDefaultConfigObject(); - vzComponentFormConfig.formName = 'vz-component-design-form-name'; - - validationObject.addField('vz-component-design-name-label', - this.project.vzComponent.componentName.validate(true), vzComponentFormConfig); - validationObject.addField('vz-component-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true), vzComponentFormConfig); - - return validationObject; - } - - _getPromptQuestion(componentName, componentNamespace, configMapComponentName) { - let result; - if (configMapComponentName) { - result = i18n.t('vz-component-undeployer-remove-namespace-2-component-prompt-question', - { componentName, componentNamespace, configMapComponentName }); - } else { - result = i18n.t('vz-component-undeployer-remove-namespace-1-component-prompt-question', - { componentName, componentNamespace }); - } - return result; - } - } - return new VzComponentUndeployer(); -}); diff --git a/webui/src/js/utils/vz-component-wko-v8-resource-generator.js b/webui/src/js/utils/vz-component-wko-v8-resource-generator.js deleted file mode 100644 index 623fad532..000000000 --- a/webui/src/js/utils/vz-component-wko-v8-resource-generator.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/k8s-domain-v8-resource-generator', 'utils/vz-helper', 'js-yaml', 'utils/i18n', - 'utils/wkt-logger'], -function(project, K8sDomainV8ResourceGenerator, VerrazzanoHelper, jsYaml) { - - class VerrazzanoComponentWkoV8ResourceGenerator { - constructor() { - this.project = project; - this.k8sDomainResourceGenerator = new K8sDomainV8ResourceGenerator(); - this._vzHelper = undefined; - } - - generate() { - const { domainResource } = this.k8sDomainResourceGenerator.generate(false); - - const component = { - apiVersion: this._getComponentApiVersion(), - kind: 'Component', - metadata: { - name: this.project.vzComponent.componentName.value, - namespace: this.project.k8sDomain.kubernetesNamespace.value, - }, - spec: { - workload: { - apiVersion: this._getWorkloadApiVersion(), - kind: 'VerrazzanoWebLogicWorkload', - spec: { - template: domainResource - } - } - } - }; - return jsYaml.dump(component).split('\n'); - } - - _getComponentApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getComponentApiVersion(); - } - return result; - } - - _getWorkloadApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getWorkloadApiVersion(); - } - return result; - } - - _getVerrazzanoHelper() { - if (!this._vzHelper) { - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - this._vzHelper = new VerrazzanoHelper(vzVersion); - } - } - return this._vzHelper; - } - } - return VerrazzanoComponentWkoV8ResourceGenerator; -}); diff --git a/webui/src/js/utils/vz-component-wko-v9-resource-generator.js b/webui/src/js/utils/vz-component-wko-v9-resource-generator.js deleted file mode 100644 index d75490c89..000000000 --- a/webui/src/js/utils/vz-component-wko-v9-resource-generator.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'utils/k8s-domain-v9-resource-generator', 'utils/vz-helper', 'js-yaml', 'utils/i18n', - 'utils/wkt-logger'], -function(project, K8sDomainV9ResourceGenerator, VerrazzanoHelper, jsYaml) { - - class VerrazzanoComponentWkoV9ResourceGenerator { - constructor() { - this.project = project; - this.k8sDomainResourceGenerator = new K8sDomainV9ResourceGenerator(); - this._vzHelper = undefined; - } - - generate() { - const { domainResource, clusters } = this.k8sDomainResourceGenerator.generate(false); - - const component = { - apiVersion: this._getComponentApiVersion(), - kind: 'Component', - metadata: { - name: this.project.vzComponent.componentName.value, - namespace: this.project.k8sDomain.kubernetesNamespace.value, - }, - spec: { - workload: { - apiVersion: this._getWorkloadApiVersion(), - kind: 'VerrazzanoWebLogicWorkload', - spec: { - template: domainResource, - clusters: clusters - } - } - } - }; - return jsYaml.dump(component).split('\n'); - } - - _getComponentApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getComponentApiVersion(); - } - return result; - } - - _getWorkloadApiVersion() { - let result = ''; - - const vzHelper = this._getVerrazzanoHelper(); - if (vzHelper) { - result = vzHelper.getWorkloadApiVersion(); - } - return result; - } - - _getVerrazzanoHelper() { - if (!this._vzHelper) { - const vzVersion = this.project.vzInstall.actualInstalledVersion.value; - if (vzVersion) { - this._vzHelper = new VerrazzanoHelper(vzVersion); - } - } - return this._vzHelper; - } - } - return VerrazzanoComponentWkoV9ResourceGenerator; -}); diff --git a/webui/src/js/utils/vz-get-installed-version.js b/webui/src/js/utils/vz-get-installed-version.js deleted file mode 100644 index 246a7e25d..000000000 --- a/webui/src/js/utils/vz-get-installed-version.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/validation-helper', 'utils/wkt-logger'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper) { - class VzInstallVersionChecker extends VzActionsBase { - constructor() { - super(); - } - - async startVerrazzanoInstallVersionCheck() { - await this.executeAction(this.callVerrazzanoInstallVersionCheck); - } - - async callVerrazzanoInstallVersionCheck(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-get-install-version-aborted-error-title'); - const errPrefix = 'vz-get-install-version'; - const validatableObject = this.getValidatableObject('flow-verrazzano-get-install-version-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - await dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - const totalSteps = 4; - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - const kubectlExe = this.getKubectlExe(); - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('vz-get-install-version-get-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - dialogHelper.closeBusyDialog(); - if (!result) { - return Promise.resolve(false); - } else if (result.isInstalled) { - this.project.vzInstall.actualInstalledVersion.value = result.version; - // Skip displaying a success dialog since the value is populated - // in the field where the user pressed the button to retrieve it. - // - return Promise.resolve(true); - } else { - const errMessage = i18n.t('vz-get-install-version-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } catch (err) { - dialogHelper.closeBusyDialog(); - return Promise.reject(err); - } - } - - getValidatableObject(flowNameKey) { - return this.getValidationObject(flowNameKey); - } - } - return new VzInstallVersionChecker(); -}); diff --git a/webui/src/js/utils/vz-helper.js b/webui/src/js/utils/vz-helper.js deleted file mode 100644 index f15376421..000000000 --- a/webui/src/js/utils/vz-helper.js +++ /dev/null @@ -1,85 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -const VZ_ALPHA1_INSTALL_API_VERSION = 'install.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_COMPONENT_API_VERSION = 'core.oam.dev/v1alpha2'; -const VZ_ALPHA1_WORKLOAD_API_VERSION = 'oam.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_APPLICATION_API_VERSION = 'core.oam.dev/v1alpha2'; -const VZ_ALPHA1_MULTI_CLUSTER_APPLICATION_API_VERSION = 'clusters.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_INGRESS_TRAIT_API_VERSION = 'oam.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_LOGGING_TRAIT_API_VERSION = 'oam.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_MANUAL_SCALER_TRAIT_API_VERSION = 'core.oam.dev/v1alpha2'; -const VZ_ALPHA1_METRICS_TRAIT_API_VERSION = 'oam.verrazzano.io/v1alpha1'; -const VZ_ALPHA1_PROJECT_API_VERSION = 'clusters.verrazzano.io/v1alpha1'; - -const VZ_CR_BETA1_SWITCH_VERSION = '1.4.0'; - -const VZ_BETA1_INSTALL_API_VERSION = 'install.verrazzano.io/v1beta1'; - -define([], - function() { - class VerrazzanoHelper { - constructor(verrazzanoVersion) { - this.verrazzanoVersion = verrazzanoVersion; - } - - static getVersionFromTag(tag) { - return tag.slice(1); - } - - static getTagFromVersion(version) { - return `v${version}`; - } - - getInstallApiVersion() { - if (window.api.utils.compareVersions(this.verrazzanoVersion, VZ_CR_BETA1_SWITCH_VERSION) < 0) { - return VZ_ALPHA1_INSTALL_API_VERSION; - } else { - return VZ_BETA1_INSTALL_API_VERSION; - } - } - - getComponentApiVersion() { - return VZ_ALPHA1_COMPONENT_API_VERSION; - } - - getWorkloadApiVersion() { - return VZ_ALPHA1_WORKLOAD_API_VERSION; - } - - getApplicationApiVersion() { - return VZ_ALPHA1_APPLICATION_API_VERSION; - } - - getMultiClusterApplicationApiVersion() { - return VZ_ALPHA1_MULTI_CLUSTER_APPLICATION_API_VERSION; - } - - getProjectApiVersion() { - return VZ_ALPHA1_PROJECT_API_VERSION; - } - - getIngressTraitApiVersion() { - return VZ_ALPHA1_INGRESS_TRAIT_API_VERSION; - } - - getLoggingTraitApiVersion() { - return VZ_ALPHA1_LOGGING_TRAIT_API_VERSION; - } - - getManualScalerTraitApiVersion() { - return VZ_ALPHA1_MANUAL_SCALER_TRAIT_API_VERSION; - } - - getMetricsTraitApiVersion() { - return VZ_ALPHA1_METRICS_TRAIT_API_VERSION; - } - } - - return VerrazzanoHelper; - } -); diff --git a/webui/src/js/utils/vz-install-resource-generator.js b/webui/src/js/utils/vz-install-resource-generator.js deleted file mode 100644 index 13d51547d..000000000 --- a/webui/src/js/utils/vz-install-resource-generator.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['models/wkt-project', 'js-yaml', 'utils/vz-helper', 'utils/i18n', 'utils/wkt-logger'], - function(project, jsYaml, VerrazzanoHelper) { - class VerrazzanoInstallResourceGenerator { - constructor() { - this.project = project; - } - - generate() { - const data = { - apiVersion: this._getVerrazzanoApiVersion(), - kind: 'Verrazzano', - metadata: { - name: this.project.vzInstall.installationName.value, - }, - spec: { - profile: this.project.vzInstall.installationProfile.value, - }, - }; - - if (this.project.vzInstall.installJaeger.value) { - data.spec.components = { - jaegerOperator: { - enabled: true - }, - istio: { - istioInstallArgs: [ - { - name: 'meshConfig.enableTracing', - value: 'true' - } - ] - } - }; - - if (this.project.vzInstall.istioSamplingRate.hasValue()) { - data.spec.components.istio.istioInstallArgs.push({ - name: 'meshConfig.defaultConfig.tracing.sampling', - value: String(this.project.vzInstall.istioSamplingRate.value), - }); - } - } - - const vzVersionTag = this.project.vzInstall.versionTag.value; - let isArgoAvailable = false; - if (vzVersionTag) { - const vzVersionToInstall = vzVersionTag.slice(1); - isArgoAvailable = window.api.utils.compareVersions(vzVersionToInstall, '1.5.0') >= 0; - } - - if (isArgoAvailable && this.project.vzInstall.installArgoCD.value) { - if (!data.spec.components) { - data.spec.components = {}; - } - data.spec.components.argoCD = { - enabled: true - }; - } - return jsYaml.dump(data).split('\n'); - } - - _getVerrazzanoApiVersion() { - let result = ''; - if (project.vzInstall.versionTag.value) { - const version = VerrazzanoHelper.getVersionFromTag(project.vzInstall.versionTag.value); - const vzHelper = new VerrazzanoHelper(version); - result = vzHelper.getInstallApiVersion(); - } - return result; - } - } - - return VerrazzanoInstallResourceGenerator; - } -); diff --git a/webui/src/js/utils/vz-install-script-generator.js b/webui/src/js/utils/vz-install-script-generator.js deleted file mode 100644 index a03ad4f66..000000000 --- a/webui/src/js/utils/vz-install-script-generator.js +++ /dev/null @@ -1,92 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -const REPLACEMENT_TEXT = '@@RELEASE_VERSION_TAG@@'; -const URL_CHANGE_VERSION = '1.4.0'; -const OLD_URL_TEMPLATE = - `https://github.com/verrazzano/verrazzano/releases/download/${ REPLACEMENT_TEXT }/operator.yaml`; -const URL_TEMPLATE = - `https://github.com/verrazzano/verrazzano/releases/download/${ REPLACEMENT_TEXT }/verrazzano-platform-operator.yaml`; - -define(['models/wkt-project', 'utils/script-generator-base'], - function(project, ScriptGeneratorBase) { - const scriptDescription = [ - 'This script installs Verrazzano into Kubernetes. It depends on having', - 'the Kubernetes client configuration correctly configured to authenticate', - 'to the cluster with sufficient permissions to run the commands.' - ]; - - class VerrazzanoInstallScriptGenerator extends ScriptGeneratorBase { - constructor(scriptType) { - super(scriptType); - } - - generate() { - const httpsProxyUrl = this.project.getHttpsProxyUrl(); - const bypassProxyHosts = this.project.getBypassProxyHosts(); - - this.adapter.addScriptHeader(scriptDescription); - this.adapter.addVariableStartBanner(); - - this.adapter.addKubectlVariablesBlock(this.project.kubectl.executableFilePath.value, httpsProxyUrl, - bypassProxyHosts, this.project.kubectl.kubeConfig.value, this.project.kubectl.kubeConfigContextToUse.value); - - this.adapter.addVariableDefinition('VERRAZZANO_INSTALL_NAME', this.project.vzInstall.installationName.value); - this.adapter.addVariableDefinition('VERRAZZANO_RELEASE_TAG', this.project.vzInstall.versionTag.value); - this.adapter.addVariableDefinition('VERRAZZANO_INSTALL_WAIT_TIME', '20m'); - this.adapter.addVariableDefinition('VERRAZZANO_RESOURCE_YAML', this.fillInFileNameMask); - this.adapter.addEmptyLine(); - - this.adapter.addVariableEndBanner(); - - this.adapter.addKubectlExportAndUseContextBlock(); - const kubectlExe = this.adapter.getVariableReference('KUBECTL_EXE'); - const vzInstallName = this.adapter.getVariableReference('VERRAZZANO_INSTALL_NAME'); - - let comment = [ 'Make sure that Verrazzano is not already installed' ]; - const notInstalledMessage = 'Verrazzano is not installed'; - const alreadyInstalledMessage = 'Verrazzano is already installed'; - this.adapter.addVerrazzanoInstalledCheckBlock(comment, kubectlExe, vzInstallName, - notInstalledMessage, alreadyInstalledMessage, false, true); - - this.adapter.addVariableDefinition('VERRAZZANO_OPERATOR_URL', - this._getPlatformOperatorUrl(this.adapter.getVariableReference('VERRAZZANO_RELEASE_TAG'))); - comment = [ 'Install the Verrazzano Platform Operator version requested' ]; - let errorMessage = 'Failed to install the Verrazzano Platform Operator'; - const vzPlatformOperatorUrl = this.adapter.getVariableReference('VERRAZZANO_OPERATOR_URL'); - this.adapter.addKubectlApplyBlock(comment, kubectlExe, vzPlatformOperatorUrl, errorMessage); - - comment = [ 'Wait for the Verrazzano Platform Operator deployment to complete' ]; - errorMessage = 'Failed to verify the Verrazzano Platform Operator rollout status'; - this.adapter.addVerrazzanoPlatformOperatorRolloutBlock(comment, kubectlExe, errorMessage); - - comment = [ 'Start the Verrazzano installation' ]; - const vzResourceYaml = this.adapter.getVariableReference('VERRAZZANO_RESOURCE_YAML'); - errorMessage = 'Failed to start the Verrazzano installation'; - this.adapter.addKubectlApplyBlock(comment, kubectlExe, vzResourceYaml, errorMessage); - - comment = [ 'Wait for the Verrazzano installation to complete' ]; - const vzWaitTime = this.adapter.getVariableReference('VERRAZZANO_INSTALL_WAIT_TIME'); - errorMessage = 'Failed to determine if the Verrazzano installation has completed'; - this.adapter.addVerrazzanoInstallWaitBlock(comment, kubectlExe, vzInstallName, vzWaitTime, errorMessage); - - this.adapter.addScriptFooter(); - return this.adapter.getScript(); - } - - _getPlatformOperatorUrl(releaseTagReference) { - if (project.vzInstall.actualInstalledVersion.hasValue() - && window.api.utils.compareVersions(project.vzInstall.actualInstalledVersion.value, URL_CHANGE_VERSION) < 0) { - return OLD_URL_TEMPLATE.replace(REPLACEMENT_TEXT, releaseTagReference); - } - return URL_TEMPLATE.replace(REPLACEMENT_TEXT, releaseTagReference); - } - } - - return VerrazzanoInstallScriptGenerator; - } -); diff --git a/webui/src/js/utils/vz-install-status-checker.js b/webui/src/js/utils/vz-install-status-checker.js deleted file mode 100644 index f13bc1d7f..000000000 --- a/webui/src/js/utils/vz-install-status-checker.js +++ /dev/null @@ -1,126 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/validation-helper', 'utils/wkt-logger'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper) { - class VzInstallStatusChecker extends VzActionsBase { - constructor() { - super(); - } - - async startVerrazzanoInstallStatusCheck() { - await this.executeAction(this.callVerrazzanoInstallStatusCheck); - } - - async callVerrazzanoInstallStatusCheck(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-install-status-checker-aborted-error-title'); - const errPrefix = 'vz-install-status-checker'; - const validatableObject = this.getValidatableObject('flow-verrazzano-install-status-check-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - const totalSteps = 5; - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - const kubectlExe = this.getKubectlExe(); - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('vz-install-status-checker-checking-vz-is-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (!result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-install-status-checker-install-check-not-installed-error-message'); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('vz-install-status-checker-checking-status-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - const vzOptions = { - name: project.vzInstall.installationName.value, - tag: project.vzInstall.versionTag.value, - profile: project.vzInstall.installationProfile.value, - }; - const statusResult = await window.api.ipc.invoke('verify-verrazzano-install-status', kubectlExe, kubectlOptions, vzOptions); - dialogHelper.closeBusyDialog(); - if (statusResult.isSuccess) { - if (statusResult.isComplete) { - this.project.vzInstall.actualInstalledVersion.value = statusResult.version; - const title = i18n.t('vz-install-status-checker-status-complete-title'); - const message = i18n.t('vz-install-status-checker-status-complete-message', { name: vzOptions.name }); - await window.api.ipc.invoke('show-info-message', title, message); - } else { - const message = statusResult.payload ? statusResult.payload.message : ''; - const status = statusResult.payload ? statusResult.payload.status : ''; - - const title = i18n.t('vz-install-status-checker-status-incomplete-title'); - const errMessage = i18n.t('vz-install-status-checker-status-incomplete-message', - { name: vzOptions.name, message, status }); - await window.api.ipc.invoke('show-info-message', title, errMessage); - } - } else { - const title = i18n.t('vz-install-status-checker-status-failed-title'); - const message = i18n.t('vz-install-status-checker-status-failed-error-message', - { name: vzOptions.name, error: statusResult.reason }); - await window.api.ipc.invoke('show-error-message', title, message); - return Promise.resolve(false); - } - } catch (err) { - dialogHelper.closeBusyDialog(); - return Promise.reject(err); - } - return Promise.resolve(true); - } - - getValidatableObject(flowNameKey) { - return this.getValidationObject(flowNameKey); - } - } - return new VzInstallStatusChecker(); -}); diff --git a/webui/src/js/utils/vz-installer.js b/webui/src/js/utils/vz-installer.js deleted file mode 100644 index 56a41373b..000000000 --- a/webui/src/js/utils/vz-installer.js +++ /dev/null @@ -1,148 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. - */ -'use strict'; - -define(['utils/vz-actions-base', 'models/wkt-project', 'models/wkt-console', 'utils/i18n', 'utils/project-io', - 'utils/dialog-helper', 'utils/validation-helper', 'utils/vz-install-resource-generator', 'utils/wkt-logger'], -function(VzActionsBase, project, wktConsole, i18n, projectIo, dialogHelper, validationHelper, VerrazzanoInstallResourceGenerator) { - class VzInstaller extends VzActionsBase { - constructor() { - super(); - } - - async startInstallVerrazzano() { - await this.executeAction(this.callInstallVerrazzano); - } - - async callInstallVerrazzano(options) { - if (!options) { - options = {}; - } - - let errTitle = i18n.t('vz-installer-aborted-error-title'); - const errPrefix = 'vz-installer'; - const validatableObject = this.getValidatableObject('flow-install-verrazzano-name'); - if (validatableObject.hasValidationErrors()) { - const validationErrorDialogConfig = validatableObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(false); - } - - const totalSteps = 7.0; - try { - let busyDialogMessage = i18n.t('flow-validate-kubectl-exe-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.updateBusyDialog(busyDialogMessage, 0/totalSteps); - - const kubectlExe = this.getKubectlExe(); - if (!options.skipKubectlExeValidation) { - if (! await this.validateKubectlExe(kubectlExe, errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - // While technically not required, we force saving the project for Go Menu item behavior consistency. - // - busyDialogMessage = i18n.t('flow-save-project-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1/totalSteps); - if (!options.skipProjectSave) { - if (! await this.saveProject(errTitle, errPrefix)) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); - const kubectlContext = this.getKubectlContext(); - const kubectlOptions = this.getKubectlOptions(); - if (!options.skipKubectlSetContext) { - const status = await this.useKubectlContext(kubectlExe, kubectlOptions, kubectlContext, errTitle, errPrefix); - if (!status) { - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('flow-checking-vz-already-installed-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 3/totalSteps); - if (!options.skipVzInstallCheck) { - const result = await this.isVerrazzanoInstalled(kubectlExe, kubectlOptions, errTitle, errPrefix); - if (!result) { - return Promise.resolve(false); - } - if (result.isInstalled) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-installer-already-installed-error-message', { name: result.name, version: result.version}); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - } - - busyDialogMessage = i18n.t('vz-installer-install-operator-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 4/totalSteps); - const vzOptions = { - name: project.vzInstall.installationName.value, - tag: project.vzInstall.versionTag.value, - profile: project.vzInstall.installationProfile.value, - operatorRolloutCheckIterations: 3, - operatorRolloutWaitTimeMillis: 5000 - }; - const operatorInstallResult = - await window.api.ipc.invoke('install-verrazzano-platform-operator', kubectlExe, kubectlOptions, vzOptions); - if (!operatorInstallResult.isSuccess) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-installer-operator-install-failed-error-message', - { tag: vzOptions.tag, error: operatorInstallResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('vz-installer-verify-operator-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 5/totalSteps); - const operatorRolloutStatus = - await window.api.ipc.invoke('verify-verrazzano-platform-operator-install', kubectlExe, kubectlOptions, vzOptions); - if (!operatorRolloutStatus.isSuccess) { - dialogHelper.closeBusyDialog(); - const errMessage = i18n.t('vz-installer-verify-operator-failed-error-message', { error: operatorRolloutStatus.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(false); - } - - busyDialogMessage = i18n.t('vz-installer-install-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 6/totalSteps); - const vzInstallResource = (new VerrazzanoInstallResourceGenerator()).generate().join('\n'); - const vzInstallResult = await window.api.ipc.invoke('install-verrazzano', kubectlExe, kubectlOptions, vzInstallResource); - dialogHelper.closeBusyDialog(); - if (vzInstallResult.isSuccess) { - const title = i18n.t('vz-installer-install-started-title'); - const message = i18n.t('vz-installer-install-started-message', { name: vzOptions.name, version: vzOptions.tag.slice(1)}); - await window.api.ipc.invoke('show-info-message', title, message); - } else { - const title = i18n.t('vz-installer-install-failed-title'); - const message = i18n.t('vz-installer-install-failed-error-message', { name: vzOptions.name, error: vzInstallResult.reason }); - await window.api.ipc.invoke('show-error-message', title, message); - } - return Promise.resolve(vzInstallResult.isSuccess); - } catch (err) { - dialogHelper.closeBusyDialog(); - return Promise.reject(err); - } finally { - dialogHelper.closeBusyDialog(); - } - } - - getValidatableObject(flowNameKey) { - const validatableObject = this.getValidationObject(flowNameKey); - const vzInstallFormConfig = validatableObject.getDefaultConfigObject(); - vzInstallFormConfig.formName = 'vz-install-design-form-name'; - - validatableObject.addField('vz-install-design-version-label', - validationHelper.validateRequiredField(this.project.vzInstall.versionTag.value), vzInstallFormConfig); - - return validatableObject; - } - } - return new VzInstaller(); -}); diff --git a/webui/src/js/utils/wdt-discoverer.js b/webui/src/js/utils/wdt-discoverer.js index 030a14982..80bec080c 100644 --- a/webui/src/js/utils/wdt-discoverer.js +++ b/webui/src/js/utils/wdt-discoverer.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -65,10 +65,9 @@ function (WdtActionsBase, ko, project, wktConsole, dialogHelper, projectIO, i18n return Promise.resolve(false); } - // for remote discovery, domain home is on the remote machine, + // for online discovery, domain home is on the remote machine, // so don't validate the directory - const isRemote = discoverConfig.isRemote; - if (!isRemote) { + if (!online) { busyDialogMessage = i18n.t('flow-validate-domain-home-in-progress'); dialogHelper.updateBusyDialog(busyDialogMessage, 2/totalSteps); const errContext = i18n.t('wdt-discoverer-invalid-domain-home-error-prefix'); @@ -111,6 +110,7 @@ function (WdtActionsBase, ko, project, wktConsole, dialogHelper, projectIO, i18n wktLogger.debug('discover complete: %s', discoverResults.modelFileContent); project.wdtModel.setModelFiles(discoverResults.modelFileContent); + const isRemote = discoverConfig.isRemote; if (isRemote) { const options = { resultData: discoverResults.resultData }; dialogHelper.openDialog('discover-result-dialog', options); @@ -149,8 +149,11 @@ function (WdtActionsBase, ko, project, wktConsole, dialogHelper, projectIO, i18n const discoverFormConfig = validationObject.getDefaultConfigObject(); discoverFormConfig.formName = online ? 'discover-dialog-online-form-name' : 'discover-dialog-offline-form-name'; - validationObject.addField('discover-dialog-domain-label', - validationHelper.validateRequiredField(discoverConfig.domainHome), discoverFormConfig); + + if (!online) { + validationObject.addField('discover-dialog-domain-home-label', + validationHelper.validateRequiredField(discoverConfig.domainHome), discoverFormConfig); + } if (online) { validationObject.addField('discover-dialog-admin-url-label', diff --git a/webui/src/js/utils/wit-aux-creator.js b/webui/src/js/utils/wit-aux-creator.js index 55e113ea1..451b29172 100644 --- a/webui/src/js/utils/wit-aux-creator.js +++ b/webui/src/js/utils/wit-aux-creator.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -279,9 +279,31 @@ function (WitActionsBase, project, wktConsole, wdtModelPreparer, i18n, projectIo } addWdtConfig(projectDirectory, createConfig) { + const variableFiles = this.project.wdtModel.propertiesFiles.value; + const nonEmptyVariableFiles = []; + if (Array.isArray(variableFiles) && variableFiles.length > 0) { + // This code currently supports a single variable file. + const variableFileContent = this.project.wdtModel.getPropertyFileContents(); + for (const [file, contents] of Object.entries(variableFileContent)) { + if (Object.getOwnPropertyNames(contents).length > 0) { + nonEmptyVariableFiles.push(file); + } + } + } + + const archiveFiles = this.project.wdtModel.archiveFiles.value; + const nonEmptyArchiveFiles = []; + if (Array.isArray(archiveFiles) && archiveFiles.length > 0) { + // This code currently supports a single archive file. + const archiveRoots = this.project.wdtModel.archiveRoots(); + if (Array.isArray(archiveRoots) && archiveRoots.length > 0) { + nonEmptyArchiveFiles.push(archiveFiles[0]); + } + } + createConfig.modelFiles = this.getAbsoluteModelFiles(projectDirectory, this.project.wdtModel.modelFiles.value); - createConfig.variableFiles = this.getAbsoluteModelFiles(projectDirectory, this.project.wdtModel.propertiesFiles.value); - createConfig.archiveFiles = this.getAbsoluteModelFiles(projectDirectory, this.project.wdtModel.archiveFiles.value); + createConfig.variableFiles = this.getAbsoluteModelFiles(projectDirectory, nonEmptyVariableFiles); + createConfig.archiveFiles = this.getAbsoluteModelFiles(projectDirectory, nonEmptyArchiveFiles); // Because we are overriding the defaults for these next two options, // we should always include them if they have a value. // diff --git a/webui/src/js/utils/wkt-actions-base.js b/webui/src/js/utils/wkt-actions-base.js index 7ff3b1574..b5d8b0a68 100644 --- a/webui/src/js/utils/wkt-actions-base.js +++ b/webui/src/js/utils/wkt-actions-base.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ 'use strict'; @@ -54,9 +54,9 @@ function(project, wktConsole, i18n, projectIo, dialogHelper, }; } - getKubectlOptions(kubeConfig = undefined) { + getKubectlOptions() { return { - kubeConfig: kubeConfig || this.project.kubectl.kubeConfig.value, + kubeConfig: this.project.kubectl.kubeConfig.value, extraPathDirectories: this.getExtraPathDirectoriesArray(this.project.settings.extraPathDirectories.value), extraEnvironmentVariables: this.getExtraEnvironmentVariablesObject(this.project.settings.extraEnvironmentVariables.value) }; diff --git a/webui/src/js/viewModels/app-main.js b/webui/src/js/viewModels/app-main.js index dce0b3a84..ebff52256 100644 --- a/webui/src/js/viewModels/app-main.js +++ b/webui/src/js/viewModels/app-main.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; @@ -76,10 +76,6 @@ function(accUtils, ko, i18n, project, wktConsole, { path: 'operator-page' }, { path: 'domain-page' }, { path: 'ingress-page' }, - { path: 'vz-config-page' }, - { path: 'vz-install-page' }, - { path: 'vz-component-page' }, - { path: 'vz-application-page' }, { path: 'empty-view' } ]; @@ -122,30 +118,6 @@ function(accUtils, ko, i18n, project, wktConsole, ] }; - targetNavData.vz = { - name: this.labelMapper('verrazzano'), - id: 'no-page', - icon: 'oj-ux-ico-folder', - children:[ - { name: this.labelMapper('vz-config'), - id: 'kubectl-page', - icon: 'oj-ux-ico-user-configuration' - }, - { name: this.labelMapper('vz-install'), - id: 'vz-install-page', - icon: 'oj-ux-ico-arrow-circle-down' - }, - { name: this.labelMapper('vz-component'), - id: 'vz-component-page', - icon: 'oj-ux-ico-manage-work-definitions' - }, - { name: this.labelMapper('vz-application'), - id: 'vz-application-page', - icon: 'oj-ux-ico-router' - } - ] - }; - const navData = ko.observableArray([ { name: this.labelMapper('project-settings'), id: 'project-settings-page', diff --git a/webui/src/js/viewModels/choose-clusters-dialog.js b/webui/src/js/viewModels/choose-clusters-dialog.js deleted file mode 100644 index b63107cb4..000000000 --- a/webui/src/js/viewModels/choose-clusters-dialog.js +++ /dev/null @@ -1,50 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', - 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function ChooseClustersDialogModel(args) { - const DIALOG_SELECTOR = '#chooseClustersDialog'; - - this.i18n = i18n; - this.availableClusterNames = args.availableClusterNames; - this.selectedClusterNames = ko.observableArray(args.selectedClusterNames); - this.availableClusterNamesDP = new ArrayDataProvider(this.availableClusterNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Clusters dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-choose-clusters-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = {clusterNames: this.selectedClusterNames()}; - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return ChooseClustersDialogModel; -}); diff --git a/webui/src/js/viewModels/choose-component-dialog.js b/webui/src/js/viewModels/choose-component-dialog.js deleted file mode 100644 index a8671455e..000000000 --- a/webui/src/js/viewModels/choose-component-dialog.js +++ /dev/null @@ -1,59 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectsingle', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', - 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function ChooseComponentDialogModel(args) { - const DIALOG_SELECTOR = '#chooseComponentDialog'; - - this.i18n = i18n; - this.availableComponentNames = args.availableComponentNames; - this.selectedComponentNames = ko.observableArray(); - - this.availableComponentNamesDP = new ArrayDataProvider(this.availableComponentNames, { keyAttributes: 'value' }); - - this.connected = () => { - accUtils.announce('Choose Component dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-choose-component-${labelId}`); - }; - - this.okInput = () => { - let tracker = document.getElementById('chooseComponentTracker'); - if (tracker.valid !== 'valid') { - // show messages on all the components that have messages hidden. - tracker.showMessages(); - tracker.focusOn('@firstInvalidShown'); - return; - } - - $(DIALOG_SELECTOR)[0].close(); - - const result = {componentNames: this.selectedComponentNames()}; - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return ChooseComponentDialogModel; -}); diff --git a/webui/src/js/viewModels/choose-deployment-dialog.js b/webui/src/js/viewModels/choose-deployment-dialog.js deleted file mode 100644 index 427e4dd8e..000000000 --- a/webui/src/js/viewModels/choose-deployment-dialog.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectsingle', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', - 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function ChooseDeploymentDialogModel(args) { - const DIALOG_SELECTOR = '#chooseDeploymentDialog'; - - this.i18n = i18n; - this.availableDeploymentNames = args.availableDeploymentNames; - this.selectedDeploymentName = ko.observable(args.selectedDeploymentName); - - this.availableDeploymentNamesDP = new ArrayDataProvider(this.availableDeploymentNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Deployment dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-choose-deployment-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = { deploymentName: this.selectedDeploymentName() }; - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return ChooseDeploymentDialogModel; -}); diff --git a/webui/src/js/viewModels/choose-secret-dialog.js b/webui/src/js/viewModels/choose-secret-dialog.js deleted file mode 100644 index d86fc0e27..000000000 --- a/webui/src/js/viewModels/choose-secret-dialog.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', - 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function ChooseSecretDialogModel(args) { - const DIALOG_SELECTOR = '#chooseSecretsDialog'; - - this.i18n = i18n; - this.availableSecretNames = args.availableSecretNames; - this.selectedSecretName = ko.observable(args.selectedSecretName); - this.availableSecretNamesDP = new ArrayDataProvider(this.availableSecretNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Secret dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-choose-secret-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = {}; - result.secretName = this.selectedSecretName(); - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return ChooseSecretDialogModel; -}); diff --git a/webui/src/js/viewModels/choose-secrets-dialog.js b/webui/src/js/viewModels/choose-secrets-dialog.js deleted file mode 100644 index ffd756881..000000000 --- a/webui/src/js/viewModels/choose-secrets-dialog.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', - 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function ChooseSecretsDialogModel(args) { - const DIALOG_SELECTOR = '#chooseSecretsDialog'; - - this.i18n = i18n; - this.availableSecretNames = args.availableSecretNames; - this.selectedSecretNames = ko.observableArray(args.selectedSecretNames); - this.availableSecretNamesDP = new ArrayDataProvider(this.availableSecretNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Secrets dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-choose-secrets-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = { - secretNames: this.selectedSecretNames(), - }; - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return ChooseSecretsDialogModel; -}); diff --git a/webui/src/js/viewModels/discover-dialog.js b/webui/src/js/viewModels/discover-dialog.js index 60134be6c..8161f5e98 100644 --- a/webui/src/js/viewModels/discover-dialog.js +++ b/webui/src/js/viewModels/discover-dialog.js @@ -1,13 +1,13 @@ /** * @license - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; define(['accUtils', 'knockout', 'utils/i18n', 'utils/view-helper', 'ojs/ojarraydataprovider', 'models/wkt-project', - 'utils/wdt-discoverer', 'ojs/ojknockout', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', - 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojselectsingle', 'ojs/ojvalidationgroup', 'ojs/ojswitch'], + 'utils/wdt-discoverer', 'ojs/ojknockout', 'oj-c/input-text', 'oj-c/input-password', 'ojs/ojlabel', 'oj-c/button', + 'ojs/ojdialog', 'oj-c/form-layout', 'oj-c/select-single', 'ojs/ojvalidationgroup', 'ojs/ojswitch', 'oj-c/radioset'], function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscoverer) { function DiscoverDialogModel(config) { const DIALOG_SELECTOR = '#discoverDialog'; @@ -52,14 +52,20 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover this.adminUrl = ko.observable(); this.adminUser = ko.observable(); this.adminPassword = ko.observable(); - this.isRemote = ko.observable(); + + this.sshHost = ko.observable(); + this.sshPort = ko.observable(); + this.sshUser = ko.observable(); + this.sshPassword = ko.observable(); + this.sshPrivateKey = ko.observable(); + this.sshPrivateKeyPassphrase = ko.observable(); this.domainHomeHelp = ko.computed(() => { - return this.labelMapper(this.isRemote() ? 'domain-home-remote-help' : 'domain-home-help'); + return this.labelMapper('domain-home-help'); }, this); this.domainHomeLabel = ko.computed(() => { - return this.labelMapper(this.isRemote() ? 'domain-home-remote-label' : 'domain-home-label'); + return this.labelMapper('domain-home-label'); }, this); this.wdtDomainTypes = [ @@ -69,6 +75,32 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover ]; this.wdtDomainTypesDP = new ArrayDataProvider(this.wdtDomainTypes, { keyAttributes: 'key' }); + this.discoverTypes = [ + { value: 'local', label: this.labelMapper('discover-type-local-label') }, + { value: 'remote', label: this.labelMapper('discover-type-remote-label') }, + { value: 'ssh', label: this.labelMapper('discover-type-ssh-label') }, + ]; + this.discoverType = ko.observable('local'); + + this.sshCredentialTypes = [ + { value: 'default', label: this.labelMapper('ssh-credential-type-default-label') }, + { value: 'privateKey', label: this.labelMapper('ssh-credential-type-private-key-label') }, + { value: 'password', label: this.labelMapper('ssh-credential-type-password-label') }, + ]; + this.sshCredentialType = ko.observable('default'); + + this.useSsh = ko.computed(() => { + return this.discoverType() === 'ssh'; + }, this); + + this.useSshPassword = ko.computed(() => { + return this.sshCredentialType() === 'password'; + }, this); + + this.useSshPrivateKey = ko.computed(() => { + return this.sshCredentialType() === 'privateKey'; + }, this); + this.startDiscover = () => { let tracker = document.getElementById('tracker'); if (tracker.valid === 'valid') { @@ -92,7 +124,18 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover discoverConfig['adminUrl'] = this.adminUrl(); discoverConfig['adminUser'] = this.adminUser(); discoverConfig['adminPass'] = this.adminPassword(); - discoverConfig['isRemote'] = this.isRemote(); + discoverConfig['isRemote'] = this.discoverType() === 'remote'; + if(this.useSsh()) { + discoverConfig['sshHost'] = this.sshHost(); + discoverConfig['sshPort'] = this.sshPort(); + discoverConfig['sshUser'] = this.sshUser(); + if(this.useSshPassword()) { + discoverConfig['sshPassword'] = this.sshPassword(); + } else if(this.useSshPrivateKey()) { + discoverConfig['sshPrivateKey'] = this.sshPrivateKey(); + discoverConfig['sshPrivateKeyPassphrase'] = this.sshPrivateKeyPassphrase(); + } + } } this.dialogContainer.close(); @@ -116,6 +159,15 @@ function(accUtils, ko, i18n, viewHelper, ArrayDataProvider, project, wdtDiscover } }); }; + + this.choosePrivateKey = () => { + window.api.ipc.invoke('choose-private-key', this.sshPrivateKey()) + .then(file => { + if (file) { + this.sshPrivateKey(file); + } + }); + }; } /* diff --git a/webui/src/js/viewModels/k8s-helper-choose-cluster-dialog.js b/webui/src/js/viewModels/k8s-helper-choose-cluster-dialog.js deleted file mode 100644 index 153ac2888..000000000 --- a/webui/src/js/viewModels/k8s-helper-choose-cluster-dialog.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright (c) 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', - 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function KubernetesHelperChooseClusterDialogModel(args) { - const DIALOG_SELECTOR = '#k8sHelperChooseClusterDialog'; - - this.i18n = i18n; - this.testClusterNames = args.availableClusters; - this.selectedTestClusterName = ko.observable(); - this.testClusterNamesDP = - new ArrayDataProvider(this.testClusterNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Verrazzano application status choose cluster dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`kubectl-helper-choose-cluster-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = {}; - result.clusterName = this.selectedTestClusterName(); - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return KubernetesHelperChooseClusterDialogModel; -}); diff --git a/webui/src/js/viewModels/kubectl-page.js b/webui/src/js/viewModels/kubectl-page.js index 6868c91b2..723f9ccc3 100644 --- a/webui/src/js/viewModels/kubectl-page.js +++ b/webui/src/js/viewModels/kubectl-page.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; @@ -37,46 +37,6 @@ function(accUtils, ko, project, i18n, ArrayDataProvider, BufferingDataProvider, return window.api.process.isMac(); }; - this.usingWko = () => { - return this.project.settings.wdtTargetType.value === 'wko'; - }; - - this.vzManagedClustersColumnData = [ - { - headerText: this.labelMapper('vz-managed-cluster-name-heading'), - sortProperty: 'name', - resizable: 'enabled' - }, - { - headerText: this.labelMapper('vz-managed-cluster-kubeconfig-heading'), - sortable: 'disable', - resizable: 'enabled' - }, - { - headerText: this.labelMapper('vz-managed-cluster-kubecontext-heading'), - sortProperty: 'kubeContext' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - this.vzManagedClustersDP = new BufferingDataProvider(new ArrayDataProvider( - this.project.kubectl.vzManagedClusters.observable, {keyAttributes: 'uid'})); - - this.getConnectivityHeading = ko.computed(() => { - if (this.usingWko()) { - return this.labelMapper('wko-connectivity-heading'); - } else { - return this.labelMapper('vz-connectivity-heading'); - } - }, this); - this.chooseKubectl = () => { window.api.ipc.invoke('get-kubectl-exe').then(kubectlPath => { if (kubectlPath) { @@ -109,25 +69,6 @@ function(accUtils, ko, project, i18n, ArrayDataProvider, BufferingDataProvider, }); }; - this.chooseManagedKubeConfig = (event, context) => { - const index = context.item.index; - const managedClusterData = this.project.kubectl.vzManagedClusters.observable()[index]; - getKubeConfig().then(kubeConfigPath => { - let kubeConfig; - if (Array.isArray(kubeConfigPath)) { - kubeConfig = kubeConfigPath; - } else if (typeof kubeConfigPath === 'string' && kubeConfigPath.length > 0) { - kubeConfig = kubeConfigPath.split(window.api.path.delimiter); - } - - if (kubeConfig) { - const newManagedClusterData = Object.assign({}, managedClusterData); - newManagedClusterData.kubeConfig = kubeConfig; - this.project.kubectl.vzManagedClusters.observable.replace(managedClusterData, newManagedClusterData); - } - }); - }; - async function getCurrentClusterContext(kubectlExe, options) { return window.api.ipc.invoke('kubectl-get-current-context', kubectlExe, options); } @@ -146,26 +87,6 @@ function(accUtils, ko, project, i18n, ArrayDataProvider, BufferingDataProvider, }); }; - this.getManagedCurrentContext = (event, context) => { - const index = context.item.index; - const managedClusterData = this.project.kubectl.vzManagedClusters.observable()[index]; - wktLogger.debug('getting current context for managed cluster" %s', JSON.stringify(managedClusterData)); - - const kubectlExe = this.project.kubectl.executableFilePath.value; - const options = { kubeConfig: managedClusterData.kubeConfig }; - getCurrentClusterContext(kubectlExe, options).then(results => { - if (results.isSuccess) { - const newManagedClusterData = Object.assign({}, managedClusterData); - newManagedClusterData.kubeContext = results.context; - this.project.kubectl.vzManagedClusters.observable.replace(managedClusterData, newManagedClusterData); - } else { - const errTitle = i18n.t('kubectl-get-current-context-error-title'); - const errMessage = i18n.t('kubectl-get-current-context-error-message', { error: results.reason }); - window.api.ipc.invoke('show-error-message', errTitle, errMessage).then().catch(); - } - }); - }; - async function getContext(kubectlExe, options, kubeContext) { const results = await window.api.ipc.invoke('kubectl-get-contexts', kubectlExe, options); if (results.isSuccess) { @@ -199,45 +120,10 @@ function(accUtils, ko, project, i18n, ArrayDataProvider, BufferingDataProvider, }); }; - this.chooseManagedContext = (event, context) => { - const index = context.item.index; - const managedClusterData = this.project.kubectl.vzManagedClusters.observable()[index]; - - const kubectlExe = this.project.kubectl.executableFilePath.value; - const options = { kubeConfig: managedClusterData.kubeConfig }; - const kubeContext = managedClusterData.kubeContext; - getContext(kubectlExe, options, kubeContext).then(result => { - if (result && result.kubectlContextName) { - const newManagedClusterData = Object.assign({}, managedClusterData); - newManagedClusterData.kubeContext = result.kubectlContextName; - this.project.kubectl.vzManagedClusters.observable.replace(managedClusterData, newManagedClusterData); - } - }); - }; - this.chooseAdminContextTooltip = ko.computed(() => { - if (this.project.settings.wdtTargetType.observable() === 'vz') { - return this.labelMapper('config-vz-choose-admin-context-tooltip'); - } else { - return this.labelMapper('config-wko-choose-context-tooltip'); - } + return this.labelMapper('config-wko-choose-context-tooltip'); }); - this.handleAddManagedCluster = () => { - const managedClusterToAdd = { - uid: utils.getShortUuid(), - name: utils.generateNewName(this.project.kubectl.vzManagedClusters.observable, - 'name', 'managed', true), - kubeConfig: this.project.kubectl.kubeConfig.value - }; - this.project.kubectl.vzManagedClusters.addNewItem(managedClusterToAdd); - }; - - this.handleDeleteManagedCluster = (event, context) => { - const index = context.item.index; - this.project.kubectl.vzManagedClusters.observable.splice(index, 1); - }; - this.createLink = function (url, label) { return '' + label + ''; }; @@ -358,11 +244,6 @@ function(accUtils, ko, project, i18n, ArrayDataProvider, BufferingDataProvider, } return flavor; }; - - this.isVerrazzanoOKE = ko.computed(() => { - return this.project.settings.wdtTargetType.observable() === 'vz' - && this.project.kubectl.k8sFlavor.observable() === 'OKE'; - }, this); } /* diff --git a/webui/src/js/viewModels/project-settings-page.js b/webui/src/js/viewModels/project-settings-page.js index 6c6f876ef..e25a657ad 100644 --- a/webui/src/js/viewModels/project-settings-page.js +++ b/webui/src/js/viewModels/project-settings-page.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; @@ -147,7 +147,6 @@ function(accUtils, ko, i18n, project, ArrayDataProvider, }; this.credentialStorePolicies = [ - { key: 'native', label: this.labelMapper('credential-store-native-label') }, { key: 'passphrase', label: this.labelMapper('credential-store-passphrase-label') }, { key: 'none', label: this.labelMapper('credential-store-none-label') }, ]; @@ -168,14 +167,6 @@ function(accUtils, ko, i18n, project, ArrayDataProvider, return this.project.settings.targetDomainLocation.observable() === 'pv'; }; - this.wdtTargetTypes = [ - { key: 'vz', label: this.labelMapper('wdt-target-type-vz-label') }, - { key: 'wko', label: this.labelMapper('wdt-target-type-wko-label') }, - // { key: 'k8s', label: this.labelMapper('wdt-target-type-k8s-label') }, - // { key: 'none', label: this.labelMapper('wdt-target-type-none-label') } - ]; - this.wdtTargetTypesDP = new ArrayDataProvider(this.wdtTargetTypes, { keyAttributes: 'key' }); - this.javaDirectoryLocationAnswer = ko.computed(() => { let key = 'java-directory-location-answer-message'; if (this.project.settings.targetDomainLocation.value === 'pv') { diff --git a/webui/src/js/viewModels/quickstart-dialog.js b/webui/src/js/viewModels/quickstart-dialog.js index 366f2d082..6f45271e1 100644 --- a/webui/src/js/viewModels/quickstart-dialog.js +++ b/webui/src/js/viewModels/quickstart-dialog.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ */ 'use strict'; @@ -11,7 +11,7 @@ define(['accUtils', 'knockout', 'utils/i18n', 'ojs/ojcontext', 'ojs/ojmodule-ele function(accUtils, ko, i18n, Context, moduleElementUtils, wktLogger) { function QuickStartDialogModel() { - const QUICKSTART_PAGE_COUNT = 11; + const QUICKSTART_PAGE_COUNT = 10; const DIALOG_NAME = 'wktQuickStartDialog'; const DIALOG_SELECTOR = `#${DIALOG_NAME}`; this.i18n = i18n; diff --git a/webui/src/js/viewModels/vz-application-code-view.js b/webui/src/js/viewModels/vz-application-code-view.js deleted file mode 100644 index bf4be3b88..000000000 --- a/webui/src/js/viewModels/vz-application-code-view.js +++ /dev/null @@ -1,144 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['accUtils', 'knockout', 'models/wkt-project', 'utils/vz-application-script-generator', - 'utils/vz-application-resource-generator', 'utils/vz-application-project-generator', 'utils/i18n', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojinputtext', 'ojs/ojnavigationlist', 'ojs/ojswitcher', - 'ojs/ojknockout'], -function (accUtils, ko, project, VerrazzanoApplicationScriptGenerator, VerrazzanoApplicationResourceGenerator, - VerrazzanoProjectResourceGenerator, i18n, ArrayDataProvider) { - function VerrazzanoApplicationCodeViewModel () { - this.project = project; - - let subscriptions = []; - - this.connected = () => { - accUtils.announce('Verrazzano Application code view loaded.', 'assertive'); - - // update code text if project changes - subscriptions.push(project.postOpen.subscribe(() => { - this.renderScript(this.selectedSubview()); - })); - - this.renderScript(this.selectedSubview()); - }; - - this.disconnected = () => { - subscriptions.forEach((subscription) => { - subscription.dispose(); - }); - }; - - this.project = project; - - this.createProjectResource = ko.computed(() => { - return !(this.project.vzApplication.useMultiClusterApplication.observable() && this.project.vzApplication.createProject.observable()); - }); - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-code-${labelId}`); - }; - - this.shellLabelMapper = (labelId) => { - return i18n.t(`script-${labelId}`); - }; - - this.shellScriptType = ko.observable(VerrazzanoApplicationScriptGenerator.getDefaultScriptingLanguage()); - const shellScriptTypes = [ - {key: 'sh', label: this.shellLabelMapper('sh-label')}, - {key: 'ps1', label: this.shellLabelMapper('ps1-label')}, - {key: 'cmd', label: this.shellLabelMapper('cmd-label')} - ]; - this.shellScriptTypesDP = new ArrayDataProvider(shellScriptTypes, {keyAttributes: 'key'}); - this.shellScriptTypeSelectValueChangedHandler = (event) => { - this.shellScriptType(event.detail.value); - this.renderShellScript(event.detail.value); - }; - - this.subviews = [ - {id: 'script', name: this.labelMapper('script-title')}, - {id: 'application', name: this.labelMapper('application-resource-title')}, - {id: 'project', name: this.labelMapper('project-resource-title'), disabled: this.createProjectResource()}, - ]; - - this.subviewsDP = new ArrayDataProvider(this.subviews, {keyAttributes: 'id'}); - this.selectedSubview = ko.observable('script'); - this.selectedSubviewValueChangedHandler = (event) => { - this.selectedSubview(event.detail.value); - this.renderScript(event.detail.value); - }; - - this.scriptText = ko.observable(); - this.applicationText = ko.observable(); - this.projectText = ko.observable(); - - this.vzApplicationResourceGenerator = new VerrazzanoApplicationResourceGenerator(); - this.vzProjectResourceGenerator = new VerrazzanoProjectResourceGenerator(); - - this.renderScript = (selectedSubview) => { - switch (selectedSubview) { - case 'script': - this.renderShellScript(this.shellScriptType()); - break; - - case 'application': - this.renderApplicationResource(); - break; - - case 'project': - this.renderProjectResource(); - break; - } - }; - - this.renderShellScript = (scriptLanguage) => { - const generator = new VerrazzanoApplicationScriptGenerator(scriptLanguage); - this.scriptText(generator.generate().join('\n')); - }; - - this.renderApplicationResource = () => { - this.applicationText(this.vzApplicationResourceGenerator.generate().join('\n')); - }; - - this.renderProjectResource = () => { - this.projectText(this.vzProjectResourceGenerator.generate().join('\n')); - }; - - this.renderScript(this.selectedSubview()); - - this.downloadDeployer = () => { - const format = this.shellScriptType(); - const generator = new VerrazzanoApplicationScriptGenerator(format); - const lines = generator.generate(); - const fileType = i18n.t('script-file-type-label', { - type: i18n.t('nav-vz-component'), - subType: i18n.t('vz-install-code-script-title') - }); - const formatLabel = this.shellLabelMapper(format + '-label'); - - window.api.ipc.send('download-file', lines, fileType, format, formatLabel); - }; - - this.downloadApplicationResource = () => { - const generator = this.vzApplicationResourceGenerator; - const lines = generator.generate(); - const fileType = i18n.t('vz-application-code-application-resource-title'); - const formatLabel = this.shellLabelMapper('resource-file-format'); - - window.api.ipc.send('download-file', lines, fileType, 'yaml', formatLabel); - }; - - this.downloadProjectResource = () => { - const generator = this.vzProjectResourceGenerator; - const lines = generator.generate(); - const fileType = i18n.t('vz-application-code-project-resource-title'); - const formatLabel = this.shellLabelMapper('resource-file-format'); - - window.api.ipc.send('download-file', lines, fileType, 'yaml', formatLabel); - }; - } - - return VerrazzanoApplicationCodeViewModel; -}); diff --git a/webui/src/js/viewModels/vz-application-design-view.js b/webui/src/js/viewModels/vz-application-design-view.js deleted file mode 100644 index c385c4247..000000000 --- a/webui/src/js/viewModels/vz-application-design-view.js +++ /dev/null @@ -1,658 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['models/wkt-project', 'accUtils', 'utils/common-utilities', 'knockout', 'utils/i18n', 'ojs/ojbufferingdataprovider', - 'ojs/ojarraydataprovider', 'utils/dialog-helper', 'utils/validation-helper', 'utils/k8s-helper', 'utils/view-helper', - 'ojs/ojlistdataproviderview', 'ojs/ojconverter-number', 'utils/vz-get-installed-version', 'utils/wkt-logger', - 'ojs/ojmessaging', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojformlayout', 'ojs/ojcollapsible', - 'ojs/ojselectsingle', 'ojs/ojselectcombobox', 'ojs/ojlistview', 'ojs/ojtable', 'ojs/ojswitch', 'ojs/ojinputnumber', - 'ojs/ojradioset', 'ojs/ojaccordion'], -function (project, accUtils, utils, ko, i18n, BufferingDataProvider, ArrayDataProvider, dialogHelper, - validationHelper, k8sHelper, viewHelper, ListDataProviderView, ojConverterNumber, verrazzanoInstallVersionChecker) { - function VerrazzanoApplicationDesignViewModel() { - - this.connected = () => { - accUtils.announce('Verrazzano Application Design View page loaded.', 'assertive'); - - this.populateObservableSecrets(); - this.populateObservableClusters(); - }; - - this.labelMapper = (labelId, payload) => { - if (labelId.startsWith('page-design-')) { - return i18n.t(labelId); - } - return i18n.t(`vz-application-design-${labelId}`, payload); - }; - - this.project = project; - this.i18n = i18n; - - this.getInstalledVersionNumber = () => { - verrazzanoInstallVersionChecker.startVerrazzanoInstallVersionCheck().then(); - }; - - this.components = this.project.vzApplication.components; - this.componentsDataProvider = new ArrayDataProvider(this.components.observable, { keyAttributes: 'name' }); - this.hasComponents = ko.computed(() => this.components.observable().length > 0); - - // eslint-disable-next-line no-unused-vars - this.disableComponentDeleteButton = (index) => { - return false; - }; - - this.deleteApplicationComponent = (index) => { - this.project.vzApplication.components.removeItemByIndex(index); - }; - - this.integerConverter = new ojConverterNumber.IntlNumberConverter({ - style: 'decimal', - roundingMode: 'HALF_DOWN', - maximumFractionDigits: 0 - }); - - this.getValidationObject = (flowNameKey) => { - const validationObject = validationHelper.createValidatableObject(flowNameKey); - const kubectlFormConfig = validationObject.getDefaultConfigObject(); - kubectlFormConfig.formName = 'kubectl-form-name'; - - validationObject.addField('kubectl-exe-file-path-label', - validationHelper.validateRequiredField(this.project.kubectl.executableFilePath.value), kubectlFormConfig); - - const vzAppFormConfig = validationObject.getDefaultConfigObject(); - vzAppFormConfig.formName = 'vz-application-design-form-name'; - - validationObject.addField('vz-application-design-namespace-label', - this.project.k8sDomain.kubernetesNamespace.validate(true), vzAppFormConfig); - return validationObject; - }; - - this.addComponent = async () => { - // First, determine if the required fields are set... - const errTitle = this.labelMapper('add-component-validation-error-title'); - const validationObject = this.getValidationObject('vz-application-design-add-component-flow-nane'); - if (validationObject.hasValidationErrors()) { - const validationErrorDialogConfig = validationObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(); - } - - // Next, get the list of components deployed in the namespace and filter out those already added. - // - const inUseComponentNames = this.components.value.map(component => component.name); - const kubectlExe = this.project.kubectl.executableFilePath.value; - const kubectlOptions = k8sHelper.getKubectlOptions(); - const namespace = this.project.k8sDomain.kubernetesNamespace.value; - - const busyDialogMessage = this.labelMapper('get-components-in-progress', { namespace }); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.openBusyDialog(busyDialogMessage, 0); - const componentNamesResult = - await window.api.ipc.invoke('get-verrazzano-component-names', kubectlExe, namespace, kubectlOptions); - dialogHelper.closeBusyDialog(); - - if (!componentNamesResult.isSuccess) { - const errMessage = this.labelMapper('get-components-error-message', { error: componentNamesResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - const availableComponentNames = componentNamesResult.payload - .filter(componentName => !inUseComponentNames.includes(componentName)) - .map(componentName => { - return { value: componentName, label: componentName }; - }); - - dialogHelper.promptDialog('choose-component-dialog', { availableComponentNames }).then(result => { - // no result indicates operation was cancelled - if (result && result.componentNames) { - for(const componentName of result.componentNames) { - this.project.vzApplication.components.addNewItem({ - name: componentName, - ingressTraitEnable: false, - manualScalerTraitEnabled: false, - metricsTraitEnabled: false, - loggingTraitEnabled: false, - }); - } - this.components.observable.sort((a, b) => a.name.localeCompare(b.name)); - - // this shouldn't be needed, but duplicate entries will show in the components accordion - // if multiple components are added at once. - this.components.observable.sort(); - - // this shouldn't be needed, but when a new component is added, - // the accordion control doesn't enforce "single collapsible open" behavior. - const accordion = $('#componentsList')[0]; - viewHelper.componentReady(accordion).then(() => { - accordion.refresh(); - }); - } - }); - }; - - this.observableSecrets = ko.observableArray(); - this.observableClusters = ko.observableArray(); - - this.populateObservableSecrets = () => { - const secretsArray = this.project.vzApplication.secrets.value.map(secretName => { - return { name: secretName }; - }); - this.observableSecrets(secretsArray); - }; - - this.populateObservableClusters = () => { - const clustersArray = this.project.vzApplication.placementClusters.value.map(clusterName => { - return { name: clusterName }; - }); - this.observableClusters(clustersArray); - }; - - this.mapFields = (item) => { - const data = item.data; - return { - data: { label: data.name, value: data.name }, - metadata: { key: data.name } - }; - }; - - this.mapFieldsFilterCriterion = (filter) => { - return { - op: '$or', - criteria: [ - { op: filter.op, attribute: 'name', value: filter.value }, - ], - }; - }; - - this.dataMapping = { - mapFields: this.mapFields, - mapFilterCriterion: this.mapFieldsFilterCriterion - }; - - this.secretsArrayDataProvder = new ArrayDataProvider(this.observableSecrets, { keyAttributes: 'name' }); - this.secretsDataProvider = new ListDataProviderView(this.secretsArrayDataProvder, { dataMapping: this.dataMapping }); - this.clustersArrayDataProvider = new ArrayDataProvider(this.observableClusters, { keyAttributes: 'name' }); - this.clustersDataProvider = new ListDataProviderView(this.clustersArrayDataProvider, { dataMapping: this.dataMapping }); - - this.getDomainSecrets = () => { - const defaultSecretNames = []; - if (this.project.k8sDomain.imageRegistryPullRequireAuthentication.value && this.project.k8sDomain.imageRegistryPullSecretName.value) { - defaultSecretNames.push(this.project.k8sDomain.imageRegistryPullSecretName.value); - } - - if (this.project.image.useAuxImage && this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.value - && this.project.k8sDomain.auxImageRegistryPullSecretName.value) { - defaultSecretNames.push(this.project.k8sDomain.auxImageRegistryPullSecretName.value); - } - - if (this.project.k8sDomain.credentialsSecretName.value) { - defaultSecretNames.push(this.project.k8sDomain.credentialsSecretName.value); - } - - if (this.project.settings.targetDomainLocation.value === 'mii') { - if (this.project.k8sDomain.runtimeSecretName.value) { - defaultSecretNames.push(this.project.k8sDomain.runtimeSecretName.value); - } - - const domainSecrets = this.project.k8sDomain.secrets.value; - if (Array.isArray(domainSecrets) && domainSecrets.length > 0) { - const domainSecretNames = domainSecrets.map(domainSecret => domainSecret.name); - defaultSecretNames.push(...domainSecretNames); - } - } - - return defaultSecretNames; - }; - - this.chooseSecrets = async () => { - const errTitleKey = 'vz-application-design-choose-secrets-validation-error-title'; - const errMessageKey = 'vz-application-design-get-secrets-error-message'; - const availableSecretNames = await this._getAvailableSecretNames(errTitleKey, errMessageKey); - if (!availableSecretNames) { - return Promise.resolve(); - } - - const selectedSecretNames = - this.project.vzApplication.secrets.hasValue() ? this.project.vzApplication.secrets.value : this.getDomainSecrets(); - const args = { selectedSecretNames, availableSecretNames }; - - dialogHelper.promptDialog('choose-secrets-dialog', args).then(result => { - // no result indicates operation was cancelled - if (result && result.secretNames) { - this.project.vzApplication.secrets.value = result.secretNames; - this.populateObservableSecrets(); - } - }); - }; - - this.chooseIngressTraitSecret = async (component) => { - const errTitleKey = 'vz-application-design-choose-ingress-trait-secret-validation-error-title'; - const errMessageKey = 'vz-application-design-choose-ingress-trait-get-secrets-error-message'; - const availableSecretNames = await this._getAvailableSecretNames(errTitleKey, errMessageKey); - if (!availableSecretNames) { - return Promise.resolve(); - } - - const selectedSecretNameObservable = this.componentObservable(component, 'ingressTraitSecretName'); - const args = { - selectedSecretName: selectedSecretNameObservable(), - availableSecretNames, - }; - dialogHelper.promptDialog('choose-secret-dialog', args).then(result => { - // no result indicates operation was cancelled - if (result && result.secretName) { - selectedSecretNameObservable(result.secretName); - } - }); - }; - - this.chooseMetricsTraitSecret = async (component) => { - const errTitleKey = 'vz-application-design-choose-metrics-trait-secret-validation-error-title'; - const errMessageKey = 'vz-application-design-choose-metrics-trait-get-secrets-error-message'; - const availableSecretNames = await this._getAvailableSecretNames(errTitleKey, errMessageKey); - if (!availableSecretNames) { - return Promise.resolve(); - } - - const selectedSecretNameObservable = this.componentObservable(component, 'metricsTraitSecretName'); - const args = { - selectedSecretName: selectedSecretNameObservable(), - availableSecretNames, - }; - dialogHelper.promptDialog('choose-secret-dialog', args).then(result => { - // no result indicates operation was cancelled - if (result && result.secretName) { - selectedSecretNameObservable(result.secretName); - } - }); - }; - - this._getAvailableSecretNames = async (errTitleKey, errMessageKey) => { - // First, determine if the required fields are set... - const errTitle = i18n.t(errTitleKey); - const validationObject = this.getValidationObject('vz-application-design-choose-secrets-flow-nane'); - if (validationObject.hasValidationErrors()) { - const validationErrorDialogConfig = validationObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(); - } - - // Next, get the list of secrets deployed in the namespace. - // - const kubectlExe = this.project.kubectl.executableFilePath.value; - const kubectlOptions = k8sHelper.getKubectlOptions(); - const namespace = this.project.k8sDomain.kubernetesNamespace.value; - - const busyDialogMessage = this.labelMapper('get-secrets-in-progress', { namespace }); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar'); - dialogHelper.openBusyDialog(busyDialogMessage, 0); - const secretNamesResult = - await window.api.ipc.invoke('get-verrazzano-secret-names', kubectlExe, namespace, kubectlOptions); - dialogHelper.closeBusyDialog(); - - if (!secretNamesResult.isSuccess) { - const errMessage = i18n.t(errMessageKey, { error: secretNamesResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - return secretNamesResult.payload.map(secretName => { - return { name: secretName, label: secretName }; - }); - }; - - this.choosePrometheusDeployment = async (component) => { - // First, determine if the required fields are set... - const errTitle = 'vz-application-design-choose-deployment-validation-error-title'; - const validationObject = this.getValidationObject('vz-application-design-choose-deployment-flow-nane'); - if (validationObject.hasValidationErrors()) { - const validationErrorDialogConfig = validationObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(); - } - - const kubectlExe = this.project.kubectl.executableFilePath.value; - const kubectlOptions = k8sHelper.getKubectlOptions(); - const kubectlContext = this.project.kubectl.kubeConfigContextToUse.value; - - let busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar', 0 / 2.0); - const useContextResult = - await window.api.ipc.invoke('kubectl-set-current-context', kubectlExe, kubectlContext, kubectlOptions); - if (!useContextResult.isSuccess) { - const errMessage = this.labelMapper('use-context-error-message', { error: useContextResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - busyDialogMessage = this.labelMapper('get-deployments-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar', 1 / 2.0); - const deploymentNamesResult = - await window.api.ipc.invoke('get-verrazzano-deployment-names-all-namespaces', kubectlExe, kubectlOptions); - dialogHelper.closeBusyDialog(); - - if (!deploymentNamesResult.isSuccess) { - const errMessage = this.labelMapper('get-deployments-error-message', { error: deploymentNamesResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - const availableDeploymentNames = deploymentNamesResult.payload.map(deploymentName => { - return { name: deploymentName, label: deploymentName }; - }); - const selectedDeploymentNameObservable = this.componentObservable(component, 'metricsTraitDeploymentName'); - const args = { - selectedDeploymentName: selectedDeploymentNameObservable(), - availableDeploymentNames, - }; - dialogHelper.promptDialog('choose-deployment-dialog', args).then(result => { - // no result indicates operation was cancelled - if (result && result.deploymentName) { - selectedDeploymentNameObservable(result.deploymentName); - } - }); - }; - - this.chooseVerrazzanoClusters = async () => { - // First, determine if the required fields are set... - const errTitle = 'vz-application-design-choose-clusters-validation-error-title'; - const validationObject = this.getValidationObject('vz-application-design-choose-clusters-flow-nane'); - if (validationObject.hasValidationErrors()) { - const validationErrorDialogConfig = validationObject.getValidationErrorDialogConfig(errTitle); - dialogHelper.openDialog('validation-error-dialog', validationErrorDialogConfig); - return Promise.resolve(); - } - - const kubectlExe = this.project.kubectl.executableFilePath.value; - const kubectlOptions = k8sHelper.getKubectlOptions(); - const kubectlContext = this.project.kubectl.kubeConfigContextToUse.value; - - let busyDialogMessage = i18n.t('flow-kubectl-use-context-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar', 0 / 2.0); - const useContextResult = - await window.api.ipc.invoke('kubectl-set-current-context', kubectlExe, kubectlContext, kubectlOptions); - if (!useContextResult.isSuccess) { - const errMessage = this.labelMapper('use-context-error-message', { error: useContextResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - busyDialogMessage = this.labelMapper('get-clusters-in-progress'); - dialogHelper.updateBusyDialog(busyDialogMessage, 1 / 2.0); - - const clusterNamesResult = - await window.api.ipc.invoke('get-verrazzano-cluster-names', kubectlExe, kubectlOptions); - dialogHelper.closeBusyDialog(); - - if (!clusterNamesResult.isSuccess) { - const errMessage = this.labelMapper('get-clusters-error-message', { error: clusterNamesResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return Promise.resolve(); - } - - const availableClusterNames = clusterNamesResult.payload.map(clusterName => { - return { name: clusterName }; - }); - const selectedClusterNames = this.project.vzApplication.placementClusters.value; - - dialogHelper.promptDialog('choose-clusters-dialog', { selectedClusterNames, availableClusterNames }).then(result => { - // no result indicates operation was cancelled - if (result && result.clusterNames) { - this.project.vzApplication.placementClusters.value = result.clusterNames; - this.populateObservableClusters(); - } - }); - }; - - this.getCollapsibleId = (index) => { - return `componentCollapsible${index + 1}`; - }; - - this.componentObservables = {}; - this.componentIngressTraitRulesDataProviders = {}; - - // create an observable that will read/write from the component object field - this.componentObservable = (component, fieldName) => { - const key = component.name + '/' + fieldName; - let observable = this.componentObservables[key]; - - if (!observable) { - observable = fieldName === 'ingressTraitRules' ? ko.observableArray(component[fieldName]) : ko.observable(component[fieldName]); - observable.subscribe(value => { - // Convert empty arrays or strings to undefined so that they are not persisted in the project file. - if ((Array.isArray(value) && value.length === 0) || (typeof value === 'string' && value.length === 0) || value === null) { - component[fieldName] = undefined; - } else { - component[fieldName] = value; - } - this.project.vzApplication.componentChanged(); - }); - this.componentObservables[key] = observable; - } - return observable; - }; - - // this is dynamic to allow i18n fields to load correctly - this.ingressTraitRulesColumnData = [ - { - headerText: this.labelMapper('ingress-trait-rules-hosts-label'), - 'resizable': 'enabled', - sortable: 'disable' - }, - { - headerText: this.labelMapper('ingress-trait-rules-first-path-label'), - 'resizable': 'enabled', - sortable: 'disable' - }, - { - headerText: this.labelMapper('ingress-trait-rules-first-path-url-label'), - resizable: 'enabled', - sortable: 'disable', - width: '35%' - }, - { - headerText: this.labelMapper('ingress-trait-rules-destination-label'), - sortable: 'disable' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'chooseHeaderTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - // display in the first path column, example "/path (regex)" - this.getFirstPathText = (rowData) => { - let result = null; - const paths = rowData.paths; - if (Array.isArray(paths) && paths.length > 0) { - result = paths[0].path; - if(result && result.length) { - const pathType = paths[0].pathType; - if(pathType && pathType !== 'exact') { - result += ` (${pathType})`; - } - } - } - return result; - }; - - // display in the destination column, example "host:port" - this.getDestinationText = (rowData) => { - let result = rowData.destinationHost; - if(result) { - const port = rowData.destinationPort; - if(port != null) { - result += `:${port}`; - } - } - return result; - }; - - function getRuleHost(rowData) { - const ruleHostsText = rowData.hosts; - if(ruleHostsText) { - const ruleHosts = ruleHostsText.split(',').map(host => host.trim()); - if(ruleHosts.length) { - return ruleHosts[0]; - } - } - return null; - } - - function getUrl(ruleData, generatedHostname) { - let urlHost = ''; - if(generatedHostname && generatedHostname.length) { - urlHost = generatedHostname; - } - - const ruleHost = getRuleHost(ruleData); - if(ruleHost) { - urlHost = ruleHost; - } - - let result = 'https://' + urlHost; - - let urlPath = ''; - const paths = ruleData.paths; - if(paths && paths.length) { - urlPath = paths[0].path; - if(urlPath && urlPath.length) { - result += urlPath; - } - } - - return result; - } - - function isLinkable(ruleData, hostnames) { - if(!hostnames || !hostnames.length) { - return false; - } - - const ruleHost = getRuleHost(ruleData); - if(ruleHost && !hostnames.includes(ruleHost)) { - return false; - } - - const paths = ruleData.paths; - if(!paths || !paths.length) { - return false; - } - - return paths[0].pathType !== 'regex'; - } - - this.updateUrls = async(component) => { - const busyDialogMessage = this.labelMapper('get-hosts-in-progress'); - dialogHelper.openBusyDialog(busyDialogMessage, 'bar', 1 / 2.0); - - const kubectlExe = this.project.kubectl.executableFilePath.value; - const kubectlOptions = k8sHelper.getKubectlOptions(); - const applicationName = project.vzApplication.applicationName.value; - const applicationNamespace = project.k8sDomain.kubernetesNamespace.value; - const hostsResult = await window.api.ipc.invoke('get-verrazzano-host-names', kubectlExe, applicationName, - applicationNamespace, kubectlOptions); - - dialogHelper.closeBusyDialog(); - - if (!hostsResult.isSuccess) { - const errTitle = this.labelMapper('get-hosts-error-title'); - const errMessage = this.labelMapper('get-hosts-error-message', { error: hostsResult.reason }); - await window.api.ipc.invoke('show-error-message', errTitle, errMessage); - return; - } - - const observableRules = this.componentObservable(component, 'ingressTraitRules'); - for(const ruleData of observableRules()) { - const canLink = isLinkable(ruleData, hostsResult.hostnames); - const url = getUrl(ruleData, hostsResult.generatedHostname); - - if((ruleData.url !== url) || (ruleData.canLink !== canLink)) { - const newData = {...ruleData, canLink: canLink, url: url }; - observableRules.replace(ruleData, newData); - } - } - }; - - this.componentsIngressTraitRulesDataProvider = (component) => { - const key = component.name; - let provider = this.componentIngressTraitRulesDataProviders[key]; - - if (!provider) { - const observableArray = this.componentObservable(component, 'ingressTraitRules'); - provider = new ArrayDataProvider(observableArray, { keyAttributes: 'uid' }); - this.componentIngressTraitRulesDataProviders[key] = provider; - } - - return provider; - }; - - this._findComponentIndex = (component) => { - return this.components.value.findIndex(c => c.name === component.name); - }; - - this.handleAddRule = async (event, context, bindingContext) => { - const component = bindingContext.component.data; - - const observableArray = this.componentObservable(component, 'ingressTraitRules'); - const newRule = { uid: utils.getShortUuid() }; - dialogHelper.promptDialog('vz-ingress-trait-rule-edit-dialog', newRule).then(result => { - if (result && result.rule) { - observableArray.push(result.rule); - } - }); - }; - - this.handleEditRule = (event, rowContext, bindingContext) => { - const component = bindingContext.component.data; - - const observableArray = this.componentObservable(component, 'ingressTraitRules'); - const rule = observableArray()[rowContext.item.index]; - const ruleOptions = { ...rule }; - - dialogHelper.promptDialog('vz-ingress-trait-rule-edit-dialog', ruleOptions).then(result => { - if (result && result.rule) { - const mergedRule = this.mergeRule(rule, result.rule); - observableArray.replace(rule, mergedRule); - } - }); - }; - - this.handleDeleteRule = (event, rowContext, bindingContext) => { - const component = bindingContext.component.data; - - const observableArray = this.componentObservable(component, 'ingressTraitRules'); - observableArray.splice(rowContext.item.index, 1); - }; - - this.mergeRule = (originalRule, ruleChanges) => { - const resultRule = { ...originalRule }; - const keysToMerge = Object.keys(ruleChanges).filter(key => key !== 'uid'); - keysToMerge.forEach(key => { - if ((typeof ruleChanges[key] === 'string' || Array.isArray(ruleChanges[key])) && ruleChanges[key].length === 0) { - resultRule[key] = undefined; - } else { - resultRule[key] = ruleChanges[key]; - } - }); - return resultRule; - }; - } - - return VerrazzanoApplicationDesignViewModel; -}); diff --git a/webui/src/js/viewModels/vz-application-page.js b/webui/src/js/viewModels/vz-application-page.js deleted file mode 100644 index 3951e0c52..000000000 --- a/webui/src/js/viewModels/vz-application-page.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @license - * Copyright (c) 2021, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['utils/i18n', 'accUtils', 'knockout', 'ojs/ojcorerouter', 'ojs/ojmodulerouter-adapter', - 'ojs/ojarraydataprovider', 'utils/vz-application-deployer', 'utils/vz-application-status-checker', - 'utils/vz-application-undeployer'], -function(i18n, accUtils, ko, CoreRouter, ModuleRouterAdapter, ArrayDataProvider, vzApplicationDeployer, - vzApplicationStatusChecker, vzApplicationUndeployer) { - function VerrazzanoApplicationViewModel(args) { - - this.connected = () => { - accUtils.announce('Verrazzano Application page loaded.', 'assertive'); - // Implement further logic if needed - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-page-${labelId}`); - }; - - this.disableDeployApplication = ko.observable(false); - this.disableGetApplicationStatus = ko.observable(false); - this.disableUndeployApplication = ko.observable(false); - - this.deployApplication = () => { - vzApplicationDeployer.startDeployApplication().then(); - }; - - this.getApplicationStatus = async () => { - await vzApplicationStatusChecker.startCheckApplicationStatus(); - }; - - this.undeployApplication = () => { - vzApplicationUndeployer.startUndeployApplication().then(); - }; - - // Setup for Design / Code View tab selection. - - const navData = [ - { path: '', redirect: 'vz-application-design-view' }, - { path: 'vz-application-design-view', detail: { label: i18n.t('page-design-view') } }, - { path: 'vz-application-code-view', detail: { label: i18n.t('page-code-view') } } - ]; - - this.selectedItem = ko.observable('vz-application-design-view'); - this.dataProvider = new ArrayDataProvider(navData.slice(1), { keyAttributes: 'path' }); - - let router = args.parentRouter.createChildRouter(navData); - router.sync(); - - this.moduleAdapter = new ModuleRouterAdapter(router); - - this.selectedItem.subscribe((newValue) => { - router.go({ path: newValue }); - }); - } - - /* - * Returns a constructor for the ViewModel. - */ - return VerrazzanoApplicationViewModel; -}); diff --git a/webui/src/js/viewModels/vz-application-status-choose-cluster-dialog.js b/webui/src/js/viewModels/vz-application-status-choose-cluster-dialog.js deleted file mode 100644 index 5552ba4d2..000000000 --- a/webui/src/js/viewModels/vz-application-status-choose-cluster-dialog.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @license - * Copyright (c) 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'utils/observable-properties', 'utils/validation-helper', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', - 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, props, validationHelper, ArrayDataProvider) { - function VerrazzanoApplicationStatusChooseClusterDialogModel(args) { - const DIALOG_SELECTOR = '#verrazzanoApplicationStatusChooseClusterDialog'; - - this.i18n = i18n; - this.targetClusterNames = args.targetClusters; - this.selectedTargetClusterName = ko.observable(); - this.targetClusterNamesDP = - new ArrayDataProvider(this.targetClusterNames, { keyAttributes: 'name' }); - - this.connected = () => { - accUtils.announce('Choose Verrazzano application status choose cluster dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-status-choose-cluster-${labelId}`); - }; - - this.okInput = () => { - $(DIALOG_SELECTOR)[0].close(); - - const result = {}; - result.clusterName = this.selectedTargetClusterName(); - args.setValue(result); - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return VerrazzanoApplicationStatusChooseClusterDialogModel; -}); diff --git a/webui/src/js/viewModels/vz-application-status-dialog.js b/webui/src/js/viewModels/vz-application-status-dialog.js deleted file mode 100644 index 162274b02..000000000 --- a/webui/src/js/viewModels/vz-application-status-dialog.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'js-yaml', 'utils/i18n', 'models/wkt-project', 'utils/view-helper', - 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, jsyaml, i18n, project, viewHelper) { - function VzApplicationStatusDialogModel(args) { - const DIALOG_SELECTOR = '#applicationStatusDialog'; - - this.project = project; - this.clusterName = args.clusterName; - this.domainStatus = args.domainStatus; - this.domainOverallStatus = args.domainOverallStatus; - - this.title = i18n.t('vz-application-status-title', - { clusterName: this.clusterName, application: args.applicationName }); - this.dialogTitle = i18n.t('vz-application-status-domain-title', { domain: args.domainName }); - this.domainMessage = this.domainStatus.message; - - this.connected = () => { - accUtils.announce('Show application status dialog loaded.', 'assertive'); - - this.dialogContainer = $(DIALOG_SELECTOR)[0]; - - // open the dialog when the container is ready. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - viewHelper.componentReady(this.dialogContainer).then(() => { - this.dialogContainer.open(); - }); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`domain-design-${labelId}`); - }; - - this.anyLabelMapper = (labelId, arg) => { - return i18n.t(labelId, arg); - }; - - this.okInput = () => { - this.dialogContainer.close(); - }; - - this.makeYamlOutput = (data) => { - let result = ''; - if (typeof data !== 'undefined') { - const options = { lineWidth: -1 }; - result = data.map(item => { return jsyaml.dump(item, options); }).join('\n'); - } - return result; - }; - - this.domainConditions = ''; - this.domainClusterStatus = ''; - this.domainServerStatus = ''; - this.introspectJobFailureCount = 0; - this.domainHasError = false; - - if ('status' in this.domainStatus && 'conditions' in this.domainStatus.status) { - this.domainConditions = this.makeYamlOutput(this.domainStatus.status.conditions); - this.domainClusterStatus = this.makeYamlOutput(this.domainStatus.status.clusters); - this.domainServerStatus = this.makeYamlOutput(this.domainStatus.status.servers); - this.domainName = this.domainStatus.spec.domainUID; - this.introspectJobFailureCount = this.domainStatus.status.introspectJobFailureCount; - const conditions = this.domainStatus.status.conditions; - conditions.sort((a, b) => { - if ( a.lastTransitionTime < b.lastTransitionTime ){ - return 1; - } - if ( a.lastTransitionTime > b.lastTransitionTime){ - return -1; - } - return 0; - }); - - for (const condition of conditions) { - if (condition.type === 'Failed' && typeof condition.message !== 'undefined') { - this.domainErrorMessage = condition.message; - this.domainHasError = true; - break; - } - } - } - - } - - /* - * Returns a constructor for the ViewModel. - */ - return VzApplicationStatusDialogModel; -}); diff --git a/webui/src/js/viewModels/vz-component-code-view.js b/webui/src/js/viewModels/vz-component-code-view.js deleted file mode 100644 index ca40a0ae1..000000000 --- a/webui/src/js/viewModels/vz-component-code-view.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['accUtils', 'knockout', 'models/wkt-project', 'utils/vz-component-script-generator', - 'utils/vz-component-configmap-generator', 'utils/vz-component-resource-generator', 'utils/i18n', - 'ojs/ojarraydataprovider', 'utils/wkt-logger', 'ojs/ojinputtext', 'ojs/ojnavigationlist', 'ojs/ojswitcher', - 'ojs/ojknockout'], -function (accUtils, ko, project, VerrazzanoComponentScriptGenerator, VerrazzanoComponentConfigMapGenerator, - VerrazzanoComponentResourceGenerator, i18n, ArrayDataProvider, wktLogger) { - function VerrazzanoComponentCodeViewModel () { - this.project = project; - - let subscriptions = []; - - this.connected = () => { - accUtils.announce('Verrazzano Component code view loaded.', 'assertive'); - - // update code text if project changes - subscriptions.push(project.postOpen.subscribe(() => { - this.renderScript(this.selectedSubview()); - })); - - this.renderScript(this.selectedSubview()); - }; - - this.disconnected = () => { - subscriptions.forEach((subscription) => { - subscription.dispose(); - }); - }; - - this.project = project; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-component-code-${labelId}`); - }; - - this.shellLabelMapper = (labelId) => { - return i18n.t(`script-${labelId}`); - }; - - this.shellScriptType = ko.observable(VerrazzanoComponentScriptGenerator.getDefaultScriptingLanguage()); - const shellScriptTypes = [ - {key: 'sh', label: this.shellLabelMapper('sh-label')}, - {key: 'ps1', label: this.shellLabelMapper('ps1-label')}, - {key: 'cmd', label: this.shellLabelMapper('cmd-label')} - ]; - this.shellScriptTypesDP = new ArrayDataProvider(shellScriptTypes, {keyAttributes: 'key'}); - this.shellScriptTypeSelectValueChangedHandler = (event) => { - this.shellScriptType(event.detail.value); - this.renderShellScript(event.detail.value); - }; - - - this.isConfigMapDisabled = () => { - return this.project.settings.targetDomainLocation.value !== 'mii'; - }; - - this.subviews = [ - {id: 'script', name: this.labelMapper('script-title')}, - {id: 'component', name: this.labelMapper('component-resource-title')}, - {id: 'configMap', name: this.labelMapper('configmap-resource-title'), - disabled: this.isConfigMapDisabled()} - ]; - - this.subviewsDP = new ArrayDataProvider(this.subviews, {keyAttributes: 'id'}); - this.selectedSubview = ko.observable('script'); - this.selectedSubviewValueChangedHandler = (event) => { - wktLogger.debug('selectedSubviewValueChangedHandler() called for %s', event.detail.value); - this.selectedSubview(event.detail.value); - this.renderScript(event.detail.value); - }; - - this.scriptText = ko.observable(); - this.componentText = ko.observable(); - this.configMapText = ko.observable(); - - this.vzVersion = this.project.vzInstall.actualInstalledVersion.observable() || undefined; - this.vzComponentConfigMapGenerator = new VerrazzanoComponentConfigMapGenerator(); - this.vzComponentResourceGenerator = new VerrazzanoComponentResourceGenerator(this.vzVersion); - - this.renderScript = (selectedSubview) => { - switch (selectedSubview) { - case 'script': - this.renderShellScript(this.shellScriptType()); - break; - - case 'configMap': - this.renderConfigMap(); - break; - - case 'component': - this.renderComponentResource(); - } - }; - - this.renderShellScript = (scriptLanguage) => { - const generator = new VerrazzanoComponentScriptGenerator(scriptLanguage); - this.scriptText(generator.generate().join('\n')); - }; - - this.renderConfigMap = () => { - this.configMapText(this.vzComponentConfigMapGenerator.generate().join('\n')); - }; - - this.renderComponentResource = () => { - this.componentText(this.vzComponentResourceGenerator.generate().join('\n')); - }; - - this.renderScript(this.selectedSubview()); - - this.downloadInstaller = () => { - const format = this.shellScriptType(); - const generator = new VerrazzanoComponentScriptGenerator(format); - const lines = generator.generate(); - const fileType = i18n.t('script-file-type-label', { - type: i18n.t('nav-vz-component'), - subType: i18n.t('vz-install-code-script-title') - }); - const formatLabel = this.shellLabelMapper(format + '-label'); - - window.api.ipc.send('download-file', lines, fileType, format, formatLabel); - }; - - this.downloadComponentResource = () => { - const generator = this.vzComponentResourceGenerator; - const lines = generator.generate(); - const fileType = i18n.t('vz-component-code-component-resource-title'); - const formatLabel = this.shellLabelMapper('resource-file-format'); - - window.api.ipc.send('download-file', lines, fileType, 'yaml', formatLabel); - }; - - this.downloadConfigMap = () => { - const generator = this.vzComponentConfigMapGenerator; - const lines = generator.generate(); - const fileType = i18n.t('vz-component-code-configmap-resource-title'); - const formatLabel = this.shellLabelMapper('resource-file-format'); - - window.api.ipc.send('download-file', lines, fileType, 'yaml', formatLabel); - }; - } - - return VerrazzanoComponentCodeViewModel; -}); diff --git a/webui/src/js/viewModels/vz-component-design-view.js b/webui/src/js/viewModels/vz-component-design-view.js deleted file mode 100644 index 63ef33979..000000000 --- a/webui/src/js/viewModels/vz-component-design-view.js +++ /dev/null @@ -1,656 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['models/wkt-project', 'accUtils', 'utils/common-utilities', 'knockout', 'utils/i18n', 'utils/screen-utils', - 'ojs/ojbufferingdataprovider', 'ojs/ojarraydataprovider', 'ojs/ojconverter-number', 'utils/dialog-helper', - 'utils/view-helper', 'utils/vz-get-installed-version', 'utils/wit-inspector', 'utils/aux-image-helper', - 'ojs/ojmodule-element-utils', 'ojs/ojmodule', - 'utils/wkt-logger', 'ojs/ojmessaging', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojformlayout', - 'ojs/ojcollapsible', 'ojs/ojselectsingle', 'ojs/ojlistview', 'ojs/ojtable', 'ojs/ojswitch', 'ojs/ojinputnumber', - 'ojs/ojradioset', 'ojs/ojselectcombobox'], -function (project, accUtils, utils, ko, i18n, screenUtils, BufferingDataProvider, ArrayDataProvider, - ojConverterNumber, dialogHelper, viewHelper, verrazzanoInstallVersionChecker, witInspector, auxImageHelper, - ModuleElementUtils) { - function VerrazzanoComponentDesignViewModel() { - - let subscriptions = []; - - this.connected = () => { - accUtils.announce('Verrazzano Component Design View page loaded.', 'assertive'); - - subscriptions.push(this.auxImageConfig.subscribe((newValue) => { - this.applyAuxImageConfig(newValue); - })); - - subscriptions.push(this.project.k8sDomain.domainNodeSelector.observable.subscribe(() => { - document.getElementById('domain-node-selector-table').refresh(); - })); - - subscriptions.push(project.image.createPrimaryImage.observable.subscribe(() => { - document.getElementById('create-image-switch').refresh(); - const primaryImageTag = document.getElementById('primary-image-tag'); - if (primaryImageTag) { - primaryImageTag.refresh(); - } - })); - - subscriptions.push(project.image.useAuxImage.observable.subscribe(() => { - this.auxImageConfig(this.computeAuxImageConfig()); - // change the primary image tag's help text based on the value of the switch? - const primaryImageTag = document.getElementById('primary-image-tag'); - if (primaryImageTag) { - primaryImageTag.refresh(); - } - })); - - subscriptions.push(project.image.createAuxImage.observable.subscribe(() => { - this.auxImageConfig(this.computeAuxImageConfig()); - const auxImageTag = document.getElementById('aux-image-tag'); - if (auxImageTag) { - viewHelper.componentReady(auxImageTag).then(() => { - auxImageTag.refresh(); - }); - } - })); - }; - - this.disconnected = () => { - subscriptions.forEach((subscription) => { - subscription.dispose(); - }); - }; - - this.project = project; - this.i18n = i18n; - - this.getInstalledVersionNumber = () => { - verrazzanoInstallVersionChecker.startVerrazzanoInstallVersionCheck().then(); - }; - - this.projectHasModel = () => { - return auxImageHelper.projectHasModel(); - }; - - this.projectUsingExternalImageContainingModel = () => { - return auxImageHelper.projectUsingExternalImageContainingModel(); - }; - - this.isDomainOnPV = ko.computed(() => { - return this.project.settings.targetDomainLocation.observable() === 'pv'; - }, this); - - this.isDomainInImage = ko.computed(() => { - return this.project.settings.targetDomainLocation.observable() === 'dii'; - }, this); - - this.isModelInImage = ko.computed(() => { - return this.project.settings.targetDomainLocation.observable() === 'mii'; - }, this); - - this.labelMapper = (labelId, payload) => { - if (labelId.startsWith('page-design-')) { - return i18n.t(labelId); - } - return i18n.t(`vz-component-design-${labelId}`, payload); - }; - - this.domainLabelMapper = (labelId, payload) => { - return i18n.t(`domain-design-${labelId}`, payload); - }; - - this.imageLabelMapper = (labelId, payload) => { - if (this.isDomainOnPV()) { - return i18n.t(`image-design-${labelId.replace(/^aux-/, 'domain-creation-')}`, payload); - } - return i18n.t(`image-design-${labelId}`, payload); - }; - - this.domainMiiPvLabelMapper = (labelId, payload) => { - if (this.isDomainOnPV()) { - return i18n.t(`domain-design-${labelId.replace(/^aux-/, 'domain-creation-') - .replace(/-aux-/, '-domain-creation-')}`, payload); - } - return i18n.t(`domain-design-${labelId}`, payload); - }; - - this.supportsDomainCreationImages = () => { - return auxImageHelper.supportsDomainCreationImages(); - }; - - this.usingDomainCreationImage = ko.computed(() => { - if (auxImageHelper.supportsDomainCreationImages()) { - return this.project.image.useAuxImage.observable(); - } - return false; - }, this); - - this.mainCreateImageSwitchHelp = ko.computed(() => { - if (this.project.image.useAuxImage.value || this.isDomainOnPV()) { - return this.imageLabelMapper('create-image-aux-help'); - } else { - return this.imageLabelMapper('create-image-help'); - } - }, this); - - this.mainImageTagHelpMII = () => { - let key = 'image-tag-mii-use-help'; - if (this.project.image.createPrimaryImage.value) { - key = 'image-tag-mii-create-help'; - if (this.project.image.useAuxImage.value) { - key = 'image-tag-mii-create-with-aux-help'; - } - } else if (this.project.image.useAuxImage.value) { - key = 'image-tag-mii-use-with-aux-help'; - } - return key; - }; - - this.mainImageTagHelpDII = () => { - let key = 'image-tag-dii-use-help'; - if (this.project.image.createPrimaryImage.value) { - key = 'image-tag-dii-create-help'; - } - return key; - }; - - this.mainImageTagHelpPV = () => { - let key = 'image-tag-pv-use-help'; - if (this.project.image.createPrimaryImage.value) { - key = 'image-tag-pv-create-help'; - } - return key; - }; - - this.mainImageTagHelp = ko.computed(() => { - let key = 'use-image-tag-help'; - - switch (this.project.settings.targetDomainLocation.value) { - case 'mii': - key = this.mainImageTagHelpMII(); - break; - - case 'dii': - key = this.mainImageTagHelpDII(); - break; - - case 'pv': - key = this.mainImageTagHelpPV(); - break; - } - return this.domainLabelMapper(key); - }, this); - - // Supports deprecated MII w/o aux image use case. - this.showPrimaryImageHomeFields = ko.computed(() => { - return this.project.settings.targetDomainLocation.observable() === 'mii' && - !this.project.image.createPrimaryImage.observable() && - !this.project.image.useAuxImage.observable(); - }, this); - - this.isPrimaryImageTagReadOnly = ko.computed(() => { - return this.project.image.createPrimaryImage.observable(); - }, this); - - this.isAuxImageTagReadOnly = ko.computed(() => { - return this.project.image.createAuxImage.observable(); - }, this); - - this.showAuxImageSourceFields = ko.computed(() => { - if (this.isModelInImage() || this.isDomainOnPV()) { - return this.project.image.useAuxImage.observable() && !this.project.image.createAuxImage.observable(); - } - return false; - }, this); - - this.auxImageTagHelp = ko.computed(() => { - let key = 'use-aux-image-tag-help'; - if (this.project.image.createAuxImage.observable()) { - key = 'create-aux-image-tag-help'; - } - return this.domainMiiPvLabelMapper(key); - }); - - this.creatingPvc = ko.computed(() => { - return !!(this.usingDomainCreationImage() && this.project.k8sDomain.createPvc.observable()); - }, this); - - this.pvcNameHelpText = ko.computed(() => { - if (this.creatingPvc()) { - return this.domainLabelMapper('pv-volume-claim-name-ro-help'); - } - return this.domainLabelMapper('pv-volume-claim-name-help'); - }); - - this.inspectPrimaryImageForWDTLocations = async () => { - await witInspector.startInspectPrimaryImage(); - }; - - this.inspectAuxiliaryImageForWDTLocations = async () => { - await witInspector.startInspectAuxiliaryImage(); - }; - - this.gotoCreateImage = () => { - screenUtils.gotoImageDesignPrimaryImageScreen(); - }; - - this.gotoCreateAuxImage = () => { - screenUtils.gotoImageDesignAuxiliaryImageScreen(); - }; - - this.applyAuxImageConfig = (newValue) => { - switch (newValue) { - case 'off': - project.image.useAuxImage.observable(false); - break; - - case 'use': - project.image.useAuxImage.observable(true); - project.image.createAuxImage.observable(false); - break; - - case 'create': - project.image.useAuxImage.observable(true); - project.image.createAuxImage.observable(true); - break; - } - }; - - this.computeAuxImageConfig = () => { - let value = 'off'; - if (this.project.image.useAuxImage.value) { - value = 'use'; - if (this.project.image.createAuxImage.value) { - value = 'create'; - } - } - return value; - }; - - this.auxImageConfig = ko.observable(this.computeAuxImageConfig()); - - this.getAuxImageDecision = ko.computed(() => { - let imageTag = `aux-image-config-${this.auxImageConfig()}-label`; - if (this.isDomainOnPV()) { - imageTag = imageTag.replace(/^aux-/, 'domain-creation-'); - } - return this.domainLabelMapper(imageTag); - }); - - this.integerConverter = new ojConverterNumber.IntlNumberConverter({ - style: 'decimal', - roundingMode: 'HALF_DOWN', - maximumFractionDigits: 0 - }); - - this.wdtDomainTypes = ko.computed(() => { - if (this.usingDomainCreationImage()) { - return [ - { value: 'WLS', label: i18n.t('image-design-wls-domain-type-label') }, - { value: 'RestrictedJRF', label: i18n.t('image-design-restricted-jrf-domain-type-label') }, - { value: 'JRF', label: i18n.t('image-design-jrf-domain-type-label') }, - ]; - } - // Disable JRF for MII domains. - // - return [ - { key: 'WLS', label: i18n.t('image-design-wls-domain-type-label') }, - { key: 'RestrictedJRF', label: i18n.t('image-design-restricted-jrf-domain-type-label') }, - ]; - }, this); - - this.wdtDomainTypesDP = ko.computed(() => { - if (this.usingDomainCreationImage()) { - return new ArrayDataProvider(this.wdtDomainTypes(), { keyAttributes: 'value' }); - } - return new ArrayDataProvider(this.wdtDomainTypes(), { keyAttributes: 'key' }); - }, this); - - this.showRcuSwitch = ko.computed(() => { - if (this.usingDomainCreationImage()) { - const domainType = this.project.k8sDomain.domainType.observable(); - return domainType !== 'WLS' && domainType !== 'RestrictedJRF'; - } - return false; - }, this); - - this.imageRegistryPullRequiresAuthentication = () => { - return this.project.k8sDomain.imageRegistryPullRequireAuthentication.observable(); - }; - - this.auxImageRegistryPullRequiresAuthentication = () => { - return this.project.k8sDomain.auxImageRegistryPullRequireAuthentication.observable(); - }; - - this.imagePullPolicies = [ - {key: 'IfNotPresent', label: i18n.t('wko-design-image-pull-if-not-present-label')}, - {key: 'Always', label: i18n.t('wko-design-image-pull-always-label')}, - {key: 'Never', label: i18n.t('wko-design-image-pull-never-label')} - ]; - this.imagePullPoliciesDP = new ArrayDataProvider(this.imagePullPolicies, {keyAttributes: 'key'}); - - this.usingAuxImage = ko.computed(() => { - if (this.isModelInImage() || auxImageHelper.supportsDomainCreationImages()) { - return this.project.image.useAuxImage.observable(); - } - return false; - }, this); - - this.pvTypeData = [ - { key: 'storageClass', label: this.domainLabelMapper('domain-creation-image-pv-storage-class-type') }, - { key: 'nfs', label: this.domainLabelMapper('domain-creation-image-pv-nfs-type') }, - { key: 'hostPath', label: this.domainLabelMapper('domain-creation-image-pv-host-path-type') }, - ]; - - this.pvTypesDP = new ArrayDataProvider(this.pvTypeData, { keyAttributes: 'key' }); - - this.pvReclaimPolicyData = [ - { key: 'Delete', label: this.domainLabelMapper('domain-creation-image-pv-reclaim-delete-type') }, - { key: 'Retain', label: this.domainLabelMapper('domain-creation-image-pv-reclaim-retain-type') }, - ]; - - this.pvReclaimPolicyDP = new ArrayDataProvider(this.pvReclaimPolicyData, { keyAttributes: 'key' }); - - /////////////////////////////////////////////////////////////////////////////////// - // Clusters Table // - /////////////////////////////////////////////////////////////////////////////////// - - this.disableClusterAddRemove = ko.computed(() => { - if (this.project.settings.targetDomainLocation.observable() !== 'pv') { - return auxImageHelper.projectHasModel(); - } - // PV is always enabled - return false; - }, this); - - this.hasNoClusters = () => { - return this.project.k8sDomain.clusters.value.length === 0; - }; - - this.noClustersMessage = ko.computed(() => { - if (this.project.settings.targetDomainLocation.observable() === 'pv') { - if (auxImageHelper.projectHasModel()) { - return this.domainLabelMapper('pv-dci-no-clusters-message'); - } else { - return this.domainLabelMapper('pv-no-clusters-message'); - } - } - return this.domainLabelMapper('no-clusters-message'); - }); - - this.clusterColumnData = [ - { - headerText: this.domainLabelMapper('clusters-name-heading'), - sortProperty: 'name', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('clusters-replicas-heading'), - sortProperty: 'replicas', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('clusters-min-heap-heading'), - sortProperty: 'minHeap', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('clusters-max-heap-heading'), - sortProperty: 'maxHeap', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('clusters-cpu-request-heading'), - sortProperty: 'cpuRequest', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('clusters-memory-request-heading'), - sortProperty: 'memoryRequest' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'chooseHeaderTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - const clusterComparators = viewHelper.getSortComparators(this.clusterColumnData); - - this.clustersDP = new ArrayDataProvider(this.project.k8sDomain.clusters.observable, - { keyAttributes: 'uid', sortComparators: clusterComparators }); - - this.clustersEditRow = ko.observable(); - - this.handleEditCluster = (event, context) => { - const index = context.item.index; - const cluster = this.project.k8sDomain.clusters.observable()[index]; - const existingClusterNames = this.project.k8sDomain.clusters.observable() - .filter(item => item.name !== cluster.name).map(item => { return item.name; }); - - const options = { cluster: cluster, existingNames: existingClusterNames, isDomainOnPV: this.isDomainOnPV() }; - - dialogHelper.promptDialog('cluster-edit-dialog', options).then(result => { - if (result) { - let changed = false; - project.k8sDomain.clusterKeys.forEach(key => { - if (key !== 'uid' && result.hasOwnProperty(key)) { - cluster[key] = result[key]; - changed = true; - } - }); - if (changed) { - // FIXME - deal with cluster name changes that conflict with existing names... - this.project.k8sDomain.clusters.observable.replace(cluster, cluster); - } - } - }); - }; - - this.handleClusterEditCancel = () => { - this.cancelClusterEdit = true; - this.clustersEditRow({ rowKey: null }); - }; - - this.handleAddCluster = () => { - const clusterToAdd = { - uid: utils.getShortUuid(), - name: utils.generateNewName(this.project.k8sDomain.clusters.observable, - 'name', 'new-cluster'), - // In the case of Domain in PV where the user is adding a cluster definition - // without running PrepareModel, we have no information on the cluster size - // so just set replicas to zero and maxServers to the max value possible. - // - replicas: 0, - maxServers: Number.MAX_SAFE_INTEGER - }; - this.project.k8sDomain.clusters.addNewItem(clusterToAdd); - }; - - this.handleDeleteCluster = (event, context) => { - const index = context.item.index; - this.project.k8sDomain.clusters.observable.splice(index, 1); - }; - - /////////////////////////////////////////////////////////////////////////////////// - // Model Variables Table // - /////////////////////////////////////////////////////////////////////////////////// - - this.propertyTableColumnMetadata = () => { - return [ - {'headerText': this.domainLabelMapper('propname-header'), sortProperty: 'Name', resizable: 'enabled'}, - {'headerText': this.domainLabelMapper('propvalue-header'), sortProperty: 'Value', resizable: 'enabled'}, - {'headerText': this.domainLabelMapper('propoverride-header'), sortProperty: 'Override', resizable: 'enabled'}, - ]; - }; - - const propertyComparators = viewHelper.getSortComparators(this.propertyTableColumnMetadata()); - - this.configMapDP = new BufferingDataProvider(new ArrayDataProvider( - this.project.wdtModel.getMergedPropertiesContent().observable, - {keyAttributes: 'uid', sortComparators: propertyComparators})); - - this.modelHasNoProperties = () => { - return this.project.wdtModel.getMergedPropertiesContent().value.length === 0; - }; - - /////////////////////////////////////////////////////////////////////////////////// - // External Model Variables Table // - /////////////////////////////////////////////////////////////////////////////////// - - this.externalPropertyTableColumnMetadata = [ - { headerText: this.domainLabelMapper('propname-header'), sortProperty: 'Name', resizable: 'enabled' }, - { headerText: this.domainLabelMapper('propoverride-header'), sortProperty: 'Override', resizable: 'enabled' }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - const externalPropertyComparators = viewHelper.getSortComparators(this.externalPropertyTableColumnMetadata); - this.externalModelHasNoProperties = ko.computed(() => { - return this.project.k8sDomain.externalProperties.observable().length === 0; - }, this); - - this.externalPropertiesConfigMapDP = new BufferingDataProvider(new ArrayDataProvider( - this.project.k8sDomain.externalProperties.observable, - {keyAttributes: 'uid', sortComparators: externalPropertyComparators})); - - this.handleAddExternalProperty = () => { - const propertyToAdd = { - uid: utils.getShortUuid(), - Name: utils.generateNewName(this.project.k8sDomain.externalProperties.observable, - 'Name', 'existing-model-variable'), - Override: undefined - }; - this.project.k8sDomain.externalProperties.addNewItem(propertyToAdd); - }; - - this.handleDeleteExternalProperty = (event, context) => { - const index = context.item.index; - this.project.k8sDomain.externalProperties.observable.splice(index, 1); - }; - - /////////////////////////////////////////////////////////////////////////////////// - // Secrets Table // - /////////////////////////////////////////////////////////////////////////////////// - - // Setup for secrets module - this.getSecretsModuleConfig = () => { - return ModuleElementUtils.createConfig({ - name: 'secrets-table', - params: {} - }); - }; - - // Runtime Encryption Secret functions - // - this.hasEncryptionSecret = () => { - return this.isModelInImage(); - }; - - this.handleRegenerateEncryptionValue = () => { - const newValue = window.api.utils.generateUuid(); - this.project.k8sDomain.runtimeSecretValue.observable(newValue); - }; - - /////////////////////////////////////////////////////////////////////////////////// - // Environment Variable Table // - /////////////////////////////////////////////////////////////////////////////////// - - this.environmentVariablesColumnMetadata = [ - { - headerText: this.domainLabelMapper('domain-env-var-name-header'), - sortProperty: 'name', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('domain-env-var-value-header'), - sortProperty: 'disabled', - resizable: 'enabled' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - this.environmentVariablesDP = new BufferingDataProvider(new ArrayDataProvider( - this.project.k8sDomain.serverPodEnvironmentVariables.observable, {keyAttributes: 'uid'})); - - this.handleAddDomainEnvironmentVariable = () => { - const labelToAdd = { - uid: utils.getShortUuid(), - name: utils.generateNewName(this.project.k8sDomain.serverPodEnvironmentVariables.observable, - 'name', 'NEW-VARIABLE'), - value: '' - }; - this.project.k8sDomain.serverPodEnvironmentVariables.addNewItem(labelToAdd); - }; - - this.handleDeleteDomainEnvironmentVariable = (event, context) => { - const index = context.item.index; - this.project.k8sDomain.serverPodEnvironmentVariables.observable.splice(index, 1); - }; - - - /////////////////////////////////////////////////////////////////////////////////// - // Node Selector Table // - /////////////////////////////////////////////////////////////////////////////////// - - this.nodeSelectorColumnMetadata = [ - { - headerText: this.domainLabelMapper('domain-node-selector-label-name-header'), - sortProperty: 'name', - resizable: 'enabled' - }, - { - headerText: this.domainLabelMapper('domain-node-selector-label-value-header'), - sortable: 'disabled' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable', - width: viewHelper.BUTTON_COLUMN_WIDTH - }, - ]; - - this.domainNodeSelectorDP = - new BufferingDataProvider(new ArrayDataProvider(this.project.k8sDomain.domainNodeSelector.observable, { keyAttributes: 'name' })); - - this.handleAddDomainNodeSelector = () => { - const labelToAdd = { - uid: utils.getShortUuid(), - name: utils.generateNewName(this.project.k8sDomain.domainNodeSelector.observable, - 'name', 'new-label'), - value: '' - }; - this.project.k8sDomain.domainNodeSelector.addNewItem(labelToAdd); - }; - } - - return VerrazzanoComponentDesignViewModel; -}); diff --git a/webui/src/js/viewModels/vz-component-page.js b/webui/src/js/viewModels/vz-component-page.js deleted file mode 100644 index 831d084d8..000000000 --- a/webui/src/js/viewModels/vz-component-page.js +++ /dev/null @@ -1,73 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['accUtils', 'knockout', 'ojs/ojcorerouter', 'ojs/ojmodulerouter-adapter', 'ojs/ojarraydataprovider', - 'utils/vz-component-deployer', 'utils/vz-component-undeployer', 'utils/i18n', 'utils/aux-image-helper', - 'utils/wdt-preparer', 'ojs/ojarraytreedataprovider', 'models/wkt-project', 'ojs/ojtreeview'], -function(accUtils, ko, CoreRouter, ModuleRouterAdapter, ArrayDataProvider, vzComponentDeployer, - vzComponentUndeployer, i18n, auxImageHelper, wdtPreparer) { - function VerrazzanoComponentViewModel(args) { - - this.connected = () => { - accUtils.announce('Verrazzano Component page loaded.', 'assertive'); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-component-page-${labelId}`); - }; - - this.anyLabelMapper = (labelId) => { - return i18n.t(labelId); - }; - - this.disableDeployComponent = ko.observable(false); - this.disableUndeployComponent = ko.observable(false); - - this.showPrepareModel = ko.computed(auxImageHelper.projectHasModel); - - this.prepareModel = () => { - wdtPreparer.startPrepareModel().then(); - }; - - this.deployComponent = async () => { - await vzComponentDeployer.startDeployComponent(); - }; - - this.undeployComponent = async () => { - await vzComponentUndeployer.startUndeployComponent(); - }; - - // Setup for Design / Code View tab selection. - - let navData = [ - { path: '', redirect: 'vz-component-design-view' }, - { path: 'vz-component-design-view', detail: { label: i18n.t('page-design-view') } }, - { path: 'vz-component-code-view', detail: { label: i18n.t('page-code-view') } } - ]; - - // the oj-tab-bar references these variables - - this.selectedItem = ko.observable('vz-component-design-view'); - this.dataProvider = new ArrayDataProvider(navData.slice(1), { keyAttributes: 'path' }); - - // this router configuration is used to substitute the tab content - - let router = args.parentRouter.createChildRouter(navData); - router.sync(); - - this.moduleAdapter = new ModuleRouterAdapter(router); - - // as the selected item change, tell the router to insert the tab content - - this.selectedItem.subscribe((newValue) => { - router.go({ path: newValue }); - }); - } - - /* - * Returns a constructor for the ViewModel. - */ - return VerrazzanoComponentViewModel; -}); diff --git a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js b/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js deleted file mode 100644 index 48b648c72..000000000 --- a/webui/src/js/viewModels/vz-ingress-trait-rule-edit-dialog.js +++ /dev/null @@ -1,258 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -define(['accUtils', 'knockout', 'utils/i18n', 'models/wkt-project', 'utils/observable-properties', - 'utils/validation-helper', 'ojs/ojarraydataprovider', 'ojs/ojconverter-number', 'utils/common-utilities', - 'utils/wkt-logger', 'ojs/ojselectcombobox', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', 'ojs/ojdialog', - 'ojs/ojformlayout', 'ojs/ojvalidationgroup'], -function(accUtils, ko, i18n, project, props, validationHelper, - ArrayDataProvider, ojConverterNumber, utils, wktLogger) { - - function VerrazzanoIngressTraitRuleEditDialogModel(args) { - const DIALOG_SELECTOR = '#vzIngressTraitEditRuleDialog'; - - this.i18n = i18n; - - this._createProperty = (defaultValue) => { - return defaultValue ? props.createProperty(defaultValue) : props.createProperty(); - }; - - this._createArrayProperty = (defaultValue) => { - return defaultValue ? props.createArrayProperty(defaultValue) : props.createArrayProperty(); - }; - - this._initializeRuleUid = (defaultValue) => { - const result = this._createProperty(defaultValue); - if (!defaultValue) { - result.value = utils.getShortUuid(); - } - return result; - }; - - this._initializeHosts = (inputHosts) => { - let result; - if (inputHosts) { - if (typeof inputHosts === 'string') { - const hosts = inputHosts.split(',').map(host => host.trim()); - result = this._createArrayProperty(hosts); - } else if (Array.isArray(inputHosts)) { - result = this._createArrayProperty(inputHosts); - } else { - wktLogger.warn('Verrazzano IngressTrait rule with UID %s received hosts value of unexpected type %s', - this.uid.value, typeof inputHosts); - result = this._createArrayProperty(); - } - } else { - result = this._createArrayProperty(); - } - return result; - }; - - this._initializePaths = (inputPaths) => { - let result; - const keys = ['uid', 'path', 'pathType']; - if (Array.isArray(inputPaths) && inputPaths.length > 0) { - result = props.createListProperty(keys).withDefaultValue(inputPaths); - } else { - result = props.createListProperty(keys); - } - return result; - }; - - this._initializeNumberField = (defaultValue) => { - let result; - - switch (typeof defaultValue) { - case 'number': - result = props.createProperty(defaultValue); - break; - - case 'string': - if (defaultValue) { - result = props.createProperty(parseInt(defaultValue)); - } else { - result = props.createProperty(-1); - } - break; - - case 'undefined': - default: - result = props.createProperty(-1); - break; - } - return result; - }; - - this._getScalarResult = (fieldName, result) => { - if (this[fieldName].hasValue()) { - result[fieldName] = this[fieldName].value; - } - }; - - this._getNumericResult = (fieldName, result) => { - const value = this[fieldName](); - if (typeof value === 'number') { - result[fieldName] = value; - } - }; - - this._formatResult = () => { - const result = { - uid: this.uid.value, - }; - - if (this.hosts.hasValue()) { - // Return the underlying delimited string instead of the array... - result.hosts = this.hosts.observable(); - } - if (this.paths.hasValue()) { - result.paths = this.paths.value; - } - this._getScalarResult('destinationHost', result); - this._getScalarResult('destinationHttpCookieName', result); - this._getScalarResult('destinationHttpCookiePath', result); - - // these two use ko.observable to allow for null numeric value - this._getNumericResult('destinationPort', result); - this._getNumericResult('destinationHttpCookieTTL', result); - - return result; - }; - - this.uid = this._initializeRuleUid(args.uid); - this.hosts = this._initializeHosts(args.hosts); - this.paths = this._initializePaths(args.paths); - this.destinationHost = this._createProperty(args.destinationHost); - this.destinationHttpCookieName = this._createProperty(args.destinationHttpCookieName); - this.destinationHttpCookiePath = this._createProperty(args.destinationHttpCookiePath); - - // these two use ko.observable to allow for null numeric value - this.destinationPort = ko.observable(args.destinationPort); - this.destinationHttpCookieTTL = ko.observable(args.destinationHttpCookieTTL); - - this.pathsDataProvider = new ArrayDataProvider(this.paths.observable, { keyAttributes: 'uid' }); - - this.connected = () => { - accUtils.announce('Verrazzano Ingress Trait Rule Edit dialog loaded.', 'assertive'); - // open the dialog after the current thread, which is loading this view model. - // using oj-dialog initial-visibility="show" causes vertical centering issues. - setTimeout(function() { - $(DIALOG_SELECTOR)[0].open(); - }, 1); - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-application-design-ingress-trait-rule-edit-${labelId}`); - }; - - this.integerConverter = new ojConverterNumber.IntlNumberConverter({ - style: 'decimal', - roundingMode: 'HALF_DOWN', - maximumFractionDigits: 0 - }); - - this.portNumberValidators = validationHelper.getPortNumberValidators(); - - this.portNumberConverter = new ojConverterNumber.IntlNumberConverter({ - style: 'decimal', - roundingMode: 'HALF_DOWN', - maximumFractionDigits: 0, - useGrouping: false - }); - - // this is dynamic to allow i18n fields to load correctly - this.pathsColumns = [ - { - headerText: this.labelMapper('path-type-label'), - sortProperty: 'pathType', - resizable: 'enabled' - }, - { - headerText: this.labelMapper('path-label'), - sortProperty: 'path', - resizable: 'enabled' - }, - { - className: 'wkt-table-delete-cell', - headerClassName: 'wkt-table-add-header', - headerTemplate: 'headerTemplate', - template: 'actionTemplate', - sortable: 'disable' - } - ]; - - this.destinationHostNames = ko.computed(() => { - let options = []; - const domainUid = project.k8sDomain.uid.value; - - const clusters = project.k8sDomain.clusters.observable(); - for (const cluster of clusters) { - const clusterHostName = utils.toLegalK8sName(`${domainUid}-cluster-${cluster.name}`); - options.push( { id : cluster.uid, value: clusterHostName, text: clusterHostName}); - } - - const servers = project.k8sDomain.servers.observable(); - for (const server of servers) { - const serverHostName = utils.toLegalK8sName(`${domainUid}-${server.name}`); - options.push( { id : server.uid, value: serverHostName, text: serverHostName}); - } - - options.sort(function(a, b) { - return a.text.localeCompare(b.text); - }); - return options; - }); - - this.pathTypeOptions = [ - { value: 'prefix', label: this.labelMapper('path-type-prefix-label') }, - { value: 'exact', label: this.labelMapper('path-type-exact-label') }, - { value: 'regex', label: this.labelMapper('path-type-regex-label') }, - ]; - this.pathTypesDataProvider = new ArrayDataProvider(this.pathTypeOptions, { keyAttributes: 'value' }); - - this.navigationCellClass = (value) => { - return value ? null : 'wkt-placeholder-text'; - }; - - this.pathTypeLabel = (pathType) => { - const key = pathType ? 'path-type-' + pathType + '-label' : 'path-type-placeholder'; - return this.labelMapper(key); - }; - - this.handleAddPath = () => { - this.paths.addNewItem({ uid: utils.getShortUuid() }); - }; - - this.handleDeletePath = (event, context) => { - this.paths.observable.remove(context.item.data); - }; - - this.okInput = () => { - let tracker = document.getElementById('tracker'); - if (tracker.valid === 'valid') { - $(DIALOG_SELECTOR)[0].close(); - - const result = { rule: this._formatResult() }; - args.setValue(result); - } else { - // show messages on all the components that have messages hidden. - tracker.showMessages(); - tracker.focusOn('@firstInvalidShown'); - } - }; - - this.cancelInput = () => { - $(DIALOG_SELECTOR)[0].close(); - args.setValue(); - }; - } - - /* - * Returns a constructor for the ViewModel. - */ - return VerrazzanoIngressTraitRuleEditDialogModel; -}); diff --git a/webui/src/js/viewModels/vz-install-code-view.js b/webui/src/js/viewModels/vz-install-code-view.js deleted file mode 100644 index 03d8f51da..000000000 --- a/webui/src/js/viewModels/vz-install-code-view.js +++ /dev/null @@ -1,119 +0,0 @@ -/** - * @license - * Copyright (c) 2022, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['accUtils', 'knockout', 'models/wkt-project', 'utils/vz-install-script-generator', - 'utils/vz-install-resource-generator', 'utils/i18n', 'ojs/ojarraydataprovider', 'utils/wkt-logger', - 'ojs/ojinputtext', 'ojs/ojnavigationlist', 'ojs/ojswitcher', 'ojs/ojknockout'], -function (accUtils, ko, project, VerrazzanoInstallScriptGenerator, VerrazzanoInstallResourceGenerator, i18n, - ArrayDataProvider, wktLogger) { - function VerrazzanoInstallCodeViewModel () { - this.project = project; - - let subscriptions = []; - - this.connected = () => { - accUtils.announce('Image code view loaded.', 'assertive'); - - // update code text if project changes - subscriptions.push(project.postOpen.subscribe(() => { - this.renderScript(this.selectedSubview()); - })); - - this.renderScript(this.selectedSubview()); - }; - - this.disconnected = () => { - subscriptions.forEach((subscription) => { - subscription.dispose(); - }); - }; - - this.project = project; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-install-code-${labelId}`); - }; - - this.shellLabelMapper = (labelId) => { - return i18n.t(`script-${labelId}`); - }; - - this.shellScriptType = ko.observable(VerrazzanoInstallScriptGenerator.getDefaultScriptingLanguage()); - const shellScriptTypes = [ - {key: 'sh', label: this.shellLabelMapper('sh-label')}, - {key: 'ps1', label: this.shellLabelMapper('ps1-label')}, - {key: 'cmd', label: this.shellLabelMapper('cmd-label')} - ]; - this.shellScriptTypesDP = new ArrayDataProvider(shellScriptTypes, {keyAttributes: 'key'}); - this.shellScriptTypeSelectValueChangedHandler = (event) => { - this.shellScriptType(event.detail.value); - this.renderShellScript(event.detail.value); - }; - - this.subviews = [ - {id: 'script', name: this.labelMapper('script-title')}, - {id: 'verrazzano', name: this.labelMapper('verrazzano-resource-title')}, - ]; - - this.subviewsDP = new ArrayDataProvider(this.subviews, {keyAttributes: 'id'}); - this.selectedSubview = ko.observable('script'); - this.selectedSubviewValueChangedHandler = (event) => { - wktLogger.debug('selectedSubviewValueChangedHandler() called for %s', event.detail.value); - this.selectedSubview(event.detail.value); - this.renderScript(event.detail.value); - }; - - this.scriptText = ko.observable(); - this.verrazzanoResourceText = ko.observable(); - - this.vzInstallResourceGenerator = new VerrazzanoInstallResourceGenerator(); - - this.renderScript = (selectedSubview) => { - switch (selectedSubview) { - case 'script': - this.renderShellScript(this.shellScriptType()); - break; - - case 'verrazzano': - this.renderVerrazzanoResource(); - } - }; - - this.renderShellScript = (scriptLanguage) => { - const generator = new VerrazzanoInstallScriptGenerator(scriptLanguage); - this.scriptText(generator.generate().join('\n')); - }; - - this.renderVerrazzanoResource = () => { - this.verrazzanoResourceText(this.vzInstallResourceGenerator.generate().join('\n')); - }; - - this.renderScript(this.selectedSubview()); - - this.downloadInstaller = () => { - const format = this.shellScriptType(); - const generator = new VerrazzanoInstallScriptGenerator(format); - const lines = generator.generate(); - const fileType = i18n.t('script-file-type-label', { - type: i18n.t('nav-verrazzano'), - subType: i18n.t('vz-install-code-script-title') - }); - const formatLabel = this.shellLabelMapper(format + '-label'); - - window.api.ipc.send('download-file', lines, fileType, format, formatLabel); - }; - - this.downloadResource = () => { - const generator = this.vzInstallResourceGenerator; - const lines = generator.generate(); - const fileType = i18n.t('vz-install-code-verrazzano-resource-title'); - const formatLabel = this.shellLabelMapper('resource-file-format'); - - window.api.ipc.send('download-file', lines, fileType, 'yaml', formatLabel); - }; - } - - return VerrazzanoInstallCodeViewModel; -}); diff --git a/webui/src/js/viewModels/vz-install-design-view.js b/webui/src/js/viewModels/vz-install-design-view.js deleted file mode 100644 index 907d090d2..000000000 --- a/webui/src/js/viewModels/vz-install-design-view.js +++ /dev/null @@ -1,82 +0,0 @@ -/** - * @license - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -'use strict'; - -const MINIMUM_VERRAZZANO_VERSION = '1.3.0'; - -define(['models/wkt-project', 'accUtils', 'utils/common-utilities', 'knockout', 'utils/i18n', 'utils/screen-utils', - 'ojs/ojbufferingdataprovider', 'ojs/ojarraydataprovider', 'utils/vz-helper', 'utils/dialog-helper', - 'utils/view-helper', 'utils/wkt-logger', 'ojs/ojmessaging', 'ojs/ojinputtext', 'ojs/ojlabel', 'ojs/ojbutton', - 'ojs/ojformlayout', 'ojs/ojcollapsible', 'ojs/ojselectsingle', 'ojs/ojlistview', 'ojs/ojtable', 'ojs/ojswitch', - 'ojs/ojinputnumber', 'ojs/ojradioset'], -function (project, accUtils, utils, ko, i18n, screenUtils, BufferingDataProvider, ArrayDataProvider) { - function VerrazzanoInstallDesignViewModel() { - - const subscriptions = []; - - this.connected = () => { - accUtils.announce('Verrazzano Install Design View page loaded.', 'assertive'); - - subscriptions.push(this.project.vzInstall.versionTag.observable.subscribe(newTagValue => { - this.computedArgoCDAvailabilityFromVersion(newTagValue); - })); - - this.computedArgoCDAvailabilityFromVersion(); - }; - - this.disconnected = () => { - subscriptions.forEach((subscription) => { - subscription.dispose(); - }); - }; - - this.labelMapper = (labelId, payload) => { - if (labelId.startsWith('page-design-')) { - return i18n.t(labelId); - } - return i18n.t(`vz-install-design-${labelId}`, payload); - }; - - this.project = project; - this.i18n = i18n; - - this.vzProfileTypes = [ - { key: 'prod', label: this.labelMapper('profile-prod') }, - { key: 'dev', label: this.labelMapper('profile-dev') }, - // { key: 'managed-cluster', label: this.labelMapper('profile-managed-cluster') }, - ]; - this.vzInstallProfiles = new ArrayDataProvider(this.vzProfileTypes, {keyAttributes: 'key'}); - - this.vzVersions = ko.observableArray(); - this.vzVersionTags = new ArrayDataProvider(this.vzVersions, {keyAttributes: 'tag'}); - window.api.ipc.invoke('get-verrazzano-release-versions', MINIMUM_VERRAZZANO_VERSION).then(versions => { - // Sort in descending order by version number. - // - versions.sort((a, b) => window.api.utils.compareVersions(a.version, b.version)).reverse(); - this.vzVersions.push(...versions.map(versionObject => { - const label = versionObject.version; - return { ...versionObject, label }; - })); - }); - - this.isArgoCDAvailable = ko.observable(false); - this.computedArgoCDAvailabilityFromVersion = (versionTag = undefined) => { - const vzInstallVersionTag = versionTag ? versionTag : this.project.vzInstall.versionTag.observable(); - - let result = false; // for now, assume that Verrazzano 1.4.x and below are the most common. - if (vzInstallVersionTag) { - const vzInstallVersion = vzInstallVersionTag.slice(1); - if (window.api.utils.compareVersions(vzInstallVersion, '1.5.0') >= 0) { - result = true; - } - } - if (this.isArgoCDAvailable() !== result) { - this.isArgoCDAvailable(result); - } - }; - } - return VerrazzanoInstallDesignViewModel; -}); diff --git a/webui/src/js/viewModels/vz-install-page.js b/webui/src/js/viewModels/vz-install-page.js deleted file mode 100644 index 238e2412f..000000000 --- a/webui/src/js/viewModels/vz-install-page.js +++ /dev/null @@ -1,55 +0,0 @@ -/** - * @license - * Copyright (c) 2021, Oracle and/or its affiliates. - * Licensed under The Universal Permissive License (UPL), Version 1.0 as shown at https://oss.oracle.com/licenses/upl/ - */ -define(['utils/i18n', 'accUtils', 'knockout', 'ojs/ojcorerouter', 'ojs/ojmodulerouter-adapter', - 'ojs/ojarraydataprovider', 'utils/vz-installer', 'utils/vz-install-status-checker'], -function(i18n, accUtils, ko, CoreRouter, ModuleRouterAdapter, ArrayDataProvider, vzInstaller, vzInstallStatusChecker) { - function VerrazzanoInstallViewModel(args) { - - this.connected = () => { - accUtils.announce('Verrazzano Install page loaded.', 'assertive'); - // Implement further logic if needed - }; - - this.labelMapper = (labelId) => { - return i18n.t(`vz-install-page-${labelId}`); - }; - - this.disableInstall = ko.observable(false); - this.installVerrazzano = () => { - vzInstaller.startInstallVerrazzano().then(); - }; - - this.disableInstallStatus = ko.observable(false); - this.getInstallStatus = () => { - vzInstallStatusChecker.startVerrazzanoInstallStatusCheck().then(); - }; - - // Setup for Design / Code View tab selection. - - const navData = [ - { path: '', redirect: 'vz-install-design-view' }, - { path: 'vz-install-design-view', detail: { label: i18n.t('page-design-view') } }, - { path: 'vz-install-code-view', detail: { label: i18n.t('page-code-view') } } - ]; - - this.selectedItem = ko.observable('vz-install-design-view'); - this.dataProvider = new ArrayDataProvider(navData.slice(1), { keyAttributes: 'path' }); - - let router = args.parentRouter.createChildRouter(navData); - router.sync(); - - this.moduleAdapter = new ModuleRouterAdapter(router); - - this.selectedItem.subscribe((newValue) => { - router.go({ path: newValue }); - }); - } - - /* - * Returns a constructor for the ViewModel. - */ - return VerrazzanoInstallViewModel; -}); diff --git a/webui/src/js/views/choose-clusters-dialog.html b/webui/src/js/views/choose-clusters-dialog.html deleted file mode 100644 index 6f54d251f..000000000 --- a/webui/src/js/views/choose-clusters-dialog.html +++ /dev/null @@ -1,37 +0,0 @@ - - -
- - - -
-
-
- - - - - - - -
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/choose-component-dialog.html b/webui/src/js/views/choose-component-dialog.html deleted file mode 100644 index a3018ba5c..000000000 --- a/webui/src/js/views/choose-component-dialog.html +++ /dev/null @@ -1,39 +0,0 @@ - - -
- - - -
-
- -
- - - - - - - -
-
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/choose-deployment-dialog.html b/webui/src/js/views/choose-deployment-dialog.html deleted file mode 100644 index f01a7cf52..000000000 --- a/webui/src/js/views/choose-deployment-dialog.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
- - - -
-
-
- - - - -
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/choose-secret-dialog.html b/webui/src/js/views/choose-secret-dialog.html deleted file mode 100644 index c45bb9a8e..000000000 --- a/webui/src/js/views/choose-secret-dialog.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
- - - -
-
-
- - - - -
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/choose-secrets-dialog.html b/webui/src/js/views/choose-secrets-dialog.html deleted file mode 100644 index 3e334a5bc..000000000 --- a/webui/src/js/views/choose-secrets-dialog.html +++ /dev/null @@ -1,37 +0,0 @@ - - -
- - - -
-
-
- - - - - - - -
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/discover-dialog.html b/webui/src/js/views/discover-dialog.html index cb86695d9..f43fc1dd5 100644 --- a/webui/src/js/views/discover-dialog.html +++ b/webui/src/js/views/discover-dialog.html @@ -1,67 +1,148 @@
- +
- - - - - - - - - - - - - - - - - - - - -
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ +
+ +
+ + + + + + + + +
+ + + + + + + + + + + + + +
+
+
+
+
+
+
- - - - - - + + + +
diff --git a/webui/src/js/views/k8s-helper-choose-cluster-dialog.html b/webui/src/js/views/k8s-helper-choose-cluster-dialog.html deleted file mode 100644 index e5aca10e2..000000000 --- a/webui/src/js/views/k8s-helper-choose-cluster-dialog.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
- - - -
-
-
- - - - -
-
- -
- - - - - - -
-
diff --git a/webui/src/js/views/kubectl-page.html b/webui/src/js/views/kubectl-page.html index 5a1c0f13f..1e4336d61 100644 --- a/webui/src/js/views/kubectl-page.html +++ b/webui/src/js/views/kubectl-page.html @@ -1,5 +1,5 @@
@@ -37,9 +37,6 @@
-

-
@@ -55,20 +52,18 @@
- - - - - - - - + + + + + +
-
+
- -
-
- - - - -
-
diff --git a/webui/src/js/views/project-settings-page.html b/webui/src/js/views/project-settings-page.html index 13db7a4db..c55af03a8 100644 --- a/webui/src/js/views/project-settings-page.html +++ b/webui/src/js/views/project-settings-page.html @@ -1,5 +1,5 @@
@@ -156,18 +156,6 @@

-
-
- - - - -

-
-
diff --git a/webui/src/js/views/quickstart/page11-view.html b/webui/src/js/views/quickstart/page11-view.html deleted file mode 100644 index a46154781..000000000 --- a/webui/src/js/views/quickstart/page11-view.html +++ /dev/null @@ -1,38 +0,0 @@ - - -
-
-
- icon -
-
-

- -

-

-
    -
  • -
  • -
  • -
- -

-

-
    -
  • -
  • -
  • -
- -

-

-
    -
  • -
  • -
  • -
-
-
diff --git a/webui/src/js/views/quickstart/page4-view.html b/webui/src/js/views/quickstart/page4-view.html index eab18188d..fb2728d22 100644 --- a/webui/src/js/views/quickstart/page4-view.html +++ b/webui/src/js/views/quickstart/page4-view.html @@ -1,5 +1,5 @@ @@ -21,7 +21,6 @@
  • -

    diff --git a/webui/src/js/views/vz-application-code-view.html b/webui/src/js/views/vz-application-code-view.html deleted file mode 100644 index 0a1e94af5..000000000 --- a/webui/src/js/views/vz-application-code-view.html +++ /dev/null @@ -1,57 +0,0 @@ - -
    - - - - - -
    - - - - - - - - - -
    - -
    - - - - - - - -
    - -
    - - - - - - - -
    -
    -
    diff --git a/webui/src/js/views/vz-application-design-view.html b/webui/src/js/views/vz-application-design-view.html deleted file mode 100644 index af1dead43..000000000 --- a/webui/src/js/views/vz-application-design-view.html +++ /dev/null @@ -1,300 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    - - - -
    -
    - - - - - - - - -

    -
    -
    -
    diff --git a/webui/src/js/views/vz-application-page.html b/webui/src/js/views/vz-application-page.html deleted file mode 100644 index a978395e3..000000000 --- a/webui/src/js/views/vz-application-page.html +++ /dev/null @@ -1,49 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - - - - - -
    - - - -
    diff --git a/webui/src/js/views/vz-application-status-choose-cluster-dialog.html b/webui/src/js/views/vz-application-status-choose-cluster-dialog.html deleted file mode 100644 index 2857fdb92..000000000 --- a/webui/src/js/views/vz-application-status-choose-cluster-dialog.html +++ /dev/null @@ -1,31 +0,0 @@ - - -
    - - - -
    -
    -
    - - - - -
    -
    - -
    - - - - - - -
    -
    diff --git a/webui/src/js/views/vz-application-status-dialog.html b/webui/src/js/views/vz-application-status-dialog.html deleted file mode 100644 index 10249c476..000000000 --- a/webui/src/js/views/vz-application-status-dialog.html +++ /dev/null @@ -1,71 +0,0 @@ - - -
    - - - -
    - -
    -
    - -
    - - - -

    - -

    -
    - -
    - - - -

    - -

    -
    - - -
    - - - -

    - -

    -
    -
    - -
    - - - -

    -
    - -
    - - - -

    -
    - -
    - - - -

    -
    -
    - -
    - - - -
    -
    diff --git a/webui/src/js/views/vz-component-code-view.html b/webui/src/js/views/vz-component-code-view.html deleted file mode 100644 index 566825bf7..000000000 --- a/webui/src/js/views/vz-component-code-view.html +++ /dev/null @@ -1,57 +0,0 @@ - -
    - - - - - -
    - - - - - - - - - -
    - -
    - - - - - - - -
    - -
    - - - - - - - -
    -
    -
    diff --git a/webui/src/js/views/vz-component-design-view.html b/webui/src/js/views/vz-component-design-view.html deleted file mode 100644 index c97075c02..000000000 --- a/webui/src/js/views/vz-component-design-view.html +++ /dev/null @@ -1,864 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - - - - -
    - - - - - - - - -
    - - -
    - - - - - - - - -
    -
    -
    - -
    - -
    - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - - - -
    -
    -
    - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    - - - - - - -
    - - -
    -
    - - - - - - - - - - -
    -
    - -
    -
    - - - - - - - - - - - - -
    -
    - - -
    -
    - - - -
    -
    - - -
    - -
    -
    - - - - - - - - - - -
    -
    - -
    -
    - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - -
    -
    diff --git a/webui/src/js/views/vz-component-page.html b/webui/src/js/views/vz-component-page.html deleted file mode 100644 index 16e29bf39..000000000 --- a/webui/src/js/views/vz-component-page.html +++ /dev/null @@ -1,50 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - - - - - - - -
    - - - -
    diff --git a/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html b/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html deleted file mode 100644 index 252ea43cd..000000000 --- a/webui/src/js/views/vz-ingress-trait-rule-edit-dialog.html +++ /dev/null @@ -1,117 +0,0 @@ - - -
    - - - -
    -
    - -
    - - - - -
    -
    -
    - -
    - - - - -
    -
    -
    - -
    - - - - - - - - - - - - -
    -
    -
    - -
    - - - - - - -
    -
    diff --git a/webui/src/js/views/vz-install-code-view.html b/webui/src/js/views/vz-install-code-view.html deleted file mode 100644 index 48c49c5d6..000000000 --- a/webui/src/js/views/vz-install-code-view.html +++ /dev/null @@ -1,48 +0,0 @@ - -
    - - - - - -
    - - - - - - - - - -
    - -
    - - - - - - - -
    - -
    -
    diff --git a/webui/src/js/views/vz-install-design-view.html b/webui/src/js/views/vz-install-design-view.html deleted file mode 100644 index 0f224edbd..000000000 --- a/webui/src/js/views/vz-install-design-view.html +++ /dev/null @@ -1,46 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/webui/src/js/views/vz-install-page.html b/webui/src/js/views/vz-install-page.html deleted file mode 100644 index e4db88541..000000000 --- a/webui/src/js/views/vz-install-page.html +++ /dev/null @@ -1,41 +0,0 @@ - -
    -
    - - - - - - - - - - - - - - -
    - - - -
    diff --git a/webui/src/js/windowStateUtils.js b/webui/src/js/windowStateUtils.js index ce6b450ea..3968c8744 100644 --- a/webui/src/js/windowStateUtils.js +++ b/webui/src/js/windowStateUtils.js @@ -1,6 +1,6 @@ /** * @license - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. * Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. */ @@ -9,17 +9,13 @@ define(['models/wkt-project', 'models/wkt-console', 'utils/wdt-discoverer', 'uti 'utils/wit-aux-creator', 'utils/image-pusher', 'utils/aux-image-pusher', 'utils/k8s-helper', 'utils/wko-installer', 'utils/wko-uninstaller', 'utils/wko-updater', 'utils/k8s-domain-deployer', 'utils/k8s-domain-status-checker', 'utils/k8s-domain-undeployer', 'utils/ingress-controller-installer', 'utils/ingress-routes-updater', - 'utils/ingress-controller-uninstaller', 'utils/vz-installer', 'utils/vz-install-status-checker', - 'utils/vz-component-deployer', 'utils/vz-component-undeployer', 'utils/vz-application-deployer', - 'utils/vz-application-status-checker', 'utils/vz-application-undeployer','utils/app-updater', 'utils/wkt-logger'], + 'utils/ingress-controller-uninstaller', 'utils/app-updater', 'utils/wkt-logger'], function(wktProject, wktConsole, wdtDiscoverer, dialogHelper, projectIO, utils, wdtModelPreparer, wdtModelValidator, i18n, witImageCreator, WitAuxImageCreator, imagePusher, AuxImagePusher, k8sHelper, wkoInstaller, wkoUninstaller, wkoUpdater, k8sDomainDeployer, k8sDomainStatusChecker, k8sDomainUndeployer, ingressControllerInstaller, - ingressRoutesUpdater, ingressControllerUninstaller, vzInstaller, - vzInstallStatusChecker, vzComponentDeployer, vzComponentUndeployer, - vzApplicationDeployer, vzApplicationStatusChecker, vzApplicationUndeployer, appUpdater, wktLogger) { + ingressRoutesUpdater, ingressControllerUninstaller, appUpdater, wktLogger) { async function displayCatchAllError(i18nPrefix, err) { return dialogHelper.displayCatchAllError(i18nPrefix, err); @@ -244,55 +240,6 @@ function(wktProject, wktConsole, wdtDiscoverer, dialogHelper, projectIO, }); }); - window.api.ipc.receive('start-verrazzano-install', async () => { - blurSelection(); - vzInstaller.startInstallVerrazzano().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-installer-install', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-get-verrazzano-install-status', async () => { - blurSelection(); - vzInstallStatusChecker.startVerrazzanoInstallStatusCheck().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-install-status-checker-status', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-deploy-verrazzano-component', async () => { - blurSelection(); - vzComponentDeployer.startDeployComponent().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-component-deployer-deploy', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-undeploy-verrazzano-component', async () => { - blurSelection(); - vzComponentUndeployer.startUndeployComponent().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-component-undeployer-undeploy', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-deploy-verrazzano-application', async () => { - blurSelection(); - vzApplicationDeployer.startDeployApplication().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-application-deployer-deploy', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-get-vz-application-status', async () => { - blurSelection(); - vzApplicationStatusChecker.startCheckApplicationStatus().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-application-status-checker-check', err).then(() => Promise.resolve()); - }); - }); - - window.api.ipc.receive('start-undeploy-verrazzano-application', async () => { - blurSelection(); - vzApplicationUndeployer.startUndeployApplication().then(() => Promise.resolve()).catch(err => { - displayCatchAllError('vz-application-undeployer-undeploy', err).then(() => Promise.resolve()); - }); - }); - window.api.ipc.receive('start-window-close', async () => { blurSelection(); return doDirtyCheck('close-window');