From 24626d828d5fa75bd3180447a4106b5305478c52 Mon Sep 17 00:00:00 2001 From: Sander Bruens Date: Mon, 22 Apr 2024 17:06:30 -0400 Subject: [PATCH 1/3] chore: add `eslint` import order plugin --- .eslintrc.json | 15 + client/infrastructure/electron/app_paths.ts | 3 +- client/src/www/TODO.spec.ts | 3 +- client/src/www/app/app.ts | 14 +- client/src/www/app/cordova_main.ts | 8 +- client/src/www/app/electron_main.ts | 4 +- client/src/www/app/electron_outline_tunnel.ts | 2 +- client/src/www/app/fake_tunnel.ts | 2 +- client/src/www/app/main.ts | 5 +- .../access_key_serialization.ts | 1 - .../app/outline_server_repository/index.ts | 5 +- .../outline_server_repository.spec.ts | 9 +- .../app/outline_server_repository/server.ts | 3 +- client/src/www/app/platform.ts | 2 +- client/src/www/app/settings.spec.ts | 2 +- client/src/www/testing/localize.ts | 3 +- .../src/www/views/contact_view/index.spec.ts | 9 +- client/src/www/views/contact_view/index.ts | 4 +- .../contact_view/support_form/index.spec.ts | 3 +- .../views/contact_view/support_form/index.ts | 8 +- .../contact_view/support_form/stories.ts | 2 +- client/src/www/views/servers_view/index.ts | 4 +- .../views/servers_view/server_list/index.ts | 2 +- .../views/servers_view/server_list/stories.ts | 2 +- .../servers_view/server_list_item/index.ts | 5 +- .../server_list_item/server_card/index.ts | 4 +- .../server_list_item/server_card/stories.ts | 2 +- package-lock.json | 1315 ++++++++++------- package.json | 1 + .../electron_and_karma_chromium.spec.ts | 2 +- .../electron_app/digitalocean_oauth.ts | 5 +- server_manager/electron_app/fetch.spec.ts | 6 +- server_manager/electron_app/fetch.ts | 2 +- server_manager/electron_app/gcp_oauth.ts | 3 +- server_manager/electron_app/index.ts | 7 +- server_manager/electron_app/preload.ts | 2 +- server_manager/model/server.ts | 2 +- server_manager/web_app/app.spec.ts | 4 +- server_manager/web_app/app.ts | 19 +- server_manager/web_app/cloud_accounts.spec.ts | 2 +- server_manager/web_app/cloud_accounts.ts | 6 +- .../web_app/digitalocean_account.ts | 4 +- server_manager/web_app/digitalocean_server.ts | 4 +- server_manager/web_app/gallery_app/main.ts | 4 +- server_manager/web_app/gcp_account.ts | 4 +- server_manager/web_app/gcp_server.ts | 4 +- .../web_app/location_formatting.spec.ts | 2 +- server_manager/web_app/main.ts | 2 +- server_manager/web_app/manual_server.ts | 4 +- .../web_app/outline-gcp-create-server-app.ts | 6 +- server_manager/web_app/shadowbox_server.ts | 2 +- server_manager/web_app/survey.spec.ts | 2 +- .../web_app/ui_components/app-root.ts | 30 +- .../ui_components/outline-gcp-oauth-step.ts | 1 + .../outline-manual-server-entry.ts | 4 +- .../outline-per-key-data-limit-dialog.ts | 2 +- .../outline-server-progress-step.ts | 1 + .../ui_components/outline-server-settings.ts | 2 +- .../ui_components/outline-server-view.ts | 13 +- .../ui_components/outline-survey-dialog.ts | 4 +- .../web_app/ui_components/outline-tos-view.ts | 1 - src/electron/go_vpn_tunnel.ts | 9 +- src/electron/index.ts | 15 +- src/electron/preload.d.ts | 1 + src/electron/routing_service.ts | 5 +- 65 files changed, 960 insertions(+), 668 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index cf573c4859..7af40615b6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -60,6 +60,21 @@ ] } ], + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal" + ], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], "no-prototype-builtins": "off", "prefer-const": "error", "@typescript-eslint/ban-types": "off", diff --git a/client/infrastructure/electron/app_paths.ts b/client/infrastructure/electron/app_paths.ts index 99282a49ae..68c5651368 100644 --- a/client/infrastructure/electron/app_paths.ts +++ b/client/infrastructure/electron/app_paths.ts @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {app} from 'electron'; import * as os from 'os'; import * as path from 'path'; +import {app} from 'electron'; + const isWindows = os.platform() === 'win32'; /** diff --git a/client/src/www/TODO.spec.ts b/client/src/www/TODO.spec.ts index 0f0a5636d3..a642e1d848 100644 --- a/client/src/www/TODO.spec.ts +++ b/client/src/www/TODO.spec.ts @@ -27,13 +27,12 @@ // import * as outlineIcons from './ui_components/outline-icons'; import * as clipboard from './app/clipboard'; -import * as errorReporter from './shared/error_reporter'; import * as platform from './app/platform'; import * as tunnel from './app/tunnel'; import * as updater from './app/updater'; import * as urlInterceptor from './app/url_interceptor'; import * as vpnInstaller from './app/vpn_installer'; - +import * as errorReporter from './shared/error_reporter'; import * as aboutView from './ui_components/about-view'; import * as addServerView from './ui_components/add-server-view'; import * as appRoot from './ui_components/app-root.js'; diff --git a/client/src/www/app/app.ts b/client/src/www/app/app.ts index faad30953f..d6b741ac93 100644 --- a/client/src/www/app/app.ts +++ b/client/src/www/app/app.ts @@ -12,22 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as errors from '../model/errors'; -import * as events from '../model/events'; -import {Server} from '../model/server'; -import {OperationTimedOut} from '../../../infrastructure/timeout_promise'; -import {ServerListItem, ServerConnectionState} from '../views/servers_view'; -import {SERVER_CONNECTION_INDICATOR_DURATION_MS} from '../views/servers_view/server_connection_indicator'; import {Clipboard} from './clipboard'; import {EnvironmentVariables} from './environment'; -import {OutlineErrorReporter} from '../shared/error_reporter'; import {OutlineServerRepository} from './outline_server_repository'; import {Settings, SettingsKey} from './settings'; import {Updater} from './updater'; import {UrlInterceptor} from './url_interceptor'; import {VpnInstaller} from './vpn_installer'; import {Localizer} from '../../../infrastructure/i18n'; +import {OperationTimedOut} from '../../../infrastructure/timeout_promise'; +import * as errors from '../model/errors'; +import * as events from '../model/events'; +import {Server} from '../model/server'; +import {OutlineErrorReporter} from '../shared/error_reporter'; +import {ServerListItem, ServerConnectionState} from '../views/servers_view'; +import {SERVER_CONNECTION_INDICATOR_DURATION_MS} from '../views/servers_view/server_connection_indicator'; enum OUTLINE_ACCESS_KEY_SCHEME { STATIC = 'ss', diff --git a/client/src/www/app/cordova_main.ts b/client/src/www/app/cordova_main.ts index 75c3372a31..e7fbdb7344 100644 --- a/client/src/www/app/cordova_main.ts +++ b/client/src/www/app/cordova_main.ts @@ -26,16 +26,16 @@ import * as Sentry from '@sentry/browser'; import {AbstractClipboard} from './clipboard'; import {EnvironmentVariables} from './environment'; -import {SentryErrorReporter, Tags} from '../shared/error_reporter'; +import {FakeOutlineTunnel} from './fake_tunnel'; import {main} from './main'; -import * as errors from '../model/errors'; import {OutlinePlatform} from './platform'; import {Tunnel, TunnelStatus} from './tunnel'; +import {ShadowsocksSessionConfig} from './tunnel'; import {AbstractUpdater} from './updater'; import * as interceptors from './url_interceptor'; -import {FakeOutlineTunnel} from './fake_tunnel'; -import {ShadowsocksSessionConfig} from './tunnel'; import {NoOpVpnInstaller, VpnInstaller} from './vpn_installer'; +import * as errors from '../model/errors'; +import {SentryErrorReporter, Tags} from '../shared/error_reporter'; const OUTLINE_PLUGIN_NAME = 'OutlinePlugin'; diff --git a/client/src/www/app/electron_main.ts b/client/src/www/app/electron_main.ts index 87dc973de5..0a2ef70673 100644 --- a/client/src/www/app/electron_main.ts +++ b/client/src/www/app/electron_main.ts @@ -19,16 +19,16 @@ import '@webcomponents/webcomponentsjs/webcomponents-bundle.js'; import * as Sentry from '@sentry/electron/renderer'; -import {ErrorCode, OutlinePluginError} from '../model/errors'; import {AbstractClipboard} from './clipboard'; import {ElectronOutlineTunnel} from './electron_outline_tunnel'; -import {getSentryBrowserIntegrations, OutlineErrorReporter, Tags} from '../shared/error_reporter'; import {FakeOutlineTunnel} from './fake_tunnel'; import {getLocalizationFunction, main} from './main'; import {AbstractUpdater} from './updater'; import {UrlInterceptor} from './url_interceptor'; import {VpnInstaller} from './vpn_installer'; +import {ErrorCode, OutlinePluginError} from '../model/errors'; +import {getSentryBrowserIntegrations, OutlineErrorReporter, Tags} from '../shared/error_reporter'; const isWindows = window.electron.os.platform === 'win32'; const isLinux = window.electron.os.platform === 'linux'; diff --git a/client/src/www/app/electron_outline_tunnel.ts b/client/src/www/app/electron_outline_tunnel.ts index 55d7d8c076..a7fb718b57 100644 --- a/client/src/www/app/electron_outline_tunnel.ts +++ b/client/src/www/app/electron_outline_tunnel.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {Tunnel, TunnelStatus, ShadowsocksSessionConfig} from './tunnel'; import * as errors from '../model/errors'; -import {Tunnel, TunnelStatus, ShadowsocksSessionConfig} from './tunnel'; export class ElectronOutlineTunnel implements Tunnel { private statusChangeListener: ((status: TunnelStatus) => void) | null = null; diff --git a/client/src/www/app/fake_tunnel.ts b/client/src/www/app/fake_tunnel.ts index 54274f6068..0776455b1f 100644 --- a/client/src/www/app/fake_tunnel.ts +++ b/client/src/www/app/fake_tunnel.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {Tunnel, TunnelStatus, ShadowsocksSessionConfig} from './tunnel'; import * as errors from '../model/errors'; -import {Tunnel, TunnelStatus, ShadowsocksSessionConfig} from './tunnel'; // Fake Tunnel implementation for demoing and testing. // Note that because this implementation does not emit disconnection events, "switching" between diff --git a/client/src/www/app/main.ts b/client/src/www/app/main.ts index 864e98bcdd..30ec90eaf9 100644 --- a/client/src/www/app/main.ts +++ b/client/src/www/app/main.ts @@ -14,16 +14,17 @@ import '../ui_components/app-root.js'; -import {EventQueue} from '../model/events'; + +import {makeConfig, SIP002_URI} from 'ShadowsocksConfig'; import {App} from './app'; import {onceEnvVars} from './environment'; import {OutlineServerRepository} from './outline_server_repository'; -import {makeConfig, SIP002_URI} from 'ShadowsocksConfig'; import {OutlinePlatform} from './platform'; import {Settings} from './settings'; import {TunnelFactory} from './tunnel'; import {Localizer} from '../../../infrastructure/i18n.js'; +import {EventQueue} from '../model/events'; // Used to determine whether to use Polymer functionality on app initialization failure. let webComponentsAreReady = false; diff --git a/client/src/www/app/outline_server_repository/access_key_serialization.ts b/client/src/www/app/outline_server_repository/access_key_serialization.ts index a3c57f7b97..12e3d061b7 100644 --- a/client/src/www/app/outline_server_repository/access_key_serialization.ts +++ b/client/src/www/app/outline_server_repository/access_key_serialization.ts @@ -15,7 +15,6 @@ import {SHADOWSOCKS_URI} from 'ShadowsocksConfig'; import * as errors from '../../model/errors'; - import {ShadowsocksSessionConfig} from '../tunnel'; // DON'T use these methods outside of this folder! diff --git a/client/src/www/app/outline_server_repository/index.ts b/client/src/www/app/outline_server_repository/index.ts index 3885e8f278..b33763d60a 100644 --- a/client/src/www/app/outline_server_repository/index.ts +++ b/client/src/www/app/outline_server_repository/index.ts @@ -15,14 +15,13 @@ import {makeConfig, SHADOWSOCKS_URI, SIP002_URI} from 'ShadowsocksConfig'; import uuidv4 from 'uuidv4'; +import {staticKeyToShadowsocksSessionConfig} from './access_key_serialization'; +import {OutlineServer} from './server'; import * as errors from '../../model/errors'; import * as events from '../../model/events'; import {ServerRepository, ServerType} from '../../model/server'; - import {TunnelFactory} from '../tunnel'; -import {OutlineServer} from './server'; -import {staticKeyToShadowsocksSessionConfig} from './access_key_serialization'; // TODO(daniellacosse): write unit tests for these functions diff --git a/client/src/www/app/outline_server_repository/outline_server_repository.spec.ts b/client/src/www/app/outline_server_repository/outline_server_repository.spec.ts index 2c544d69c9..9025f950b6 100644 --- a/client/src/www/app/outline_server_repository/outline_server_repository.spec.ts +++ b/client/src/www/app/outline_server_repository/outline_server_repository.spec.ts @@ -12,15 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {makeConfig, SIP002_URI} from 'ShadowsocksConfig'; + +import {OutlineServerRepository, ServersStorageV0, ServersStorageV1, serversStorageV0ConfigToAccessKey} from '.'; +import {OutlineServer} from './server'; import {InMemoryStorage} from '../../../../infrastructure/memory_storage'; import {ServerIncompatible, ServerUrlInvalid, ShadowsocksUnsupportedCipher} from '../../model/errors'; import {EventQueue, ServerAdded, ServerForgetUndone, ServerForgotten, ServerRenamed} from '../../model/events'; - import {FakeOutlineTunnel} from '../fake_tunnel'; -import {OutlineServerRepository, ServersStorageV0, ServersStorageV1, serversStorageV0ConfigToAccessKey} from '.'; -import {OutlineServer} from './server'; -import {makeConfig, SIP002_URI} from 'ShadowsocksConfig'; + // TODO(alalama): unit tests for OutlineServer. diff --git a/client/src/www/app/outline_server_repository/server.ts b/client/src/www/app/outline_server_repository/server.ts index ed94aa24ee..5a411ae915 100644 --- a/client/src/www/app/outline_server_repository/server.ts +++ b/client/src/www/app/outline_server_repository/server.ts @@ -12,13 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {fetchShadowsocksSessionConfig, staticKeyToShadowsocksSessionConfig} from './access_key_serialization'; import * as errors from '../../model/errors'; import * as events from '../../model/events'; import {Server, ServerType} from '../../model/server'; - import {Tunnel, TunnelStatus, ShadowsocksSessionConfig} from '../tunnel'; -import {fetchShadowsocksSessionConfig, staticKeyToShadowsocksSessionConfig} from './access_key_serialization'; // PLEASE DON'T use this class outside of this `outline_server_repository` folder! diff --git a/client/src/www/app/platform.ts b/client/src/www/app/platform.ts index 31d5112950..322d21a86f 100644 --- a/client/src/www/app/platform.ts +++ b/client/src/www/app/platform.ts @@ -14,11 +14,11 @@ import {Clipboard} from './clipboard'; import {EnvironmentVariables} from './environment'; -import {OutlineErrorReporter} from '../shared/error_reporter'; import {TunnelFactory} from './tunnel'; import {Updater} from './updater'; import {UrlInterceptor} from './url_interceptor'; import {VpnInstaller} from './vpn_installer'; +import {OutlineErrorReporter} from '../shared/error_reporter'; // Provides platform-specific dependencies. // TODO: Remove one of hasDeviceSupport and getServerFactory; they're almost the same diff --git a/client/src/www/app/settings.spec.ts b/client/src/www/app/settings.spec.ts index 509557a1f1..23d72f4c28 100644 --- a/client/src/www/app/settings.spec.ts +++ b/client/src/www/app/settings.spec.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {Settings, SettingsKey} from './settings'; import {InMemoryStorage} from '../../../infrastructure/memory_storage'; -import {Settings, SettingsKey} from './settings'; const FAKE_SETTINGS_KEYS = ['key', 'key1', 'key2']; diff --git a/client/src/www/testing/localize.ts b/client/src/www/testing/localize.ts index 432d574f90..dcc5ff593f 100644 --- a/client/src/www/testing/localize.ts +++ b/client/src/www/testing/localize.ts @@ -14,9 +14,10 @@ limitations under the License. */ +import IntlMessageFormat from 'intl-messageformat'; + import type {FormattableMessage, Localizer} from '../../../infrastructure/i18n'; import englishMessages from '../messages/en.json'; -import IntlMessageFormat from 'intl-messageformat'; export const localize: Localizer = (messageID: string, ...formatKeyValueList: FormattableMessage[]): string => { const message = (englishMessages as {[messageID: string]: string})[messageID]; diff --git a/client/src/www/views/contact_view/index.spec.ts b/client/src/www/views/contact_view/index.spec.ts index d65fa84ae8..6ad15bccd3 100644 --- a/client/src/www/views/contact_view/index.spec.ts +++ b/client/src/www/views/contact_view/index.spec.ts @@ -14,14 +14,15 @@ * limitations under the License. */ -import {ContactView} from './index'; - +import {ListItemBase} from '@material/mwc-list/mwc-list-item-base'; +import {Select} from '@material/mwc-select'; import {fixture, html, nextFrame, oneEvent} from '@open-wc/testing'; + +import {ContactView} from './index'; import {SupportForm} from './support_form'; import {OutlineErrorReporter, SentryErrorReporter} from '../../shared/error_reporter'; import {localize} from '../../testing/localize'; -import {ListItemBase} from '@material/mwc-list/mwc-list-item-base'; -import {Select} from '@material/mwc-select'; + describe('ContactView client variant', () => { let el: ContactView; diff --git a/client/src/www/views/contact_view/index.ts b/client/src/www/views/contact_view/index.ts index 92898dc4d5..17f1420211 100644 --- a/client/src/www/views/contact_view/index.ts +++ b/client/src/www/views/contact_view/index.ts @@ -26,11 +26,11 @@ import {Radio} from '@material/mwc-radio'; import {SingleSelectedEvent} from '@material/mwc-list/mwc-list'; import './support_form'; -import {IssueType, UNSUPPORTED_ISSUE_TYPE_HELPPAGES} from './issue_type'; import {AppType} from './app_type'; +import {IssueType, UNSUPPORTED_ISSUE_TYPE_HELPPAGES} from './issue_type'; import {FormValues, SupportForm, ValidFormValues} from './support_form'; -import {OutlineErrorReporter} from '../../shared/error_reporter'; import {Localizer} from '../../../../infrastructure/i18n'; +import {OutlineErrorReporter} from '../../shared/error_reporter'; /** The possible steps in the stepper. Only one step is shown at a time. */ enum Step { diff --git a/client/src/www/views/contact_view/support_form/index.spec.ts b/client/src/www/views/contact_view/support_form/index.spec.ts index f00a85cfff..146b344394 100644 --- a/client/src/www/views/contact_view/support_form/index.spec.ts +++ b/client/src/www/views/contact_view/support_form/index.spec.ts @@ -15,9 +15,10 @@ */ import {TextField} from '@material/mwc-textfield'; +import {fixture, html, nextFrame, oneEvent, triggerBlurFor, triggerFocusFor} from '@open-wc/testing'; + import {FormValues, SupportForm} from './index'; -import {fixture, html, nextFrame, oneEvent, triggerBlurFor, triggerFocusFor} from '@open-wc/testing'; async function setValue(el: TextField, value: string) { await triggerFocusFor(el); diff --git a/client/src/www/views/contact_view/support_form/index.ts b/client/src/www/views/contact_view/support_form/index.ts index 6f5d3ba172..e2cd52e7cc 100644 --- a/client/src/www/views/contact_view/support_form/index.ts +++ b/client/src/www/views/contact_view/support_form/index.ts @@ -15,17 +15,19 @@ */ import {html, css, LitElement, TemplateResult, nothing, PropertyValues} from 'lit'; -import {createRef, Ref, ref} from 'lit/directives/ref.js'; -import {live} from 'lit/directives/live.js'; import {customElement, property, state} from 'lit/decorators.js'; +import {live} from 'lit/directives/live.js'; +import {createRef, Ref, ref} from 'lit/directives/ref.js'; + import '@material/mwc-button'; import '@material/mwc-select'; import '@material/mwc-textarea'; import '@material/mwc-textfield'; +import {Localizer} from '../../../../../infrastructure/i18n'; import {AppType} from '../app_type'; + import {TextField} from '@material/mwc-textfield'; import {SelectedDetail} from '@material/mwc-menu/mwc-menu-base'; -import {Localizer} from '../../../../../infrastructure/i18n'; type FormControl = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement; diff --git a/client/src/www/views/contact_view/support_form/stories.ts b/client/src/www/views/contact_view/support_form/stories.ts index 4cf436d33f..1d2853c361 100644 --- a/client/src/www/views/contact_view/support_form/stories.ts +++ b/client/src/www/views/contact_view/support_form/stories.ts @@ -19,9 +19,9 @@ import {html} from 'lit'; import './index'; -import {AppType} from '../app_type'; import {FormValues} from './index'; import {localize} from '../../../testing/localize'; +import {AppType} from '../app_type'; export default { title: 'Contact View/Support Form', diff --git a/client/src/www/views/servers_view/index.ts b/client/src/www/views/servers_view/index.ts index 709280a2b2..dd70dc2490 100644 --- a/client/src/www/views/servers_view/index.ts +++ b/client/src/www/views/servers_view/index.ts @@ -16,14 +16,15 @@ import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; +import { DirectiveResult } from 'lit/directive'; import {unsafeHTML, UnsafeHTMLDirective} from 'lit/directives/unsafe-html.js'; import '@material/mwc-button'; import './server_connection_indicator'; import './server_list'; -import {ServerListItem as _ServerListItem} from './server_list_item'; import {ServerConnectionState as _ServerConnectionState} from './server_connection_indicator'; +import {ServerListItem as _ServerListItem} from './server_list_item'; import { Localizer } from '../../../../infrastructure/i18n'; export type ServerListItem = _ServerListItem; @@ -31,7 +32,6 @@ export type ServerListItem = _ServerListItem; // (This value is used: it's exported.) // eslint-disable-next-line @typescript-eslint/no-unused-vars export import ServerConnectionState = _ServerConnectionState; -import { DirectiveResult } from 'lit/directive'; @customElement('servers-view') export class ServerList extends LitElement { diff --git a/client/src/www/views/servers_view/server_list/index.ts b/client/src/www/views/servers_view/server_list/index.ts index d6e0b26ee8..7985e3c4bf 100644 --- a/client/src/www/views/servers_view/server_list/index.ts +++ b/client/src/www/views/servers_view/server_list/index.ts @@ -15,8 +15,8 @@ import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; import '../server_list_item/server_card'; -import {ServerListItem} from '../server_list_item'; import {Localizer} from '../../../../../infrastructure/i18n'; +import {ServerListItem} from '../server_list_item'; @customElement('server-list') export class ServerList extends LitElement { diff --git a/client/src/www/views/servers_view/server_list/stories.ts b/client/src/www/views/servers_view/server_list/stories.ts index 6b56c04c96..f13b9c3222 100644 --- a/client/src/www/views/servers_view/server_list/stories.ts +++ b/client/src/www/views/servers_view/server_list/stories.ts @@ -19,8 +19,8 @@ import './index'; import {html} from 'lit'; -import {localize} from '../../../testing/localize'; import {ServerList} from './index'; +import {localize} from '../../../testing/localize'; import {ServerConnectionState} from '../server_connection_indicator'; export default { diff --git a/client/src/www/views/servers_view/server_list_item/index.ts b/client/src/www/views/servers_view/server_list_item/index.ts index 36c1cd990c..29b2361dc3 100644 --- a/client/src/www/views/servers_view/server_list_item/index.ts +++ b/client/src/www/views/servers_view/server_list_item/index.ts @@ -11,10 +11,11 @@ limitations under the License. */ -import {Ref} from 'lit/directives/ref'; import {Menu} from '@material/mwc-menu'; -import {ServerConnectionState} from '../server_connection_indicator'; +import {Ref} from 'lit/directives/ref'; + import {Localizer} from '../../../../../infrastructure/i18n'; +import {ServerConnectionState} from '../server_connection_indicator'; export enum ServerListItemEvent { CONNECT = 'ConnectPressed', diff --git a/client/src/www/views/servers_view/server_list_item/server_card/index.ts b/client/src/www/views/servers_view/server_list_item/server_card/index.ts index b75f68925d..7cde5a7943 100644 --- a/client/src/www/views/servers_view/server_list_item/server_card/index.ts +++ b/client/src/www/views/servers_view/server_list_item/server_card/index.ts @@ -16,15 +16,15 @@ import '@material/mwc-icon-button'; import '@material/mwc-menu'; import '../../server_connection_indicator'; +import {Menu} from '@material/mwc-menu'; import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; import {createRef, Ref, ref} from 'lit/directives/ref.js'; -import {Menu} from '@material/mwc-menu'; import {ServerListItem, ServerListItemElement, ServerListItemEvent} from '..'; -import {ServerConnectionState} from '../../server_connection_indicator'; import {Localizer} from '../../../../../../infrastructure/i18n'; +import {ServerConnectionState} from '../../server_connection_indicator'; const sharedCSS = css` /* TODO(daniellacosse): reset via postcss */ diff --git a/client/src/www/views/servers_view/server_list_item/server_card/stories.ts b/client/src/www/views/servers_view/server_list_item/server_card/stories.ts index e330ea16f2..442b1d1be4 100644 --- a/client/src/www/views/servers_view/server_list_item/server_card/stories.ts +++ b/client/src/www/views/servers_view/server_list_item/server_card/stories.ts @@ -19,9 +19,9 @@ import {html} from 'lit'; import '../../index'; +import {ServerListItemElement} from '..'; import {localize} from '../../../../testing/localize'; import {ServerConnectionState} from '../../server_connection_indicator'; -import {ServerListItemElement} from '..'; export default { title: 'Servers View/Server List Item', diff --git a/package-lock.json b/package-lock.json index d7073fc3fb..d148810b3c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", "electron-builder": "^24.13.3", + "eslint-plugin-import": "^2.29.1", "jasmine": "^5.1.0", "node-fetch": "^2.6.7" }, @@ -6157,8 +6158,9 @@ }, "node_modules/@types/json5": { "version": "0.0.29", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true }, "node_modules/@types/karma": { "version": "5.0.1", @@ -8248,13 +8250,16 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8296,14 +8301,16 @@ "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.5", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -8418,14 +8425,53 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.flat": { - "version": "1.3.0", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -8455,17 +8501,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -8657,10 +8704,13 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -12472,6 +12522,57 @@ "node": ">= 12" } }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -14301,50 +14402,57 @@ "dev": true }, "node_modules/es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.15" }, "engines": { "node": ">= 0.4" @@ -14636,26 +14744,39 @@ "integrity": "sha512-R4lwSjeELpw1Bzu2a7k3nqpxyPMfiXRq7ewqFhydV/zcYgt4b4VZzNonZu/SotJyb4ibEjuqN/OIM4wQCAGmwA==", "dev": true }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, - "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "node_modules/es-to-primitive": { @@ -14929,18 +15050,21 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "license": "MIT", "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } @@ -15000,86 +15124,31 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-compat": { "version": "4.0.2", "dev": true, @@ -15127,23 +15196,28 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.26.0", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, - "license": "MIT", "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" @@ -15153,11 +15227,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -15171,11 +15246,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/eslint-scope": { "version": "5.1.1", "dev": true, @@ -16705,12 +16775,14 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" }, "engines": { "node": ">= 0.4" @@ -17695,17 +17767,6 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "dev": true, @@ -17774,9 +17835,9 @@ } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -17816,11 +17877,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, - "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -17925,9 +17987,9 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -18934,13 +18996,13 @@ } }, "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" }, "engines": { @@ -19134,14 +19196,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19273,6 +19337,21 @@ "node": ">= 0.4" } }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-date-object": { "version": "1.0.5", "dev": true, @@ -19469,9 +19548,10 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -19577,8 +19657,9 @@ }, "node_modules/is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -19612,11 +19693,15 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -19661,12 +19746,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -24059,9 +24144,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -24119,6 +24204,24 @@ "node": ">=0.10.0" } }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/object.getownpropertydescriptors": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", @@ -24138,6 +24241,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -24177,13 +24294,14 @@ } }, "node_modules/object.values": { - "version": "1.1.5", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, - "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -25257,6 +25375,15 @@ "node": ">=0.10.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "7.0.39", "dev": true, @@ -26618,14 +26745,15 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -27739,13 +27867,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -27776,15 +27904,18 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -28063,14 +28194,15 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -29142,14 +29274,15 @@ "license": "MIT" }, "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -29159,28 +29292,31 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -30455,12 +30591,13 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.14.1", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } @@ -30479,8 +30616,9 @@ }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "license": "MIT", "engines": { "node": ">=4" } @@ -30564,29 +30702,30 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -30596,16 +30735,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -30615,14 +30755,20 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -32066,16 +32212,16 @@ "license": "ISC" }, "node_modules/which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -32790,7 +32936,6 @@ "server_manager": { "name": "outline-manager", "version": "0.0.0-debug", - "license": "Apache", "dependencies": { "@polymer/app-layout": "^3.1.0", "@polymer/app-localize-behavior": "^3.0.1", @@ -38436,6 +38581,8 @@ }, "@types/json5": { "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/karma": { @@ -40077,13 +40224,13 @@ "dev": true }, "array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" } }, "array-differ": { @@ -40110,13 +40257,16 @@ "dev": true }, "array-includes": { - "version": "3.1.5", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" } }, @@ -40198,13 +40348,41 @@ "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true }, + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + } + }, "array.prototype.flat": { - "version": "1.3.0", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" } }, @@ -40222,17 +40400,18 @@ } }, "arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "requires": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" } }, @@ -40363,10 +40542,13 @@ } }, "available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "requires": { + "possible-typed-array-names": "^1.0.0" + } }, "aws-sign2": { "version": "0.7.0" @@ -43075,6 +43257,39 @@ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", "dev": true }, + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + } + }, "date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -44492,50 +44707,57 @@ "dev": true }, "es-abstract": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", - "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", - "dev": true, - "requires": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.1", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.3", + "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.15" } }, "es-array-method-boxes-properly": { @@ -44781,22 +45003,33 @@ "integrity": "sha512-R4lwSjeELpw1Bzu2a7k3nqpxyPMfiXRq7ewqFhydV/zcYgt4b4VZzNonZu/SotJyb4ibEjuqN/OIM4wQCAGmwA==", "dev": true }, + "es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0" + } + }, "es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" } }, "es-shim-unscopables": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "has": "^1.0.3" + "hasown": "^2.0.0" } }, "es-to-primitive": { @@ -45044,15 +45277,20 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.6", + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" @@ -45093,56 +45331,22 @@ } }, "eslint-module-utils": { - "version": "2.7.3", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { "ms": "^2.1.1" } - }, - "find-up": { - "version": "2.1.0", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "dev": true } } }, @@ -45176,29 +45380,37 @@ } }, "eslint-plugin-import": { - "version": "2.26.0", + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" }, "dependencies": { "debug": { - "version": "2.6.9", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -45207,10 +45419,6 @@ "requires": { "esutils": "^2.0.2" } - }, - "ms": { - "version": "2.0.0", - "dev": true } } }, @@ -46266,11 +46474,14 @@ "dev": true }, "get-symbol-description": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, "get-tsconfig": { @@ -47053,13 +47264,6 @@ "har-schema": "^2.0.0" } }, - "has": { - "version": "1.0.3", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, "has-ansi": { "version": "2.0.0", "dev": true, @@ -47113,9 +47317,9 @@ } }, "has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" }, "has-symbol-support-x": { "version": "1.4.2", @@ -47136,10 +47340,12 @@ } }, "has-tostringtag": { - "version": "1.0.0", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "requires": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" } }, "has-unicode": { @@ -47221,9 +47427,9 @@ } }, "hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } @@ -47907,13 +48113,13 @@ } }, "internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", + "es-errors": "^1.3.0", + "hasown": "^2.0.0", "side-channel": "^1.0.4" } }, @@ -48048,14 +48254,13 @@ } }, "is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" } }, "is-arrayish": { @@ -48128,6 +48333,15 @@ "hasown": "^2.0.0" } }, + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "requires": { + "is-typed-array": "^1.1.13" + } + }, "is-date-object": { "version": "1.0.5", "dev": true, @@ -48249,7 +48463,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.2", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true }, "is-number": { @@ -48310,6 +48526,8 @@ }, "is-regex": { "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { "call-bind": "^1.0.2", @@ -48332,10 +48550,12 @@ "dev": true }, "is-shared-array-buffer": { - "version": "1.0.2", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" } }, "is-stream": { @@ -48356,12 +48576,12 @@ } }, "is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "requires": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" } }, "is-typedarray": { @@ -51654,9 +51874,9 @@ } }, "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, "object-keys": { "version": "1.1.1", @@ -51695,6 +51915,18 @@ "isobject": "^3.0.0" } }, + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + } + }, "object.getownpropertydescriptors": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", @@ -51708,6 +51940,17 @@ "safe-array-concat": "^1.0.0" } }, + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + } + }, "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", @@ -51738,12 +51981,14 @@ } }, "object.values": { - "version": "1.1.5", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "objectorarray": { @@ -53409,6 +53654,12 @@ "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true }, + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true + }, "postcss": { "version": "7.0.39", "dev": true, @@ -54401,14 +54652,15 @@ } }, "regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, "regexpu-core": { @@ -55199,13 +55451,13 @@ } }, "safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -55231,13 +55483,13 @@ } }, "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", "is-regex": "^1.1.4" } }, @@ -55450,14 +55702,15 @@ } }, "set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" } }, "set-value": { @@ -56286,36 +56539,37 @@ "dev": true }, "string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, "stringify-entities": { @@ -57234,11 +57488,13 @@ } }, "tsconfig-paths": { - "version": "3.14.1", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { "@types/json5": "^0.0.29", - "json5": "^1.0.1", + "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, @@ -57254,6 +57510,8 @@ }, "strip-bom": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } @@ -57311,50 +57569,55 @@ } }, "typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, "typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" } }, "typed-emitter": { @@ -58344,16 +58607,16 @@ "dev": true }, "which-typed-array": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", - "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, "requires": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.2" } }, "wide-align": { diff --git a/package.json b/package.json index e2da984d7c..8aae0e741e 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "@typescript-eslint/eslint-plugin": "^7.7.0", "@typescript-eslint/parser": "^7.7.0", "electron-builder": "^24.13.3", + "eslint-plugin-import": "^2.29.1", "jasmine": "^5.1.0", "node-fetch": "^2.6.7" }, diff --git a/server_manager/electron_and_karma_chromium.spec.ts b/server_manager/electron_and_karma_chromium.spec.ts index c42bccb9bc..ec04ea6112 100644 --- a/server_manager/electron_and_karma_chromium.spec.ts +++ b/server_manager/electron_and_karma_chromium.spec.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {version as electronVersion} from 'electron/package.json'; import {electronToChromium} from 'electron-to-chromium'; // Since we aren't in the electron process, process.versions.electron isn't defined. -import {version as electronVersion} from 'electron/package.json'; // TODO(update-to-esm): we can only use node-fetch@2 now because the latest node-fetch requires ESM import fetch from 'node-fetch'; diff --git a/server_manager/electron_app/digitalocean_oauth.ts b/server_manager/electron_app/digitalocean_oauth.ts index 5573eadf47..68f51315db 100644 --- a/server_manager/electron_app/digitalocean_oauth.ts +++ b/server_manager/electron_app/digitalocean_oauth.ts @@ -13,10 +13,11 @@ // limitations under the License. import * as crypto from 'crypto'; -import * as electron from 'electron'; -import * as express from 'express'; import * as http from 'http'; import {AddressInfo} from 'net'; + +import * as electron from 'electron'; +import * as express from 'express'; import * as request from 'request'; const REGISTERED_REDIRECTS: Array<{clientId: string; port: number}> = [ diff --git a/server_manager/electron_app/fetch.spec.ts b/server_manager/electron_app/fetch.spec.ts index 508d820982..12a3686736 100644 --- a/server_manager/electron_app/fetch.spec.ts +++ b/server_manager/electron_app/fetch.spec.ts @@ -13,12 +13,14 @@ // limitations under the License. import * as crypto from 'crypto'; -import * as tls from 'tls'; import * as https from 'https'; +import {AddressInfo} from 'net'; +import * as tls from 'tls'; + import * as forge from 'node-forge'; import {fetchWithPin} from './fetch'; -import {AddressInfo} from 'net'; + describe('fetchWithPin', () => { it('throws on pin mismatch (remote)', async () => { diff --git a/server_manager/electron_app/fetch.ts b/server_manager/electron_app/fetch.ts index 8672bb776e..0e56192949 100644 --- a/server_manager/electron_app/fetch.ts +++ b/server_manager/electron_app/fetch.ts @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +import type {IncomingMessage} from 'http'; import * as https from 'https'; import {TLSSocket} from 'tls'; import {urlToHttpOptions} from 'url'; -import type {IncomingMessage} from 'http'; import type {HttpRequest, HttpResponse} from '../infrastructure/path_api'; diff --git a/server_manager/electron_app/gcp_oauth.ts b/server_manager/electron_app/gcp_oauth.ts index e03436cadd..9e95d63c86 100644 --- a/server_manager/electron_app/gcp_oauth.ts +++ b/server_manager/electron_app/gcp_oauth.ts @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {AddressInfo} from 'net'; + import * as electron from 'electron'; import * as express from 'express'; import {OAuth2Client} from 'google-auth-library'; -import {AddressInfo} from 'net'; // Note: For native apps, the "client secret" is not actually a secret. // See https://developers.google.com/identity/protocols/oauth2/native-app. diff --git a/server_manager/electron_app/index.ts b/server_manager/electron_app/index.ts index 5954be1f42..7e202d0294 100644 --- a/server_manager/electron_app/index.ts +++ b/server_manager/electron_app/index.ts @@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as path from 'path'; +import {URL, URLSearchParams} from 'url'; + import * as Sentry from '@sentry/electron/main'; import * as dotenv from 'dotenv'; import * as electron from 'electron'; import {autoUpdater} from 'electron-updater'; -import * as path from 'path'; -import {URL, URLSearchParams} from 'url'; -import type {HttpRequest, HttpResponse} from '../infrastructure/path_api'; import {fetchWithPin} from './fetch'; import * as menu from './menu'; +import type {HttpRequest, HttpResponse} from '../infrastructure/path_api'; // Injected by webpack during build declare const SENTRY_DSN: string | undefined; diff --git a/server_manager/electron_app/preload.ts b/server_manager/electron_app/preload.ts index f275ac46b5..0d1ebc88ec 100644 --- a/server_manager/electron_app/preload.ts +++ b/server_manager/electron_app/preload.ts @@ -18,8 +18,8 @@ import {Breadcrumb} from '@sentry/electron'; import * as digitalocean_oauth from './digitalocean_oauth'; import * as gcp_oauth from './gcp_oauth'; -import {HttpRequest, HttpResponse} from '../infrastructure/path_api'; import {redactManagerUrl} from './util'; +import {HttpRequest, HttpResponse} from '../infrastructure/path_api'; // This file is run in the renderer process *before* nodeIntegration is disabled. // diff --git a/server_manager/model/server.ts b/server_manager/model/server.ts index 2b36bc4df9..6f23ca929f 100644 --- a/server_manager/model/server.ts +++ b/server_manager/model/server.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {CustomError} from '../infrastructure/custom_error'; import {CloudLocation} from './location'; +import {CustomError} from '../infrastructure/custom_error'; export interface Server { // Gets a globally unique identifier for this Server. THIS MUST NOT make a network request, as diff --git a/server_manager/web_app/app.spec.ts b/server_manager/web_app/app.spec.ts index 76ced171ff..348e28e160 100644 --- a/server_manager/web_app/app.spec.ts +++ b/server_manager/web_app/app.spec.ts @@ -14,13 +14,13 @@ import './ui_components/app-root'; -import * as accounts from '../model/accounts'; -import * as server from '../model/server'; import {App, LAST_DISPLAYED_SERVER_STORAGE_KEY} from './app'; import {FakeCloudAccounts, FakeDigitalOceanAccount, FakeManualServerRepository} from './testing/models'; import {AppRoot} from './ui_components/app-root'; +import * as accounts from '../model/accounts'; import {Region} from '../model/digitalocean'; +import * as server from '../model/server'; // Define functions from preload.ts. // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/server_manager/web_app/app.ts b/server_manager/web_app/app.ts index bd4d47823e..84704e8029 100644 --- a/server_manager/web_app/app.ts +++ b/server_manager/web_app/app.ts @@ -15,24 +15,23 @@ import * as Sentry from '@sentry/electron/renderer'; import * as semver from 'semver'; +import {DisplayDataAmount, displayDataAmountToBytes} from './data_formatting'; +import {filterOptions, getShortName} from './location_formatting'; +import {parseManualServerConfig} from './management_urls'; +import type {AppRoot, ServerListEntry} from './ui_components/app-root'; +import type {FeedbackDetail} from './ui_components/outline-feedback-dialog'; +import type {DisplayAccessKey, ServerView} from './ui_components/outline-server-view'; import * as digitalocean_api from '../cloud/digitalocean_api'; +import {HttpError} from '../cloud/gcp_api'; +import {CustomError} from '../infrastructure/custom_error'; import * as path_api from '../infrastructure/path_api'; import {sleep} from '../infrastructure/sleep'; import * as accounts from '../model/accounts'; import * as digitalocean from '../model/digitalocean'; import * as gcp from '../model/gcp'; +import type {CloudLocation} from '../model/location'; import * as server_model from '../model/server'; -import {DisplayDataAmount, displayDataAmountToBytes} from './data_formatting'; -import {filterOptions, getShortName} from './location_formatting'; -import {parseManualServerConfig} from './management_urls'; -import {HttpError} from '../cloud/gcp_api'; - -import type {CloudLocation} from '../model/location'; -import type {AppRoot, ServerListEntry} from './ui_components/app-root'; -import type {FeedbackDetail} from './ui_components/outline-feedback-dialog'; -import type {DisplayAccessKey, ServerView} from './ui_components/outline-server-view'; -import {CustomError} from '../infrastructure/custom_error'; // The Outline DigitalOcean team's referral code: // https://www.digitalocean.com/help/referral-program/ diff --git a/server_manager/web_app/cloud_accounts.spec.ts b/server_manager/web_app/cloud_accounts.spec.ts index 67fab382e1..e57416164d 100644 --- a/server_manager/web_app/cloud_accounts.spec.ts +++ b/server_manager/web_app/cloud_accounts.spec.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {CloudAccounts} from './cloud_accounts'; import {InMemoryStorage} from '../infrastructure/memory_storage'; -import {CloudAccounts} from './cloud_accounts'; describe('CloudAccounts', () => { it('get account methods return null when no cloud accounts are connected', () => { diff --git a/server_manager/web_app/cloud_accounts.ts b/server_manager/web_app/cloud_accounts.ts index ae4a7419a5..69d57a701e 100644 --- a/server_manager/web_app/cloud_accounts.ts +++ b/server_manager/web_app/cloud_accounts.ts @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as accounts from '../model/accounts'; -import * as digitalocean from '../model/digitalocean'; -import * as gcp from '../model/gcp'; import {DigitalOceanAccount} from './digitalocean_account'; import {GcpAccount} from './gcp_account'; import {ShadowboxSettings} from './server_install'; +import * as accounts from '../model/accounts'; +import * as digitalocean from '../model/digitalocean'; +import * as gcp from '../model/gcp'; type DigitalOceanAccountJson = { accessToken: string; diff --git a/server_manager/web_app/digitalocean_account.ts b/server_manager/web_app/digitalocean_account.ts index b2cb774fcf..90e2517b35 100644 --- a/server_manager/web_app/digitalocean_account.ts +++ b/server_manager/web_app/digitalocean_account.ts @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {DigitalOceanServer} from './digitalocean_server'; +import {getShellExportCommands, ShadowboxSettings} from './server_install'; import {DigitalOceanSession, DropletInfo, RestApiSession} from '../cloud/digitalocean_api'; import * as crypto from '../infrastructure/crypto'; import * as do_install_script from '../install_scripts/do_install_script'; import * as digitalocean from '../model/digitalocean'; import * as server from '../model/server'; -import {DigitalOceanServer} from './digitalocean_server'; -import {getShellExportCommands, ShadowboxSettings} from './server_install'; // Tag used to mark Shadowbox Droplets. const SHADOWBOX_TAG = 'shadowbox'; diff --git a/server_manager/web_app/digitalocean_server.ts b/server_manager/web_app/digitalocean_server.ts index 217d0e4c63..a5f6e335fc 100644 --- a/server_manager/web_app/digitalocean_server.ts +++ b/server_manager/web_app/digitalocean_server.ts @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {makePathApiClient} from './fetcher'; +import {ShadowboxServer} from './shadowbox_server'; import {DigitalOceanSession, DropletInfo} from '../cloud/digitalocean_api'; import {hexToString} from '../infrastructure/hex_encoding'; import {sleep} from '../infrastructure/sleep'; import {ValueStream} from '../infrastructure/value_stream'; import {Region} from '../model/digitalocean'; import * as server from '../model/server'; -import {makePathApiClient} from './fetcher'; -import {ShadowboxServer} from './shadowbox_server'; // Prefix used in key-value tags. const KEY_VALUE_TAG = 'kv'; diff --git a/server_manager/web_app/gallery_app/main.ts b/server_manager/web_app/gallery_app/main.ts index 300523f9d8..0eeb4e5ca1 100644 --- a/server_manager/web_app/gallery_app/main.ts +++ b/server_manager/web_app/gallery_app/main.ts @@ -31,9 +31,9 @@ import {customElement, property} from 'lit/decorators.js'; import * as gcp from '../../model/gcp'; import {FakeManagedServer, FakeGcpAccount} from '../testing/models'; -import {OutlinePerKeyDataLimitDialog} from '../ui_components/outline-per-key-data-limit-dialog'; -import {COMMON_STYLES} from '../ui_components/cloud-install-styles'; import {DisplayCloudId} from '../ui_components/cloud-assets'; +import {COMMON_STYLES} from '../ui_components/cloud-install-styles'; +import {OutlinePerKeyDataLimitDialog} from '../ui_components/outline-per-key-data-limit-dialog'; const FAKE_SERVER = new FakeManagedServer('fake-id', true); diff --git a/server_manager/web_app/gcp_account.ts b/server_manager/web_app/gcp_account.ts index 2f6b1d9ebc..6be00249c1 100644 --- a/server_manager/web_app/gcp_account.ts +++ b/server_manager/web_app/gcp_account.ts @@ -12,6 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {GcpServer} from './gcp_server'; +import * as server_install from './server_install'; import * as gcp_api from '../cloud/gcp_api'; import {sleep} from '../infrastructure/sleep'; import {SCRIPT} from '../install_scripts/gcp_install_script'; @@ -19,8 +21,6 @@ import * as gcp from '../model/gcp'; import {BillingAccount, Project} from '../model/gcp'; import * as server from '../model/server'; -import {GcpServer} from './gcp_server'; -import * as server_install from './server_install'; /** Returns a unique, RFC1035-style name as required by GCE. */ function makeGcpInstanceName(): string { diff --git a/server_manager/web_app/gcp_server.ts b/server_manager/web_app/gcp_server.ts index 98f3a5c7ef..bd05bb45f2 100644 --- a/server_manager/web_app/gcp_server.ts +++ b/server_manager/web_app/gcp_server.ts @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {makePathApiClient} from './fetcher'; +import {ShadowboxServer} from './shadowbox_server'; import * as gcp_api from '../cloud/gcp_api'; import {sleep} from '../infrastructure/sleep'; import {ValueStream} from '../infrastructure/value_stream'; import {Zone} from '../model/gcp'; import * as server from '../model/server'; import {DataAmount, ManagedServerHost, MonetaryCost} from '../model/server'; -import {makePathApiClient} from './fetcher'; -import {ShadowboxServer} from './shadowbox_server'; enum InstallState { // Unknown state - server request may still be pending. diff --git a/server_manager/web_app/location_formatting.spec.ts b/server_manager/web_app/location_formatting.spec.ts index a31169796e..281bd98bae 100644 --- a/server_manager/web_app/location_formatting.spec.ts +++ b/server_manager/web_app/location_formatting.spec.ts @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import * as location from '../model/location'; import {filterOptions, getShortName, localizeCountry} from './location_formatting'; +import * as location from '../model/location'; describe('getShortName', () => { it('basic case', () => { diff --git a/server_manager/web_app/main.ts b/server_manager/web_app/main.ts index becc0d5802..6887975119 100644 --- a/server_manager/web_app/main.ts +++ b/server_manager/web_app/main.ts @@ -14,13 +14,13 @@ import './ui_components/app-root'; -import * as i18n from '../infrastructure/i18n'; import {App} from './app'; import {CloudAccounts} from './cloud_accounts'; import {ManualServerRepository} from './manual_server'; import {AppRoot} from './ui_components/app-root'; import {LanguageDef} from './ui_components/outline-language-picker'; +import * as i18n from '../infrastructure/i18n'; const SUPPORTED_LANGUAGES: {[key: string]: LanguageDef} = { af: {id: 'af', name: 'Afrikaans', dir: 'ltr'}, diff --git a/server_manager/web_app/manual_server.ts b/server_manager/web_app/manual_server.ts index ea28cc27b3..6aa84d1439 100644 --- a/server_manager/web_app/manual_server.ts +++ b/server_manager/web_app/manual_server.ts @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {makePathApiClient} from './fetcher'; +import {ShadowboxServer} from './shadowbox_server'; import {hexToString} from '../infrastructure/hex_encoding'; import * as server from '../model/server'; -import {makePathApiClient} from './fetcher'; -import {ShadowboxServer} from './shadowbox_server'; class ManualServer extends ShadowboxServer implements server.ManualServer { constructor(id: string, private manualServerConfig: server.ManualServerConfig, private forgetCallback: Function) { diff --git a/server_manager/web_app/outline-gcp-create-server-app.ts b/server_manager/web_app/outline-gcp-create-server-app.ts index bfdfb88dd4..1892f776f1 100644 --- a/server_manager/web_app/outline-gcp-create-server-app.ts +++ b/server_manager/web_app/outline-gcp-create-server-app.ts @@ -24,12 +24,12 @@ import {css, html, LitElement} from 'lit'; import {customElement, property, state} from 'lit/decorators.js'; import {unsafeHTML} from 'lit/directives/unsafe-html.js'; -import {AppRoot} from './ui_components/app-root'; -import {BillingAccount, Project, Zone, Account} from '../model/gcp'; import {GcpAccount, isInFreeTier} from './gcp_account'; +import {filterOptions, getShortName} from './location_formatting'; +import {AppRoot} from './ui_components/app-root'; import {COMMON_STYLES} from './ui_components/cloud-install-styles'; import {OutlineRegionPicker} from './ui_components/outline-region-picker-step'; -import {filterOptions, getShortName} from './location_formatting'; +import {BillingAccount, Project, Zone, Account} from '../model/gcp'; import {CloudLocation} from '../model/location'; @customElement('outline-gcp-create-server-app') diff --git a/server_manager/web_app/shadowbox_server.ts b/server_manager/web_app/shadowbox_server.ts index 9b40261413..0b1cbdda6e 100644 --- a/server_manager/web_app/shadowbox_server.ts +++ b/server_manager/web_app/shadowbox_server.ts @@ -14,8 +14,8 @@ import * as semver from 'semver'; -import * as server from '../model/server'; import {PathApiClient} from '../infrastructure/path_api'; +import * as server from '../model/server'; interface AccessKeyJson { id: string; diff --git a/server_manager/web_app/survey.spec.ts b/server_manager/web_app/survey.spec.ts index f3d72376a5..2b42d0d76f 100644 --- a/server_manager/web_app/survey.spec.ts +++ b/server_manager/web_app/survey.spec.ts @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +import {OutlineSurveys} from './survey'; import {InMemoryStorage} from '../infrastructure/memory_storage'; -import {OutlineSurveys} from './survey'; describe('Surveys', () => { it('presents data limits surveys with the correct arguments', async () => { diff --git a/server_manager/web_app/ui_components/app-root.ts b/server_manager/web_app/ui_components/app-root.ts index 2e78a16d84..9e319c4442 100644 --- a/server_manager/web_app/ui_components/app-root.ts +++ b/server_manager/web_app/ui_components/app-root.ts @@ -44,32 +44,32 @@ import './outline-tos-view'; import './if_messages'; -import {AppLocalizeBehavior} from '@polymer/app-localize-behavior/app-localize-behavior'; -import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class'; -import {html} from '@polymer/polymer/lib/utils/html-tag'; -import {PolymerElement} from '@polymer/polymer/polymer-element'; -import {DisplayCloudId} from './cloud-assets'; - -import type {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin'; import type {AppDrawerElement} from '@polymer/app-layout/app-drawer/app-drawer'; import type {AppDrawerLayoutElement} from '@polymer/app-layout/app-drawer-layout/app-drawer-layout'; +import {AppLocalizeBehavior} from '@polymer/app-localize-behavior/app-localize-behavior'; import type {PaperDialogElement} from '@polymer/paper-dialog/paper-dialog'; import type {PaperToastElement} from '@polymer/paper-toast/paper-toast'; import type {PolymerElementProperties} from '@polymer/polymer/interfaces'; -import type {OutlineRegionPicker} from './outline-region-picker-step'; +import {mixinBehaviors} from '@polymer/polymer/lib/legacy/class'; +import type {LegacyElementMixin} from '@polymer/polymer/lib/legacy/legacy-element-mixin'; +import {html} from '@polymer/polymer/lib/utils/html-tag'; +import {PolymerElement} from '@polymer/polymer/polymer-element'; + +import {DisplayCloudId} from './cloud-assets'; +import type {OutlineAboutDialog} from './outline-about-dialog'; import type {OutlineDoOauthStep} from './outline-do-oauth-step'; +import type {OutlineFeedbackDialog} from './outline-feedback-dialog'; import type {GcpConnectAccountApp} from './outline-gcp-oauth-step'; -import type {GcpCreateServerApp} from '../outline-gcp-create-server-app'; -import type {OutlineServerList, ServerViewListEntry} from './outline-server-list'; +import type {LanguageDef} from './outline-language-picker'; import type {OutlineManualServerEntry} from './outline-manual-server-entry'; -import type {OutlinePerKeyDataLimitDialog} from './outline-per-key-data-limit-dialog'; -import type {OutlineFeedbackDialog} from './outline-feedback-dialog'; -import type {OutlineAboutDialog} from './outline-about-dialog'; -import type {OutlineShareDialog} from './outline-share-dialog'; import type {OutlineMetricsOptionDialog} from './outline-metrics-option-dialog'; import type {OutlineModalDialog} from './outline-modal-dialog'; +import type {OutlinePerKeyDataLimitDialog} from './outline-per-key-data-limit-dialog'; +import type {OutlineRegionPicker} from './outline-region-picker-step'; +import type {OutlineServerList, ServerViewListEntry} from './outline-server-list'; import type {ServerView} from './outline-server-view'; -import type {LanguageDef} from './outline-language-picker'; +import type {OutlineShareDialog} from './outline-share-dialog'; +import type {GcpCreateServerApp} from '../outline-gcp-create-server-app'; const TOS_ACK_LOCAL_STORAGE_KEY = 'tos-ack'; diff --git a/server_manager/web_app/ui_components/outline-gcp-oauth-step.ts b/server_manager/web_app/ui_components/outline-gcp-oauth-step.ts index 7541191342..1a28d0ff88 100644 --- a/server_manager/web_app/ui_components/outline-gcp-oauth-step.ts +++ b/server_manager/web_app/ui_components/outline-gcp-oauth-step.ts @@ -18,6 +18,7 @@ import './outline-step-view'; import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; + import {COMMON_STYLES} from '../ui_components/cloud-install-styles'; @customElement('outline-gcp-oauth-step') diff --git a/server_manager/web_app/ui_components/outline-manual-server-entry.ts b/server_manager/web_app/ui_components/outline-manual-server-entry.ts index e8040406c1..d9261f82ad 100644 --- a/server_manager/web_app/ui_components/outline-manual-server-entry.ts +++ b/server_manager/web_app/ui_components/outline-manual-server-entry.ts @@ -26,11 +26,11 @@ import './outline-cloud-instructions-view'; import './outline-step-view'; import './style.css'; +import type {IronCollapseElement} from '@polymer/iron-collapse/iron-collapse'; +import type {IronIconElement} from '@polymer/iron-icon/iron-icon'; import {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn'; import {html} from '@polymer/polymer/lib/utils/html-tag'; -import type {IronCollapseElement} from '@polymer/iron-collapse/iron-collapse'; -import type {IronIconElement} from '@polymer/iron-icon/iron-icon'; export interface OutlineManualServerEntry extends Element { clear(): void; diff --git a/server_manager/web_app/ui_components/outline-per-key-data-limit-dialog.ts b/server_manager/web_app/ui_components/outline-per-key-data-limit-dialog.ts index 23c5b899c1..0853dcfd32 100644 --- a/server_manager/web_app/ui_components/outline-per-key-data-limit-dialog.ts +++ b/server_manager/web_app/ui_components/outline-per-key-data-limit-dialog.ts @@ -28,6 +28,7 @@ import {PaperListboxElement} from '@polymer/paper-listbox/paper-listbox'; import {css, html, LitElement} from 'lit'; import {customElement, property, state} from 'lit/decorators.js'; +import {COMMON_STYLES} from './cloud-install-styles'; import { bytesToDisplayDataAmount, DisplayDataAmount, @@ -35,7 +36,6 @@ import { formatBytesParts, } from '../data_formatting'; -import {COMMON_STYLES} from './cloud-install-styles'; /** * A floating window representing settings specific to individual access keys. Its state is diff --git a/server_manager/web_app/ui_components/outline-server-progress-step.ts b/server_manager/web_app/ui_components/outline-server-progress-step.ts index e097a9c2a5..3a27f16885 100644 --- a/server_manager/web_app/ui_components/outline-server-progress-step.ts +++ b/server_manager/web_app/ui_components/outline-server-progress-step.ts @@ -19,6 +19,7 @@ import './outline-progress-spinner'; import './outline-step-view'; import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; + import {COMMON_STYLES} from './cloud-install-styles'; @customElement('outline-server-progress-step') diff --git a/server_manager/web_app/ui_components/outline-server-settings.ts b/server_manager/web_app/ui_components/outline-server-settings.ts index 0f49d64c5e..c959500868 100644 --- a/server_manager/web_app/ui_components/outline-server-settings.ts +++ b/server_manager/web_app/ui_components/outline-server-settings.ts @@ -26,8 +26,8 @@ import './outline-validated-input'; import {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn'; import {html} from '@polymer/polymer/lib/utils/html-tag'; -import {formatBytesParts} from '../data_formatting'; import {getCloudName, getCloudIcon} from './cloud-assets'; +import {formatBytesParts} from '../data_formatting'; import {getShortName} from '../location_formatting'; export interface OutlineServerSettings extends Element { diff --git a/server_manager/web_app/ui_components/outline-server-view.ts b/server_manager/web_app/ui_components/outline-server-view.ts index ce04aebac5..43449581a7 100644 --- a/server_manager/web_app/ui_components/outline-server-view.ts +++ b/server_manager/web_app/ui_components/outline-server-view.ts @@ -34,18 +34,17 @@ import './outline-server-settings'; import './outline-share-dialog'; import './outline-sort-span'; import {html, PolymerElement} from '@polymer/polymer'; +import type {PolymerElementProperties} from '@polymer/polymer/interfaces'; +import type {DomRepeat} from '@polymer/polymer/lib/elements/dom-repeat'; import {DirMixin} from '@polymer/polymer/lib/mixins/dir-mixin'; -import * as formatting from '../data_formatting'; -import {getShortName} from '../location_formatting'; import {getCloudIcon} from './cloud-assets'; - -import type {PolymerElementProperties} from '@polymer/polymer/interfaces'; -import type {DomRepeat} from '@polymer/polymer/lib/elements/dom-repeat'; -import type {CloudLocation} from '../../model/location'; -import type {AccessKeyId} from '../../model/server'; import type {OutlineHelpBubble} from './outline-help-bubble'; import type {OutlineServerSettings} from './outline-server-settings'; +import type {CloudLocation} from '../../model/location'; +import type {AccessKeyId} from '../../model/server'; +import * as formatting from '../data_formatting'; +import {getShortName} from '../location_formatting'; export const MY_CONNECTION_USER_ID = '0'; diff --git a/server_manager/web_app/ui_components/outline-survey-dialog.ts b/server_manager/web_app/ui_components/outline-survey-dialog.ts index 823dbcc600..fb995e9d44 100644 --- a/server_manager/web_app/ui_components/outline-survey-dialog.ts +++ b/server_manager/web_app/ui_components/outline-survey-dialog.ts @@ -18,12 +18,12 @@ import '@polymer/neon-animation/animations/slide-from-bottom-animation'; import '@polymer/paper-button/paper-button'; import '@polymer/paper-dialog/paper-dialog'; +import type {PaperDialogElement} from '@polymer/paper-dialog/paper-dialog'; +import type {PolymerElementProperties} from '@polymer/polymer/interfaces'; import {DirMixin} from '@polymer/polymer/lib/mixins/dir-mixin'; import {html} from '@polymer/polymer/lib/utils/html-tag'; import {PolymerElement} from '@polymer/polymer/polymer-element'; -import type {PolymerElementProperties} from '@polymer/polymer/interfaces'; -import type {PaperDialogElement} from '@polymer/paper-dialog/paper-dialog'; class OutlineSurveyDialog extends DirMixin(PolymerElement) { static get template() { diff --git a/server_manager/web_app/ui_components/outline-tos-view.ts b/server_manager/web_app/ui_components/outline-tos-view.ts index 454f39ff96..f65e05cef0 100644 --- a/server_manager/web_app/ui_components/outline-tos-view.ts +++ b/server_manager/web_app/ui_components/outline-tos-view.ts @@ -14,7 +14,6 @@ limitations under the License. */ import {Polymer} from '@polymer/polymer/lib/legacy/polymer-fn'; - import {html} from '@polymer/polymer/lib/utils/html-tag'; Polymer({ _template: html` diff --git a/src/electron/go_vpn_tunnel.ts b/src/electron/go_vpn_tunnel.ts index 6f10f3c5f9..0ea6ace070 100755 --- a/src/electron/go_vpn_tunnel.ts +++ b/src/electron/go_vpn_tunnel.ts @@ -12,17 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {powerMonitor} from 'electron'; import {platform} from 'os'; +import {powerMonitor} from 'electron'; + +import {ChildProcessHelper, ProcessTerminatedExitCodeError, ProcessTerminatedSignalError} from './process'; +import {RoutingDaemon} from './routing_service'; +import {VpnTunnel} from './vpn_tunnel'; import {pathToEmbeddedBinary} from '../../client/infrastructure/electron/app_paths'; import {ShadowsocksSessionConfig} from '../../client/src/www/app/tunnel'; import {TunnelStatus} from '../../client/src/www/app/tunnel'; import {ErrorCode, fromErrorCode, UnexpectedPluginError} from '../../client/src/www/model/errors'; -import {ChildProcessHelper, ProcessTerminatedExitCodeError, ProcessTerminatedSignalError} from './process'; -import {RoutingDaemon} from './routing_service'; -import {VpnTunnel} from './vpn_tunnel'; const isLinux = platform() === 'linux'; const isWindows = platform() === 'win32'; diff --git a/src/electron/index.ts b/src/electron/index.ts index f0afcd1990..dfd3a5d957 100644 --- a/src/electron/index.ts +++ b/src/electron/index.ts @@ -14,24 +14,25 @@ // Directly import @sentry/electron main process code. // See: https://docs.sentry.io/platforms/javascript/guides/electron/#webpack-configuration -import * as Sentry from '@sentry/electron/main'; -import {app, BrowserWindow, ipcMain, Menu, MenuItemConstructorOptions, nativeImage, shell, Tray} from 'electron'; -import {autoUpdater} from 'electron-updater'; import * as os from 'os'; import * as path from 'path'; import * as process from 'process'; import * as url from 'url'; + +import * as Sentry from '@sentry/electron/main'; import autoLaunch = require('auto-launch'); // tslint:disable-line +import {app, BrowserWindow, ipcMain, Menu, MenuItemConstructorOptions, nativeImage, shell, Tray} from 'electron'; +import {autoUpdater} from 'electron-updater'; -import * as errors from '../../client/src/www/model/errors'; -import {ShadowsocksSessionConfig} from '../../client/src/www/app/tunnel'; -import {TunnelStatus} from '../../client/src/www/app/tunnel'; +import {lookupIp} from './connectivity'; import {GoVpnTunnel} from './go_vpn_tunnel'; import {installRoutingServices, RoutingDaemon} from './routing_service'; import {TunnelStore, SerializableTunnel} from './tunnel_store'; import {VpnTunnel} from './vpn_tunnel'; -import {lookupIp} from './connectivity'; +import {TunnelStatus} from '../../client/src/www/app/tunnel'; +import {ShadowsocksSessionConfig} from '../../client/src/www/app/tunnel'; +import * as errors from '../../client/src/www/model/errors'; // TODO: can we define these macros in other .d.ts files with default values? // Build-time macros injected by webpack's DefinePlugin: diff --git a/src/electron/preload.d.ts b/src/electron/preload.d.ts index 57323f116f..6b727eda2b 100644 --- a/src/electron/preload.d.ts +++ b/src/electron/preload.d.ts @@ -13,6 +13,7 @@ // limitations under the License. import {Clipboard} from 'electron'; + import {ElectronRendererMethodChannel} from './preload'; // This file can be referenced in electron renderer scripts. It defines diff --git a/src/electron/routing_service.ts b/src/electron/routing_service.ts index 055ceee718..aa118818b1 100755 --- a/src/electron/routing_service.ts +++ b/src/electron/routing_service.ts @@ -12,11 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {createHash} from 'node:crypto'; -import * as fsextra from 'fs-extra'; import {createConnection, Socket} from 'net'; +import {createHash} from 'node:crypto'; import {platform, userInfo} from 'os'; import * as path from 'path'; + +import * as fsextra from 'fs-extra'; import * as sudo from 'sudo-prompt'; import {getAppPath} from '../../client/infrastructure/electron/app_paths'; From ec7abe132b9e510cafdc9f597ab92302a85fa8e9 Mon Sep 17 00:00:00 2001 From: Sander Bruens Date: Mon, 22 Apr 2024 17:13:50 -0400 Subject: [PATCH 2/3] Include `.mjs` files. --- client/src/cordova/android/import_messages.mjs | 1 + client/src/cordova/apple/import_messages.mjs | 1 + client/src/cordova/build.action.mjs | 7 +++---- client/src/cordova/import_messages.action.mjs | 10 ++++++---- client/src/cordova/setup.action.mjs | 10 ++++++---- client/src/cordova/test.action.mjs | 7 ++++--- client/src/tun2socks/build.action.mjs | 1 + client/src/www/build.action.mjs | 10 +++++----- client/src/www/get_browser_webpack_config.mjs | 2 +- client/src/www/start.action.mjs | 3 ++- client/src/www/storybook.action.mjs | 7 ++++--- client/src/www/test.action.mjs | 7 +++++-- client/src/www/webpack_base.mjs | 5 +++-- client/src/www/webpack_cordova.mjs | 3 ++- client/src/www/webpack_electron.mjs | 4 +++- client/src/www/webpack_test.mjs | 3 ++- list.action.mjs | 6 ++++-- .../windows/sign_windows_executable.mjs | 3 ++- src/build/download_file.mjs | 1 + src/build/run_action.mjs | 3 ++- src/build/spawn_stream.mjs | 3 ++- src/electron/build.action.mjs | 17 +++++++++++------ src/electron/build_main.action.mjs | 11 ++++++----- src/electron/start.action.mjs | 3 ++- src/electron/webpack_electron_main.mjs | 3 ++- .../windows/sign_windows_executable.action.mjs | 3 ++- 26 files changed, 83 insertions(+), 51 deletions(-) diff --git a/client/src/cordova/android/import_messages.mjs b/client/src/cordova/android/import_messages.mjs index fb2d2dd84d..f1ac1cbda5 100644 --- a/client/src/cordova/android/import_messages.mjs +++ b/client/src/cordova/android/import_messages.mjs @@ -14,6 +14,7 @@ import {readFile, writeFile} from 'fs/promises'; import path from 'path'; + import XML from 'xmlbuilder2'; const STRINGS_DIR = ['src', 'cordova', 'plugin', 'android', 'resources', 'strings']; diff --git a/client/src/cordova/apple/import_messages.mjs b/client/src/cordova/apple/import_messages.mjs index dcabcff4e6..ec0034f0e9 100644 --- a/client/src/cordova/apple/import_messages.mjs +++ b/client/src/cordova/apple/import_messages.mjs @@ -13,6 +13,7 @@ // limitations under the License. import path from 'path'; + import I18N from 'i18n-strings-files'; const STRINGS_DIR = ['src', 'cordova', 'apple', 'OutlineAppleLib', 'Sources', 'OutlineAppKitBridge', 'Resources', 'Strings']; diff --git a/client/src/cordova/build.action.mjs b/client/src/cordova/build.action.mjs index cb18eed7bd..927b2a02d9 100644 --- a/client/src/cordova/build.action.mjs +++ b/client/src/cordova/build.action.mjs @@ -12,18 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. +import fs from 'node:fs/promises'; import path from 'node:path'; import url from 'url'; -import fs from 'node:fs/promises'; import cordovaLib from 'cordova-lib'; const {cordova} = cordovaLib; -import {runAction} from '../../../src/build/run_action.mjs'; +import {downloadHttpsFile} from '../../../src/build/download_file.mjs'; import {getRootDir} from '../../../src/build/get_root_dir.mjs'; +import {runAction} from '../../../src/build/run_action.mjs'; import {spawnStream} from '../../../src/build/spawn_stream.mjs'; -import {downloadHttpsFile} from '../../../src/build/download_file.mjs'; - import {getBuildParameters} from '../build/get_build_parameters.mjs'; /** diff --git a/client/src/cordova/import_messages.action.mjs b/client/src/cordova/import_messages.action.mjs index d6ff6c46a3..4d86bdfe4d 100644 --- a/client/src/cordova/import_messages.action.mjs +++ b/client/src/cordova/import_messages.action.mjs @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -import chalk from 'chalk'; -import minimist from 'minimist'; +import {readFile, readdir, mkdir} from 'fs/promises'; import path from 'path'; import url from 'url'; -import {getRootDir} from '../../../src/build/get_root_dir.mjs'; -import {readFile, readdir, mkdir} from 'fs/promises'; + +import chalk from 'chalk'; +import minimist from 'minimist'; + import * as ANDROID_IMPORTER from './android/import_messages.mjs'; import * as IOS_IMPORTER from './apple/import_messages.mjs'; +import {getRootDir} from '../../../src/build/get_root_dir.mjs'; const ANDROID = 'android'; const IOS = 'ios'; diff --git a/client/src/cordova/setup.action.mjs b/client/src/cordova/setup.action.mjs index 2bf5af0278..834833859f 100644 --- a/client/src/cordova/setup.action.mjs +++ b/client/src/cordova/setup.action.mjs @@ -13,19 +13,21 @@ // limitations under the License. import os from 'os'; -import url from 'url'; -import rmfr from 'rmfr'; import path from 'path'; +import url from 'url'; -import replace from 'replace-in-file'; +import chalk from 'chalk'; import cordovaLib from 'cordova-lib'; +import replace from 'replace-in-file'; +import rmfr from 'rmfr'; + const {cordova} = cordovaLib; import {getRootDir} from '../../../src/build/get_root_dir.mjs'; import {runAction} from '../../../src/build/run_action.mjs'; import {spawnStream} from '../../../src/build/spawn_stream.mjs'; import {getBuildParameters} from '../build/get_build_parameters.mjs'; -import chalk from 'chalk'; + const WORKING_CORDOVA_OSX_COMMIT = '07e62a53aa6a8a828fd988bc9e884c38c3495a67'; diff --git a/client/src/cordova/test.action.mjs b/client/src/cordova/test.action.mjs index 8b5fdede8f..02677fcc18 100644 --- a/client/src/cordova/test.action.mjs +++ b/client/src/cordova/test.action.mjs @@ -12,11 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import url from 'url'; +import fs from 'fs/promises'; import os from 'os'; -import minimist from 'minimist'; import path from 'path'; -import fs from 'fs/promises'; +import url from 'url'; + +import minimist from 'minimist'; import rmfr from 'rmfr'; import {getRootDir} from '../../../src/build/get_root_dir.mjs'; diff --git a/client/src/tun2socks/build.action.mjs b/client/src/tun2socks/build.action.mjs index e3cf2918ff..f33ff48b23 100644 --- a/client/src/tun2socks/build.action.mjs +++ b/client/src/tun2socks/build.action.mjs @@ -13,6 +13,7 @@ // limitations under the License. import url from 'url'; + import {spawnStream} from '../../../src/build/spawn_stream.mjs'; import {getBuildParameters} from '../build/get_build_parameters.mjs'; diff --git a/client/src/www/build.action.mjs b/client/src/www/build.action.mjs index 6daf6277e1..e1d83836d5 100644 --- a/client/src/www/build.action.mjs +++ b/client/src/www/build.action.mjs @@ -13,15 +13,15 @@ // limitations under the License. import fs from 'fs/promises'; -import url from 'url'; import path from 'path'; -import rmfr from 'rmfr'; +import url from 'url'; -import {runWebpack} from '../build/run_webpack.mjs'; -import {getBuildParameters} from '../build/get_build_parameters.mjs'; -import {getRootDir} from '../../../src/build/get_root_dir.mjs'; +import rmfr from 'rmfr'; import {getBrowserWebpackConfig} from './get_browser_webpack_config.mjs'; +import {getRootDir} from '../../../src/build/get_root_dir.mjs'; +import {getBuildParameters} from '../build/get_build_parameters.mjs'; +import {runWebpack} from '../build/run_webpack.mjs'; /** * @description Builds the web UI for use across both electron and cordova. diff --git a/client/src/www/get_browser_webpack_config.mjs b/client/src/www/get_browser_webpack_config.mjs index bdacf9a38c..9c44b6be1e 100644 --- a/client/src/www/get_browser_webpack_config.mjs +++ b/client/src/www/get_browser_webpack_config.mjs @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -import electronConfig from './webpack_electron.mjs'; import cordovaConfig from './webpack_cordova.mjs'; +import electronConfig from './webpack_electron.mjs'; import {getWebpackBuildMode} from '../build/get_webpack_build_mode.mjs'; /* diff --git a/client/src/www/start.action.mjs b/client/src/www/start.action.mjs index 4e996fe6c5..cd790dcb92 100644 --- a/client/src/www/start.action.mjs +++ b/client/src/www/start.action.mjs @@ -13,11 +13,12 @@ // limitations under the License. import url from 'url'; + import webpack from 'webpack'; import WebpackServer from 'webpack-dev-server'; -import {runAction} from '../../../src/build/run_action.mjs'; import {getBrowserWebpackConfig} from './get_browser_webpack_config.mjs'; +import {runAction} from '../../../src/build/run_action.mjs'; /** * @description Starts the web app for development. diff --git a/client/src/www/storybook.action.mjs b/client/src/www/storybook.action.mjs index 705d59d8a9..ba07ac374b 100644 --- a/client/src/www/storybook.action.mjs +++ b/client/src/www/storybook.action.mjs @@ -12,14 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. +import path from 'path'; import url from 'url'; + +import image from '@rollup/plugin-image'; import {startDevServer} from '@web/dev-server'; import {esbuildPlugin} from '@web/dev-server-esbuild'; -import {storybookPlugin} from '@web/dev-server-storybook'; import {fromRollup} from '@web/dev-server-rollup'; -import image from '@rollup/plugin-image'; +import {storybookPlugin} from '@web/dev-server-storybook'; -import path from 'path'; import {getRootDir} from '../../../src/build/get_root_dir.mjs'; const WWW_PATH = ['src', 'www']; diff --git a/client/src/www/test.action.mjs b/client/src/www/test.action.mjs index 8276fec953..aecb4587e9 100644 --- a/client/src/www/test.action.mjs +++ b/client/src/www/test.action.mjs @@ -12,11 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -import minimist from 'minimist'; +import path from 'path'; import url from 'url'; + import karma from 'karma'; +import minimist from 'minimist'; import puppeteer from 'puppeteer'; -import path from 'path'; + + import {getRootDir} from '../../../src/build/get_root_dir.mjs'; const KARMA_CONFIG_PATH = ['client', 'src', 'www', 'karma.conf.js']; diff --git a/client/src/www/webpack_base.mjs b/client/src/www/webpack_base.mjs index ef7cec8cf5..494b1e85f9 100644 --- a/client/src/www/webpack_base.mjs +++ b/client/src/www/webpack_base.mjs @@ -11,11 +11,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +import {createRequire} from 'module'; import path from 'path'; +import {fileURLToPath} from 'url'; + import CopyPlugin from 'copy-webpack-plugin'; import TerserPlugin from 'terser-webpack-plugin'; -import {fileURLToPath} from 'url'; -import {createRequire} from 'module'; export const require = createRequire(import.meta.url); export const __filename = fileURLToPath(import.meta.url); diff --git a/client/src/www/webpack_cordova.mjs b/client/src/www/webpack_cordova.mjs index 6f6c24ce2a..62cc7f0776 100644 --- a/client/src/www/webpack_cordova.mjs +++ b/client/src/www/webpack_cordova.mjs @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. import path from 'path'; + import CopyPlugin from 'copy-webpack-plugin'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import webpack from 'webpack'; -import {baseConfig, browserConfig, require, __dirname, TS_LOADER, GENERATE_CSS_RTL_LOADER} from './webpack_base.mjs'; import {merge} from 'webpack-merge'; +import {baseConfig, browserConfig, require, __dirname, TS_LOADER, GENERATE_CSS_RTL_LOADER} from './webpack_base.mjs'; import {getRootDir} from '../../../src/build/get_root_dir.mjs'; const BABEL_LOADER = { diff --git a/client/src/www/webpack_electron.mjs b/client/src/www/webpack_electron.mjs index ed8ca0530e..064ddd76e2 100644 --- a/client/src/www/webpack_electron.mjs +++ b/client/src/www/webpack_electron.mjs @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. import path from 'path'; + import HtmlWebpackPlugin from 'html-webpack-plugin'; import webpack from 'webpack'; -import {baseConfig, browserConfig, __dirname, TS_LOADER, GENERATE_CSS_RTL_LOADER} from './webpack_base.mjs'; import {merge} from 'webpack-merge'; +import {baseConfig, browserConfig, __dirname, TS_LOADER, GENERATE_CSS_RTL_LOADER} from './webpack_base.mjs'; + export default merge(baseConfig, browserConfig, { entry: [path.resolve(__dirname, 'app', 'electron_main.ts')], target: 'electron-renderer', diff --git a/client/src/www/webpack_test.mjs b/client/src/www/webpack_test.mjs index 3981196390..08e40611e3 100644 --- a/client/src/www/webpack_test.mjs +++ b/client/src/www/webpack_test.mjs @@ -11,9 +11,10 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -import {baseConfig, TS_LOADER} from './webpack_base.mjs'; import {merge} from 'webpack-merge'; +import {baseConfig, TS_LOADER} from './webpack_base.mjs'; + export default merge(baseConfig, { module: { rules: [ diff --git a/list.action.mjs b/list.action.mjs index 47d37bf181..b280b2be89 100644 --- a/list.action.mjs +++ b/list.action.mjs @@ -12,10 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. +import fs from 'fs/promises'; +import path from 'path'; import url from 'url'; + import * as globby from 'globby'; -import path from 'path'; -import fs from 'fs/promises'; + import {getRootDir} from './src/build/get_root_dir.mjs'; /** diff --git a/server_manager/electron_app/windows/sign_windows_executable.mjs b/server_manager/electron_app/windows/sign_windows_executable.mjs index 92c13baa22..1b04d4e0ff 100644 --- a/server_manager/electron_app/windows/sign_windows_executable.mjs +++ b/server_manager/electron_app/windows/sign_windows_executable.mjs @@ -14,11 +14,12 @@ import {constants} from 'fs'; import {access} from 'fs/promises'; -import minimist from 'minimist'; import {dirname, resolve} from 'path'; import {fileURLToPath, pathToFileURL} from 'url'; import {format} from 'util'; +import minimist from 'minimist'; + import {jsign} from '../../../third_party/jsign/index.mjs'; /** diff --git a/src/build/download_file.mjs b/src/build/download_file.mjs index 30f7d5f785..cd89668103 100644 --- a/src/build/download_file.mjs +++ b/src/build/download_file.mjs @@ -14,6 +14,7 @@ import {createWriteStream} from 'node:fs'; import {pipeline} from 'node:stream/promises'; + import fetch from 'node-fetch'; /** diff --git a/src/build/run_action.mjs b/src/build/run_action.mjs index 0c5cdae4e9..bb91f4fea2 100644 --- a/src/build/run_action.mjs +++ b/src/build/run_action.mjs @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import chalk from 'chalk'; import {existsSync} from 'fs'; import {readFile} from 'fs/promises'; import path from 'path'; import url from 'url'; +import chalk from 'chalk'; + import {getRootDir} from './get_root_dir.mjs'; import {spawnStream} from './spawn_stream.mjs'; diff --git a/src/build/spawn_stream.mjs b/src/build/spawn_stream.mjs index 26c68cd72c..67f5f88d76 100644 --- a/src/build/spawn_stream.mjs +++ b/src/build/spawn_stream.mjs @@ -12,9 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -import chalk from 'chalk'; import {spawn} from 'child_process'; +import chalk from 'chalk'; + /** * @description promisifies the child process (for supporting legacy bash actions!) */ diff --git a/src/electron/build.action.mjs b/src/electron/build.action.mjs index 88502d1dad..e8e7fb8953 100644 --- a/src/electron/build.action.mjs +++ b/src/electron/build.action.mjs @@ -12,15 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -import minimist from 'minimist'; -import {runAction} from '../build/run_action.mjs'; -import {getBuildParameters} from '../../client/src/build/get_build_parameters.mjs'; -import electron, {Platform} from 'electron-builder'; -import copydir from 'copy-dir'; import fs from 'fs/promises'; +import path from 'path'; import url from 'url'; + +import copydir from 'copy-dir'; +import electron, {Platform} from 'electron-builder'; +import minimist from 'minimist'; + +import {getBuildParameters} from '../../client/src/build/get_build_parameters.mjs'; import {getRootDir} from '../build/get_root_dir.mjs'; -import path from 'path'; +import {runAction} from '../build/run_action.mjs'; + + + const ELECTRON_BUILD_DIR = 'build'; const ELECTRON_PLATFORMS = ['linux', 'windows']; diff --git a/src/electron/build_main.action.mjs b/src/electron/build_main.action.mjs index 2506acdf39..c1c9455b72 100644 --- a/src/electron/build_main.action.mjs +++ b/src/electron/build_main.action.mjs @@ -12,15 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -import {runAction} from '../build/run_action.mjs'; -import {getBuildParameters} from '../../client/src/build/get_build_parameters.mjs'; -import {getWebpackBuildMode} from '../../client/src/build/get_webpack_build_mode.mjs'; -import {runWebpack} from '../../client/src/build/run_webpack.mjs'; -import electronMainWebpackConfigs from './webpack_electron_main.mjs'; import fs from 'fs/promises'; import path from 'path'; import url from 'url'; + +import electronMainWebpackConfigs from './webpack_electron_main.mjs'; +import {getBuildParameters} from '../../client/src/build/get_build_parameters.mjs'; +import {getWebpackBuildMode} from '../../client/src/build/get_webpack_build_mode.mjs'; +import {runWebpack} from '../../client/src/build/run_webpack.mjs'; import {getRootDir} from '../build/get_root_dir.mjs'; +import {runAction} from '../build/run_action.mjs'; const ELECTRON_BUILD_DIR = 'build'; const ELECTRON_PLATFORMS = ['linux', 'windows']; diff --git a/src/electron/start.action.mjs b/src/electron/start.action.mjs index 9ef335799d..4343a5f05f 100644 --- a/src/electron/start.action.mjs +++ b/src/electron/start.action.mjs @@ -13,11 +13,12 @@ // limitations under the License. import url from 'url'; + import electron from 'electron'; -import {runAction} from '../../client/src/build/run_action.mjs'; import {getBuildParameters} from '../../client/src/build/get_build_parameters.mjs'; import {getRootDir} from '../../client/src/build/get_root_dir.mjs'; +import {runAction} from '../../client/src/build/run_action.mjs'; import {spawnStream} from '../../client/src/build/spawn_stream.mjs'; /** diff --git a/src/electron/webpack_electron_main.mjs b/src/electron/webpack_electron_main.mjs index 58b037b9a4..58ee3d4264 100755 --- a/src/electron/webpack_electron_main.mjs +++ b/src/electron/webpack_electron_main.mjs @@ -13,9 +13,10 @@ // limitations under the License. import path from 'path'; +import {fileURLToPath} from 'url'; + import webpack from 'webpack'; -import {fileURLToPath} from 'url'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); diff --git a/src/electron/windows/sign_windows_executable.action.mjs b/src/electron/windows/sign_windows_executable.action.mjs index 49697981a5..72e30a83f5 100644 --- a/src/electron/windows/sign_windows_executable.action.mjs +++ b/src/electron/windows/sign_windows_executable.action.mjs @@ -14,11 +14,12 @@ import {constants} from 'fs'; import {access} from 'fs/promises'; -import minimist from 'minimist'; import {dirname, resolve} from 'path'; import {fileURLToPath, pathToFileURL} from 'url'; import {format} from 'util'; +import minimist from 'minimist'; + import {jsign} from '../../../third_party/jsign/index.mjs'; /** From 9f85090bd5deb1f5bc9d7fd6a09c567bc80292ef Mon Sep 17 00:00:00 2001 From: Sander Bruens Date: Mon, 22 Apr 2024 22:45:45 -0400 Subject: [PATCH 3/3] Add a distinct group for `@material/...` imports. --- .eslintrc.json | 8 ++++++++ client/src/www/app/cordova_main.ts | 5 +---- client/src/www/views/contact_view/index.spec.ts | 1 + client/src/www/views/contact_view/index.ts | 14 ++++++++------ .../views/contact_view/support_form/index.spec.ts | 1 + .../www/views/contact_view/support_form/index.ts | 13 +++++++------ client/src/www/views/servers_view/index.ts | 6 +++--- .../views/servers_view/server_list_item/index.ts | 1 + .../server_list_item/server_card/index.ts | 4 ++-- package.json | 2 +- 10 files changed, 33 insertions(+), 22 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 7af40615b6..9bf16f894e 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -68,6 +68,14 @@ "external", "internal" ], + "pathGroups": [ + { + "pattern": "@material/**", + "group": "external", + "position": "before" + } + ], + "pathGroupsExcludedImportTypes": ["@material/**"], "newlines-between": "always", "alphabetize": { "order": "asc", diff --git a/client/src/www/app/cordova_main.ts b/client/src/www/app/cordova_main.ts index e7fbdb7344..730e186252 100644 --- a/client/src/www/app/cordova_main.ts +++ b/client/src/www/app/cordova_main.ts @@ -18,10 +18,8 @@ import '@babel/polyfill'; import 'web-animations-js/web-animations-next-lite.min.js'; import '@webcomponents/webcomponentsjs/webcomponents-bundle.js'; - import {setRootPath} from '@polymer/polymer/lib/utils/settings.js'; setRootPath(location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1)); - import * as Sentry from '@sentry/browser'; import {AbstractClipboard} from './clipboard'; @@ -29,8 +27,7 @@ import {EnvironmentVariables} from './environment'; import {FakeOutlineTunnel} from './fake_tunnel'; import {main} from './main'; import {OutlinePlatform} from './platform'; -import {Tunnel, TunnelStatus} from './tunnel'; -import {ShadowsocksSessionConfig} from './tunnel'; +import {Tunnel, TunnelStatus,ShadowsocksSessionConfig} from './tunnel'; import {AbstractUpdater} from './updater'; import * as interceptors from './url_interceptor'; import {NoOpVpnInstaller, VpnInstaller} from './vpn_installer'; diff --git a/client/src/www/views/contact_view/index.spec.ts b/client/src/www/views/contact_view/index.spec.ts index 6ad15bccd3..387f72b55a 100644 --- a/client/src/www/views/contact_view/index.spec.ts +++ b/client/src/www/views/contact_view/index.spec.ts @@ -16,6 +16,7 @@ import {ListItemBase} from '@material/mwc-list/mwc-list-item-base'; import {Select} from '@material/mwc-select'; + import {fixture, html, nextFrame, oneEvent} from '@open-wc/testing'; import {ContactView} from './index'; diff --git a/client/src/www/views/contact_view/index.ts b/client/src/www/views/contact_view/index.ts index 17f1420211..4508eff6fc 100644 --- a/client/src/www/views/contact_view/index.ts +++ b/client/src/www/views/contact_view/index.ts @@ -14,16 +14,18 @@ * limitations under the License. */ -import {html, css, LitElement, TemplateResult, nothing} from 'lit'; -import {customElement, property, state} from 'lit/decorators.js'; -import {Ref, createRef, ref} from 'lit/directives/ref.js'; -import {unsafeHTML} from 'lit/directives/unsafe-html.js'; + +import {SingleSelectedEvent} from '@material/mwc-list/mwc-list'; +import {Radio} from '@material/mwc-radio'; import '@material/mwc-circular-progress'; import '@material/mwc-radio'; import '@material/mwc-select'; import '@material/mwc-formfield'; -import {Radio} from '@material/mwc-radio'; -import {SingleSelectedEvent} from '@material/mwc-list/mwc-list'; + +import {html, css, LitElement, TemplateResult, nothing} from 'lit'; +import {customElement, property, state} from 'lit/decorators.js'; +import {Ref, createRef, ref} from 'lit/directives/ref.js'; +import {unsafeHTML} from 'lit/directives/unsafe-html.js'; import './support_form'; import {AppType} from './app_type'; diff --git a/client/src/www/views/contact_view/support_form/index.spec.ts b/client/src/www/views/contact_view/support_form/index.spec.ts index 146b344394..5e7dc615a9 100644 --- a/client/src/www/views/contact_view/support_form/index.spec.ts +++ b/client/src/www/views/contact_view/support_form/index.spec.ts @@ -15,6 +15,7 @@ */ import {TextField} from '@material/mwc-textfield'; + import {fixture, html, nextFrame, oneEvent, triggerBlurFor, triggerFocusFor} from '@open-wc/testing'; import {FormValues, SupportForm} from './index'; diff --git a/client/src/www/views/contact_view/support_form/index.ts b/client/src/www/views/contact_view/support_form/index.ts index e2cd52e7cc..559d4a6deb 100644 --- a/client/src/www/views/contact_view/support_form/index.ts +++ b/client/src/www/views/contact_view/support_form/index.ts @@ -14,20 +14,21 @@ * limitations under the License. */ +import {SelectedDetail} from '@material/mwc-menu/mwc-menu-base'; +import {TextField} from '@material/mwc-textfield'; +import '@material/mwc-button'; +import '@material/mwc-select'; +import '@material/mwc-textarea'; +import '@material/mwc-textfield'; + import {html, css, LitElement, TemplateResult, nothing, PropertyValues} from 'lit'; import {customElement, property, state} from 'lit/decorators.js'; import {live} from 'lit/directives/live.js'; import {createRef, Ref, ref} from 'lit/directives/ref.js'; -import '@material/mwc-button'; -import '@material/mwc-select'; -import '@material/mwc-textarea'; -import '@material/mwc-textfield'; import {Localizer} from '../../../../../infrastructure/i18n'; import {AppType} from '../app_type'; -import {TextField} from '@material/mwc-textfield'; -import {SelectedDetail} from '@material/mwc-menu/mwc-menu-base'; type FormControl = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement; diff --git a/client/src/www/views/servers_view/index.ts b/client/src/www/views/servers_view/index.ts index dd70dc2490..2722cd227a 100644 --- a/client/src/www/views/servers_view/index.ts +++ b/client/src/www/views/servers_view/index.ts @@ -14,16 +14,16 @@ limitations under the License. */ +import '@material/mwc-button'; + import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; import { DirectiveResult } from 'lit/directive'; import {unsafeHTML, UnsafeHTMLDirective} from 'lit/directives/unsafe-html.js'; -import '@material/mwc-button'; +import {ServerConnectionState as _ServerConnectionState} from './server_connection_indicator'; import './server_connection_indicator'; import './server_list'; - -import {ServerConnectionState as _ServerConnectionState} from './server_connection_indicator'; import {ServerListItem as _ServerListItem} from './server_list_item'; import { Localizer } from '../../../../infrastructure/i18n'; diff --git a/client/src/www/views/servers_view/server_list_item/index.ts b/client/src/www/views/servers_view/server_list_item/index.ts index 29b2361dc3..ba397799b1 100644 --- a/client/src/www/views/servers_view/server_list_item/index.ts +++ b/client/src/www/views/servers_view/server_list_item/index.ts @@ -12,6 +12,7 @@ */ import {Menu} from '@material/mwc-menu'; + import {Ref} from 'lit/directives/ref'; import {Localizer} from '../../../../../infrastructure/i18n'; diff --git a/client/src/www/views/servers_view/server_list_item/server_card/index.ts b/client/src/www/views/servers_view/server_list_item/server_card/index.ts index 7cde5a7943..024bb6d627 100644 --- a/client/src/www/views/servers_view/server_list_item/server_card/index.ts +++ b/client/src/www/views/servers_view/server_list_item/server_card/index.ts @@ -11,17 +11,17 @@ limitations under the License. */ +import {Menu} from '@material/mwc-menu'; import '@material/mwc-button'; import '@material/mwc-icon-button'; import '@material/mwc-menu'; -import '../../server_connection_indicator'; -import {Menu} from '@material/mwc-menu'; import {css, html, LitElement} from 'lit'; import {customElement, property} from 'lit/decorators.js'; import {createRef, Ref, ref} from 'lit/directives/ref.js'; +import '../../server_connection_indicator'; import {ServerListItem, ServerListItemElement, ServerListItemEvent} from '..'; import {Localizer} from '../../../../../../infrastructure/i18n'; import {ServerConnectionState} from '../../server_connection_indicator'; diff --git a/package.json b/package.json index 8aae0e741e..6b862b4937 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "clean": "npm run clean --workspaces && rm -rf output node_modules third_party/jsign/*.jar && go run github.com/go-task/task/v3/cmd/task clean", "format:all": "prettier --write \"**/*.{cjs,mjs,html,js,json,md,ts}\"", "format": "pretty-quick --staged --pattern \"**/*.{cjs,mjs,html,js,json,md,ts}\"", - "lint:ts": "eslint --ext ts,mjs client/src", + "lint:ts": "eslint --ext ts,mjs client", "lint": "npm run lint:ts", "reset": "npm run clean && npm ci" },