From 7b1fc2462eedc10671371037c6101ad397a465e2 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 08:46:13 -0500 Subject: [PATCH 01/20] Clear the error after 25 seconds. --- src/src/app/app.component.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/src/app/app.component.ts b/src/src/app/app.component.ts index 9538044f..750af514 100644 --- a/src/src/app/app.component.ts +++ b/src/src/app/app.component.ts @@ -49,6 +49,9 @@ export class AppComponent extends SubscriberBase implements AfterViewInit { this.error$.subscribe((err) => { if (err) { this.snackBar.open(`Oh no! ${err.msg}`, 'Dismiss Error'); + setTimeout(() => { + this.snackBar.dismiss(); // dismiss if its still there after 25 seconds. + }, 25 * 1000); } }) ); From d406a1554b5893e3d443a0232cd32ad44b5b4cc5 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 08:46:37 -0500 Subject: [PATCH 02/20] Fix bug in strongs rendering --- src/src/app/components/passage/passage-card.component.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/src/app/components/passage/passage-card.component.html b/src/src/app/components/passage/passage-card.component.html index e132cc3f..b95557ac 100644 --- a/src/src/app/components/passage/passage-card.component.html +++ b/src/src/app/components/passage/passage-card.component.html @@ -40,10 +40,10 @@ {{ w.t }}{{ + >{{ w.t }}
From 6f1cd2c68aa85e59941531125c050c8d63ea814a Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 08:46:55 -0500 Subject: [PATCH 03/20] Clear cards setting option --- src/src/app/components/settings/settings.component.html | 4 ++++ src/src/app/components/settings/settings.component.ts | 5 +++++ src/src/app/services/app-state-actions.ts | 9 +++++++++ src/src/app/services/app-state-reducer.ts | 9 +++++++++ src/src/app/services/app.service.ts | 6 ++++++ 5 files changed, 33 insertions(+) diff --git a/src/src/app/components/settings/settings.component.html b/src/src/app/components/settings/settings.component.html index 73cd19af..34a07edc 100644 --- a/src/src/app/components/settings/settings.component.html +++ b/src/src/app/components/settings/settings.component.html @@ -18,6 +18,10 @@ note_add Create a New Note + + clear_all + Clear Cards + Search Settings diff --git a/src/src/app/components/settings/settings.component.ts b/src/src/app/components/settings/settings.component.ts index 68c55790..bce8375a 100644 --- a/src/src/app/components/settings/settings.component.ts +++ b/src/src/app/components/settings/settings.component.ts @@ -134,6 +134,11 @@ export class SettingsComponent extends SubscriberBase { }); } + clearCurrentCard(){ + this.appService.clearCards(); + this.navService.closeSettings(); + } + //#endregion //#region Saved Page Settings diff --git a/src/src/app/services/app-state-actions.ts b/src/src/app/services/app-state-actions.ts index c6741191..91b89303 100644 --- a/src/src/app/services/app-state-actions.ts +++ b/src/src/app/services/app-state-actions.ts @@ -96,6 +96,12 @@ export class AppActionFactory { } as AppAction; } + static newClearCards(): AppAction { + return { + type: 'CLEAR_CARDS', + } as AppAction; + } + static newUpdateError(error: Error): AppAction { return { type: 'UPDATE_ERROR', @@ -227,6 +233,9 @@ export type AppAction = type: 'REMOVE_CARD'; card: CardItem; } + | { + type: 'CLEAR_CARDS'; + } | { type: 'MOVE_CARD'; card: CardItem; diff --git a/src/src/app/services/app-state-reducer.ts b/src/src/app/services/app-state-reducer.ts index 034a2cf0..c1458d9e 100644 --- a/src/src/app/services/app-state-reducer.ts +++ b/src/src/app/services/app-state-reducer.ts @@ -311,6 +311,15 @@ export function reducer(state: AppState, action: AppAction): AppState { }; } + case 'CLEAR_CARDS': { + // potentially remove card from a saved page. + + return { + ...state, + currentCards: new Storable([]), + }; + } + case 'MOVE_CARD': { const cards = moveItemUpOrDown(state.currentCards.value, action.card, action.direction); diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index fbe56ab5..497322fc 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -170,6 +170,12 @@ export class AppService extends createStateService(reducer, initialState) { ); } + async clearCards() { + this.dispatch( + AppActionFactory.newClearCards() + ); + } + private async getCardByQuery(qry: string, type?: CardType): Promise { if (qry.startsWith('note:')) { const q = qry.toLocaleLowerCase().trim().replace('note:', ''); From 94bc54d06be8912454eba75d06bad5b2c68b29e6 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 11:39:45 -0500 Subject: [PATCH 04/20] convert to new patterns for state service. --- src/src/app/common/state-service.ts | 6 + src/src/app/common/storable.ts | 2 +- src/src/app/services/app-state-actions.ts | 297 ------ .../app/services/app-state-initial-state.ts | 52 - .../app/services/app-state-reducer.spec.ts | 312 +++--- src/src/app/services/app-state-reducer.ts | 489 --------- src/src/app/services/app.service.ts | 965 +++++++++++++++--- src/tsconfig.json | 1 - 8 files changed, 973 insertions(+), 1151 deletions(-) delete mode 100644 src/src/app/services/app-state-actions.ts delete mode 100644 src/src/app/services/app-state-initial-state.ts delete mode 100644 src/src/app/services/app-state-reducer.ts diff --git a/src/src/app/common/state-service.ts b/src/src/app/common/state-service.ts index 9d46f5ed..cc95da97 100644 --- a/src/src/app/common/state-service.ts +++ b/src/src/app/common/state-service.ts @@ -128,3 +128,9 @@ export function createStateService( return stateServiceClass as IfImmutable>; } + + +export interface IStateAction { + type: TAction; + handle: (state: TState) => TState; +} diff --git a/src/src/app/common/storable.ts b/src/src/app/common/storable.ts index 27d3528c..a6c66a8b 100644 --- a/src/src/app/common/storable.ts +++ b/src/src/app/common/storable.ts @@ -22,5 +22,5 @@ export interface UserVersion { export enum StorableType { initial, - modified + modified, } diff --git a/src/src/app/services/app-state-actions.ts b/src/src/app/services/app-state-actions.ts deleted file mode 100644 index 91b89303..00000000 --- a/src/src/app/services/app-state-actions.ts +++ /dev/null @@ -1,297 +0,0 @@ -import { Error, User, Settings } from '../models/app-state'; -import { IStorable } from '../common/storable'; -import { NoteItem } from '../models/note-state'; -import { MoveDirection } from '../common/move-direction'; -import { SavedPage } from '../models/page-state'; -import { CardItem } from '../models/card-state'; -import { Overlap } from '../common/bible-reference'; - -export class AppActionFactory { - static newSavePage(title: string): AppAction { - return { - type: 'SAVE_PAGE', - title, - } as AppAction; - } - - static newUpdateCurrentPage(): AppAction { - return { - type: 'UPDATE_CURRENT_PAGE', - } as AppAction; - } - - static newUpdateSavedPages(savedPages: IStorable): AppAction { - return { - type: 'UPDATE_SAVED_PAGES', - savedPages, - } as AppAction; - } - - static newUpdateSavedPage(savedPage: SavedPage): AppAction { - return { - type: 'UPDATE_SAVED_PAGE', - savedPage, - } as AppAction; - } - - static newMoveSavedPageCard(savedPage: SavedPage, fromIndex: number, toIndex: number): AppAction { - return { - type: 'MOVE_SAVED_PAGE_CARD', - savedPage, - fromIndex, - toIndex, - } as AppAction; - } - - static newRemoveSavedPage(savedPage: SavedPage): AppAction { - return { - type: 'REMOVE_SAVED_PAGE', - savedPage, - } as AppAction; - } - - static newAddCardToSavedPage(card: CardItem, pageId: string): AppAction { - return { - type: 'ADD_CARD_TO_SAVED_PAGE', - card, - pageId, - } as AppAction; - } - - static newAddCard(card: CardItem, nextToItem: CardItem): AppAction { - return { - type: 'ADD_CARD', - card, - nextToItem, - } as AppAction; - } - - static newUpdateCard(newCard: CardItem, oldCard: CardItem): AppAction { - return { - type: 'UPDATE_CARD', - newCard, - oldCard, - } as AppAction; - } - - static newRemoveCard(card: CardItem): AppAction { - return { - type: 'REMOVE_CARD', - card, - } as AppAction; - } - - static newMoveCard(card: CardItem, direction: MoveDirection): AppAction { - return { - type: 'MOVE_CARD', - card, - direction, - } as AppAction; - } - - static newUpdateCards(cards: IStorable): AppAction { - return { - type: 'UPDATE_CARDS', - cards, - } as AppAction; - } - - static newClearCards(): AppAction { - return { - type: 'CLEAR_CARDS', - } as AppAction; - } - - static newUpdateError(error: Error): AppAction { - return { - type: 'UPDATE_ERROR', - error, - } as AppAction; - } - - static newUpdateCardMergeStrategy(strategy: Overlap): AppAction { - return { - type: 'UPDATE_CARD_MERGE_STRATEGY', - cardMergeStrategy: strategy, - }; - } - - static newUpdateCardFontSize(cardFontSize: number): AppAction { - return { - type: 'UPDATE_CARD_FONT_SIZE', - cardFontSize, - } as AppAction; - } - - static newUpdateCardFontFamily(cardFontFamily: string): AppAction { - return { - type: 'UPDATE_CARD_FONT_FAMILY', - cardFontFamily, - } as AppAction; - } - - static newUpdateAutocomplete(words: string[]): AppAction { - return { - type: 'UPDATE_AUTOCOMPLETE', - words, - } as AppAction; - } - - static newUpdateSettings(settings: IStorable): AppAction { - return { - type: 'UPDATE_SETTINGS', - settings, - } as AppAction; - } - static newUser(user: User): AppAction { - return { - type: 'SET_USER', - user, - } as AppAction; - } - - static newFindNotes(qry: string, nextToItem: CardItem): AppAction { - return { - type: 'FIND_NOTES', - qry, - nextToItem, - } as AppAction; - } - - static newGetNote(noteId: string, nextToItem: CardItem): AppAction { - return { - type: 'GET_NOTE', - noteId, - nextToItem, - } as AppAction; - } - - static newUpdateNotes(notes: IStorable): AppAction { - return { - type: 'UPDATE_NOTES', - notes, - } as AppAction; - } - - static newSaveNote(note: NoteItem): AppAction { - return { - type: 'SAVE_NOTE', - note, - } as AppAction; - } - - static newDeleteNote(note: NoteItem): AppAction { - return { - type: 'DELETE_NOTE', - note, - } as AppAction; - } -} - -export type AppAction = - | { - type: 'SAVE_PAGE'; - title: string; - } - | { - type: 'UPDATE_CURRENT_PAGE'; - } - | { - type: 'UPDATE_SAVED_PAGES'; - savedPages: IStorable; - } - | { - type: 'UPDATE_SAVED_PAGE'; - savedPage: SavedPage; - } - | { - type: 'REMOVE_SAVED_PAGE'; - savedPage: SavedPage; - } - | { - type: 'MOVE_SAVED_PAGE_CARD'; - fromIndex: number; - toIndex: number; - savedPage: SavedPage; - } - | { - type: 'ADD_CARD_TO_SAVED_PAGE'; - card: CardItem; - pageId: string; - } - | { - type: 'ADD_CARD'; - card: CardItem; - nextToItem: CardItem; - } - | { - type: 'UPDATE_CARD'; - newCard: CardItem; - oldCard: CardItem; - } - | { - type: 'REMOVE_CARD'; - card: CardItem; - } - | { - type: 'CLEAR_CARDS'; - } - | { - type: 'MOVE_CARD'; - card: CardItem; - direction: MoveDirection; - } - | { - type: 'UPDATE_CARDS'; - cards: IStorable; - } - | { - type: 'UPDATE_ERROR'; - error: Error; - } - | { - type: 'UPDATE_CARD_MERGE_STRATEGY'; - cardMergeStrategy: Overlap; - } - | { - type: 'UPDATE_CARD_FONT_SIZE'; - cardFontSize: number; - } - | { - type: 'UPDATE_CARD_FONT_FAMILY'; - cardFontFamily: string; - } - | { - type: 'UPDATE_AUTOCOMPLETE'; - words: string[]; - } - | { - type: 'UPDATE_SETTINGS'; - settings: IStorable; - } - | { - type: 'SET_USER'; - user: User; - } - | { - type: 'FIND_NOTES'; - qry: string; - nextToItem: CardItem; - } - | { - type: 'GET_NOTE'; - noteId: string; - nextToItem: CardItem; - } - | { - type: 'UPDATE_NOTES'; - notes: IStorable; - } - | { - type: 'SAVE_NOTE'; - note: NoteItem; - } - | { - type: 'DELETE_NOTE'; - note: NoteItem; - }; diff --git a/src/src/app/services/app-state-initial-state.ts b/src/src/app/services/app-state-initial-state.ts deleted file mode 100644 index 6a660317..00000000 --- a/src/src/app/services/app-state-initial-state.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { AppState } from '../models/app-state'; -import { Overlap } from '../common/bible-reference'; -import { StorableType } from '../common/storable'; - -export const initialState: AppState = { - user: null, - currentCards: { - type: StorableType.initial, - createdOn: new Date(0).toISOString(), - value: [], - }, - cardCache: {}, - autocomplete: [], - currentSavedPage: null, - savedPages: null, - notes: { - type: StorableType.initial, - createdOn: new Date(0).toISOString(), - value: [], - }, - savedPagesLoaded: false, - error: null, - settings: { - type: StorableType.initial, - createdOn: new Date(0).toISOString(), - value: { - displaySettings: { - showStrongsAsModal: false, - appendCardToBottom: true, - insertCardNextToItem: true, - clearSearchAfterQuery: true, - cardFontSize: 12, - cardFontFamily: 'PT Serif', - showVersesOnNewLine: false, - showVerseNumbers: false, - showParagraphs: true, - showParagraphHeadings: true, - syncCardsAcrossDevices: false, - }, - pageSettings: { - mergeStrategy: Overlap.Equal, - }, - cardIcons: { - words: 'font_download', - passage: 'menu_book', - strongs: 'speaker_notes', - note: 'note', - savedPage: 'inbox', - }, - }, - }, -}; diff --git a/src/src/app/services/app-state-reducer.spec.ts b/src/src/app/services/app-state-reducer.spec.ts index 23a5c385..4aec8096 100644 --- a/src/src/app/services/app-state-reducer.spec.ts +++ b/src/src/app/services/app-state-reducer.spec.ts @@ -1,6 +1,4 @@ import { TestBed } from '@angular/core/testing'; -import { reducer, getNewestStorable } from './app-state-reducer'; -import { AppActionFactory } from './app-state-actions'; import { Overlap } from '../common/bible-reference'; import { Storable, StorableType } from '../common/storable'; import { CardType, CardItem } from '../models/card-state'; @@ -9,6 +7,30 @@ import { AppState, User } from '../models/app-state'; import { getCardCacheKey } from '../common/card-cache-operations'; import { MoveDirection } from '../common/move-direction'; import { NoteItem } from '../models/note-state'; +import { + addCardAction, + addCardToSavedPageAction, + deleteNoteAction, + findNotesAction, + getNewestStorable, + getNotesAction, + moveCardAction, + moveSavedPageCardAction, + removeCardAction, + removeSavedPageAction, + saveNoteAction, + savePageAction, + updateAutoCompleteAction, + updateCardAction, + updateCardFontFamilyAction, + updateCardFontSizeAction, + updateCardMergeStrategyAction, + updateCurrentPageAction, + updateNotesAction, + updateSavedPageAction, + updateSavedPagesAction, + updateSettingsAction, +} from './app.service'; describe('getNewestStorable', () => { it('maybeMutateStorable', () => { @@ -126,8 +148,7 @@ describe('AppService Reducer', () => { it('UPDATE_CARD_MERGE_STRATEGY', () => { for (const strategy of [Overlap.None, Overlap.Equal, Overlap.Subset, Overlap.Intersect]) { - const action = AppActionFactory.newUpdateCardMergeStrategy(strategy); - const testState = reducer(preState, action); + const testState = updateCardMergeStrategyAction(strategy).handle(preState); expect(testState.settings.value.pageSettings.mergeStrategy).toEqual(strategy); } }); @@ -163,20 +184,17 @@ describe('AppService Reducer', () => { }, }; - const action = AppActionFactory.newUpdateSettings(settings); - const testState = reducer(preState, action); + const testState = updateSettingsAction(settings).handle(preState); expect(testState.settings).toBe(settings, 'Failed to update the display settings'); }); it('UPDATE_CARD_FONT_SIZE', () => { - const action = AppActionFactory.newUpdateCardFontSize(32); - const testState = reducer(preState, action); + const testState = updateCardFontSizeAction(32).handle(preState); expect(testState.settings.value.displaySettings.cardFontSize).toBe(32, 'Failed to change card font size to 32'); }); it('UPDATE_CARD_FONT_FAMILY', () => { - const action = AppActionFactory.newUpdateCardFontFamily('Jason'); - const testState = reducer(preState, action); + const testState = updateCardFontFamilyAction('Jason').handle(preState); expect(testState.settings.value.displaySettings.cardFontFamily).toBe( 'Jason', 'Failed to change card font family to "Jason"' @@ -188,8 +206,7 @@ describe('AppService Reducer', () => { it('UPDATE_AUTOCOMPLETE', () => { const words = ['word1', 'word2', 'word3']; - const action = AppActionFactory.newUpdateAutocomplete(words); - const testState = reducer(preState, action); + const testState = updateAutoCompleteAction(words).handle(preState); expect(testState.autocomplete).toEqual(words, 'Failed to update the autocomplete array'); }); @@ -210,8 +227,7 @@ describe('AppService Reducer', () => { }, ]); - const action = AppActionFactory.newUpdateSavedPages(savedPages); - const testState = reducer(preState, action); + const testState = updateSavedPagesAction(savedPages).handle(preState); expect(testState.savedPages).toBe(savedPages, 'Failed to update the savedPages array'); expect(testState.savedPages.value.length).toBe(1, 'Updated savedPages is the wrong length'); expect(testState.savedPages.value[0].queries.length).toBe( @@ -227,8 +243,7 @@ describe('AppService Reducer', () => { id: 'myid2', }; - const action = AppActionFactory.newUpdateSavedPage(sp); - const testState = reducer(preState, action); + const testState = updateSavedPageAction(sp).handle(preState); expect(testState.savedPages.value[0].queries.length).toBe( 1, @@ -244,8 +259,7 @@ describe('AppService Reducer', () => { it('REMOVE_SAVED_PAGE', () => { const sp = preState.savedPages.value[0]; - const action = AppActionFactory.newRemoveSavedPage(sp); - const testState = reducer(preState, action); + const testState = removeSavedPageAction(sp).handle(preState); expect(testState.savedPages.value.length).toBe(1, 'Updated savedPages should be 1'); expect(testState.savedPages.value[0].title).toBe('page2'); @@ -258,12 +272,10 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action1 = AppActionFactory.newAddCard(card1, null); - const testState = reducer(preState, action1); + const testState = addCardAction(card1, null).handle(preState); expect(testState.currentCards.value[0]).toBe(card1, 'Failed to add first card to empty list'); - const action = AppActionFactory.newUpdateCurrentPage(); - const testState2 = reducer(testState, action); + const testState2 = updateCurrentPageAction().handle(testState); expect(testState2.currentSavedPage.queries.length).toBe(1); expect(preState.currentSavedPage.queries.length).toBe(0); @@ -276,11 +288,9 @@ describe('AppService Reducer', () => { type: CardType.Passage, }; - const action1 = AppActionFactory.newAddCard(card1, null); - const preState2 = reducer(preState, action1); + const preState2 = addCardAction(card1, null).handle(preState); - const action = AppActionFactory.newSavePage('my saved page'); - const testState = reducer(preState2, action); + const testState = savePageAction('my saved page').handle(preState2); expect(testState.savedPages.value[2].queries.length).toBe( 1, @@ -292,8 +302,7 @@ describe('AppService Reducer', () => { it('MOVE_SAVED_PAGE_CARD', () => { const page = preState.savedPages.value[1]; - const action1 = AppActionFactory.newMoveSavedPageCard(page, 1, 0); - const testState = reducer(preState, action1); + const testState = moveSavedPageCardAction(page, 1, 0).handle(preState); expect(testState.savedPages.value[1].queries[0].qry).toBe('G1', 'Failed to move card in saved page'); }); @@ -303,8 +312,7 @@ describe('AppService Reducer', () => { data: null, type: CardType.Passage, }; - const action1 = AppActionFactory.newAddCardToSavedPage(card1, 'myid1'); - const testState = reducer(preState, action1); + const testState = addCardToSavedPageAction(card1, 'myid1').handle(preState); expect(testState.savedPages.value[0].queries[1].qry).toBe('jn 3:16', 'Failed to add card to saved page'); }); @@ -319,8 +327,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action1 = AppActionFactory.newAddCard(card1, null); - const testState = reducer(preState, action1); + const testState = addCardAction(card1, null).handle(preState); expect(testState.currentCards.value[0]).toBe(card1, 'Failed to add first card to empty list'); const card2: CardItem = { @@ -329,8 +336,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action2 = AppActionFactory.newAddCard(card2, null); - const testState2 = reducer(testState, action2); + const testState2 = addCardAction(card2, null).handle(testState); expect(testState2.currentCards.value.length).toBe(2, 'Failed to add second card to list with 1 item'); expect(testState2.currentCards.value[1]).toBe(card2); @@ -342,125 +348,109 @@ describe('AppService Reducer', () => { // append to top, insert next to card - let setState = reducer( - testState2, - AppActionFactory.newUpdateSettings({ - createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), - type: StorableType.initial, - value: { - ...testState2.settings.value, - displaySettings: { - showStrongsAsModal: true, - appendCardToBottom: false, - insertCardNextToItem: true, - clearSearchAfterQuery: false, - cardFontSize: 100, - cardFontFamily: 'Jason', - showVersesOnNewLine: true, - showVerseNumbers: true, - showParagraphs: false, - showParagraphHeadings: false, - syncCardsAcrossDevices: true, - }, + let setState = updateSettingsAction({ + createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), + type: StorableType.initial, + value: { + ...testState2.settings.value, + displaySettings: { + showStrongsAsModal: true, + appendCardToBottom: false, + insertCardNextToItem: true, + clearSearchAfterQuery: false, + cardFontSize: 100, + cardFontFamily: 'Jason', + showVersesOnNewLine: true, + showVerseNumbers: true, + showParagraphs: false, + showParagraphHeadings: false, + syncCardsAcrossDevices: true, }, - }) - ); + }, + }).handle(testState2); - const action3 = AppActionFactory.newAddCard(card3, card2); - const testState3 = reducer(setState, action3); + const testState3 = addCardAction(card3, card2).handle(setState); expect(testState3.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState3.currentCards.value[1]).toBe(card3, 'Failed to insert card above the second card'); // append to bottom, insert next to card - setState = reducer( - testState2, - AppActionFactory.newUpdateSettings({ - createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), - type: StorableType.initial, - value: { - ...testState2.settings.value, - displaySettings: { - showStrongsAsModal: true, - appendCardToBottom: true, - insertCardNextToItem: true, - clearSearchAfterQuery: false, - cardFontSize: 100, - cardFontFamily: 'Jason', - showVersesOnNewLine: true, - showVerseNumbers: true, - showParagraphs: false, - showParagraphHeadings: false, - syncCardsAcrossDevices: true, - }, + setState = updateSettingsAction({ + createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), + type: StorableType.initial, + value: { + ...testState2.settings.value, + displaySettings: { + showStrongsAsModal: true, + appendCardToBottom: true, + insertCardNextToItem: true, + clearSearchAfterQuery: false, + cardFontSize: 100, + cardFontFamily: 'Jason', + showVersesOnNewLine: true, + showVerseNumbers: true, + showParagraphs: false, + showParagraphHeadings: false, + syncCardsAcrossDevices: true, }, - }) - ); + }, + }).handle(testState2); - const action4 = AppActionFactory.newAddCard(card3, card1); - const testState4 = reducer(setState, action4); + const testState4 = addCardAction(card3, card1).handle(setState); expect(testState4.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState4.currentCards.value[1]).toBe(card3, 'Failed to insert card below the first card'); // append to bottom, do not insert next to card - setState = reducer( - testState2, - AppActionFactory.newUpdateSettings({ - createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), - type: StorableType.initial, - value: { - ...testState2.settings.value, - displaySettings: { - showStrongsAsModal: true, - appendCardToBottom: true, - insertCardNextToItem: false, - clearSearchAfterQuery: false, - cardFontSize: 100, - cardFontFamily: 'Jason', - showVersesOnNewLine: true, - showVerseNumbers: true, - showParagraphs: false, - showParagraphHeadings: false, - syncCardsAcrossDevices: true, - }, + setState = updateSettingsAction({ + createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), + type: StorableType.initial, + value: { + ...testState2.settings.value, + displaySettings: { + showStrongsAsModal: true, + appendCardToBottom: true, + insertCardNextToItem: false, + clearSearchAfterQuery: false, + cardFontSize: 100, + cardFontFamily: 'Jason', + showVersesOnNewLine: true, + showVerseNumbers: true, + showParagraphs: false, + showParagraphHeadings: false, + syncCardsAcrossDevices: true, }, - }) - ); + }, + }).handle(testState2); - const action5 = AppActionFactory.newAddCard(card3, card1); - const testState5 = reducer(setState, action5); + const testState5 = addCardAction(card3, card1).handle(setState); expect(testState5.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState5.currentCards.value[2]).toBe(card3, 'Failed to insert card at end of the list'); // append to top, do not insert next to card - setState = reducer( - testState2, - AppActionFactory.newUpdateSettings({ - createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), - type: StorableType.initial, - value: { - ...testState2.settings.value, - displaySettings: { - showStrongsAsModal: true, - appendCardToBottom: false, - insertCardNextToItem: false, - clearSearchAfterQuery: false, - cardFontSize: 100, - cardFontFamily: 'Jason', - showVersesOnNewLine: true, - showVerseNumbers: true, - showParagraphs: false, - showParagraphHeadings: false, - syncCardsAcrossDevices: true, - }, + setState = updateSettingsAction({ + createdOn: new Date(2020, 1, 1, 0, 0, 0, 0).toISOString(), + type: StorableType.initial, + value: { + ...testState2.settings.value, + displaySettings: { + showStrongsAsModal: true, + appendCardToBottom: false, + insertCardNextToItem: false, + clearSearchAfterQuery: false, + cardFontSize: 100, + cardFontFamily: 'Jason', + showVersesOnNewLine: true, + showVerseNumbers: true, + showParagraphs: false, + showParagraphHeadings: false, + syncCardsAcrossDevices: true, }, - }) - ); + }, + }).handle(testState2); - const action6 = AppActionFactory.newAddCard(card3, card1); - const testState6 = reducer(setState, action6); + const testState6 = addCardAction(card3, card1).handle(setState); expect(testState6.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState6.currentCards.value[0]).toBe(card3, 'Failed to insert card at start of the list'); }); @@ -472,8 +462,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action1 = AppActionFactory.newAddCard(oldCard, null); - const preState1 = reducer(preState, action1); + const preState1 = addCardAction(oldCard, null).handle(preState); const newCard: CardItem = { qry: 'H88', @@ -481,8 +470,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action2 = AppActionFactory.newUpdateCard(newCard, oldCard); - const testState = reducer(preState1, action2); + const testState = updateCardAction(newCard, oldCard).handle(preState1); expect(testState.currentCards.value[0].qry).toBe('H88', 'Should update the card'); expect(testState.cardCache[getCardCacheKey(newCard)].qry).toBe('H88', 'Should exist in card cache'); @@ -498,13 +486,14 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action1 = AppActionFactory.newAddCard(card, null); - const preState1 = reducer(preState, action1); + const preState1 = addCardAction(card, null).handle(preState); - const action2 = AppActionFactory.newRemoveCard(card); - const testState = reducer(preState1, action2); + const testState = removeCardAction(card).handle(preState1); - expect(preState1.currentCards.value.length).toBe(1, 'Should have added the card in preparation for removing the card'); + expect(preState1.currentCards.value.length).toBe( + 1, + 'Should have added the card in preparation for removing the card' + ); expect(testState.currentCards.value.length).toBe(0, 'Should have removed the card'); expect(testState.cardCache[getCardCacheKey(card)]).toBeUndefined( 'Should be undefined, having been removed from card cache' @@ -518,33 +507,30 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const action1 = AppActionFactory.newAddCard(card1, null); - const preState1 = reducer(preState, action1); + const preState1 = addCardAction(card1, null).handle(preState); const card2: CardItem = { qry: 'H88', data: null, type: CardType.Strongs, }; - const action2 = AppActionFactory.newAddCard(card2, null); - const preState2 = reducer(preState1, action2); + + const preState2 = addCardAction(card2, null).handle(preState1); expect(preState2.currentCards.value.length).toBe(2, 'Should have two cards'); expect(preState2.currentCards.value[0].qry).toBe('G123'); expect(preState2.currentCards.value[1].qry).toBe('H88'); - const action3 = AppActionFactory.newMoveCard(card2, MoveDirection.Up); - const testState1 = reducer(preState2, action3); + const testState1 = moveCardAction(card2, MoveDirection.Up).handle(preState2); expect(testState1.currentCards.value[0].qry).toBe('H88'); expect(testState1.currentCards.value[1].qry).toBe('G123'); - const testState4 = reducer(preState2, action3); + const testState4 = moveCardAction(card2, MoveDirection.Up).handle(preState2); expect(testState4.currentCards.value[0].qry).toBe('H88'); expect(testState4.currentCards.value[1].qry).toBe('G123'); - const action4 = AppActionFactory.newMoveCard(card1, MoveDirection.Down); - const testState2 = reducer(preState2, action4); + const testState2 = moveCardAction(card1, MoveDirection.Down).handle(preState2); expect(testState2.currentCards.value[0].qry).toBe('H88'); expect(testState2.currentCards.value[1].qry).toBe('G123'); - const testState3 = reducer(preState2, action4); + const testState3 = moveCardAction(card1, MoveDirection.Down).handle(preState2); expect(testState3.currentCards.value[0].qry).toBe('H88'); expect(testState3.currentCards.value[1].qry).toBe('G123'); }); @@ -559,8 +545,7 @@ describe('AppService Reducer', () => { providerId: 'asdfasf', }; - const action1 = AppActionFactory.newUser(user); - const testState = reducer(preState, action1); + const testState = newUserAction(user).handle(preState); expect(testState.user).toBe(user, 'Should set the user'); }); @@ -581,18 +566,14 @@ describe('AppService Reducer', () => { xref: 'jn 3:16', }; - const action1 = AppActionFactory.newSaveNote(note1); - const preState1 = reducer(preState, action1); - const action2 = AppActionFactory.newSaveNote(note2); - const preState2 = reducer(preState1, action2); + const preState1 = saveNoteAction(note1).handle(preState); + const preState2 = saveNoteAction(note2).handle(preState1); expect(preState2.notes.value.length).toBe(2, 'Should have two notes'); - const action3 = AppActionFactory.newGetNote('123456789', null); - const preState3 = reducer(preState2, action3); + const preState3 = getNotesAction('123456789', null).handle(preState2); expect(preState3.currentCards.value.length).toBe(1, 'Should have added the note card'); - const action4 = AppActionFactory.newGetNote('1234567890', null); - const preState4 = reducer(preState3, action4); + const preState4 = getNotesAction('1234567890', null).handle(preState3); expect(preState4.currentCards.value.length).toBe(2, 'Should have added the note card'); }); @@ -610,19 +591,20 @@ describe('AppService Reducer', () => { xref: 'jn 3:16', }; - const action1 = AppActionFactory.newUpdateNotes(new Storable([note1, note2])); - const preState1 = reducer(preState, action1); + const preState1 = updateNotesAction(new Storable([note1, note2])).handle(preState); expect(preState1.notes.value.length).toBe(2, 'Should have added the notes'); - const action2 = AppActionFactory.newFindNotes('note', null); - const preState2 = reducer(preState1, action2); + const preState2 = findNotesAction('note', null).handle(preState1); expect(preState2.currentCards.value.length).toBe(2, 'Should have found two notes card'); - const action3 = AppActionFactory.newDeleteNote(note1); - const preState3 = reducer(preState2, action3); + const preState3 = deleteNoteAction(note1).handle(preState2); expect(preState3.currentCards.value.length).toBe(1, 'Should have deleted the note card'); expect(preState3.notes.value.length).toBe(1, 'Should have added the notes'); }); //#endregion }); +function newUserAction(preState: AppState, action1: any) { + throw new Error('Function not implemented.'); +} + diff --git a/src/src/app/services/app-state-reducer.ts b/src/src/app/services/app-state-reducer.ts deleted file mode 100644 index c1458d9e..00000000 --- a/src/src/app/services/app-state-reducer.ts +++ /dev/null @@ -1,489 +0,0 @@ -import { UUID } from 'angular2-uuid'; - -import { AppState, Settings } from '../models/app-state'; -import { IStorable, Storable } from '../common/storable'; -import { NoteItem } from '../models/note-state'; - -import { mergeCardList } from '../common/card-operations'; -import { updateInCardCache, removeFromCardCache, getFromCardCache } from '../common/card-cache-operations'; - -import { AppAction, AppActionFactory } from './app-state-actions'; -import { initialState } from './app-state-initial-state'; -import { SavedPage } from '../models/page-state'; -import { CardType, CardItem, DataReference } from '../models/card-state'; -import { moveItem, moveItemUpOrDown } from '../common/array-operations'; - -export function getNewestStorable(candidate: IStorable, incumbant: IStorable): IStorable { - // if the candidate is null, then return the state. - if (!candidate) { - return incumbant; - } - - // only update if the settings are newer. - if (!incumbant || new Date(candidate.createdOn) > new Date(incumbant.createdOn)) { - return candidate; - } - - // candidate didn't win. return state untouched. - return incumbant; -} - -export function reducer(state: AppState, action: AppAction): AppState { - // somtimes the state is null. lets not complain if that happens. - if (state === undefined) { - state = initialState; - } - - switch (action.type) { - case 'UPDATE_ERROR': { - return { - ...state, - error: action.error, - }; - } - - //#region Settings - - case 'UPDATE_CARD_MERGE_STRATEGY': { - const settings = new Storable({ - ...state.settings.value, - pageSettings: { - ...state.settings.value.pageSettings, - mergeStrategy: action.cardMergeStrategy, - }, - }); - return reducer(state, { - type: 'UPDATE_SETTINGS', - settings, - }); - } - - case 'UPDATE_SETTINGS': { - const item = getNewestStorable(action.settings, state.settings); - - return { - ...state, - settings: item, - }; - } - - case 'UPDATE_CARD_FONT_SIZE': { - const settings = new Storable({ - ...state.settings.value, - displaySettings: { - ...state.settings.value.displaySettings, - cardFontSize: action.cardFontSize, - }, - }); - - return reducer(state, { - type: 'UPDATE_SETTINGS', - settings, - }); - } - - case 'UPDATE_CARD_FONT_FAMILY': { - const settings = new Storable({ - ...state.settings.value, - displaySettings: { - ...state.settings.value.displaySettings, - cardFontFamily: action.cardFontFamily, - }, - }); - - return reducer(state, { - type: 'UPDATE_SETTINGS', - settings, - }); - } - - //#endregion - - case 'UPDATE_AUTOCOMPLETE': { - return { - ...state, - autocomplete: [...action.words], - }; - } - - //#region Saved Pages - - case 'UPDATE_SAVED_PAGES': { - const savedPages = getNewestStorable(action.savedPages, state.savedPages); - - // only true if a currentSavedPage was set, indicating that the user - // is currently looking at a saved page. - const hasCurrentSavedPage = - state.currentSavedPage !== null && - state.currentSavedPage !== undefined && - action.savedPages.value.some((o) => o.id === state.currentSavedPage.id); - - const currentSavedPage = hasCurrentSavedPage - ? action.savedPages.value.find((o) => o.id === state.currentSavedPage.id) - : null; - - return { - ...state, - // if the currentSavedPage was loaded, replace it with the info from the - // new savedPages array, as it might have changed. - currentCards: hasCurrentSavedPage ? new Storable(currentSavedPage.queries) : state.currentCards, - currentSavedPage: hasCurrentSavedPage ? currentSavedPage : state.currentSavedPage, - savedPagesLoaded: true, - savedPages, // update the savedPages - }; - } - - case 'UPDATE_SAVED_PAGE': { - const newSavedPages = new Storable( - state.savedPages.value.map((o) => { - if (o.id === action.savedPage.id) { - return action.savedPage; - } - return o; - }) - ); - - const savedPages = getNewestStorable(newSavedPages, state.savedPages); - return reducer(state, AppActionFactory.newUpdateSavedPages(savedPages)); - } - - case 'REMOVE_SAVED_PAGE': { - const savedPages = new Storable(state.savedPages.value.filter((o) => o.id !== action.savedPage.id)); - const item = getNewestStorable(savedPages, state.savedPages); - - return { - ...state, - savedPagesLoaded: true, - savedPages: item, - }; - } - - case 'UPDATE_CURRENT_PAGE': { - const current = { - id: state.currentSavedPage.id, - title: state.currentSavedPage.title, - queries: [...mergeCardList(state.currentCards.value, state.settings.value.pageSettings.mergeStrategy)], - }; - - const savedPages = new Storable([ - ...state.savedPages.value.filter((o) => o.id !== state.currentSavedPage.id), - current, - ]); - - const item = getNewestStorable(savedPages, state.savedPages); - return { - ...state, - currentSavedPage: current, - savedPagesLoaded: true, - savedPages: item, - }; - } - - case 'SAVE_PAGE': { - const savedPages = new Storable([ - ...(state.savedPages ? state.savedPages.value : []), - { - // create a new saved page object - title: action.title, - id: UUID.UUID().toString(), - queries: [...mergeCardList(state.currentCards.value, state.settings.value.pageSettings.mergeStrategy)], - }, - ]); - - return reducer(state, { - type: 'UPDATE_SAVED_PAGES', - savedPages, - }); - } - - case 'MOVE_SAVED_PAGE_CARD': { - const queries = moveItem(action.savedPage.queries, action.fromIndex, action.toIndex); - const savedPage = { - ...action.savedPage, - queries, // update the queries. - }; - - return reducer(state, AppActionFactory.newUpdateSavedPage(savedPage)); - } - - case 'ADD_CARD_TO_SAVED_PAGE': { - const savedPages = new Storable([ - ...(state.savedPages ? state.savedPages.value : []).map((o) => { - if (o.id.toString() === action.pageId) { - let references = [] as DataReference[]; - if (state.settings.value.displaySettings.appendCardToBottom) { - references = [...o.queries, action.card]; - } else { - references = [action.card, ...o.queries]; - } - return { - ...o, - queries: mergeCardList(references, state.settings.value.pageSettings.mergeStrategy), - }; - } - return o; - }), - ]); - - return reducer(state, { - type: 'UPDATE_SAVED_PAGES', - savedPages, - }); - } - - //#endregion - - //#region Cards - - case 'ADD_CARD': { - let cards = []; - - if (action.nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { - const idx = state.currentCards.value.indexOf(action.nextToItem); - - if (state.settings.value.displaySettings.appendCardToBottom) { - const before = state.currentCards.value.slice(0, idx + 1); - const after = state.currentCards.value.slice(idx + 1); - cards = [...before, action.card, ...after]; - } else { - const before = state.currentCards.value.slice(0, idx); - const after = state.currentCards.value.slice(idx); - cards = [...before, action.card, ...after]; - } - } else { - if (state.settings.value.displaySettings.appendCardToBottom) { - cards = [...state.currentCards.value, action.card]; - } else { - cards = [action.card, ...state.currentCards.value]; - } - } - - return { - ...state, - currentCards: new Storable(cards), - cardCache: updateInCardCache(action.card, state.cardCache), - }; - } - - case 'UPDATE_CARD': { - return { - ...state, - currentCards: new Storable( - state.currentCards.value.map((c) => { - if (c === action.oldCard) { - return action.newCard; - } - return c; - }) - ), - cardCache: updateInCardCache(action.newCard, removeFromCardCache(action.oldCard, state.cardCache)), - }; - } - - case 'REMOVE_CARD': { - // potentially remove card from a saved page. - const currentSavedPage = - state.currentSavedPage !== null - ? { - ...state.currentSavedPage, - queries: state.currentSavedPage.queries.filter((q) => q !== action.card), - } - : null; - - const savedPages = - state.currentSavedPage !== null - ? new Storable( - (state.savedPages ? state.savedPages.value : []).map((o) => { - if (o === state.currentSavedPage) { - return currentSavedPage; - } - return o; - }) - ) - : state.savedPages; - - return { - ...state, - currentSavedPage, - savedPages, - currentCards: new Storable([...state.currentCards.value.filter((c) => c !== action.card)]), - cardCache: removeFromCardCache(action.card, state.cardCache), - }; - } - - case 'CLEAR_CARDS': { - // potentially remove card from a saved page. - - return { - ...state, - currentCards: new Storable([]), - }; - } - - case 'MOVE_CARD': { - const cards = moveItemUpOrDown(state.currentCards.value, action.card, action.direction); - - return { - ...state, - currentCards: new Storable(cards), - }; - } - - case 'UPDATE_CARDS': { - let cardCache = { ...state.cardCache }; - for (const card of action.cards.value) { - cardCache = updateInCardCache(card, cardCache); - } - return { - ...state, - currentCards: action.cards, - cardCache, - }; - } - - //#endregion - - case 'SET_USER': { - return { - ...state, - user: action.user, - }; - } - - //#region Notes - - case 'FIND_NOTES': { - const notes = state.notes.value - .filter((o) => o.title.search(action.qry) > -1) - .map((o) => { - return { - qry: o.id, - type: CardType.Note, - data: o, - } as CardItem; - }); - - let cards = [] as DataReference[]; - - if (action.nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { - const idx = state.currentCards.value.indexOf(action.nextToItem); - - if (state.settings.value.displaySettings.appendCardToBottom) { - const before = state.currentCards.value.slice(0, idx + 1); - const after = state.currentCards.value.slice(idx + 1); - cards = [...before, ...notes, ...after]; - } else { - const before = state.currentCards.value.slice(0, idx); - const after = state.currentCards.value.slice(idx); - cards = [...before, ...notes, ...after]; - } - } else { - if (state.settings.value.displaySettings.appendCardToBottom) { - cards = [...state.currentCards.value, ...notes]; - } else { - cards = [...notes, ...state.currentCards.value]; - } - } - - let cache = { ...state.cardCache }; - for (const n of notes) { - cache = updateInCardCache(n, cache); - } - - return { - ...state, - currentCards: new Storable(cards), - cardCache: cache, - }; - } - - case 'GET_NOTE': { - const note = state.notes.value.find((o) => o.id === action.noteId); - const card: CardItem = { - qry: note.id, - type: CardType.Note, - data: note, - }; - - return reducer(state, { - type: 'ADD_CARD', - card, - nextToItem: action.nextToItem, - }); - } - - case 'UPDATE_NOTES': { - return { - ...state, - notes: action.notes ? action.notes : new Storable([]), - }; - } - - case 'SAVE_NOTE': { - // you may be creating a new note or updating an existing. - // if its an update, you need to update the note in the following: - // * card list could have it. - // * notes list could have it. - // * it could be in any of the saved pages lists... - // so iterate through all of them and if you find the note - // in any of them, swap it out - - const notes = new Storable([ - ...state.notes.value.filter((o) => o.id !== action.note.id), - action.note, - ]); - - const newState = { - ...state, - currentCards: new Storable([...state.currentCards.value]), // you want to trigger an update to the cards if a card update is different. - notes, - }; - - return newState; - } - - case 'DELETE_NOTE': { - // the note may be in any of the following: - // * card list could have it. - // * notes list could have it. - // * it could be in any of the saved pages lists... - // so iterate through all of them and if you find the note - // in any of them, remove it - - const card = state.currentCards.value.find((o) => o.qry === action.note.id); - - const cards = card - ? [ - ...state.currentCards.value.filter((o) => { - return o.type !== CardType.Note || o.qry !== action.note.id; - }), - ] - : state.currentCards.value; // if card is undefined, then it wasn't in the current card list. - - const notes = new Storable([...state.notes.value.filter((o) => o.id !== action.note.id)]); - - const savedPages = new Storable([ - ...(state.savedPages ? state.savedPages.value : []).map((sp) => { - return { - ...sp, - queries: sp.queries.filter((o) => { - return o.type !== CardType.Note || o.qry !== action.note.id; - }), - }; - }), - ]); - - return { - ...state, - currentCards: new Storable(cards), - notes, - savedPages, - cardCache: card - ? removeFromCardCache(getFromCardCache(card, state.cardCache), state.cardCache) - : state.cardCache, - }; - } - - //#endregion - } -} diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index 497322fc..842d151a 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -1,11 +1,24 @@ +import { AngularFireDatabase } from '@angular/fire/compat/database'; import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { User, Settings, DisplaySettings, PageSettings } from '../models/app-state'; + +import { StorageMap } from '@ngx-pwa/local-storage'; + +import { UUID } from 'angular2-uuid'; + +import { HashTable } from '../common/hashtable'; +import { MoveDirection } from '../common/move-direction'; +import { IStateAction } from '../common/state-service'; +import { IStorable, Storable, StorableType } from '../common/storable'; +import { mergeCardList } from '../common/card-operations'; +import { updateInCardCache, removeFromCardCache, getFromCardCache } from '../common/card-cache-operations'; +import { moveItem, moveItemUpOrDown } from '../common/array-operations'; import { Section, BibleReference, Overlap } from '../common/bible-reference'; import { createStateService } from '../common/state-service'; -import { StorageMap } from '@ngx-pwa/local-storage'; -import { AngularFireDatabase } from '@angular/fire/compat/database'; -import { IStorable, Storable } from '../common/storable'; + +import { SavedPage } from '../models/page-state'; +import { CardType, CardItem, DataReference } from '../models/card-state'; +import { AppState, User, Settings, DisplaySettings, PageSettings, Error } from '../models/app-state'; import { NoteItem } from '../models/note-state'; import { Paragraph, @@ -24,18 +37,696 @@ import { StrongsResult, } from '../models/strongs-state'; import { WordToStem, IndexResult, WordLookupResult } from '../models/words-state'; -import { HashTable } from '../common/hashtable'; -import { MoveDirection } from '../common/move-direction'; -import { reducer } from './app-state-reducer'; -import { initialState } from './app-state-initial-state'; -import { CardItem, CardType, DataReference } from '../models/card-state'; -import { SavedPage } from '../models/page-state'; -import { AppActionFactory } from './app-state-actions'; + +const initialState: AppState = { + user: null, + currentCards: { + type: StorableType.initial, + createdOn: new Date(0).toISOString(), + value: [], + }, + cardCache: {}, + autocomplete: [], + currentSavedPage: null, + savedPages: null, + notes: { + type: StorableType.initial, + createdOn: new Date(0).toISOString(), + value: [], + }, + savedPagesLoaded: false, + error: null, + settings: { + type: StorableType.initial, + createdOn: new Date(0).toISOString(), + value: { + displaySettings: { + showStrongsAsModal: false, + appendCardToBottom: true, + insertCardNextToItem: true, + clearSearchAfterQuery: true, + cardFontSize: 12, + cardFontFamily: 'PT Serif', + showVersesOnNewLine: false, + showVerseNumbers: false, + showParagraphs: true, + showParagraphHeadings: true, + syncCardsAcrossDevices: false, + }, + pageSettings: { + mergeStrategy: Overlap.Equal, + }, + cardIcons: { + words: 'font_download', + passage: 'menu_book', + strongs: 'speaker_notes', + note: 'note', + savedPage: 'inbox', + }, + }, + }, +}; + +interface AppAction extends IStateAction {} + +export function getNewestStorable(candidate: IStorable, incumbant: IStorable): IStorable { + // if the candidate is null, then return the state. + if (!candidate) { + return incumbant; + } + + // only update if the settings are newer. + if (!incumbant || new Date(candidate.createdOn) > new Date(incumbant.createdOn)) { + return candidate; + } + + // candidate didn't win. return state untouched. + return incumbant; +} + +function appReducer(state: AppState, action: IStateAction): AppState { + if (state === undefined || action.handle === undefined) { + return initialState; + } + return action.handle(state); +} + +//#region Saved Pages + +const savePageActionType = 'SAVE_PAGE'; +export const savePageAction = (title: string): AppAction => { + return { + type: savePageActionType, + handle(state: AppState) { + const savedPages = new Storable([ + ...(state.savedPages ? state.savedPages.value : []), + { + // create a new saved page object + title: title, + id: UUID.UUID().toString(), + queries: [...mergeCardList(state.currentCards.value, state.settings.value.pageSettings.mergeStrategy)], + }, + ]); + + return updateSavedPagesAction(savedPages).handle(state); + }, + }; +}; + +const updateCurrentPageActionType = 'UPDATE_CURRENT_PAGE'; +export const updateCurrentPageAction = (): AppAction => { + return { + type: updateCurrentPageActionType, + handle(state: AppState) { + const current = { + id: state.currentSavedPage.id, + title: state.currentSavedPage.title, + queries: [...mergeCardList(state.currentCards.value, state.settings.value.pageSettings.mergeStrategy)], + }; + + const savedPages = new Storable([ + ...state.savedPages.value.filter((o) => o.id !== state.currentSavedPage.id), + current, + ]); + + const item = getNewestStorable(savedPages, state.savedPages); + return { + ...state, + currentSavedPage: current, + savedPagesLoaded: true, + savedPages: item, + }; + }, + }; +}; + +const updateSavedPagesActionType = 'UPDATE_SAVED_PAGES'; +export const updateSavedPagesAction = (oldSavedPages: IStorable): AppAction => { + return { + type: updateSavedPagesActionType, + handle(state: AppState) { + const newSavedPages = getNewestStorable(oldSavedPages, state.savedPages); + + // only true if a currentSavedPage was set, indicating that the user + // is currently looking at a saved page. + const hasCurrentSavedPage = + state.currentSavedPage !== null && + state.currentSavedPage !== undefined && + oldSavedPages.value.some((o) => o.id === state.currentSavedPage.id); + + const currentSavedPage = hasCurrentSavedPage + ? oldSavedPages.value.find((o) => o.id === state.currentSavedPage.id) + : null; + + return { + ...state, + // if the currentSavedPage was loaded, replace it with the info from the + // new savedPages array, as it might have changed. + currentCards: hasCurrentSavedPage ? new Storable(currentSavedPage.queries) : state.currentCards, + currentSavedPage: hasCurrentSavedPage ? currentSavedPage : state.currentSavedPage, + savedPagesLoaded: true, + savedPages: newSavedPages, // update the savedPages + }; + }, + }; +}; + +const updateSavedPageActionType = 'UPDATE_SAVED_PAGES'; +export const updateSavedPageAction = (savedPage: SavedPage): AppAction => { + return { + type: updateSavedPageActionType, + handle(state: AppState) { + const newSavedPages = new Storable( + state.savedPages.value.map((o) => { + if (o.id === savedPage.id) { + return savedPage; + } + return o; + }) + ); + + const savedPages = getNewestStorable(newSavedPages, state.savedPages); + return updateSavedPagesAction(savedPages).handle(state); + }, + }; +}; + +const removeSavedPageActionType = 'REMOVE_SAVED_PAGE'; +export const removeSavedPageAction = (savedPage: SavedPage): AppAction => { + return { + type: removeSavedPageActionType, + handle(state: AppState) { + const savedPages = new Storable(state.savedPages.value.filter((o) => o.id !== savedPage.id)); + const item = getNewestStorable(savedPages, state.savedPages); + + return { + ...state, + savedPagesLoaded: true, + savedPages: item, + }; + }, + }; +}; + +const moveSavedPageCardActionType = 'MOVE_SAVED_PAGE_CARD'; +export const moveSavedPageCardAction = (oldSavedPage: SavedPage, fromIndex: number, toIndex: number): AppAction => { + return { + type: moveSavedPageCardActionType, + handle(state: AppState) { + const queries = moveItem(oldSavedPage.queries, fromIndex, toIndex); + const savedPage = { + ...oldSavedPage, + queries, // update the queries. + }; + + return updateSavedPageAction(savedPage).handle(state); + }, + }; +}; + +const addCardToSavedPageActionType = 'ADD_CARD_TO_SAVED_PAGE'; +export const addCardToSavedPageAction = (card: CardItem, pageId: string): AppAction => { + return { + type: addCardToSavedPageActionType, + handle(state: AppState) { + const savedPages = new Storable([ + ...(state.savedPages ? state.savedPages.value : []).map((o) => { + if (o.id.toString() === pageId) { + let references = [] as DataReference[]; + if (state.settings.value.displaySettings.appendCardToBottom) { + references = [...o.queries, card]; + } else { + references = [card, ...o.queries]; + } + return { + ...o, + queries: mergeCardList(references, state.settings.value.pageSettings.mergeStrategy), + }; + } + return o; + }), + ]); + + return updateSavedPagesAction(savedPages).handle(state); + }, + }; +}; + +//#endregion + +//#region Cards + +const addCardActionType = 'ADD_CARD'; +export const addCardAction = (card: CardItem, nextToItem: CardItem): AppAction => { + return { + type: addCardActionType, + handle(state: AppState) { + let cards = []; + + if (nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { + const idx = state.currentCards.value.indexOf(nextToItem); + + if (state.settings.value.displaySettings.appendCardToBottom) { + const before = state.currentCards.value.slice(0, idx + 1); + const after = state.currentCards.value.slice(idx + 1); + cards = [...before, card, ...after]; + } else { + const before = state.currentCards.value.slice(0, idx); + const after = state.currentCards.value.slice(idx); + cards = [...before, card, ...after]; + } + } else { + if (state.settings.value.displaySettings.appendCardToBottom) { + cards = [...state.currentCards.value, card]; + } else { + cards = [card, ...state.currentCards.value]; + } + } + + return { + ...state, + currentCards: new Storable(cards), + cardCache: updateInCardCache(card, state.cardCache), + }; + }, + }; +}; + +const updateCardActionType = 'UPDATE_CARD'; +export const updateCardAction = (newCard: CardItem, oldCard: CardItem): AppAction => { + return { + type: updateCardActionType, + handle(state: AppState) { + return { + ...state, + currentCards: new Storable( + state.currentCards.value.map((c) => { + if (c === oldCard) { + return newCard; + } + return c; + }) + ), + cardCache: updateInCardCache(newCard, removeFromCardCache(oldCard, state.cardCache)), + }; + }, + }; +}; + +const removeCardActionType = 'REMOVE_CARD'; +export const removeCardAction = (card: CardItem): AppAction => { + return { + type: removeCardActionType, + handle(state: AppState) { + // potentially remove card from a saved page. + const currentSavedPage = + state.currentSavedPage !== null + ? { + ...state.currentSavedPage, + queries: state.currentSavedPage.queries.filter((q) => q !== card), + } + : null; + + const savedPages = + state.currentSavedPage !== null + ? new Storable( + (state.savedPages ? state.savedPages.value : []).map((o) => { + if (o === state.currentSavedPage) { + return currentSavedPage; + } + return o; + }) + ) + : state.savedPages; + + return { + ...state, + currentSavedPage, + savedPages, + currentCards: new Storable([...state.currentCards.value.filter((c) => c !== card)]), + cardCache: removeFromCardCache(card, state.cardCache), + }; + }, + }; +}; + +const moveCardActionType = 'MOVE_CARD'; +export const moveCardAction = (card: CardItem, direction: MoveDirection): AppAction => { + return { + type: moveCardActionType, + handle(state: AppState) { + const cards = moveItemUpOrDown(state.currentCards.value, card, direction); + + return { + ...state, + currentCards: new Storable(cards), + }; + }, + }; +}; + +const updateCardsActionType = 'UPDATE_CARDS'; +export const updateCardsAction = (cards: IStorable): AppAction => { + return { + type: savePageActionType, + handle(state: AppState) { + let cardCache = { ...state.cardCache }; + for (const card of cards.value) { + cardCache = updateInCardCache(card, cardCache); + } + return { + ...state, + currentCards: cards, + cardCache, + }; + }, + }; +}; + +const clearCardsActionType = 'CLEAR_CARDS'; +export const clearCardsAction = (): AppAction => { + return { + type: clearCardsActionType, + handle(state: AppState) { + return { + ...state, + currentCards: new Storable([]), + }; + }, + }; +}; + +//#endregion + +//#region General + +const updateErrorActionType = 'UPDATE_ERROR'; +export const updateErrorAction = (error: Error): AppAction => { + return { + type: updateErrorActionType, + handle(state: AppState) { + return { + ...state, + error: error, + }; + }, + }; +}; + +const setUserActionType = 'SET_USER'; +export const setUserAction = (user: User): AppAction => { + return { + type: setUserActionType, + handle(state: AppState) { + return { + ...state, + user: user, + }; + }, + }; +}; + +const updateAutoCompleteActionType = 'UPDATE_AUTOCOMPLETE'; +export const updateAutoCompleteAction = (words: string[]): AppAction => { + return { + type: updateAutoCompleteActionType, + handle(state: AppState) { + return { + ...state, + autocomplete: [...words], + }; + }, + }; +}; + +//#endregion + +//#region Settings + +const updateSettingsActionType = 'UPDATE_SETTINGS'; +export const updateSettingsAction = (settings: IStorable): AppAction => { + return { + type: updateSettingsActionType, + handle(state: AppState) { + const item = getNewestStorable(settings, state.settings); + + return { + ...state, + settings: item, + }; + }, + }; +}; + +const updateCardMergeStrategyActionType = 'UPDATE_CARD_MERGE_STRATEGY'; +export const updateCardMergeStrategyAction = (mergeStrategy: Overlap): AppAction => { + return { + type: updateCardMergeStrategyActionType, + handle(state: AppState) { + const settings = new Storable({ + ...state.settings.value, + pageSettings: { + ...state.settings.value.pageSettings, + mergeStrategy: mergeStrategy, + }, + }); + return updateSettingsAction(settings).handle(state); + }, + }; +}; + +const updateCardFontSizeActionType = 'UPDATE_CARD_FONT_SIZE'; +export const updateCardFontSizeAction = (cardFontSize: number): AppAction => { + return { + type: updateCardFontSizeActionType, + handle(state: AppState) { + const settings = new Storable({ + ...state.settings.value, + displaySettings: { + ...state.settings.value.displaySettings, + cardFontSize: cardFontSize, + }, + }); + + return updateSettingsAction(settings).handle(state); + }, + }; +}; + +const updateCardFontFamilyActionType = 'UPDATE_CARD_FONT_FAMILY'; +export const updateCardFontFamilyAction = (cardFontFamily: string): AppAction => { + return { + type: updateCardFontFamilyActionType, + handle(state: AppState) { + const settings = new Storable({ + ...state.settings.value, + displaySettings: { + ...state.settings.value.displaySettings, + cardFontFamily: cardFontFamily, + }, + }); + + return updateSettingsAction(settings).handle(state); + }, + }; +}; + +//#endregion + +//#region Notes + +const findNotesActionType = 'FIND_NOTES'; +export const findNotesAction = (qry: string, nextToItem: CardItem): AppAction => { + return { + type: findNotesActionType, + handle(state: AppState) { + const notes = state.notes.value + .filter((o) => o.title.search(qry) > -1) + .map((o) => { + return { + qry: o.id, + type: CardType.Note, + data: o, + } as CardItem; + }); + + let cards = [] as DataReference[]; + + if (nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { + const idx = state.currentCards.value.indexOf(nextToItem); + + if (state.settings.value.displaySettings.appendCardToBottom) { + const before = state.currentCards.value.slice(0, idx + 1); + const after = state.currentCards.value.slice(idx + 1); + cards = [...before, ...notes, ...after]; + } else { + const before = state.currentCards.value.slice(0, idx); + const after = state.currentCards.value.slice(idx); + cards = [...before, ...notes, ...after]; + } + } else { + if (state.settings.value.displaySettings.appendCardToBottom) { + cards = [...state.currentCards.value, ...notes]; + } else { + cards = [...notes, ...state.currentCards.value]; + } + } + + let cache = { ...state.cardCache }; + for (const n of notes) { + cache = updateInCardCache(n, cache); + } + + return { + ...state, + currentCards: new Storable(cards), + cardCache: cache, + }; + }, + }; +}; + +const getNotesActionType = 'GET_NOTE'; +export const getNotesAction = (noteId: string, nextToItem: CardItem): AppAction => { + return { + type: getNotesActionType, + handle(state: AppState) { + const note = state.notes.value.find((o) => o.id === noteId); + const card: CardItem = { + qry: note.id, + type: CardType.Note, + data: note, + }; + + return addCardAction(card, nextToItem).handle(state); + }, + }; +}; + +const updateNotesActionType = 'UPDATE_NOTES'; +export const updateNotesAction = (notes: IStorable): AppAction => { + return { + type: updateNotesActionType, + handle(state: AppState) { + return { + ...state, + notes: notes ? notes : new Storable([]), + }; + }, + }; +}; + +const saveNoteActionType = 'SAVE_NOTE'; +export const saveNoteAction = (note: NoteItem): AppAction => { + return { + type: saveNoteActionType, + handle(state: AppState) { + // you may be creating a new note or updating an existing. + // if its an update, you need to update the note in the following: + // * card list could have it. + // * notes list could have it. + // * it could be in any of the saved pages lists... + // so iterate through all of them and if you find the note + // in any of them, swap it out + + const notes = new Storable([...state.notes.value.filter((o) => o.id !== note.id), note]); + + return { + ...state, + // you want to trigger an update to the cards if a card update is different. + currentCards: new Storable([...state.currentCards.value]), + notes, + }; + }, + }; +}; + +const deleteNoteActionType = 'DELETE_NOTE'; +export const deleteNoteAction = (note: NoteItem): AppAction => { + return { + type: deleteNoteActionType, + handle(state: AppState) { + // the note may be in any of the following: + // * card list could have it. + // * notes list could have it. + // * it could be in any of the saved pages lists... + // so iterate through all of them and if you find the note + // in any of them, remove it + + const card = state.currentCards.value.find((o) => o.qry === note.id); + + const cards = card + ? [ + ...state.currentCards.value.filter((o) => { + return o.type !== CardType.Note || o.qry !== note.id; + }), + ] + : state.currentCards.value; // if card is undefined, then it wasn't in the current card list. + + const notes = new Storable([...state.notes.value.filter((o) => o.id !== note.id)]); + + const savedPages = new Storable([ + ...(state.savedPages ? state.savedPages.value : []).map((sp) => { + return { + ...sp, + queries: sp.queries.filter((o) => { + return o.type !== CardType.Note || o.qry !== note.id; + }), + }; + }), + ]); + + return { + ...state, + currentCards: new Storable(cards), + notes, + savedPages, + cardCache: card + ? removeFromCardCache(getFromCardCache(card, state.cardCache), state.cardCache) + : state.cardCache, + }; + }, + }; +}; + +//#endregion + +type AppActions = + // Saved Page Actions + | typeof savePageActionType + | typeof updateCurrentPageActionType + | typeof updateSavedPagesActionType + | typeof updateSavedPageActionType + | typeof removeSavedPageActionType + | typeof moveSavedPageCardActionType + | typeof addCardToSavedPageActionType + // Card Actions + | typeof addCardActionType + | typeof updateCardActionType + | typeof removeCardActionType + | typeof moveCardActionType + | typeof updateCardsActionType + | typeof clearCardsActionType + // General Actions + | typeof updateErrorActionType + | typeof setUserActionType + | typeof updateAutoCompleteActionType + // Settings Actions + | typeof updateSettingsActionType + | typeof updateCardMergeStrategyActionType + | typeof updateCardFontSizeActionType + | typeof updateCardFontFamilyActionType + // Note Actions + | typeof findNotesActionType + | typeof getNotesActionType + | typeof updateNotesActionType + | typeof saveNoteActionType + | typeof deleteNoteActionType; @Injectable({ providedIn: 'root', }) -export class AppService extends createStateService(reducer, initialState) { +export class AppService extends createStateService(appReducer, initialState) { private wordToStem: Map; private paragraphs: HashTable; private searchIndexArray: string[]; @@ -118,20 +809,74 @@ export class AppService extends createStateService(reducer, initialState) { //#region General dispatchError(msg: string) { - this.dispatch({ - type: 'UPDATE_ERROR', - error: { - msg, - }, - }); + this.dispatch(updateErrorAction({ msg })); console.log(msg); } setUser(user: User) { - this.dispatch({ - type: 'SET_USER', - user, - }); + this.dispatch(setUserAction(user)); + } + + async getAutoComplete(keyword: string) { + if (!this.autocomplete) { + // if you have't populated the word list yet, do so... + const data = await this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`).toPromise(); + this.autocomplete = data.map((o) => o.w); + } + + let qry = keyword; + let prefix = ''; + const idx = qry.lastIndexOf(';'); + const words: string[] = []; + + if (idx > -1) { + qry = keyword.substring(idx + 1).trim(); + prefix = keyword.substring(0, idx).trim() + '; '; + } + + qry = qry.split('"').join(''); // remove any quotes, just in case + + if (qry.search(/[0-9]/i) === -1) { + // its a word + for (const item of BibleReference.Books) { + if ( + item.name !== 'Unknown' && + (item.name.toLowerCase().indexOf(qry.toLowerCase()) > -1 || + item.abbreviation.toLowerCase().indexOf(qry.toLowerCase()) > -1) + ) { + words.push(prefix + item.name); + if (words.length > 2) { + break; + } + } + } + + for (const item of this.autocomplete) { + if (item.toLowerCase().indexOf(qry.toLowerCase()) > -1) { + words.push(prefix + item); + if (words.length > 6) { + break; + } + } + } + + this.dispatch(updateAutoCompleteAction(words)); + } else if (qry.search(/(H|G)[0-9]/i) !== -1) { + // its a strongs lookup + if (qry.substring(0, 1).toUpperCase() === 'H') { + const num = parseInt(qry.substr(1), 10); + for (let x = num; x < num + 10 && x < 8675; x++) { + words.push('H' + x); + } + } else if (qry.substring(0, 1).toUpperCase() === 'G') { + const num = parseInt(qry.substring(1), 10); + for (let x = num; x < num + 10 && x < 5625; x++) { + words.push('G' + x); + } + } + + this.dispatch(updateAutoCompleteAction(words)); + } } //#endregion @@ -139,11 +884,11 @@ export class AppService extends createStateService(reducer, initialState) { //#region Cards removeCard(card: CardItem) { - this.dispatch(AppActionFactory.newRemoveCard(card)); + this.dispatch(removeCardAction(card)); } moveCard(card: CardItem, direction: MoveDirection) { - this.dispatch(AppActionFactory.newMoveCard(card, direction)); + this.dispatch(moveCardAction(card, direction)); } async addCard(qry: string, nextToItem: CardItem = null) { @@ -151,7 +896,7 @@ export class AppService extends createStateService(reducer, initialState) { if (!card) { return; } - this.dispatch(AppActionFactory.newAddCard(card, nextToItem)); + this.dispatch(addCardAction(card, nextToItem)); } async updateCards(queries: IStorable) { @@ -162,7 +907,7 @@ export class AppService extends createStateService(reducer, initialState) { cards.push(card); } this.dispatch( - AppActionFactory.newUpdateCards({ + updateCardsAction({ type: queries.type, createdOn: queries.createdOn, value: cards, @@ -171,9 +916,7 @@ export class AppService extends createStateService(reducer, initialState) { } async clearCards() { - this.dispatch( - AppActionFactory.newClearCards() - ); + this.dispatch(clearCardsAction()); } private async getCardByQuery(qry: string, type?: CardType): Promise { @@ -243,62 +986,62 @@ export class AppService extends createStateService(reducer, initialState) { cards.push(await this.getCardByQuery(ref.qry, ref.type)); } - this.dispatch(AppActionFactory.newUpdateCards(new Storable(cards))); + this.dispatch(updateCardsAction(new Storable(cards))); } savePage(title: string) { - this.dispatch(AppActionFactory.newSavePage(title)); + this.dispatch(savePageAction(title)); } updateCurrentSavedPage() { - this.dispatch(AppActionFactory.newUpdateCurrentPage()); + this.dispatch(updateCurrentPageAction()); } updateSavedPages(savedPages: IStorable) { - this.dispatch(AppActionFactory.newUpdateSavedPages(savedPages)); + this.dispatch(updateSavedPagesAction(savedPages)); } updateSavedPage(savedPage: SavedPage) { - this.dispatch(AppActionFactory.newUpdateSavedPage(savedPage)); + this.dispatch(updateSavedPageAction(savedPage)); } removeSavedPage(savedPage: SavedPage) { - this.dispatch(AppActionFactory.newRemoveSavedPage(savedPage)); + this.dispatch(removeSavedPageAction(savedPage)); } moveSavedPageCard(savedPage: SavedPage, fromIndex: number, toIndex: number) { - this.dispatch(AppActionFactory.newMoveSavedPageCard(savedPage, fromIndex, toIndex)); + this.dispatch(moveSavedPageCardAction(savedPage, fromIndex, toIndex)); } addCardToSavedPage(pageId: string, card: CardItem) { - this.dispatch(AppActionFactory.newAddCardToSavedPage(card, pageId)); + this.dispatch(addCardToSavedPageAction(card, pageId)); } //#endregion //#region Settings - updateCardMergeStrategy(strategy: Overlap) { - this.dispatch(AppActionFactory.newUpdateCardMergeStrategy(strategy)); + updateSettings(settings: IStorable) { + this.dispatch(updateSettingsAction(settings)); } - changeCardFontFamily(cardFont: string) { - this.dispatch(AppActionFactory.newUpdateCardFontFamily(cardFont)); + updateCardMergeStrategy(strategy: Overlap) { + this.dispatch(updateCardMergeStrategyAction(strategy)); } changeCardFontSize(size: number) { - this.dispatch(AppActionFactory.newUpdateCardFontSize(size)); + this.dispatch(updateCardFontSizeAction(size)); } - updateSettings(settings: IStorable) { - this.dispatch(AppActionFactory.newUpdateSettings(settings)); + changeCardFontFamily(cardFont: string) { + this.dispatch(updateCardFontFamilyAction(cardFont)); } updateDisplaySettings(displaySettings: DisplaySettings) { const state = this.getState(); this.dispatch( - AppActionFactory.newUpdateSettings( + updateSettingsAction( new Storable({ ...state.settings.value, displaySettings, @@ -311,7 +1054,7 @@ export class AppService extends createStateService(reducer, initialState) { const state = this.getState(); this.dispatch( - AppActionFactory.newUpdateSettings( + updateSettingsAction( new Storable({ ...state.settings.value, pageSettings, @@ -325,23 +1068,23 @@ export class AppService extends createStateService(reducer, initialState) { //#region Notes findNotes(qry: string, nextToItem: CardItem = null) { - this.dispatch(AppActionFactory.newFindNotes(qry, nextToItem)); + this.dispatch(findNotesAction(qry, nextToItem)); } async getNote(noteId: string, nextToItem: CardItem = null) { - this.dispatch(AppActionFactory.newGetNote(noteId, nextToItem)); + this.dispatch(getNotesAction(noteId, nextToItem)); } updateNotes(notes: IStorable) { - this.dispatch(AppActionFactory.newUpdateNotes(notes)); + this.dispatch(updateNotesAction(notes)); } saveNote(note: NoteItem) { - this.dispatch(AppActionFactory.newSaveNote(note)); + this.dispatch(saveNoteAction(note)); } deleteNote(note: NoteItem) { - this.dispatch(AppActionFactory.newDeleteNote(note)); + this.dispatch(deleteNoteAction(note)); } //#endregion @@ -354,7 +1097,7 @@ export class AppService extends createStateService(reducer, initialState) { return; // nothing was returned. so an error occurred. } - this.dispatch(AppActionFactory.newAddCard(card, nextToItem)); + this.dispatch(addCardAction(card, nextToItem)); } async getStrongsCard(strongsNumber: string, dict: StrongsDictionary) { @@ -458,6 +1201,7 @@ export class AppService extends createStateService(reducer, initialState) { } return result as StrongsResult; } + //#endregion //#region Bible Passages @@ -468,13 +1212,13 @@ export class AppService extends createStateService(reducer, initialState) { return; // nothing was returned. so an error occurred. } - this.dispatch(AppActionFactory.newAddCard(card, nextToItem)); + this.dispatch(addCardAction(card, nextToItem)); } async updatePassage(oldCard: CardItem, ref: BibleReference) { const newCard = await this.composeBiblePassageCardItem(ref); - this.dispatch(AppActionFactory.newUpdateCard(newCard, oldCard)); + this.dispatch(updateCardAction(newCard, oldCard)); } private async composeBiblePassageCardItem(ref: BibleReference) { @@ -657,7 +1401,7 @@ export class AppService extends createStateService(reducer, initialState) { data: result, } as CardItem; - this.dispatch(AppActionFactory.newAddCard(card, nextToItem)); + this.dispatch(addCardAction(card, nextToItem)); } private async getWordsFromApi(qry: string): Promise { @@ -680,12 +1424,11 @@ export class AppService extends createStateService(reducer, initialState) { } if (!this.wordToStem.has(q)) { - this.dispatch({ - type: 'UPDATE_ERROR', - error: { + this.dispatch( + updateErrorAction({ msg: `Unable to find the word "${q}" in any passages.`, - }, - }); + }) + ); return; } @@ -717,23 +1460,21 @@ export class AppService extends createStateService(reducer, initialState) { // that is shared by all of them. IF not, we can just return those refs. if (results.length === 0) { if (excluded.length > 0) { - this.dispatch({ - type: 'UPDATE_ERROR', - error: { + this.dispatch( + updateErrorAction({ msg: `The ${excluded.length > 1 ? 'words' : 'word'} "${excluded.reduce((prev, curr, idx, arr) => { return `${prev}, ${curr}`; })}" ${excluded.length > 1 ? 'have' : 'has'} been excluded from search because it is too common.`, - }, - }); + }) + ); return; } - this.dispatch({ - type: 'UPDATE_ERROR', - error: { + this.dispatch( + updateErrorAction({ msg: `No passages found for query: ${qry}.`, - }, - }); + }) + ); return; } @@ -780,12 +1521,11 @@ export class AppService extends createStateService(reducer, initialState) { this.wordToStem.set(i.w, i.s); } } catch (err) { - this.dispatch({ - type: 'UPDATE_ERROR', - error: { + this.dispatch( + updateErrorAction({ msg: err, - }, - }); + }) + ); return; } } @@ -803,12 +1543,11 @@ export class AppService extends createStateService(reducer, initialState) { try { r = await this.http.get(url).toPromise(); } catch (err) { - this.dispatch({ - type: 'UPDATE_ERROR', - error: { + this.dispatch( + updateErrorAction({ msg: err, - }, - }); + }) + ); return; } // find the right word @@ -1112,70 +1851,4 @@ export class AppService extends createStateService(reducer, initialState) { } //#endregion - - //#region Auto Complete - - async getAutoComplete(keyword: string) { - if (!this.autocomplete) { - // if you have't populated the word list yet, do so... - const data = await this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`).toPromise(); - this.autocomplete = data.map((o) => o.w); - } - - let qry = keyword; - let prefix = ''; - const idx = qry.lastIndexOf(';'); - const words: string[] = []; - - if (idx > -1) { - qry = keyword.substr(idx + 1).trim(); - prefix = keyword.substr(0, idx).trim() + '; '; - } - - qry = qry.split('"').join(''); // remove any quotes, just in case - - if (qry.search(/[0-9]/i) === -1) { - // its a word - for (const item of BibleReference.Books) { - if ( - item.name !== 'Unknown' && - (item.name.toLowerCase().indexOf(qry.toLowerCase()) > -1 || - item.abbreviation.toLowerCase().indexOf(qry.toLowerCase()) > -1) - ) { - words.push(prefix + item.name); - if (words.length > 2) { - break; - } - } - } - - for (const item of this.autocomplete) { - if (item.toLowerCase().indexOf(qry.toLowerCase()) > -1) { - words.push(prefix + item); - if (words.length > 6) { - break; - } - } - } - - this.dispatch(AppActionFactory.newUpdateAutocomplete(words)); - } else if (qry.search(/(H|G)[0-9]/i) !== -1) { - // its a strongs lookup - if (qry.substr(0, 1).toUpperCase() === 'H') { - const num = parseInt(qry.substr(1), 10); - for (let x = num; x < num + 10 && x < 8675; x++) { - words.push('H' + x); - } - } else if (qry.substr(0, 1).toUpperCase() === 'G') { - const num = parseInt(qry.substr(1), 10); - for (let x = num; x < num + 10 && x < 5625; x++) { - words.push('G' + x); - } - } - - this.dispatch(AppActionFactory.newUpdateAutocomplete(words)); - } - } - - //#endregion } diff --git a/src/tsconfig.json b/src/tsconfig.json index f81bf877..3d1165e2 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -1,4 +1,3 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ { "compileOnSave": false, "compilerOptions": { From 1799c14fdb31136d79d9073ca7fa360d4d414094 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 12:09:38 -0500 Subject: [PATCH 05/20] enable string templates, fix resulting issues. --- .../add-to-page-modal/add-to-page-modal.component.html | 2 +- .../note/edit-modal/note-edit-modal.component.html | 1 - .../components/note/edit-modal/note-edit-modal.component.ts | 1 - .../components/saved-page-card/saved-page-card.component.ts | 6 +++--- .../app/components/strongs/card/strongs-card.component.html | 2 +- .../app/components/strongs/card/strongs-card.component.ts | 5 +++++ .../components/strongs/modal/strongs-modal.component.html | 2 +- .../app/components/strongs/modal/strongs-modal.component.ts | 4 +++- src/src/app/pages/search/search.page.html | 2 +- src/src/app/pages/search/search.page.ts | 4 ++++ src/tsconfig.json | 3 +++ 11 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html index 2708272e..e445b2ee 100644 --- a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html +++ b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html @@ -10,7 +10,7 @@ {{ page.title }} diff --git a/src/src/app/components/note/edit-modal/note-edit-modal.component.html b/src/src/app/components/note/edit-modal/note-edit-modal.component.html index 15763c3d..c89a21b5 100644 --- a/src/src/app/components/note/edit-modal/note-edit-modal.component.html +++ b/src/src/app/components/note/edit-modal/note-edit-modal.component.html @@ -15,7 +15,6 @@ diff --git a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts index 6a634a36..9525d958 100644 --- a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts +++ b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts @@ -23,7 +23,6 @@ export class NoteEditModalComponent { //#region Cross References visible = true; - selectable = true; removable = true; addOnBlur = true; readonly separatorKeysCodes: number[] = [ENTER, COMMA, SEMICOLON]; diff --git a/src/src/app/components/saved-page-card/saved-page-card.component.ts b/src/src/app/components/saved-page-card/saved-page-card.component.ts index a522d16e..36651d64 100644 --- a/src/src/app/components/saved-page-card/saved-page-card.component.ts +++ b/src/src/app/components/saved-page-card/saved-page-card.component.ts @@ -82,12 +82,12 @@ export class SavedPageCardComponent extends SubscriberBase { return ''; } - onRemoveCard(card: CardItem) { + onRemoveCard(reference: DataReference) { this.dialog .open(OkCancelModalComponent, { data: { title: 'Delete Card from Saved Page', - content: `Do you want to delete this card '${this.format(card)}' from the saved page '${ + content: `Do you want to delete this card '${this.format(reference)}' from the saved page '${ this.savedPage.title }?`, }, @@ -97,7 +97,7 @@ export class SavedPageCardComponent extends SubscriberBase { if (ds.ok) { this.appService.updateSavedPage({ ...this.savedPage, - queries: this.savedPage.queries.filter((o) => o !== card), + queries: this.savedPage.queries.filter((o) => o !== reference), }); this.snackBar.open(`${this.savedPage.title} has been updated!`, '', { duration: 3 * 1000, diff --git a/src/src/app/components/strongs/card/strongs-card.component.html b/src/src/app/components/strongs/card/strongs-card.component.html index 708f6252..d3139c0d 100644 --- a/src/src/app/components/strongs/card/strongs-card.component.html +++ b/src/src/app/components/strongs/card/strongs-card.component.html @@ -14,7 +14,7 @@
state.settings.value.cardIcons.strongs); diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.html b/src/src/app/components/strongs/modal/strongs-modal.component.html index 76577ebd..9a6968f5 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.html +++ b/src/src/app/components/strongs/modal/strongs-modal.component.html @@ -16,7 +16,7 @@
diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 858abdc2..2d2e2eed 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -4,6 +4,7 @@ import { Observable } from 'rxjs'; import { AppService } from 'src/app/services/app.service'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardItem } from 'src/app/models/card-state'; +import { StrongsResult } from 'src/app/models/strongs-state'; @Component({ selector: 'app-strongs-modal', @@ -14,6 +15,7 @@ import { CardItem } from 'src/app/models/card-state'; }) export class StrongsModalComponent { icon$: Observable; + strongsResult: StrongsResult; constructor( @Inject(MAT_DIALOG_DATA) public cardItem: CardItem, @@ -21,7 +23,7 @@ export class StrongsModalComponent { private appService: AppService ) { console.log(cardItem); - + this.strongsResult = cardItem.data as StrongsResult; this.icon$ = appService.select((state) => state.settings.value.cardIcons.strongs); } diff --git a/src/src/app/pages/search/search.page.html b/src/src/app/pages/search/search.page.html index 65b00ddc..68038019 100644 --- a/src/src/app/pages/search/search.page.html +++ b/src/src/app/pages/search/search.page.html @@ -16,7 +16,7 @@ #autoCompleteInput [formControl]="searchControl" [matAutocomplete]="auto" - (keyup.enter)="search($event.target.value)" + (keyup.enter)="searchWithTarget($event.target)" /> diff --git a/src/src/app/pages/search/search.page.ts b/src/src/app/pages/search/search.page.ts index 26625a6e..cb13e889 100644 --- a/src/src/app/pages/search/search.page.ts +++ b/src/src/app/pages/search/search.page.ts @@ -109,6 +109,10 @@ export class SearchPageComponent extends SubscriberBase implements OnInit { this.appService.removeCard(card); } + async searchWithTarget(target: EventTarget) { + const term = (target as HTMLInputElement).value; + await this.search(term); + } async search(search: string) { // clear search box. if (this.clearSearchAfterQuery) { diff --git a/src/tsconfig.json b/src/tsconfig.json index 3d1165e2..758302aa 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -14,5 +14,8 @@ "target": "es2022", "module": "ESNext", "lib": ["es2018", "dom"] + }, + "angularCompilerOptions": { + "strictTemplates": true, } } From 78accd12938e863b9e880bf19dfaaba7adc5509c Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 12:39:16 -0500 Subject: [PATCH 06/20] fix tests and weird angular compiler issues with app service. Also fix deprecated mat slider on change event --- src/cypress/tsconfig.json | 2 +- src/src/app/app.component.ts | 4 ++-- .../add-to-page-modal.component.ts | 2 +- src/src/app/components/card.component.ts | 2 +- .../note/edit-modal/note-edit-modal.component.ts | 2 +- src/src/app/components/note/note-card.component.ts | 12 ++++++------ .../page-edit-modal/page-edit-modal.component.ts | 2 +- .../components/passage/passage-card.component.ts | 4 ++-- .../saved-page-card/saved-page-card.component.ts | 2 +- .../components/settings/settings.component.html | 8 +------- .../app/components/settings/settings.component.ts | 7 +++---- .../strongs/card/strongs-card.component.ts | 2 +- .../strongs/modal/strongs-modal.component.ts | 2 +- .../verse-picker-modal.component.ts | 2 +- .../app/components/words/words-card.component.ts | 2 +- src/src/app/pages/notes-admin/notes-admin.page.ts | 6 +++--- .../saved-pages-admin/saved-pages-admin.page.ts | 6 +++--- src/src/app/pages/search/search.page.ts | 2 +- src/src/app/services/app-state-reducer.spec.ts | 3 ++- src/src/app/services/migration0to1.service.ts | 2 +- src/src/app/services/storage.service.ts | 2 +- src/tsconfig.app.json | 9 ++------- src/tsconfig.json | 5 +++-- src/tsconfig.spec.json | 14 +++----------- 24 files changed, 43 insertions(+), 61 deletions(-) diff --git a/src/cypress/tsconfig.json b/src/cypress/tsconfig.json index 79d78d7e..0bffa078 100644 --- a/src/cypress/tsconfig.json +++ b/src/cypress/tsconfig.json @@ -2,7 +2,7 @@ "extends": "../tsconfig.json", "include": ["**/*.ts"], "compilerOptions": { - "sourceMap": false, + "sourceMap": true, "types": ["cypress"] } } diff --git a/src/src/app/app.component.ts b/src/src/app/app.component.ts index 750af514..85151632 100644 --- a/src/src/app/app.component.ts +++ b/src/src/app/app.component.ts @@ -1,5 +1,4 @@ -import { Component, ViewChild, AfterViewInit, OnDestroy, ChangeDetectorRef } from '@angular/core'; -import { AppService } from './services/app.service'; +import { Component, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core'; import { NavService } from './services/nav.service'; import { StorageService } from './services/storage.service'; import { Observable } from 'rxjs'; @@ -10,6 +9,7 @@ import { SubscriberBase } from './common/subscriber-base'; import { MatSnackBar } from '@angular/material/snack-bar'; import { HelpModalComponent } from './components/help-modal/help-modal.component'; import { MatDialog } from '@angular/material/dialog'; +import { AppService } from './services/app.service'; @Component({ selector: 'app-root', diff --git a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts index e42fc5f6..8f9e5337 100644 --- a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts +++ b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts @@ -2,8 +2,8 @@ import { Component, Inject, ViewChild } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSelectionList } from '@angular/material/list'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { AppService } from '../../services/app.service'; import { CardItem } from '../../models/card-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-add-to-page-modal-modal', diff --git a/src/src/app/components/card.component.ts b/src/src/app/components/card.component.ts index 861cfd92..24223b4b 100644 --- a/src/src/app/components/card.component.ts +++ b/src/src/app/components/card.component.ts @@ -2,10 +2,10 @@ import { EventEmitter, Output, Input, ElementRef, Component } from '@angular/cor import { Observable } from 'rxjs'; import { MatDialog } from '@angular/material/dialog'; import { SubscriberBase } from '../common/subscriber-base'; -import { AppService } from 'src/app/services/app.service'; import { MoveDirection } from '../common/move-direction'; import { AddToPageModalComponent } from '../components/add-to-page-modal/add-to-page-modal.component'; import { CardItem } from '../models/card-state'; +import { AppService } from '../services/app.service'; @Component({ template: '', diff --git a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts index 9525d958..7cb751ee 100644 --- a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts +++ b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts @@ -8,8 +8,8 @@ import { MatChipInputEvent } from '@angular/material/chips'; import { UUID } from 'angular2-uuid'; import { NoteItem } from 'src/app/models/note-state'; -import { AppService } from 'src/app/services/app.service'; import { CardItem } from 'src/app/models/card-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-note-edit-modal', diff --git a/src/src/app/components/note/note-card.component.ts b/src/src/app/components/note/note-card.component.ts index 2cc5e608..a4d083ea 100644 --- a/src/src/app/components/note/note-card.component.ts +++ b/src/src/app/components/note/note-card.component.ts @@ -1,11 +1,11 @@ -import { Component, ViewChild, ElementRef, Input, OnInit } from '@angular/core'; +import { Component, ViewChild, ElementRef, Input } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { NoteEditModalComponent } from './edit-modal/note-edit-modal.component'; -import { CardComponent } from '../../components/card.component'; -import { AppService } from '../../services/app.service'; -import { BibleReference } from '../../common/bible-reference'; -import { NoteItem } from '../../models/note-state'; +import { CardComponent } from '../card.component'; +import { BibleReference } from 'src/app/common/bible-reference'; +import { NoteItem } from 'src/app/models/note-state'; +import { AppService } from 'src/app/services/app.service'; import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; +import { NoteEditModalComponent } from './edit-modal/note-edit-modal.component'; @Component({ selector: 'app-note-card', diff --git a/src/src/app/components/page-edit-modal/page-edit-modal.component.ts b/src/src/app/components/page-edit-modal/page-edit-modal.component.ts index a1614d0c..57b63766 100644 --- a/src/src/app/components/page-edit-modal/page-edit-modal.component.ts +++ b/src/src/app/components/page-edit-modal/page-edit-modal.component.ts @@ -1,8 +1,8 @@ import { Component, Inject } from '@angular/core'; import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { AppService } from '../../services/app.service'; import { SavedPage } from 'src/app/models/page-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-page-edit-modal', diff --git a/src/src/app/components/passage/passage-card.component.ts b/src/src/app/components/passage/passage-card.component.ts index 9f666162..a6d54deb 100644 --- a/src/src/app/components/passage/passage-card.component.ts +++ b/src/src/app/components/passage/passage-card.component.ts @@ -1,13 +1,13 @@ import { Component, OnInit, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { StrongsModalComponent } from '../strongs/modal/strongs-modal.component'; import { NoteItem } from 'src/app/models/note-state'; import { CardComponent } from 'src/app/components/card.component'; import { BibleReference, Overlap } from 'src/app/common/bible-reference'; -import { AppService } from 'src/app/services/app.service'; import { Paragraph, BiblePassageResult } from 'src/app/models/passage-state'; import { CardItem } from 'src/app/models/card-state'; import { isNullOrUndefined } from 'src/app/common/helpers'; +import { AppService } from 'src/app/services/app.service'; +import { StrongsModalComponent } from '../strongs/modal/strongs-modal.component'; @Component({ selector: 'app-passage-card', diff --git a/src/src/app/components/saved-page-card/saved-page-card.component.ts b/src/src/app/components/saved-page-card/saved-page-card.component.ts index 36651d64..62fcd476 100644 --- a/src/src/app/components/saved-page-card/saved-page-card.component.ts +++ b/src/src/app/components/saved-page-card/saved-page-card.component.ts @@ -1,7 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { MatDialog } from '@angular/material/dialog'; -import { AppService } from '../../services/app.service'; import { Observable } from 'rxjs'; import { SavedPage } from 'src/app/models/page-state'; import { CardIcons, CardItem, CardType, DataReference } from 'src/app/models/card-state'; @@ -12,6 +11,7 @@ import { HashTable } from 'src/app/common/hashtable'; import { SubscriberBase } from 'src/app/common/subscriber-base'; import { getFromCardCache } from 'src/app/common/card-cache-operations'; import { NoteItem } from 'src/app/models/note-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-saved-page-card', diff --git a/src/src/app/components/settings/settings.component.html b/src/src/app/components/settings/settings.component.html index 34a07edc..e594720c 100644 --- a/src/src/app/components/settings/settings.component.html +++ b/src/src/app/components/settings/settings.component.html @@ -122,13 +122,7 @@ > diff --git a/src/src/app/components/settings/settings.component.ts b/src/src/app/components/settings/settings.component.ts index bce8375a..1c42b4dc 100644 --- a/src/src/app/components/settings/settings.component.ts +++ b/src/src/app/components/settings/settings.component.ts @@ -1,7 +1,6 @@ import { Component } from '@angular/core'; import { MatSlideToggleChange } from '@angular/material/slide-toggle'; import { MatSelectChange } from '@angular/material/select'; -import { MatSliderChange } from '@angular/material/slider'; import { MatSnackBar } from '@angular/material/snack-bar'; import { MatDialog } from '@angular/material/dialog'; @@ -15,13 +14,13 @@ import { DisplaySettings } from 'src/app/models/app-state'; import { CardFonts } from 'src/app/constants'; import { NavService } from 'src/app/services/nav.service'; -import { AppService } from 'src/app/services/app.service'; import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; import { PageEditModalComponent } from 'src/app/components/page-edit-modal/page-edit-modal.component'; import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; import { SavedPage } from 'src/app/models/page-state'; import { Overlap } from 'src/app/common/bible-reference'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-settings', @@ -155,8 +154,8 @@ export class SettingsComponent extends SubscriberBase { this.appService.changeCardFontFamily(evt.value); } - cardFontSizeChanged(evt: MatSliderChange) { - this.appService.changeCardFontSize(evt.value); + cardFontSizeChanged(evt: number) { + this.appService.changeCardFontSize(evt); } //#endregion diff --git a/src/src/app/components/strongs/card/strongs-card.component.ts b/src/src/app/components/strongs/card/strongs-card.component.ts index a80d89f4..fed30a64 100644 --- a/src/src/app/components/strongs/card/strongs-card.component.ts +++ b/src/src/app/components/strongs/card/strongs-card.component.ts @@ -2,8 +2,8 @@ import { Component, ElementRef, ViewChild, OnInit, ChangeDetectionStrategy } fro import { MatDialog } from '@angular/material/dialog'; import { StrongsModalComponent } from '../modal/strongs-modal.component'; import { CardComponent } from 'src/app/components/card.component'; -import { AppService } from 'src/app/services/app.service'; import { BibleReference } from 'src/app/common/bible-reference'; +import { AppService } from 'src/app/services/app.service'; import { StrongsResult } from 'src/app/models/strongs-state'; @Component({ diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 2d2e2eed..2243b1d0 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -1,10 +1,10 @@ import { Component, Inject, ChangeDetectionStrategy } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { Observable } from 'rxjs'; -import { AppService } from 'src/app/services/app.service'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardItem } from 'src/app/models/card-state'; import { StrongsResult } from 'src/app/models/strongs-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-strongs-modal', diff --git a/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts b/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts index 38a21729..0a25f739 100644 --- a/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts +++ b/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts @@ -1,7 +1,7 @@ import { Component } from '@angular/core'; -import { AppService } from 'src/app/services/app.service'; import { MatDialogRef } from '@angular/material/dialog'; import { Book, BibleReference } from 'src/app/common/bible-reference'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-verse-picker', diff --git a/src/src/app/components/words/words-card.component.ts b/src/src/app/components/words/words-card.component.ts index a1d7a5c9..f6b738e9 100644 --- a/src/src/app/components/words/words-card.component.ts +++ b/src/src/app/components/words/words-card.component.ts @@ -2,8 +2,8 @@ import { Component, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angu import { MatDialog } from '@angular/material/dialog'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardComponent } from 'src/app/components/card.component'; -import { AppService } from 'src/app/services/app.service'; import { WordLookupResult } from 'src/app/models/words-state'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-words-card', diff --git a/src/src/app/pages/notes-admin/notes-admin.page.ts b/src/src/app/pages/notes-admin/notes-admin.page.ts index 4390d34a..a30ce40b 100644 --- a/src/src/app/pages/notes-admin/notes-admin.page.ts +++ b/src/src/app/pages/notes-admin/notes-admin.page.ts @@ -1,10 +1,10 @@ import { Component, OnInit } from '@angular/core'; -import { AppService } from '../../services/app.service'; -import { NavService } from '../../services/nav.service'; -import { SubscriberBase } from '../../common/subscriber-base'; import { CardItem, CardType } from 'src/app/models/card-state'; import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; import { MatDialog } from '@angular/material/dialog'; +import { SubscriberBase } from 'src/app/common/subscriber-base'; +import { AppService } from 'src/app/services/app.service'; +import { NavService } from 'src/app/services/nav.service'; @Component({ selector: 'app-notes-admin', diff --git a/src/src/app/pages/saved-pages-admin/saved-pages-admin.page.ts b/src/src/app/pages/saved-pages-admin/saved-pages-admin.page.ts index 9278e61d..0cad090b 100644 --- a/src/src/app/pages/saved-pages-admin/saved-pages-admin.page.ts +++ b/src/src/app/pages/saved-pages-admin/saved-pages-admin.page.ts @@ -1,7 +1,7 @@ import { Component, OnInit } from '@angular/core'; -import { AppService } from '../../services/app.service'; -import { NavService } from '../../services/nav.service'; -import { SubscriberBase } from '../../common/subscriber-base'; +import { SubscriberBase } from 'src/app/common/subscriber-base'; +import { AppService } from 'src/app/services/app.service'; +import { NavService } from 'src/app/services/nav.service'; @Component({ selector: 'app-saved-pages-admin', diff --git a/src/src/app/pages/search/search.page.ts b/src/src/app/pages/search/search.page.ts index cb13e889..97e22a66 100644 --- a/src/src/app/pages/search/search.page.ts +++ b/src/src/app/pages/search/search.page.ts @@ -3,12 +3,12 @@ import { ActivatedRoute, Router, NavigationEnd } from '@angular/router'; import { UntypedFormControl } from '@angular/forms'; import { MatDialog } from '@angular/material/dialog'; import { MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; -import { AppService } from '../../services/app.service'; import { NavService } from '../../services/nav.service'; import { SubscriberBase } from '../../common/subscriber-base'; import { VersePickerModalComponent } from '../../components/verse-picker-modal/verse-picker-modal.component'; import { CardItem, CardType } from 'src/app/models/card-state'; import { getFromCardCache } from 'src/app/common/card-cache-operations'; +import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-search-page', diff --git a/src/src/app/services/app-state-reducer.spec.ts b/src/src/app/services/app-state-reducer.spec.ts index 4aec8096..e51e6411 100644 --- a/src/src/app/services/app-state-reducer.spec.ts +++ b/src/src/app/services/app-state-reducer.spec.ts @@ -20,6 +20,7 @@ import { removeSavedPageAction, saveNoteAction, savePageAction, + setUserAction, updateAutoCompleteAction, updateCardAction, updateCardFontFamilyAction, @@ -545,7 +546,7 @@ describe('AppService Reducer', () => { providerId: 'asdfasf', }; - const testState = newUserAction(user).handle(preState); + const testState = setUserAction(user).handle(preState); expect(testState.user).toBe(user, 'Should set the user'); }); diff --git a/src/src/app/services/migration0to1.service.ts b/src/src/app/services/migration0to1.service.ts index de328fc9..b09df020 100644 --- a/src/src/app/services/migration0to1.service.ts +++ b/src/src/app/services/migration0to1.service.ts @@ -2,13 +2,13 @@ import { Injectable } from '@angular/core'; import { AngularFireDatabase, AngularFireObject } from '@angular/fire/compat/database'; import { DataSnapshot } from '@angular/fire/compat/database/interfaces'; import { UUID } from 'angular2-uuid'; -import { AppService } from './app.service'; import { Overlap } from '../common/bible-reference'; import { Settings, User } from '../models/app-state'; import { SavedPage } from '../models/page-state'; import { CardType, DataReference } from '../models/card-state'; import { StorageService } from './storage.service'; import { Storable, StorableType } from '../common/storable'; +import { AppService } from './app.service'; @Injectable({ providedIn: 'root', diff --git a/src/src/app/services/storage.service.ts b/src/src/app/services/storage.service.ts index ee82a1a1..76002cd2 100644 --- a/src/src/app/services/storage.service.ts +++ b/src/src/app/services/storage.service.ts @@ -5,7 +5,6 @@ import { DataSnapshot } from '@angular/fire/compat/database/interfaces'; import { SubscriberBase } from '../common/subscriber-base'; import { IStorable, StorableType, UserVersion } from '../common/storable'; -import { AppService } from './app.service'; import { MigrationVersion0to1 } from './migration0to1.service'; import { User, Settings, AppState } from '../models/app-state'; @@ -14,6 +13,7 @@ import { SavedPage } from '../models/page-state'; import { isNullOrUndefined } from '../common/helpers'; import { DataReference } from '../models/card-state'; import { createSelector } from 'reselect'; +import { AppService } from './app.service'; /** * This class handles all the storage needs of the application. It handles both diff --git a/src/tsconfig.app.json b/src/tsconfig.app.json index 82d91dc4..19e4aa33 100644 --- a/src/tsconfig.app.json +++ b/src/tsconfig.app.json @@ -5,11 +5,6 @@ "outDir": "./out-tsc/app", "types": [] }, - "files": [ - "src/main.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.d.ts" - ] + "files": ["src/main.ts", "src/polyfills.ts"], + "include": ["src/**/*.d.ts"], } diff --git a/src/tsconfig.json b/src/tsconfig.json index 758302aa..1b20e0c3 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -16,6 +16,7 @@ "lib": ["es2018", "dom"] }, "angularCompilerOptions": { - "strictTemplates": true, - } + "strictTemplates": true + }, + "include": ["src/**/*.ts"] } diff --git a/src/tsconfig.spec.json b/src/tsconfig.spec.json index 092345b0..669344f8 100644 --- a/src/tsconfig.spec.json +++ b/src/tsconfig.spec.json @@ -3,16 +3,8 @@ "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] + "types": ["jasmine"] }, - "files": [ - "src/test.ts", - "src/polyfills.ts" - ], - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] + "files": ["src/test.ts", "src/polyfills.ts"], + "include": ["src/**/*.spec.ts", "src/**/*.d.ts"] } From c181fb45044fbfdf1658e59f8fefe70d426ca635 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 12:55:33 -0500 Subject: [PATCH 07/20] fix deprecated methods in storage fix deprecated topromise, use lastValueFrom instead. --- src/src/app/services/app.service.ts | 25 +++++------ src/src/app/services/storage.service.ts | 55 +++++++++++++------------ 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index 842d151a..dbf3b202 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -37,6 +37,7 @@ import { StrongsResult, } from '../models/strongs-state'; import { WordToStem, IndexResult, WordLookupResult } from '../models/words-state'; +import { lastValueFrom } from 'rxjs'; const initialState: AppState = { user: null, @@ -820,7 +821,7 @@ export class AppService extends createStateService(appReducer, initialState) { async getAutoComplete(keyword: string) { if (!this.autocomplete) { // if you have't populated the word list yet, do so... - const data = await this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`).toPromise(); + const data = await lastValueFrom(this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`)); this.autocomplete = data.map((o) => o.w); } @@ -900,8 +901,8 @@ export class AppService extends createStateService(appReducer, initialState) { } async updateCards(queries: IStorable) { - const cards: CardItem[] = []; const values = queries.value ?? []; + const cards: CardItem[] = []; for (const q of values) { const card = await this.getCardByQuery(q.qry.trim(), q.type); cards.push(card); @@ -1147,7 +1148,7 @@ export class AppService extends createStateService(appReducer, initialState) { let url = `${dict}${Math.ceil(sn / 100)}.json`; try { - const d = await this.http.get(`${this.dataPath}/strongs/${url}`).toPromise(); + const d = await lastValueFrom(this.http.get(`${this.dataPath}/strongs/${url}`)); result.def = d.find((el) => el.i === result.prefix + result.sn); } catch (err) { this.dispatchError(`Unable to retrieve Strong's Data for ${result.prefix}${result.sn}`); @@ -1155,7 +1156,7 @@ export class AppService extends createStateService(appReducer, initialState) { } try { - const d = await this.http.get(`${this.dataPath}/strongscr/cr${url}`).toPromise(); + const d = await lastValueFrom(this.http.get(`${this.dataPath}/strongscr/cr${url}`)); result.crossrefs = d.find((o) => o.id.toUpperCase() === result.prefix + result.sn); } catch (err) { @@ -1170,7 +1171,7 @@ export class AppService extends createStateService(appReducer, initialState) { // rmac is a two get process. // first, get the rmac code. try { - const rmacCrossReferences = await this.http.get(url).toPromise(); + const rmacCrossReferences = await lastValueFrom(this.http.get(url)); // deal with RMAC const referencesForThisStrongsNumber = rmacCrossReferences.filter((el, i) => { @@ -1191,7 +1192,7 @@ export class AppService extends createStateService(appReducer, initialState) { url = `${this.dataPath}/rmac/r-${result.rmaccode.substring(0, 1)}.json`; try { - const rmacDefinitions = await this.http.get(url).toPromise(); + const rmacDefinitions = await lastValueFrom(this.http.get(url)); result.rmac = rmacDefinitions.find((o) => o.id.toLowerCase() === result.rmaccode); } catch (err) { this.dispatchError('Unable to retrieve RMAC'); @@ -1250,9 +1251,9 @@ export class AppService extends createStateService(appReducer, initialState) { for (let i = Number(section.start.chapter); i <= Number(section.end.chapter); i++) { try { - const d = await this.http - .get(`${this.dataPath}/bibles/kjv_strongs/${section.book.bookNumber}-${i}.json`) - .toPromise(); + const d = await lastValueFrom( + this.http.get(`${this.dataPath}/bibles/kjv_strongs/${section.book.bookNumber}-${i}.json`) + ); chapters.push(d); } catch (err) { this.dispatchError(`Unable to retrieve bible passage ${BibleReference.toString(section)}.`); @@ -1327,7 +1328,7 @@ export class AppService extends createStateService(appReducer, initialState) { private async convertToParagraphPassages(chapters: BiblePassage[], section: Section) { // get the paragraphs the first time if you haven't already. if (!this.paragraphs) { - this.paragraphs = await this.http.get>(`${this.dataPath}/bibles/paras.json`).toPromise(); + this.paragraphs = await lastValueFrom(this.http.get>(`${this.dataPath}/bibles/paras.json`)); } const passages: BibleParagraphPassage[] = []; @@ -1514,7 +1515,7 @@ export class AppService extends createStateService(appReducer, initialState) { private async getStemWordIndex() { this.wordToStem = new Map(); try { - const r = await this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`).toPromise(); + const r = await lastValueFrom(this.http.get(`${this.dataPath}/index/word_to_stem_idx.json`)); // find the right word for (const i of r) { @@ -1541,7 +1542,7 @@ export class AppService extends createStateService(appReducer, initialState) { let r: IndexResult[]; try { - r = await this.http.get(url).toPromise(); + r = await lastValueFrom(this.http.get(url)); } catch (err) { this.dispatch( updateErrorAction({ diff --git a/src/src/app/services/storage.service.ts b/src/src/app/services/storage.service.ts index 76002cd2..be4150de 100644 --- a/src/src/app/services/storage.service.ts +++ b/src/src/app/services/storage.service.ts @@ -14,6 +14,7 @@ import { isNullOrUndefined } from '../common/helpers'; import { DataReference } from '../models/card-state'; import { createSelector } from 'reselect'; import { AppService } from './app.service'; +import { lastValueFrom } from 'rxjs'; /** * This class handles all the storage needs of the application. It handles both @@ -186,9 +187,9 @@ export class StorageService extends SubscriberBase { } private async getFromLocal(path: string, action: (storable: IStorable) => void) { - const hasStorable = await this.local.has(path).toPromise(); + const hasStorable = await lastValueFrom(this.local.has(path)); if (hasStorable) { - const localData = (await this.local.get(path).toPromise()) as IStorable; + const localData = (await lastValueFrom(this.local.get(path))) as IStorable; // console.log('Data recieved from local store', localData); action(localData); } @@ -232,14 +233,14 @@ export class StorageService extends SubscriberBase { // console.log('Data saved to local store', data); // update local - this.local.set(this.savedPagesPath, data).subscribe( - () => { - // nop - }, - // error - () => { - this.appService.dispatchError(`Something went wrong and the Page wasn't saved. :(`); - } + this.addSubscription( + this.local.set(this.savedPagesPath, data).subscribe({ + next: () => {}, + complete: () => {}, + error: () => { + this.appService.dispatchError(`Something went wrong and the Page wasn't saved. :(`); + }, + }) ); // update remote @@ -258,14 +259,14 @@ export class StorageService extends SubscriberBase { // console.log('Data saved to local store', data); // update local - this.local.set(this.noteItemsPath, data).subscribe( - () => { - // nop - }, - // error - () => { - this.appService.dispatchError(`Something went wrong and the Note wasn't saved. :(`); - } + this.addSubscription( + this.local.set(this.noteItemsPath, data).subscribe({ + next: () => {}, + complete: () => {}, + error: () => { + this.appService.dispatchError(`Something went wrong and the Note wasn't saved. :(`); + }, + }) ); // update remote @@ -289,15 +290,15 @@ export class StorageService extends SubscriberBase { } // update local - this.local.set(this.cardsPath, v.currentCards).subscribe({ - next: () => { - // nop - }, - // error - error: () => { - this.appService.dispatchError(`Something went wrong and the current cards weren't saved. :(`); - }, - }); + this.addSubscription( + this.local.set(this.cardsPath, v.currentCards).subscribe({ + next: () => {}, + complete: () => {}, + error: () => { + this.appService.dispatchError(`Something went wrong and the current cards weren't saved. :(`); + }, + }) + ); // since you updated the local variable above, this remote update will // get picked up by the remote subscription below. From fe382a411307901ed415951046d8cd681284b7ad Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Fri, 8 Mar 2024 13:34:47 -0500 Subject: [PATCH 08/20] Fix linting errors: * add redux toolkit so you can use configureStore * remove usage of withServerTransition and use APP_ID instead * change copy to use material service, remove html copy --- src/.eslintrc.json | 33 ++++---- src/package-lock.json | 80 ++++++++++++++++++- src/package.json | 8 +- src/src/app/app.module.ts | 7 +- src/src/app/common/state-service.ts | 13 ++- src/src/app/components/card.component.ts | 31 ++++--- .../edit-modal/note-edit-modal.component.ts | 5 -- .../components/note/note-card.component.ts | 13 ++- .../passage/passage-card.component.ts | 13 ++- .../strongs/card/strongs-card.component.ts | 17 ++-- .../components/words/words-card.component.ts | 13 ++- src/src/app/services/app.service.ts | 2 +- src/src/app/services/storage.service.ts | 16 ++-- 13 files changed, 175 insertions(+), 76 deletions(-) diff --git a/src/.eslintrc.json b/src/.eslintrc.json index e6a80eef..eaf27277 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -1,23 +1,23 @@ { "root": true, - "ignorePatterns": [ - "projects/**/*" - ], + "ignorePatterns": ["projects/**/*"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "sourceType": "module", + "project": "./tsconfig.json" // <-- Point to your project's "tsconfig.json" or create a new one. + }, "overrides": [ { - "files": [ - "*.ts" - ], + "files": ["*.ts"], "parserOptions": { - "project": [ - "tsconfig.json", - "e2e/tsconfig.json" - ], + "project": ["tsconfig.json", "e2e/tsconfig.json"], "createDefaultProgram": true }, "extends": [ "plugin:@angular-eslint/recommended", - "plugin:@angular-eslint/template/process-inline-templates" + "plugin:@angular-eslint/template/process-inline-templates", + "plugin:deprecation/recommended" ], "rules": { "@angular-eslint/directive-selector": [ @@ -39,14 +39,9 @@ } }, { - "files": [ - "*.html" - ], - "extends": [ - "plugin:@angular-eslint/template/recommended" - ], - "rules": { - } + "files": ["*.html"], + "extends": ["plugin:@angular-eslint/template/recommended"], + "rules": {} } ] } diff --git a/src/package-lock.json b/src/package-lock.json index 42370b68..ba1a685a 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -24,6 +24,7 @@ "@capacitor/ios": "^5.7.0", "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", + "@reduxjs/toolkit": "^2.2.1", "angular2-uuid": "^1.1.1", "component": "^1.1.0", "firebase": "^10.8.0", @@ -51,9 +52,10 @@ "@types/jasminewd2": "~2.0.13", "@types/node": "^20.11.21", "@typescript-eslint/eslint-plugin": "7.1.0", - "@typescript-eslint/parser": "7.1.0", + "@typescript-eslint/parser": "^7.1.0", "cypress": "latest", "eslint": "^8.57.0", + "eslint-plugin-deprecation": "^2.0.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", "inquirer": "^9.2.15", @@ -6378,6 +6380,29 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@reduxjs/toolkit": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.1.tgz", + "integrity": "sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==", + "dependencies": { + "immer": "^10.0.3", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reselect": "^5.0.1" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18", + "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-redux": { + "optional": true + } + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", @@ -12616,6 +12641,21 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-plugin-deprecation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz", + "integrity": "sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^6.0.0", + "tslib": "^2.3.1", + "tsutils": "^3.21.0" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "typescript": "^4.2.4 || ^5.0.0" + } + }, "node_modules/eslint-scope": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.0.tgz", @@ -15602,6 +15642,15 @@ "node": ">=0.10.0" } }, + "node_modules/immer": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", + "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, "node_modules/immutable": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", @@ -21754,6 +21803,14 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" }, + "node_modules/redux-thunk": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", + "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", + "peerDependencies": { + "redux": "^5.0.0" + } + }, "node_modules/reflect-metadata": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", @@ -24197,6 +24254,27 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tuf-js": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.0.tgz", diff --git a/src/package.json b/src/package.json index 3842c889..63ee4ece 100644 --- a/src/package.json +++ b/src/package.json @@ -32,6 +32,7 @@ "@capacitor/ios": "^5.7.0", "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", + "@reduxjs/toolkit": "^2.2.1", "angular2-uuid": "^1.1.1", "component": "^1.1.0", "firebase": "^10.8.0", @@ -59,8 +60,10 @@ "@types/jasminewd2": "~2.0.13", "@types/node": "^20.11.21", "@typescript-eslint/eslint-plugin": "7.1.0", - "@typescript-eslint/parser": "7.1.0", + "@typescript-eslint/parser": "^7.1.0", + "cypress": "latest", "eslint": "^8.57.0", + "eslint-plugin-deprecation": "^2.0.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", "inquirer": "^9.2.15", @@ -74,8 +77,7 @@ "karma-jasmine-html-reporter": "^2.1.0", "open": "^10.0.4", "ts-node": "~10.9.2", - "typescript": "~5.3.3", - "cypress": "latest" + "typescript": "~5.3.3" }, "browserslist": [ "last 1 Chrome version", diff --git a/src/src/app/app.module.ts b/src/src/app/app.module.ts index 8c4a30f0..023e4874 100644 --- a/src/src/app/app.module.ts +++ b/src/src/app/app.module.ts @@ -1,7 +1,7 @@ import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { HttpClientModule } from '@angular/common/http'; import { BrowserModule } from '@angular/platform-browser'; -import { NgModule } from '@angular/core'; +import { APP_ID, NgModule } from '@angular/core'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MARKED_OPTIONS, MarkdownModule } from 'ngx-markdown'; @@ -66,7 +66,6 @@ import { NoteEditModalComponent } from './components/note/edit-modal/note-edit-m import { VersePickerModalComponent } from './components/verse-picker-modal/verse-picker-modal.component'; import { AddToPageModalComponent } from './components/add-to-page-modal/add-to-page-modal.component'; - import { MarkedOptions, MarkedRenderer } from 'ngx-markdown'; // function that returns `MarkedOptions` with renderer override @@ -107,7 +106,7 @@ export function markedOptionsFactory(): MarkedOptions { OkCancelModalComponent, ], imports: [ - BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }), + BrowserModule, HttpClientModule, ReactiveFormsModule, @@ -156,7 +155,7 @@ export function markedOptionsFactory(): MarkedOptions { MatFormFieldModule, ClipboardModule, ], - providers: [], + providers: [{ provide: APP_ID, useValue: 'ng-cli-universal' }], bootstrap: [AppComponent], }) export class AppModule {} diff --git a/src/src/app/common/state-service.ts b/src/src/app/common/state-service.ts index cc95da97..3fac9256 100644 --- a/src/src/app/common/state-service.ts +++ b/src/src/app/common/state-service.ts @@ -1,4 +1,5 @@ -import { Store, createStore } from 'redux'; +import { Store } from 'redux'; +import { configureStore } from '@reduxjs/toolkit'; import { BehaviorSubject, Observable } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; @@ -16,11 +17,10 @@ class StateService { private readonly internalState$: BehaviorSubject; protected constructor(reducer: (state: TState, action: TAction) => TState, initialState: TState) { - this.store = createStore( - reducer, - initialState as any, // this cast is required by Redux's typings, it should have no impact - undefined // in the future, we may want to add some middleware to the Redux stores. that goes here! - ); + this.store = configureStore({ + reducer: reducer, + preloadedState: initialState, + }); this.internalState$ = new BehaviorSubject(initialState as TState); @@ -129,7 +129,6 @@ export function createStateService( return stateServiceClass as IfImmutable>; } - export interface IStateAction { type: TAction; handle: (state: TState) => TState; diff --git a/src/src/app/components/card.component.ts b/src/src/app/components/card.component.ts index 24223b4b..cf5673b2 100644 --- a/src/src/app/components/card.component.ts +++ b/src/src/app/components/card.component.ts @@ -6,6 +6,7 @@ import { MoveDirection } from '../common/move-direction'; import { AddToPageModalComponent } from '../components/add-to-page-modal/add-to-page-modal.component'; import { CardItem } from '../models/card-state'; import { AppService } from '../services/app.service'; +import { Clipboard } from '@angular/cdk/clipboard'; @Component({ template: '', @@ -19,19 +20,29 @@ export class CardComponent extends SubscriberBase { icon$: Observable; - constructor(protected elementRef: ElementRef, protected dialog: MatDialog, protected appService: AppService) { + constructor( + protected elementRef: ElementRef, + protected dialog: MatDialog, + protected appService: AppService, + protected clipboard: Clipboard + ) { super(); } - protected copyToClip(text: string, html: string) { - function listener(e: ClipboardEvent) { - e.clipboardData.setData('text/html', html); - e.clipboardData.setData('text/plain', text); - e.preventDefault(); - } - document.addEventListener('copy', listener); - document.execCommand('copy'); - document.removeEventListener('copy', listener); + protected copyToClip(text: string) { + this.clipboard.copy(text); + const pending = this.clipboard.beginCopy(text); + let remainingAttempts = 3; + const attempt = () => { + const result = pending.copy(); + if (!result && --remainingAttempts) { + setTimeout(attempt); + } else { + // Remember to destroy when you're done! + pending.destroy(); + } + }; + attempt(); } close(ev) { diff --git a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts index 7cb751ee..c71317d5 100644 --- a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts +++ b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts @@ -53,16 +53,11 @@ export class NoteEditModalComponent { //#region cross refs add(event: MatChipInputEvent): void { - const input = event.input; const value = event.value; if ((value || '').trim()) { this.references.push(value.trim()); } - - if (input) { - input.value = ''; - } } remove(reference: string): void { diff --git a/src/src/app/components/note/note-card.component.ts b/src/src/app/components/note/note-card.component.ts index a4d083ea..2789ca5b 100644 --- a/src/src/app/components/note/note-card.component.ts +++ b/src/src/app/components/note/note-card.component.ts @@ -1,5 +1,6 @@ import { Component, ViewChild, ElementRef, Input } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { Clipboard } from '@angular/cdk/clipboard'; import { CardComponent } from '../card.component'; import { BibleReference } from 'src/app/common/bible-reference'; import { NoteItem } from 'src/app/models/note-state'; @@ -22,16 +23,20 @@ export class NoteCardComponent extends CardComponent { return this.cardItem.data as NoteItem; } - constructor(protected elementRef: ElementRef, protected appService: AppService, public dialog: MatDialog) { - super(elementRef, dialog, appService); + constructor( + protected elementRef: ElementRef, + protected appService: AppService, + protected clipboard: Clipboard, + public dialog: MatDialog + ) { + super(elementRef, dialog, appService, clipboard); this.icon$ = appService.select((state) => state.settings.value.cardIcons.note); } copy() { - const html = this.noteElement.nativeElement.innerHTML; const text = this.noteElement.nativeElement.innerText; - this.copyToClip(text, html); + this.copyToClip(text); } private xrefs: BibleReference[]; diff --git a/src/src/app/components/passage/passage-card.component.ts b/src/src/app/components/passage/passage-card.component.ts index a6d54deb..5bfa1aca 100644 --- a/src/src/app/components/passage/passage-card.component.ts +++ b/src/src/app/components/passage/passage-card.component.ts @@ -1,5 +1,6 @@ import { Component, OnInit, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { Clipboard } from '@angular/cdk/clipboard'; import { NoteItem } from 'src/app/models/note-state'; import { CardComponent } from 'src/app/components/card.component'; import { BibleReference, Overlap } from 'src/app/common/bible-reference'; @@ -40,8 +41,13 @@ export class PassageCardComponent extends CardComponent implements OnInit { return this.cardItem.data as BiblePassageResult; } - constructor(protected elementRef: ElementRef, protected appService: AppService, public dialog: MatDialog) { - super(elementRef, dialog, appService); + constructor( + protected elementRef: ElementRef, + protected appService: AppService, + protected clipboard: Clipboard, + public dialog: MatDialog + ) { + super(elementRef, dialog, appService, clipboard); this.icon$ = appService.select((state) => state.settings.value.cardIcons.passage); } @@ -54,9 +60,8 @@ export class PassageCardComponent extends CardComponent implements OnInit { } copy() { - const html = this.passageElement.nativeElement.innerHTML + ` - ${this.ref.toString()}`; const text = this.passageElement.nativeElement.innerText + ` - ${this.ref.toString()}`; - this.copyToClip(text, html); + this.copyToClip(text); } next() { diff --git a/src/src/app/components/strongs/card/strongs-card.component.ts b/src/src/app/components/strongs/card/strongs-card.component.ts index fed30a64..57ef73ec 100644 --- a/src/src/app/components/strongs/card/strongs-card.component.ts +++ b/src/src/app/components/strongs/card/strongs-card.component.ts @@ -1,5 +1,6 @@ -import { Component, ElementRef, ViewChild, OnInit, ChangeDetectionStrategy } from '@angular/core'; +import { Component, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { Clipboard } from '@angular/cdk/clipboard'; import { StrongsModalComponent } from '../modal/strongs-modal.component'; import { CardComponent } from 'src/app/components/card.component'; import { BibleReference } from 'src/app/common/bible-reference'; @@ -17,12 +18,17 @@ export class StrongsCardComponent extends CardComponent { asModal = false; @ViewChild('strongs') strongsElement: ElementRef; - get strongsResult(){ + get strongsResult() { return this.cardItem.data as StrongsResult; } - constructor(protected elementRef: ElementRef, protected appService: AppService, protected dialog: MatDialog) { - super(elementRef, dialog, appService); + constructor( + protected elementRef: ElementRef, + protected appService: AppService, + protected clipboard: Clipboard, + protected dialog: MatDialog + ) { + super(elementRef, dialog, appService, clipboard); this.icon$ = appService.select((state) => state.settings.value.cardIcons.strongs); this.addSubscription( this.appService.state$.subscribe((state) => { @@ -32,9 +38,8 @@ export class StrongsCardComponent extends CardComponent { } copy() { - const html = this.strongsElement.nativeElement.innerHTML; const text = this.strongsElement.nativeElement.innerText; - this.copyToClip(text, html); + this.copyToClip(text); } async openStrongs(q: string) { diff --git a/src/src/app/components/words/words-card.component.ts b/src/src/app/components/words/words-card.component.ts index f6b738e9..aa3e21b6 100644 --- a/src/src/app/components/words/words-card.component.ts +++ b/src/src/app/components/words/words-card.component.ts @@ -1,5 +1,6 @@ import { Component, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; +import { Clipboard } from '@angular/cdk/clipboard'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardComponent } from 'src/app/components/card.component'; import { WordLookupResult } from 'src/app/models/words-state'; @@ -19,8 +20,13 @@ export class WordsCardComponent extends CardComponent { return this.cardItem.data as WordLookupResult; } - constructor(protected elementRef: ElementRef, protected appService: AppService, public dialog: MatDialog) { - super(elementRef, dialog, appService); + constructor( + protected elementRef: ElementRef, + protected appService: AppService, + protected clipboard: Clipboard, + public dialog: MatDialog + ) { + super(elementRef, dialog, appService, clipboard); this.icon$ = appService.select((state) => state.settings.value.cardIcons.words); } @@ -29,9 +35,8 @@ export class WordsCardComponent extends CardComponent { BibleReference.makePassageFromReferenceKey(ref) ); - const html = refs.map((ref) => `${ref}`).join(', '); const text = refs.join(', '); - this.copyToClip(text, html); + this.copyToClip(text); } makePassage(p: string) { diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index dbf3b202..4006055b 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -865,7 +865,7 @@ export class AppService extends createStateService(appReducer, initialState) { } else if (qry.search(/(H|G)[0-9]/i) !== -1) { // its a strongs lookup if (qry.substring(0, 1).toUpperCase() === 'H') { - const num = parseInt(qry.substr(1), 10); + const num = parseInt(qry.substring(1), 10); for (let x = num; x < num + 10 && x < 8675; x++) { words.push('H' + x); } diff --git a/src/src/app/services/storage.service.ts b/src/src/app/services/storage.service.ts index be4150de..d5178aea 100644 --- a/src/src/app/services/storage.service.ts +++ b/src/src/app/services/storage.service.ts @@ -207,14 +207,14 @@ export class StorageService extends SubscriberBase { // console.log('Data saved to local store', data); // update local - this.local.set(this.settingsPath, data).subscribe( - () => { - // nop - }, - // error - () => { - this.appService.dispatchError(`Something went wrong and the Settings weren't saved. :(`); - } + this.addSubscription( + this.local.set(this.settingsPath, data).subscribe({ + next: () => {}, + complete: () => {}, + error: () => { + this.appService.dispatchError(`Something went wrong and the Settings weren't saved. :(`); + }, + }) ); // update remote From f35b5d490258d530fbd533f897e3298c1ee985ed Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 13:05:45 -0500 Subject: [PATCH 09/20] remove redux. you don't need it cause you're pretty much just using RXJS. --- src/package-lock.json | 1187 +---------------- src/package.json | 2 - src/src/app/common/state-service.ts | 168 +-- src/src/app/components/card.component.ts | 2 +- .../strongs/modal/strongs-modal.component.ts | 1 - src/src/app/services/app.service.ts | 102 +- 6 files changed, 137 insertions(+), 1325 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index ba1a685a..2991966b 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -24,13 +24,11 @@ "@capacitor/ios": "^5.7.0", "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", - "@reduxjs/toolkit": "^2.2.1", "angular2-uuid": "^1.1.1", "component": "^1.1.0", "firebase": "^10.8.0", "marked": "^9.0.0", "ngx-markdown": "^17.1.1", - "redux": "^5.0.1", "reselect": "^5.1.0", "rxjs": "^7.8.1", "tslib": "^2.6.2", @@ -3210,70 +3208,6 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", - "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", - "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", - "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", - "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@esbuild/darwin-arm64": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", @@ -3290,294 +3224,6 @@ "node": ">=12" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", - "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", - "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", - "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", - "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", - "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", - "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", - "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", - "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", - "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", - "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", - "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", - "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", - "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", - "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", - "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", - "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", - "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", - "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -3767,9 +3413,9 @@ "integrity": "sha512-iRP+QKI2+oz3UAh4nPEq14CsEjrjD6a5+fuypjScisAh9kXKFvdJOZJDwk7kikLvWVLGEs9+kIUS4LPQV7VZVw==" }, "node_modules/@firebase/app": { - "version": "0.9.27", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.27.tgz", - "integrity": "sha512-p2Dvl1ge4kRsyK5+wWcmdAIE9MSwZ0pDKAYB51LZgZuz6wciUZk4E1yAEdkfQlRxuHehn+Ol9WP5Qk2XQZiHGg==", + "version": "0.9.28", + "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.28.tgz", + "integrity": "sha512-MS0+EtNixrwJbVDs5Bt/lhUhzeWGUtUoP6X+zYZck5GAZwI5g4F91noVA9oIXlFlpn6Q1xIbiaHA2GwGk7/7Ag==", "dependencies": { "@firebase/component": "0.6.5", "@firebase/logger": "0.4.0", @@ -3819,11 +3465,11 @@ "integrity": "sha512-uwSUj32Mlubybw7tedRzR24RP8M8JUVR3NPiMk3/Z4bCmgEKTlQBwMXrehDAZ2wF+TsBq0SN1c6ema71U/JPyQ==" }, "node_modules/@firebase/app-compat": { - "version": "0.2.27", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.27.tgz", - "integrity": "sha512-SYlqocfUDKPHR6MSFC8hree0BTiWFu5o8wbf6zFlYXyG41w7TcHp4wJi4H/EL5V6cM4kxwruXTJtqXX/fRAZtw==", + "version": "0.2.28", + "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.28.tgz", + "integrity": "sha512-Mr2NbeM1Oaayuw5unUAMzt+7/MN+e2uklT1l87D+ZLJl2UvhZAZmMt74GjEI9N3sDYKMeszSbszBqtJ1fGVafQ==", "dependencies": { - "@firebase/app": "0.9.27", + "@firebase/app": "0.9.28", "@firebase/component": "0.6.5", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.4", @@ -3836,15 +3482,15 @@ "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" }, "node_modules/@firebase/auth": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.6.0.tgz", - "integrity": "sha512-Qhl35eJTV6BwvuueTPCY6x8kUlYyzALtjp/Ws0X3fw3AnjVVfuVb7oQ3Xh5VPVfMFhaIuUAd1KXwcAuIklkSDw==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.6.1.tgz", + "integrity": "sha512-oOuQVOxtxKr+kTTqEkkI2qXIeGbkNLpA8FzO030LF4KXmMcETqsPaIqw7Aw1Y4Zl82l1qpZtpc4vN4Da2qZdfQ==", "dependencies": { "@firebase/component": "0.6.5", "@firebase/logger": "0.4.0", "@firebase/util": "1.9.4", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.3" }, "peerDependencies": { "@firebase/app": "0.x", @@ -3857,25 +3503,25 @@ } }, "node_modules/@firebase/auth-compat": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.2.tgz", - "integrity": "sha512-pRgje5BPCNR1vXyvGOVXwOHtv88A2WooXfklI8sV7/jWi03ExFqNfpJT26GUo/oD39NoKJ3Kt6rD5gVvdV7lMw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.5.3.tgz", + "integrity": "sha512-2pVtVEvu8P7SF6jSPfLPKWUClQFj+StqAZ0fD/uQ6mv8DyWn7AuuANFEu7Pv96JPcaL6Gy9jC5dFqjpptjqSRA==", "dependencies": { - "@firebase/auth": "1.6.0", + "@firebase/auth": "1.6.1", "@firebase/auth-types": "0.12.0", "@firebase/component": "0.6.5", "@firebase/util": "1.9.4", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.3" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "node_modules/@firebase/auth-compat/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -3898,9 +3544,9 @@ } }, "node_modules/@firebase/auth/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -3954,9 +3600,9 @@ } }, "node_modules/@firebase/firestore": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.4.2.tgz", - "integrity": "sha512-YaX6ypa/RzU6OkxzUQlpSxwhOIWdTraCNz7sMsbaSEjjl/pj/QvX6TqjkdWGzuBYh2S6rz7ErhDO0g39oZZw/g==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.4.3.tgz", + "integrity": "sha512-Ix61zbeuTsHf0WFbk6+67n89Vzd9M8MMTdnz7c7z+BRE3BS5Vuc3gX5ZcHFjqPkQJ7rpLB1egHsYe4Przp5C2g==", "dependencies": { "@firebase/component": "0.6.5", "@firebase/logger": "0.4.0", @@ -3965,7 +3611,7 @@ "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.3" }, "engines": { "node": ">=10.10.0" @@ -3975,12 +3621,12 @@ } }, "node_modules/@firebase/firestore-compat": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.25.tgz", - "integrity": "sha512-+xI7WmsgZCBhMn/+uhDKcg+lsOUJ9FJyt5PGTzkFPbCsozWfeQZ7eVnfPh0rMkUOf0yIQ924RIe04gwvEIbcoQ==", + "version": "0.3.26", + "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.26.tgz", + "integrity": "sha512-dNrKiH5Cn6ItANV9nJI2Y0msKBj/skO7skDlRo/BUSQE1DKbNzumxpJEz+PK/PV1nTegnRgVvs47gpQeVWXtYQ==", "dependencies": { "@firebase/component": "0.6.5", - "@firebase/firestore": "4.4.2", + "@firebase/firestore": "4.4.3", "@firebase/firestore-types": "3.0.0", "@firebase/util": "1.9.4", "tslib": "^2.1.0" @@ -3999,9 +3645,9 @@ } }, "node_modules/@firebase/firestore/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -4010,9 +3656,9 @@ } }, "node_modules/@firebase/functions": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.1.tgz", - "integrity": "sha512-3uUa1hB79Gmy6E1gHTfzoHeZolBeHc/I/n3+lOCDe6BOos9AHmzRjKygcFE/7VA2FJjitCE0K+OHI6+OuoY8fQ==", + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/@firebase/functions/-/functions-0.11.2.tgz", + "integrity": "sha512-2NULTYOZbu0rXczwfYdqQH0w1FmmYrKjTy1YPQSHLCAkMBdfewoKmVm4Lyo2vRn0H9ZndciLY7NszKDFt9MKCQ==", "dependencies": { "@firebase/app-check-interop-types": "0.3.0", "@firebase/auth-interop-types": "0.2.1", @@ -4020,19 +3666,19 @@ "@firebase/messaging-interop-types": "0.2.0", "@firebase/util": "1.9.4", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.3" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/functions-compat": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.7.tgz", - "integrity": "sha512-uXe6Kmku5lNogp3OpPBcOJbSvnaCOn+YxS3zlXKNU6Q/NLwcvO3RY1zwYyctCos2RemEw3KEQ7YdzcECXjHWLw==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@firebase/functions-compat/-/functions-compat-0.3.8.tgz", + "integrity": "sha512-VDHSw6UOu8RxfgAY/q8e+Jn+9Fh60Fc28yck0yfMsi2e0BiWgonIMWkFspFGGLgOJebTHl+hc+9v91rhzU6xlg==", "dependencies": { "@firebase/component": "0.6.5", - "@firebase/functions": "0.11.1", + "@firebase/functions": "0.11.2", "@firebase/functions-types": "0.6.0", "@firebase/util": "1.9.4", "tslib": "^2.1.0" @@ -4047,9 +3693,9 @@ "integrity": "sha512-hfEw5VJtgWXIRf92ImLkgENqpL6IWpYaXVYiRkFY1jJ9+6tIhWM7IzzwbevwIIud/jaxKVdRzD7QBWfPmkwCYw==" }, "node_modules/@firebase/functions/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -4210,26 +3856,26 @@ "integrity": "sha512-RtEH4vdcbXZuZWRZbIRmQVBNsE7VDQpet2qFvq6vwKLBIQRQR5Kh58M4ok3A3US8Sr3rubYnaGqZSurCwI8uMA==" }, "node_modules/@firebase/storage": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.1.tgz", - "integrity": "sha512-KJ5NV7FUh54TeTlEjdkTTX60ciCKOp9EqlbLnpdcXUYRJg0Z4810TXbilPc1z7fTIG4iPjtdi95bGE9n4dBX8A==", + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@firebase/storage/-/storage-0.12.2.tgz", + "integrity": "sha512-MzanOBcxDx9oOwDaDPMuiYxd6CxcN1xZm+os5uNE3C1itbRKLhM9rzpODDKWzcbnHHFtXk3Q3lsK/d3Xa1WYYw==", "dependencies": { "@firebase/component": "0.6.5", "@firebase/util": "1.9.4", "tslib": "^2.1.0", - "undici": "5.26.5" + "undici": "5.28.3" }, "peerDependencies": { "@firebase/app": "0.x" } }, "node_modules/@firebase/storage-compat": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.4.tgz", - "integrity": "sha512-Y0m5e2gS/wB9Ioth2X/Sgz76vcxvqgQrCmfa9qwhss/N31kxY2Gks6Frv0nrE18AjVfcSmcfDitqUwxcMOTRSg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@firebase/storage-compat/-/storage-compat-0.3.5.tgz", + "integrity": "sha512-5dJXfY5NxCF5NAk4dLvJqC+m6cgcf0Fr29nrMHwhwI34pBheQq2PdRZqALsqZCES9dnHTuFNlqGQDpLr+Ph4rw==", "dependencies": { "@firebase/component": "0.6.5", - "@firebase/storage": "0.12.1", + "@firebase/storage": "0.12.2", "@firebase/storage-types": "0.8.0", "@firebase/util": "1.9.4", "tslib": "^2.1.0" @@ -4248,9 +3894,9 @@ } }, "node_modules/@firebase/storage/node_modules/undici": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.26.5.tgz", - "integrity": "sha512-cSb4bPFd5qgR7qr2jYAi0hlX9n5YKK2ONKkLFkxl+v/9BvC0sOpZjBHDBSXc5lWAf5ty9oZdRXytBIHzgUcerw==", + "version": "5.28.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.3.tgz", + "integrity": "sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==", "dependencies": { "@fastify/busboy": "^2.0.0" }, @@ -6113,150 +5759,6 @@ "node": ">= 10" } }, - "node_modules/@nx/nx-darwin-x64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", - "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-freebsd-x64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", - "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", - "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", - "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-arm64-musl": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", - "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-gnu": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", - "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-linux-x64-musl": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", - "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", - "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nx/nx-win32-x64-msvc": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", - "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@opentelemetry/api": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", @@ -6380,55 +5882,6 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, - "node_modules/@reduxjs/toolkit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-2.2.1.tgz", - "integrity": "sha512-8CREoqJovQW/5I4yvvijm/emUiCCmcs4Ev4XPWd4mizSO+dD3g5G6w34QK5AGeNrSH7qM8Fl66j4vuV7dpOdkw==", - "dependencies": { - "immer": "^10.0.3", - "redux": "^5.0.1", - "redux-thunk": "^3.1.0", - "reselect": "^5.0.1" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.1.3 || ^9.0.0" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz", - "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz", - "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", @@ -6442,136 +5895,6 @@ "darwin" ] }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz", - "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz", - "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz", - "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz", - "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz", - "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz", - "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz", - "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz", - "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz", - "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz", - "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@schematics/angular": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.2.1.tgz", @@ -13625,25 +12948,25 @@ } }, "node_modules/firebase": { - "version": "10.8.0", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.8.0.tgz", - "integrity": "sha512-UJpC24vw8JFuHEOQyArBGKTUd7+kohLISCzHyn0M/prP0KOTx2io1eyLliEid330QqnWI7FOlPxoU97qecCSfQ==", + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.8.1.tgz", + "integrity": "sha512-4B2jzhU/aumfKL446MG41/T5+t+9d9urf5XGrjC0HRQUm4Ya/amV48HBchnje69ExaJP5f2WxO9OX3wh9ee4wA==", "dependencies": { "@firebase/analytics": "0.10.1", "@firebase/analytics-compat": "0.2.7", - "@firebase/app": "0.9.27", + "@firebase/app": "0.9.28", "@firebase/app-check": "0.8.2", "@firebase/app-check-compat": "0.3.9", - "@firebase/app-compat": "0.2.27", + "@firebase/app-compat": "0.2.28", "@firebase/app-types": "0.9.0", - "@firebase/auth": "1.6.0", - "@firebase/auth-compat": "0.5.2", + "@firebase/auth": "1.6.1", + "@firebase/auth-compat": "0.5.3", "@firebase/database": "1.0.3", "@firebase/database-compat": "1.0.3", - "@firebase/firestore": "4.4.2", - "@firebase/firestore-compat": "0.3.25", - "@firebase/functions": "0.11.1", - "@firebase/functions-compat": "0.3.7", + "@firebase/firestore": "4.4.3", + "@firebase/firestore-compat": "0.3.26", + "@firebase/functions": "0.11.2", + "@firebase/functions-compat": "0.3.8", "@firebase/installations": "0.6.5", "@firebase/installations-compat": "0.2.5", "@firebase/messaging": "0.12.6", @@ -13652,8 +12975,8 @@ "@firebase/performance-compat": "0.2.5", "@firebase/remote-config": "0.4.5", "@firebase/remote-config-compat": "0.2.5", - "@firebase/storage": "0.12.1", - "@firebase/storage-compat": "0.3.4", + "@firebase/storage": "0.12.2", + "@firebase/storage-compat": "0.3.5", "@firebase/util": "1.9.4" } }, @@ -15642,15 +14965,6 @@ "node": ">=0.10.0" } }, - "node_modules/immer": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.0.3.tgz", - "integrity": "sha512-pwupu3eWfouuaowscykeckFmVTpqbzW+rXFCX8rQLkZzM9ftBmU/++Ra+o+L27mz03zJTlyV4UUr+fdKNffo4A==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/immutable": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", @@ -21798,19 +21112,6 @@ "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", "integrity": "sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg==" }, - "node_modules/redux": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==" - }, - "node_modules/redux-thunk": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-3.1.0.tgz", - "integrity": "sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==", - "peerDependencies": { - "redux": "^5.0.0" - } - }, "node_modules/reflect-metadata": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", @@ -24963,70 +24264,6 @@ } } }, - "node_modules/vite/node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/@esbuild/darwin-arm64": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", @@ -25043,294 +24280,6 @@ "node": ">=12" } }, - "node_modules/vite/node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/vite/node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", diff --git a/src/package.json b/src/package.json index 63ee4ece..1a3a68db 100644 --- a/src/package.json +++ b/src/package.json @@ -32,13 +32,11 @@ "@capacitor/ios": "^5.7.0", "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", - "@reduxjs/toolkit": "^2.2.1", "angular2-uuid": "^1.1.1", "component": "^1.1.0", "firebase": "^10.8.0", "marked": "^9.0.0", "ngx-markdown": "^17.1.1", - "redux": "^5.0.1", "reselect": "^5.1.0", "rxjs": "^7.8.1", "tslib": "^2.6.2", diff --git a/src/src/app/common/state-service.ts b/src/src/app/common/state-service.ts index 3fac9256..5dc4de74 100644 --- a/src/src/app/common/state-service.ts +++ b/src/src/app/common/state-service.ts @@ -1,103 +1,6 @@ -import { Store } from 'redux'; -import { configureStore } from '@reduxjs/toolkit'; - import { BehaviorSubject, Observable } from 'rxjs'; import { distinctUntilChanged, map } from 'rxjs/operators'; -/** - * A base class from which to extend a service to provide predictable state to components. You should not extend this - * class directly; instead, use the {@link createStateService} function to create a base class specific to your service. - * @see {@link createStateService} - */ -class StateService { - /** An observable that provides the entire state managed by the service. */ - public readonly state$: Observable; - - private readonly store: Store; - private readonly internalState$: BehaviorSubject; - - protected constructor(reducer: (state: TState, action: TAction) => TState, initialState: TState) { - this.store = configureStore({ - reducer: reducer, - preloadedState: initialState, - }); - - this.internalState$ = new BehaviorSubject(initialState as TState); - - // BehaviorSubject.asObservable returns a new object, so hold onto it to avoid unnecessary allocations - this.state$ = this.internalState$.asObservable(); - - this.store.subscribe(() => this.internalState$.next(this.store.getState())); - } - - /** - * Creates an observable that provides data derived from the state managed by the service. - * @param selector A selector that maps the state to the derived data. - */ - public select(selector: (state: TState) => TDerived): Observable { - return this.state$.pipe(map(selector), distinctUntilChanged()); - } - - /** - * Gets the current state managed by the service. **You should only use the current state to validate operations or - * help to construct actions to be dispatched.** Try not to expose any state retrieved using this method outside the - * derived service class. - */ - protected getState(): TState { - return this.internalState$.value; - } - - /** - * Dispatches an action to the underlying Redux store. - * @param action The action to dispatch. - */ - protected dispatch(action: TAction) { - this.store.dispatch(action); - } -} - -/** - * Creates a deeply-immutable type from the provided type. Objects' properties will be marked as `readonly`, array types - * will be replaced with {@link ReadonlyArray}, {@link Map} types will be replaced with {@link ReadonlyMap}, and - * {@link Set} types will be replaced with {@link ReadonlySet}. - */ -export type Immutable = T extends undefined | null | boolean | string | number - ? T - : T extends Array - ? ImmutableArray - : T extends Map - ? ImmutableMap - : T extends Set - ? ImmutableSet - : { readonly [N in keyof T]: Immutable }; - -interface ImmutableArray extends ReadonlyArray> {} -interface ImmutableMap extends ReadonlyMap, Immutable> {} -interface ImmutableSet extends ReadonlySet> {} - -// The below type definition is simpler, but it only works with TypeScript 3.7 and above. Swap this in when we upgrade! - -// export type Immutable = T extends undefined | null | boolean | string | number -// ? T -// : T extends Array -// ? ReadonlyArray> -// : T extends Map -// ? ReadonlyMap, Immutable> -// : T extends Set -// ? ReadonlySet> -// : { readonly [N in keyof T]: Immutable }; - -type IfEquals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? A : B; -type IfImmutable = IfEquals< - TState, - { readonly [K in keyof TState]: Immutable }, - TImmutable, - TMutable ->; - -// eslint-disable-next-line -type YourStateTypeNeedsToBeImmutable = {}; - /** * Creates a base class from which to extend a service to provide predictable state to components. * @@ -116,20 +19,75 @@ type YourStateTypeNeedsToBeImmutable = {}; * @param reducer A function that takes the previous state and the dispatched action and returns the new state. * @param initialState The initial state of the service. */ -export function createStateService( - reducer: (state: TState, action: TAction) => TState, - initialState: TState -) { - const stateServiceClass = class extends StateService { +export function createReducingService(initialState: TState) { + const stateServiceClass = class extends ReducingService { constructor() { - super(reducer, initialState); + super(initialState); } }; return stateServiceClass as IfImmutable>; } -export interface IStateAction { - type: TAction; +export interface IReducingAction { handle: (state: TState) => TState; } + +/** + * Creates a deeply-immutable type from the provided type. Objects' properties will be marked as `readonly`, array types + * will be replaced with {@link ReadonlyArray}, {@link Map} types will be replaced with {@link ReadonlyMap}, and + * {@link Set} types will be replaced with {@link ReadonlySet}. + */ +export type Immutable = T extends undefined | null | boolean | string | number + ? T + : T extends Array + ? ReadonlyArray> + : T extends Map + ? ReadonlyMap, Immutable> + : T extends Set + ? ReadonlySet> + : { readonly [N in keyof T]: Immutable }; + +type IfEquals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? A : B; +type IfImmutable = IfEquals< + TState, + { readonly [K in keyof TState]: Immutable }, + TImmutable, + TMutable +>; + +// eslint-disable-next-line +type YourStateTypeNeedsToBeImmutable = {}; + +class ReducingService { + private internalState$: BehaviorSubject; + + constructor(private initialState: TState) { + this.internalState$ = new BehaviorSubject(initialState); + } + + // expose as observable. + public get state$() { + return this.internalState$.asObservable(); + } + + protected dispatch(action: IReducingAction) { + this.internalState$.next(action.handle(this.internalState$.value)); + } + + /** + * Gets the current state managed by the service. **You should only use the current state to validate operations or + * help to construct actions to be dispatched.** Try not to expose any state retrieved using this method outside the + * derived service class. + */ + protected getState(): TState { + return this.internalState$.value; + } + /** + * Creates an observable that provides data derived from the state managed by the service. + * @param selector A selector that maps the state to the derived data. + */ + public select(selector: (state: TState) => TDerived): Observable { + return this.internalState$.pipe(map(selector), distinctUntilChanged()); + } +} diff --git a/src/src/app/components/card.component.ts b/src/src/app/components/card.component.ts index cf5673b2..d70cb669 100644 --- a/src/src/app/components/card.component.ts +++ b/src/src/app/components/card.component.ts @@ -36,7 +36,7 @@ export class CardComponent extends SubscriberBase { const attempt = () => { const result = pending.copy(); if (!result && --remainingAttempts) { - setTimeout(attempt); + setTimeout(attempt, 10); } else { // Remember to destroy when you're done! pending.destroy(); diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 2243b1d0..115a65a1 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -22,7 +22,6 @@ export class StrongsModalComponent { public dialogRef: MatDialogRef, private appService: AppService ) { - console.log(cardItem); this.strongsResult = cardItem.data as StrongsResult; this.icon$ = appService.select((state) => state.settings.value.cardIcons.strongs); } diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index 4006055b..64174934 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -1,20 +1,16 @@ -import { AngularFireDatabase } from '@angular/fire/compat/database'; import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; -import { StorageMap } from '@ngx-pwa/local-storage'; - import { UUID } from 'angular2-uuid'; import { HashTable } from '../common/hashtable'; import { MoveDirection } from '../common/move-direction'; -import { IStateAction } from '../common/state-service'; +import { IReducingAction, createReducingService } from '../common/state-service'; import { IStorable, Storable, StorableType } from '../common/storable'; import { mergeCardList } from '../common/card-operations'; import { updateInCardCache, removeFromCardCache, getFromCardCache } from '../common/card-cache-operations'; import { moveItem, moveItemUpOrDown } from '../common/array-operations'; import { Section, BibleReference, Overlap } from '../common/bible-reference'; -import { createStateService } from '../common/state-service'; import { SavedPage } from '../models/page-state'; import { CardType, CardItem, DataReference } from '../models/card-state'; @@ -88,7 +84,7 @@ const initialState: AppState = { }, }; -interface AppAction extends IStateAction {} +interface AppAction extends IReducingAction {} export function getNewestStorable(candidate: IStorable, incumbant: IStorable): IStorable { // if the candidate is null, then return the state. @@ -105,19 +101,10 @@ export function getNewestStorable(candidate: IStorable, incumbant: IStorab return incumbant; } -function appReducer(state: AppState, action: IStateAction): AppState { - if (state === undefined || action.handle === undefined) { - return initialState; - } - return action.handle(state); -} - //#region Saved Pages -const savePageActionType = 'SAVE_PAGE'; export const savePageAction = (title: string): AppAction => { return { - type: savePageActionType, handle(state: AppState) { const savedPages = new Storable([ ...(state.savedPages ? state.savedPages.value : []), @@ -134,10 +121,8 @@ export const savePageAction = (title: string): AppAction => { }; }; -const updateCurrentPageActionType = 'UPDATE_CURRENT_PAGE'; export const updateCurrentPageAction = (): AppAction => { return { - type: updateCurrentPageActionType, handle(state: AppState) { const current = { id: state.currentSavedPage.id, @@ -161,10 +146,8 @@ export const updateCurrentPageAction = (): AppAction => { }; }; -const updateSavedPagesActionType = 'UPDATE_SAVED_PAGES'; export const updateSavedPagesAction = (oldSavedPages: IStorable): AppAction => { return { - type: updateSavedPagesActionType, handle(state: AppState) { const newSavedPages = getNewestStorable(oldSavedPages, state.savedPages); @@ -192,10 +175,8 @@ export const updateSavedPagesAction = (oldSavedPages: IStorable { return { - type: updateSavedPageActionType, handle(state: AppState) { const newSavedPages = new Storable( state.savedPages.value.map((o) => { @@ -212,10 +193,8 @@ export const updateSavedPageAction = (savedPage: SavedPage): AppAction => { }; }; -const removeSavedPageActionType = 'REMOVE_SAVED_PAGE'; export const removeSavedPageAction = (savedPage: SavedPage): AppAction => { return { - type: removeSavedPageActionType, handle(state: AppState) { const savedPages = new Storable(state.savedPages.value.filter((o) => o.id !== savedPage.id)); const item = getNewestStorable(savedPages, state.savedPages); @@ -229,10 +208,8 @@ export const removeSavedPageAction = (savedPage: SavedPage): AppAction => { }; }; -const moveSavedPageCardActionType = 'MOVE_SAVED_PAGE_CARD'; export const moveSavedPageCardAction = (oldSavedPage: SavedPage, fromIndex: number, toIndex: number): AppAction => { return { - type: moveSavedPageCardActionType, handle(state: AppState) { const queries = moveItem(oldSavedPage.queries, fromIndex, toIndex); const savedPage = { @@ -245,10 +222,8 @@ export const moveSavedPageCardAction = (oldSavedPage: SavedPage, fromIndex: numb }; }; -const addCardToSavedPageActionType = 'ADD_CARD_TO_SAVED_PAGE'; export const addCardToSavedPageAction = (card: CardItem, pageId: string): AppAction => { return { - type: addCardToSavedPageActionType, handle(state: AppState) { const savedPages = new Storable([ ...(state.savedPages ? state.savedPages.value : []).map((o) => { @@ -277,10 +252,8 @@ export const addCardToSavedPageAction = (card: CardItem, pageId: string): AppAct //#region Cards -const addCardActionType = 'ADD_CARD'; export const addCardAction = (card: CardItem, nextToItem: CardItem): AppAction => { return { - type: addCardActionType, handle(state: AppState) { let cards = []; @@ -313,10 +286,8 @@ export const addCardAction = (card: CardItem, nextToItem: CardItem): AppAction = }; }; -const updateCardActionType = 'UPDATE_CARD'; export const updateCardAction = (newCard: CardItem, oldCard: CardItem): AppAction => { return { - type: updateCardActionType, handle(state: AppState) { return { ...state, @@ -334,10 +305,8 @@ export const updateCardAction = (newCard: CardItem, oldCard: CardItem): AppActio }; }; -const removeCardActionType = 'REMOVE_CARD'; export const removeCardAction = (card: CardItem): AppAction => { return { - type: removeCardActionType, handle(state: AppState) { // potentially remove card from a saved page. const currentSavedPage = @@ -371,10 +340,8 @@ export const removeCardAction = (card: CardItem): AppAction => { }; }; -const moveCardActionType = 'MOVE_CARD'; export const moveCardAction = (card: CardItem, direction: MoveDirection): AppAction => { return { - type: moveCardActionType, handle(state: AppState) { const cards = moveItemUpOrDown(state.currentCards.value, card, direction); @@ -386,10 +353,8 @@ export const moveCardAction = (card: CardItem, direction: MoveDirection): AppAct }; }; -const updateCardsActionType = 'UPDATE_CARDS'; export const updateCardsAction = (cards: IStorable): AppAction => { return { - type: savePageActionType, handle(state: AppState) { let cardCache = { ...state.cardCache }; for (const card of cards.value) { @@ -404,10 +369,8 @@ export const updateCardsAction = (cards: IStorable): AppAction => { }; }; -const clearCardsActionType = 'CLEAR_CARDS'; export const clearCardsAction = (): AppAction => { return { - type: clearCardsActionType, handle(state: AppState) { return { ...state, @@ -421,10 +384,8 @@ export const clearCardsAction = (): AppAction => { //#region General -const updateErrorActionType = 'UPDATE_ERROR'; export const updateErrorAction = (error: Error): AppAction => { return { - type: updateErrorActionType, handle(state: AppState) { return { ...state, @@ -434,10 +395,8 @@ export const updateErrorAction = (error: Error): AppAction => { }; }; -const setUserActionType = 'SET_USER'; export const setUserAction = (user: User): AppAction => { return { - type: setUserActionType, handle(state: AppState) { return { ...state, @@ -447,10 +406,8 @@ export const setUserAction = (user: User): AppAction => { }; }; -const updateAutoCompleteActionType = 'UPDATE_AUTOCOMPLETE'; export const updateAutoCompleteAction = (words: string[]): AppAction => { return { - type: updateAutoCompleteActionType, handle(state: AppState) { return { ...state, @@ -464,10 +421,8 @@ export const updateAutoCompleteAction = (words: string[]): AppAction => { //#region Settings -const updateSettingsActionType = 'UPDATE_SETTINGS'; export const updateSettingsAction = (settings: IStorable): AppAction => { return { - type: updateSettingsActionType, handle(state: AppState) { const item = getNewestStorable(settings, state.settings); @@ -479,10 +434,8 @@ export const updateSettingsAction = (settings: IStorable): AppAction = }; }; -const updateCardMergeStrategyActionType = 'UPDATE_CARD_MERGE_STRATEGY'; export const updateCardMergeStrategyAction = (mergeStrategy: Overlap): AppAction => { return { - type: updateCardMergeStrategyActionType, handle(state: AppState) { const settings = new Storable({ ...state.settings.value, @@ -496,10 +449,8 @@ export const updateCardMergeStrategyAction = (mergeStrategy: Overlap): AppAction }; }; -const updateCardFontSizeActionType = 'UPDATE_CARD_FONT_SIZE'; export const updateCardFontSizeAction = (cardFontSize: number): AppAction => { return { - type: updateCardFontSizeActionType, handle(state: AppState) { const settings = new Storable({ ...state.settings.value, @@ -514,10 +465,8 @@ export const updateCardFontSizeAction = (cardFontSize: number): AppAction => { }; }; -const updateCardFontFamilyActionType = 'UPDATE_CARD_FONT_FAMILY'; export const updateCardFontFamilyAction = (cardFontFamily: string): AppAction => { return { - type: updateCardFontFamilyActionType, handle(state: AppState) { const settings = new Storable({ ...state.settings.value, @@ -536,10 +485,8 @@ export const updateCardFontFamilyAction = (cardFontFamily: string): AppAction => //#region Notes -const findNotesActionType = 'FIND_NOTES'; export const findNotesAction = (qry: string, nextToItem: CardItem): AppAction => { return { - type: findNotesActionType, handle(state: AppState) { const notes = state.notes.value .filter((o) => o.title.search(qry) > -1) @@ -587,10 +534,8 @@ export const findNotesAction = (qry: string, nextToItem: CardItem): AppAction => }; }; -const getNotesActionType = 'GET_NOTE'; export const getNotesAction = (noteId: string, nextToItem: CardItem): AppAction => { return { - type: getNotesActionType, handle(state: AppState) { const note = state.notes.value.find((o) => o.id === noteId); const card: CardItem = { @@ -604,10 +549,8 @@ export const getNotesAction = (noteId: string, nextToItem: CardItem): AppAction }; }; -const updateNotesActionType = 'UPDATE_NOTES'; export const updateNotesAction = (notes: IStorable): AppAction => { return { - type: updateNotesActionType, handle(state: AppState) { return { ...state, @@ -617,10 +560,8 @@ export const updateNotesAction = (notes: IStorable): AppAct }; }; -const saveNoteActionType = 'SAVE_NOTE'; export const saveNoteAction = (note: NoteItem): AppAction => { return { - type: saveNoteActionType, handle(state: AppState) { // you may be creating a new note or updating an existing. // if its an update, you need to update the note in the following: @@ -642,10 +583,8 @@ export const saveNoteAction = (note: NoteItem): AppAction => { }; }; -const deleteNoteActionType = 'DELETE_NOTE'; export const deleteNoteAction = (note: NoteItem): AppAction => { return { - type: deleteNoteActionType, handle(state: AppState) { // the note may be in any of the following: // * card list could have it. @@ -692,42 +631,11 @@ export const deleteNoteAction = (note: NoteItem): AppAction => { //#endregion -type AppActions = - // Saved Page Actions - | typeof savePageActionType - | typeof updateCurrentPageActionType - | typeof updateSavedPagesActionType - | typeof updateSavedPageActionType - | typeof removeSavedPageActionType - | typeof moveSavedPageCardActionType - | typeof addCardToSavedPageActionType - // Card Actions - | typeof addCardActionType - | typeof updateCardActionType - | typeof removeCardActionType - | typeof moveCardActionType - | typeof updateCardsActionType - | typeof clearCardsActionType - // General Actions - | typeof updateErrorActionType - | typeof setUserActionType - | typeof updateAutoCompleteActionType - // Settings Actions - | typeof updateSettingsActionType - | typeof updateCardMergeStrategyActionType - | typeof updateCardFontSizeActionType - | typeof updateCardFontFamilyActionType - // Note Actions - | typeof findNotesActionType - | typeof getNotesActionType - | typeof updateNotesActionType - | typeof saveNoteActionType - | typeof deleteNoteActionType; - @Injectable({ providedIn: 'root', }) -export class AppService extends createStateService(appReducer, initialState) { +export class AppService extends createReducingService(initialState) { + //createStateService(appReducer, initialState) { private wordToStem: Map; private paragraphs: HashTable; private searchIndexArray: string[]; @@ -801,7 +709,7 @@ export class AppService extends createStateService(appReducer, initialState) { ]); private readonly dataPath = 'assets/data'; - constructor(private http: HttpClient, private localStorageService: StorageMap, private db: AngularFireDatabase) { + constructor(private http: HttpClient) { super(); this.searchIndexArray = this.buildIndexArray().sort(); From 838bfe1491573376600c3adbe0d20cb7e5d6322b Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 13:06:00 -0500 Subject: [PATCH 10/20] couple of minor formatting issues --- src/src/app/app.component.html | 2 +- src/src/app/components/passage/passage-card.component.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/src/app/app.component.html b/src/src/app/app.component.html index 0ed37e19..d74a47e4 100644 --- a/src/src/app/app.component.html +++ b/src/src/app/app.component.html @@ -16,7 +16,7 @@ > helpHelphelp Help diff --git a/src/src/app/components/passage/passage-card.component.ts b/src/src/app/components/passage/passage-card.component.ts index 5bfa1aca..83ea84f6 100644 --- a/src/src/app/components/passage/passage-card.component.ts +++ b/src/src/app/components/passage/passage-card.component.ts @@ -60,7 +60,7 @@ export class PassageCardComponent extends CardComponent implements OnInit { } copy() { - const text = this.passageElement.nativeElement.innerText + ` - ${this.ref.toString()}`; + const text = this.passageElement.nativeElement.innerText + ` \n - ${this.ref.toString()}`; this.copyToClip(text); } From 3a1f5639c6642f00887594515bab962408176d91 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 13:52:34 -0500 Subject: [PATCH 11/20] Support tabs in display of multiple strongs numbers --- src/src/app/app.module.ts | 2 + .../passage/passage-card.component.ts | 20 ++++--- .../strongs/card/strongs-card.component.ts | 7 ++- .../modal/strongs-modal.component.html | 46 ++++++++-------- .../strongs/modal/strongs-modal.component.ts | 13 +++-- src/src/app/models/strongs-state.ts | 1 - src/src/app/services/app.service.ts | 52 ++++++++++++++++--- 7 files changed, 98 insertions(+), 43 deletions(-) diff --git a/src/src/app/app.module.ts b/src/src/app/app.module.ts index 023e4874..46f682d2 100644 --- a/src/src/app/app.module.ts +++ b/src/src/app/app.module.ts @@ -37,6 +37,7 @@ import { MatBadgeModule } from '@angular/material/badge'; import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; import { MatDividerModule } from '@angular/material/divider'; import { MatChipsModule } from '@angular/material/chips'; +import { MatTabsModule } from '@angular/material/tabs'; import { MatNativeDateModule, MatRippleModule } from '@angular/material/core'; import { ClipboardModule } from '@angular/cdk/clipboard'; @@ -153,6 +154,7 @@ export function markedOptionsFactory(): MarkedOptions { MatSnackBarModule, MatTooltipModule, MatFormFieldModule, + MatTabsModule, ClipboardModule, ], providers: [{ provide: APP_ID, useValue: 'ng-cli-universal' }], diff --git a/src/src/app/components/passage/passage-card.component.ts b/src/src/app/components/passage/passage-card.component.ts index 83ea84f6..5822babc 100644 --- a/src/src/app/components/passage/passage-card.component.ts +++ b/src/src/app/components/passage/passage-card.component.ts @@ -149,16 +149,20 @@ export class PassageCardComponent extends CardComponent implements OnInit { async openStrongs(q: string, asModal = false) { const dict = (this.cardItem.data as BiblePassageResult).dict; const numbers = q.split(' '); - for (const sn of numbers) { - if (asModal) { + + if (asModal) { + const cards: CardItem[] = []; + for (const sn of numbers) { const card = await this.appService.getStrongsCard(sn, dict); - this.dialog.open(StrongsModalComponent, { - data: card, - autoFocus: 'content', - }); - } else { - this.appService.getStrongs(sn, dict, this.cardItem); + cards.push(card); } + + this.dialog.open(StrongsModalComponent, { + data: cards, + autoFocus: 'content', + }); + } else { + this.appService.getStrongs(numbers, dict, this.cardItem); } } diff --git a/src/src/app/components/strongs/card/strongs-card.component.ts b/src/src/app/components/strongs/card/strongs-card.component.ts index 57ef73ec..9a1e0689 100644 --- a/src/src/app/components/strongs/card/strongs-card.component.ts +++ b/src/src/app/components/strongs/card/strongs-card.component.ts @@ -1,4 +1,4 @@ -import { Component, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; +import { Component, ElementRef, ViewChild, ChangeDetectionStrategy, Input } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; import { Clipboard } from '@angular/cdk/clipboard'; import { StrongsModalComponent } from '../modal/strongs-modal.component'; @@ -18,6 +18,9 @@ export class StrongsCardComponent extends CardComponent { asModal = false; @ViewChild('strongs') strongsElement: ElementRef; + @Input() + data: StrongsResult; + get strongsResult() { return this.cardItem.data as StrongsResult; } @@ -52,7 +55,7 @@ export class StrongsCardComponent extends CardComponent { autoFocus: 'content', }); } else { - this.appService.getStrongs(sn, dict, this.cardItem); + this.appService.getStrongs([sn], dict, this.cardItem); } } diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.html b/src/src/app/components/strongs/modal/strongs-modal.component.html index 9a6968f5..81df15f7 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.html +++ b/src/src/app/components/strongs/modal/strongs-modal.component.html @@ -1,22 +1,26 @@ - - {{ - icon$ | async - }} -
{{ cardItem.qry }}
- - - -
- -
- + + {{ + icon$ | async + }} +
{{ this.title }}
+ + + +
+ + + + {{ card.prefix }}{{ card.sn }} + + + diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 115a65a1..6182bf3d 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -1,5 +1,6 @@ -import { Component, Inject, ChangeDetectionStrategy } from '@angular/core'; +import { Component, Inject, ChangeDetectionStrategy, Input } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { MatTabsModule } from '@angular/material/tabs'; import { Observable } from 'rxjs'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardItem } from 'src/app/models/card-state'; @@ -15,14 +16,16 @@ import { AppService } from 'src/app/services/app.service'; }) export class StrongsModalComponent { icon$: Observable; - strongsResult: StrongsResult; + strongsResults: StrongsResult[]; + title: string; constructor( - @Inject(MAT_DIALOG_DATA) public cardItem: CardItem, + @Inject(MAT_DIALOG_DATA) public cardItems: CardItem[], public dialogRef: MatDialogRef, private appService: AppService ) { - this.strongsResult = cardItem.data as StrongsResult; + this.title = cardItems.map(o => o.qry).reduce((p, c) => `${p}, ${c}`); + this.strongsResults = cardItems.map(o => o.data as StrongsResult); this.icon$ = appService.select((state) => state.settings.value.cardIcons.strongs); } @@ -32,6 +35,6 @@ export class StrongsModalComponent { openPassage(p: string) { const ref = BibleReference.makePassageFromReferenceKey(p); - this.appService.getPassage(ref, this.cardItem); + this.appService.getPassage(ref, this.cardItems[0]); } } diff --git a/src/src/app/models/strongs-state.ts b/src/src/app/models/strongs-state.ts index a4892631..df8170c0 100644 --- a/src/src/app/models/strongs-state.ts +++ b/src/src/app/models/strongs-state.ts @@ -1,7 +1,6 @@ export type StrongsDictionary = 'heb' | 'grk'; export interface StrongsResult { - readonly dict: StrongsDictionary; readonly prefix: string; readonly sn: number; readonly def: StrongsDefinition; diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index 64174934..c6c8157c 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -286,6 +286,43 @@ export const addCardAction = (card: CardItem, nextToItem: CardItem): AppAction = }; }; +export const addCardsAction = (cardsToAdd: CardItem[], nextToItem: CardItem): AppAction => { + return { + handle(state: AppState) { + let cards = [...state.currentCards.value]; + let cache = state.cardCache; + + for (let card of cardsToAdd) { + if (nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { + const idx = cards.indexOf(nextToItem); + + if (state.settings.value.displaySettings.appendCardToBottom) { + const before = cards.slice(0, idx + 1); + const after = cards.slice(idx + 1); + cards = [...before, card, ...after]; + } else { + const before = cards.slice(0, idx); + const after = cards.slice(idx); + cards = [...before, card, ...after]; + } + } else { + if (state.settings.value.displaySettings.appendCardToBottom) { + cards = [...cards, card]; + } else { + cards = [card, ...cards]; + } + } + cache = updateInCardCache(card, state.cardCache); + } + return { + ...state, + currentCards: new Storable(cards), + cardCache: cache, + }; + }, + }; +}; + export const updateCardAction = (newCard: CardItem, oldCard: CardItem): AppAction => { return { handle(state: AppState) { @@ -635,7 +672,6 @@ export const deleteNoteAction = (note: NoteItem): AppAction => { providedIn: 'root', }) export class AppService extends createReducingService(initialState) { - //createStateService(appReducer, initialState) { private wordToStem: Map; private paragraphs: HashTable; private searchIndexArray: string[]; @@ -1000,13 +1036,17 @@ export class AppService extends createReducingService(initialState) { //#region Strongs - async getStrongs(strongsNumber: string, dict: StrongsDictionary, nextToItem: CardItem = null) { - const card = await this.getStrongsCard(strongsNumber, dict); - if (!card) { - return; // nothing was returned. so an error occurred. + async getStrongs(strongsNumber: string[], dict: StrongsDictionary, nextToItem: CardItem = null) { + const cards = []; + for (const sn of strongsNumber) { + const card = await this.getStrongsCard(sn, dict); + cards.push(card); + } + if (cards.length < 1) { + return; } - this.dispatch(addCardAction(card, nextToItem)); + this.dispatch(addCardsAction(cards, nextToItem)); } async getStrongsCard(strongsNumber: string, dict: StrongsDictionary) { From 02cef20cd0582f7ee489896c7b74e94162ff3e57 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 13:59:04 -0500 Subject: [PATCH 12/20] Fix Titles of modals so they use the whole width --- .../add-to-page-modal.component.html | 11 ++++----- .../edit-modal/note-edit-modal.component.html | 11 ++++----- .../page-edit-modal.component.html | 10 ++++---- .../verse-picker-modal.component.html | 24 +++++++------------ 4 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html index e445b2ee..5e405591 100644 --- a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html +++ b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.html @@ -1,9 +1,7 @@ -
- - save -
Add Card to Saved Page
-
-
+ + save +
Add Card to Saved Page
+
@@ -26,7 +24,6 @@ > - - -
+ + bookmarks +
Verse Picker
+ + + +
From eff29f6f9267de38c83a389a074b0639f219e509 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 14:03:08 -0500 Subject: [PATCH 13/20] Only show tabs if there are more than one --- .../components/strongs/modal/strongs-modal.component.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.html b/src/src/app/components/strongs/modal/strongs-modal.component.html index 81df15f7..db163e10 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.html +++ b/src/src/app/components/strongs/modal/strongs-modal.component.html @@ -14,7 +14,7 @@ - + {{ card.prefix }}{{ card.sn }} + + + From e22668640eefd140a54c381a302b6029a8788fe4 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 14:13:56 -0500 Subject: [PATCH 14/20] removed unused imports and variables --- src/.eslintrc.json | 13 +++++ src/package-lock.json | 31 ++++++++++++ src/package.json | 1 + src/src/app/common/bible-reference.ts | 10 ++-- .../app/common/card-cache-operations.spec.ts | 10 ---- .../saved-page-card.component.ts | 2 +- .../components/settings/settings.component.ts | 2 +- .../strongs/modal/strongs-modal.component.ts | 3 +- .../app/services/app-state-reducer.spec.ts | 29 +++++------- src/src/app/services/app.service.ts | 47 +++---------------- 10 files changed, 72 insertions(+), 76 deletions(-) diff --git a/src/.eslintrc.json b/src/.eslintrc.json index eaf27277..24a7b322 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -7,6 +7,8 @@ "sourceType": "module", "project": "./tsconfig.json" // <-- Point to your project's "tsconfig.json" or create a new one. }, + + "plugins": ["unused-imports"], "overrides": [ { "files": ["*.ts"], @@ -35,6 +37,17 @@ "prefix": "app", "style": "kebab-case" } + ], + "no-unused-vars": "off", // or "@typescript-eslint/no-unused-vars": "off", + "unused-imports/no-unused-imports": "error", + "unused-imports/no-unused-vars": [ + "warn", + { + "vars": "all", + "varsIgnorePattern": "^_", + "args": "after-used", + "argsIgnorePattern": "^_" + } ] } }, diff --git a/src/package-lock.json b/src/package-lock.json index 2991966b..efd22eae 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -54,6 +54,7 @@ "cypress": "latest", "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", + "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", "inquirer": "^9.2.15", @@ -11979,6 +11980,36 @@ "typescript": "^4.2.4 || ^5.0.0" } }, + "node_modules/eslint-plugin-unused-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", + "integrity": "sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==", + "dev": true, + "dependencies": { + "eslint-rule-composer": "^0.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "6 - 7", + "eslint": "8" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-rule-composer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", + "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/eslint-scope": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.0.tgz", diff --git a/src/package.json b/src/package.json index 1a3a68db..bbc7a4c8 100644 --- a/src/package.json +++ b/src/package.json @@ -62,6 +62,7 @@ "cypress": "latest", "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", + "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", "inquirer": "^9.2.15", diff --git a/src/src/app/common/bible-reference.ts b/src/src/app/common/bible-reference.ts index 2277039d..fd856070 100644 --- a/src/src/app/common/bible-reference.ts +++ b/src/src/app/common/bible-reference.ts @@ -924,7 +924,7 @@ export class BibleReference { if (this.ref.length === 0) { return; } - this.parseBook(false); + this.parseBook(); this.parseChapter(false); const foundFirstVerse = this.ref.search(/:.*-/) !== -1; @@ -932,7 +932,7 @@ export class BibleReference { this.maybeParseRangeSep(); const foundSecondBook = this.ref.search(/\w\s+\d/i) !== -1; - this.maybeParseBook(true); + this.maybeParseBook(); this.maybeParseChapterOrVerse(foundSecondBook, foundFirstVerse, true); this.maybeParseVerse(true); } @@ -958,7 +958,7 @@ export class BibleReference { } } - private parseBook(isEnd?: boolean) { + private parseBook() { this.ref = this.ref.toLowerCase().trim(); let fbook = this.ref.substring(0, this.ref.search(/\w\s+\d/i) + 1); @@ -1039,10 +1039,10 @@ export class BibleReference { } } - private maybeParseBook(isEnd: boolean) { + private maybeParseBook() { return this.maybeDo(() => { if (this.ref.search(/\w\s+\d/i) !== -1) { - this.parseBook(isEnd); + this.parseBook(); } }); } diff --git a/src/src/app/common/card-cache-operations.spec.ts b/src/src/app/common/card-cache-operations.spec.ts index 80d6c53e..ac2b0a67 100644 --- a/src/src/app/common/card-cache-operations.spec.ts +++ b/src/src/app/common/card-cache-operations.spec.ts @@ -48,16 +48,6 @@ describe('Card Cache', () => { type: CardType.Passage, data: null, }; - const card2: CardItem = { - qry: 'jason', - type: CardType.Passage, - data: { - id: 'adsf', - xref: '', - title: 'adsf', - content: '', - } as NoteItem, - }; const card3: CardItem = { qry: 'jason3', type: CardType.Passage, diff --git a/src/src/app/components/saved-page-card/saved-page-card.component.ts b/src/src/app/components/saved-page-card/saved-page-card.component.ts index 62fcd476..3c8b9e2a 100644 --- a/src/src/app/components/saved-page-card/saved-page-card.component.ts +++ b/src/src/app/components/saved-page-card/saved-page-card.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, Input } from '@angular/core'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { MatDialog } from '@angular/material/dialog'; import { Observable } from 'rxjs'; diff --git a/src/src/app/components/settings/settings.component.ts b/src/src/app/components/settings/settings.component.ts index 1c42b4dc..7e1954a8 100644 --- a/src/src/app/components/settings/settings.component.ts +++ b/src/src/app/components/settings/settings.component.ts @@ -82,7 +82,7 @@ export class SettingsComponent extends SubscriberBase { const credential = firebase.auth.GoogleAuthProvider.credential(googleUser.authentication.idToken); (await this.authService.app).auth().signInWithCredential(credential); } else { - this.authService.signInWithPopup(new firebase.auth.GoogleAuthProvider()).then((cred) => { + this.authService.signInWithPopup(new firebase.auth.GoogleAuthProvider()).then(() => { console.log('Authenticated.'); }); } diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 6182bf3d..878f1b25 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -1,6 +1,5 @@ -import { Component, Inject, ChangeDetectionStrategy, Input } from '@angular/core'; +import { Component, Inject, ChangeDetectionStrategy } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { MatTabsModule } from '@angular/material/tabs'; import { Observable } from 'rxjs'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardItem } from 'src/app/models/card-state'; diff --git a/src/src/app/services/app-state-reducer.spec.ts b/src/src/app/services/app-state-reducer.spec.ts index e51e6411..adcb4087 100644 --- a/src/src/app/services/app-state-reducer.spec.ts +++ b/src/src/app/services/app-state-reducer.spec.ts @@ -8,7 +8,7 @@ import { getCardCacheKey } from '../common/card-cache-operations'; import { MoveDirection } from '../common/move-direction'; import { NoteItem } from '../models/note-state'; import { - addCardAction, + addCardsAction, addCardToSavedPageAction, deleteNoteAction, findNotesAction, @@ -273,7 +273,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const testState = addCardAction(card1, null).handle(preState); + const testState = addCardsAction([card1], null).handle(preState); expect(testState.currentCards.value[0]).toBe(card1, 'Failed to add first card to empty list'); const testState2 = updateCurrentPageAction().handle(testState); @@ -289,7 +289,7 @@ describe('AppService Reducer', () => { type: CardType.Passage, }; - const preState2 = addCardAction(card1, null).handle(preState); + const preState2 = addCardsAction([card1], null).handle(preState); const testState = savePageAction('my saved page').handle(preState2); @@ -328,7 +328,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const testState = addCardAction(card1, null).handle(preState); + const testState = addCardsAction([card1], null).handle(preState); expect(testState.currentCards.value[0]).toBe(card1, 'Failed to add first card to empty list'); const card2: CardItem = { @@ -337,7 +337,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const testState2 = addCardAction(card2, null).handle(testState); + const testState2 = addCardsAction([card2], null).handle(testState); expect(testState2.currentCards.value.length).toBe(2, 'Failed to add second card to list with 1 item'); expect(testState2.currentCards.value[1]).toBe(card2); @@ -370,7 +370,7 @@ describe('AppService Reducer', () => { }, }).handle(testState2); - const testState3 = addCardAction(card3, card2).handle(setState); + const testState3 = addCardsAction([card3], card2).handle(setState); expect(testState3.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState3.currentCards.value[1]).toBe(card3, 'Failed to insert card above the second card'); @@ -397,7 +397,7 @@ describe('AppService Reducer', () => { }, }).handle(testState2); - const testState4 = addCardAction(card3, card1).handle(setState); + const testState4 = addCardsAction([card3], card1).handle(setState); expect(testState4.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState4.currentCards.value[1]).toBe(card3, 'Failed to insert card below the first card'); @@ -424,7 +424,7 @@ describe('AppService Reducer', () => { }, }).handle(testState2); - const testState5 = addCardAction(card3, card1).handle(setState); + const testState5 = addCardsAction([card3], card1).handle(setState); expect(testState5.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState5.currentCards.value[2]).toBe(card3, 'Failed to insert card at end of the list'); @@ -451,7 +451,7 @@ describe('AppService Reducer', () => { }, }).handle(testState2); - const testState6 = addCardAction(card3, card1).handle(setState); + const testState6 = addCardsAction([card3], card1).handle(setState); expect(testState6.currentCards.value.length).toBe(3, 'Failed to add third card'); expect(testState6.currentCards.value[0]).toBe(card3, 'Failed to insert card at start of the list'); }); @@ -463,7 +463,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const preState1 = addCardAction(oldCard, null).handle(preState); + const preState1 = addCardsAction([oldCard], null).handle(preState); const newCard: CardItem = { qry: 'H88', @@ -487,7 +487,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const preState1 = addCardAction(card, null).handle(preState); + const preState1 = addCardsAction([card], null).handle(preState); const testState = removeCardAction(card).handle(preState1); @@ -508,7 +508,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const preState1 = addCardAction(card1, null).handle(preState); + const preState1 = addCardsAction([card1], null).handle(preState); const card2: CardItem = { qry: 'H88', @@ -516,7 +516,7 @@ describe('AppService Reducer', () => { type: CardType.Strongs, }; - const preState2 = addCardAction(card2, null).handle(preState1); + const preState2 = addCardsAction([card2], null).handle(preState1); expect(preState2.currentCards.value.length).toBe(2, 'Should have two cards'); expect(preState2.currentCards.value[0].qry).toBe('G123'); expect(preState2.currentCards.value[1].qry).toBe('H88'); @@ -605,7 +605,4 @@ describe('AppService Reducer', () => { //#endregion }); -function newUserAction(preState: AppState, action1: any) { - throw new Error('Function not implemented.'); -} diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index c6c8157c..8f34227d 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -252,40 +252,6 @@ export const addCardToSavedPageAction = (card: CardItem, pageId: string): AppAct //#region Cards -export const addCardAction = (card: CardItem, nextToItem: CardItem): AppAction => { - return { - handle(state: AppState) { - let cards = []; - - if (nextToItem && state.settings.value.displaySettings.insertCardNextToItem) { - const idx = state.currentCards.value.indexOf(nextToItem); - - if (state.settings.value.displaySettings.appendCardToBottom) { - const before = state.currentCards.value.slice(0, idx + 1); - const after = state.currentCards.value.slice(idx + 1); - cards = [...before, card, ...after]; - } else { - const before = state.currentCards.value.slice(0, idx); - const after = state.currentCards.value.slice(idx); - cards = [...before, card, ...after]; - } - } else { - if (state.settings.value.displaySettings.appendCardToBottom) { - cards = [...state.currentCards.value, card]; - } else { - cards = [card, ...state.currentCards.value]; - } - } - - return { - ...state, - currentCards: new Storable(cards), - cardCache: updateInCardCache(card, state.cardCache), - }; - }, - }; -}; - export const addCardsAction = (cardsToAdd: CardItem[], nextToItem: CardItem): AppAction => { return { handle(state: AppState) { @@ -581,7 +547,7 @@ export const getNotesAction = (noteId: string, nextToItem: CardItem): AppAction data: note, }; - return addCardAction(card, nextToItem).handle(state); + return addCardsAction([card], nextToItem).handle(state); }, }; }; @@ -841,7 +807,7 @@ export class AppService extends createReducingService(initialState) { if (!card) { return; } - this.dispatch(addCardAction(card, nextToItem)); + this.dispatch(addCardsAction([card], nextToItem)); } async updateCards(queries: IStorable) { @@ -1122,7 +1088,7 @@ export class AppService extends createReducingService(initialState) { const rmacCrossReferences = await lastValueFrom(this.http.get(url)); // deal with RMAC - const referencesForThisStrongsNumber = rmacCrossReferences.filter((el, i) => { + const referencesForThisStrongsNumber = rmacCrossReferences.filter((el) => { return el.i === sn.toString(); }); @@ -1161,7 +1127,7 @@ export class AppService extends createReducingService(initialState) { return; // nothing was returned. so an error occurred. } - this.dispatch(addCardAction(card, nextToItem)); + this.dispatch(addCardsAction([card], nextToItem)); } async updatePassage(oldCard: CardItem, ref: BibleReference) { @@ -1302,7 +1268,6 @@ export class AppService extends createReducingService(initialState) { // create an initial paragraph to hold verses that might come before a paragraph. let para = { p: { h: '', p: 0 }, vss: [] }; const paras = []; - const vss: BibleVerse[] = []; // for each verse in the chapter, break them into paragraphs. for (const v of ch.vss) { @@ -1350,7 +1315,7 @@ export class AppService extends createReducingService(initialState) { data: result, } as CardItem; - this.dispatch(addCardAction(card, nextToItem)); + this.dispatch(addCardsAction([card], nextToItem)); } private async getWordsFromApi(qry: string): Promise { @@ -1411,7 +1376,7 @@ export class AppService extends createReducingService(initialState) { if (excluded.length > 0) { this.dispatch( updateErrorAction({ - msg: `The ${excluded.length > 1 ? 'words' : 'word'} "${excluded.reduce((prev, curr, idx, arr) => { + msg: `The ${excluded.length > 1 ? 'words' : 'word'} "${excluded.reduce((prev, curr) => { return `${prev}, ${curr}`; })}" ${excluded.length > 1 ? 'have' : 'has'} been excluded from search because it is too common.`, }) From 8ae4cd7046195127bbe25c6b12fd181ab7ce927a Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 14:30:15 -0500 Subject: [PATCH 15/20] add regex optimization eslint --- src/.eslintrc.json | 5 +++-- src/angular.json | 3 +-- src/package-lock.json | 22 ++++++++++++++++++++++ src/package.json | 1 + src/src/app/services/app.service.ts | 8 ++++---- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/.eslintrc.json b/src/.eslintrc.json index 24a7b322..e150ef55 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -8,7 +8,7 @@ "project": "./tsconfig.json" // <-- Point to your project's "tsconfig.json" or create a new one. }, - "plugins": ["unused-imports"], + "plugins": ["unused-imports", "optimize-regex"], "overrides": [ { "files": ["*.ts"], @@ -48,7 +48,8 @@ "args": "after-used", "argsIgnorePattern": "^_" } - ] + ], + "optimize-regex/optimize-regex": "warn" } }, { diff --git a/src/angular.json b/src/angular.json index 02b445b1..4c94f3bb 100644 --- a/src/angular.json +++ b/src/angular.json @@ -177,8 +177,7 @@ "schematicCollections": [ "@cypress/schematic", "@angular-eslint/schematics", - "@angular-eslint/schematics", "@schematics/angular" ] } -} \ No newline at end of file +} diff --git a/src/package-lock.json b/src/package-lock.json index efd22eae..fb386a0e 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -54,6 +54,7 @@ "cypress": "latest", "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", + "eslint-plugin-optimize-regex": "^1.2.1", "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", @@ -11980,6 +11981,18 @@ "typescript": "^4.2.4 || ^5.0.0" } }, + "node_modules/eslint-plugin-optimize-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-optimize-regex/-/eslint-plugin-optimize-regex-1.2.1.tgz", + "integrity": "sha512-fUaU7Tj1G/KSTDTABJw4Wp427Rl7RPl9ViYTu1Jrv36fJw4DFhd4elPdXiuYtdPsNsvzn9GcVlKEssGIVjw0UQ==", + "dev": true, + "dependencies": { + "regexp-tree": "^0.1.21" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-plugin-unused-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", @@ -21225,6 +21238,15 @@ "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", "dev": true }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, "node_modules/regexpu-core": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", diff --git a/src/package.json b/src/package.json index bbc7a4c8..760bdf08 100644 --- a/src/package.json +++ b/src/package.json @@ -62,6 +62,7 @@ "cypress": "latest", "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", + "eslint-plugin-optimize-regex": "^1.2.1", "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index 8f34227d..cd8bd8d3 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -747,7 +747,7 @@ export class AppService extends createReducingService(initialState) { qry = qry.split('"').join(''); // remove any quotes, just in case - if (qry.search(/[0-9]/i) === -1) { + if (qry.search(/\d/i) === -1) { // its a word for (const item of BibleReference.Books) { if ( @@ -772,7 +772,7 @@ export class AppService extends createReducingService(initialState) { } this.dispatch(updateAutoCompleteAction(words)); - } else if (qry.search(/(H|G)[0-9]/i) !== -1) { + } else if (qry.search(/(h|g)\d/i) !== -1) { // its a strongs lookup if (qry.substring(0, 1).toUpperCase() === 'H') { const num = parseInt(qry.substring(1), 10); @@ -852,7 +852,7 @@ export class AppService extends createReducingService(initialState) { type: CardType.Note, data, } as CardItem; - } else if (qry.search(/[0-9]/i) === -1) { + } else if (qry.search(/\d/i) === -1) { // // its a search term. const data = await this.getWordsFromApi(qry); if (!data) { @@ -863,7 +863,7 @@ export class AppService extends createReducingService(initialState) { type: CardType.Word, data, } as CardItem; - } else if (qry.search(/(H|G)[0-9]/i) !== -1) { + } else if (qry.search(/(h|g)\d/i) !== -1) { // its a strongs lookup const dict = qry.substring(0, 1).search(/h/i) !== -1 ? 'heb' : 'grk'; const strongsNumber = qry.substring(1, qry.length); From 11c9a798d4eaa5391da46c9c716df1d68193d751 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 14:34:17 -0500 Subject: [PATCH 16/20] Sort the imports :) --- src/.eslintrc.json | 11 ++- src/package-lock.json | 10 ++ src/package.json | 1 + src/src/app/app-routing.module.ts | 7 +- src/src/app/app.component.ts | 21 ++-- src/src/app/app.module.ts | 98 +++++++++---------- src/src/app/common/array-operations.spec.ts | 2 +- src/src/app/common/array-operations.ts | 3 +- .../app/common/card-cache-operations.spec.ts | 4 +- src/src/app/common/card-operations.spec.ts | 4 +- src/src/app/common/card-operations.ts | 2 +- src/src/app/common/subscriber-base.ts | 2 +- .../add-to-page-modal.component.ts | 7 +- src/src/app/components/card.component.ts | 9 +- .../help-modal/help-modal.component.ts | 1 + .../edit-modal/note-edit-modal.component.ts | 11 +-- .../components/note/note-card.component.ts | 7 +- .../page-edit-modal.component.ts | 4 +- .../passage/passage-card.component.ts | 13 +-- .../saved-page-card.component.ts | 15 +-- .../components/settings/settings.component.ts | 27 +++-- .../strongs/card/strongs-card.component.ts | 11 ++- .../strongs/modal/strongs-modal.component.ts | 4 +- .../components/strongs/strongs.component.ts | 3 +- .../verse-picker-modal.component.ts | 2 +- .../components/words/words-card.component.ts | 4 +- src/src/app/models/app-state.ts | 8 +- src/src/app/models/card-state.ts | 2 +- .../app/pages/notes-admin/notes-admin.page.ts | 4 +- src/src/app/pages/search/search.page.ts | 15 +-- .../app/services/app-state-reducer.spec.ts | 9 +- src/src/app/services/app.service.ts | 34 +++---- src/src/app/services/migration0to1.service.ts | 9 +- src/src/app/services/storage.service.ts | 17 ++-- src/src/test.ts | 1 + 35 files changed, 195 insertions(+), 187 deletions(-) diff --git a/src/.eslintrc.json b/src/.eslintrc.json index e150ef55..7ad78bbe 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -3,12 +3,11 @@ "ignorePatterns": ["projects/**/*"], "parser": "@typescript-eslint/parser", "parserOptions": { + "project": "./tsconfig.json", // <-- Point to your project's "tsconfig.json" or create a new one. "ecmaVersion": 2020, - "sourceType": "module", - "project": "./tsconfig.json" // <-- Point to your project's "tsconfig.json" or create a new one. + "sourceType": "module" }, - - "plugins": ["unused-imports", "optimize-regex"], + "plugins": ["unused-imports", "optimize-regex", "simple-import-sort"], "overrides": [ { "files": ["*.ts"], @@ -49,7 +48,9 @@ "argsIgnorePattern": "^_" } ], - "optimize-regex/optimize-regex": "warn" + "optimize-regex/optimize-regex": "warn", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error" } }, { diff --git a/src/package-lock.json b/src/package-lock.json index fb386a0e..7be6ee7f 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -55,6 +55,7 @@ "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-optimize-regex": "^1.2.1", + "eslint-plugin-simple-import-sort": "^12.0.0", "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", @@ -11993,6 +11994,15 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-simple-import-sort": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-12.0.0.tgz", + "integrity": "sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, "node_modules/eslint-plugin-unused-imports": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.1.0.tgz", diff --git a/src/package.json b/src/package.json index 760bdf08..e4200d6c 100644 --- a/src/package.json +++ b/src/package.json @@ -63,6 +63,7 @@ "eslint": "^8.57.0", "eslint-plugin-deprecation": "^2.0.0", "eslint-plugin-optimize-regex": "^1.2.1", + "eslint-plugin-simple-import-sort": "^12.0.0", "eslint-plugin-unused-imports": "^3.1.0", "firebase-tools": "^13.4.0", "fuzzy": "^0.1.3", diff --git a/src/src/app/app-routing.module.ts b/src/src/app/app-routing.module.ts index 43244d31..0e60bdb0 100644 --- a/src/src/app/app-routing.module.ts +++ b/src/src/app/app-routing.module.ts @@ -1,8 +1,9 @@ import { NgModule } from '@angular/core'; -import { Routes, RouterModule } from '@angular/router'; -import { SearchPageComponent } from './pages/search/search.page'; -import { SavedPagesAdminPageComponent } from './pages/saved-pages-admin/saved-pages-admin.page'; +import { RouterModule,Routes } from '@angular/router'; + import { NotesAdminPageComponent } from './pages/notes-admin/notes-admin.page'; +import { SavedPagesAdminPageComponent } from './pages/saved-pages-admin/saved-pages-admin.page'; +import { SearchPageComponent } from './pages/search/search.page'; const routes: Routes = [ { diff --git a/src/src/app/app.component.ts b/src/src/app/app.component.ts index 85151632..c6695a86 100644 --- a/src/src/app/app.component.ts +++ b/src/src/app/app.component.ts @@ -1,15 +1,16 @@ -import { Component, ViewChild, AfterViewInit, ChangeDetectorRef } from '@angular/core'; +import { BreakpointObserver,Breakpoints } from '@angular/cdk/layout'; +import { AfterViewInit, ChangeDetectorRef,Component, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; +import { MatSidenav } from '@angular/material/sidenav'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { Observable } from 'rxjs'; +import { map, shareReplay } from 'rxjs/operators'; + +import { SubscriberBase } from './common/subscriber-base'; +import { HelpModalComponent } from './components/help-modal/help-modal.component'; +import { AppService } from './services/app.service'; import { NavService } from './services/nav.service'; import { StorageService } from './services/storage.service'; -import { Observable } from 'rxjs'; -import { Breakpoints, BreakpointObserver } from '@angular/cdk/layout'; -import { map, shareReplay } from 'rxjs/operators'; -import { MatSidenav } from '@angular/material/sidenav'; -import { SubscriberBase } from './common/subscriber-base'; -import { MatSnackBar } from '@angular/material/snack-bar'; -import { HelpModalComponent } from './components/help-modal/help-modal.component'; -import { MatDialog } from '@angular/material/dialog'; -import { AppService } from './services/app.service'; @Component({ selector: 'app-root', diff --git a/src/src/app/app.module.ts b/src/src/app/app.module.ts index 46f682d2..b449bd10 100644 --- a/src/src/app/app.module.ts +++ b/src/src/app/app.module.ts @@ -1,73 +1,63 @@ -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { HttpClientModule } from '@angular/common/http'; -import { BrowserModule } from '@angular/platform-browser'; -import { APP_ID, NgModule } from '@angular/core'; -import { FormsModule, ReactiveFormsModule } from '@angular/forms'; - -import { MARKED_OPTIONS, MarkdownModule } from 'ngx-markdown'; - -import { AngularFireModule } from '@angular/fire/compat'; -import { FirebaseConfig } from './constants'; +import { ClipboardModule } from '@angular/cdk/clipboard'; import { DragDropModule } from '@angular/cdk/drag-drop'; +import { HttpClientModule } from '@angular/common/http'; +import { APP_ID, NgModule } from '@angular/core'; +import { AngularFireModule } from '@angular/fire/compat'; import { AngularFireAuthModule } from '@angular/fire/compat/auth'; import { AngularFireDatabaseModule } from '@angular/fire/compat/database'; - -import { MatCheckboxModule } from '@angular/material/checkbox'; -import { MatButtonModule } from '@angular/material/button'; -import { MatInputModule } from '@angular/material/input'; +import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { MatAutocompleteModule } from '@angular/material/autocomplete'; -import { MatFormFieldModule } from '@angular/material/form-field'; -import { MatRadioModule } from '@angular/material/radio'; -import { MatSelectModule } from '@angular/material/select'; -import { MatSliderModule } from '@angular/material/slider'; -import { MatSlideToggleModule } from '@angular/material/slide-toggle'; -import { MatMenuModule } from '@angular/material/menu'; -import { MatSidenavModule } from '@angular/material/sidenav'; -import { MatToolbarModule } from '@angular/material/toolbar'; -import { MatListModule } from '@angular/material/list'; -import { MatCardModule } from '@angular/material/card'; -import { MatStepperModule } from '@angular/material/stepper'; -import { MatExpansionModule } from '@angular/material/expansion'; -import { MatButtonToggleModule } from '@angular/material/button-toggle'; -import { MatIconModule } from '@angular/material/icon'; -import { MatDialogModule } from '@angular/material/dialog'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { MatSnackBarModule } from '@angular/material/snack-bar'; import { MatBadgeModule } from '@angular/material/badge'; import { MatBottomSheetModule } from '@angular/material/bottom-sheet'; -import { MatDividerModule } from '@angular/material/divider'; +import { MatButtonModule } from '@angular/material/button'; +import { MatButtonToggleModule } from '@angular/material/button-toggle'; +import { MatCardModule } from '@angular/material/card'; +import { MatCheckboxModule } from '@angular/material/checkbox'; import { MatChipsModule } from '@angular/material/chips'; -import { MatTabsModule } from '@angular/material/tabs'; import { MatNativeDateModule, MatRippleModule } from '@angular/material/core'; -import { ClipboardModule } from '@angular/cdk/clipboard'; +import { MatDialogModule } from '@angular/material/dialog'; +import { MatDividerModule } from '@angular/material/divider'; +import { MatExpansionModule } from '@angular/material/expansion'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatIconModule } from '@angular/material/icon'; +import { MatInputModule } from '@angular/material/input'; +import { MatListModule } from '@angular/material/list'; +import { MatMenuModule } from '@angular/material/menu'; +import { MatRadioModule } from '@angular/material/radio'; +import { MatSelectModule } from '@angular/material/select'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { MatSlideToggleModule } from '@angular/material/slide-toggle'; +import { MatSliderModule } from '@angular/material/slider'; +import { MatSnackBarModule } from '@angular/material/snack-bar'; +import { MatStepperModule } from '@angular/material/stepper'; +import { MatTabsModule } from '@angular/material/tabs'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { BrowserModule } from '@angular/platform-browser'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { MarkdownModule,MARKED_OPTIONS } from 'ngx-markdown'; +import { MarkedOptions, MarkedRenderer } from 'ngx-markdown'; -import { AppRoutingModule } from './app-routing.module'; import { AppComponent } from './app.component'; - -import { NotesAdminPageComponent } from './pages/notes-admin/notes-admin.page'; - -import { SavedPagesAdminPageComponent } from './pages/saved-pages-admin/saved-pages-admin.page'; -import { SavedPageCardComponent } from './components/saved-page-card/saved-page-card.component'; - +import { AppRoutingModule } from './app-routing.module'; +import { AddToPageModalComponent } from './components/add-to-page-modal/add-to-page-modal.component'; import { HelpModalComponent } from './components/help-modal/help-modal.component'; - -import { SearchPageComponent } from './pages/search/search.page'; - +import { NoteEditModalComponent } from './components/note/edit-modal/note-edit-modal.component'; +import { NoteCardComponent } from './components/note/note-card.component'; import { OkCancelModalComponent } from './components/ok-cancel-modal/ok-cancel-modal.component'; -import { SettingsComponent } from './components/settings/settings.component'; - +import { PageEditModalComponent } from './components/page-edit-modal/page-edit-modal.component'; import { PassageCardComponent } from './components/passage/passage-card.component'; -import { StrongsComponent } from './components/strongs/strongs.component'; +import { SavedPageCardComponent } from './components/saved-page-card/saved-page-card.component'; +import { SettingsComponent } from './components/settings/settings.component'; import { StrongsCardComponent } from './components/strongs/card/strongs-card.component'; import { StrongsModalComponent } from './components/strongs/modal/strongs-modal.component'; -import { WordsCardComponent } from './components/words/words-card.component'; -import { NoteCardComponent } from './components/note/note-card.component'; -import { PageEditModalComponent } from './components/page-edit-modal/page-edit-modal.component'; -import { NoteEditModalComponent } from './components/note/edit-modal/note-edit-modal.component'; +import { StrongsComponent } from './components/strongs/strongs.component'; import { VersePickerModalComponent } from './components/verse-picker-modal/verse-picker-modal.component'; -import { AddToPageModalComponent } from './components/add-to-page-modal/add-to-page-modal.component'; - -import { MarkedOptions, MarkedRenderer } from 'ngx-markdown'; +import { WordsCardComponent } from './components/words/words-card.component'; +import { FirebaseConfig } from './constants'; +import { NotesAdminPageComponent } from './pages/notes-admin/notes-admin.page'; +import { SavedPagesAdminPageComponent } from './pages/saved-pages-admin/saved-pages-admin.page'; +import { SearchPageComponent } from './pages/search/search.page'; // function that returns `MarkedOptions` with renderer override export function markedOptionsFactory(): MarkedOptions { diff --git a/src/src/app/common/array-operations.spec.ts b/src/src/app/common/array-operations.spec.ts index 1bf52679..b2c8bf19 100644 --- a/src/src/app/common/array-operations.spec.ts +++ b/src/src/app/common/array-operations.spec.ts @@ -1,4 +1,4 @@ -import { moveItemUpOrDown, moveItem } from './array-operations'; +import { moveItem,moveItemUpOrDown } from './array-operations'; import { MoveDirection } from './move-direction'; describe('Array Movement', () => { diff --git a/src/src/app/common/array-operations.ts b/src/src/app/common/array-operations.ts index 0d56a007..babf1df8 100644 --- a/src/src/app/common/array-operations.ts +++ b/src/src/app/common/array-operations.ts @@ -1,6 +1,7 @@ -import { MoveDirection } from './move-direction'; import { moveItemInArray } from '@angular/cdk/drag-drop'; +import { MoveDirection } from './move-direction'; + /** * Moves an item up (1 index towards 0) or down (1 index away from 0) immutably, returning a new array as the value. * @param items Array in which to move the item. diff --git a/src/src/app/common/card-cache-operations.spec.ts b/src/src/app/common/card-cache-operations.spec.ts index ac2b0a67..967bed18 100644 --- a/src/src/app/common/card-cache-operations.spec.ts +++ b/src/src/app/common/card-cache-operations.spec.ts @@ -1,7 +1,7 @@ -import { CardType, CardItem } from '../models/card-state'; +import { CardItem,CardType } from '../models/card-state'; import { NoteItem } from '../models/note-state'; +import { getCardCacheKey, removeFromCardCache,updateInCardCache } from './card-cache-operations'; import { HashTable } from './hashtable'; -import { updateInCardCache, getCardCacheKey, removeFromCardCache } from './card-cache-operations'; describe('Card Cache', () => { it('updateCache', () => { diff --git a/src/src/app/common/card-operations.spec.ts b/src/src/app/common/card-operations.spec.ts index 19a20ebd..1c91edc1 100644 --- a/src/src/app/common/card-operations.spec.ts +++ b/src/src/app/common/card-operations.spec.ts @@ -1,6 +1,6 @@ -import { mergeCardList } from './card-operations'; +import { CardItem,CardType } from '../models/card-state'; import { BibleReference, Overlap } from './bible-reference'; -import { CardType, CardItem } from '../models/card-state'; +import { mergeCardList } from './card-operations'; describe('Card Merging', () => { it('Should merge two equal reference cards', () => { diff --git a/src/src/app/common/card-operations.ts b/src/src/app/common/card-operations.ts index 64e8c17c..c820dfe7 100644 --- a/src/src/app/common/card-operations.ts +++ b/src/src/app/common/card-operations.ts @@ -1,5 +1,5 @@ -import { BibleReference, Overlap } from './bible-reference'; import { CardType, DataReference } from '../models/card-state'; +import { BibleReference, Overlap } from './bible-reference'; export function maybeMergeCards( leftCard: DataReference, diff --git a/src/src/app/common/subscriber-base.ts b/src/src/app/common/subscriber-base.ts index cd5e14b7..d3f98b4b 100644 --- a/src/src/app/common/subscriber-base.ts +++ b/src/src/app/common/subscriber-base.ts @@ -1,4 +1,4 @@ -import { OnDestroy, Injectable } from '@angular/core'; +import { Injectable,OnDestroy } from '@angular/core'; import { Subscription } from 'rxjs'; @Injectable({ diff --git a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts index 8f9e5337..aed6415d 100644 --- a/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts +++ b/src/src/app/components/add-to-page-modal/add-to-page-modal.component.ts @@ -1,10 +1,11 @@ import { Component, Inject, ViewChild } from '@angular/core'; -import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; -import { MatSelectionList } from '@angular/material/list'; import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms'; -import { CardItem } from '../../models/card-state'; +import { MAT_DIALOG_DATA,MatDialogRef } from '@angular/material/dialog'; +import { MatSelectionList } from '@angular/material/list'; import { AppService } from 'src/app/services/app.service'; +import { CardItem } from '../../models/card-state'; + @Component({ selector: 'app-add-to-page-modal-modal', templateUrl: 'add-to-page-modal.component.html', diff --git a/src/src/app/components/card.component.ts b/src/src/app/components/card.component.ts index d70cb669..087e42fb 100644 --- a/src/src/app/components/card.component.ts +++ b/src/src/app/components/card.component.ts @@ -1,12 +1,13 @@ -import { EventEmitter, Output, Input, ElementRef, Component } from '@angular/core'; -import { Observable } from 'rxjs'; +import { Clipboard } from '@angular/cdk/clipboard'; +import { Component,ElementRef, EventEmitter, Input, Output } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { SubscriberBase } from '../common/subscriber-base'; +import { Observable } from 'rxjs'; + import { MoveDirection } from '../common/move-direction'; +import { SubscriberBase } from '../common/subscriber-base'; import { AddToPageModalComponent } from '../components/add-to-page-modal/add-to-page-modal.component'; import { CardItem } from '../models/card-state'; import { AppService } from '../services/app.service'; -import { Clipboard } from '@angular/cdk/clipboard'; @Component({ template: '', diff --git a/src/src/app/components/help-modal/help-modal.component.ts b/src/src/app/components/help-modal/help-modal.component.ts index 1c0435e7..569ba8a7 100644 --- a/src/src/app/components/help-modal/help-modal.component.ts +++ b/src/src/app/components/help-modal/help-modal.component.ts @@ -1,4 +1,5 @@ import { Component } from '@angular/core'; + import { NavService } from '../../services/nav.service'; @Component({ diff --git a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts index c71317d5..ce0febbe 100644 --- a/src/src/app/components/note/edit-modal/note-edit-modal.component.ts +++ b/src/src/app/components/note/edit-modal/note-edit-modal.component.ts @@ -1,14 +1,11 @@ -import { Component, Inject } from '@angular/core'; -import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; - import { COMMA, ENTER, SEMICOLON } from '@angular/cdk/keycodes'; +import { Component, Inject } from '@angular/core'; +import { UntypedFormBuilder,UntypedFormGroup } from '@angular/forms'; import { MatChipInputEvent } from '@angular/material/chips'; - +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { UUID } from 'angular2-uuid'; - -import { NoteItem } from 'src/app/models/note-state'; import { CardItem } from 'src/app/models/card-state'; +import { NoteItem } from 'src/app/models/note-state'; import { AppService } from 'src/app/services/app.service'; @Component({ diff --git a/src/src/app/components/note/note-card.component.ts b/src/src/app/components/note/note-card.component.ts index 2789ca5b..5ade0530 100644 --- a/src/src/app/components/note/note-card.component.ts +++ b/src/src/app/components/note/note-card.component.ts @@ -1,10 +1,11 @@ -import { Component, ViewChild, ElementRef, Input } from '@angular/core'; -import { MatDialog } from '@angular/material/dialog'; import { Clipboard } from '@angular/cdk/clipboard'; -import { CardComponent } from '../card.component'; +import { Component, ElementRef, Input,ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { BibleReference } from 'src/app/common/bible-reference'; import { NoteItem } from 'src/app/models/note-state'; import { AppService } from 'src/app/services/app.service'; + +import { CardComponent } from '../card.component'; import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; import { NoteEditModalComponent } from './edit-modal/note-edit-modal.component'; diff --git a/src/src/app/components/page-edit-modal/page-edit-modal.component.ts b/src/src/app/components/page-edit-modal/page-edit-modal.component.ts index 57b63766..620520ca 100644 --- a/src/src/app/components/page-edit-modal/page-edit-modal.component.ts +++ b/src/src/app/components/page-edit-modal/page-edit-modal.component.ts @@ -1,6 +1,6 @@ import { Component, Inject } from '@angular/core'; -import { UntypedFormGroup, UntypedFormBuilder } from '@angular/forms'; -import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { UntypedFormBuilder,UntypedFormGroup } from '@angular/forms'; +import { MAT_DIALOG_DATA,MatDialogRef } from '@angular/material/dialog'; import { SavedPage } from 'src/app/models/page-state'; import { AppService } from 'src/app/services/app.service'; diff --git a/src/src/app/components/passage/passage-card.component.ts b/src/src/app/components/passage/passage-card.component.ts index 5822babc..e3c4a82d 100644 --- a/src/src/app/components/passage/passage-card.component.ts +++ b/src/src/app/components/passage/passage-card.component.ts @@ -1,13 +1,14 @@ -import { Component, OnInit, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; -import { MatDialog } from '@angular/material/dialog'; import { Clipboard } from '@angular/cdk/clipboard'; -import { NoteItem } from 'src/app/models/note-state'; -import { CardComponent } from 'src/app/components/card.component'; +import { ChangeDetectionStrategy,Component, ElementRef, OnInit, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { BibleReference, Overlap } from 'src/app/common/bible-reference'; -import { Paragraph, BiblePassageResult } from 'src/app/models/passage-state'; -import { CardItem } from 'src/app/models/card-state'; import { isNullOrUndefined } from 'src/app/common/helpers'; +import { CardComponent } from 'src/app/components/card.component'; +import { CardItem } from 'src/app/models/card-state'; +import { NoteItem } from 'src/app/models/note-state'; +import { BiblePassageResult,Paragraph } from 'src/app/models/passage-state'; import { AppService } from 'src/app/services/app.service'; + import { StrongsModalComponent } from '../strongs/modal/strongs-modal.component'; @Component({ diff --git a/src/src/app/components/saved-page-card/saved-page-card.component.ts b/src/src/app/components/saved-page-card/saved-page-card.component.ts index 3c8b9e2a..dd53a983 100644 --- a/src/src/app/components/saved-page-card/saved-page-card.component.ts +++ b/src/src/app/components/saved-page-card/saved-page-card.component.ts @@ -1,18 +1,19 @@ -import { Component, Input } from '@angular/core'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; +import { Component, Input } from '@angular/core'; import { MatDialog } from '@angular/material/dialog'; -import { Observable } from 'rxjs'; -import { SavedPage } from 'src/app/models/page-state'; -import { CardIcons, CardItem, CardType, DataReference } from 'src/app/models/card-state'; -import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; import { MatSnackBar } from '@angular/material/snack-bar'; -import { PageEditModalComponent } from '../page-edit-modal/page-edit-modal.component'; +import { Observable } from 'rxjs'; +import { getFromCardCache } from 'src/app/common/card-cache-operations'; import { HashTable } from 'src/app/common/hashtable'; import { SubscriberBase } from 'src/app/common/subscriber-base'; -import { getFromCardCache } from 'src/app/common/card-cache-operations'; +import { CardIcons, CardItem, CardType, DataReference } from 'src/app/models/card-state'; import { NoteItem } from 'src/app/models/note-state'; +import { SavedPage } from 'src/app/models/page-state'; import { AppService } from 'src/app/services/app.service'; +import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; +import { PageEditModalComponent } from '../page-edit-modal/page-edit-modal.component'; + @Component({ selector: 'app-saved-page-card', templateUrl: 'saved-page-card.component.html', diff --git a/src/src/app/components/settings/settings.component.ts b/src/src/app/components/settings/settings.component.ts index 7e1954a8..463850c9 100644 --- a/src/src/app/components/settings/settings.component.ts +++ b/src/src/app/components/settings/settings.component.ts @@ -1,26 +1,23 @@ import { Component } from '@angular/core'; -import { MatSlideToggleChange } from '@angular/material/slide-toggle'; -import { MatSelectChange } from '@angular/material/select'; -import { MatSnackBar } from '@angular/material/snack-bar'; -import { MatDialog } from '@angular/material/dialog'; - import { AngularFireAuth } from '@angular/fire/compat/auth'; -import firebase from '@firebase/app-compat'; +import { MatDialog } from '@angular/material/dialog'; +import { MatSelectChange } from '@angular/material/select'; +import { MatSlideToggleChange } from '@angular/material/slide-toggle'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { Capacitor } from '@capacitor/core'; import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth' - -import { SubscriberBase } from '../../common/subscriber-base'; -import { DisplaySettings } from 'src/app/models/app-state'; +import firebase from '@firebase/app-compat'; +import { Overlap } from 'src/app/common/bible-reference'; +import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; +import { PageEditModalComponent } from 'src/app/components/page-edit-modal/page-edit-modal.component'; import { CardFonts } from 'src/app/constants'; - +import { DisplaySettings } from 'src/app/models/app-state'; +import { SavedPage } from 'src/app/models/page-state'; +import { AppService } from 'src/app/services/app.service'; import { NavService } from 'src/app/services/nav.service'; +import { SubscriberBase } from '../../common/subscriber-base'; import { OkCancelModalComponent, OkCancelResult } from '../ok-cancel-modal/ok-cancel-modal.component'; -import { PageEditModalComponent } from 'src/app/components/page-edit-modal/page-edit-modal.component'; -import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; -import { SavedPage } from 'src/app/models/page-state'; -import { Overlap } from 'src/app/common/bible-reference'; -import { AppService } from 'src/app/services/app.service'; @Component({ selector: 'app-settings', diff --git a/src/src/app/components/strongs/card/strongs-card.component.ts b/src/src/app/components/strongs/card/strongs-card.component.ts index 9a1e0689..442cb027 100644 --- a/src/src/app/components/strongs/card/strongs-card.component.ts +++ b/src/src/app/components/strongs/card/strongs-card.component.ts @@ -1,11 +1,12 @@ -import { Component, ElementRef, ViewChild, ChangeDetectionStrategy, Input } from '@angular/core'; -import { MatDialog } from '@angular/material/dialog'; import { Clipboard } from '@angular/cdk/clipboard'; -import { StrongsModalComponent } from '../modal/strongs-modal.component'; -import { CardComponent } from 'src/app/components/card.component'; +import { ChangeDetectionStrategy, Component, ElementRef, Input,ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { BibleReference } from 'src/app/common/bible-reference'; -import { AppService } from 'src/app/services/app.service'; +import { CardComponent } from 'src/app/components/card.component'; import { StrongsResult } from 'src/app/models/strongs-state'; +import { AppService } from 'src/app/services/app.service'; + +import { StrongsModalComponent } from '../modal/strongs-modal.component'; @Component({ selector: 'app-strongs-card', diff --git a/src/src/app/components/strongs/modal/strongs-modal.component.ts b/src/src/app/components/strongs/modal/strongs-modal.component.ts index 878f1b25..cd8009cf 100644 --- a/src/src/app/components/strongs/modal/strongs-modal.component.ts +++ b/src/src/app/components/strongs/modal/strongs-modal.component.ts @@ -1,5 +1,5 @@ -import { Component, Inject, ChangeDetectionStrategy } from '@angular/core'; -import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; +import { ChangeDetectionStrategy,Component, Inject } from '@angular/core'; +import { MAT_DIALOG_DATA,MatDialogRef } from '@angular/material/dialog'; import { Observable } from 'rxjs'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardItem } from 'src/app/models/card-state'; diff --git a/src/src/app/components/strongs/strongs.component.ts b/src/src/app/components/strongs/strongs.component.ts index ab4c2f84..e4290e62 100644 --- a/src/src/app/components/strongs/strongs.component.ts +++ b/src/src/app/components/strongs/strongs.component.ts @@ -1,5 +1,6 @@ -import { Component, Input, Output, EventEmitter } from '@angular/core'; +import { Component, EventEmitter,Input, Output } from '@angular/core'; import { BibleReference } from 'src/app/common/bible-reference'; + import { StrongsResult } from '../../models/strongs-state'; @Component({ diff --git a/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts b/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts index 0a25f739..59346a64 100644 --- a/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts +++ b/src/src/app/components/verse-picker-modal/verse-picker-modal.component.ts @@ -1,6 +1,6 @@ import { Component } from '@angular/core'; import { MatDialogRef } from '@angular/material/dialog'; -import { Book, BibleReference } from 'src/app/common/bible-reference'; +import { BibleReference,Book } from 'src/app/common/bible-reference'; import { AppService } from 'src/app/services/app.service'; @Component({ diff --git a/src/src/app/components/words/words-card.component.ts b/src/src/app/components/words/words-card.component.ts index aa3e21b6..2bc9c1f0 100644 --- a/src/src/app/components/words/words-card.component.ts +++ b/src/src/app/components/words/words-card.component.ts @@ -1,6 +1,6 @@ -import { Component, ElementRef, ViewChild, ChangeDetectionStrategy } from '@angular/core'; -import { MatDialog } from '@angular/material/dialog'; import { Clipboard } from '@angular/cdk/clipboard'; +import { ChangeDetectionStrategy,Component, ElementRef, ViewChild } from '@angular/core'; +import { MatDialog } from '@angular/material/dialog'; import { BibleReference } from 'src/app/common/bible-reference'; import { CardComponent } from 'src/app/components/card.component'; import { WordLookupResult } from 'src/app/models/words-state'; diff --git a/src/src/app/models/app-state.ts b/src/src/app/models/app-state.ts index 4054710c..ee6ef3eb 100644 --- a/src/src/app/models/app-state.ts +++ b/src/src/app/models/app-state.ts @@ -1,9 +1,9 @@ -import { IStorable } from '../common/storable'; -import { NoteItem } from './note-state'; import { Overlap } from '../common/bible-reference'; -import { CardItem, CardIcons, DataReference } from './card-state'; -import { SavedPage } from './page-state'; import { HashTable } from '../common/hashtable'; +import { IStorable } from '../common/storable'; +import { CardIcons, CardItem, DataReference } from './card-state'; +import { NoteItem } from './note-state'; +import { SavedPage } from './page-state'; export interface AppState { readonly currentSavedPage: SavedPage; diff --git a/src/src/app/models/card-state.ts b/src/src/app/models/card-state.ts index 9fe420de..2804be7e 100644 --- a/src/src/app/models/card-state.ts +++ b/src/src/app/models/card-state.ts @@ -1,7 +1,7 @@ +import { NoteItem } from './note-state'; import { BiblePassageResult } from './passage-state'; import { StrongsResult } from './strongs-state'; import { WordLookupResult } from './words-state'; -import { NoteItem } from './note-state'; export type CardData = BiblePassageResult | StrongsResult | WordLookupResult | NoteItem; diff --git a/src/src/app/pages/notes-admin/notes-admin.page.ts b/src/src/app/pages/notes-admin/notes-admin.page.ts index a30ce40b..1dfaa483 100644 --- a/src/src/app/pages/notes-admin/notes-admin.page.ts +++ b/src/src/app/pages/notes-admin/notes-admin.page.ts @@ -1,8 +1,8 @@ import { Component, OnInit } from '@angular/core'; -import { CardItem, CardType } from 'src/app/models/card-state'; -import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; import { MatDialog } from '@angular/material/dialog'; import { SubscriberBase } from 'src/app/common/subscriber-base'; +import { NoteEditModalComponent } from 'src/app/components/note/edit-modal/note-edit-modal.component'; +import { CardItem, CardType } from 'src/app/models/card-state'; import { AppService } from 'src/app/services/app.service'; import { NavService } from 'src/app/services/nav.service'; diff --git a/src/src/app/pages/search/search.page.ts b/src/src/app/pages/search/search.page.ts index 97e22a66..9583a4d7 100644 --- a/src/src/app/pages/search/search.page.ts +++ b/src/src/app/pages/search/search.page.ts @@ -1,14 +1,15 @@ -import { Component, OnInit, ViewChild, ChangeDetectionStrategy, ElementRef } from '@angular/core'; -import { ActivatedRoute, Router, NavigationEnd } from '@angular/router'; +import { ChangeDetectionStrategy, Component, ElementRef,OnInit, ViewChild } from '@angular/core'; import { UntypedFormControl } from '@angular/forms'; +import { MatAutocomplete,MatAutocompleteTrigger } from '@angular/material/autocomplete'; import { MatDialog } from '@angular/material/dialog'; -import { MatAutocompleteTrigger, MatAutocomplete } from '@angular/material/autocomplete'; -import { NavService } from '../../services/nav.service'; +import { ActivatedRoute, NavigationEnd,Router } from '@angular/router'; +import { getFromCardCache } from 'src/app/common/card-cache-operations'; +import { CardItem, CardType } from 'src/app/models/card-state'; +import { AppService } from 'src/app/services/app.service'; + import { SubscriberBase } from '../../common/subscriber-base'; import { VersePickerModalComponent } from '../../components/verse-picker-modal/verse-picker-modal.component'; -import { CardItem, CardType } from 'src/app/models/card-state'; -import { getFromCardCache } from 'src/app/common/card-cache-operations'; -import { AppService } from 'src/app/services/app.service'; +import { NavService } from '../../services/nav.service'; @Component({ selector: 'app-search-page', diff --git a/src/src/app/services/app-state-reducer.spec.ts b/src/src/app/services/app-state-reducer.spec.ts index adcb4087..0aebc312 100644 --- a/src/src/app/services/app-state-reducer.spec.ts +++ b/src/src/app/services/app-state-reducer.spec.ts @@ -1,12 +1,13 @@ import { TestBed } from '@angular/core/testing'; + import { Overlap } from '../common/bible-reference'; -import { Storable, StorableType } from '../common/storable'; -import { CardType, CardItem } from '../models/card-state'; -import { SavedPage } from '../models/page-state'; -import { AppState, User } from '../models/app-state'; import { getCardCacheKey } from '../common/card-cache-operations'; import { MoveDirection } from '../common/move-direction'; +import { Storable, StorableType } from '../common/storable'; +import { AppState, User } from '../models/app-state'; +import { CardItem,CardType } from '../models/card-state'; import { NoteItem } from '../models/note-state'; +import { SavedPage } from '../models/page-state'; import { addCardsAction, addCardToSavedPageAction, diff --git a/src/src/app/services/app.service.ts b/src/src/app/services/app.service.ts index cd8bd8d3..43e8a3de 100644 --- a/src/src/app/services/app.service.ts +++ b/src/src/app/services/app.service.ts @@ -1,39 +1,37 @@ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; - import { UUID } from 'angular2-uuid'; +import { lastValueFrom } from 'rxjs'; +import { moveItem, moveItemUpOrDown } from '../common/array-operations'; +import { BibleReference, Overlap,Section } from '../common/bible-reference'; +import { getFromCardCache,removeFromCardCache, updateInCardCache } from '../common/card-cache-operations'; +import { mergeCardList } from '../common/card-operations'; import { HashTable } from '../common/hashtable'; import { MoveDirection } from '../common/move-direction'; -import { IReducingAction, createReducingService } from '../common/state-service'; +import { createReducingService,IReducingAction } from '../common/state-service'; import { IStorable, Storable, StorableType } from '../common/storable'; -import { mergeCardList } from '../common/card-operations'; -import { updateInCardCache, removeFromCardCache, getFromCardCache } from '../common/card-cache-operations'; -import { moveItem, moveItemUpOrDown } from '../common/array-operations'; -import { Section, BibleReference, Overlap } from '../common/bible-reference'; - -import { SavedPage } from '../models/page-state'; -import { CardType, CardItem, DataReference } from '../models/card-state'; -import { AppState, User, Settings, DisplaySettings, PageSettings, Error } from '../models/app-state'; +import { AppState, DisplaySettings, Error,PageSettings, Settings, User } from '../models/app-state'; +import { CardItem, CardType, DataReference } from '../models/card-state'; import { NoteItem } from '../models/note-state'; +import { SavedPage } from '../models/page-state'; import { - Paragraph, - BiblePassage, - BibleVerse, - BibleParagraphPassage, BibleParagraph, + BibleParagraphPassage, + BiblePassage, BiblePassageResult, + BibleVerse, + Paragraph, } from '../models/passage-state'; import { - StrongsDefinition, - StrongsCrossReference, RMACCrossReference, RMACDefinition, + StrongsCrossReference, + StrongsDefinition, StrongsDictionary, StrongsResult, } from '../models/strongs-state'; -import { WordToStem, IndexResult, WordLookupResult } from '../models/words-state'; -import { lastValueFrom } from 'rxjs'; +import { IndexResult, WordLookupResult,WordToStem } from '../models/words-state'; const initialState: AppState = { user: null, diff --git a/src/src/app/services/migration0to1.service.ts b/src/src/app/services/migration0to1.service.ts index b09df020..cf081137 100644 --- a/src/src/app/services/migration0to1.service.ts +++ b/src/src/app/services/migration0to1.service.ts @@ -2,13 +2,14 @@ import { Injectable } from '@angular/core'; import { AngularFireDatabase, AngularFireObject } from '@angular/fire/compat/database'; import { DataSnapshot } from '@angular/fire/compat/database/interfaces'; import { UUID } from 'angular2-uuid'; + import { Overlap } from '../common/bible-reference'; -import { Settings, User } from '../models/app-state'; -import { SavedPage } from '../models/page-state'; -import { CardType, DataReference } from '../models/card-state'; -import { StorageService } from './storage.service'; import { Storable, StorableType } from '../common/storable'; +import { Settings, User } from '../models/app-state'; +import { CardType, DataReference } from '../models/card-state'; +import { SavedPage } from '../models/page-state'; import { AppService } from './app.service'; +import { StorageService } from './storage.service'; @Injectable({ providedIn: 'root', diff --git a/src/src/app/services/storage.service.ts b/src/src/app/services/storage.service.ts index d5178aea..cb5fb5de 100644 --- a/src/src/app/services/storage.service.ts +++ b/src/src/app/services/storage.service.ts @@ -1,20 +1,19 @@ import { Injectable } from '@angular/core'; -import { StorageMap } from '@ngx-pwa/local-storage'; import { AngularFireDatabase, AngularFireObject } from '@angular/fire/compat/database'; import { DataSnapshot } from '@angular/fire/compat/database/interfaces'; +import { StorageMap } from '@ngx-pwa/local-storage'; +import { createSelector } from 'reselect'; +import { lastValueFrom } from 'rxjs'; -import { SubscriberBase } from '../common/subscriber-base'; +import { isNullOrUndefined } from '../common/helpers'; import { IStorable, StorableType, UserVersion } from '../common/storable'; -import { MigrationVersion0to1 } from './migration0to1.service'; - -import { User, Settings, AppState } from '../models/app-state'; +import { SubscriberBase } from '../common/subscriber-base'; +import { AppState,Settings, User } from '../models/app-state'; +import { DataReference } from '../models/card-state'; import { NoteItem } from '../models/note-state'; import { SavedPage } from '../models/page-state'; -import { isNullOrUndefined } from '../common/helpers'; -import { DataReference } from '../models/card-state'; -import { createSelector } from 'reselect'; import { AppService } from './app.service'; -import { lastValueFrom } from 'rxjs'; +import { MigrationVersion0to1 } from './migration0to1.service'; /** * This class handles all the storage needs of the application. It handles both diff --git a/src/src/test.ts b/src/src/test.ts index caf71351..bb0c8856 100644 --- a/src/src/test.ts +++ b/src/src/test.ts @@ -1,4 +1,5 @@ import 'zone.js/testing'; + import { getTestBed } from '@angular/core/testing'; import { BrowserDynamicTestingModule, From 058ac594f3a77e6b35c2c351921d6c7b88b2138f Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 14:45:21 -0500 Subject: [PATCH 17/20] update package lock --- src/package-lock.json | 195 ++++++++++++++---------------------------- 1 file changed, 64 insertions(+), 131 deletions(-) diff --git a/src/package-lock.json b/src/package-lock.json index 7be6ee7f..b6e2bb27 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -3085,7 +3085,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.1.90" } @@ -3211,22 +3211,6 @@ "node": ">=10.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", - "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -4401,7 +4385,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, + "devOptional": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -4418,7 +4402,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -4430,7 +4414,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, + "devOptional": true, "engines": { "node": ">=12" }, @@ -4442,13 +4426,13 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "devOptional": true }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, + "devOptional": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -4465,7 +4449,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -4480,7 +4464,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -5447,7 +5431,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.1.tgz", "integrity": "sha512-H4FrOVtNyWC8MUwL3UfjOsAihHvT1Pe8POj3JvjXhSTJipsZMtgUALCT4mGyYZNxymkUfOw3PUj6dE4QPp6osQ==", - "dev": true, + "devOptional": true, "dependencies": { "agent-base": "^7.1.0", "http-proxy-agent": "^7.0.0", @@ -5463,7 +5447,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, + "devOptional": true, "engines": { "node": "14 || >=16.14" } @@ -5472,7 +5456,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", - "dev": true, + "devOptional": true, "dependencies": { "semver": "^7.3.5" }, @@ -5746,22 +5730,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, - "node_modules/@nx/nx-darwin-arm64": { - "version": "17.2.8", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", - "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@opentelemetry/api": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", @@ -5784,7 +5752,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -5885,19 +5852,6 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", - "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/@schematics/angular": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.2.1.tgz", @@ -7176,7 +7130,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, + "devOptional": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -8328,7 +8282,7 @@ "version": "18.0.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", "integrity": "sha512-r3NU8h/P+4lVUHfeRw1dtgQYar3DZMm4/cm2bZgOvrFC/su7budSOeqh52VJIC4U4iG1WWwV6vRW0znqBvxNuw==", - "dev": true, + "devOptional": true, "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -8351,7 +8305,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, + "devOptional": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -8373,7 +8327,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, + "devOptional": true, "engines": { "node": "14 || >=16.14" } @@ -8619,7 +8573,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -11422,7 +11376,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "devOptional": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -11676,7 +11630,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -11685,7 +11639,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "dev": true + "devOptional": true }, "node_modules/errno": { "version": "0.1.8", @@ -12561,7 +12515,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "devOptional": true }, "node_modules/express": { "version": "4.18.2", @@ -13608,7 +13562,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -13734,7 +13687,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, + "devOptional": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -13750,7 +13703,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, + "devOptional": true, "engines": { "node": ">=14" }, @@ -13854,7 +13807,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^7.0.3" }, @@ -13877,7 +13830,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -14813,7 +14765,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "dev": true + "devOptional": true }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -14920,7 +14872,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "dev": true, + "devOptional": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -15072,7 +15024,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, + "devOptional": true, "engines": { "node": ">=8" } @@ -15284,7 +15236,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.5.tgz", "integrity": "sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg==", - "dev": true, "optional": true, "bin": { "install-from-cache": "bin/install-from-cache.js", @@ -15487,7 +15438,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "devOptional": true }, "node_modules/is-module": { "version": "1.0.0", @@ -15864,7 +15815,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, + "devOptional": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -17526,7 +17477,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "dev": true, + "devOptional": true, "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -18281,7 +18232,7 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, + "devOptional": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -18304,7 +18255,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -18313,7 +18264,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^7.0.3" }, @@ -18325,7 +18276,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -18342,7 +18293,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18354,7 +18305,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18366,7 +18317,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/minipass-json-stream": { "version": "1.0.1", @@ -18409,7 +18360,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18421,7 +18372,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18433,13 +18384,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18451,7 +18402,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "devOptional": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18463,7 +18414,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "devOptional": true }, "node_modules/minizlib": { "version": "2.1.2", @@ -18594,7 +18545,6 @@ "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true, "optional": true }, "node_modules/nanoid": { @@ -18809,7 +18759,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", - "dev": true, + "devOptional": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -18845,7 +18795,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -18854,7 +18804,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "dev": true, + "devOptional": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -18876,13 +18826,13 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true + "devOptional": true }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=16" } @@ -18891,7 +18841,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", - "dev": true, + "devOptional": true, "dependencies": { "abbrev": "^2.0.0" }, @@ -18906,7 +18856,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "dev": true, + "devOptional": true, "dependencies": { "isexe": "^3.1.1" }, @@ -19740,7 +19690,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, + "devOptional": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -19993,7 +19943,7 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, + "devOptional": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -20009,7 +19959,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "dev": true, + "devOptional": true, "engines": { "node": "14 || >=16.14" } @@ -20444,7 +20394,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "dev": true, + "devOptional": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -20488,7 +20438,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "dev": true, + "devOptional": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -20501,7 +20451,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, + "devOptional": true, "engines": { "node": ">= 4" } @@ -20987,7 +20937,6 @@ "version": "1.20.9", "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.9.tgz", "integrity": "sha512-ZYcPTFr5ha2xq3WQjBDTF9CWPSDK1z28MLh5UFRxc//7X8BNQ3A7yR7ITnP0jO346661ertdKVFqw1qoL3FMEQ==", - "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -22614,7 +22563,7 @@ "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, + "devOptional": true, "dependencies": { "minipass": "^7.0.3" }, @@ -22721,7 +22670,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "devOptional": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -22757,7 +22706,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -23904,7 +23853,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "dev": true, + "devOptional": true, "dependencies": { "unique-slug": "^4.0.0" }, @@ -23916,7 +23865,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "dev": true, + "devOptional": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -24327,22 +24276,6 @@ } } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, "node_modules/vite/node_modules/esbuild": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", @@ -25010,7 +24943,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "devOptional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25027,7 +24960,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "devOptional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -25042,7 +24975,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "devOptional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -25054,7 +24987,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "devOptional": true }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", From 0efe9c06f2de6a9d4b2357a2598d10ec98db782b Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 15:29:31 -0500 Subject: [PATCH 18/20] lets see if this fixes the lock file situation --- src/.eslintrc.json | 4 +- src/package-lock.json | 912 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 914 insertions(+), 2 deletions(-) diff --git a/src/.eslintrc.json b/src/.eslintrc.json index 7ad78bbe..9e92a48b 100644 --- a/src/.eslintrc.json +++ b/src/.eslintrc.json @@ -49,8 +49,8 @@ } ], "optimize-regex/optimize-regex": "warn", - "simple-import-sort/imports": "error", - "simple-import-sort/exports": "error" + "simple-import-sort/imports": "warn", + "simple-import-sort/exports": "warn" } }, { diff --git a/src/package-lock.json b/src/package-lock.json index b6e2bb27..5e02a972 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -3211,6 +3211,374 @@ "node": ">=10.0.0" } }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", @@ -5730,6 +6098,166 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-17.2.8.tgz", + "integrity": "sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-17.2.8.tgz", + "integrity": "sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-17.2.8.tgz", + "integrity": "sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-17.2.8.tgz", + "integrity": "sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-17.2.8.tgz", + "integrity": "sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-17.2.8.tgz", + "integrity": "sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-17.2.8.tgz", + "integrity": "sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-17.2.8.tgz", + "integrity": "sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-17.2.8.tgz", + "integrity": "sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "17.2.8", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-17.2.8.tgz", + "integrity": "sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/@opentelemetry/api": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", @@ -5852,6 +6380,19 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz", + "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, "node_modules/@schematics/angular": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-17.2.1.tgz", @@ -13562,6 +14103,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "devOptional": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -15236,6 +15778,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/install-artifact-from-github/-/install-artifact-from-github-1.3.5.tgz", "integrity": "sha512-gZHC7f/cJgXz7MXlHFBxPVMsvIbev1OQN1uKQYKVJDydGNm9oYf9JstbU4Atnh/eSvk41WtEovoRm+8IF686xg==", + "dev": true, "optional": true, "bin": { "install-from-cache": "bin/install-from-cache.js", @@ -24276,6 +24819,374 @@ } } }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/vite/node_modules/esbuild": { "version": "0.19.12", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", @@ -25264,3 +26175,4 @@ } } } + From 098d2527eb45cc3653ad2560a1ffbb5cb3a04913 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 15:46:12 -0500 Subject: [PATCH 19/20] remove very old and apparently unused dependency --- src/dependency-tree.txt | 4534 +++++++++++++++++++++++++++++++++++++++ src/package-lock.json | 2160 +------------------ src/package.json | 1 - 3 files changed, 4628 insertions(+), 2067 deletions(-) create mode 100644 src/dependency-tree.txt diff --git a/src/dependency-tree.txt b/src/dependency-tree.txt new file mode 100644 index 00000000..a7e4e9b9 --- /dev/null +++ b/src/dependency-tree.txt @@ -0,0 +1,4534 @@ +dynamicbible@4.0.0 /Users/walljm/projects/walljm/dynamicbible/src +├─┬ @angular-devkit/architect@0.1702.1 +│ ├─┬ @angular-devkit/core@17.2.1 +│ │ ├─┬ ajv-formats@2.1.1 +│ │ │ └── ajv@8.12.0 deduped +│ │ ├─┬ ajv@8.12.0 +│ │ │ ├── fast-deep-equal@3.1.3 deduped +│ │ │ ├── json-schema-traverse@1.0.0 deduped +│ │ │ ├── require-from-string@2.0.2 +│ │ │ └── uri-js@4.4.1 deduped +│ │ ├── chokidar@3.6.0 deduped +│ │ ├── jsonc-parser@3.2.1 deduped +│ │ ├── picomatch@4.0.1 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ └── source-map@0.7.4 +│ └── rxjs@7.8.1 deduped +├─┬ @angular-devkit/build-angular@17.2.1 +│ ├─┬ @ampproject/remapping@2.2.1 +│ │ ├─┬ @jridgewell/gen-mapping@0.3.4 +│ │ │ ├── @jridgewell/set-array@1.1.2 +│ │ │ ├── @jridgewell/sourcemap-codec@1.4.15 deduped +│ │ │ └── @jridgewell/trace-mapping@0.3.23 deduped +│ │ └─┬ @jridgewell/trace-mapping@0.3.23 +│ │ ├── @jridgewell/resolve-uri@3.1.2 +│ │ └── @jridgewell/sourcemap-codec@1.4.15 deduped +│ ├── @angular-devkit/architect@0.1702.1 deduped +│ ├─┬ @angular-devkit/build-webpack@0.1702.1 +│ │ ├── @angular-devkit/architect@0.1702.1 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── webpack-dev-server@4.15.1 deduped +│ │ └── webpack@5.90.1 deduped +│ ├── @angular-devkit/core@17.2.1 deduped +│ ├── @angular/compiler-cli@17.2.3 deduped +│ ├── UNMET OPTIONAL DEPENDENCY @angular/localize@^17.0.0 +│ ├── UNMET OPTIONAL DEPENDENCY @angular/platform-server@^17.0.0 +│ ├── UNMET OPTIONAL DEPENDENCY @angular/service-worker@^17.0.0 +│ ├─┬ @babel/core@7.23.9 +│ │ ├── @ampproject/remapping@2.2.1 deduped +│ │ ├─┬ @babel/code-frame@7.23.5 +│ │ │ ├─┬ @babel/highlight@7.23.4 +│ │ │ │ ├── @babel/helper-validator-identifier@7.22.20 deduped +│ │ │ │ ├── chalk@2.4.2 deduped +│ │ │ │ └── js-tokens@4.0.0 +│ │ │ └─┬ chalk@2.4.2 +│ │ │ ├─┬ ansi-styles@3.2.1 +│ │ │ │ └─┬ color-convert@1.9.3 +│ │ │ │ └── color-name@1.1.3 +│ │ │ ├── escape-string-regexp@1.0.5 deduped +│ │ │ └─┬ supports-color@5.5.0 +│ │ │ └── has-flag@3.0.0 +│ │ ├── @babel/generator@7.23.6 deduped +│ │ ├─┬ @babel/helper-compilation-targets@7.23.6 +│ │ │ ├── @babel/compat-data@7.23.5 deduped +│ │ │ ├── @babel/helper-validator-option@7.23.5 deduped +│ │ │ ├── browserslist@4.23.0 deduped +│ │ │ ├─┬ lru-cache@5.1.1 +│ │ │ │ └── yallist@3.1.1 +│ │ │ └── semver@6.3.1 +│ │ ├─┬ @babel/helper-module-transforms@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ ├── @babel/helper-module-imports@7.22.15 deduped +│ │ │ ├─┬ @babel/helper-simple-access@7.22.5 +│ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ ├── @babel/helper-split-export-declaration@7.22.6 deduped +│ │ │ └── @babel/helper-validator-identifier@7.22.20 +│ │ ├─┬ @babel/helpers@7.24.0 +│ │ │ ├── @babel/template@7.24.0 deduped +│ │ │ ├── @babel/traverse@7.24.0 deduped +│ │ │ └── @babel/types@7.24.0 deduped +│ │ ├── @babel/parser@7.24.0 +│ │ ├─┬ @babel/template@7.24.0 +│ │ │ ├── @babel/code-frame@7.23.5 deduped +│ │ │ ├── @babel/parser@7.24.0 deduped +│ │ │ └── @babel/types@7.24.0 deduped +│ │ ├─┬ @babel/traverse@7.24.0 +│ │ │ ├── @babel/code-frame@7.23.5 deduped +│ │ │ ├── @babel/generator@7.23.6 deduped +│ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ ├─┬ @babel/helper-function-name@7.23.0 +│ │ │ │ ├── @babel/template@7.24.0 deduped +│ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ ├─┬ @babel/helper-hoist-variables@7.22.5 +│ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ ├── @babel/helper-split-export-declaration@7.22.6 deduped +│ │ │ ├── @babel/parser@7.24.0 deduped +│ │ │ ├── @babel/types@7.24.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ └── globals@11.12.0 +│ │ ├─┬ @babel/types@7.24.0 +│ │ │ ├── @babel/helper-string-parser@7.23.4 +│ │ │ ├── @babel/helper-validator-identifier@7.22.20 deduped +│ │ │ └── to-fast-properties@2.0.0 +│ │ ├── convert-source-map@2.0.0 +│ │ ├── debug@4.3.4 deduped +│ │ ├── gensync@1.0.0-beta.2 +│ │ ├── json5@2.2.3 +│ │ └── semver@6.3.1 +│ ├─┬ @babel/generator@7.23.6 +│ │ ├── @babel/types@7.24.0 deduped +│ │ ├── @jridgewell/gen-mapping@0.3.4 deduped +│ │ ├── @jridgewell/trace-mapping@0.3.23 deduped +│ │ └── jsesc@2.5.2 +│ ├─┬ @babel/helper-annotate-as-pure@7.22.5 +│ │ └── @babel/types@7.24.0 deduped +│ ├─┬ @babel/helper-split-export-declaration@7.22.6 +│ │ └── @babel/types@7.24.0 deduped +│ ├─┬ @babel/plugin-transform-async-generator-functions@7.23.9 +│ │ ├── @babel/core@7.23.9 deduped +│ │ ├── @babel/helper-environment-visitor@7.22.20 +│ │ ├── @babel/helper-plugin-utils@7.24.0 +│ │ ├─┬ @babel/helper-remap-async-to-generator@7.22.20 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-annotate-as-pure@7.22.5 deduped +│ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ └─┬ @babel/helper-wrap-function@7.22.20 +│ │ │ ├── @babel/helper-function-name@7.23.0 deduped +│ │ │ ├── @babel/template@7.24.0 deduped +│ │ │ └── @babel/types@7.24.0 deduped +│ │ └─┬ @babel/plugin-syntax-async-generators@7.8.4 +│ │ ├── @babel/core@7.23.9 deduped +│ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ ├─┬ @babel/plugin-transform-async-to-generator@7.23.3 +│ │ ├── @babel/core@7.23.9 deduped +│ │ ├─┬ @babel/helper-module-imports@7.22.15 +│ │ │ └── @babel/types@7.24.0 deduped +│ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ └── @babel/helper-remap-async-to-generator@7.22.20 deduped +│ ├─┬ @babel/plugin-transform-runtime@7.23.9 +│ │ ├── @babel/core@7.23.9 deduped +│ │ ├── @babel/helper-module-imports@7.22.15 deduped +│ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ babel-plugin-polyfill-corejs2@0.4.8 +│ │ │ ├── @babel/compat-data@7.23.5 deduped +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├─┬ @babel/helper-define-polyfill-provider@0.5.0 +│ │ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ │ ├── @babel/helper-compilation-targets@7.23.6 deduped +│ │ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ ├── lodash.debounce@4.0.8 +│ │ │ │ └── resolve@1.22.8 deduped +│ │ │ └── semver@6.3.1 +│ │ ├─┬ babel-plugin-polyfill-corejs3@0.9.0 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-define-polyfill-provider@0.5.0 deduped +│ │ │ └── core-js-compat@3.36.0 deduped +│ │ ├─┬ babel-plugin-polyfill-regenerator@0.5.5 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-define-polyfill-provider@0.5.0 deduped +│ │ └── semver@6.3.1 +│ ├─┬ @babel/preset-env@7.23.9 +│ │ ├── @babel/compat-data@7.23.5 +│ │ ├── @babel/core@7.23.9 deduped +│ │ ├── @babel/helper-compilation-targets@7.23.6 deduped +│ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├── @babel/helper-validator-option@7.23.5 +│ │ ├─┬ @babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ ├─┬ @babel/helper-skip-transparent-expression-wrappers@7.22.5 +│ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ └── @babel/plugin-transform-optional-chaining@7.23.4 deduped +│ │ ├─┬ @babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2 +│ │ │ └── @babel/core@7.23.9 deduped +│ │ ├── @babel/plugin-syntax-async-generators@7.8.4 deduped +│ │ ├─┬ @babel/plugin-syntax-class-properties@7.12.13 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-class-static-block@7.14.5 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-dynamic-import@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-export-namespace-from@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-import-assertions@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-import-attributes@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-import-meta@7.10.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-json-strings@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-logical-assignment-operators@7.10.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-nullish-coalescing-operator@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-numeric-separator@7.10.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-object-rest-spread@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-optional-catch-binding@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-optional-chaining@7.8.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-private-property-in-object@7.14.5 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-top-level-await@7.14.5 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-syntax-unicode-sets-regex@7.18.6 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├─┬ @babel/helper-create-regexp-features-plugin@7.22.15 +│ │ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ │ ├── @babel/helper-annotate-as-pure@7.22.5 deduped +│ │ │ │ ├─┬ regexpu-core@5.3.2 +│ │ │ │ │ ├── @babel/regjsgen@0.8.0 +│ │ │ │ │ ├─┬ regenerate-unicode-properties@10.1.1 +│ │ │ │ │ │ └── regenerate@1.4.2 deduped +│ │ │ │ │ ├── regenerate@1.4.2 +│ │ │ │ │ ├─┬ regjsparser@0.9.1 +│ │ │ │ │ │ └── jsesc@0.5.0 +│ │ │ │ │ ├─┬ unicode-match-property-ecmascript@2.0.0 +│ │ │ │ │ │ ├── unicode-canonical-property-names-ecmascript@2.0.0 +│ │ │ │ │ │ └── unicode-property-aliases-ecmascript@2.1.0 +│ │ │ │ │ └── unicode-match-property-value-ecmascript@2.1.0 +│ │ │ │ └── semver@6.3.1 +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-arrow-functions@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├── @babel/plugin-transform-async-generator-functions@7.23.9 deduped +│ │ ├── @babel/plugin-transform-async-to-generator@7.23.3 deduped +│ │ ├─┬ @babel/plugin-transform-block-scoped-functions@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-block-scoping@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-class-properties@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├─┬ @babel/helper-create-class-features-plugin@7.24.0 +│ │ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ │ ├── @babel/helper-annotate-as-pure@7.22.5 deduped +│ │ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ │ ├── @babel/helper-function-name@7.23.0 deduped +│ │ │ │ ├─┬ @babel/helper-member-expression-to-functions@7.23.0 +│ │ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ │ ├─┬ @babel/helper-optimise-call-expression@7.22.5 +│ │ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ │ ├── @babel/helper-replace-supers@7.22.20 deduped +│ │ │ │ ├── @babel/helper-skip-transparent-expression-wrappers@7.22.5 deduped +│ │ │ │ ├── @babel/helper-split-export-declaration@7.22.6 deduped +│ │ │ │ └── semver@6.3.1 +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-class-static-block@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-class-features-plugin@7.24.0 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-class-static-block@7.14.5 deduped +│ │ ├─┬ @babel/plugin-transform-classes@7.23.8 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-annotate-as-pure@7.22.5 deduped +│ │ │ ├── @babel/helper-compilation-targets@7.23.6 deduped +│ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ ├── @babel/helper-function-name@7.23.0 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ ├─┬ @babel/helper-replace-supers@7.22.20 +│ │ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ │ ├── @babel/helper-environment-visitor@7.22.20 deduped +│ │ │ │ ├── @babel/helper-member-expression-to-functions@7.23.0 deduped +│ │ │ │ └── @babel/helper-optimise-call-expression@7.22.5 deduped +│ │ │ ├── @babel/helper-split-export-declaration@7.22.6 deduped +│ │ │ └── globals@11.12.0 deduped +│ │ ├─┬ @babel/plugin-transform-computed-properties@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/template@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-destructuring@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-dotall-regex@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-regexp-features-plugin@7.22.15 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-duplicate-keys@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-dynamic-import@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-dynamic-import@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-exponentiation-operator@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├─┬ @babel/helper-builder-binary-assignment-operator-visitor@7.22.15 +│ │ │ │ └── @babel/types@7.24.0 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-export-namespace-from@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-export-namespace-from@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-for-of@7.23.6 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/helper-skip-transparent-expression-wrappers@7.22.5 deduped +│ │ ├─┬ @babel/plugin-transform-function-name@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-compilation-targets@7.23.6 deduped +│ │ │ ├── @babel/helper-function-name@7.23.0 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-json-strings@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-json-strings@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-literals@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-logical-assignment-operators@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-logical-assignment-operators@7.10.4 deduped +│ │ ├─┬ @babel/plugin-transform-member-expression-literals@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-modules-amd@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-module-transforms@7.23.3 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-modules-commonjs@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-module-transforms@7.23.3 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/helper-simple-access@7.22.5 deduped +│ │ ├─┬ @babel/plugin-transform-modules-systemjs@7.23.9 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-hoist-variables@7.22.5 deduped +│ │ │ ├── @babel/helper-module-transforms@7.23.3 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/helper-validator-identifier@7.22.20 deduped +│ │ ├─┬ @babel/plugin-transform-modules-umd@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-module-transforms@7.23.3 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-named-capturing-groups-regex@7.22.5 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-regexp-features-plugin@7.22.15 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-new-target@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-nullish-coalescing-operator@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-nullish-coalescing-operator@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-numeric-separator@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-numeric-separator@7.10.4 deduped +│ │ ├─┬ @babel/plugin-transform-object-rest-spread@7.24.0 +│ │ │ ├── @babel/compat-data@7.23.5 deduped +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-compilation-targets@7.23.6 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ ├── @babel/plugin-syntax-object-rest-spread@7.8.3 deduped +│ │ │ └── @babel/plugin-transform-parameters@7.23.3 deduped +│ │ ├─┬ @babel/plugin-transform-object-super@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/helper-replace-supers@7.22.20 deduped +│ │ ├─┬ @babel/plugin-transform-optional-catch-binding@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-optional-catch-binding@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-optional-chaining@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ ├── @babel/helper-skip-transparent-expression-wrappers@7.22.5 deduped +│ │ │ └── @babel/plugin-syntax-optional-chaining@7.8.3 deduped +│ │ ├─┬ @babel/plugin-transform-parameters@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-private-methods@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-class-features-plugin@7.24.0 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-private-property-in-object@7.23.4 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-annotate-as-pure@7.22.5 deduped +│ │ │ ├── @babel/helper-create-class-features-plugin@7.24.0 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/plugin-syntax-private-property-in-object@7.14.5 deduped +│ │ ├─┬ @babel/plugin-transform-property-literals@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-regenerator@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └─┬ regenerator-transform@0.15.2 +│ │ │ └── @babel/runtime@7.23.9 deduped +│ │ ├─┬ @babel/plugin-transform-reserved-words@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-shorthand-properties@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-spread@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ └── @babel/helper-skip-transparent-expression-wrappers@7.22.5 deduped +│ │ ├─┬ @babel/plugin-transform-sticky-regex@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-template-literals@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-typeof-symbol@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-unicode-escapes@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-unicode-property-regex@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-regexp-features-plugin@7.22.15 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-unicode-regex@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-regexp-features-plugin@7.22.15 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/plugin-transform-unicode-sets-regex@7.23.3 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-create-regexp-features-plugin@7.22.15 deduped +│ │ │ └── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @babel/preset-modules@0.1.6-no-external-plugins +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ │ ├── @babel/types@7.24.0 deduped +│ │ │ └── esutils@2.0.3 deduped +│ │ ├── babel-plugin-polyfill-corejs2@0.4.8 deduped +│ │ ├── babel-plugin-polyfill-corejs3@0.9.0 deduped +│ │ ├── babel-plugin-polyfill-regenerator@0.5.5 deduped +│ │ ├─┬ core-js-compat@3.36.0 +│ │ │ └── browserslist@4.23.0 deduped +│ │ └── semver@6.3.1 +│ ├─┬ @babel/runtime@7.23.9 +│ │ └── regenerator-runtime@0.14.1 +│ ├── @discoveryjs/json-ext@0.5.7 +│ ├─┬ @ngtools/webpack@17.2.1 +│ │ ├── @angular/compiler-cli@17.2.3 deduped +│ │ ├── typescript@5.3.3 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ @vitejs/plugin-basic-ssl@1.1.0 +│ │ └── vite@5.0.12 deduped +│ ├── UNMET OPTIONAL DEPENDENCY @web/test-runner@^0.18.0 +│ ├── ansi-colors@4.1.3 +│ ├─┬ autoprefixer@10.4.17 +│ │ ├── browserslist@4.23.0 deduped +│ │ ├── caniuse-lite@1.0.30001591 +│ │ ├── fraction.js@4.3.7 +│ │ ├── normalize-range@0.1.2 +│ │ ├── picocolors@1.0.0 deduped +│ │ ├── postcss-value-parser@4.2.0 +│ │ └── postcss@8.4.35 deduped +│ ├─┬ babel-loader@9.1.3 +│ │ ├── @babel/core@7.23.9 deduped +│ │ ├─┬ find-cache-dir@4.0.0 +│ │ │ ├── common-path-prefix@3.0.0 +│ │ │ └─┬ pkg-dir@7.0.0 +│ │ │ └─┬ find-up@6.3.0 +│ │ │ ├─┬ locate-path@7.2.0 +│ │ │ │ └─┬ p-locate@6.0.0 +│ │ │ │ └─┬ p-limit@4.0.0 +│ │ │ │ └── yocto-queue@1.0.0 +│ │ │ └── path-exists@5.0.0 +│ │ ├─┬ schema-utils@4.2.0 +│ │ │ ├── @types/json-schema@7.0.15 deduped +│ │ │ ├── ajv-formats@2.1.1 deduped +│ │ │ ├─┬ ajv-keywords@5.1.0 +│ │ │ │ ├── ajv@8.12.0 deduped +│ │ │ │ └── fast-deep-equal@3.1.3 deduped +│ │ │ └── ajv@8.12.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ babel-plugin-istanbul@6.1.1 +│ │ ├── @babel/helper-plugin-utils@7.24.0 deduped +│ │ ├─┬ @istanbuljs/load-nyc-config@1.1.0 +│ │ │ ├── camelcase@5.3.1 +│ │ │ ├─┬ find-up@4.1.0 +│ │ │ │ ├─┬ locate-path@5.0.0 +│ │ │ │ │ └─┬ p-locate@4.1.0 +│ │ │ │ │ └─┬ p-limit@2.3.0 +│ │ │ │ │ └── p-try@2.2.0 +│ │ │ │ └── path-exists@4.0.0 deduped +│ │ │ ├── get-package-type@0.1.0 +│ │ │ ├── js-yaml@3.14.1 deduped +│ │ │ └── resolve-from@5.0.0 +│ │ ├── @istanbuljs/schema@0.1.3 +│ │ ├─┬ istanbul-lib-instrument@5.2.1 +│ │ │ ├── @babel/core@7.23.9 deduped +│ │ │ ├── @babel/parser@7.24.0 deduped +│ │ │ ├── @istanbuljs/schema@0.1.3 deduped +│ │ │ ├── istanbul-lib-coverage@3.2.2 deduped +│ │ │ └── semver@6.3.1 +│ │ └─┬ test-exclude@6.0.0 +│ │ ├── @istanbuljs/schema@0.1.3 deduped +│ │ ├── glob@7.2.3 deduped +│ │ └─┬ minimatch@3.1.2 +│ │ └─┬ brace-expansion@1.1.11 +│ │ ├── balanced-match@1.0.2 deduped +│ │ └── concat-map@0.0.1 deduped +│ ├── UNMET OPTIONAL DEPENDENCY browser-sync@^3.0.2 +│ ├─┬ browserslist@4.23.0 +│ │ ├── caniuse-lite@1.0.30001591 deduped +│ │ ├── electron-to-chromium@1.4.685 +│ │ ├── node-releases@2.0.14 +│ │ └─┬ update-browserslist-db@1.0.13 +│ │ ├── browserslist@4.23.0 deduped +│ │ ├── escalade@3.1.2 deduped +│ │ └── picocolors@1.0.0 deduped +│ ├─┬ copy-webpack-plugin@11.0.0 +│ │ ├── fast-glob@3.3.2 deduped +│ │ ├─┬ glob-parent@6.0.2 +│ │ │ └── is-glob@4.0.3 deduped +│ │ ├─┬ globby@13.2.2 +│ │ │ ├─┬ dir-glob@3.0.1 +│ │ │ │ └── path-type@4.0.0 +│ │ │ ├── fast-glob@3.3.2 deduped +│ │ │ ├── ignore@5.3.0 deduped +│ │ │ ├── merge2@1.4.1 deduped +│ │ │ └── slash@4.0.0 +│ │ ├── normalize-path@3.0.0 +│ │ ├── schema-utils@4.2.0 deduped +│ │ ├─┬ serialize-javascript@6.0.2 +│ │ │ └─┬ randombytes@2.1.0 +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ critters@0.0.20 +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├─┬ css-select@5.1.0 +│ │ │ ├── boolbase@1.0.0 +│ │ │ ├── css-what@6.1.0 +│ │ │ ├── domhandler@5.0.3 deduped +│ │ │ ├─┬ domutils@3.1.0 +│ │ │ │ ├── dom-serializer@2.0.0 deduped +│ │ │ │ ├── domelementtype@2.3.0 deduped +│ │ │ │ └── domhandler@5.0.3 deduped +│ │ │ └─┬ nth-check@2.1.1 +│ │ │ └── boolbase@1.0.0 deduped +│ │ ├─┬ dom-serializer@2.0.0 +│ │ │ ├── domelementtype@2.3.0 +│ │ │ ├── domhandler@5.0.3 deduped +│ │ │ └── entities@4.5.0 deduped +│ │ ├─┬ domhandler@5.0.3 +│ │ │ └── domelementtype@2.3.0 deduped +│ │ ├─┬ htmlparser2@8.0.2 +│ │ │ ├── domelementtype@2.3.0 deduped +│ │ │ ├── domhandler@5.0.3 deduped +│ │ │ ├── domutils@3.1.0 deduped +│ │ │ └── entities@4.5.0 deduped +│ │ ├── postcss@8.4.35 deduped +│ │ └── pretty-bytes@5.6.0 deduped +│ ├─┬ css-loader@6.10.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @rspack/core@0.x || 1.x +│ │ ├─┬ icss-utils@5.1.0 +│ │ │ └── postcss@8.4.35 deduped +│ │ ├─┬ postcss-modules-extract-imports@3.0.0 +│ │ │ └── postcss@8.4.35 deduped +│ │ ├─┬ postcss-modules-local-by-default@4.0.4 +│ │ │ ├── icss-utils@5.1.0 deduped +│ │ │ ├─┬ postcss-selector-parser@6.0.15 +│ │ │ │ ├── cssesc@3.0.0 +│ │ │ │ └── util-deprecate@1.0.2 deduped +│ │ │ ├── postcss-value-parser@4.2.0 deduped +│ │ │ └── postcss@8.4.35 deduped +│ │ ├─┬ postcss-modules-scope@3.1.1 +│ │ │ ├── postcss-selector-parser@6.0.15 deduped +│ │ │ └── postcss@8.4.35 deduped +│ │ ├─┬ postcss-modules-values@4.0.0 +│ │ │ ├── icss-utils@5.1.0 deduped +│ │ │ └── postcss@8.4.35 deduped +│ │ ├── postcss-value-parser@4.2.0 deduped +│ │ ├── postcss@8.4.35 deduped +│ │ ├── semver@7.6.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├── esbuild-wasm@0.20.0 +│ ├─┬ esbuild@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/aix-ppc64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-arm@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-arm64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-x64@0.20.0 +│ │ ├── @esbuild/darwin-arm64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/darwin-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/freebsd-arm64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/freebsd-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-arm@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-arm64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-ia32@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-loong64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-mips64el@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-ppc64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-riscv64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-s390x@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/netbsd-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/openbsd-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/sunos-x64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/win32-arm64@0.20.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/win32-ia32@0.20.0 +│ │ └── UNMET OPTIONAL DEPENDENCY @esbuild/win32-x64@0.20.0 +│ ├─┬ fast-glob@3.3.2 +│ │ ├── @nodelib/fs.stat@2.0.5 +│ │ ├── @nodelib/fs.walk@1.2.8 deduped +│ │ ├─┬ glob-parent@5.1.2 +│ │ │ └── is-glob@4.0.3 deduped +│ │ ├── merge2@1.4.1 +│ │ └─┬ micromatch@4.0.5 +│ │ ├── braces@3.0.2 deduped +│ │ └── picomatch@2.3.1 +│ ├─┬ http-proxy-middleware@2.0.6 +│ │ ├─┬ @types/express@4.17.21 +│ │ │ ├─┬ @types/body-parser@1.19.5 +│ │ │ │ ├─┬ @types/connect@3.4.38 +│ │ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ ├─┬ @types/express-serve-static-core@4.17.43 +│ │ │ │ ├── @types/node@20.11.21 deduped +│ │ │ │ ├── @types/qs@6.9.12 deduped +│ │ │ │ ├── @types/range-parser@1.2.7 +│ │ │ │ └─┬ @types/send@0.17.4 +│ │ │ │ ├── @types/mime@1.3.5 deduped +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ ├── @types/qs@6.9.12 +│ │ │ └── @types/serve-static@1.15.5 deduped +│ │ ├─┬ @types/http-proxy@1.17.14 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── http-proxy@1.18.1 deduped +│ │ ├── is-glob@4.0.3 deduped +│ │ ├── is-plain-obj@3.0.0 +│ │ └── micromatch@4.0.5 deduped +│ ├─┬ https-proxy-agent@7.0.2 +│ │ ├─┬ agent-base@7.1.0 +│ │ │ └── debug@4.3.4 deduped +│ │ └── debug@4.3.4 deduped +│ ├─┬ inquirer@9.2.14 +│ │ ├── @ljharb/through@2.3.12 deduped +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├── chalk@5.3.0 +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-width@4.1.0 deduped +│ │ ├── external-editor@3.1.0 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── lodash@4.17.21 deduped +│ │ ├── mute-stream@1.0.0 deduped +│ │ ├── ora@5.4.1 deduped +│ │ ├── run-async@3.0.0 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ └─┬ wrap-ansi@6.2.0 +│ │ ├─┬ ansi-styles@4.3.0 +│ │ │ └─┬ color-convert@2.0.1 +│ │ │ └── color-name@1.1.4 +│ │ ├── string-width@4.2.3 deduped +│ │ └── strip-ansi@6.0.1 deduped +│ ├── UNMET OPTIONAL DEPENDENCY jest-environment-jsdom@^29.5.0 +│ ├── UNMET OPTIONAL DEPENDENCY jest@^29.5.0 +│ ├── jsonc-parser@3.2.1 +│ ├─┬ karma-source-map-support@1.4.0 +│ │ └── source-map-support@0.5.21 deduped +│ ├── karma@6.4.3 deduped +│ ├─┬ less-loader@11.1.0 +│ │ ├── klona@2.0.6 +│ │ ├── less@4.2.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ less@4.2.0 +│ │ ├─┬ copy-anything@2.0.6 +│ │ │ └── is-what@3.14.1 +│ │ ├─┬ errno@0.1.8 +│ │ │ └── prr@1.0.1 +│ │ ├── graceful-fs@4.2.11 +│ │ ├── image-size@0.5.5 +│ │ ├─┬ make-dir@2.1.0 +│ │ │ ├── pify@4.0.1 +│ │ │ └── semver@5.7.2 +│ │ ├── mime@1.6.0 +│ │ ├─┬ needle@3.3.1 +│ │ │ ├─┬ iconv-lite@0.6.3 +│ │ │ │ └── safer-buffer@2.1.2 deduped +│ │ │ └── sax@1.3.0 +│ │ ├── parse-node-version@1.0.1 +│ │ ├── source-map@0.6.1 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ license-webpack-plugin@4.0.2 +│ │ └── webpack-sources@3.2.3 +│ ├── loader-utils@3.2.1 +│ ├─┬ magic-string@0.30.7 +│ │ └── @jridgewell/sourcemap-codec@1.4.15 deduped +│ ├─┬ mini-css-extract-plugin@2.8.0 +│ │ ├── schema-utils@4.2.0 deduped +│ │ ├── tapable@2.2.1 +│ │ └── webpack@5.90.1 deduped +│ ├── mrmime@2.0.0 +│ ├── UNMET OPTIONAL DEPENDENCY ng-packagr@^17.0.0 +│ ├─┬ open@8.4.2 +│ │ ├── define-lazy-prop@2.0.0 +│ │ ├── is-docker@2.2.1 +│ │ └─┬ is-wsl@2.2.0 +│ │ └── is-docker@2.2.1 deduped +│ ├─┬ ora@5.4.1 +│ │ ├─┬ bl@4.1.0 +│ │ │ ├── buffer@5.7.1 deduped +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ └── readable-stream@3.6.2 deduped +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-spinners@2.6.1 +│ │ ├── is-interactive@1.0.0 +│ │ ├── is-unicode-supported@0.1.0 +│ │ ├── log-symbols@4.1.0 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ └─┬ wcwidth@1.0.1 +│ │ └─┬ defaults@1.0.4 +│ │ └── clone@1.0.4 +│ ├─┬ parse5-html-rewriting-stream@7.0.0 +│ │ ├── entities@4.5.0 +│ │ ├─┬ parse5-sax-parser@7.0.0 +│ │ │ └── parse5@7.1.2 deduped +│ │ └── parse5@7.1.2 deduped +│ ├── picomatch@4.0.1 +│ ├─┬ piscina@4.3.1 +│ │ └─┬ nice-napi@1.0.2 +│ │ ├── node-addon-api@3.2.1 +│ │ └── node-gyp-build@4.8.0 +│ ├─┬ postcss-loader@8.1.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @rspack/core@0.x || 1.x +│ │ ├─┬ cosmiconfig@9.0.0 +│ │ │ ├── env-paths@2.2.1 deduped +│ │ │ ├── import-fresh@3.3.0 deduped +│ │ │ ├─┬ js-yaml@4.1.0 +│ │ │ │ └── argparse@2.0.1 +│ │ │ ├─┬ parse-json@5.2.0 +│ │ │ │ ├── @babel/code-frame@7.23.5 deduped +│ │ │ │ ├─┬ error-ex@1.3.2 +│ │ │ │ │ └── is-arrayish@0.2.1 +│ │ │ │ ├── json-parse-even-better-errors@2.3.1 +│ │ │ │ └── lines-and-columns@1.2.4 +│ │ │ └── typescript@5.3.3 deduped +│ │ ├── jiti@1.21.0 +│ │ ├── postcss@8.4.35 deduped +│ │ ├── semver@7.6.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ postcss@8.4.35 +│ │ ├── nanoid@3.3.7 +│ │ ├── picocolors@1.0.0 deduped +│ │ └── source-map-js@1.0.2 +│ ├── UNMET OPTIONAL DEPENDENCY protractor@^7.0.0 +│ ├─┬ resolve-url-loader@5.0.0 +│ │ ├─┬ adjust-sourcemap-loader@4.0.0 +│ │ │ ├─┬ loader-utils@2.0.4 +│ │ │ │ ├── big.js@5.2.2 deduped +│ │ │ │ ├── emojis-list@3.0.0 deduped +│ │ │ │ └── json5@2.2.3 deduped +│ │ │ └── regex-parser@2.3.0 +│ │ ├── convert-source-map@1.9.0 deduped +│ │ ├─┬ loader-utils@2.0.4 +│ │ │ ├── big.js@5.2.2 +│ │ │ ├── emojis-list@3.0.0 +│ │ │ └── json5@2.2.3 deduped +│ │ ├── postcss@8.4.35 deduped +│ │ └── source-map@0.6.1 +│ ├── rxjs@7.8.1 deduped +│ ├─┬ sass-loader@14.1.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY @rspack/core@0.x || 1.x +│ │ ├── neo-async@2.6.2 +│ │ ├── UNMET OPTIONAL DEPENDENCY node-sass@^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY sass-embedded@* +│ │ ├── sass@1.70.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ sass@1.70.0 +│ │ ├── chokidar@3.6.0 deduped +│ │ ├── immutable@4.3.5 +│ │ └── source-map-js@1.0.2 deduped +│ ├─┬ semver@7.6.0 +│ │ └─┬ lru-cache@6.0.0 +│ │ └── yallist@4.0.0 +│ ├─┬ source-map-loader@5.0.0 +│ │ ├─┬ iconv-lite@0.6.3 +│ │ │ └── safer-buffer@2.1.2 +│ │ ├── source-map-js@1.0.2 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ source-map-support@0.5.21 +│ │ ├── buffer-from@1.1.2 +│ │ └── source-map@0.6.1 +│ ├── UNMET OPTIONAL DEPENDENCY tailwindcss@^2.0.0 || ^3.0.0 +│ ├─┬ terser@5.27.0 +│ │ ├─┬ @jridgewell/source-map@0.3.5 +│ │ │ ├── @jridgewell/gen-mapping@0.3.4 deduped +│ │ │ └── @jridgewell/trace-mapping@0.3.23 deduped +│ │ ├── acorn@8.11.3 deduped +│ │ ├── commander@2.20.3 +│ │ └── source-map-support@0.5.21 deduped +│ ├── tree-kill@1.2.2 +│ ├── tslib@2.6.2 deduped +│ ├── typescript@5.3.3 deduped +│ ├─┬ undici@6.6.2 +│ │ └── @fastify/busboy@2.1.0 +│ ├─┬ vite@5.0.12 +│ │ ├── @types/node@20.11.21 deduped +│ │ ├─┬ esbuild@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/aix-ppc64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-arm@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-arm64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/android-x64@0.19.12 +│ │ │ ├── @esbuild/darwin-arm64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/darwin-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/freebsd-arm64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/freebsd-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-arm@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-arm64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-ia32@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-loong64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-mips64el@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-ppc64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-riscv64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-s390x@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/linux-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/netbsd-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/openbsd-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/sunos-x64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/win32-arm64@0.19.12 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @esbuild/win32-ia32@0.19.12 +│ │ │ └── UNMET OPTIONAL DEPENDENCY @esbuild/win32-x64@0.19.12 +│ │ ├── fsevents@2.3.3 +│ │ ├── less@4.2.0 deduped +│ │ ├── UNMET OPTIONAL DEPENDENCY lightningcss@^1.21.0 +│ │ ├── postcss@8.4.35 deduped +│ │ ├─┬ rollup@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-android-arm-eabi@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-android-arm64@4.12.0 +│ │ │ ├── @rollup/rollup-darwin-arm64@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-darwin-x64@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-arm-gnueabihf@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-arm64-gnu@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-arm64-musl@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-riscv64-gnu@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-x64-gnu@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-linux-x64-musl@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-win32-arm64-msvc@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-win32-ia32-msvc@4.12.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY @rollup/rollup-win32-x64-msvc@4.12.0 +│ │ │ ├── @types/estree@1.0.5 deduped +│ │ │ └── fsevents@2.3.3 deduped +│ │ ├── sass@1.70.0 deduped +│ │ ├── UNMET OPTIONAL DEPENDENCY stylus@* +│ │ ├── UNMET OPTIONAL DEPENDENCY sugarss@* +│ │ └── terser@5.27.0 deduped +│ ├─┬ watchpack@2.4.0 +│ │ ├── glob-to-regexp@0.4.1 +│ │ └── graceful-fs@4.2.11 +│ ├─┬ webpack-dev-middleware@6.1.1 +│ │ ├── colorette@2.0.20 deduped +│ │ ├─┬ memfs@3.5.3 +│ │ │ └── fs-monkey@1.0.5 +│ │ ├─┬ mime-types@2.1.35 +│ │ │ └── mime-db@1.52.0 +│ │ ├── range-parser@1.2.1 deduped +│ │ ├── schema-utils@4.2.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├─┬ webpack-dev-server@4.15.1 +│ │ ├─┬ @types/bonjour@3.5.13 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├─┬ @types/connect-history-api-fallback@1.5.4 +│ │ │ ├── @types/express-serve-static-core@4.17.43 deduped +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── @types/express@4.17.21 deduped +│ │ ├─┬ @types/serve-index@1.9.4 +│ │ │ └── @types/express@4.17.21 deduped +│ │ ├─┬ @types/serve-static@1.15.5 +│ │ │ ├── @types/http-errors@2.0.4 +│ │ │ ├── @types/mime@1.3.5 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├─┬ @types/sockjs@0.3.36 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├─┬ @types/ws@8.5.10 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── ansi-html-community@0.0.8 +│ │ ├─┬ bonjour-service@1.2.1 +│ │ │ ├── fast-deep-equal@3.1.3 deduped +│ │ │ └─┬ multicast-dns@7.2.5 +│ │ │ ├─┬ dns-packet@5.6.1 +│ │ │ │ └── @leichtgewicht/ip-codec@2.0.4 +│ │ │ └── thunky@1.1.0 +│ │ ├── chokidar@3.6.0 deduped +│ │ ├── colorette@2.0.20 deduped +│ │ ├─┬ compression@1.7.4 +│ │ │ ├── accepts@1.3.8 deduped +│ │ │ ├── bytes@3.0.0 +│ │ │ ├─┬ compressible@2.0.18 +│ │ │ │ └── mime-db@1.52.0 deduped +│ │ │ ├─┬ debug@2.6.9 +│ │ │ │ └── ms@2.0.0 +│ │ │ ├── on-headers@1.0.2 deduped +│ │ │ ├── safe-buffer@5.1.2 +│ │ │ └── vary@1.1.2 deduped +│ │ ├── connect-history-api-fallback@2.0.0 +│ │ ├─┬ default-gateway@6.0.3 +│ │ │ └─┬ execa@5.1.1 +│ │ │ ├── cross-spawn@7.0.3 deduped +│ │ │ ├── get-stream@6.0.1 +│ │ │ ├── human-signals@2.1.0 +│ │ │ ├── is-stream@2.0.1 deduped +│ │ │ ├── merge-stream@2.0.0 deduped +│ │ │ ├── npm-run-path@4.0.1 deduped +│ │ │ ├── onetime@5.1.2 deduped +│ │ │ ├── signal-exit@3.0.7 deduped +│ │ │ └── strip-final-newline@2.0.0 deduped +│ │ ├── express@4.18.2 deduped +│ │ ├── graceful-fs@4.2.11 +│ │ ├── html-entities@2.4.0 +│ │ ├── http-proxy-middleware@2.0.6 deduped +│ │ ├── ipaddr.js@2.1.0 +│ │ ├─┬ launch-editor@2.6.1 +│ │ │ ├── picocolors@1.0.0 deduped +│ │ │ └── shell-quote@1.8.1 +│ │ ├─┬ open@8.4.2 +│ │ │ ├── define-lazy-prop@2.0.0 +│ │ │ ├── is-docker@2.2.1 +│ │ │ └─┬ is-wsl@2.2.0 +│ │ │ └── is-docker@2.2.1 deduped +│ │ ├─┬ p-retry@4.6.2 +│ │ │ ├── @types/retry@0.12.0 +│ │ │ └── retry@0.13.1 deduped +│ │ ├─┬ rimraf@3.0.2 +│ │ │ └── glob@7.2.3 deduped +│ │ ├── schema-utils@4.2.0 deduped +│ │ ├─┬ selfsigned@2.4.1 +│ │ │ ├─┬ @types/node-forge@1.3.11 +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ └── node-forge@1.3.1 +│ │ ├─┬ serve-index@1.9.1 +│ │ │ ├── accepts@1.3.8 deduped +│ │ │ ├── batch@0.6.1 +│ │ │ ├─┬ debug@2.6.9 +│ │ │ │ └── ms@2.0.0 +│ │ │ ├── escape-html@1.0.3 deduped +│ │ │ ├─┬ http-errors@1.6.3 +│ │ │ │ ├── depd@1.1.2 +│ │ │ │ ├── inherits@2.0.3 +│ │ │ │ ├── setprototypeof@1.1.0 +│ │ │ │ └── statuses@1.5.0 deduped +│ │ │ ├── mime-types@2.1.35 deduped +│ │ │ └── parseurl@1.3.3 deduped +│ │ ├─┬ sockjs@0.3.24 +│ │ │ ├── faye-websocket@0.11.4 deduped +│ │ │ ├── uuid@8.3.2 deduped +│ │ │ └─┬ websocket-driver@0.7.4 +│ │ │ ├── http-parser-js@0.5.8 +│ │ │ ├── safe-buffer@5.2.1 deduped +│ │ │ └── websocket-extensions@0.1.4 +│ │ ├─┬ spdy@4.0.2 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── handle-thing@2.0.1 +│ │ │ ├── http-deceiver@1.2.7 +│ │ │ ├── select-hose@2.0.0 +│ │ │ └─┬ spdy-transport@3.0.0 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── detect-node@2.1.0 +│ │ │ ├─┬ hpack.js@2.1.6 +│ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ ├── obuf@1.1.2 deduped +│ │ │ │ ├─┬ readable-stream@2.3.8 +│ │ │ │ │ ├── core-util-is@1.0.2 deduped +│ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ ├── isarray@1.0.0 deduped +│ │ │ │ │ ├── process-nextick-args@2.0.1 deduped +│ │ │ │ │ ├── safe-buffer@5.1.2 +│ │ │ │ │ ├─┬ string_decoder@1.1.1 +│ │ │ │ │ │ └── safe-buffer@5.1.2 deduped +│ │ │ │ │ └── util-deprecate@1.0.2 deduped +│ │ │ │ └── wbuf@1.7.3 deduped +│ │ │ ├── obuf@1.1.2 +│ │ │ ├── readable-stream@3.6.2 deduped +│ │ │ └─┬ wbuf@1.7.3 +│ │ │ └── minimalistic-assert@1.0.1 +│ │ ├─┬ webpack-dev-middleware@5.3.3 +│ │ │ ├── colorette@2.0.20 deduped +│ │ │ ├── memfs@3.5.3 deduped +│ │ │ ├── mime-types@2.1.35 deduped +│ │ │ ├── range-parser@1.2.1 deduped +│ │ │ ├── schema-utils@4.2.0 deduped +│ │ │ └── webpack@5.90.1 deduped +│ │ ├── webpack@5.90.1 deduped +│ │ └─┬ ws@8.16.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1 +│ │ └── UNMET OPTIONAL DEPENDENCY utf-8-validate@>=5.0.2 +│ ├─┬ webpack-merge@5.10.0 +│ │ ├─┬ clone-deep@4.0.1 +│ │ │ ├─┬ is-plain-object@2.0.4 +│ │ │ │ └── isobject@3.0.1 +│ │ │ ├── kind-of@6.0.3 +│ │ │ └─┬ shallow-clone@3.0.1 +│ │ │ └── kind-of@6.0.3 deduped +│ │ ├── flat@5.0.2 +│ │ └── wildcard@2.0.1 +│ ├─┬ webpack-subresource-integrity@5.1.0 +│ │ ├── UNMET OPTIONAL DEPENDENCY html-webpack-plugin@>= 5.0.0-beta.1 < 6 +│ │ ├── typed-assert@1.0.9 +│ │ └── webpack@5.90.1 deduped +│ └─┬ webpack@5.90.1 +│ ├─┬ @types/eslint-scope@3.7.7 +│ │ ├─┬ @types/eslint@8.56.4 +│ │ │ ├── @types/estree@1.0.5 deduped +│ │ │ └── @types/json-schema@7.0.15 deduped +│ │ └── @types/estree@1.0.5 deduped +│ ├── @types/estree@1.0.5 +│ ├─┬ @webassemblyjs/ast@1.11.6 +│ │ ├─┬ @webassemblyjs/helper-numbers@1.11.6 +│ │ │ ├── @webassemblyjs/floating-point-hex-parser@1.11.6 +│ │ │ ├── @webassemblyjs/helper-api-error@1.11.6 deduped +│ │ │ └── @xtuc/long@4.2.2 +│ │ └── @webassemblyjs/helper-wasm-bytecode@1.11.6 +│ ├─┬ @webassemblyjs/wasm-edit@1.11.6 +│ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ ├── @webassemblyjs/helper-buffer@1.11.6 +│ │ ├── @webassemblyjs/helper-wasm-bytecode@1.11.6 deduped +│ │ ├─┬ @webassemblyjs/helper-wasm-section@1.11.6 +│ │ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ │ ├── @webassemblyjs/helper-buffer@1.11.6 deduped +│ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.11.6 deduped +│ │ │ └── @webassemblyjs/wasm-gen@1.11.6 deduped +│ │ ├─┬ @webassemblyjs/wasm-gen@1.11.6 +│ │ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ │ ├── @webassemblyjs/helper-wasm-bytecode@1.11.6 deduped +│ │ │ ├── @webassemblyjs/ieee754@1.11.6 deduped +│ │ │ ├── @webassemblyjs/leb128@1.11.6 deduped +│ │ │ └── @webassemblyjs/utf8@1.11.6 deduped +│ │ ├─┬ @webassemblyjs/wasm-opt@1.11.6 +│ │ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ │ ├── @webassemblyjs/helper-buffer@1.11.6 deduped +│ │ │ ├── @webassemblyjs/wasm-gen@1.11.6 deduped +│ │ │ └── @webassemblyjs/wasm-parser@1.11.6 deduped +│ │ ├── @webassemblyjs/wasm-parser@1.11.6 deduped +│ │ └─┬ @webassemblyjs/wast-printer@1.11.6 +│ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ └── @xtuc/long@4.2.2 deduped +│ ├─┬ @webassemblyjs/wasm-parser@1.11.6 +│ │ ├── @webassemblyjs/ast@1.11.6 deduped +│ │ ├── @webassemblyjs/helper-api-error@1.11.6 +│ │ ├── @webassemblyjs/helper-wasm-bytecode@1.11.6 deduped +│ │ ├─┬ @webassemblyjs/ieee754@1.11.6 +│ │ │ └── @xtuc/ieee754@1.2.0 +│ │ ├─┬ @webassemblyjs/leb128@1.11.6 +│ │ │ └── @xtuc/long@4.2.2 deduped +│ │ └── @webassemblyjs/utf8@1.11.6 +│ ├─┬ acorn-import-assertions@1.9.0 +│ │ └── acorn@8.11.3 deduped +│ ├── acorn@8.11.3 deduped +│ ├── browserslist@4.23.0 deduped +│ ├── chrome-trace-event@1.0.3 +│ ├─┬ enhanced-resolve@5.15.1 +│ │ ├── graceful-fs@4.2.11 +│ │ └── tapable@2.2.1 deduped +│ ├── es-module-lexer@1.4.1 +│ ├─┬ eslint-scope@5.1.1 +│ │ ├── esrecurse@4.3.0 deduped +│ │ └── estraverse@4.3.0 +│ ├── events@3.3.0 +│ ├── glob-to-regexp@0.4.1 deduped +│ ├── graceful-fs@4.2.11 +│ ├── json-parse-even-better-errors@2.3.1 +│ ├── loader-runner@4.3.0 +│ ├── mime-types@2.1.35 deduped +│ ├── neo-async@2.6.2 deduped +│ ├─┬ schema-utils@3.3.0 +│ │ ├── @types/json-schema@7.0.15 deduped +│ │ ├─┬ ajv-keywords@3.5.2 +│ │ │ └── ajv@6.12.6 deduped +│ │ └─┬ ajv@6.12.6 +│ │ ├── fast-deep-equal@3.1.3 deduped +│ │ ├── fast-json-stable-stringify@2.1.0 deduped +│ │ ├── json-schema-traverse@0.4.1 +│ │ └── uri-js@4.4.1 deduped +│ ├── tapable@2.2.1 deduped +│ ├─┬ terser-webpack-plugin@5.3.10 +│ │ ├── @jridgewell/trace-mapping@0.3.23 deduped +│ │ ├─┬ jest-worker@27.5.1 +│ │ │ ├── @types/node@20.11.21 deduped +│ │ │ ├── merge-stream@2.0.0 deduped +│ │ │ └─┬ supports-color@8.1.1 +│ │ │ └── has-flag@4.0.0 +│ │ ├─┬ schema-utils@3.3.0 +│ │ │ ├── @types/json-schema@7.0.15 deduped +│ │ │ ├─┬ ajv-keywords@3.5.2 +│ │ │ │ └── ajv@6.12.6 deduped +│ │ │ └─┬ ajv@6.12.6 +│ │ │ ├── fast-deep-equal@3.1.3 deduped +│ │ │ ├── fast-json-stable-stringify@2.1.0 deduped +│ │ │ ├── json-schema-traverse@0.4.1 +│ │ │ └── uri-js@4.4.1 deduped +│ │ ├── serialize-javascript@6.0.2 deduped +│ │ ├── terser@5.27.0 deduped +│ │ └── webpack@5.90.1 deduped +│ ├── watchpack@2.4.0 deduped +│ └── webpack-sources@3.2.3 deduped +├─┬ @angular-eslint/builder@17.2.1 +│ ├─┬ @nx/devkit@17.2.8 +│ │ ├─┬ @nrwl/devkit@17.2.8 +│ │ │ └── @nx/devkit@17.2.8 deduped +│ │ ├─┬ ejs@3.1.9 +│ │ │ └─┬ jake@10.8.7 +│ │ │ ├── async@3.2.5 deduped +│ │ │ ├─┬ chalk@4.1.2 +│ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ └─┬ supports-color@7.2.0 +│ │ │ │ └── has-flag@4.0.0 +│ │ │ ├─┬ filelist@1.0.4 +│ │ │ │ └─┬ minimatch@5.1.6 +│ │ │ │ └── brace-expansion@2.0.1 deduped +│ │ │ └─┬ minimatch@3.1.2 +│ │ │ └─┬ brace-expansion@1.1.11 +│ │ │ ├── balanced-match@1.0.2 deduped +│ │ │ └── concat-map@0.0.1 deduped +│ │ ├── enquirer@2.3.6 deduped +│ │ ├── ignore@5.3.0 deduped +│ │ ├── nx@17.2.8 deduped +│ │ ├─┬ semver@7.5.3 +│ │ │ └─┬ lru-cache@6.0.0 +│ │ │ └── yallist@4.0.0 +│ │ ├── tmp@0.2.1 deduped +│ │ └── tslib@2.6.2 deduped +│ ├── eslint@8.57.0 deduped +│ ├─┬ nx@17.2.8 +│ │ ├─┬ @nrwl/tao@17.2.8 +│ │ │ ├── nx@17.2.8 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├── @nx/nx-darwin-arm64@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-darwin-x64@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-freebsd-x64@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-linux-arm-gnueabihf@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-linux-arm64-gnu@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-linux-arm64-musl@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-linux-x64-gnu@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-linux-x64-musl@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-win32-arm64-msvc@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @nx/nx-win32-x64-msvc@17.2.8 +│ │ ├── UNMET OPTIONAL DEPENDENCY @swc-node/register@^1.6.7 +│ │ ├── UNMET OPTIONAL DEPENDENCY @swc/core@^1.3.85 +│ │ ├── @yarnpkg/lockfile@1.1.0 deduped +│ │ ├─┬ @yarnpkg/parsers@3.0.0-rc.46 +│ │ │ ├── js-yaml@3.14.1 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├─┬ @zkochan/js-yaml@0.0.6 +│ │ │ └── argparse@2.0.1 +│ │ ├─┬ axios@1.6.7 +│ │ │ ├── follow-redirects@1.15.5 deduped +│ │ │ ├─┬ form-data@4.0.0 +│ │ │ │ ├── asynckit@0.4.0 deduped +│ │ │ │ ├── combined-stream@1.0.8 deduped +│ │ │ │ └── mime-types@2.1.35 deduped +│ │ │ └── proxy-from-env@1.1.0 +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-spinners@2.6.1 deduped +│ │ ├─┬ cliui@8.0.1 +│ │ │ ├── string-width@4.2.3 deduped +│ │ │ ├── strip-ansi@6.0.1 deduped +│ │ │ └── wrap-ansi@7.0.0 deduped +│ │ ├── dotenv-expand@10.0.0 +│ │ ├── dotenv@16.3.2 +│ │ ├── enquirer@2.3.6 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── flat@5.0.2 deduped +│ │ ├─┬ fs-extra@11.2.0 +│ │ │ ├── graceful-fs@4.2.11 +│ │ │ ├─┬ jsonfile@6.1.0 +│ │ │ │ ├── graceful-fs@4.2.11 deduped +│ │ │ │ └── universalify@2.0.1 deduped +│ │ │ └── universalify@2.0.1 +│ │ ├─┬ glob@7.1.4 +│ │ │ ├── fs.realpath@1.0.0 deduped +│ │ │ ├── inflight@1.0.6 deduped +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ ├── minimatch@3.0.5 deduped +│ │ │ ├── once@1.4.0 deduped +│ │ │ └── path-is-absolute@1.0.1 deduped +│ │ ├── ignore@5.3.0 deduped +│ │ ├─┬ jest-diff@29.7.0 +│ │ │ ├─┬ chalk@4.1.2 +│ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ └─┬ supports-color@7.2.0 +│ │ │ │ └── has-flag@4.0.0 +│ │ │ ├── diff-sequences@29.6.3 +│ │ │ ├── jest-get-type@29.6.3 +│ │ │ └─┬ pretty-format@29.7.0 +│ │ │ ├─┬ @jest/schemas@29.6.3 +│ │ │ │ └── @sinclair/typebox@0.27.8 +│ │ │ ├── ansi-styles@5.2.0 +│ │ │ └── react-is@18.2.0 +│ │ ├─┬ js-yaml@4.1.0 +│ │ │ └── argparse@2.0.1 +│ │ ├── jsonc-parser@3.2.0 +│ │ ├── lines-and-columns@2.0.4 +│ │ ├─┬ minimatch@3.0.5 +│ │ │ └─┬ brace-expansion@1.1.11 +│ │ │ ├── balanced-match@1.0.2 deduped +│ │ │ └── concat-map@0.0.1 deduped +│ │ ├── node-machine-id@1.1.12 +│ │ ├─┬ npm-run-path@4.0.1 +│ │ │ └── path-key@3.1.1 deduped +│ │ ├─┬ open@8.4.2 +│ │ │ ├── define-lazy-prop@2.0.0 +│ │ │ ├── is-docker@2.2.1 +│ │ │ └─┬ is-wsl@2.2.0 +│ │ │ └── is-docker@2.2.1 deduped +│ │ ├─┬ semver@7.5.3 +│ │ │ └─┬ lru-cache@6.0.0 +│ │ │ └── yallist@4.0.0 +│ │ ├── string-width@4.2.3 deduped +│ │ ├─┬ strong-log-transformer@2.1.0 +│ │ │ ├── duplexer@0.1.2 +│ │ │ ├── minimist@1.2.8 deduped +│ │ │ └── through@2.3.8 deduped +│ │ ├─┬ tar-stream@2.2.0 +│ │ │ ├── bl@4.1.0 deduped +│ │ │ ├─┬ end-of-stream@1.4.4 +│ │ │ │ └── once@1.4.0 deduped +│ │ │ ├── fs-constants@1.0.0 +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ └── readable-stream@3.6.2 deduped +│ │ ├── tmp@0.2.1 deduped +│ │ ├─┬ tsconfig-paths@4.2.0 +│ │ │ ├── json5@2.2.3 deduped +│ │ │ ├── minimist@1.2.8 deduped +│ │ │ └── strip-bom@3.0.0 +│ │ ├── tslib@2.6.2 deduped +│ │ ├── yargs-parser@21.1.1 +│ │ └── yargs@17.7.2 deduped +│ └── typescript@5.3.3 deduped +├─┬ @angular-eslint/eslint-plugin-template@17.2.1 +│ ├── @angular-eslint/bundled-angular-compiler@17.2.1 +│ ├─┬ @angular-eslint/utils@17.2.1 +│ │ ├── @angular-eslint/bundled-angular-compiler@17.2.1 deduped +│ │ ├── @typescript-eslint/utils@6.19.0 deduped +│ │ ├── eslint@8.57.0 deduped +│ │ └── typescript@5.3.3 deduped +│ ├─┬ @typescript-eslint/type-utils@6.19.0 +│ │ ├─┬ @typescript-eslint/typescript-estree@6.19.0 +│ │ │ ├── @typescript-eslint/types@6.19.0 +│ │ │ ├─┬ @typescript-eslint/visitor-keys@6.19.0 +│ │ │ │ ├── @typescript-eslint/types@6.19.0 deduped +│ │ │ │ └── eslint-visitor-keys@3.4.3 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── globby@11.1.0 deduped +│ │ │ ├── is-glob@4.0.3 deduped +│ │ │ ├── minimatch@9.0.3 deduped +│ │ │ ├── semver@7.6.0 deduped +│ │ │ └── ts-api-utils@1.2.1 deduped +│ │ ├── @typescript-eslint/utils@6.19.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── eslint@8.57.0 deduped +│ │ └── ts-api-utils@1.2.1 deduped +│ ├─┬ @typescript-eslint/utils@6.19.0 +│ │ ├── @eslint-community/eslint-utils@4.4.0 deduped +│ │ ├── @types/json-schema@7.0.15 +│ │ ├── @types/semver@7.5.8 +│ │ ├─┬ @typescript-eslint/scope-manager@6.19.0 +│ │ │ ├── @typescript-eslint/types@6.19.0 deduped +│ │ │ └─┬ @typescript-eslint/visitor-keys@6.19.0 +│ │ │ ├── @typescript-eslint/types@6.19.0 deduped +│ │ │ └── eslint-visitor-keys@3.4.3 deduped +│ │ ├── @typescript-eslint/types@6.19.0 +│ │ ├─┬ @typescript-eslint/typescript-estree@6.19.0 +│ │ │ ├── @typescript-eslint/types@6.19.0 deduped +│ │ │ ├── @typescript-eslint/visitor-keys@6.19.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── globby@11.1.0 deduped +│ │ │ ├── is-glob@4.0.3 deduped +│ │ │ ├── minimatch@9.0.3 deduped +│ │ │ ├── semver@7.6.0 deduped +│ │ │ └── ts-api-utils@1.2.1 deduped +│ │ ├── eslint@8.57.0 deduped +│ │ └── semver@7.6.0 deduped +│ ├─┬ aria-query@5.3.0 +│ │ └── dequal@2.0.3 +│ ├─┬ axobject-query@4.0.0 +│ │ └── dequal@2.0.3 deduped +│ ├── eslint@8.57.0 deduped +│ └── typescript@5.3.3 deduped +├─┬ @angular-eslint/eslint-plugin@17.2.1 +│ ├── @angular-eslint/utils@17.2.1 deduped +│ ├── @typescript-eslint/utils@6.19.0 deduped +│ ├── eslint@8.57.0 deduped +│ └── typescript@5.3.3 deduped +├─┬ @angular-eslint/schematics@17.2.1 +│ ├── @angular-eslint/eslint-plugin-template@17.2.1 deduped +│ ├── @angular-eslint/eslint-plugin@17.2.1 deduped +│ ├── @angular/cli@17.2.1 deduped +│ ├── @nx/devkit@17.2.8 deduped +│ ├── ignore@5.3.0 +│ ├── nx@17.2.8 deduped +│ ├── strip-json-comments@3.1.1 +│ └─┬ tmp@0.2.1 +│ └─┬ rimraf@3.0.2 +│ └── glob@7.2.3 deduped +├─┬ @angular-eslint/template-parser@17.2.1 +│ ├── @angular-eslint/bundled-angular-compiler@17.2.1 deduped +│ ├─┬ eslint-scope@8.0.0 +│ │ ├─┬ esrecurse@4.3.0 +│ │ │ └── estraverse@5.3.0 deduped +│ │ └── estraverse@5.3.0 +│ ├── eslint@8.57.0 deduped +│ └── typescript@5.3.3 deduped +├─┬ @angular/animations@17.2.3 +│ ├── @angular/core@17.2.3 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/cdk@17.2.1 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├─┬ parse5@7.1.2 +│ │ └── entities@4.5.0 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/cli@17.2.1 +│ ├── @angular-devkit/architect@0.1702.1 deduped +│ ├── @angular-devkit/core@17.2.1 deduped +│ ├─┬ @angular-devkit/schematics@17.2.1 +│ │ ├── @angular-devkit/core@17.2.1 deduped +│ │ ├── jsonc-parser@3.2.1 deduped +│ │ ├── magic-string@0.30.7 deduped +│ │ ├── ora@5.4.1 deduped +│ │ └── rxjs@7.8.1 deduped +│ ├─┬ @schematics/angular@17.2.1 +│ │ ├── @angular-devkit/core@17.2.1 deduped +│ │ ├── @angular-devkit/schematics@17.2.1 deduped +│ │ └── jsonc-parser@3.2.1 deduped +│ ├── @yarnpkg/lockfile@1.1.0 +│ ├── ansi-colors@4.1.3 deduped +│ ├── ini@4.1.1 +│ ├─┬ inquirer@9.2.14 +│ │ ├── @ljharb/through@2.3.12 deduped +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├── chalk@5.3.0 +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-width@4.1.0 deduped +│ │ ├── external-editor@3.1.0 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── lodash@4.17.21 deduped +│ │ ├── mute-stream@1.0.0 deduped +│ │ ├── ora@5.4.1 deduped +│ │ ├── run-async@3.0.0 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ └─┬ wrap-ansi@6.2.0 +│ │ ├─┬ ansi-styles@4.3.0 +│ │ │ └─┬ color-convert@2.0.1 +│ │ │ └── color-name@1.1.4 +│ │ ├── string-width@4.2.3 deduped +│ │ └── strip-ansi@6.0.1 deduped +│ ├── jsonc-parser@3.2.1 deduped +│ ├─┬ npm-package-arg@11.0.1 +│ │ ├─┬ hosted-git-info@7.0.1 +│ │ │ └── lru-cache@10.2.0 +│ │ ├── proc-log@3.0.0 +│ │ ├── semver@7.6.0 deduped +│ │ └─┬ validate-npm-package-name@5.0.0 +│ │ └─┬ builtins@5.0.1 +│ │ └── semver@7.6.0 deduped +│ ├─┬ npm-pick-manifest@9.0.0 +│ │ ├─┬ npm-install-checks@6.3.0 +│ │ │ └── semver@7.6.0 deduped +│ │ ├── npm-normalize-package-bin@3.0.1 +│ │ ├── npm-package-arg@11.0.1 deduped +│ │ └── semver@7.6.0 deduped +│ ├─┬ open@8.4.2 +│ │ ├── define-lazy-prop@2.0.0 +│ │ ├── is-docker@2.2.1 +│ │ └─┬ is-wsl@2.2.0 +│ │ └── is-docker@2.2.1 deduped +│ ├── ora@5.4.1 deduped +│ ├─┬ pacote@17.0.6 +│ │ ├─┬ @npmcli/git@5.0.4 +│ │ │ ├── @npmcli/promise-spawn@7.0.1 deduped +│ │ │ ├── lru-cache@10.2.0 +│ │ │ ├── npm-pick-manifest@9.0.0 deduped +│ │ │ ├── proc-log@3.0.0 deduped +│ │ │ ├── promise-inflight@1.0.1 +│ │ │ ├── promise-retry@2.0.1 deduped +│ │ │ ├── semver@7.6.0 deduped +│ │ │ └─┬ which@4.0.0 +│ │ │ └── isexe@3.1.1 +│ │ ├─┬ @npmcli/installed-package-contents@2.0.2 +│ │ │ ├─┬ npm-bundled@3.0.0 +│ │ │ │ └── npm-normalize-package-bin@3.0.1 deduped +│ │ │ └── npm-normalize-package-bin@3.0.1 deduped +│ │ ├─┬ @npmcli/promise-spawn@7.0.1 +│ │ │ └─┬ which@4.0.0 +│ │ │ └── isexe@3.1.1 +│ │ ├─┬ @npmcli/run-script@7.0.4 +│ │ │ ├── @npmcli/node-gyp@3.0.0 +│ │ │ ├─┬ @npmcli/package-json@5.0.0 +│ │ │ │ ├── @npmcli/git@5.0.4 deduped +│ │ │ │ ├─┬ glob@10.3.10 +│ │ │ │ │ ├── foreground-child@3.1.1 deduped +│ │ │ │ │ ├── jackspeak@2.3.6 deduped +│ │ │ │ │ ├── minimatch@9.0.3 deduped +│ │ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ │ └── path-scurry@1.10.1 deduped +│ │ │ │ ├── hosted-git-info@7.0.1 deduped +│ │ │ │ ├── json-parse-even-better-errors@3.0.1 deduped +│ │ │ │ ├── normalize-package-data@6.0.0 deduped +│ │ │ │ ├── proc-log@3.0.0 deduped +│ │ │ │ └── semver@7.6.0 deduped +│ │ │ ├── @npmcli/promise-spawn@7.0.1 deduped +│ │ │ ├─┬ node-gyp@10.0.1 +│ │ │ │ ├── env-paths@2.2.1 deduped +│ │ │ │ ├── exponential-backoff@3.1.1 +│ │ │ │ ├─┬ glob@10.3.10 +│ │ │ │ │ ├── foreground-child@3.1.1 deduped +│ │ │ │ │ ├── jackspeak@2.3.6 deduped +│ │ │ │ │ ├── minimatch@9.0.3 deduped +│ │ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ │ └── path-scurry@1.10.1 deduped +│ │ │ │ ├── graceful-fs@4.2.11 +│ │ │ │ ├── make-fetch-happen@13.0.0 deduped +│ │ │ │ ├─┬ nopt@7.2.0 +│ │ │ │ │ └── abbrev@2.0.0 +│ │ │ │ ├── proc-log@3.0.0 deduped +│ │ │ │ ├── semver@7.6.0 deduped +│ │ │ │ ├── tar@6.2.0 deduped +│ │ │ │ └─┬ which@4.0.0 +│ │ │ │ └── isexe@3.1.1 +│ │ │ └─┬ which@4.0.0 +│ │ │ └── isexe@3.1.1 +│ │ ├─┬ cacache@18.0.2 +│ │ │ ├─┬ @npmcli/fs@3.1.0 +│ │ │ │ └── semver@7.6.0 deduped +│ │ │ ├── fs-minipass@3.0.3 deduped +│ │ │ ├─┬ glob@10.3.10 +│ │ │ │ ├─┬ foreground-child@3.1.1 +│ │ │ │ │ ├── cross-spawn@7.0.3 deduped +│ │ │ │ │ └── signal-exit@4.1.0 +│ │ │ │ ├─┬ jackspeak@2.3.6 +│ │ │ │ │ ├─┬ @isaacs/cliui@8.0.2 +│ │ │ │ │ │ ├─┬ string-width-cjs@npm:string-width@4.2.3 +│ │ │ │ │ │ │ ├── emoji-regex@8.0.0 deduped +│ │ │ │ │ │ │ ├── is-fullwidth-code-point@3.0.0 deduped +│ │ │ │ │ │ │ └── strip-ansi@6.0.1 deduped +│ │ │ │ │ │ ├─┬ string-width@5.1.2 +│ │ │ │ │ │ │ ├── eastasianwidth@0.2.0 +│ │ │ │ │ │ │ ├── emoji-regex@9.2.2 +│ │ │ │ │ │ │ └── strip-ansi@7.1.0 deduped +│ │ │ │ │ │ ├─┬ strip-ansi-cjs@npm:strip-ansi@6.0.1 +│ │ │ │ │ │ │ └── ansi-regex@5.0.1 deduped +│ │ │ │ │ │ ├─┬ strip-ansi@7.1.0 +│ │ │ │ │ │ │ └── ansi-regex@6.0.1 +│ │ │ │ │ │ ├─┬ wrap-ansi-cjs@npm:wrap-ansi@7.0.0 +│ │ │ │ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ │ │ │ ├── string-width@4.2.3 deduped +│ │ │ │ │ │ │ └── strip-ansi@6.0.1 deduped +│ │ │ │ │ │ └─┬ wrap-ansi@8.1.0 +│ │ │ │ │ │ ├── ansi-styles@6.2.1 +│ │ │ │ │ │ ├── string-width@5.1.2 deduped +│ │ │ │ │ │ └── strip-ansi@7.1.0 deduped +│ │ │ │ │ └── @pkgjs/parseargs@0.11.0 +│ │ │ │ ├── minimatch@9.0.3 deduped +│ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ └── path-scurry@1.10.1 deduped +│ │ │ ├── lru-cache@10.2.0 +│ │ │ ├─┬ minipass-collect@2.0.1 +│ │ │ │ └── minipass@7.0.4 deduped +│ │ │ ├─┬ minipass-flush@1.0.5 +│ │ │ │ └─┬ minipass@3.3.6 +│ │ │ │ └── yallist@4.0.0 +│ │ │ ├─┬ minipass-pipeline@1.2.4 +│ │ │ │ └─┬ minipass@3.3.6 +│ │ │ │ └── yallist@4.0.0 +│ │ │ ├── minipass@7.0.4 deduped +│ │ │ ├── p-map@4.0.0 deduped +│ │ │ ├── ssri@10.0.5 deduped +│ │ │ ├── tar@6.2.0 deduped +│ │ │ └─┬ unique-filename@3.0.0 +│ │ │ └─┬ unique-slug@4.0.0 +│ │ │ └── imurmurhash@0.1.4 deduped +│ │ ├─┬ fs-minipass@3.0.3 +│ │ │ └── minipass@7.0.4 deduped +│ │ ├── minipass@7.0.4 +│ │ ├── npm-package-arg@11.0.1 deduped +│ │ ├─┬ npm-packlist@8.0.2 +│ │ │ └─┬ ignore-walk@6.0.4 +│ │ │ └── minimatch@9.0.3 deduped +│ │ ├── npm-pick-manifest@9.0.0 deduped +│ │ ├─┬ npm-registry-fetch@16.1.0 +│ │ │ ├─┬ make-fetch-happen@13.0.0 +│ │ │ │ ├─┬ @npmcli/agent@2.2.1 +│ │ │ │ │ ├── agent-base@7.1.0 deduped +│ │ │ │ │ ├── http-proxy-agent@7.0.2 deduped +│ │ │ │ │ ├── https-proxy-agent@7.0.2 deduped +│ │ │ │ │ ├── lru-cache@10.2.0 +│ │ │ │ │ └── socks-proxy-agent@8.0.2 deduped +│ │ │ │ ├── cacache@18.0.2 deduped +│ │ │ │ ├── http-cache-semantics@4.1.1 +│ │ │ │ ├── is-lambda@1.0.1 +│ │ │ │ ├── minipass-fetch@3.0.4 deduped +│ │ │ │ ├── minipass-flush@1.0.5 deduped +│ │ │ │ ├── minipass-pipeline@1.2.4 deduped +│ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ ├── negotiator@0.6.3 deduped +│ │ │ │ ├── promise-retry@2.0.1 deduped +│ │ │ │ └── ssri@10.0.5 deduped +│ │ │ ├─┬ minipass-fetch@3.0.4 +│ │ │ │ ├── encoding@0.1.13 deduped +│ │ │ │ ├─┬ minipass-sized@1.0.3 +│ │ │ │ │ └─┬ minipass@3.3.6 +│ │ │ │ │ └── yallist@4.0.0 +│ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ └── minizlib@2.1.2 deduped +│ │ │ ├─┬ minipass-json-stream@1.0.1 +│ │ │ │ ├── jsonparse@1.3.1 +│ │ │ │ └─┬ minipass@3.3.6 +│ │ │ │ └── yallist@4.0.0 +│ │ │ ├── minipass@7.0.4 deduped +│ │ │ ├── minizlib@2.1.2 deduped +│ │ │ ├── npm-package-arg@11.0.1 deduped +│ │ │ └── proc-log@3.0.0 deduped +│ │ ├── proc-log@3.0.0 deduped +│ │ ├─┬ promise-retry@2.0.1 +│ │ │ ├── err-code@2.0.3 +│ │ │ └── retry@0.12.0 +│ │ ├─┬ read-package-json-fast@3.0.2 +│ │ │ ├── json-parse-even-better-errors@3.0.1 +│ │ │ └── npm-normalize-package-bin@3.0.1 deduped +│ │ ├─┬ read-package-json@7.0.0 +│ │ │ ├─┬ glob@10.3.10 +│ │ │ │ ├── foreground-child@3.1.1 deduped +│ │ │ │ ├── jackspeak@2.3.6 deduped +│ │ │ │ ├── minimatch@9.0.3 deduped +│ │ │ │ ├── minipass@7.0.4 deduped +│ │ │ │ └── path-scurry@1.10.1 deduped +│ │ │ ├── json-parse-even-better-errors@3.0.1 deduped +│ │ │ ├─┬ normalize-package-data@6.0.0 +│ │ │ │ ├── hosted-git-info@7.0.1 deduped +│ │ │ │ ├── is-core-module@2.13.1 deduped +│ │ │ │ ├── semver@7.6.0 deduped +│ │ │ │ └─┬ validate-npm-package-license@3.0.4 +│ │ │ │ ├─┬ spdx-correct@3.2.0 +│ │ │ │ │ ├── spdx-expression-parse@3.0.1 deduped +│ │ │ │ │ └── spdx-license-ids@3.0.17 +│ │ │ │ └─┬ spdx-expression-parse@3.0.1 +│ │ │ │ ├── spdx-exceptions@2.5.0 +│ │ │ │ └── spdx-license-ids@3.0.17 deduped +│ │ │ └── npm-normalize-package-bin@3.0.1 deduped +│ │ ├─┬ sigstore@2.2.2 +│ │ │ ├─┬ @sigstore/bundle@2.2.0 +│ │ │ │ └── @sigstore/protobuf-specs@0.3.0 deduped +│ │ │ ├── @sigstore/core@1.0.0 +│ │ │ ├── @sigstore/protobuf-specs@0.3.0 +│ │ │ ├─┬ @sigstore/sign@2.2.3 +│ │ │ │ ├── @sigstore/bundle@2.2.0 deduped +│ │ │ │ ├── @sigstore/core@1.0.0 deduped +│ │ │ │ ├── @sigstore/protobuf-specs@0.3.0 deduped +│ │ │ │ └── make-fetch-happen@13.0.0 deduped +│ │ │ ├─┬ @sigstore/tuf@2.3.1 +│ │ │ │ ├── @sigstore/protobuf-specs@0.3.0 deduped +│ │ │ │ └─┬ tuf-js@2.2.0 +│ │ │ │ ├─┬ @tufjs/models@2.0.0 +│ │ │ │ │ ├── @tufjs/canonical-json@2.0.0 +│ │ │ │ │ └── minimatch@9.0.3 deduped +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ └── make-fetch-happen@13.0.0 deduped +│ │ │ └─┬ @sigstore/verify@1.1.0 +│ │ │ ├── @sigstore/bundle@2.2.0 deduped +│ │ │ ├── @sigstore/core@1.0.0 deduped +│ │ │ └── @sigstore/protobuf-specs@0.3.0 deduped +│ │ ├─┬ ssri@10.0.5 +│ │ │ └── minipass@7.0.4 deduped +│ │ └── tar@6.2.0 deduped +│ ├─┬ resolve@1.22.8 +│ │ ├─┬ is-core-module@2.13.1 +│ │ │ └─┬ hasown@2.0.1 +│ │ │ └── function-bind@1.1.2 deduped +│ │ ├── path-parse@1.0.7 +│ │ └── supports-preserve-symlinks-flag@1.0.0 +│ ├── semver@7.6.0 deduped +│ ├── symbol-observable@4.0.0 +│ └─┬ yargs@17.7.2 +│ ├── cliui@8.0.1 deduped +│ ├── escalade@3.1.2 +│ ├── get-caller-file@2.0.5 +│ ├── require-directory@2.1.1 +│ ├── string-width@4.2.3 deduped +│ ├── y18n@5.0.8 +│ └── yargs-parser@21.1.1 deduped +├─┬ @angular/common@17.2.3 +│ ├── @angular/core@17.2.3 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/compiler-cli@17.2.3 +│ ├── @angular/compiler@17.2.3 deduped +│ ├── @babel/core@7.23.9 deduped +│ ├── @jridgewell/sourcemap-codec@1.4.15 +│ ├─┬ chokidar@3.6.0 +│ │ ├─┬ anymatch@3.1.3 +│ │ │ ├── normalize-path@3.0.0 deduped +│ │ │ └── picomatch@2.3.1 +│ │ ├── braces@3.0.2 deduped +│ │ ├── fsevents@2.3.3 deduped +│ │ ├── glob-parent@5.1.2 deduped +│ │ ├─┬ is-binary-path@2.1.0 +│ │ │ └── binary-extensions@2.2.0 +│ │ ├── is-glob@4.0.3 deduped +│ │ ├── normalize-path@3.0.0 deduped +│ │ └─┬ readdirp@3.6.0 +│ │ └── picomatch@2.3.1 +│ ├── convert-source-map@1.9.0 +│ ├── reflect-metadata@0.2.1 +│ ├── semver@7.6.0 deduped +│ ├── tslib@2.6.2 deduped +│ ├── typescript@5.3.3 deduped +│ └── yargs@17.7.2 deduped +├─┬ @angular/compiler@17.2.3 +│ ├── @angular/core@17.2.3 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/core@17.2.3 +│ ├── rxjs@7.8.1 deduped +│ ├── tslib@2.6.2 deduped +│ └── zone.js@0.14.4 deduped +├─┬ @angular/fire@17.0.1 +│ ├── @angular-devkit/schematics@17.2.1 deduped +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/platform-browser-dynamic@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ ├── @schematics/angular@17.2.1 deduped +│ ├── firebase-tools@13.4.0 deduped +│ ├── firebase@10.8.1 deduped +│ ├─┬ fs-extra@8.1.0 +│ │ ├── graceful-fs@4.2.11 +│ │ ├─┬ jsonfile@4.0.0 +│ │ │ └── graceful-fs@4.2.11 +│ │ └── universalify@0.1.2 +│ ├── fuzzy@0.1.3 deduped +│ ├─┬ inquirer-autocomplete-prompt@1.4.0 +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├── figures@3.2.0 deduped +│ │ ├── inquirer@8.2.6 deduped +│ │ ├── run-async@2.4.1 +│ │ └─┬ rxjs@6.6.7 +│ │ └── tslib@1.14.1 +│ ├─┬ inquirer@8.2.6 +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├── chalk@4.1.2 deduped +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-width@3.0.0 +│ │ ├── external-editor@3.1.0 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── lodash@4.17.21 deduped +│ │ ├── mute-stream@0.0.8 +│ │ ├── ora@5.4.1 deduped +│ │ ├── run-async@2.4.1 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ ├── through@2.3.8 +│ │ └─┬ wrap-ansi@6.2.0 +│ │ ├── ansi-styles@4.3.0 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ └── strip-ansi@6.0.1 deduped +│ ├── jsonc-parser@3.2.1 deduped +│ ├─┬ node-fetch@2.7.0 +│ │ ├─┬ encoding@0.1.13 +│ │ │ └─┬ iconv-lite@0.6.3 +│ │ │ └── safer-buffer@2.1.2 deduped +│ │ └─┬ whatwg-url@5.0.0 +│ │ ├── tr46@0.0.3 +│ │ └── webidl-conversions@3.0.1 +│ ├─┬ open@8.4.2 +│ │ ├── define-lazy-prop@2.0.0 +│ │ ├── is-docker@2.2.1 +│ │ └─┬ is-wsl@2.2.0 +│ │ └── is-docker@2.2.1 deduped +│ ├── ora@5.4.1 deduped +│ ├─┬ rxfire@6.0.5 +│ │ ├── firebase@10.8.1 deduped +│ │ └── rxjs@7.8.1 deduped +│ ├── rxjs@7.8.1 deduped +│ ├── semver@7.6.0 deduped +│ ├── triple-beam@1.4.1 +│ ├── tslib@2.6.2 deduped +│ └─┬ winston@3.11.0 +│ ├── @colors/colors@1.6.0 +│ ├─┬ @dabh/diagnostics@2.0.3 +│ │ ├─┬ colorspace@1.1.4 +│ │ │ ├─┬ color@3.2.1 +│ │ │ │ ├── color-convert@1.9.3 deduped +│ │ │ │ └─┬ color-string@1.9.1 +│ │ │ │ ├── color-name@1.1.3 deduped +│ │ │ │ └─┬ simple-swizzle@0.2.2 +│ │ │ │ └── is-arrayish@0.3.2 +│ │ │ └── text-hex@1.0.0 +│ │ ├── enabled@2.0.0 +│ │ └── kuler@2.0.0 +│ ├── async@3.2.5 +│ ├── is-stream@2.0.1 +│ ├─┬ logform@2.6.0 +│ │ ├── @colors/colors@1.6.0 +│ │ ├── @types/triple-beam@1.3.5 +│ │ ├── fecha@4.2.3 +│ │ ├── ms@2.1.2 deduped +│ │ ├── safe-stable-stringify@2.4.3 deduped +│ │ └── triple-beam@1.4.1 deduped +│ ├─┬ one-time@1.0.0 +│ │ └── fn.name@1.1.0 +│ ├─┬ readable-stream@3.6.2 +│ │ ├── inherits@2.0.4 deduped +│ │ ├─┬ string_decoder@1.3.0 +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ └── util-deprecate@1.0.2 +│ ├── safe-stable-stringify@2.4.3 +│ ├── stack-trace@0.0.10 +│ ├── triple-beam@1.4.1 deduped +│ └── winston-transport@4.7.0 deduped +├─┬ @angular/forms@17.2.3 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/material@17.2.1 +│ ├── @angular/animations@17.2.3 deduped +│ ├── @angular/cdk@17.2.1 deduped +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/forms@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ ├─┬ @material/animation@15.0.0-canary.7f224ddd4.0 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/auto-init@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/banner@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├─┬ @material/tokens@15.0.0-canary.7f224ddd4.0 +│ │ │ └── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/base@15.0.0-canary.7f224ddd4.0 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/button@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├─┬ @material/focus-ring@15.0.0-canary.7f224ddd4.0 +│ │ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ │ └── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/card@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/checkbox@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/chips@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/checkbox@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── safevalues@0.3.4 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/circular-progress@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├─┬ @material/progress-indicator@15.0.0-canary.7f224ddd4.0 +│ │ │ └── tslib@2.6.2 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/data-table@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/checkbox@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/icon-button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/linear-progress@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/list@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/menu@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/select@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/density@15.0.0-canary.7f224ddd4.0 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/dialog@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/icon-button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/dom@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/drawer@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/list@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/elevation@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/fab@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/feature-targeting@15.0.0-canary.7f224ddd4.0 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/floating-label@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/form-field@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/icon-button@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/image-list@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/layout-grid@15.0.0-canary.7f224ddd4.0 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/line-ripple@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/linear-progress@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/progress-indicator@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/list@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/menu-surface@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/menu@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/list@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/menu-surface@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/notched-outline@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/floating-label@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/radio@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/ripple@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/rtl@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/segmented-button@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/touch-target@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/select@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/floating-label@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/line-ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/list@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/menu-surface@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/menu@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/notched-outline@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/shape@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/slider@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/snackbar@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/icon-button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/switch@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── safevalues@0.3.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/tab-bar@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tab-indicator@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tab-scroller@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tab@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/tab-indicator@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/tab-scroller@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tab@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/tab@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/focus-ring@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tab-indicator@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/textfield@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/density@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/floating-label@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/line-ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/notched-outline@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/theme@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/tooltip@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/button@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/dom@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/tokens@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── safevalues@0.3.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/top-app-bar@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/animation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/elevation@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/ripple@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/shape@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/typography@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/touch-target@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/base@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/rtl@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @material/typography@15.0.0-canary.7f224ddd4.0 +│ │ ├── @material/feature-targeting@15.0.0-canary.7f224ddd4.0 deduped +│ │ ├── @material/theme@15.0.0-canary.7f224ddd4.0 deduped +│ │ └── tslib@2.6.2 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/platform-browser-dynamic@17.2.3 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/compiler@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/platform-browser@17.2.3 +│ ├── @angular/animations@17.2.3 deduped +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ └── tslib@2.6.2 deduped +├─┬ @angular/router@17.2.3 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├─┬ @capacitor/android@5.7.0 +│ └── @capacitor/core@5.7.0 deduped +├─┬ @capacitor/cli@5.7.0 +│ ├─┬ @ionic/cli-framework-output@2.2.8 +│ │ ├── @ionic/utils-terminal@2.3.5 deduped +│ │ ├── debug@4.3.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @ionic/utils-fs@3.1.7 +│ │ ├─┬ @types/fs-extra@8.1.5 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ fs-extra@9.1.0 +│ │ │ ├── at-least-node@1.0.0 deduped +│ │ │ ├── graceful-fs@4.2.11 +│ │ │ ├─┬ jsonfile@6.1.0 +│ │ │ │ ├── graceful-fs@4.2.11 deduped +│ │ │ │ └── universalify@2.0.1 deduped +│ │ │ └── universalify@2.0.1 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @ionic/utils-subprocess@2.1.14 +│ │ ├─┬ @ionic/utils-array@2.1.6 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├── @ionic/utils-fs@3.1.7 deduped +│ │ ├─┬ @ionic/utils-process@2.1.11 +│ │ │ ├─┬ @ionic/utils-object@2.1.6 +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ └── tslib@2.6.2 deduped +│ │ │ ├─┬ @ionic/utils-terminal@2.3.4 +│ │ │ │ ├── @types/slice-ansi@4.0.0 deduped +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ ├── signal-exit@3.0.7 deduped +│ │ │ │ ├── slice-ansi@4.0.0 deduped +│ │ │ │ ├── string-width@4.2.3 deduped +│ │ │ │ ├── strip-ansi@6.0.1 deduped +│ │ │ │ ├── tslib@2.6.2 deduped +│ │ │ │ ├── untildify@4.0.0 deduped +│ │ │ │ └── wrap-ansi@7.0.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── signal-exit@3.0.7 deduped +│ │ │ ├── tree-kill@1.2.2 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├─┬ @ionic/utils-stream@3.1.6 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├─┬ @ionic/utils-terminal@2.3.4 +│ │ │ ├── @types/slice-ansi@4.0.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── signal-exit@3.0.7 deduped +│ │ │ ├── slice-ansi@4.0.0 deduped +│ │ │ ├── string-width@4.2.3 deduped +│ │ │ ├── strip-ansi@6.0.1 deduped +│ │ │ ├── tslib@2.6.2 deduped +│ │ │ ├── untildify@4.0.0 deduped +│ │ │ └── wrap-ansi@7.0.0 deduped +│ │ ├── cross-spawn@7.0.3 deduped +│ │ ├── debug@4.3.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @ionic/utils-terminal@2.3.5 +│ │ ├── @types/slice-ansi@4.0.0 +│ │ ├── debug@4.3.4 deduped +│ │ ├── signal-exit@3.0.7 +│ │ ├─┬ slice-ansi@4.0.0 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ ├── astral-regex@2.0.0 +│ │ │ └── is-fullwidth-code-point@3.0.0 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ ├── untildify@4.0.0 deduped +│ │ └─┬ wrap-ansi@7.0.0 +│ │ ├─┬ ansi-styles@4.3.0 +│ │ │ └─┬ color-convert@2.0.1 +│ │ │ └── color-name@1.1.4 +│ │ ├── string-width@4.2.3 deduped +│ │ └── strip-ansi@6.0.1 deduped +│ ├── commander@9.5.0 +│ ├─┬ debug@4.3.4 +│ │ └── ms@2.1.2 +│ ├── env-paths@2.2.1 +│ ├── kleur@4.1.5 +│ ├─┬ native-run@2.0.1 +│ │ ├── @ionic/utils-fs@3.1.7 deduped +│ │ ├── @ionic/utils-terminal@2.3.5 deduped +│ │ ├─┬ bplist-parser@0.3.2 +│ │ │ └── big-integer@1.6.52 +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ elementtree@0.1.7 +│ │ │ └── sax@1.1.4 deduped +│ │ ├── ini@4.1.1 deduped +│ │ ├── plist@3.1.0 deduped +│ │ ├── split2@4.2.0 +│ │ ├─┬ through2@4.0.2 +│ │ │ └── readable-stream@3.6.2 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ └── yauzl@2.10.0 deduped +│ ├─┬ open@8.4.2 +│ │ ├── define-lazy-prop@2.0.0 +│ │ ├── is-docker@2.2.1 +│ │ └─┬ is-wsl@2.2.0 +│ │ └── is-docker@2.2.1 deduped +│ ├─┬ plist@3.1.0 +│ │ ├── @xmldom/xmldom@0.8.10 +│ │ ├── base64-js@1.5.1 +│ │ └── xmlbuilder@15.1.1 +│ ├─┬ prompts@2.4.2 +│ │ ├── kleur@3.0.3 +│ │ └── sisteransi@1.0.5 +│ ├─┬ rimraf@4.4.1 +│ │ └─┬ glob@9.3.5 +│ │ ├── fs.realpath@1.0.0 deduped +│ │ ├─┬ minimatch@8.0.4 +│ │ │ └── brace-expansion@2.0.1 deduped +│ │ ├── minipass@4.2.8 +│ │ └─┬ path-scurry@1.10.1 +│ │ ├── lru-cache@10.2.0 +│ │ └── minipass@7.0.4 deduped +│ ├── semver@7.6.0 deduped +│ ├─┬ tar@6.2.0 +│ │ ├── chownr@2.0.0 +│ │ ├─┬ fs-minipass@2.1.0 +│ │ │ └─┬ minipass@3.3.6 +│ │ │ └── yallist@4.0.0 deduped +│ │ ├── minipass@5.0.0 +│ │ ├─┬ minizlib@2.1.2 +│ │ │ ├─┬ minipass@3.3.6 +│ │ │ │ └── yallist@4.0.0 deduped +│ │ │ └── yallist@4.0.0 +│ │ ├── mkdirp@1.0.4 +│ │ └── yallist@4.0.0 +│ ├── tslib@2.6.2 deduped +│ └─┬ xml2js@0.5.0 +│ ├── sax@1.1.4 +│ └── xmlbuilder@11.0.1 +├─┬ @capacitor/core@5.7.0 +│ └── tslib@2.6.2 deduped +├─┬ @capacitor/ios@5.7.0 +│ └── @capacitor/core@5.7.0 deduped +├─┬ @codetrix-studio/capacitor-google-auth@3.4.0-rc.0 +│ └── @capacitor/core@5.7.0 deduped +├─┬ @cypress/schematic@2.5.1 +│ ├── @angular/cli@17.2.1 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── jsonc-parser@3.2.1 deduped +│ └─┬ rxjs@6.6.7 +│ └── tslib@1.14.1 +├─┬ @ngx-pwa/local-storage@17.0.0 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── rxjs@7.8.1 deduped +│ └── tslib@2.6.2 deduped +├── @types/jasmine@5.1.4 +├─┬ @types/jasminewd2@2.0.13 +│ └── @types/jasmine@5.1.4 deduped +├─┬ @types/node@20.11.21 +│ └── undici-types@5.26.5 +├─┬ @typescript-eslint/eslint-plugin@7.1.0 +│ ├── @eslint-community/regexpp@4.10.0 +│ ├── @typescript-eslint/parser@7.1.0 deduped +│ ├─┬ @typescript-eslint/scope-manager@7.1.0 +│ │ ├── @typescript-eslint/types@7.1.0 deduped +│ │ └── @typescript-eslint/visitor-keys@7.1.0 deduped +│ ├─┬ @typescript-eslint/type-utils@7.1.0 +│ │ ├── @typescript-eslint/typescript-estree@7.1.0 deduped +│ │ ├── @typescript-eslint/utils@7.1.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── eslint@8.57.0 deduped +│ │ └── ts-api-utils@1.2.1 deduped +│ ├─┬ @typescript-eslint/utils@7.1.0 +│ │ ├── @eslint-community/eslint-utils@4.4.0 deduped +│ │ ├── @types/json-schema@7.0.15 deduped +│ │ ├── @types/semver@7.5.8 deduped +│ │ ├── @typescript-eslint/scope-manager@7.1.0 deduped +│ │ ├── @typescript-eslint/types@7.1.0 deduped +│ │ ├── @typescript-eslint/typescript-estree@7.1.0 deduped +│ │ ├── eslint@8.57.0 deduped +│ │ └── semver@7.6.0 deduped +│ ├─┬ @typescript-eslint/visitor-keys@7.1.0 +│ │ ├── @typescript-eslint/types@7.1.0 deduped +│ │ └── eslint-visitor-keys@3.4.3 deduped +│ ├── debug@4.3.4 deduped +│ ├── eslint@8.57.0 deduped +│ ├── graphemer@1.4.0 +│ ├── ignore@5.3.0 deduped +│ ├── natural-compare@1.4.0 +│ ├── semver@7.6.0 deduped +│ └─┬ ts-api-utils@1.2.1 +│ └── typescript@5.3.3 deduped +├─┬ @typescript-eslint/parser@7.1.0 +│ ├── @typescript-eslint/scope-manager@7.1.0 deduped +│ ├── @typescript-eslint/types@7.1.0 +│ ├─┬ @typescript-eslint/typescript-estree@7.1.0 +│ │ ├── @typescript-eslint/types@7.1.0 deduped +│ │ ├── @typescript-eslint/visitor-keys@7.1.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ globby@11.1.0 +│ │ │ ├── array-union@2.1.0 +│ │ │ ├── dir-glob@3.0.1 deduped +│ │ │ ├── fast-glob@3.3.2 deduped +│ │ │ ├── ignore@5.3.0 deduped +│ │ │ ├── merge2@1.4.1 deduped +│ │ │ └── slash@3.0.0 +│ │ ├── is-glob@4.0.3 deduped +│ │ ├─┬ minimatch@9.0.3 +│ │ │ └─┬ brace-expansion@2.0.1 +│ │ │ └── balanced-match@1.0.2 deduped +│ │ ├── semver@7.6.0 deduped +│ │ └── ts-api-utils@1.2.1 deduped +│ ├── @typescript-eslint/visitor-keys@7.1.0 deduped +│ ├── debug@4.3.4 deduped +│ └── eslint@8.57.0 deduped +├── angular2-uuid@1.1.1 +├─┬ component@1.1.0 +│ ├── co@3.1.0 +│ ├── commander@2.20.3 +│ ├─┬ component-build@1.2.2 +│ │ ├─┬ builder-autoprefixer@1.0.4 +│ │ │ └─┬ autoprefixer-core@3.1.2 +│ │ │ ├── caniuse-db@1.0.30001591 +│ │ │ └─┬ postcss@2.2.6 +│ │ │ ├── js-base64@2.1.9 +│ │ │ └─┬ source-map@0.1.43 +│ │ │ └── amdefine@1.0.1 +│ │ ├─┬ builder-es6-module-to-cjs@1.1.0 +│ │ │ ├─┬ es6-module-jstransform@0.1.4 +│ │ │ │ ├── esprima-fb@3001.1.0-dev-harmony-fb +│ │ │ │ └─┬ jstransform@3.0.0 +│ │ │ │ ├── base62@0.1.1 +│ │ │ │ ├── esprima-fb@3001.1.0-dev-harmony-fb deduped +│ │ │ │ └─┬ source-map@0.1.31 +│ │ │ │ └── amdefine@1.0.1 deduped +│ │ │ └── is-module@1.0.0 +│ │ ├─┬ component-builder@1.2.1 +│ │ │ ├── chanel@2.2.0 deduped +│ │ │ ├── co@3.1.0 deduped +│ │ │ ├── component-flatten@1.0.1 deduped +│ │ │ ├─┬ component-manifest@1.0.0 +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ │ ├── graceful-fs@2.0.3 deduped +│ │ │ │ └── unglob@0.1.2 deduped +│ │ │ ├── component-require2@1.1.1 +│ │ │ ├── cp@0.1.1 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ ├── graceful-fs@2.0.3 deduped +│ │ │ ├── mkdirp@0.3.5 deduped +│ │ │ ├── requires@1.0.2 +│ │ │ └─┬ syntax-error@1.4.0 +│ │ │ └─┬ acorn-node@1.8.2 +│ │ │ ├── acorn-walk@7.2.0 +│ │ │ ├── acorn@7.4.1 +│ │ │ └── xtend@4.0.2 +│ │ └── debug@4.3.4 deduped +│ ├─┬ component-consoler@2.0.0 +│ │ └── debug@4.3.4 deduped +│ ├─┬ component-flatten@1.0.1 +│ │ └── semver@2.3.2 +│ ├─┬ component-ls@2.1.0 +│ │ └── archy@0.0.2 +│ ├─┬ component-outdated2@1.0.5 +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├── component-flatten@1.0.1 deduped +│ │ ├── component-remotes@1.2.0 deduped +│ │ ├── generator-supported@0.0.1 +│ │ └── semver@2.3.2 +│ ├─┬ component-pin@1.0.5 +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├── component-flatten@1.0.1 deduped +│ │ ├── component-remotes@1.2.0 deduped +│ │ ├── generator-supported@0.0.1 deduped +│ │ └── semver@2.3.2 +│ ├─┬ component-remotes@1.2.0 +│ │ ├── co@3.1.0 deduped +│ │ ├─┬ cogent@0.4.3-fix-redirects (git+ssh://git@github.com/timaschew/cogent.git#2246bd071392f5053a3a110024fd608a40a593ba) +│ │ │ ├── co@3.1.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ ├── netrc@0.1.4 +│ │ │ ├─┬ proxy-agent@1.1.1 +│ │ │ │ ├─┬ http-proxy-agent@0.2.7 +│ │ │ │ │ ├── agent-base@1.0.2 +│ │ │ │ │ ├─┬ debug@2.6.9 +│ │ │ │ │ │ └── ms@2.0.0 +│ │ │ │ │ └── extend@3.0.2 deduped +│ │ │ │ ├─┬ https-proxy-agent@0.3.6 +│ │ │ │ │ ├── agent-base@1.0.2 deduped +│ │ │ │ │ ├── debug@2.6.9 deduped +│ │ │ │ │ └── extend@3.0.2 deduped +│ │ │ │ ├── lru-cache@2.5.2 +│ │ │ │ ├─┬ pac-proxy-agent@0.2.0 +│ │ │ │ │ ├── agent-base@1.0.2 +│ │ │ │ │ ├─┬ debug@2.6.9 +│ │ │ │ │ │ └── ms@2.0.0 +│ │ │ │ │ ├── extend@1.2.1 +│ │ │ │ │ ├─┬ get-uri@0.1.4 +│ │ │ │ │ │ ├── data-uri-to-buffer@0.0.4 +│ │ │ │ │ │ ├─┬ debug@2.6.9 +│ │ │ │ │ │ │ └── ms@2.0.0 +│ │ │ │ │ │ ├── extend@3.0.2 deduped +│ │ │ │ │ │ ├── file-uri-to-path@0.0.2 +│ │ │ │ │ │ ├─┬ ftp@0.3.10 +│ │ │ │ │ │ │ ├─┬ readable-stream@1.1.14 +│ │ │ │ │ │ │ │ ├── core-util-is@1.0.2 deduped +│ │ │ │ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ │ │ │ ├── isarray@0.0.1 +│ │ │ │ │ │ │ │ └── string_decoder@0.10.31 +│ │ │ │ │ │ │ └── xregexp@2.0.0 +│ │ │ │ │ │ └─┬ readable-stream@2.3.8 +│ │ │ │ │ │ ├── core-util-is@1.0.2 deduped +│ │ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ │ ├── isarray@1.0.0 deduped +│ │ │ │ │ │ ├── process-nextick-args@2.0.1 deduped +│ │ │ │ │ │ ├── safe-buffer@5.1.2 +│ │ │ │ │ │ ├─┬ string_decoder@1.1.1 +│ │ │ │ │ │ │ └── safe-buffer@5.1.2 deduped +│ │ │ │ │ │ └── util-deprecate@1.0.2 deduped +│ │ │ │ │ ├─┬ pac-resolver@1.2.6 +│ │ │ │ │ │ ├── co@3.0.6 +│ │ │ │ │ │ ├─┬ degenerator@1.0.4 +│ │ │ │ │ │ │ ├─┬ ast-types@0.14.2 +│ │ │ │ │ │ │ │ └── tslib@2.6.2 deduped +│ │ │ │ │ │ │ ├── escodegen@1.14.3 deduped +│ │ │ │ │ │ │ └── esprima@3.1.3 +│ │ │ │ │ │ ├── netmask@1.0.6 +│ │ │ │ │ │ ├─┬ regenerator@0.8.46 +│ │ │ │ │ │ │ ├─┬ commoner@0.10.8 +│ │ │ │ │ │ │ │ ├── commander@2.20.3 +│ │ │ │ │ │ │ │ ├─┬ detective@4.7.1 +│ │ │ │ │ │ │ │ │ ├── acorn@5.7.4 +│ │ │ │ │ │ │ │ │ └── defined@1.0.1 +│ │ │ │ │ │ │ │ ├─┬ glob@5.0.15 +│ │ │ │ │ │ │ │ │ ├── inflight@1.0.6 deduped +│ │ │ │ │ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ │ │ │ │ ├─┬ minimatch@3.1.2 +│ │ │ │ │ │ │ │ │ │ └─┬ brace-expansion@1.1.11 +│ │ │ │ │ │ │ │ │ │ ├── balanced-match@1.0.2 deduped +│ │ │ │ │ │ │ │ │ │ └── concat-map@0.0.1 deduped +│ │ │ │ │ │ │ │ │ ├── once@1.4.0 deduped +│ │ │ │ │ │ │ │ │ └── path-is-absolute@1.0.1 deduped +│ │ │ │ │ │ │ │ ├── graceful-fs@4.2.11 +│ │ │ │ │ │ │ │ ├── iconv-lite@0.4.24 deduped +│ │ │ │ │ │ │ │ ├─┬ mkdirp@0.5.6 +│ │ │ │ │ │ │ │ │ └── minimist@1.2.8 deduped +│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped +│ │ │ │ │ │ │ │ ├── q@1.5.1 +│ │ │ │ │ │ │ │ └─┬ recast@0.11.23 +│ │ │ │ │ │ │ │ ├── ast-types@0.9.6 +│ │ │ │ │ │ │ │ ├── esprima@3.1.3 +│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped +│ │ │ │ │ │ │ │ └── source-map@0.5.7 +│ │ │ │ │ │ │ ├─┬ defs@1.1.1 +│ │ │ │ │ │ │ │ ├─┬ alter@0.2.0 +│ │ │ │ │ │ │ │ │ └── stable@0.1.8 +│ │ │ │ │ │ │ │ ├── ast-traverse@0.1.1 +│ │ │ │ │ │ │ │ ├── breakable@1.0.0 +│ │ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb +│ │ │ │ │ │ │ │ ├── simple-fmt@0.1.0 +│ │ │ │ │ │ │ │ ├── simple-is@0.2.0 +│ │ │ │ │ │ │ │ ├── stringmap@0.2.2 +│ │ │ │ │ │ │ │ ├── stringset@0.2.1 +│ │ │ │ │ │ │ │ ├── tryor@0.1.2 +│ │ │ │ │ │ │ │ └─┬ yargs@3.27.0 +│ │ │ │ │ │ │ │ ├── camelcase@1.2.1 +│ │ │ │ │ │ │ │ ├─┬ cliui@2.1.0 +│ │ │ │ │ │ │ │ │ ├─┬ center-align@0.1.3 +│ │ │ │ │ │ │ │ │ │ ├─┬ align-text@0.1.4 +│ │ │ │ │ │ │ │ │ │ │ ├─┬ kind-of@3.2.2 +│ │ │ │ │ │ │ │ │ │ │ │ └── is-buffer@1.1.6 +│ │ │ │ │ │ │ │ │ │ │ ├── longest@1.0.1 +│ │ │ │ │ │ │ │ │ │ │ └── repeat-string@1.6.1 +│ │ │ │ │ │ │ │ │ │ └── lazy-cache@1.0.4 +│ │ │ │ │ │ │ │ │ ├─┬ right-align@0.1.3 +│ │ │ │ │ │ │ │ │ │ └── align-text@0.1.4 deduped +│ │ │ │ │ │ │ │ │ └── wordwrap@0.0.2 +│ │ │ │ │ │ │ │ ├── decamelize@1.2.0 +│ │ │ │ │ │ │ │ ├─┬ os-locale@1.4.0 +│ │ │ │ │ │ │ │ │ └─┬ lcid@1.0.0 +│ │ │ │ │ │ │ │ │ └── invert-kv@1.0.0 +│ │ │ │ │ │ │ │ ├── window-size@0.1.4 +│ │ │ │ │ │ │ │ └── y18n@3.2.2 +│ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb +│ │ │ │ │ │ │ ├── private@0.1.8 +│ │ │ │ │ │ │ ├─┬ recast@0.10.33 +│ │ │ │ │ │ │ │ ├── ast-types@0.8.12 +│ │ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb +│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped +│ │ │ │ │ │ │ │ └── source-map@0.5.7 +│ │ │ │ │ │ │ ├── regenerator-runtime@0.9.6 +│ │ │ │ │ │ │ └── through@2.3.8 deduped +│ │ │ │ │ │ └── thunkify@2.1.2 +│ │ │ │ │ ├── proxy-agent@1.1.1 deduped +│ │ │ │ │ └── stream-to-array@1.0.0 deduped +│ │ │ │ └─┬ socks-proxy-agent@1.0.2 +│ │ │ │ ├── agent-base@1.0.2 deduped +│ │ │ │ ├── extend@1.2.1 +│ │ │ │ └─┬ socks@1.1.10 +│ │ │ │ ├── ip@1.1.9 +│ │ │ │ └── smart-buffer@1.1.15 +│ │ │ ├─┬ raw-body@1.3.4 +│ │ │ │ ├── bytes@1.0.0 +│ │ │ │ └── iconv-lite@0.4.8 +│ │ │ ├── statuses@1.5.0 +│ │ │ └─┬ write-to@1.1.1 +│ │ │ ├── dethroy@1.0.2 +│ │ │ └── mkdirp@0.3.5 deduped +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├─┬ component-validator@1.1.1 +│ │ │ └── component-consoler@2.0.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── generator-supported@0.0.1 deduped +│ │ ├── graceful-fs@2.0.3 +│ │ └── semver@2.3.2 +│ ├─┬ component-resolver@1.3.0 +│ │ ├─┬ chanel@2.2.0 +│ │ │ ├── co@3.1.0 deduped +│ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ └── to-descriptor@1.0.1 +│ │ ├── co@3.1.0 deduped +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├─┬ component-downloader@1.2.0 +│ │ │ ├── chanel@2.2.0 deduped +│ │ │ ├── co@3.1.0 deduped +│ │ │ ├── component-consoler@2.0.0 deduped +│ │ │ ├── component-remotes@1.2.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├─┬ decompress@0.2.5 +│ │ │ │ ├── adm-zip@0.4.16 +│ │ │ │ ├─┬ ext-name@1.0.1 +│ │ │ │ │ ├─┬ ext-list@0.2.0 +│ │ │ │ │ │ └─┬ got@0.2.0 +│ │ │ │ │ │ └── object-assign@0.3.1 +│ │ │ │ │ └── underscore.string@2.3.3 +│ │ │ │ ├── get-stdin@0.1.0 +│ │ │ │ ├── mkdirp@0.3.5 deduped +│ │ │ │ ├─┬ nopt@2.2.1 +│ │ │ │ │ └── abbrev@1.1.1 deduped +│ │ │ │ ├─┬ rimraf@2.7.1 +│ │ │ │ │ └── glob@7.2.3 deduped +│ │ │ │ ├─┬ stream-combiner@0.0.4 +│ │ │ │ │ └── duplexer@0.1.2 deduped +│ │ │ │ ├─┬ tar@0.1.20 +│ │ │ │ │ ├─┬ block-stream@0.0.9 +│ │ │ │ │ │ └── inherits@2.0.4 deduped +│ │ │ │ │ ├─┬ fstream@0.1.31 +│ │ │ │ │ │ ├─┬ graceful-fs@3.0.12 +│ │ │ │ │ │ │ └── natives@1.1.6 +│ │ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ │ ├─┬ mkdirp@0.5.6 +│ │ │ │ │ │ │ └── minimist@1.2.8 deduped +│ │ │ │ │ │ └─┬ rimraf@2.7.1 +│ │ │ │ │ │ └── glob@7.2.3 deduped +│ │ │ │ │ └── inherits@2.0.4 deduped +│ │ │ │ └─┬ tempfile@0.1.3 +│ │ │ │ └── uuid@1.4.2 +│ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ ├── graceful-fs@2.0.3 deduped +│ │ │ ├── mkdirp@0.3.5 deduped +│ │ │ ├─┬ rimraf@2.7.1 +│ │ │ │ └── glob@7.2.3 deduped +│ │ │ ├── semver@2.3.2 +│ │ │ ├── unglob@0.1.2 deduped +│ │ │ └── write-to@1.1.1 deduped +│ │ ├── component-flatten@1.0.1 deduped +│ │ ├── component-remotes@1.2.0 deduped +│ │ ├── component-validator@1.1.1 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── generator-supported@0.0.1 deduped +│ │ ├── graceful-fs@2.0.3 deduped +│ │ ├── semver@2.3.2 +│ │ └─┬ unglob@0.1.2 +│ │ ├── generator-supported@0.0.1 deduped +│ │ ├─┬ glob@3.2.11 +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ └─┬ minimatch@0.3.0 +│ │ │ ├── lru-cache@2.7.3 deduped +│ │ │ └── sigmund@1.0.1 deduped +│ │ └─┬ minimatch@0.2.14 +│ │ ├── lru-cache@2.7.3 +│ │ └── sigmund@1.0.1 +│ ├─┬ component-search2@1.1.1 +│ │ ├── bytes@0.3.0 +│ │ ├─┬ cogent@0.4.3 +│ │ │ ├── co@3.1.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── generator-supported@0.0.1 deduped +│ │ │ ├── netrc@0.1.4 deduped +│ │ │ ├── proxy-agent@1.1.1 deduped +│ │ │ ├── raw-body@1.3.4 deduped +│ │ │ ├── statuses@1.5.0 deduped +│ │ │ └── write-to@1.1.1 deduped +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ event-stream@3.3.5 +│ │ │ ├── duplexer@0.1.2 deduped +│ │ │ ├── from@0.1.7 +│ │ │ ├── map-stream@0.0.7 +│ │ │ ├─┬ pause-stream@0.0.11 +│ │ │ │ └── through@2.3.8 deduped +│ │ │ ├─┬ split@1.0.1 +│ │ │ │ └── through@2.3.8 deduped +│ │ │ ├─┬ stream-combiner@0.2.2 +│ │ │ │ ├── duplexer@0.1.2 deduped +│ │ │ │ └── through@2.3.8 deduped +│ │ │ └── through@2.3.8 deduped +│ │ ├── generator-supported@0.0.1 deduped +│ │ ├─┬ JSONStream@0.8.4 +│ │ │ ├── jsonparse@0.0.5 +│ │ │ └── through@2.3.8 deduped +│ │ └── stream-to-array@1.0.0 +│ ├─┬ component-updater@1.0.5 +│ │ ├── component-consoler@2.0.0 deduped +│ │ ├── component-flatten@1.0.1 deduped +│ │ ├── component-remotes@1.2.0 deduped +│ │ ├── generator-supported@0.0.1 deduped +│ │ └── semver@2.3.2 +│ ├─┬ component-watcher@1.0.3 +│ │ ├── debug@4.3.4 deduped +│ │ └─┬ sane@0.8.1 +│ │ ├─┬ minimatch@0.2.14 +│ │ │ ├── lru-cache@2.7.3 +│ │ │ └── sigmund@1.0.1 deduped +│ │ ├─┬ walker@1.0.8 +│ │ │ └─┬ makeerror@1.0.12 +│ │ │ └── tmpl@1.0.5 +│ │ └── watch@0.10.0 +│ ├── debug@4.3.4 deduped +│ ├── mkdirp@0.3.5 +│ ├─┬ rimraf@2.7.1 +│ │ └── glob@7.2.3 deduped +│ ├── semver@2.3.2 +│ ├─┬ superagent@0.17.0 +│ │ ├── cookiejar@1.3.0 +│ │ ├── debug@0.7.4 +│ │ ├── emitter-component@1.0.0 +│ │ ├── extend@1.2.1 +│ │ ├── formidable@1.0.14 +│ │ ├── methods@0.0.1 +│ │ ├── mime@1.2.5 +│ │ ├── qs@0.6.5 +│ │ └── reduce-component@1.0.1 +│ ├─┬ tiny-lr-fork@0.0.5 +│ │ ├── debug@0.7.4 +│ │ ├── faye-websocket@0.4.4 +│ │ ├─┬ noptify@0.0.3 +│ │ │ └─┬ nopt@2.0.0 +│ │ │ └── abbrev@1.1.1 +│ │ └── qs@0.5.6 +│ └── win-fork@1.1.1 +├─┬ cypress@13.6.6 +│ ├─┬ @cypress/request@3.0.1 +│ │ ├── aws-sign2@0.7.0 +│ │ ├── aws4@1.12.0 +│ │ ├── caseless@0.12.0 +│ │ ├─┬ combined-stream@1.0.8 +│ │ │ └── delayed-stream@1.0.0 +│ │ ├── extend@3.0.2 +│ │ ├── forever-agent@0.6.1 +│ │ ├─┬ form-data@2.3.3 +│ │ │ ├── asynckit@0.4.0 deduped +│ │ │ ├── combined-stream@1.0.8 deduped +│ │ │ └── mime-types@2.1.35 deduped +│ │ ├─┬ http-signature@1.3.6 +│ │ │ ├── assert-plus@1.0.0 +│ │ │ ├─┬ jsprim@2.0.2 +│ │ │ │ ├── assert-plus@1.0.0 deduped +│ │ │ │ ├── extsprintf@1.3.0 +│ │ │ │ ├── json-schema@0.4.0 +│ │ │ │ └─┬ verror@1.10.0 +│ │ │ │ ├── assert-plus@1.0.0 deduped +│ │ │ │ ├── core-util-is@1.0.2 deduped +│ │ │ │ └── extsprintf@1.3.0 deduped +│ │ │ └─┬ sshpk@1.18.0 +│ │ │ ├─┬ asn1@0.2.6 +│ │ │ │ └── safer-buffer@2.1.2 deduped +│ │ │ ├── assert-plus@1.0.0 deduped +│ │ │ ├─┬ bcrypt-pbkdf@1.0.2 +│ │ │ │ └── tweetnacl@0.14.5 deduped +│ │ │ ├─┬ dashdash@1.14.1 +│ │ │ │ └── assert-plus@1.0.0 deduped +│ │ │ ├─┬ ecc-jsbn@0.1.2 +│ │ │ │ ├── jsbn@0.1.1 +│ │ │ │ └── safer-buffer@2.1.2 deduped +│ │ │ ├─┬ getpass@0.1.7 +│ │ │ │ └── assert-plus@1.0.0 deduped +│ │ │ ├── jsbn@0.1.1 +│ │ │ ├── safer-buffer@2.1.2 deduped +│ │ │ └── tweetnacl@0.14.5 +│ │ ├── is-typedarray@1.0.0 +│ │ ├── isstream@0.1.2 +│ │ ├── json-stringify-safe@5.0.1 +│ │ ├── mime-types@2.1.35 deduped +│ │ ├── performance-now@2.1.0 +│ │ ├─┬ qs@6.10.4 +│ │ │ └─┬ side-channel@1.0.5 +│ │ │ ├── call-bind@1.0.7 deduped +│ │ │ ├── es-errors@1.3.0 deduped +│ │ │ ├── get-intrinsic@1.2.4 deduped +│ │ │ └── object-inspect@1.13.1 +│ │ ├── safe-buffer@5.2.1 +│ │ ├─┬ tough-cookie@4.1.3 +│ │ │ ├── psl@1.9.0 +│ │ │ ├── punycode@2.3.1 +│ │ │ ├── universalify@0.2.0 +│ │ │ └─┬ url-parse@1.5.10 +│ │ │ ├── querystringify@2.2.0 +│ │ │ └── requires-port@1.0.0 deduped +│ │ ├─┬ tunnel-agent@0.6.0 +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ └── uuid@8.3.2 deduped +│ ├─┬ @cypress/xvfb@1.2.4 +│ │ ├─┬ debug@3.2.7 +│ │ │ └── ms@2.1.2 deduped +│ │ └── lodash.once@4.1.1 +│ ├── @types/sinonjs__fake-timers@8.1.1 +│ ├── @types/sizzle@2.3.8 +│ ├── arch@2.2.0 +│ ├── blob-util@2.0.2 +│ ├── bluebird@3.7.2 +│ ├─┬ buffer@5.7.1 +│ │ ├── base64-js@1.5.1 deduped +│ │ └── ieee754@1.2.1 +│ ├── cachedir@2.4.0 +│ ├─┬ chalk@4.1.2 +│ │ ├─┬ ansi-styles@4.3.0 +│ │ │ └─┬ color-convert@2.0.1 +│ │ │ └── color-name@1.1.4 +│ │ └─┬ supports-color@7.2.0 +│ │ └── has-flag@4.0.0 deduped +│ ├── check-more-types@2.24.0 +│ ├─┬ cli-cursor@3.1.0 +│ │ └─┬ restore-cursor@3.1.0 +│ │ ├── onetime@5.1.2 deduped +│ │ └── signal-exit@3.0.7 deduped +│ ├─┬ cli-table3@0.6.3 +│ │ ├── @colors/colors@1.5.0 deduped +│ │ └── string-width@4.2.3 deduped +│ ├── commander@6.2.1 +│ ├── common-tags@1.8.2 +│ ├── dayjs@1.11.10 +│ ├── debug@4.3.4 deduped +│ ├─┬ enquirer@2.3.6 +│ │ └── ansi-colors@4.1.3 deduped +│ ├── eventemitter2@6.4.7 +│ ├─┬ execa@4.1.0 +│ │ ├── cross-spawn@7.0.3 deduped +│ │ ├─┬ get-stream@5.2.0 +│ │ │ └── pump@3.0.0 deduped +│ │ ├── human-signals@1.1.1 +│ │ ├── is-stream@2.0.1 deduped +│ │ ├── merge-stream@2.0.0 +│ │ ├── npm-run-path@4.0.1 deduped +│ │ ├─┬ onetime@5.1.2 +│ │ │ └── mimic-fn@2.1.0 +│ │ ├── signal-exit@3.0.7 deduped +│ │ └── strip-final-newline@2.0.0 +│ ├─┬ executable@4.1.1 +│ │ └── pify@2.3.0 +│ ├─┬ extract-zip@2.0.1 +│ │ ├─┬ @types/yauzl@2.10.3 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── get-stream@5.2.0 deduped +│ │ └── yauzl@2.10.0 deduped +│ ├─┬ figures@3.2.0 +│ │ └── escape-string-regexp@1.0.5 +│ ├─┬ fs-extra@9.1.0 +│ │ ├── at-least-node@1.0.0 +│ │ ├── graceful-fs@4.2.11 +│ │ ├─┬ jsonfile@6.1.0 +│ │ │ ├── graceful-fs@4.2.11 deduped +│ │ │ └── universalify@2.0.1 deduped +│ │ └── universalify@2.0.1 +│ ├─┬ getos@3.2.1 +│ │ └── async@3.2.5 deduped +│ ├─┬ is-ci@3.0.1 +│ │ └── ci-info@3.9.0 +│ ├─┬ is-installed-globally@0.4.0 +│ │ ├─┬ global-dirs@3.0.1 +│ │ │ └── ini@2.0.0 +│ │ └── is-path-inside@3.0.3 deduped +│ ├── lazy-ass@1.6.0 +│ ├─┬ listr2@3.14.0 +│ │ ├─┬ cli-truncate@2.1.0 +│ │ │ ├─┬ slice-ansi@3.0.0 +│ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ ├── astral-regex@2.0.0 deduped +│ │ │ │ └── is-fullwidth-code-point@3.0.0 deduped +│ │ │ └── string-width@4.2.3 deduped +│ │ ├── colorette@2.0.20 deduped +│ │ ├── enquirer@2.3.6 deduped +│ │ ├─┬ log-update@4.0.0 +│ │ │ ├── ansi-escapes@4.3.2 deduped +│ │ │ ├── cli-cursor@3.1.0 deduped +│ │ │ ├── slice-ansi@4.0.0 deduped +│ │ │ └─┬ wrap-ansi@6.2.0 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ ├── string-width@4.2.3 deduped +│ │ │ └── strip-ansi@6.0.1 deduped +│ │ ├─┬ p-map@4.0.0 +│ │ │ └─┬ aggregate-error@3.1.0 +│ │ │ ├── clean-stack@2.2.0 +│ │ │ └── indent-string@4.0.0 +│ │ ├── rfdc@1.3.1 +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── through@2.3.8 deduped +│ │ └── wrap-ansi@7.0.0 deduped +│ ├── lodash@4.17.21 +│ ├─┬ log-symbols@4.1.0 +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ └── is-unicode-supported@0.1.0 deduped +│ ├── minimist@1.2.8 +│ ├── ospath@1.2.2 +│ ├── pretty-bytes@5.6.0 +│ ├── process@0.11.10 +│ ├── proxy-from-env@1.0.0 +│ ├─┬ request-progress@3.0.0 +│ │ └── throttleit@1.0.1 +│ ├── semver@7.6.0 deduped +│ ├─┬ supports-color@8.1.1 +│ │ └── has-flag@4.0.0 +│ ├── tmp@0.2.1 deduped +│ ├── untildify@4.0.0 +│ └─┬ yauzl@2.10.0 +│ ├── buffer-crc32@0.2.13 +│ └─┬ fd-slicer@1.1.0 +│ └── pend@1.2.0 +├─┬ eslint-plugin-deprecation@2.0.0 +│ ├── @typescript-eslint/utils@6.19.0 deduped +│ ├── eslint@8.57.0 deduped +│ ├── tslib@2.6.2 deduped +│ ├─┬ tsutils@3.21.0 +│ │ ├── tslib@1.14.1 +│ │ └── typescript@5.3.3 deduped +│ └── typescript@5.3.3 deduped +├─┬ eslint-plugin-optimize-regex@1.2.1 +│ └── regexp-tree@0.1.27 +├─┬ eslint-plugin-simple-import-sort@12.0.0 +│ └── eslint@8.57.0 deduped +├─┬ eslint-plugin-unused-imports@3.1.0 +│ ├── @typescript-eslint/eslint-plugin@7.1.0 deduped +│ ├── eslint-rule-composer@0.3.0 +│ └── eslint@8.57.0 deduped +├─┬ eslint@8.57.0 +│ ├─┬ @eslint-community/eslint-utils@4.4.0 +│ │ ├── eslint-visitor-keys@3.4.3 deduped +│ │ └── eslint@8.57.0 deduped +│ ├── @eslint-community/regexpp@4.10.0 deduped +│ ├─┬ @eslint/eslintrc@2.1.4 +│ │ ├─┬ ajv@6.12.6 +│ │ │ ├── fast-deep-equal@3.1.3 deduped +│ │ │ ├── fast-json-stable-stringify@2.1.0 deduped +│ │ │ ├── json-schema-traverse@0.4.1 +│ │ │ └── uri-js@4.4.1 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├── espree@9.6.1 deduped +│ │ ├─┬ globals@13.24.0 +│ │ │ └── type-fest@0.20.2 +│ │ ├── ignore@5.3.0 deduped +│ │ ├─┬ import-fresh@3.3.0 +│ │ │ ├─┬ parent-module@1.0.1 +│ │ │ │ └── callsites@3.1.0 +│ │ │ └── resolve-from@4.0.0 +│ │ ├─┬ js-yaml@4.1.0 +│ │ │ └── argparse@2.0.1 +│ │ ├─┬ minimatch@3.1.2 +│ │ │ └─┬ brace-expansion@1.1.11 +│ │ │ ├── balanced-match@1.0.2 deduped +│ │ │ └── concat-map@0.0.1 deduped +│ │ └── strip-json-comments@3.1.1 deduped +│ ├── @eslint/js@8.57.0 +│ ├─┬ @humanwhocodes/config-array@0.11.14 +│ │ ├── @humanwhocodes/object-schema@2.0.2 +│ │ ├── debug@4.3.4 deduped +│ │ └─┬ minimatch@3.1.2 +│ │ └─┬ brace-expansion@1.1.11 +│ │ ├── balanced-match@1.0.2 deduped +│ │ └── concat-map@0.0.1 deduped +│ ├── @humanwhocodes/module-importer@1.0.1 +│ ├─┬ @nodelib/fs.walk@1.2.8 +│ │ ├─┬ @nodelib/fs.scandir@2.1.5 +│ │ │ ├── @nodelib/fs.stat@2.0.5 deduped +│ │ │ └─┬ run-parallel@1.2.0 +│ │ │ └── queue-microtask@1.2.3 +│ │ └─┬ fastq@1.17.1 +│ │ └── reusify@1.0.4 +│ ├── @ungap/structured-clone@1.2.0 +│ ├─┬ ajv@6.12.6 +│ │ ├── fast-deep-equal@3.1.3 deduped +│ │ ├── fast-json-stable-stringify@2.1.0 +│ │ ├── json-schema-traverse@0.4.1 +│ │ └─┬ uri-js@4.4.1 +│ │ └── punycode@2.3.1 +│ ├─┬ chalk@4.1.2 +│ │ ├─┬ ansi-styles@4.3.0 +│ │ │ └─┬ color-convert@2.0.1 +│ │ │ └── color-name@1.1.4 +│ │ └─┬ supports-color@7.2.0 +│ │ └── has-flag@4.0.0 +│ ├─┬ cross-spawn@7.0.3 +│ │ ├── path-key@3.1.1 +│ │ ├─┬ shebang-command@2.0.0 +│ │ │ └── shebang-regex@3.0.0 +│ │ └─┬ which@2.0.2 +│ │ └── isexe@2.0.0 deduped +│ ├── debug@4.3.4 deduped +│ ├─┬ doctrine@3.0.0 +│ │ └── esutils@2.0.3 deduped +│ ├── escape-string-regexp@4.0.0 +│ ├─┬ eslint-scope@7.2.2 +│ │ ├── esrecurse@4.3.0 deduped +│ │ └── estraverse@5.3.0 deduped +│ ├── eslint-visitor-keys@3.4.3 +│ ├─┬ espree@9.6.1 +│ │ ├─┬ acorn-jsx@5.3.2 +│ │ │ └── acorn@8.11.3 deduped +│ │ ├── acorn@8.11.3 deduped +│ │ └── eslint-visitor-keys@3.4.3 deduped +│ ├─┬ esquery@1.5.0 +│ │ └── estraverse@5.3.0 deduped +│ ├── esutils@2.0.3 +│ ├── fast-deep-equal@3.1.3 +│ ├─┬ file-entry-cache@6.0.1 +│ │ └─┬ flat-cache@3.2.0 +│ │ ├── flatted@3.3.1 deduped +│ │ ├─┬ keyv@4.5.4 +│ │ │ └── json-buffer@3.0.1 +│ │ └─┬ rimraf@3.0.2 +│ │ └── glob@7.2.3 deduped +│ ├─┬ find-up@5.0.0 +│ │ ├─┬ locate-path@6.0.0 +│ │ │ └─┬ p-locate@5.0.0 +│ │ │ └── p-limit@3.1.0 deduped +│ │ └── path-exists@4.0.0 +│ ├─┬ glob-parent@6.0.2 +│ │ └── is-glob@4.0.3 deduped +│ ├─┬ globals@13.24.0 +│ │ └── type-fest@0.20.2 +│ ├── graphemer@1.4.0 deduped +│ ├── ignore@5.3.0 deduped +│ ├── imurmurhash@0.1.4 +│ ├─┬ is-glob@4.0.3 +│ │ └── is-extglob@2.1.1 +│ ├── is-path-inside@3.0.3 +│ ├─┬ js-yaml@4.1.0 +│ │ └── argparse@2.0.1 +│ ├── json-stable-stringify-without-jsonify@1.0.1 +│ ├─┬ levn@0.4.1 +│ │ ├── prelude-ls@1.2.1 +│ │ └─┬ type-check@0.4.0 +│ │ └── prelude-ls@1.2.1 deduped +│ ├── lodash.merge@4.6.2 +│ ├─┬ minimatch@3.1.2 +│ │ └─┬ brace-expansion@1.1.11 +│ │ ├── balanced-match@1.0.2 +│ │ └── concat-map@0.0.1 +│ ├── natural-compare@1.4.0 deduped +│ ├─┬ optionator@0.9.3 +│ │ ├── @aashutoshrathi/word-wrap@1.2.6 +│ │ ├── deep-is@0.1.4 +│ │ ├── fast-levenshtein@2.0.6 +│ │ ├── levn@0.4.1 deduped +│ │ ├── prelude-ls@1.2.1 deduped +│ │ └── type-check@0.4.0 deduped +│ ├─┬ strip-ansi@6.0.1 +│ │ └── ansi-regex@5.0.1 +│ └── text-table@0.2.0 +├─┬ firebase-tools@13.4.0 +│ ├─┬ @google-cloud/pubsub@3.7.5 +│ │ ├─┬ @google-cloud/paginator@4.0.1 +│ │ │ ├── arrify@2.0.1 deduped +│ │ │ └── extend@3.0.2 deduped +│ │ ├── @google-cloud/precise-date@3.0.1 +│ │ ├── @google-cloud/projectify@3.0.0 +│ │ ├── @google-cloud/promisify@2.0.4 +│ │ ├── @opentelemetry/api@1.7.0 +│ │ ├── @opentelemetry/semantic-conventions@1.3.1 +│ │ ├─┬ @types/duplexify@3.6.4 +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├── @types/long@4.0.2 +│ │ ├── arrify@2.0.1 +│ │ ├── extend@3.0.2 deduped +│ │ ├─┬ google-auth-library@8.9.0 +│ │ │ ├── arrify@2.0.1 deduped +│ │ │ ├── base64-js@1.5.1 deduped +│ │ │ ├── ecdsa-sig-formatter@1.0.11 deduped +│ │ │ ├── fast-text-encoding@1.0.6 deduped +│ │ │ ├─┬ gaxios@5.1.3 +│ │ │ │ ├── extend@3.0.2 deduped +│ │ │ │ ├─┬ https-proxy-agent@5.0.1 +│ │ │ │ │ ├─┬ agent-base@6.0.2 +│ │ │ │ │ │ └── debug@4.3.4 deduped +│ │ │ │ │ └── debug@4.3.4 deduped +│ │ │ │ ├── is-stream@2.0.1 deduped +│ │ │ │ └── node-fetch@2.7.0 deduped +│ │ │ ├─┬ gcp-metadata@5.3.0 +│ │ │ │ ├── gaxios@5.1.3 deduped +│ │ │ │ └── json-bigint@1.0.0 deduped +│ │ │ ├─┬ gtoken@6.1.2 +│ │ │ │ ├── gaxios@5.1.3 deduped +│ │ │ │ ├─┬ google-p12-pem@4.0.1 +│ │ │ │ │ └── node-forge@1.3.1 deduped +│ │ │ │ └── jws@4.0.0 deduped +│ │ │ ├── jws@4.0.0 deduped +│ │ │ └─┬ lru-cache@6.0.0 +│ │ │ └── yallist@4.0.0 +│ │ ├─┬ google-gax@3.6.1 +│ │ │ ├─┬ @grpc/grpc-js@1.8.21 +│ │ │ │ ├── @grpc/proto-loader@0.7.10 deduped +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ ├── @grpc/proto-loader@0.7.10 deduped +│ │ │ ├── @types/long@4.0.2 deduped +│ │ │ ├─┬ @types/rimraf@3.0.2 +│ │ │ │ ├─┬ @types/glob@8.1.0 +│ │ │ │ │ ├── @types/minimatch@5.1.2 +│ │ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ ├── abort-controller@3.0.0 deduped +│ │ │ ├─┬ duplexify@4.1.2 +│ │ │ │ ├── end-of-stream@1.4.4 deduped +│ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ ├── readable-stream@3.6.2 deduped +│ │ │ │ └── stream-shift@1.0.3 +│ │ │ ├── fast-text-encoding@1.0.6 deduped +│ │ │ ├─┬ google-auth-library@8.9.0 +│ │ │ │ ├── arrify@2.0.1 deduped +│ │ │ │ ├── base64-js@1.5.1 deduped +│ │ │ │ ├── ecdsa-sig-formatter@1.0.11 deduped +│ │ │ │ ├── fast-text-encoding@1.0.6 deduped +│ │ │ │ ├─┬ gaxios@5.1.3 +│ │ │ │ │ ├── extend@3.0.2 deduped +│ │ │ │ │ ├─┬ https-proxy-agent@5.0.1 +│ │ │ │ │ │ ├─┬ agent-base@6.0.2 +│ │ │ │ │ │ │ └── debug@4.3.4 deduped +│ │ │ │ │ │ └── debug@4.3.4 deduped +│ │ │ │ │ ├── is-stream@2.0.1 deduped +│ │ │ │ │ └── node-fetch@2.7.0 deduped +│ │ │ │ ├─┬ gcp-metadata@5.3.0 +│ │ │ │ │ ├── gaxios@5.1.3 deduped +│ │ │ │ │ └── json-bigint@1.0.0 deduped +│ │ │ │ ├─┬ gtoken@6.1.2 +│ │ │ │ │ ├── gaxios@5.1.3 deduped +│ │ │ │ │ ├─┬ google-p12-pem@4.0.1 +│ │ │ │ │ │ └── node-forge@1.3.1 deduped +│ │ │ │ │ └── jws@4.0.0 deduped +│ │ │ │ ├── jws@4.0.0 deduped +│ │ │ │ └─┬ lru-cache@6.0.0 +│ │ │ │ └── yallist@4.0.0 +│ │ │ ├── is-stream-ended@0.1.4 deduped +│ │ │ ├── node-fetch@2.7.0 deduped +│ │ │ ├── object-hash@3.0.0 +│ │ │ ├─┬ proto3-json-serializer@1.1.1 +│ │ │ │ └── protobufjs@7.2.6 deduped +│ │ │ ├─┬ protobufjs-cli@1.1.1 +│ │ │ │ ├─┬ chalk@4.1.2 +│ │ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ │ └─┬ supports-color@7.2.0 +│ │ │ │ │ └── has-flag@4.0.0 +│ │ │ │ ├─┬ escodegen@1.14.3 +│ │ │ │ │ ├── esprima@4.0.1 deduped +│ │ │ │ │ ├── estraverse@4.3.0 +│ │ │ │ │ ├── esutils@2.0.3 deduped +│ │ │ │ │ ├─┬ optionator@0.8.3 +│ │ │ │ │ │ ├── deep-is@0.1.4 deduped +│ │ │ │ │ │ ├── fast-levenshtein@2.0.6 deduped +│ │ │ │ │ │ ├─┬ levn@0.3.0 +│ │ │ │ │ │ │ ├── prelude-ls@1.1.2 deduped +│ │ │ │ │ │ │ └── type-check@0.3.2 deduped +│ │ │ │ │ │ ├── prelude-ls@1.1.2 +│ │ │ │ │ │ ├─┬ type-check@0.3.2 +│ │ │ │ │ │ │ └── prelude-ls@1.1.2 deduped +│ │ │ │ │ │ └── word-wrap@1.2.5 +│ │ │ │ │ └── source-map@0.6.1 +│ │ │ │ ├── espree@9.6.1 deduped +│ │ │ │ ├── estraverse@5.3.0 deduped +│ │ │ │ ├─┬ glob@8.1.0 +│ │ │ │ │ ├── fs.realpath@1.0.0 deduped +│ │ │ │ │ ├── inflight@1.0.6 deduped +│ │ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ │ ├─┬ minimatch@5.1.6 +│ │ │ │ │ │ └── brace-expansion@2.0.1 deduped +│ │ │ │ │ └── once@1.4.0 deduped +│ │ │ │ ├─┬ jsdoc@4.0.2 +│ │ │ │ │ ├── @babel/parser@7.24.0 deduped +│ │ │ │ │ ├─┬ @jsdoc/salty@0.2.7 +│ │ │ │ │ │ └── lodash@4.17.21 deduped +│ │ │ │ │ ├─┬ @types/markdown-it@12.2.3 +│ │ │ │ │ │ ├── @types/linkify-it@3.0.5 +│ │ │ │ │ │ └── @types/mdurl@1.0.5 +│ │ │ │ │ ├── bluebird@3.7.2 deduped +│ │ │ │ │ ├─┬ catharsis@0.9.0 +│ │ │ │ │ │ └── lodash@4.17.21 deduped +│ │ │ │ │ ├── escape-string-regexp@2.0.0 +│ │ │ │ │ ├─┬ js2xmlparser@4.0.2 +│ │ │ │ │ │ └── xmlcreate@2.0.4 +│ │ │ │ │ ├─┬ klaw@3.0.0 +│ │ │ │ │ │ └── graceful-fs@4.2.11 +│ │ │ │ │ ├─┬ markdown-it-anchor@8.6.7 +│ │ │ │ │ │ ├── @types/markdown-it@12.2.3 deduped +│ │ │ │ │ │ └── markdown-it@12.3.2 deduped +│ │ │ │ │ ├─┬ markdown-it@12.3.2 +│ │ │ │ │ │ ├── argparse@2.0.1 +│ │ │ │ │ │ ├── entities@2.1.0 +│ │ │ │ │ │ ├─┬ linkify-it@3.0.3 +│ │ │ │ │ │ │ └── uc.micro@1.0.6 deduped +│ │ │ │ │ │ ├── mdurl@1.0.1 +│ │ │ │ │ │ └── uc.micro@1.0.6 +│ │ │ │ │ ├── marked@4.3.0 +│ │ │ │ │ ├── mkdirp@1.0.4 +│ │ │ │ │ ├─┬ requizzle@0.2.4 +│ │ │ │ │ │ └── lodash@4.17.21 deduped +│ │ │ │ │ ├── strip-json-comments@3.1.1 deduped +│ │ │ │ │ └── underscore@1.13.6 +│ │ │ │ ├── minimist@1.2.8 deduped +│ │ │ │ ├── protobufjs@7.2.6 deduped +│ │ │ │ ├── semver@7.6.0 deduped +│ │ │ │ ├── tmp@0.2.1 deduped +│ │ │ │ └── uglify-js@3.17.4 +│ │ │ ├─┬ protobufjs@7.2.4 +│ │ │ │ ├── @protobufjs/aspromise@1.1.2 +│ │ │ │ ├── @protobufjs/base64@1.1.2 +│ │ │ │ ├── @protobufjs/codegen@2.0.4 +│ │ │ │ ├── @protobufjs/eventemitter@1.1.0 +│ │ │ │ ├─┬ @protobufjs/fetch@1.1.0 +│ │ │ │ │ ├── @protobufjs/aspromise@1.1.2 deduped +│ │ │ │ │ └── @protobufjs/inquire@1.1.0 deduped +│ │ │ │ ├── @protobufjs/float@1.0.2 +│ │ │ │ ├── @protobufjs/inquire@1.1.0 +│ │ │ │ ├── @protobufjs/path@1.1.2 +│ │ │ │ ├── @protobufjs/pool@1.1.0 +│ │ │ │ ├── @protobufjs/utf8@1.1.0 +│ │ │ │ ├── @types/node@20.11.21 deduped +│ │ │ │ └── long@5.2.3 deduped +│ │ │ └─┬ retry-request@5.0.2 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ └── extend@3.0.2 deduped +│ │ ├── heap-js@2.3.0 +│ │ ├── is-stream-ended@0.1.4 +│ │ ├── lodash.snakecase@4.1.1 +│ │ └── p-defer@3.0.0 +│ ├─┬ abort-controller@3.0.0 +│ │ └── event-target-shim@5.0.1 +│ ├─┬ ajv@6.12.6 +│ │ ├── fast-deep-equal@3.1.3 deduped +│ │ ├── fast-json-stable-stringify@2.1.0 deduped +│ │ ├── json-schema-traverse@0.4.1 +│ │ └── uri-js@4.4.1 deduped +│ ├─┬ archiver@5.3.2 +│ │ ├─┬ archiver-utils@2.1.0 +│ │ │ ├── glob@7.2.3 deduped +│ │ │ ├── graceful-fs@4.2.11 +│ │ │ ├─┬ lazystream@1.0.1 +│ │ │ │ └─┬ readable-stream@2.3.8 +│ │ │ │ ├── core-util-is@1.0.2 deduped +│ │ │ │ ├── inherits@2.0.4 deduped +│ │ │ │ ├── isarray@1.0.0 deduped +│ │ │ │ ├── process-nextick-args@2.0.1 deduped +│ │ │ │ ├── safe-buffer@5.1.2 +│ │ │ │ ├─┬ string_decoder@1.1.1 +│ │ │ │ │ └── safe-buffer@5.1.2 deduped +│ │ │ │ └── util-deprecate@1.0.2 deduped +│ │ │ ├── lodash.defaults@4.2.0 +│ │ │ ├── lodash.difference@4.5.0 +│ │ │ ├── lodash.flatten@4.4.0 +│ │ │ ├── lodash.isplainobject@4.0.6 deduped +│ │ │ ├── lodash.union@4.6.0 +│ │ │ ├── normalize-path@3.0.0 deduped +│ │ │ └─┬ readable-stream@2.3.8 +│ │ │ ├── core-util-is@1.0.2 +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ ├── isarray@1.0.0 +│ │ │ ├── process-nextick-args@2.0.1 +│ │ │ ├── safe-buffer@5.1.2 +│ │ │ ├─┬ string_decoder@1.1.1 +│ │ │ │ └── safe-buffer@5.1.2 deduped +│ │ │ └── util-deprecate@1.0.2 deduped +│ │ ├── async@3.2.5 deduped +│ │ ├── buffer-crc32@0.2.13 deduped +│ │ ├── readable-stream@3.6.2 deduped +│ │ ├─┬ readdir-glob@1.1.3 +│ │ │ └─┬ minimatch@5.1.6 +│ │ │ └── brace-expansion@2.0.1 deduped +│ │ ├── tar-stream@2.2.0 deduped +│ │ └─┬ zip-stream@4.1.1 +│ │ ├─┬ archiver-utils@3.0.4 +│ │ │ ├── glob@7.2.3 deduped +│ │ │ ├── graceful-fs@4.2.11 +│ │ │ ├── lazystream@1.0.1 deduped +│ │ │ ├── lodash.defaults@4.2.0 deduped +│ │ │ ├── lodash.difference@4.5.0 deduped +│ │ │ ├── lodash.flatten@4.4.0 deduped +│ │ │ ├── lodash.isplainobject@4.0.6 deduped +│ │ │ ├── lodash.union@4.6.0 deduped +│ │ │ ├── normalize-path@3.0.0 deduped +│ │ │ └── readable-stream@3.6.2 deduped +│ │ ├─┬ compress-commons@4.1.2 +│ │ │ ├── buffer-crc32@0.2.13 deduped +│ │ │ ├─┬ crc32-stream@4.0.3 +│ │ │ │ ├── crc-32@1.2.2 +│ │ │ │ └── readable-stream@3.6.2 deduped +│ │ │ ├── normalize-path@3.0.0 deduped +│ │ │ └── readable-stream@3.6.2 deduped +│ │ └── readable-stream@3.6.2 deduped +│ ├── async-lock@1.3.2 +│ ├─┬ body-parser@1.20.2 +│ │ ├── bytes@3.1.2 +│ │ ├── content-type@1.0.5 +│ │ ├─┬ debug@2.6.9 +│ │ │ └── ms@2.0.0 +│ │ ├── depd@2.0.0 +│ │ ├── destroy@1.2.0 +│ │ ├─┬ http-errors@2.0.0 +│ │ │ ├── depd@2.0.0 deduped +│ │ │ ├── inherits@2.0.4 deduped +│ │ │ ├── setprototypeof@1.2.0 deduped +│ │ │ ├── statuses@2.0.1 +│ │ │ └── toidentifier@1.0.1 +│ │ ├─┬ iconv-lite@0.4.24 +│ │ │ └── safer-buffer@2.1.2 deduped +│ │ ├─┬ on-finished@2.4.1 +│ │ │ └── ee-first@1.1.1 +│ │ ├─┬ qs@6.11.0 +│ │ │ └── side-channel@1.0.5 deduped +│ │ ├─┬ raw-body@2.5.2 +│ │ │ ├── bytes@3.1.2 deduped +│ │ │ ├── http-errors@2.0.0 deduped +│ │ │ ├── iconv-lite@0.4.24 deduped +│ │ │ └── unpipe@1.0.0 deduped +│ │ ├─┬ type-is@1.6.18 +│ │ │ ├── media-typer@0.3.0 +│ │ │ └── mime-types@2.1.35 deduped +│ │ └── unpipe@1.0.0 +│ ├── chokidar@3.6.0 deduped +│ ├─┬ cjson@0.3.3 +│ │ └─┬ json-parse-helpfulerror@1.0.3 +│ │ └── jju@1.4.0 +│ ├─┬ cli-table@0.3.11 +│ │ └── colors@1.0.3 +│ ├── colorette@2.0.20 +│ ├── commander@4.1.1 +│ ├─┬ configstore@5.0.1 +│ │ ├─┬ dot-prop@5.3.0 +│ │ │ └── is-obj@2.0.0 +│ │ ├── graceful-fs@4.2.11 +│ │ ├─┬ make-dir@3.1.0 +│ │ │ └── semver@6.3.1 +│ │ ├─┬ unique-string@2.0.0 +│ │ │ └── crypto-random-string@2.0.0 +│ │ ├─┬ write-file-atomic@3.0.3 +│ │ │ ├── imurmurhash@0.1.4 deduped +│ │ │ ├── is-typedarray@1.0.0 deduped +│ │ │ ├── signal-exit@3.0.7 deduped +│ │ │ └─┬ typedarray-to-buffer@3.1.5 +│ │ │ └── is-typedarray@1.0.0 deduped +│ │ └── xdg-basedir@4.0.0 +│ ├─┬ cors@2.8.5 +│ │ ├── object-assign@4.1.1 +│ │ └── vary@1.1.2 +│ ├─┬ cross-env@5.2.1 +│ │ └─┬ cross-spawn@6.0.5 +│ │ ├── nice-try@1.0.5 +│ │ ├── path-key@2.0.1 +│ │ ├── semver@5.7.2 +│ │ ├─┬ shebang-command@1.2.0 +│ │ │ └── shebang-regex@1.0.0 +│ │ └─┬ which@1.3.1 +│ │ └── isexe@2.0.0 deduped +│ ├── cross-spawn@7.0.3 deduped +│ ├── csv-parse@5.5.5 +│ ├─┬ deep-equal-in-any-order@2.0.6 +│ │ ├── lodash.mapvalues@4.6.0 +│ │ └─┬ sort-any@2.0.0 +│ │ └── lodash@4.17.21 deduped +│ ├─┬ exegesis-express@4.0.0 +│ │ └── exegesis@4.1.1 deduped +│ ├─┬ exegesis@4.1.1 +│ │ ├─┬ @apidevtools/json-schema-ref-parser@9.1.2 +│ │ │ ├── @jsdevtools/ono@7.1.3 +│ │ │ ├── @types/json-schema@7.0.15 deduped +│ │ │ ├── call-me-maybe@1.0.2 +│ │ │ └─┬ js-yaml@4.1.0 +│ │ │ └── argparse@2.0.1 +│ │ ├── ajv-formats@2.1.1 deduped +│ │ ├── ajv@8.12.0 deduped +│ │ ├── body-parser@1.20.2 deduped +│ │ ├── content-type@1.0.5 deduped +│ │ ├── deep-freeze@0.0.1 +│ │ ├── events-listener@1.1.0 +│ │ ├── glob@7.2.3 deduped +│ │ ├── json-ptr@3.1.1 +│ │ ├── json-schema-traverse@1.0.0 +│ │ ├── lodash@4.17.21 deduped +│ │ ├─┬ openapi3-ts@3.2.0 +│ │ │ └── yaml@2.4.0 +│ │ ├── promise-breaker@6.0.0 +│ │ ├─┬ pump@3.0.0 +│ │ │ ├── end-of-stream@1.4.4 deduped +│ │ │ └── once@1.4.0 deduped +│ │ ├── qs@6.10.4 deduped +│ │ ├─┬ raw-body@2.5.2 +│ │ │ ├── bytes@3.1.2 +│ │ │ ├── http-errors@2.0.0 deduped +│ │ │ ├── iconv-lite@0.4.24 deduped +│ │ │ └── unpipe@1.0.0 deduped +│ │ └── semver@7.6.0 deduped +│ ├─┬ express@4.18.2 +│ │ ├─┬ accepts@1.3.8 +│ │ │ ├── mime-types@2.1.35 deduped +│ │ │ └── negotiator@0.6.3 +│ │ ├── array-flatten@1.1.1 +│ │ ├─┬ body-parser@1.20.1 +│ │ │ ├── bytes@3.1.2 +│ │ │ ├── content-type@1.0.5 deduped +│ │ │ ├── debug@2.6.9 deduped +│ │ │ ├── depd@2.0.0 deduped +│ │ │ ├── destroy@1.2.0 deduped +│ │ │ ├── http-errors@2.0.0 deduped +│ │ │ ├── iconv-lite@0.4.24 deduped +│ │ │ ├── on-finished@2.4.1 deduped +│ │ │ ├── qs@6.11.0 deduped +│ │ │ ├─┬ raw-body@2.5.1 +│ │ │ │ ├── bytes@3.1.2 deduped +│ │ │ │ ├── http-errors@2.0.0 deduped +│ │ │ │ ├── iconv-lite@0.4.24 deduped +│ │ │ │ └── unpipe@1.0.0 deduped +│ │ │ ├── type-is@1.6.18 deduped +│ │ │ └── unpipe@1.0.0 deduped +│ │ ├─┬ content-disposition@0.5.4 +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ ├── content-type@1.0.5 deduped +│ │ ├── cookie-signature@1.0.6 +│ │ ├── cookie@0.5.0 +│ │ ├─┬ debug@2.6.9 +│ │ │ └── ms@2.0.0 +│ │ ├── depd@2.0.0 deduped +│ │ ├── encodeurl@1.0.2 +│ │ ├── escape-html@1.0.3 +│ │ ├── etag@1.8.1 +│ │ ├─┬ finalhandler@1.2.0 +│ │ │ ├─┬ debug@2.6.9 +│ │ │ │ └── ms@2.0.0 +│ │ │ ├── encodeurl@1.0.2 deduped +│ │ │ ├── escape-html@1.0.3 deduped +│ │ │ ├── on-finished@2.4.1 deduped +│ │ │ ├── parseurl@1.3.3 deduped +│ │ │ ├── statuses@2.0.1 +│ │ │ └── unpipe@1.0.0 deduped +│ │ ├── fresh@0.5.2 +│ │ ├── http-errors@2.0.0 deduped +│ │ ├── merge-descriptors@1.0.1 +│ │ ├── methods@1.1.2 +│ │ ├── on-finished@2.4.1 deduped +│ │ ├── parseurl@1.3.3 +│ │ ├── path-to-regexp@0.1.7 +│ │ ├─┬ proxy-addr@2.0.7 +│ │ │ ├── forwarded@0.2.0 +│ │ │ └── ipaddr.js@1.9.1 +│ │ ├─┬ qs@6.11.0 +│ │ │ └── side-channel@1.0.5 deduped +│ │ ├── range-parser@1.2.1 deduped +│ │ ├── safe-buffer@5.2.1 deduped +│ │ ├─┬ send@0.18.0 +│ │ │ ├─┬ debug@2.6.9 +│ │ │ │ └── ms@2.0.0 +│ │ │ ├── depd@2.0.0 deduped +│ │ │ ├── destroy@1.2.0 deduped +│ │ │ ├── encodeurl@1.0.2 deduped +│ │ │ ├── escape-html@1.0.3 deduped +│ │ │ ├── etag@1.8.1 deduped +│ │ │ ├── fresh@0.5.2 deduped +│ │ │ ├── http-errors@2.0.0 deduped +│ │ │ ├── mime@1.6.0 +│ │ │ ├── ms@2.1.3 +│ │ │ ├── on-finished@2.4.1 deduped +│ │ │ ├── range-parser@1.2.1 deduped +│ │ │ └── statuses@2.0.1 +│ │ ├─┬ serve-static@1.15.0 +│ │ │ ├── encodeurl@1.0.2 deduped +│ │ │ ├── escape-html@1.0.3 deduped +│ │ │ ├── parseurl@1.3.3 deduped +│ │ │ └── send@0.18.0 deduped +│ │ ├── setprototypeof@1.2.0 +│ │ ├── statuses@2.0.1 +│ │ ├── type-is@1.6.18 deduped +│ │ ├── utils-merge@1.0.1 +│ │ └── vary@1.1.2 deduped +│ ├── filesize@6.4.0 +│ ├─┬ form-data@4.0.0 +│ │ ├── asynckit@0.4.0 +│ │ ├── combined-stream@1.0.8 deduped +│ │ └── mime-types@2.1.35 deduped +│ ├─┬ fs-extra@10.1.0 +│ │ ├── graceful-fs@4.2.11 +│ │ ├─┬ jsonfile@6.1.0 +│ │ │ ├── graceful-fs@4.2.11 deduped +│ │ │ └── universalify@2.0.1 deduped +│ │ └── universalify@2.0.1 +│ ├── fuzzy@0.1.3 deduped +│ ├─┬ glob@7.2.3 +│ │ ├── fs.realpath@1.0.0 +│ │ ├─┬ inflight@1.0.6 +│ │ │ ├── once@1.4.0 deduped +│ │ │ └── wrappy@1.0.2 +│ │ ├── inherits@2.0.4 +│ │ ├─┬ minimatch@3.1.2 +│ │ │ └─┬ brace-expansion@1.1.11 +│ │ │ ├── balanced-match@1.0.2 deduped +│ │ │ └── concat-map@0.0.1 deduped +│ │ ├─┬ once@1.4.0 +│ │ │ └── wrappy@1.0.2 deduped +│ │ └── path-is-absolute@1.0.1 +│ ├─┬ google-auth-library@7.14.1 +│ │ ├── arrify@2.0.1 deduped +│ │ ├── base64-js@1.5.1 deduped +│ │ ├─┬ ecdsa-sig-formatter@1.0.11 +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ ├── fast-text-encoding@1.0.6 +│ │ ├─┬ gaxios@4.3.3 +│ │ │ ├── abort-controller@3.0.0 deduped +│ │ │ ├── extend@3.0.2 deduped +│ │ │ ├─┬ https-proxy-agent@5.0.1 +│ │ │ │ ├─┬ agent-base@6.0.2 +│ │ │ │ │ └── debug@4.3.4 deduped +│ │ │ │ └── debug@4.3.4 deduped +│ │ │ ├── is-stream@2.0.1 deduped +│ │ │ └── node-fetch@2.7.0 deduped +│ │ ├─┬ gcp-metadata@4.3.1 +│ │ │ ├── gaxios@4.3.3 deduped +│ │ │ └─┬ json-bigint@1.0.0 +│ │ │ └── bignumber.js@9.1.2 +│ │ ├─┬ gtoken@5.3.2 +│ │ │ ├── gaxios@4.3.3 deduped +│ │ │ ├─┬ google-p12-pem@3.1.4 +│ │ │ │ └── node-forge@1.3.1 deduped +│ │ │ └── jws@4.0.0 deduped +│ │ ├─┬ jws@4.0.0 +│ │ │ ├─┬ jwa@2.0.0 +│ │ │ │ ├── buffer-equal-constant-time@1.0.1 +│ │ │ │ ├── ecdsa-sig-formatter@1.0.11 deduped +│ │ │ │ └── safe-buffer@5.2.1 deduped +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ └─┬ lru-cache@6.0.0 +│ │ └── yallist@4.0.0 +│ ├─┬ inquirer-autocomplete-prompt@2.0.1 +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── inquirer@8.2.6 deduped +│ │ ├── picocolors@1.0.0 deduped +│ │ ├── run-async@2.4.1 +│ │ └── rxjs@7.8.1 deduped +│ ├─┬ inquirer@8.2.6 +│ │ ├── ansi-escapes@4.3.2 deduped +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├── cli-cursor@3.1.0 deduped +│ │ ├── cli-width@3.0.0 +│ │ ├── external-editor@3.1.0 deduped +│ │ ├── figures@3.2.0 deduped +│ │ ├── lodash@4.17.21 deduped +│ │ ├── mute-stream@0.0.8 +│ │ ├── ora@5.4.1 deduped +│ │ ├── run-async@2.4.1 deduped +│ │ ├── rxjs@7.8.1 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ ├── through@2.3.8 deduped +│ │ └─┬ wrap-ansi@6.2.0 +│ │ ├── ansi-styles@4.3.0 deduped +│ │ ├── string-width@4.2.3 deduped +│ │ └── strip-ansi@6.0.1 deduped +│ ├─┬ js-yaml@3.14.1 +│ │ ├─┬ argparse@1.0.10 +│ │ │ └── sprintf-js@1.0.3 +│ │ └── esprima@4.0.1 +│ ├─┬ jsonwebtoken@9.0.2 +│ │ ├─┬ jws@3.2.2 +│ │ │ ├─┬ jwa@1.4.1 +│ │ │ │ ├── buffer-equal-constant-time@1.0.1 deduped +│ │ │ │ ├── ecdsa-sig-formatter@1.0.11 deduped +│ │ │ │ └── safe-buffer@5.2.1 deduped +│ │ │ └── safe-buffer@5.2.1 deduped +│ │ ├── lodash.includes@4.3.0 +│ │ ├── lodash.isboolean@3.0.3 +│ │ ├── lodash.isinteger@4.0.4 +│ │ ├── lodash.isnumber@3.0.3 +│ │ ├── lodash.isplainobject@4.0.6 +│ │ ├── lodash.isstring@4.0.1 +│ │ ├── lodash.once@4.1.1 deduped +│ │ ├── ms@2.1.2 deduped +│ │ └── semver@7.6.0 deduped +│ ├── leven@3.1.0 +│ ├─┬ libsodium-wrappers@0.7.13 +│ │ └── libsodium@0.7.13 +│ ├── lodash@4.17.21 deduped +│ ├─┬ marked-terminal@5.2.0 +│ │ ├─┬ ansi-escapes@6.2.0 +│ │ │ └── type-fest@3.13.1 +│ │ ├─┬ cardinal@2.1.1 +│ │ │ ├── ansicolors@0.3.2 +│ │ │ └─┬ redeyed@2.1.1 +│ │ │ └── esprima@4.0.1 deduped +│ │ ├── chalk@5.3.0 +│ │ ├── cli-table3@0.6.3 deduped +│ │ ├── marked@4.3.0 deduped +│ │ ├─┬ node-emoji@1.11.0 +│ │ │ └── lodash@4.17.21 deduped +│ │ └─┬ supports-hyperlinks@2.3.0 +│ │ ├── has-flag@4.0.0 +│ │ └─┬ supports-color@7.2.0 +│ │ └── has-flag@4.0.0 deduped +│ ├── marked@4.3.0 +│ ├── mime@2.6.0 +│ ├─┬ minimatch@3.1.2 +│ │ └─┬ brace-expansion@1.1.11 +│ │ ├── balanced-match@1.0.2 deduped +│ │ └── concat-map@0.0.1 deduped +│ ├─┬ morgan@1.10.0 +│ │ ├─┬ basic-auth@2.0.1 +│ │ │ └── safe-buffer@5.1.2 +│ │ ├─┬ debug@2.6.9 +│ │ │ └── ms@2.0.0 +│ │ ├── depd@2.0.0 deduped +│ │ ├─┬ on-finished@2.3.0 +│ │ │ └── ee-first@1.1.1 deduped +│ │ └── on-headers@1.0.2 +│ ├── node-fetch@2.7.0 deduped +│ ├─┬ open@6.4.0 +│ │ └── is-wsl@1.1.0 +│ ├── ora@5.4.1 deduped +│ ├─┬ p-limit@3.1.0 +│ │ └── yocto-queue@0.1.0 +│ ├─┬ portfinder@1.0.32 +│ │ ├─┬ async@2.6.4 +│ │ │ └── lodash@4.17.21 deduped +│ │ ├─┬ debug@3.2.7 +│ │ │ └── ms@2.1.2 deduped +│ │ └─┬ mkdirp@0.5.6 +│ │ └── minimist@1.2.8 deduped +│ ├── progress@2.0.3 +│ ├─┬ proxy-agent@6.4.0 +│ │ ├── agent-base@7.1.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ http-proxy-agent@7.0.2 +│ │ │ ├── agent-base@7.1.0 deduped +│ │ │ └── debug@4.3.4 deduped +│ │ ├─┬ https-proxy-agent@7.0.4 +│ │ │ ├── agent-base@7.1.0 deduped +│ │ │ └── debug@4.3.4 deduped +│ │ ├── lru-cache@7.18.3 +│ │ ├─┬ pac-proxy-agent@7.0.1 +│ │ │ ├── @tootallnate/quickjs-emscripten@0.23.0 +│ │ │ ├── agent-base@7.1.0 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├─┬ get-uri@6.0.3 +│ │ │ │ ├── basic-ftp@5.0.5 +│ │ │ │ ├── data-uri-to-buffer@6.0.2 +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ └─┬ fs-extra@11.2.0 +│ │ │ │ ├── graceful-fs@4.2.11 deduped +│ │ │ │ ├── jsonfile@6.1.0 deduped +│ │ │ │ └── universalify@2.0.1 deduped +│ │ │ ├── http-proxy-agent@7.0.2 deduped +│ │ │ ├── https-proxy-agent@7.0.4 deduped +│ │ │ ├─┬ pac-resolver@7.0.1 +│ │ │ │ ├─┬ degenerator@5.0.1 +│ │ │ │ │ ├─┬ ast-types@0.13.4 +│ │ │ │ │ │ └── tslib@2.6.2 deduped +│ │ │ │ │ ├─┬ escodegen@2.1.0 +│ │ │ │ │ │ ├── esprima@4.0.1 deduped +│ │ │ │ │ │ ├── estraverse@5.3.0 deduped +│ │ │ │ │ │ ├── esutils@2.0.3 deduped +│ │ │ │ │ │ └── source-map@0.6.1 +│ │ │ │ │ └── esprima@4.0.1 deduped +│ │ │ │ └── netmask@2.0.2 +│ │ │ └── socks-proxy-agent@8.0.2 deduped +│ │ ├── proxy-from-env@1.1.0 +│ │ └─┬ socks-proxy-agent@8.0.2 +│ │ ├── agent-base@7.1.0 deduped +│ │ ├── debug@4.3.4 deduped +│ │ └─┬ socks@2.8.1 +│ │ ├─┬ ip-address@9.0.5 +│ │ │ ├── jsbn@1.1.0 +│ │ │ └── sprintf-js@1.1.3 +│ │ └── smart-buffer@4.2.0 +│ ├── retry@0.13.1 +│ ├─┬ rimraf@3.0.2 +│ │ └── glob@7.2.3 deduped +│ ├── semver@7.6.0 deduped +│ ├── stream-chain@2.2.5 +│ ├─┬ stream-json@1.8.0 +│ │ └── stream-chain@2.2.5 deduped +│ ├── strip-ansi@6.0.1 deduped +│ ├─┬ superstatic@9.0.3 +│ │ ├── basic-auth-connect@1.0.0 +│ │ ├── commander@10.0.1 +│ │ ├── compression@1.7.4 deduped +│ │ ├── connect@3.7.0 deduped +│ │ ├── destroy@1.2.0 deduped +│ │ ├─┬ fast-url-parser@1.1.3 +│ │ │ └── punycode@1.4.1 +│ │ ├─┬ glob-slasher@1.0.1 +│ │ │ ├── glob-slash@1.0.0 +│ │ │ ├─┬ lodash.isobject@2.4.1 +│ │ │ │ └── lodash._objecttypes@2.4.1 +│ │ │ └─┬ toxic@1.0.1 +│ │ │ └── lodash@4.17.21 deduped +│ │ ├── is-url@1.2.4 +│ │ ├─┬ join-path@1.1.1 +│ │ │ ├── as-array@2.0.0 +│ │ │ ├── url-join@0.0.1 +│ │ │ └── valid-url@1.0.9 +│ │ ├── lodash@4.17.21 deduped +│ │ ├── mime-types@2.1.35 deduped +│ │ ├─┬ minimatch@6.2.0 +│ │ │ └── brace-expansion@2.0.1 deduped +│ │ ├── morgan@1.10.0 deduped +│ │ ├── on-finished@2.4.1 deduped +│ │ ├── on-headers@1.0.2 deduped +│ │ ├─┬ path-to-regexp@1.8.0 +│ │ │ └── isarray@0.0.1 +│ │ ├─┬ re2@1.20.9 +│ │ │ ├── install-artifact-from-github@1.3.5 +│ │ │ ├── nan@2.18.0 +│ │ │ └── node-gyp@10.0.1 deduped +│ │ ├─┬ router@1.3.8 +│ │ │ ├── array-flatten@3.0.0 +│ │ │ ├─┬ debug@2.6.9 +│ │ │ │ └── ms@2.0.0 +│ │ │ ├── methods@1.1.2 deduped +│ │ │ ├── parseurl@1.3.3 deduped +│ │ │ ├── path-to-regexp@0.1.7 deduped +│ │ │ ├── setprototypeof@1.2.0 deduped +│ │ │ └── utils-merge@1.0.1 deduped +│ │ └── update-notifier-cjs@5.1.6 deduped +│ ├── tar@6.2.0 deduped +│ ├─┬ tcp-port-used@1.0.2 +│ │ ├─┬ debug@4.3.1 +│ │ │ └── ms@2.1.2 deduped +│ │ └─┬ is2@2.0.9 +│ │ ├── deep-is@0.1.4 deduped +│ │ ├── ip-regex@4.3.0 +│ │ └── is-url@1.2.4 deduped +│ ├── tmp@0.2.1 deduped +│ ├── triple-beam@1.4.1 deduped +│ ├─┬ universal-analytics@0.5.3 +│ │ ├── debug@4.3.4 deduped +│ │ └── uuid@8.3.2 deduped +│ ├─┬ update-notifier-cjs@5.1.6 +│ │ ├─┬ boxen@5.1.2 +│ │ │ ├─┬ ansi-align@3.0.1 +│ │ │ │ └── string-width@4.2.3 deduped +│ │ │ ├── camelcase@6.3.0 +│ │ │ ├─┬ chalk@4.1.2 +│ │ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ │ └── color-name@1.1.4 +│ │ │ │ └─┬ supports-color@7.2.0 +│ │ │ │ └── has-flag@4.0.0 +│ │ │ ├── cli-boxes@2.2.1 +│ │ │ ├── string-width@4.2.3 deduped +│ │ │ ├── type-fest@0.20.2 +│ │ │ ├─┬ widest-line@3.1.0 +│ │ │ │ └── string-width@4.2.3 deduped +│ │ │ └── wrap-ansi@7.0.0 deduped +│ │ ├─┬ chalk@4.1.2 +│ │ │ ├─┬ ansi-styles@4.3.0 +│ │ │ │ └─┬ color-convert@2.0.1 +│ │ │ │ └── color-name@1.1.4 +│ │ │ └─┬ supports-color@7.2.0 +│ │ │ └── has-flag@4.0.0 +│ │ ├── configstore@5.0.1 deduped +│ │ ├── has-yarn@2.1.0 +│ │ ├── import-lazy@2.1.0 +│ │ ├─┬ is-ci@2.0.0 +│ │ │ └── ci-info@2.0.0 +│ │ ├── is-installed-globally@0.4.0 deduped +│ │ ├── is-npm@5.0.0 +│ │ ├── is-yarn-global@0.3.0 +│ │ ├─┬ isomorphic-fetch@3.0.0 +│ │ │ ├── node-fetch@2.7.0 deduped +│ │ │ └── whatwg-fetch@3.6.20 +│ │ ├─┬ pupa@2.1.1 +│ │ │ └── escape-goat@2.1.1 +│ │ ├─┬ registry-auth-token@5.0.2 +│ │ │ └─┬ @pnpm/npm-conf@2.2.2 +│ │ │ ├── @pnpm/config.env-replace@1.1.0 +│ │ │ ├─┬ @pnpm/network.ca-file@1.0.2 +│ │ │ │ └── graceful-fs@4.2.10 +│ │ │ └─┬ config-chain@1.1.13 +│ │ │ ├── ini@1.3.8 +│ │ │ └── proto-list@1.2.4 +│ │ ├─┬ registry-url@5.1.0 +│ │ │ └─┬ rc@1.2.8 +│ │ │ ├── deep-extend@0.6.0 +│ │ │ ├── ini@1.3.8 +│ │ │ ├── minimist@1.2.8 deduped +│ │ │ └── strip-json-comments@2.0.1 +│ │ ├─┬ semver-diff@3.1.1 +│ │ │ └── semver@6.3.1 +│ │ ├── semver@7.6.0 deduped +│ │ └── xdg-basedir@4.0.0 deduped +│ ├── uuid@8.3.2 +│ ├─┬ winston-transport@4.7.0 +│ │ ├── logform@2.6.0 deduped +│ │ ├── readable-stream@3.6.2 deduped +│ │ └── triple-beam@1.4.1 deduped +│ ├── winston@3.11.0 deduped +│ └─┬ ws@7.5.9 +│ ├── UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1 +│ └── UNMET OPTIONAL DEPENDENCY utf-8-validate@^5.0.2 +├─┬ firebase@10.8.1 +│ ├─┬ @firebase/analytics-compat@0.2.7 +│ │ ├── @firebase/analytics-types@0.8.0 +│ │ ├── @firebase/analytics@0.10.1 deduped +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├─┬ @firebase/component@0.6.5 +│ │ │ ├── @firebase/util@1.9.4 deduped +│ │ │ └── tslib@2.6.2 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/analytics@0.10.1 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/installations@0.6.5 deduped +│ │ ├─┬ @firebase/logger@0.4.0 +│ │ │ └── tslib@2.6.2 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/app-check-compat@0.3.9 +│ │ ├── @firebase/app-check-types@0.5.0 +│ │ ├── @firebase/app-check@0.8.2 deduped +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/app-check@0.8.2 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/app-compat@0.2.28 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├── @firebase/app-types@0.9.0 +│ ├─┬ @firebase/app@0.9.28 +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── idb@7.1.1 +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/auth-compat@0.5.3 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├─┬ @firebase/auth-types@0.12.0 +│ │ │ ├── @firebase/app-types@0.9.0 deduped +│ │ │ └── @firebase/util@1.9.4 deduped +│ │ ├── @firebase/auth@1.6.1 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ └─┬ undici@5.28.3 +│ │ └── @fastify/busboy@2.1.0 deduped +│ ├─┬ @firebase/auth@1.6.1 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── UNMET OPTIONAL DEPENDENCY @react-native-async-storage/async-storage@^1.18.1 +│ │ ├── tslib@2.6.2 deduped +│ │ └─┬ undici@5.28.3 +│ │ └── @fastify/busboy@2.1.0 deduped +│ ├─┬ @firebase/database-compat@1.0.3 +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├─┬ @firebase/database-types@1.0.1 +│ │ │ ├── @firebase/app-types@0.9.0 deduped +│ │ │ └── @firebase/util@1.9.4 deduped +│ │ ├── @firebase/database@1.0.3 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/database@1.0.3 +│ │ ├── @firebase/app-check-interop-types@0.3.0 +│ │ ├── @firebase/auth-interop-types@0.2.1 +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├─┬ faye-websocket@0.11.4 +│ │ │ └── websocket-driver@0.7.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/firestore-compat@0.3.26 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├─┬ @firebase/firestore-types@3.0.0 +│ │ │ ├── @firebase/app-types@0.9.0 deduped +│ │ │ └── @firebase/util@1.9.4 deduped +│ │ ├── @firebase/firestore@4.4.3 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/firestore@4.4.3 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── @firebase/webchannel-wrapper@0.10.5 +│ │ ├─┬ @grpc/grpc-js@1.9.14 +│ │ │ ├── @grpc/proto-loader@0.7.10 deduped +│ │ │ └── @types/node@20.11.21 deduped +│ │ ├─┬ @grpc/proto-loader@0.7.10 +│ │ │ ├── lodash.camelcase@4.3.0 +│ │ │ ├── long@5.2.3 +│ │ │ ├─┬ protobufjs@7.2.6 +│ │ │ │ ├── @protobufjs/aspromise@1.1.2 deduped +│ │ │ │ ├── @protobufjs/base64@1.1.2 deduped +│ │ │ │ ├── @protobufjs/codegen@2.0.4 deduped +│ │ │ │ ├── @protobufjs/eventemitter@1.1.0 deduped +│ │ │ │ ├── @protobufjs/fetch@1.1.0 deduped +│ │ │ │ ├── @protobufjs/float@1.0.2 deduped +│ │ │ │ ├── @protobufjs/inquire@1.1.0 deduped +│ │ │ │ ├── @protobufjs/path@1.1.2 deduped +│ │ │ │ ├── @protobufjs/pool@1.1.0 deduped +│ │ │ │ ├── @protobufjs/utf8@1.1.0 deduped +│ │ │ │ ├── @types/node@20.11.21 deduped +│ │ │ │ └── long@5.2.3 deduped +│ │ │ └── yargs@17.7.2 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ └─┬ undici@5.28.3 +│ │ └── @fastify/busboy@2.1.0 deduped +│ ├─┬ @firebase/functions-compat@0.3.8 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/functions-types@0.6.0 +│ │ ├── @firebase/functions@0.11.2 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/functions@0.11.2 +│ │ ├── @firebase/app-check-interop-types@0.3.0 deduped +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/auth-interop-types@0.2.1 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/messaging-interop-types@0.2.0 +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ └─┬ undici@5.28.3 +│ │ └── @fastify/busboy@2.1.0 deduped +│ ├─┬ @firebase/installations-compat@0.2.5 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├─┬ @firebase/installations-types@0.5.0 +│ │ │ └── @firebase/app-types@0.9.0 deduped +│ │ ├── @firebase/installations@0.6.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/installations@0.6.5 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── idb@7.1.1 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/messaging-compat@0.2.6 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/messaging@0.12.6 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/messaging@0.12.6 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/installations@0.6.5 deduped +│ │ ├── @firebase/messaging-interop-types@0.2.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── idb@7.1.1 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/performance-compat@0.2.5 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/performance-types@0.2.0 +│ │ ├── @firebase/performance@0.6.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/performance@0.6.5 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/installations@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/remote-config-compat@0.2.5 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/remote-config-types@0.3.0 +│ │ ├── @firebase/remote-config@0.4.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/remote-config@0.4.5 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/installations@0.6.5 deduped +│ │ ├── @firebase/logger@0.4.0 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/storage-compat@0.3.5 +│ │ ├── @firebase/app-compat@0.2.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├─┬ @firebase/storage-types@0.8.0 +│ │ │ ├── @firebase/app-types@0.9.0 deduped +│ │ │ └── @firebase/util@1.9.4 deduped +│ │ ├── @firebase/storage@0.12.2 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ └── tslib@2.6.2 deduped +│ ├─┬ @firebase/storage@0.12.2 +│ │ ├── @firebase/app@0.9.28 deduped +│ │ ├── @firebase/component@0.6.5 deduped +│ │ ├── @firebase/util@1.9.4 deduped +│ │ ├── tslib@2.6.2 deduped +│ │ └─┬ undici@5.28.3 +│ │ └── @fastify/busboy@2.1.0 deduped +│ └─┬ @firebase/util@1.9.4 +│ └── tslib@2.6.2 deduped +├── fuzzy@0.1.3 +├─┬ inquirer-autocomplete-prompt@3.0.1 +│ ├─┬ ansi-escapes@6.2.0 +│ │ └── type-fest@3.13.1 +│ ├─┬ figures@5.0.0 +│ │ ├── escape-string-regexp@5.0.0 +│ │ └── is-unicode-supported@1.3.0 +│ ├── inquirer@9.2.15 deduped +│ ├── picocolors@1.0.0 +│ ├── run-async@2.4.1 +│ └── rxjs@7.8.1 deduped +├─┬ inquirer@9.2.15 +│ ├─┬ @ljharb/through@2.3.12 +│ │ └─┬ call-bind@1.0.7 +│ │ ├─┬ es-define-property@1.0.0 +│ │ │ └── get-intrinsic@1.2.4 deduped +│ │ ├── es-errors@1.3.0 +│ │ ├── function-bind@1.1.2 +│ │ ├─┬ get-intrinsic@1.2.4 +│ │ │ ├── es-errors@1.3.0 deduped +│ │ │ ├── function-bind@1.1.2 deduped +│ │ │ ├── has-proto@1.0.3 +│ │ │ ├── has-symbols@1.0.3 +│ │ │ └── hasown@2.0.1 deduped +│ │ └─┬ set-function-length@1.2.1 +│ │ ├─┬ define-data-property@1.1.4 +│ │ │ ├── es-define-property@1.0.0 deduped +│ │ │ ├── es-errors@1.3.0 deduped +│ │ │ └── gopd@1.0.1 deduped +│ │ ├── es-errors@1.3.0 deduped +│ │ ├── function-bind@1.1.2 deduped +│ │ ├── get-intrinsic@1.2.4 deduped +│ │ ├─┬ gopd@1.0.1 +│ │ │ └── get-intrinsic@1.2.4 deduped +│ │ └─┬ has-property-descriptors@1.0.2 +│ │ └── es-define-property@1.0.0 deduped +│ ├─┬ ansi-escapes@4.3.2 +│ │ └── type-fest@0.21.3 +│ ├── chalk@5.3.0 +│ ├── cli-cursor@3.1.0 deduped +│ ├── cli-width@4.1.0 +│ ├─┬ external-editor@3.1.0 +│ │ ├── chardet@0.7.0 +│ │ ├── iconv-lite@0.4.24 deduped +│ │ └─┬ tmp@0.0.33 +│ │ └── os-tmpdir@1.0.2 +│ ├── figures@3.2.0 deduped +│ ├── lodash@4.17.21 deduped +│ ├── mute-stream@1.0.0 +│ ├── ora@5.4.1 deduped +│ ├── run-async@3.0.0 +│ ├── rxjs@7.8.1 deduped +│ ├─┬ string-width@4.2.3 +│ │ ├── emoji-regex@8.0.0 +│ │ ├── is-fullwidth-code-point@3.0.0 +│ │ └── strip-ansi@6.0.1 deduped +│ ├── strip-ansi@6.0.1 deduped +│ └─┬ wrap-ansi@6.2.0 +│ ├─┬ ansi-styles@4.3.0 +│ │ └─┬ color-convert@2.0.1 +│ │ └── color-name@1.1.4 +│ ├── string-width@4.2.3 deduped +│ └── strip-ansi@6.0.1 deduped +├── jasmine-core@5.1.2 +├─┬ jasmine-spec-reporter@7.0.0 +│ └── colors@1.4.0 +├─┬ karma-chrome-launcher@3.2.0 +│ └─┬ which@1.3.1 +│ └── isexe@2.0.0 +├─┬ karma-coverage-istanbul-reporter@3.0.3 +│ ├── istanbul-lib-coverage@3.2.2 +│ ├─┬ istanbul-lib-report@3.0.1 +│ │ ├── istanbul-lib-coverage@3.2.2 deduped +│ │ ├─┬ make-dir@4.0.0 +│ │ │ └── semver@7.6.0 deduped +│ │ └─┬ supports-color@7.2.0 +│ │ └── has-flag@4.0.0 +│ ├─┬ istanbul-lib-source-maps@3.0.6 +│ │ ├── debug@4.3.4 deduped +│ │ ├── istanbul-lib-coverage@2.0.5 +│ │ ├─┬ make-dir@2.1.0 +│ │ │ ├── pify@4.0.1 +│ │ │ └── semver@5.7.2 +│ │ ├─┬ rimraf@2.7.1 +│ │ │ └── glob@7.2.3 deduped +│ │ └── source-map@0.6.1 +│ ├─┬ istanbul-reports@3.1.7 +│ │ ├── html-escaper@2.0.2 +│ │ └── istanbul-lib-report@3.0.1 deduped +│ └─┬ minimatch@3.1.2 +│ └─┬ brace-expansion@1.1.11 +│ ├── balanced-match@1.0.2 deduped +│ └── concat-map@0.0.1 deduped +├─┬ karma-jasmine-html-reporter@2.1.0 +│ ├── jasmine-core@5.1.2 deduped +│ ├── karma-jasmine@5.1.0 deduped +│ └── karma@6.4.3 deduped +├─┬ karma-jasmine@5.1.0 +│ ├── jasmine-core@4.6.0 +│ └── karma@6.4.3 deduped +├─┬ karma@6.4.3 +│ ├── @colors/colors@1.5.0 +│ ├── body-parser@1.20.2 deduped +│ ├─┬ braces@3.0.2 +│ │ └─┬ fill-range@7.0.1 +│ │ └─┬ to-regex-range@5.0.1 +│ │ └── is-number@7.0.0 +│ ├── chokidar@3.6.0 deduped +│ ├─┬ connect@3.7.0 +│ │ ├─┬ debug@2.6.9 +│ │ │ └── ms@2.0.0 +│ │ ├─┬ finalhandler@1.1.2 +│ │ │ ├── debug@2.6.9 deduped +│ │ │ ├── encodeurl@1.0.2 deduped +│ │ │ ├── escape-html@1.0.3 deduped +│ │ │ ├─┬ on-finished@2.3.0 +│ │ │ │ └── ee-first@1.1.1 deduped +│ │ │ ├── parseurl@1.3.3 deduped +│ │ │ ├── statuses@1.5.0 deduped +│ │ │ └── unpipe@1.0.0 deduped +│ │ ├── parseurl@1.3.3 deduped +│ │ └── utils-merge@1.0.1 deduped +│ ├── di@0.0.1 +│ ├─┬ dom-serialize@2.2.1 +│ │ ├── custom-event@1.0.1 +│ │ ├── ent@2.2.0 +│ │ ├── extend@3.0.2 deduped +│ │ └── void-elements@2.0.1 +│ ├── glob@7.2.3 deduped +│ ├── graceful-fs@4.2.11 +│ ├─┬ http-proxy@1.18.1 +│ │ ├── eventemitter3@4.0.7 +│ │ ├── follow-redirects@1.15.5 +│ │ └── requires-port@1.0.0 +│ ├── isbinaryfile@4.0.10 +│ ├── lodash@4.17.21 deduped +│ ├─┬ log4js@6.9.1 +│ │ ├── date-format@4.0.14 +│ │ ├── debug@4.3.4 deduped +│ │ ├── flatted@3.3.1 +│ │ ├── rfdc@1.3.1 deduped +│ │ └─┬ streamroller@3.1.5 +│ │ ├── date-format@4.0.14 deduped +│ │ ├── debug@4.3.4 deduped +│ │ └── fs-extra@8.1.0 deduped +│ ├── mime@2.6.0 deduped +│ ├─┬ minimatch@3.1.2 +│ │ └─┬ brace-expansion@1.1.11 +│ │ ├── balanced-match@1.0.2 deduped +│ │ └── concat-map@0.0.1 deduped +│ ├─┬ mkdirp@0.5.6 +│ │ └── minimist@1.2.8 deduped +│ ├── qjobs@1.2.0 +│ ├── range-parser@1.2.1 +│ ├─┬ rimraf@3.0.2 +│ │ └── glob@7.2.3 deduped +│ ├─┬ socket.io@4.7.4 +│ │ ├── accepts@1.3.8 deduped +│ │ ├── base64id@2.0.0 +│ │ ├── cors@2.8.5 deduped +│ │ ├── debug@4.3.4 deduped +│ │ ├─┬ engine.io@6.5.4 +│ │ │ ├── @types/cookie@0.4.1 +│ │ │ ├─┬ @types/cors@2.8.17 +│ │ │ │ └── @types/node@20.11.21 deduped +│ │ │ ├── @types/node@20.11.21 deduped +│ │ │ ├── accepts@1.3.8 deduped +│ │ │ ├── base64id@2.0.0 deduped +│ │ │ ├── cookie@0.4.2 +│ │ │ ├── cors@2.8.5 deduped +│ │ │ ├── debug@4.3.4 deduped +│ │ │ ├── engine.io-parser@5.2.2 +│ │ │ └─┬ ws@8.11.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1 +│ │ │ └── UNMET OPTIONAL DEPENDENCY utf-8-validate@^5.0.2 +│ │ ├─┬ socket.io-adapter@2.5.4 +│ │ │ ├── debug@4.3.4 deduped +│ │ │ └─┬ ws@8.11.0 +│ │ │ ├── UNMET OPTIONAL DEPENDENCY bufferutil@^4.0.1 +│ │ │ └── UNMET OPTIONAL DEPENDENCY utf-8-validate@^5.0.2 +│ │ └─┬ socket.io-parser@4.2.4 +│ │ ├── @socket.io/component-emitter@3.1.0 +│ │ └── debug@4.3.4 deduped +│ ├── source-map@0.6.1 +│ ├── tmp@0.2.1 deduped +│ ├── ua-parser-js@0.7.37 +│ └─┬ yargs@16.2.0 +│ ├─┬ cliui@7.0.4 +│ │ ├── string-width@4.2.3 deduped +│ │ ├── strip-ansi@6.0.1 deduped +│ │ └── wrap-ansi@7.0.0 deduped +│ ├── escalade@3.1.2 deduped +│ ├── get-caller-file@2.0.5 deduped +│ ├── require-directory@2.1.1 deduped +│ ├── string-width@4.2.3 deduped +│ ├── y18n@5.0.8 deduped +│ └── yargs-parser@20.2.9 +├── marked@9.1.6 +├─┬ ngx-markdown@17.1.1 +│ ├── @angular/common@17.2.3 deduped +│ ├── @angular/core@17.2.3 deduped +│ ├── @angular/platform-browser@17.2.3 deduped +│ ├─┬ clipboard@2.0.11 +│ │ ├─┬ good-listener@1.2.2 +│ │ │ └── delegate@3.2.0 +│ │ ├── select@1.1.2 +│ │ └── tiny-emitter@2.1.0 +│ ├── emoji-toolkit@8.0.0 +│ ├─┬ katex@0.16.9 +│ │ └── commander@8.3.0 +│ ├── marked@9.1.6 deduped +│ ├─┬ mermaid@10.8.0 +│ │ ├── @braintree/sanitize-url@6.0.4 +│ │ ├── @types/d3-scale-chromatic@3.0.3 +│ │ ├─┬ @types/d3-scale@4.0.8 +│ │ │ └── @types/d3-time@3.0.3 +│ │ ├─┬ cytoscape-cose-bilkent@4.1.0 +│ │ │ ├─┬ cose-base@1.0.3 +│ │ │ │ └── layout-base@1.0.2 +│ │ │ └── cytoscape@3.28.1 deduped +│ │ ├─┬ cytoscape@3.28.1 +│ │ │ ├── heap@0.2.7 +│ │ │ └── lodash@4.17.21 deduped +│ │ ├─┬ d3-sankey@0.12.3 +│ │ │ ├─┬ d3-array@2.12.1 +│ │ │ │ └── internmap@1.0.1 +│ │ │ └─┬ d3-shape@1.3.7 +│ │ │ └── d3-path@1.0.9 +│ │ ├─┬ d3@7.8.5 +│ │ │ ├─┬ d3-array@3.2.4 +│ │ │ │ └── internmap@2.0.3 +│ │ │ ├── d3-axis@3.0.0 +│ │ │ ├─┬ d3-brush@3.0.0 +│ │ │ │ ├── d3-dispatch@3.0.1 deduped +│ │ │ │ ├── d3-drag@3.0.0 deduped +│ │ │ │ ├── d3-interpolate@3.0.1 deduped +│ │ │ │ ├── d3-selection@3.0.0 deduped +│ │ │ │ └── d3-transition@3.0.1 deduped +│ │ │ ├─┬ d3-chord@3.0.1 +│ │ │ │ └── d3-path@3.1.0 deduped +│ │ │ ├── d3-color@3.1.0 +│ │ │ ├─┬ d3-contour@4.0.2 +│ │ │ │ └── d3-array@3.2.4 deduped +│ │ │ ├─┬ d3-delaunay@6.0.4 +│ │ │ │ └─┬ delaunator@5.0.1 +│ │ │ │ └── robust-predicates@3.0.2 +│ │ │ ├── d3-dispatch@3.0.1 +│ │ │ ├─┬ d3-drag@3.0.0 +│ │ │ │ ├── d3-dispatch@3.0.1 deduped +│ │ │ │ └── d3-selection@3.0.0 deduped +│ │ │ ├─┬ d3-dsv@3.0.1 +│ │ │ │ ├── commander@7.2.0 +│ │ │ │ ├─┬ iconv-lite@0.6.3 +│ │ │ │ │ └── safer-buffer@2.1.2 deduped +│ │ │ │ └── rw@1.3.3 +│ │ │ ├── d3-ease@3.0.1 +│ │ │ ├─┬ d3-fetch@3.0.1 +│ │ │ │ └── d3-dsv@3.0.1 deduped +│ │ │ ├─┬ d3-force@3.0.0 +│ │ │ │ ├── d3-dispatch@3.0.1 deduped +│ │ │ │ ├── d3-quadtree@3.0.1 deduped +│ │ │ │ └── d3-timer@3.0.1 deduped +│ │ │ ├── d3-format@3.1.0 +│ │ │ ├─┬ d3-geo@3.1.0 +│ │ │ │ └── d3-array@3.2.4 deduped +│ │ │ ├── d3-hierarchy@3.1.2 +│ │ │ ├─┬ d3-interpolate@3.0.1 +│ │ │ │ └── d3-color@3.1.0 deduped +│ │ │ ├── d3-path@3.1.0 +│ │ │ ├── d3-polygon@3.0.1 +│ │ │ ├── d3-quadtree@3.0.1 +│ │ │ ├── d3-random@3.0.1 +│ │ │ ├─┬ d3-scale-chromatic@3.0.0 +│ │ │ │ ├── d3-color@3.1.0 deduped +│ │ │ │ └── d3-interpolate@3.0.1 deduped +│ │ │ ├─┬ d3-scale@4.0.2 +│ │ │ │ ├── d3-array@3.2.4 deduped +│ │ │ │ ├── d3-format@3.1.0 deduped +│ │ │ │ ├── d3-interpolate@3.0.1 deduped +│ │ │ │ ├── d3-time-format@4.1.0 deduped +│ │ │ │ └── d3-time@3.1.0 deduped +│ │ │ ├── d3-selection@3.0.0 +│ │ │ ├─┬ d3-shape@3.2.0 +│ │ │ │ └── d3-path@3.1.0 deduped +│ │ │ ├─┬ d3-time-format@4.1.0 +│ │ │ │ └── d3-time@3.1.0 deduped +│ │ │ ├─┬ d3-time@3.1.0 +│ │ │ │ └── d3-array@3.2.4 deduped +│ │ │ ├── d3-timer@3.0.1 +│ │ │ ├─┬ d3-transition@3.0.1 +│ │ │ │ ├── d3-color@3.1.0 deduped +│ │ │ │ ├── d3-dispatch@3.0.1 deduped +│ │ │ │ ├── d3-ease@3.0.1 deduped +│ │ │ │ ├── d3-interpolate@3.0.1 deduped +│ │ │ │ ├── d3-selection@3.0.0 deduped +│ │ │ │ └── d3-timer@3.0.1 deduped +│ │ │ └─┬ d3-zoom@3.0.0 +│ │ │ ├── d3-dispatch@3.0.1 deduped +│ │ │ ├── d3-drag@3.0.0 deduped +│ │ │ ├── d3-interpolate@3.0.1 deduped +│ │ │ ├── d3-selection@3.0.0 deduped +│ │ │ └── d3-transition@3.0.1 deduped +│ │ ├─┬ dagre-d3-es@7.0.10 +│ │ │ ├── d3@7.8.5 deduped +│ │ │ └── lodash-es@4.17.21 deduped +│ │ ├── dayjs@1.11.10 deduped +│ │ ├── dompurify@3.0.9 +│ │ ├── elkjs@0.9.2 +│ │ ├── khroma@2.1.0 +│ │ ├── lodash-es@4.17.21 +│ │ ├─┬ mdast-util-from-markdown@1.3.1 +│ │ │ ├─┬ @types/mdast@3.0.15 +│ │ │ │ └── @types/unist@2.0.10 deduped +│ │ │ ├── @types/unist@2.0.10 +│ │ │ ├─┬ decode-named-character-reference@1.0.2 +│ │ │ │ └── character-entities@2.0.2 +│ │ │ ├─┬ mdast-util-to-string@3.2.0 +│ │ │ │ └── @types/mdast@3.0.15 deduped +│ │ │ ├─┬ micromark-util-decode-numeric-character-reference@1.1.0 +│ │ │ │ └── micromark-util-symbol@1.1.0 deduped +│ │ │ ├─┬ micromark-util-decode-string@1.1.0 +│ │ │ │ ├── decode-named-character-reference@1.0.2 deduped +│ │ │ │ ├─┬ micromark-util-character@1.2.0 +│ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ ├── micromark-util-decode-numeric-character-reference@1.1.0 deduped +│ │ │ │ └── micromark-util-symbol@1.1.0 deduped +│ │ │ ├─┬ micromark-util-normalize-identifier@1.1.0 +│ │ │ │ └── micromark-util-symbol@1.1.0 deduped +│ │ │ ├── micromark-util-symbol@1.1.0 +│ │ │ ├── micromark-util-types@1.1.0 +│ │ │ ├─┬ micromark@3.2.0 +│ │ │ │ ├─┬ @types/debug@4.1.12 +│ │ │ │ │ └── @types/ms@0.7.34 +│ │ │ │ ├── debug@4.3.4 deduped +│ │ │ │ ├── decode-named-character-reference@1.0.2 deduped +│ │ │ │ ├─┬ micromark-core-commonmark@1.1.0 +│ │ │ │ │ ├── decode-named-character-reference@1.0.2 deduped +│ │ │ │ │ ├─┬ micromark-factory-destination@1.1.0 +│ │ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ │ ├─┬ micromark-factory-label@1.1.0 +│ │ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ │ ├── micromark-util-types@1.1.0 deduped +│ │ │ │ │ │ └── uvu@0.5.6 deduped +│ │ │ │ │ ├── micromark-factory-space@1.1.0 deduped +│ │ │ │ │ ├─┬ micromark-factory-title@1.1.0 +│ │ │ │ │ │ ├── micromark-factory-space@1.1.0 deduped +│ │ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ │ ├─┬ micromark-factory-whitespace@1.1.0 +│ │ │ │ │ │ ├── micromark-factory-space@1.1.0 deduped +│ │ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ ├── micromark-util-chunked@1.1.0 deduped +│ │ │ │ │ ├─┬ micromark-util-classify-character@1.1.0 +│ │ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-html-tag-name@1.2.0 +│ │ │ │ │ ├── micromark-util-normalize-identifier@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-resolve-all@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-subtokenize@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-types@1.1.0 deduped +│ │ │ │ │ └── uvu@0.5.6 deduped +│ │ │ │ ├─┬ micromark-factory-space@1.1.0 +│ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ ├─┬ micromark-util-chunked@1.1.0 +│ │ │ │ │ └── micromark-util-symbol@1.1.0 deduped +│ │ │ │ ├─┬ micromark-util-combine-extensions@1.1.0 +│ │ │ │ │ ├── micromark-util-chunked@1.1.0 deduped +│ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ ├── micromark-util-decode-numeric-character-reference@1.1.0 deduped +│ │ │ │ ├── micromark-util-encode@1.1.0 +│ │ │ │ ├── micromark-util-normalize-identifier@1.1.0 deduped +│ │ │ │ ├─┬ micromark-util-resolve-all@1.1.0 +│ │ │ │ │ └── micromark-util-types@1.1.0 deduped +│ │ │ │ ├─┬ micromark-util-sanitize-uri@1.2.0 +│ │ │ │ │ ├── micromark-util-character@1.2.0 deduped +│ │ │ │ │ ├── micromark-util-encode@1.1.0 deduped +│ │ │ │ │ └── micromark-util-symbol@1.1.0 deduped +│ │ │ │ ├─┬ micromark-util-subtokenize@1.1.0 +│ │ │ │ │ ├── micromark-util-chunked@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ │ ├── micromark-util-types@1.1.0 deduped +│ │ │ │ │ └── uvu@0.5.6 deduped +│ │ │ │ ├── micromark-util-symbol@1.1.0 deduped +│ │ │ │ ├── micromark-util-types@1.1.0 deduped +│ │ │ │ └── uvu@0.5.6 deduped +│ │ │ ├─┬ unist-util-stringify-position@3.0.3 +│ │ │ │ └── @types/unist@2.0.10 deduped +│ │ │ └─┬ uvu@0.5.6 +│ │ │ ├── dequal@2.0.3 deduped +│ │ │ ├── diff@5.2.0 +│ │ │ ├── kleur@4.1.5 deduped +│ │ │ └─┬ sade@1.8.1 +│ │ │ └── mri@1.2.0 +│ │ ├── non-layered-tidy-tree-layout@2.0.2 +│ │ ├── stylis@4.3.1 +│ │ ├── ts-dedent@2.2.0 +│ │ ├── uuid@9.0.1 +│ │ └── web-worker@1.3.0 +│ ├── prismjs@1.29.0 +│ ├── rxjs@7.8.1 deduped +│ ├── tslib@2.6.2 deduped +│ └── zone.js@0.14.4 deduped +├─┬ open@10.0.4 +│ ├─┬ default-browser@5.2.1 +│ │ ├─┬ bundle-name@4.1.0 +│ │ │ └── run-applescript@7.0.0 +│ │ └── default-browser-id@5.0.0 +│ ├── define-lazy-prop@3.0.0 +│ ├─┬ is-inside-container@1.0.0 +│ │ └── is-docker@3.0.0 +│ └─┬ is-wsl@3.1.0 +│ └── is-inside-container@1.0.0 deduped +├── reselect@5.1.0 +├─┬ rxjs@7.8.1 +│ └── tslib@2.6.2 deduped +├─┬ ts-node@10.9.2 +│ ├─┬ @cspotcode/source-map-support@0.8.1 +│ │ └─┬ @jridgewell/trace-mapping@0.3.9 +│ │ ├── @jridgewell/resolve-uri@3.1.2 deduped +│ │ └── @jridgewell/sourcemap-codec@1.4.15 deduped +│ ├── UNMET OPTIONAL DEPENDENCY @swc/core@>=1.2.50 +│ ├── UNMET OPTIONAL DEPENDENCY @swc/wasm@>=1.2.50 +│ ├── @tsconfig/node10@1.0.9 +│ ├── @tsconfig/node12@1.0.11 +│ ├── @tsconfig/node14@1.0.3 +│ ├── @tsconfig/node16@1.0.4 +│ ├── @types/node@20.11.21 deduped +│ ├── acorn-walk@8.3.2 +│ ├── acorn@8.11.3 +│ ├── arg@4.1.3 +│ ├── create-require@1.1.1 +│ ├── diff@4.0.2 +│ ├── make-error@1.3.6 +│ ├── typescript@5.3.3 deduped +│ ├── v8-compile-cache-lib@3.0.1 +│ └── yn@3.1.1 +├── tslib@2.6.2 +├── typescript@5.3.3 +└─┬ zone.js@0.14.4 + └── tslib@2.6.2 deduped + diff --git a/src/package-lock.json b/src/package-lock.json index 5e02a972..71b1ecb1 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -25,7 +25,6 @@ "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", "angular2-uuid": "^1.1.1", - "component": "^1.1.0", "firebase": "^10.8.0", "marked": "^9.0.0", "ngx-markdown": "^17.1.1", @@ -6280,6 +6279,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -7531,11 +7531,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -7591,35 +7586,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" - } - }, - "node_modules/acorn-node/node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/adjust-sourcemap-loader": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", @@ -7647,14 +7613,6 @@ "node": ">=8.9.0" } }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "engines": { - "node": ">=0.3.0" - } - }, "node_modules/agent-base": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", @@ -7723,46 +7681,6 @@ "ajv": "^8.8.2" } }, - "node_modules/align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", - "dependencies": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/align-text/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/alter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/alter/-/alter-0.2.0.tgz", - "integrity": "sha512-Wuss6JIZ6h4j2+NgU2t+9mSwS7gBSZJbU4Dg8xETguAD2veJUSuCrvTIiC78QgZE7/zX7h6OnXw2PiiCBirEGw==", - "dependencies": { - "stable": "~0.1.3" - } - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "engines": { - "node": ">=0.4.2" - } - }, "node_modules/angular2-uuid": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/angular2-uuid/-/angular2-uuid-1.1.1.tgz", @@ -7958,14 +7876,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/archy": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/archy/-/archy-0.0.2.tgz", - "integrity": "sha512-8mMsetjXv4pCPTrMbPPO2cxy9vzJn2jwbd+ug+mf8fEUZG2E78Vo5erJMjrnGuLTKqOLtS5ulFHJSfg1yaCjxA==", - "engines": { - "node": "*" - } - }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -8038,22 +7948,6 @@ "node": ">=0.8" } }, - "node_modules/ast-traverse": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ast-traverse/-/ast-traverse-0.1.1.tgz", - "integrity": "sha512-CPuE4BWIhJjsNMvFkrzjiBgOl56NJTuBPBkBqyRyfq/nZtx1Z1f5I+qx7G/Zt+FAOS+ABhghkEuWJrfW9Njjog==" - }, - "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", @@ -8126,35 +8020,6 @@ "postcss": "^8.1.0" } }, - "node_modules/autoprefixer-core": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/autoprefixer-core/-/autoprefixer-core-3.1.2.tgz", - "integrity": "sha512-zXBwCsV9nrVf2evKwUREELXvM0IL7bg9k17EVku57I+nSVKXTyH7IvL4Nqit6wZkrY9b3ca6umNxh9SY5lIsuA==", - "dependencies": { - "caniuse-db": "^1.0.30000006", - "postcss": "~2.2.5" - } - }, - "node_modules/autoprefixer-core/node_modules/postcss": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-2.2.6.tgz", - "integrity": "sha512-8zk4tZ73/ddVQ+Cg2Ca/U4CGT1SAzDYriJDYrRp9ZvNXJPWwYlJaSjHSUJLFKlmuaUjCJvtDnKTwwDpoie55Yw==", - "dependencies": { - "js-base64": "~2.1.5", - "source-map": "~0.1.40" - } - }, - "node_modules/autoprefixer-core/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -8294,15 +8159,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base62": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz", - "integrity": "sha512-QtExujIOq/F672OkHmDi3CdkphOA1kSQ38gv03Ro3cplYQk831dq9GM3Q1oXAxpR5HNJjGjjjT2pHtBGAJu1jw==", - "engines": { - "node": "*" - } + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "devOptional": true }, "node_modules/base64-js": { "version": "1.5.1", @@ -8432,17 +8290,6 @@ "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", "dev": true }, - "node_modules/block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", - "dependencies": { - "inherits": "~2.0.0" - }, - "engines": { - "node": "0.4 || >=0.5.8" - } - }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -8692,11 +8539,6 @@ "node": ">=8" } }, - "node_modules/breakable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/breakable/-/breakable-1.0.0.tgz", - "integrity": "sha512-+ityJqcjhozQNrezzTd2dtH/lkIXmE52HL+FohK2TOLQDl3QURTNkim+2C0xcso4Zehq/HM4Wkumcdz7Ue+XmA==" - }, "node_modules/browserslist": { "version": "4.23.0", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", @@ -8773,23 +8615,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/builder-autoprefixer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/builder-autoprefixer/-/builder-autoprefixer-1.0.4.tgz", - "integrity": "sha512-4z2QQnrzUiA3WOTk9scxj/EfKX5y7fPbwQa3up3qRw0ve3XztPnkQ4ZyC36L2NHY4zuEwA9tlu0QgAqxRyCfgg==", - "dependencies": { - "autoprefixer-core": "^3.1.1" - } - }, - "node_modules/builder-es6-module-to-cjs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/builder-es6-module-to-cjs/-/builder-es6-module-to-cjs-1.1.0.tgz", - "integrity": "sha512-HrhpHzBl7xqfADs9OHCsOw9TdE3jiU30rlHaLGZNuELvitfow96BWCO/nO6akval3V6/4ytzH/aMmsE7PtUrrg==", - "dependencies": { - "es6-module-jstransform": "^0.1.2", - "is-module": "^1.0.0" - } - }, "node_modules/builtins": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", @@ -8814,11 +8639,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bytes": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-0.3.0.tgz", - "integrity": "sha512-koasz05sePZ8FLtyBSyGGlrvr1DYqr+D/MFXkz9afRugTCGKuqw6fjWMMmaCWEKtmWpgOnaGI4qlw/hPyyYX6g==" - }, "node_modules/cacache": { "version": "18.0.2", "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.2.tgz", @@ -8925,11 +8745,6 @@ "node": ">=6" } }, - "node_modules/caniuse-db": { - "version": "1.0.30001591", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001591.tgz", - "integrity": "sha512-XlZaOoKuLcPoHkPTjuo5lZoH6HcSdryFNwAwDEN2AmCs/tK1Ebi0Ahuhm7iCEGlIkIzYgJ9pbKVR+HsKedfapA==" - }, "node_modules/caniuse-lite": { "version": "1.0.30001591", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", @@ -8981,18 +8796,6 @@ "node": ">= 10" } }, - "node_modules/center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", - "dependencies": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -9007,16 +8810,6 @@ "node": ">=4" } }, - "node_modules/chanel": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/chanel/-/chanel-2.2.0.tgz", - "integrity": "sha512-lI0+F41XPgIMrTBre4o0/OQUuiFMo2w8pk0ww/wpIOsRwV1s+c1fksEdnxfyK7OrBmYxDaqmTgI4YgXfXZ6UHA==", - "dependencies": { - "co": "*", - "generator-supported": "*", - "to-descriptor": "*" - } - }, "node_modules/character-entities": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", @@ -9298,28 +9091,6 @@ "node": ">=6" } }, - "node_modules/co": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/co/-/co-3.1.0.tgz", - "integrity": "sha512-CQsjCRiNObI8AtTsNIBDRMQ4oMR83CzEswHYahClvul7gKk+lDQiOKv+5qh7LQWf5sh6jkZNispz/QlsZxyNgA==" - }, - "node_modules/cogent": { - "version": "0.4.3-fix-redirects", - "resolved": "git+ssh://git@github.com/timaschew/cogent.git#2246bd071392f5053a3a110024fd608a40a593ba", - "license": "MIT", - "dependencies": { - "debug": "*", - "generator-supported": "~0.0.1", - "netrc": "~0.1.3", - "proxy-agent": "^1.1.0", - "raw-body": "^1.1.2", - "statuses": "^1.0.2", - "write-to": "^1.0.0" - }, - "peerDependencies": { - "co": "3" - } - }, "node_modules/color": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", @@ -9411,472 +9182,6 @@ "node": ">=4.0.0" } }, - "node_modules/commoner": { - "version": "0.10.8", - "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", - "integrity": "sha512-3/qHkNMM6o/KGXHITA14y78PcfmXh4+AOCJpSoF73h4VY1JpdGv3CHMS5+JW6SwLhfJt4RhNmLAa7+RRX/62EQ==", - "dependencies": { - "commander": "^2.5.0", - "detective": "^4.3.1", - "glob": "^5.0.15", - "graceful-fs": "^4.1.2", - "iconv-lite": "^0.4.5", - "mkdirp": "^0.5.0", - "private": "^0.1.6", - "q": "^1.1.2", - "recast": "^0.11.17" - }, - "bin": { - "commonize": "bin/commonize" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commoner/node_modules/ast-types": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", - "integrity": "sha512-qEdtR2UH78yyHX/AUNfXmJTlM48XoFZKBdwi1nzkI1mJL21cmbu0cvjxjpkXJ5NENMq42H+hNs8VLJcqXLerBQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commoner/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/commoner/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/commoner/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/commoner/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/commoner/node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/commoner/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/commoner/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/commoner/node_modules/recast": { - "version": "0.11.23", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", - "integrity": "sha512-+nixG+3NugceyR8O1bLU45qs84JgI3+8EauyRZafLgC9XbdAOIVgwV1Pe2da0YzGo62KzWoZwUpVEQf6qNAXWA==", - "dependencies": { - "ast-types": "0.9.6", - "esprima": "~3.1.0", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commoner/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/component": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/component/-/component-1.1.0.tgz", - "integrity": "sha512-3729ISBnksZ0luAajVYcJFzm7lSRtaETgfWJsNkOaS1VL4pgC6T2HmEHEJtyVWvpd2H8KJUdNxe7gKXnAed/iw==", - "dependencies": { - "co": "^3.0.0", - "commander": "^2.2.0", - "component-build": "^1.2.2", - "component-consoler": "^2.0.0", - "component-flatten": "^1.0.1", - "component-ls": "^2.1.0", - "component-outdated2": "^1.0.4", - "component-pin": "^1.0.4", - "component-remotes": "^1.2.0", - "component-resolver": "^1.3.0", - "component-search2": "^1.1.1", - "component-updater": "^1.0.4", - "component-watcher": "^1.0.1", - "debug": "*", - "mkdirp": "~0.3.5", - "rimraf": "^2.2.6", - "semver": "^2.2.1", - "superagent": "~0.17.0", - "tiny-lr-fork": "0.0.5", - "win-fork": "~1.1.1" - }, - "bin": { - "component": "bin/component", - "component-build": "bin/component-build", - "component-crawl": "bin/component-crawl", - "component-duplicates": "bin/component-duplicates", - "component-help": "bin/component-help", - "component-install": "bin/component-install", - "component-link": "bin/component-link", - "component-ls": "bin/component-ls", - "component-outdated": "bin/component-outdated", - "component-pin": "bin/component-pin", - "component-search": "bin/component-search", - "component-update": "bin/component-update", - "component-validate": "bin/component-validate" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/component-build": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/component-build/-/component-build-1.2.2.tgz", - "integrity": "sha512-CpLWNhClvE68T9a3UZnAG3L3LdCiHDZlA0ufErCXUYPil9agI1d2ucejxl3h5hk1dfzzcdhAD8gPq54pxsHcuA==", - "dependencies": { - "builder-autoprefixer": "^1.0.3", - "builder-es6-module-to-cjs": "^1.1.0", - "component-builder": "^1.1.12", - "debug": "*" - } - }, - "node_modules/component-builder": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-builder/-/component-builder-1.2.1.tgz", - "integrity": "sha512-iNjEioqOs2PTnIxIn+jRaGdtEAw8ncUPwqSJ4c99A2bAwZnZSHklv1R5QPVqmZYlpYMT3SGSc2zmvmwGK3tgrw==", - "dependencies": { - "requires": "^1.0.0", - "chanel": "^2.0.0", - "co": "^3.1.0", - "component-flatten": "^1.0.1", - "component-manifest": "^1.0.0", - "component-require2": "^1.0.1", - "cp": "^0.1.1", - "debug": "*", - "generator-supported": "~0.0.1", - "graceful-fs": "^2.0.3", - "mkdirp": "^0.3.5", - "syntax-error": "^1.1.1" - } - }, - "node_modules/component-consoler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/component-consoler/-/component-consoler-2.0.0.tgz", - "integrity": "sha512-gHjeG72lAgPdTssGLc7+wcE5gIEE0cDLElmsiaM1E4/feBW2bvCQlP+0H4rdS4SI6iMrDxjh9/6j32LCmUFRYQ==", - "dependencies": { - "debug": "*" - } - }, - "node_modules/component-downloader": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/component-downloader/-/component-downloader-1.2.0.tgz", - "integrity": "sha512-/diPb5TiaOh6ta1ISfwPnndq4HiKRd0pTzZIitohHyLQfxI8LOFkO0s24+UTBx/Ba11QxvH+uIi60NanSRh/rQ==", - "dependencies": { - "chanel": "^2.0.1", - "co": "^3", - "component-consoler": "^2.0.0", - "component-remotes": "^1.1.1", - "debug": "*", - "decompress": "~0.2.0", - "generator-supported": "~0.0.1", - "graceful-fs": "^2.0.2", - "mkdirp": "~0.3.5", - "rimraf": "^2.2.6", - "semver": "^2.2.0", - "unglob": "~0.1.2", - "write-to": "^1.0.0" - } - }, - "node_modules/component-downloader/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/component-downloader/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-flatten": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/component-flatten/-/component-flatten-1.0.1.tgz", - "integrity": "sha512-n0YexLJNbA7uhbBK8j0HBVi8DxzMDDXYQZWdo3Mn2cylllHCw7ZUkL3CMtQ8b2N5VEn6X5veC8bvAmdFCwmGxw==", - "deprecated": "no longer maintained, please use a different package", - "dependencies": { - "semver": "^2.2.1" - } - }, - "node_modules/component-flatten/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-ls": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/component-ls/-/component-ls-2.1.0.tgz", - "integrity": "sha512-DurdOSfT1uMS3k6iWJ2Dm6aIuPPbmHKWoE0E/65m/84c7HCSFzHRJgWXcb4TTkXUsYCtVjaCgANAZauy4krSug==", - "dependencies": { - "archy": "~0.0.2" - } - }, - "node_modules/component-manifest": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-manifest/-/component-manifest-1.0.0.tgz", - "integrity": "sha512-4eBUmLhuTzmPccH65MaV/teGWLU4gn7duvdjksw4vpuXdLwK7bjBvGIETfv8Q46c54U2ehKCf/ueBXr4xD3alA==", - "dependencies": { - "debug": "*", - "generator-supported": "~0.0.1", - "graceful-fs": "^2.0.1", - "unglob": "~0.1.1" - } - }, - "node_modules/component-outdated2": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/component-outdated2/-/component-outdated2-1.0.5.tgz", - "integrity": "sha512-dMQ1zia/HarCJa0KPW65QGlPiHQI9Dfuz8idw7YGozO3ZKcUgqYNboXnH2RhSK/rJT/tUhqhUCZ6SJTWV/aFOQ==", - "dependencies": { - "component-consoler": "^2.0.0", - "component-flatten": "^1.0.1", - "component-remotes": "^1.1.5", - "generator-supported": "~0.0.1", - "semver": "^2.2.1" - } - }, - "node_modules/component-outdated2/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-pin": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/component-pin/-/component-pin-1.0.5.tgz", - "integrity": "sha512-TJY8yz7wPEBUNNeFRYWhtXjmOJebQas2Dmd5YDOy8I0wE0Y15QvjwFSADe4mIgW2GZfkJYrd/FVTm7m4TQUcDQ==", - "dependencies": { - "component-consoler": "^2.0.0", - "component-flatten": "^1.0.1", - "component-remotes": "^1.1.5", - "generator-supported": "~0.0.1", - "semver": "^2.2.1" - } - }, - "node_modules/component-pin/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-remotes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/component-remotes/-/component-remotes-1.2.0.tgz", - "integrity": "sha512-9Z1GzJwQPPTQFp/WNGSmYr4KPGzCyork/CD2WyNAi9tLxW7x5nmXxYBruszNGw+h32DNvVyrMYsAfzLARGXYVQ==", - "dependencies": { - "co": "^3", - "cogent": "git://github.com/timaschew/cogent#fix-redirects", - "component-consoler": "^2.0.0", - "component-validator": "^1.0.0", - "debug": "*", - "generator-supported": "~0.0.1", - "graceful-fs": "^2.0.2", - "semver": "^2.2.1" - } - }, - "node_modules/component-remotes/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-require2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-require2/-/component-require2-1.1.1.tgz", - "integrity": "sha512-FvrYPSLZxE85+jtnpyuRD9x6hfRzWWjXS6QyxMlf4ZA3miwqXbdMT+qqlYRZdwxu+POaN6dLZkMxLPqS9KR8lg==" - }, - "node_modules/component-resolver": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-resolver/-/component-resolver-1.3.0.tgz", - "integrity": "sha512-jtUNWMcVuCRKUBac+v5qMk0Ka8C9XIZ0CEJMLjg/qRr67JTXlBUbABH1pyH2DlFaST+lgLkpmUsHjymyoUAJuw==", - "dependencies": { - "chanel": "^2.0.2", - "co": "^3", - "component-consoler": "^2.0.0", - "component-downloader": "^1.2.0", - "component-flatten": "^1.0.1", - "component-remotes": "^1.2.0", - "component-validator": "^1.1.1", - "debug": "*", - "generator-supported": "~0.0.1", - "graceful-fs": "^2.0.1", - "semver": "^2.2.1", - "unglob": "~0.1.2" - } - }, - "node_modules/component-resolver/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-search2": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-search2/-/component-search2-1.1.1.tgz", - "integrity": "sha512-Wz1cL/Y1Mqk83iHhVnHhLjF29MI/FYEW61UcxnTx6wXO07np54dQIpqYx+uKOlYRq7yn2xkj4d89CrdGoscs3Q==", - "dependencies": { - "bytes": "~0.3.0", - "cogent": "~0.4.0", - "component-consoler": "^2.0.0", - "debug": "*", - "event-stream": "^3.1.1", - "generator-supported": "~0.0.1", - "JSONStream": "~0.8.0", - "stream-to-array": "^1.0.0" - } - }, - "node_modules/component-search2/node_modules/cogent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/cogent/-/cogent-0.4.3.tgz", - "integrity": "sha512-JJZ+vbNzXN+rcZerJRLyFlZW9voOg5cdgbCjeIpaRCk38AH2ukSUaPZyIOLDKsHaWzsnO0vu2Ikpo/bOtZ7Utw==", - "dependencies": { - "debug": "*", - "generator-supported": "~0.0.1", - "netrc": "~0.1.3", - "proxy-agent": "^1.1.0", - "raw-body": "^1.1.2", - "statuses": "^1.0.2", - "write-to": "^1.0.0" - }, - "peerDependencies": { - "co": "3" - } - }, - "node_modules/component-updater": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/component-updater/-/component-updater-1.0.5.tgz", - "integrity": "sha512-/aOiq2OGejudfeGPlULF7aKxImSzsjvdWLCl35vfrp1FnJcHi5zGYD1GNw39k5LZKgnitz1CCPalFPRnRV5B9w==", - "dependencies": { - "component-consoler": "^2.0.0", - "component-flatten": "^1.0.1", - "component-remotes": "^1.1.5", - "generator-supported": "~0.0.1", - "semver": "^2.2.1" - } - }, - "node_modules/component-updater/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/component-validator": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/component-validator/-/component-validator-1.1.1.tgz", - "integrity": "sha512-UBLY5SXjPvwAtrPzd8s+QSEQmICbnPkTUIPhLAYMG0y2+UPDp/W7KOkXYG+pAUHraOM1SbmE+kBSwLWudtOVBw==", - "dependencies": { - "component-consoler": "^2.0.0" - } - }, - "node_modules/component-watcher": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/component-watcher/-/component-watcher-1.0.3.tgz", - "integrity": "sha512-cjBgbrbC9LACKVycJB4A9E9VsxmwN55elgxrdYLndeXGL+g0u7O0OAlvDgTbUGvF1IJD16nVfXtFpUecUzrUUQ==", - "dependencies": { - "debug": "*", - "sane": "0" - } - }, - "node_modules/component/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/component/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/component/node_modules/semver": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", - "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/compress-commons": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", @@ -9955,7 +9260,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true }, "node_modules/config-chain": { "version": "1.1.13", @@ -10107,14 +9413,6 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "devOptional": true }, - "node_modules/cookiejar": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-1.3.0.tgz", - "integrity": "sha512-U+NgxxtwHIokuL04FqKEkqsaWBDtnCQo+wvYjUCtBA56Lcg8vpV3SGtBx+RAmw92SV3VT8PwsYcCFK/cC3Dw+A==", - "engines": { - "node": "*" - } - }, "node_modules/copy-anything": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", @@ -10210,7 +9508,8 @@ "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "devOptional": true }, "node_modules/cors": { "version": "2.8.5", @@ -10278,11 +9577,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/cp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/cp/-/cp-0.1.1.tgz", - "integrity": "sha512-ht9oKVsn1lAqV8FdUuSwBUQB8AG2cSyYbPim/mEwj+Dt3d21IRu2H5diDumMpKb77tsIAGM3eU484KvcTrPvHw==" - }, "node_modules/crc-32": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", @@ -11294,11 +10588,6 @@ "node": ">=0.10" } }, - "node_modules/data-uri-to-buffer": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.4.tgz", - "integrity": "sha512-nntmCbCupHk2zFSWe64pTt0LJ2U6Bt3K1MWgwXiEAj9IEaowSXbGLYN7m8xCb4hbpQl8QSCRBkKT9tFRUMkU7A==" - }, "node_modules/date-format": { "version": "4.0.14", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", @@ -11318,6 +10607,7 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "devOptional": true, "dependencies": { "ms": "2.1.2" }, @@ -11330,14 +10620,6 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -11351,50 +10633,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/decompress": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-0.2.5.tgz", - "integrity": "sha512-uGGydmkEBFHdJe2+d3cVzSS71+Fjd5kSuE3ZtCAqnaAgpl3zficiDW3h3iZ8l6SN9dr/SOpYJ6Xe6mR3LycpdA==", - "dependencies": { - "adm-zip": "^0.4.3", - "ext-name": "^1.0.0", - "get-stdin": "^0.1.0", - "mkdirp": "^0.3.5", - "nopt": "^2.2.0", - "rimraf": "^2.2.2", - "stream-combiner": "^0.0.4", - "tar": "^0.1.18", - "tempfile": "^0.1.2" - }, - "bin": { - "decompress": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decompress/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/decompress/node_modules/tar": { - "version": "0.1.20", - "resolved": "https://registry.npmjs.org/tar/-/tar-0.1.20.tgz", - "integrity": "sha512-RW79YhJI8vSyOcVv0OzOr7DVGkhtFhyz6cufNETPF7dmCJ/kQH+ubpCZkV8Wb7RvQlPuGplQPy0o2ihElzkEZA==", - "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", - "dependencies": { - "block-stream": "*", - "fstream": "~0.1.28", - "inherits": "2" - } - }, "node_modules/deep-equal-in-any-order": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/deep-equal-in-any-order/-/deep-equal-in-any-order-2.0.6.tgz", @@ -11423,7 +10661,8 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "devOptional": true }, "node_modules/default-browser": { "version": "5.2.1", @@ -11549,104 +10788,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/defined": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", - "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/defs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/defs/-/defs-1.1.1.tgz", - "integrity": "sha512-KgGV1vmSa2UPKeDXaWE5FiXjix8BOtYMgiPGpYhd/42wxiC6YGwtscj/zU9gD5/xk4K2iLDpyGhGA5puZxaeMg==", - "dependencies": { - "alter": "~0.2.0", - "ast-traverse": "~0.1.1", - "breakable": "~1.0.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "simple-fmt": "~0.1.0", - "simple-is": "~0.2.0", - "stringmap": "~0.2.2", - "stringset": "~0.2.1", - "tryor": "~0.1.2", - "yargs": "~3.27.0" - }, - "bin": { - "defs": "build/es5/defs" - } - }, - "node_modules/defs/node_modules/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defs/node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } - }, - "node_modules/defs/node_modules/esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/defs/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==" - }, - "node_modules/defs/node_modules/yargs": { - "version": "3.27.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.27.0.tgz", - "integrity": "sha512-6atYjGACjX/OYWico7LwdBx9eiGlkMnIw6OwqfBb+uJQpaT82tQ7oI+BI6Dvq62qZvSbzGzQCVLQdMd59tR2eA==", - "dependencies": { - "camelcase": "^1.2.1", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "os-locale": "^1.4.0", - "window-size": "^0.1.2", - "y18n": "^3.2.0" - } - }, - "node_modules/degenerator": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-1.0.4.tgz", - "integrity": "sha512-EMAC+riLSC64jKfOs1jp8J7M4ZXstUUwTdwFBEv6HOzL/Ae+eAzMKEK0nJnpof2fnw9IOjmE6u6qXFejVyk8AA==", - "dependencies": { - "ast-types": "0.x.x", - "escodegen": "1.x.x", - "esprima": "3.x.x" - } - }, - "node_modules/degenerator/node_modules/esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha512-AWwVMNxwhN8+NIPQzAQZCm7RkLC4RbM3B1OobMuyp3i+w73X57KCKaVIxaRZb+DYCojq7rspo+fmuQfAboyhFg==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -11705,31 +10846,6 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, - "node_modules/detective": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", - "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", - "dependencies": { - "acorn": "^5.2.1", - "defined": "^1.0.0" - } - }, - "node_modules/detective/node_modules/acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dethroy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dethroy/-/dethroy-1.0.2.tgz", - "integrity": "sha512-oZawVs0uwJqhRBYehJsRpU0l2BhEFNXVOAIhivhjNig8QZ3/eHB2xls37rkCbg3PmSkaX0YbdLmnG83z8ZnPKA==" - }, "node_modules/di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -11899,7 +11015,8 @@ "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true }, "node_modules/duplexify": { "version": "4.1.2", @@ -11917,7 +11034,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "devOptional": true + "dev": true }, "node_modules/ecc-jsbn": { "version": "0.1.2", @@ -11989,11 +11106,6 @@ "integrity": "sha512-2Y/RaA1pdgSHpY0YG4TYuYCD2wh97CRvu22eLG3Kz0pgQ/6KbIFTxsTnDc4MH/6hFlg2L/9qXrDMG0nMjP63iw==", "optional": true }, - "node_modules/emitter-component": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/emitter-component/-/emitter-component-1.0.0.tgz", - "integrity": "sha512-GZrLdp4Z7OERecoYQYElVVqf6/gcbGUs8nvaE+nmu2dGy453lLgGyPLNX9DdSyojdMqI86fCT9XQqsWJymciEw==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -12171,7 +11283,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "devOptional": true, + "dev": true, "engines": { "node": ">=6" } @@ -12180,7 +11292,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "devOptional": true + "dev": true }, "node_modules/errno": { "version": "0.1.8", @@ -12231,15 +11343,6 @@ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, - "node_modules/es6-module-jstransform": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/es6-module-jstransform/-/es6-module-jstransform-0.1.4.tgz", - "integrity": "sha512-jICJqz4k0qOeGgSJ9fGjvWxnuLsC69qaaLTs3rGtO2ZnARpJ+nAzaXdcj+WPzGUl9KlwtpMD5tWd8l5TRgBfaA==", - "dependencies": { - "esprima-fb": "~3001.1.0-dev-harmony-fb", - "jstransform": "~3.0.0" - } - }, "node_modules/esbuild": { "version": "0.20.0", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", @@ -12326,6 +11429,7 @@ "version": "1.14.3", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "devOptional": true, "dependencies": { "esprima": "^4.0.1", "estraverse": "^4.2.0", @@ -12347,6 +11451,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "devOptional": true, "engines": { "node": ">=4.0" } @@ -12355,6 +11460,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "devOptional": true, "dependencies": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -12367,6 +11473,7 @@ "version": "0.8.3", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "devOptional": true, "dependencies": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -12383,6 +11490,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "devOptional": true, "engines": { "node": ">= 0.8.0" } @@ -12391,6 +11499,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -12400,6 +11509,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "devOptional": true, "dependencies": { "prelude-ls": "~1.1.2" }, @@ -12822,6 +11932,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "devOptional": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -12830,18 +11941,6 @@ "node": ">=4" } }, - "node_modules/esprima-fb": { - "version": "3001.1.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz", - "integrity": "sha512-a3RFiCVBiy8KdO6q/C+8BQiP/sRk8XshBU3QHHDP8tNzjYwR3FKBOImu+PXfVhPoZL0JKtJLBAOWlDMCCFY8SQ==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esquery": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", @@ -12879,6 +11978,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -12892,29 +11992,6 @@ "node": ">= 0.6" } }, - "node_modules/event-stream": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.5.tgz", - "integrity": "sha512-vyibDcu5JL20Me1fP734QBH/kenBGLZap2n0+XXM7mvuUPzJ20Ydqj1aKcIeMdri1p+PU+4yAKugjN8KCVst+g==", - "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" - } - }, - "node_modules/event-stream/node_modules/stream-combiner": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz", - "integrity": "sha512-6yHMqgLYDzQDcAkL+tjJDC5nSNuNIx0vZtRZeiPh7Saef7VHX9H5Ijn9l2VIol2zaNYlYEX6KyuT/237A58qEQ==", - "dependencies": { - "duplexer": "~0.1.1", - "through": "~2.3.4" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -13056,7 +12133,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "devOptional": true + "dev": true }, "node_modules/express": { "version": "4.18.2", @@ -13187,36 +12264,11 @@ "node": ">= 0.8" } }, - "node_modules/ext-list": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-0.2.0.tgz", - "integrity": "sha512-5HDeVof2cxke3u+FQ3FhTVf9UZUK/07Y/5SNqOL8AjCEEcqZciaR4gP1ESIVbYxctlkClVLHddm8oPsk+Ndcrw==", - "dependencies": { - "got": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-1.0.1.tgz", - "integrity": "sha512-1FkRYVZnrkShQu6UagNtNQuTtHn1n5kGmanUsmEN0iF0+szGUREoDRpXLejAdHMA+fM+sf8S11JUq+RWJALRYw==", - "dependencies": { - "ext-list": "^0.2.0", - "underscore.string": "~2.3.3" - }, - "bin": { - "extname": "cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "devOptional": true }, "node_modules/external-editor": { "version": "3.1.0", @@ -13301,7 +12353,8 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "devOptional": true }, "node_modules/fast-text-encoding": { "version": "1.0.6", @@ -13378,11 +12431,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/file-uri-to-path": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-0.0.2.tgz", - "integrity": "sha512-jNmalsdk1enTf+tjxrMb3nutLleumh96WWtXJQHU700Jmjyl/CHj33Di5iFECNNfgb9GwlMNKU18tukUPlFXMg==" - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -14103,7 +13151,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "optional": true, "engines": { "node": ">=0.10.0" @@ -14229,7 +13277,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "devOptional": true, + "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -14245,7 +13293,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "devOptional": true, + "dev": true, "engines": { "node": ">=14" }, @@ -14276,15 +13324,6 @@ "node": ">= 0.12" } }, - "node_modules/formidable": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.14.tgz", - "integrity": "sha512-aOskFHEfYwkSKSzGui5jhQ+uyLo2NTwpzhndggz2YZHlv0HkAi+zG5ZEBCL3GTvqLyr/FzX9Mvx9DueCmu2HzQ==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -14316,11 +13355,6 @@ "node": ">= 0.6" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==" - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -14349,7 +13383,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -14366,12 +13400,14 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "devOptional": true }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -14381,86 +13417,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-0.1.31.tgz", - "integrity": "sha512-N1pLGEHoDyCoI8uMmPXJXhn238L4nk41iipXCrqs4Ss0ooYSr5sNj2ucMo5AqJVC4OaOa7IztpBhOaaYTGZVuA==", - "dependencies": { - "graceful-fs": "~3.0.2", - "inherits": "~2.0.0", - "mkdirp": "0.5", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/node_modules/graceful-fs": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", - "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", - "dependencies": { - "natives": "^1.1.3" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fstream/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==", - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -14532,11 +13488,6 @@ "node": ">=10" } }, - "node_modules/generator-supported": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/generator-supported/-/generator-supported-0.0.1.tgz", - "integrity": "sha512-VfNqamgY6cuNhi6GF4NIYs5jtJsPZZtpMJl1lCBko5FNALeZ0WfXeG5WMke3lVwfYI6jH1BLZcXyukP9wtPhfw==" - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -14582,14 +13533,6 @@ "node": ">=8.0.0" } }, - "node_modules/get-stdin": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-0.1.0.tgz", - "integrity": "sha512-/WBu3IaQZxE3bs3BhBmR10ipDY4pjN+U4EZgXULa1eqKA0B/Lka/MVoAqhTVYBkkRlCrEGDOU9itrzIgm9Ksng==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -14605,59 +13548,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-uri": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-0.1.4.tgz", - "integrity": "sha512-xV5cksh/mERjnnDgZe0wKO2VokqUeTe/QaKrhUHhm77eiLXhGrWi5qiz20tF6NKRTcY47YP1OzSRgTHadNY3mQ==", - "dependencies": { - "data-uri-to-buffer": "0", - "debug": "2", - "extend": "3", - "file-uri-to-path": "0", - "ftp": "~0.3.5", - "readable-stream": "2" - } - }, - "node_modules/get-uri/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/get-uri/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/get-uri/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/get-uri/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/get-uri/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -14680,6 +13570,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "devOptional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -14734,6 +13625,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14743,6 +13635,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15064,34 +13957,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/got/-/got-0.2.0.tgz", - "integrity": "sha512-YTZ1W2+KYNuBSR2icdJIU4EXddb6NsjXcZN/e1ggfkdniQk1mrVaxyyRJL0Mi+HggW3+Ld2vH3dDl/tI2LKmag==", - "dependencies": { - "object-assign": "^0.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/got/node_modules/object-assign": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-0.3.1.tgz", - "integrity": "sha512-4gWmwoU6o9UImLLzq+8R+kzWT0ABYdKXuvSp08JpYzhibFvdUirMfE9nE5yYHcG1k9ClcVueR4TolZpRvwg5og==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/graceful-fs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz", - "integrity": "sha512-hcj/NTUWv+C3MbqrVb9F+aH6lvTwEHJdx2foBxlrVq5h6zE8Bfu4pv4CAAqbDcZrw/9Ak5lsRXlY9Ao8/F0Tuw==", - "deprecated": "please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -15307,7 +14172,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", - "devOptional": true + "dev": true }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -15414,7 +14279,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", - "devOptional": true, + "dev": true, "dependencies": { "agent-base": "^7.0.2", "debug": "4" @@ -15566,7 +14431,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "devOptional": true, + "dev": true, "engines": { "node": ">=8" } @@ -15575,6 +14440,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "devOptional": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -15794,19 +14660,6 @@ "node": ">=12" } }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ip": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.9.tgz", - "integrity": "sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==" - }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -15862,11 +14715,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "node_modules/is-ci": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", @@ -15981,12 +14829,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "devOptional": true - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + "dev": true }, "node_modules/is-npm": { "version": "5.0.0", @@ -16135,7 +14978,8 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "devOptional": true }, "node_modules/isbinaryfile": { "version": "4.0.10", @@ -16358,7 +15202,7 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "devOptional": true, + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -16664,11 +15508,6 @@ "valid-url": "^1" } }, - "node_modules/js-base64": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.1.9.tgz", - "integrity": "sha512-f+5mYh8iF7FlF7zgmj/yqvvYQUHI0kAxGiLjIfNxZzqJ7RQNc4sjgp8crVJw0Kzv2O6aFGZWgMTnO71I9utHSg==" - }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -16870,29 +15709,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "optional": true }, - "node_modules/jsonparse": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-0.0.5.tgz", - "integrity": "sha512-fw7Q/8gFR8iSekUi9I+HqWIap6mywuoe7hQIg3buTVjuZgALKj4HAmm0X6f+TaL4c9NJbvyFQdaI2ppr5p6dnQ==", - "engines": [ - "node >= 0.2.0" - ] - }, - "node_modules/JSONStream": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-0.8.4.tgz", - "integrity": "sha512-l0NN3IcqrZfZBJp7JWDJIHsnPV7yzJWqsYxQzL8Fwdx1BmEMjLuvtYkv+P9pbvpyfP75/f4MeDZhWNU4is32uA==", - "dependencies": { - "jsonparse": "0.0.5", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "index.js" - }, - "engines": { - "node": "*" - } - }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -16951,30 +15767,6 @@ "verror": "1.10.0" } }, - "node_modules/jstransform": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz", - "integrity": "sha512-sMwqW0EdQk2A5NjddlcSSLp6t7pIknOrJtxPU3kMN82RJXPGbdC3fcM5VhIsApNKL1hpeH38iSQsJRbgprPQZg==", - "dependencies": { - "base62": "0.1.1", - "esprima-fb": "~3001.1.0-dev-harmony-fb", - "source-map": "0.1.31" - }, - "engines": { - "node": ">=0.8.8" - } - }, - "node_modules/jstransform/node_modules/source-map": { - "version": "0.1.31", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz", - "integrity": "sha512-qFALUiKHo35Duky0Ubmb5YKj9b3c6CcgGNGeI60sd6Nn3KaY7h9fclEOcCVk0hwszwYYP6+X2/jpS5hHqqVuig==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/jwa": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", @@ -17348,14 +16140,6 @@ "node": "> 0.8" } }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -17398,17 +16182,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/less": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/less/-/less-4.2.0.tgz", @@ -17958,14 +16731,6 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -18020,7 +16785,7 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.0.tgz", "integrity": "sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==", - "devOptional": true, + "dev": true, "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -18038,19 +16803,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==" - }, "node_modules/markdown-it": { "version": "12.3.2", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", @@ -18775,7 +17527,7 @@ "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "devOptional": true, + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -18790,6 +17542,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "devOptional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -18798,7 +17551,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -18807,7 +17560,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -18819,7 +17572,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -18836,7 +17589,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18848,7 +17601,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "devOptional": true, + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18860,7 +17613,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "node_modules/minipass-json-stream": { "version": "1.0.1", @@ -18903,7 +17656,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18915,7 +17668,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "devOptional": true, + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18927,13 +17680,13 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^3.0.0" }, @@ -18945,7 +17698,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "devOptional": true, + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -18957,7 +17710,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "devOptional": true + "dev": true }, "node_modules/minizlib": { "version": "2.1.2", @@ -18990,12 +17743,6 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "devOptional": true }, - "node_modules/mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha512-8OCq0De/h9ZxseqzCH8Kw/Filf5pF/vMI6+BH7Lu0jXz2pqYCjTAQRolSxRIi+Ax+oCCjlxoJMP0YQ4XlrQNHg==", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)" - }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -19088,6 +17835,7 @@ "version": "2.18.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "dev": true, "optional": true }, "node_modules/nanoid": { @@ -19133,12 +17881,6 @@ "node": ">=16.0.0" } }, - "node_modules/natives": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", - "deprecated": "This module relies on Node.js's internals and will break at some point. Do not use it, and update to graceful-fs@4.x." - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -19197,19 +17939,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/netmask": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/netmask/-/netmask-1.0.6.tgz", - "integrity": "sha512-3DWDqAtIiPSkBXZyYEjwebfK56nrlQfRGt642fu8RPaL+ePu750+HCMHxjJCG3iEHq/0aeMvX6KIzlv7nuhfrA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/netrc": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/netrc/-/netrc-0.1.4.tgz", - "integrity": "sha512-ye8AIYWQcP9MvoM1i0Z2jV0qed31Z8EWXYnyGNkiUAd+Fo8J+7uy90xTV8g/oAbhtjkY7iZbNTizQaXdKUuwpQ==" - }, "node_modules/ngx-markdown": { "version": "17.1.1", "resolved": "https://registry.npmjs.org/ngx-markdown/-/ngx-markdown-17.1.1.tgz", @@ -19302,7 +18031,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.0.1.tgz", "integrity": "sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==", - "devOptional": true, + "dev": true, "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -19338,7 +18067,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", - "devOptional": true, + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -19347,7 +18076,7 @@ "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", - "devOptional": true, + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^2.3.5", @@ -19369,13 +18098,13 @@ "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "devOptional": true + "dev": true }, "node_modules/node-gyp/node_modules/isexe": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", - "devOptional": true, + "dev": true, "engines": { "node": ">=16" } @@ -19384,7 +18113,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==", - "devOptional": true, + "dev": true, "dependencies": { "abbrev": "^2.0.0" }, @@ -19399,7 +18128,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", - "devOptional": true, + "dev": true, "dependencies": { "isexe": "^3.1.1" }, @@ -19428,36 +18157,6 @@ "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", "optional": true }, - "node_modules/nopt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz", - "integrity": "sha512-gIOTA/uJuhPwFqp+spY7VQ1satbnGlD+iQVZxI18K6hs8Evq4sX81Ml7BB5byP/LsbR2yBVtmvdEmhi7evJ6Aw==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/noptify": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/noptify/-/noptify-0.0.3.tgz", - "integrity": "sha512-EZT35r9AuK+hig+iYv4144kwfDEDhlj3zncVHw9b9d86TUYk/67BtBApkfPD1kslAT/8TTD262xdsVbV+iCSTw==", - "dependencies": { - "nopt": "~2.0.0" - } - }, - "node_modules/noptify/node_modules/nopt": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.0.0.tgz", - "integrity": "sha512-uVTsuT8Hm3aN3VttY+BPKw4KU9lVpI0F22UAr/I1r6+kugMr3oyhMALkycikLcdfvGRsgzCYN48DYLBFcJEUVg==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, "node_modules/normalize-package-data": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", @@ -19997,6 +18696,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, "dependencies": { "wrappy": "1" } @@ -20153,17 +18853,6 @@ "node": ">=8" } }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -20233,7 +18922,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "devOptional": true, + "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -20266,60 +18955,6 @@ "node": ">=6" } }, - "node_modules/pac-proxy-agent": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-0.2.0.tgz", - "integrity": "sha512-n7a4CFNSiKfr0Kr2XbJxUEQOab5JMJk3si0SNEjKdKAorg15dW4PZWpKZ+J5rr0S91TbuyLnl37vRS0zU7K4cg==", - "dependencies": { - "agent-base": "~1.0.1", - "debug": "2", - "extend": "~1.2.1", - "get-uri": "~0.1.0", - "pac-resolver": "~1.2.1", - "proxy-agent": "1", - "stream-to-array": "~1.0.0" - } - }, - "node_modules/pac-proxy-agent/node_modules/agent-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", - "integrity": "sha512-IrdRInle5l28T2DjBsOojXniN91mXYkt9piDyPbPEoA/X+f7kjd0qiIb18vZThIZCJdLk2Zq/ukXxZp8NkcFsw==" - }, - "node_modules/pac-proxy-agent/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/pac-proxy-agent/node_modules/extend": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", - "integrity": "sha512-2/JwIYRpMBDSjbQjUUppNSrmc719crhFaWIdT+TRSVA8gE+6HEobQWqJ6VkPt/H8twS7h/0WWs7veh8wmp98Ng==" - }, - "node_modules/pac-proxy-agent/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/pac-resolver": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-1.2.6.tgz", - "integrity": "sha512-hgYjw6snhgn68Rdb2Sgrd/rUKMkZ9EpXiA7G9Gqr9BsC6Bb+l1tAZ11WoYfNYzqamdkXU4m3VOb29H4VHOinyA==", - "dependencies": { - "co": "~3.0.6", - "degenerator": "~1.0.0", - "netmask": "~1.0.4", - "regenerator": "~0.8.13", - "thunkify": "~2.1.1" - } - }, - "node_modules/pac-resolver/node_modules/co": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/co/-/co-3.0.6.tgz", - "integrity": "sha512-Vj29f/AYywpPtHPhN9YqC7yK+p3rfjv7l/mTu5iOtn89a7DdccD4MYQmfU6R9wGdLXwufDIV07+PjXM0taVKvw==" - }, "node_modules/pacote": { "version": "17.0.6", "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.6.tgz", @@ -20463,6 +19098,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "devOptional": true, "engines": { "node": ">=0.10.0" } @@ -20486,7 +19122,7 @@ "version": "1.10.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "devOptional": true, + "dev": true, "dependencies": { "lru-cache": "^9.1.1 || ^10.0.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -20502,7 +19138,7 @@ "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", - "devOptional": true, + "dev": true, "engines": { "node": "14 || >=16.14" } @@ -20522,14 +19158,6 @@ "node": ">=8" } }, - "node_modules/pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==", - "dependencies": { - "through": "~2.3" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -20925,19 +19553,11 @@ "node": ">=6" } }, - "node_modules/private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", - "devOptional": true, + "dev": true, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -20954,7 +19574,8 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "devOptional": true }, "node_modules/progress": { "version": "2.0.3", @@ -20981,7 +19602,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "devOptional": true, + "dev": true, "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -20994,7 +19615,7 @@ "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "devOptional": true, + "dev": true, "engines": { "node": ">= 4" } @@ -21204,99 +19825,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-agent": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-1.1.1.tgz", - "integrity": "sha512-25H5ZU12cl82fjFJmlq8iYy9gHjw4jdNmJQBbdztwcpPl4URsepnlTZUqAXKwrxwtPXg4z6NbrIiB7e3arxVUw==", - "dependencies": { - "http-proxy-agent": "0", - "https-proxy-agent": "0", - "lru-cache": "~2.5.0", - "pac-proxy-agent": "0", - "socks-proxy-agent": "1" - } - }, - "node_modules/proxy-agent/node_modules/agent-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-1.0.2.tgz", - "integrity": "sha512-IrdRInle5l28T2DjBsOojXniN91mXYkt9piDyPbPEoA/X+f7kjd0qiIb18vZThIZCJdLk2Zq/ukXxZp8NkcFsw==" - }, - "node_modules/proxy-agent/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/proxy-agent/node_modules/http-proxy-agent": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-0.2.7.tgz", - "integrity": "sha512-9W3grrlsrW2kRGNRbGkBNVFx4voQS1H1TxWR60MVHKQ+rw+kRtA9JXVGQiiDgYsp315Ex5HPk+3it4lBNyk4WA==", - "dependencies": { - "agent-base": "~1.0.1", - "debug": "2", - "extend": "3" - } - }, - "node_modules/proxy-agent/node_modules/https-proxy-agent": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-0.3.6.tgz", - "integrity": "sha512-ZuLafAeUu97abfbpAO9Cwjl3slsx6yZ7apTYBNVtMdoDhlVzUhxXO0qh+Xxqc5FAm7oq747k2jjbICYJdEYShg==", - "dependencies": { - "agent-base": "~1.0.1", - "debug": "2", - "extend": "3" - } - }, - "node_modules/proxy-agent/node_modules/lru-cache": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.2.tgz", - "integrity": "sha512-wyqfj+623mgqv+bpjTdivSoC/LtY9oOrmKz2Cke0NZcgYW9Kce/qWjd9e5PDYf8wuiKfVeo8VnyOSSyeRiUsLw==" - }, - "node_modules/proxy-agent/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/proxy-agent/node_modules/smart-buffer": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz", - "integrity": "sha512-1+8bxygjTsNfvQe0/0pNBesTOlSHtOeG6b6LYbvsZCCHDKYZ40zcQo6YTnZBWrBSLWOCbrHljLdEmGMYebu7aQ==", - "engines": { - "node": ">= 0.10.15", - "npm": ">= 1.3.5" - } - }, - "node_modules/proxy-agent/node_modules/socks": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/socks/-/socks-1.1.10.tgz", - "integrity": "sha512-ArX4vGPULWjKDKgUnW8YzfI2uXW7kzgkJuB0GnFBA/PfT3exrrOk+7Wk2oeb894Qf20u1PWv9LEgrO0Z82qAzA==", - "deprecated": "If using 2.x branch, please upgrade to at least 2.1.6 to avoid a serious bug with socket data flow and an import issue introduced in 2.1.0", - "dependencies": { - "ip": "^1.1.4", - "smart-buffer": "^1.0.13" - }, - "engines": { - "node": ">= 0.10.0", - "npm": ">= 1.3.5" - } - }, - "node_modules/proxy-agent/node_modules/socks-proxy-agent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-1.0.2.tgz", - "integrity": "sha512-F8xR1C4uplta4XIwHvvpIxhLO8oCWLuC48hSgFpMqps45WqtOZQ4JadJ5YGo0eGMvIp94qV3bX3Tqi2iHGlNvw==", - "dependencies": { - "agent-base": "~1.0.1", - "extend": "~1.2.1", - "socks": "~1.1.5" - } - }, - "node_modules/proxy-agent/node_modules/socks-proxy-agent/node_modules/extend": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", - "integrity": "sha512-2/JwIYRpMBDSjbQjUUppNSrmc719crhFaWIdT+TRSVA8gE+6HEobQWqJ6VkPt/H8twS7h/0WWs7veh8wmp98Ng==" - }, "node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", @@ -21344,15 +19872,6 @@ "node": ">=8" } }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, "node_modules/qjobs": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", @@ -21421,31 +19940,6 @@ "node": ">= 0.6" } }, - "node_modules/raw-body": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.3.4.tgz", - "integrity": "sha512-ZC2kBq6BsR0uK441H5SvGH9H+hRpTKVRjvlI6BhLOJrih3oGbGRYdFyyKKESw4/hjzJEr4cZkQgbuU52s63MOQ==", - "dependencies": { - "bytes": "1.0.0", - "iconv-lite": "0.4.8" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==" - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.8.tgz", - "integrity": "sha512-D90rbOiZuEJGtmIBK9wcRpW//ZKLD8bTPOAx5oEsu+O+HhSOstX/HCZFBvNkuyDuiNHunb81cfsqaYzZxcUMYA==", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -21480,6 +19974,7 @@ "version": "1.20.9", "resolved": "https://registry.npmjs.org/re2/-/re2-1.20.9.tgz", "integrity": "sha512-ZYcPTFr5ha2xq3WQjBDTF9CWPSDK1z28MLh5UFRxc//7X8BNQ3A7yR7ITnP0jO346661ertdKVFqw1qoL3FMEQ==", + "dev": true, "hasInstallScript": true, "optional": true, "dependencies": { @@ -21602,48 +20097,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/recast": { - "version": "0.10.33", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.10.33.tgz", - "integrity": "sha512-RxAVgvgWGzfFYsdc3PB6TM4/cq8HMgBH8PC9r+SkO7j1MeHZvIMxLSVlUhin3sv9wbAy8CMAPXSGSGkWPovyKQ==", - "dependencies": { - "ast-types": "0.8.12", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "source-map": "~0.5.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/recast/node_modules/ast-types": { - "version": "0.8.12", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.12.tgz", - "integrity": "sha512-rWhsoD0aHKpx+aKIP0Sf92bai1HC5iZcB1n/HCnkIMR8Bhx0gYRQySo062Y65ND4oRgcuxpLcPrcco09I1shpg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/recast/node_modules/esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/recast/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/redeyed": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", @@ -21653,11 +20106,6 @@ "esprima": "~4.0.0" } }, - "node_modules/reduce-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", - "integrity": "sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg==" - }, "node_modules/reflect-metadata": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", @@ -21682,26 +20130,6 @@ "node": ">=4" } }, - "node_modules/regenerator": { - "version": "0.8.46", - "resolved": "https://registry.npmjs.org/regenerator/-/regenerator-0.8.46.tgz", - "integrity": "sha512-jFhAPsOnJ/UIZCG1+iISKiczjnLWaQ4RatPkg5BZIcgz0m3C+txY28U0H7ij+fLSADmY+kHj9HZff6CLq9hrVA==", - "dependencies": { - "commoner": "~0.10.3", - "defs": "~1.1.0", - "esprima-fb": "~15001.1001.0-dev-harmony-fb", - "private": "~0.1.5", - "recast": "0.10.33", - "regenerator-runtime": "~0.9.5", - "through": "~2.3.8" - }, - "bin": { - "regenerator": "bin/regenerator" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/regenerator-runtime": { "version": "0.14.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", @@ -21717,23 +20145,6 @@ "@babel/runtime": "^7.8.4" } }, - "node_modules/regenerator/node_modules/esprima-fb": { - "version": "15001.1001.0-dev-harmony-fb", - "resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz", - "integrity": "sha512-m7OsYzocA8OQ3+9CxmhIv7NPHtyDR2ixaLCO7kLZ+YH+xQ/BpaZmll9EXmc+kBxzWA8BRBXbNEuEQqQ6vfsgDw==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/regenerator/node_modules/regenerator-runtime": { - "version": "0.9.6", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz", - "integrity": "sha512-D0Y/JJ4VhusyMOd/o25a3jdUqN/bC85EFsaoL9Oqmy/O4efCh+xhp7yj2EEOsj974qvMkcW8AwUzJ1jB/MbxCw==" - }, "node_modules/regex-parser": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", @@ -21811,14 +20222,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -21844,11 +20247,6 @@ "node": ">=0.10.0" } }, - "node_modules/requires": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/requires/-/requires-1.0.2.tgz", - "integrity": "sha512-X0owrXW/+IVhkwoYHL9ZKQQBfq+5NiPVmw6ev7LhWFecMmx9uhbBzjbR/xxv9bRSsHorSrUpQm6WNQdUxnlGtg==" - }, "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", @@ -21984,17 +20382,6 @@ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", - "dependencies": { - "align-text": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rimraf": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", @@ -22248,38 +20635,6 @@ "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" }, - "node_modules/sane": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/sane/-/sane-0.8.1.tgz", - "integrity": "sha512-hWKZiIn39itnpdiiLT+Zh1gIQfS22Nwp9h4GrriMe9iCBcrcuUF264ELNADbBjiLIJqCzEIAtNR8uD+WCYVtTQ==", - "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added", - "dependencies": { - "minimatch": "~0.2.14", - "walker": "~1.0.5", - "watch": "~0.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/sane/node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==" - }, - "node_modules/sane/node_modules/minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/sass": { "version": "1.70.0", "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz", @@ -22680,11 +21035,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha512-fCvEXfh6NWpm+YSuY2bpXb/VIihqWA6hLsgboC+0nl71Q7N7o2eaCW8mJa/NLvQhs6jpd3VZV4UiUQlV6+lc8g==" - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -22707,16 +21057,6 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/simple-fmt": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/simple-fmt/-/simple-fmt-0.1.0.tgz", - "integrity": "sha512-9a3zTDDh9LXbTR37qBhACWIQ/mP/ry5xtmbE98BJM8GR02sanCkfMzp7AdCTqYhkBZggK/w7hJtc8Pb9nmo16A==" - }, - "node_modules/simple-is": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", - "integrity": "sha512-GJXhv3r5vdj5tGWO+rcrWgjU2azLB+fb7Ehh3SmZpXE0o4KrrFLti0w4mdDCbR29X/z0Ls20ApjZitlpAXhAeg==" - }, "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", @@ -23045,17 +21385,6 @@ "wbuf": "^1.7.3" } }, - "node_modules/split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dependencies": { - "through": "2" - }, - "engines": { - "node": "*" - } - }, "node_modules/split2": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", @@ -23106,7 +21435,7 @@ "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "devOptional": true, + "dev": true, "dependencies": { "minipass": "^7.0.3" }, @@ -23114,12 +21443,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -23132,6 +21455,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "devOptional": true, "engines": { "node": ">= 0.6" } @@ -23142,14 +21466,6 @@ "integrity": "sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==", "devOptional": true }, - "node_modules/stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==", - "dependencies": { - "duplexer": "~0.1.1" - } - }, "node_modules/stream-json": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-1.8.0.tgz", @@ -23165,14 +21481,6 @@ "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", "devOptional": true }, - "node_modules/stream-to-array": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-to-array/-/stream-to-array-1.0.0.tgz", - "integrity": "sha512-Z+ny0tylkXcRS4Jq49BNcKVmt0MrF3E/I500a18zckGt0ZMrOh1ILlbUz+FSjJePYeVbNUBCdvjfDDol27Ld1g==", - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/streamroller": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", @@ -23213,7 +21521,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "devOptional": true, + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -23223,16 +21531,6 @@ "node": ">=8" } }, - "node_modules/stringmap": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stringmap/-/stringmap-0.2.2.tgz", - "integrity": "sha512-mR1LEHDw6TsHa+LwJeeBc9ZqZqEOm7bHidgxMmDg8HB/rbA1HhDeT08gS67CCCG/xrgIfQx5tW42pd8vFpLUow==" - }, - "node_modules/stringset": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/stringset/-/stringset-0.2.1.tgz", - "integrity": "sha512-km3jeiRpmySChl1oLiBE2ESdG5k/4+6tjENVL6BB3mdmKBiUikI5ks4paad2WAKsxzpNiBqBBbXCC12QqlpLWA==" - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -23249,7 +21547,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -23310,60 +21608,6 @@ "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==", "optional": true }, - "node_modules/superagent": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-0.17.0.tgz", - "integrity": "sha512-ASGnKAf/X5HxEKjW+mpy8sk53a0Mi9XwBhQpPfqkFh+cl7K41NvUhsIJ/RAMCkQDZEfqu/FYQJoAK5JVp86p9g==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dependencies": { - "cookiejar": "1.3.0", - "debug": "~0.7.2", - "emitter-component": "1.0.0", - "extend": "~1.2.1", - "formidable": "1.0.14", - "methods": "0.0.1", - "mime": "1.2.5", - "qs": "0.6.5", - "reduce-component": "1.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q==", - "engines": { - "node": "*" - } - }, - "node_modules/superagent/node_modules/extend": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", - "integrity": "sha512-2/JwIYRpMBDSjbQjUUppNSrmc719crhFaWIdT+TRSVA8gE+6HEobQWqJ6VkPt/H8twS7h/0WWs7veh8wmp98Ng==" - }, - "node_modules/superagent/node_modules/methods": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/methods/-/methods-0.0.1.tgz", - "integrity": "sha512-pB8oFfci/xcfUgM6DTxc7lbTKifPPgs3mZUOsEgaH+1TTWpmcmv3sHl+5sUHIj2X2W8aPYa2+nJealRHK+Lo6A==" - }, - "node_modules/superagent/node_modules/mime": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.5.tgz", - "integrity": "sha512-QfwTOA+zRHSZXxl9Y7ue5ifKDhU1prnh0dO67Vgcl7Lcx0+79vL9A1ln0qtVur8CFSdYq5Zhnw9DDZQgwDh8Ng==", - "engines": { - "node": "*" - } - }, - "node_modules/superagent/node_modules/qs": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.6.5.tgz", - "integrity": "sha512-n7wA/f30O3SsOw2BVkGUDzjWMw7kXvQJWKtDdgfq5HJvDoad+Jbc6osN1AQ0Iain5plo9e7Cs5fE+xR+DVkPTw==", - "engines": { - "node": "*" - } - }, "node_modules/superstatic": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/superstatic/-/superstatic-9.0.3.tgz", @@ -23505,14 +21749,6 @@ "node": ">=0.10" } }, - "node_modules/syntax-error": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", - "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", - "dependencies": { - "acorn-node": "^1.2.0" - } - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -23633,23 +21869,6 @@ } } }, - "node_modules/tempfile": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/tempfile/-/tempfile-0.1.3.tgz", - "integrity": "sha512-eW5GbbQLBEpa21WNlpvJcvv/DNXLyMNOQBnhellCzQdXAf5Ctmrr8GDLc/YAymOF3t+17wmeE+kZCKBoaanEtA==", - "dependencies": { - "uuid": "~1.4.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tempfile/node_modules/uuid": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-1.4.2.tgz", - "integrity": "sha512-woV5Ei+GBJyrqMXt0mJ9p8/I+47LYKp/4urH76FNTMjl22EhLPz1tNrQufTsrFf/PYV/7ctSZYAK7fKPWQKg+Q==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details." - }, "node_modules/terser": { "version": "5.27.0", "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", @@ -23827,11 +22046,6 @@ "readable-stream": "3" } }, - "node_modules/thunkify": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/thunkify/-/thunkify-2.1.2.tgz", - "integrity": "sha512-w9foI80XcGImrhMQ19pxunaEC5Rp2uzxZZg4XBAFRfiLOplk3F0l7wo+bO16vC2/nlQfR/mXZxcduo0MF2GWLg==" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -23844,44 +22058,6 @@ "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", "optional": true }, - "node_modules/tiny-lr-fork": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/tiny-lr-fork/-/tiny-lr-fork-0.0.5.tgz", - "integrity": "sha512-vhcvny/8f46rrViKV0BOUjVl4c/rDTztnT1+kT7iyD/Igqb/uyiRsKLxMc2Z8CNvTE1Px1tuNrPM+BOUL+3vlQ==", - "dependencies": { - "debug": "~0.7.0", - "faye-websocket": "~0.4.3", - "noptify": "~0.0.3", - "qs": "~0.5.2" - }, - "bin": { - "tiny-lr-fork": "bin/tiny-lr" - } - }, - "node_modules/tiny-lr-fork/node_modules/debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha512-EohAb3+DSHSGx8carOSKJe8G0ayV5/i609OD0J2orCkuyae7SyZSz2aoLmQF2s0Pj5gITDebwPH7GFBlqOUQ1Q==", - "engines": { - "node": "*" - } - }, - "node_modules/tiny-lr-fork/node_modules/faye-websocket": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.4.4.tgz", - "integrity": "sha512-78pqrJbvGZSe8i+PLsPd+aJqTyGqgyWLnMw5NOwtXCTVMzEFh1zQPwIuIL/ycTj4rkDy5zZ9B6frYPqVPJBzyQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/tiny-lr-fork/node_modules/qs": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-0.5.6.tgz", - "integrity": "sha512-KbOrQrP5Ye+0gmq+hwxoJwAFRwExACWqwxj1IDFFgqOw9Poxy3wwSbafd9ZqP6T6ykMfnxM573kt/a4i9ybatQ==", - "engines": { - "node": "*" - } - }, "node_modules/tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", @@ -23909,16 +22085,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-descriptor/-/to-descriptor-1.0.1.tgz", - "integrity": "sha512-wxfaAjsoz5ptZjuqkEe7KLQ0VvdBH8a+FFzdmeVD9c7TWU9KCzLAC3li4bZ8xiPJsZMqVnZWM/7glZQngMTeEQ==" - }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -24013,11 +22179,6 @@ "node": ">= 14.0.0" } }, - "node_modules/tryor": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/tryor/-/tryor-0.1.2.tgz", - "integrity": "sha512-2+ilNA00DGvbUYYbRrm3ux+snbo7I6uPXMw8I4p/QMl7HUOWBBZFbk+Mpr8/IAPDQE+LQ8vOdlI6xEzjc+e/BQ==" - }, "node_modules/ts-api-utils": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", @@ -24274,14 +22435,6 @@ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "devOptional": true }, - "node_modules/underscore.string": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz", - "integrity": "sha512-hbD5MibthuDAu4yA5wxes5bzFgqd3PpBJuClbRxaNddxfdsz+qf+1kHwrGQFrmchmDHb9iNU+6EHDn8uj0xDJg==", - "engines": { - "node": "*" - } - }, "node_modules/undici": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/undici/-/undici-6.6.2.tgz", @@ -24299,59 +22452,6 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/unglob": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unglob/-/unglob-0.1.2.tgz", - "integrity": "sha512-L+VIVtnV3YV9INYG6rWVXaq7yBVzecxstKEuns5niJiKh1XLC3xrOsbVEnyyHhjlTL4eEeaFCmXQhZgXAEw9pA==", - "dependencies": { - "generator-supported": "~0.0.1", - "glob": "~3.2.8", - "minimatch": "~0.2.14" - } - }, - "node_modules/unglob/node_modules/glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/glob/-/glob-3.2.11.tgz", - "integrity": "sha512-hVb0zwEZwC1FXSKRPFTeOtN7AArJcJlI6ULGLtrstaswKNlrTJqAA+1lYlSUop4vjA423xlBzqfVS3iWGlqJ+g==", - "dependencies": { - "inherits": "2", - "minimatch": "0.3" - }, - "engines": { - "node": "*" - } - }, - "node_modules/unglob/node_modules/glob/node_modules/minimatch": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", - "integrity": "sha512-WFX1jI1AaxNTZVOHLBVazwTWKaQjoykSzCBNXB72vDTCzopQGtyP91tKdFK5cv1+qMwPyiTu1HqUriqplI8pcA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/unglob/node_modules/lru-cache": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", - "integrity": "sha512-WpibWJ60c3AgAz8a2iYErDrcT2C7OmKnsWhIcHOjkUHFjkXncJhtLxNSqUmxRxRunpb5I8Vprd7aNSd2NtksJQ==" - }, - "node_modules/unglob/node_modules/minimatch": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz", - "integrity": "sha512-zZ+Jy8lVWlvqqeM8iZB7w7KmQkoJn8djM585z88rywrEbzoqawVa9FR5p2hwD+y74nfuKOjmNvi9gtWJNLqHvA==", - "deprecated": "Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue", - "dependencies": { - "lru-cache": "2", - "sigmund": "~1.0.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -24396,7 +22496,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", - "devOptional": true, + "dev": true, "dependencies": { "unique-slug": "^4.0.0" }, @@ -24408,7 +22508,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", - "devOptional": true, + "dev": true, "dependencies": { "imurmurhash": "^0.1.4" }, @@ -25234,22 +23334,6 @@ "node": ">=0.10.0" } }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/watch": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/watch/-/watch-0.10.0.tgz", - "integrity": "sha512-FAk18nzhYggg939xgRRLJjvqmAKZciO24wr8neoxNPl87w8J3m784wxL4zFBwME+0gNQ2Sv/vfsCrUxPxU2Dmg==", - "engines": [ - "node >=0.1.95" - ] - }, "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", @@ -25754,27 +23838,6 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "node_modules/win-fork": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/win-fork/-/win-fork-1.1.1.tgz", - "integrity": "sha512-kMnrXXHyb/Zx1ynkiMtcEgq+rxXFIfs/IhhxVBmIk+1KwPyIggZU0RAiADExhSyf0NESvCWQyfO4eGdlU9fBSw==", - "bin": { - "win-fork": "bin/win-spawn", - "win-line-endings": "bin/win-line-endings", - "win-spawn": "bin/win-spawn" - } - }, - "node_modules/window-size": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", - "integrity": "sha512-2thx4pB0cV3h+Bw7QmMXcEbdmOzv9t0HFplJH/Lz6yu60hXYy5RT8rUu+wlIreVxWsGN20mo+MHeCSfUpQBwPw==", - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/winston": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/winston/-/winston-3.11.0.tgz", @@ -25821,18 +23884,11 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "devOptional": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -25854,7 +23910,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "devOptional": true, + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25871,7 +23927,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "devOptional": true, + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -25886,7 +23942,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "devOptional": true, + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -25898,7 +23954,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "devOptional": true + "dev": true }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "4.3.0", @@ -25933,7 +23989,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -25947,18 +24004,6 @@ "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/write-to": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/write-to/-/write-to-1.1.1.tgz", - "integrity": "sha512-pcG7jO2XQm49G+oCJhFtQC2Dh7U//K0jzXnCetNERZn57/HbyuQQ+FFDOCUq61Sw3KGHqxO9uEWVaj/tJeAhxw==", - "dependencies": { - "dethroy": "1", - "mkdirp": "0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", @@ -26026,22 +24071,6 @@ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", "devOptional": true }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==", - "engines": { - "node": "*" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -26175,4 +24204,3 @@ } } } - diff --git a/src/package.json b/src/package.json index e4200d6c..844a8ca2 100644 --- a/src/package.json +++ b/src/package.json @@ -33,7 +33,6 @@ "@codetrix-studio/capacitor-google-auth": "^3.4.0-rc.0", "@ngx-pwa/local-storage": "^17.0.0", "angular2-uuid": "^1.1.1", - "component": "^1.1.0", "firebase": "^10.8.0", "marked": "^9.0.0", "ngx-markdown": "^17.1.1", From d9891f6e97d166970f8643fbe94bc058c934a875 Mon Sep 17 00:00:00 2001 From: Jason Wall Date: Sat, 9 Mar 2024 15:53:56 -0500 Subject: [PATCH 20/20] new dependency tree --- src/dependency-tree.txt | 339 +--------------------------------------- 1 file changed, 1 insertion(+), 338 deletions(-) diff --git a/src/dependency-tree.txt b/src/dependency-tree.txt index a7e4e9b9..2015381e 100644 --- a/src/dependency-tree.txt +++ b/src/dependency-tree.txt @@ -2452,343 +2452,6 @@ dynamicbible@4.0.0 /Users/walljm/projects/walljm/dynamicbible/src │ ├── debug@4.3.4 deduped │ └── eslint@8.57.0 deduped ├── angular2-uuid@1.1.1 -├─┬ component@1.1.0 -│ ├── co@3.1.0 -│ ├── commander@2.20.3 -│ ├─┬ component-build@1.2.2 -│ │ ├─┬ builder-autoprefixer@1.0.4 -│ │ │ └─┬ autoprefixer-core@3.1.2 -│ │ │ ├── caniuse-db@1.0.30001591 -│ │ │ └─┬ postcss@2.2.6 -│ │ │ ├── js-base64@2.1.9 -│ │ │ └─┬ source-map@0.1.43 -│ │ │ └── amdefine@1.0.1 -│ │ ├─┬ builder-es6-module-to-cjs@1.1.0 -│ │ │ ├─┬ es6-module-jstransform@0.1.4 -│ │ │ │ ├── esprima-fb@3001.1.0-dev-harmony-fb -│ │ │ │ └─┬ jstransform@3.0.0 -│ │ │ │ ├── base62@0.1.1 -│ │ │ │ ├── esprima-fb@3001.1.0-dev-harmony-fb deduped -│ │ │ │ └─┬ source-map@0.1.31 -│ │ │ │ └── amdefine@1.0.1 deduped -│ │ │ └── is-module@1.0.0 -│ │ ├─┬ component-builder@1.2.1 -│ │ │ ├── chanel@2.2.0 deduped -│ │ │ ├── co@3.1.0 deduped -│ │ │ ├── component-flatten@1.0.1 deduped -│ │ │ ├─┬ component-manifest@1.0.0 -│ │ │ │ ├── debug@4.3.4 deduped -│ │ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ │ ├── graceful-fs@2.0.3 deduped -│ │ │ │ └── unglob@0.1.2 deduped -│ │ │ ├── component-require2@1.1.1 -│ │ │ ├── cp@0.1.1 -│ │ │ ├── debug@4.3.4 deduped -│ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ ├── graceful-fs@2.0.3 deduped -│ │ │ ├── mkdirp@0.3.5 deduped -│ │ │ ├── requires@1.0.2 -│ │ │ └─┬ syntax-error@1.4.0 -│ │ │ └─┬ acorn-node@1.8.2 -│ │ │ ├── acorn-walk@7.2.0 -│ │ │ ├── acorn@7.4.1 -│ │ │ └── xtend@4.0.2 -│ │ └── debug@4.3.4 deduped -│ ├─┬ component-consoler@2.0.0 -│ │ └── debug@4.3.4 deduped -│ ├─┬ component-flatten@1.0.1 -│ │ └── semver@2.3.2 -│ ├─┬ component-ls@2.1.0 -│ │ └── archy@0.0.2 -│ ├─┬ component-outdated2@1.0.5 -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├── component-flatten@1.0.1 deduped -│ │ ├── component-remotes@1.2.0 deduped -│ │ ├── generator-supported@0.0.1 -│ │ └── semver@2.3.2 -│ ├─┬ component-pin@1.0.5 -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├── component-flatten@1.0.1 deduped -│ │ ├── component-remotes@1.2.0 deduped -│ │ ├── generator-supported@0.0.1 deduped -│ │ └── semver@2.3.2 -│ ├─┬ component-remotes@1.2.0 -│ │ ├── co@3.1.0 deduped -│ │ ├─┬ cogent@0.4.3-fix-redirects (git+ssh://git@github.com/timaschew/cogent.git#2246bd071392f5053a3a110024fd608a40a593ba) -│ │ │ ├── co@3.1.0 deduped -│ │ │ ├── debug@4.3.4 deduped -│ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ ├── netrc@0.1.4 -│ │ │ ├─┬ proxy-agent@1.1.1 -│ │ │ │ ├─┬ http-proxy-agent@0.2.7 -│ │ │ │ │ ├── agent-base@1.0.2 -│ │ │ │ │ ├─┬ debug@2.6.9 -│ │ │ │ │ │ └── ms@2.0.0 -│ │ │ │ │ └── extend@3.0.2 deduped -│ │ │ │ ├─┬ https-proxy-agent@0.3.6 -│ │ │ │ │ ├── agent-base@1.0.2 deduped -│ │ │ │ │ ├── debug@2.6.9 deduped -│ │ │ │ │ └── extend@3.0.2 deduped -│ │ │ │ ├── lru-cache@2.5.2 -│ │ │ │ ├─┬ pac-proxy-agent@0.2.0 -│ │ │ │ │ ├── agent-base@1.0.2 -│ │ │ │ │ ├─┬ debug@2.6.9 -│ │ │ │ │ │ └── ms@2.0.0 -│ │ │ │ │ ├── extend@1.2.1 -│ │ │ │ │ ├─┬ get-uri@0.1.4 -│ │ │ │ │ │ ├── data-uri-to-buffer@0.0.4 -│ │ │ │ │ │ ├─┬ debug@2.6.9 -│ │ │ │ │ │ │ └── ms@2.0.0 -│ │ │ │ │ │ ├── extend@3.0.2 deduped -│ │ │ │ │ │ ├── file-uri-to-path@0.0.2 -│ │ │ │ │ │ ├─┬ ftp@0.3.10 -│ │ │ │ │ │ │ ├─┬ readable-stream@1.1.14 -│ │ │ │ │ │ │ │ ├── core-util-is@1.0.2 deduped -│ │ │ │ │ │ │ │ ├── inherits@2.0.4 deduped -│ │ │ │ │ │ │ │ ├── isarray@0.0.1 -│ │ │ │ │ │ │ │ └── string_decoder@0.10.31 -│ │ │ │ │ │ │ └── xregexp@2.0.0 -│ │ │ │ │ │ └─┬ readable-stream@2.3.8 -│ │ │ │ │ │ ├── core-util-is@1.0.2 deduped -│ │ │ │ │ │ ├── inherits@2.0.4 deduped -│ │ │ │ │ │ ├── isarray@1.0.0 deduped -│ │ │ │ │ │ ├── process-nextick-args@2.0.1 deduped -│ │ │ │ │ │ ├── safe-buffer@5.1.2 -│ │ │ │ │ │ ├─┬ string_decoder@1.1.1 -│ │ │ │ │ │ │ └── safe-buffer@5.1.2 deduped -│ │ │ │ │ │ └── util-deprecate@1.0.2 deduped -│ │ │ │ │ ├─┬ pac-resolver@1.2.6 -│ │ │ │ │ │ ├── co@3.0.6 -│ │ │ │ │ │ ├─┬ degenerator@1.0.4 -│ │ │ │ │ │ │ ├─┬ ast-types@0.14.2 -│ │ │ │ │ │ │ │ └── tslib@2.6.2 deduped -│ │ │ │ │ │ │ ├── escodegen@1.14.3 deduped -│ │ │ │ │ │ │ └── esprima@3.1.3 -│ │ │ │ │ │ ├── netmask@1.0.6 -│ │ │ │ │ │ ├─┬ regenerator@0.8.46 -│ │ │ │ │ │ │ ├─┬ commoner@0.10.8 -│ │ │ │ │ │ │ │ ├── commander@2.20.3 -│ │ │ │ │ │ │ │ ├─┬ detective@4.7.1 -│ │ │ │ │ │ │ │ │ ├── acorn@5.7.4 -│ │ │ │ │ │ │ │ │ └── defined@1.0.1 -│ │ │ │ │ │ │ │ ├─┬ glob@5.0.15 -│ │ │ │ │ │ │ │ │ ├── inflight@1.0.6 deduped -│ │ │ │ │ │ │ │ │ ├── inherits@2.0.4 deduped -│ │ │ │ │ │ │ │ │ ├─┬ minimatch@3.1.2 -│ │ │ │ │ │ │ │ │ │ └─┬ brace-expansion@1.1.11 -│ │ │ │ │ │ │ │ │ │ ├── balanced-match@1.0.2 deduped -│ │ │ │ │ │ │ │ │ │ └── concat-map@0.0.1 deduped -│ │ │ │ │ │ │ │ │ ├── once@1.4.0 deduped -│ │ │ │ │ │ │ │ │ └── path-is-absolute@1.0.1 deduped -│ │ │ │ │ │ │ │ ├── graceful-fs@4.2.11 -│ │ │ │ │ │ │ │ ├── iconv-lite@0.4.24 deduped -│ │ │ │ │ │ │ │ ├─┬ mkdirp@0.5.6 -│ │ │ │ │ │ │ │ │ └── minimist@1.2.8 deduped -│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped -│ │ │ │ │ │ │ │ ├── q@1.5.1 -│ │ │ │ │ │ │ │ └─┬ recast@0.11.23 -│ │ │ │ │ │ │ │ ├── ast-types@0.9.6 -│ │ │ │ │ │ │ │ ├── esprima@3.1.3 -│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped -│ │ │ │ │ │ │ │ └── source-map@0.5.7 -│ │ │ │ │ │ │ ├─┬ defs@1.1.1 -│ │ │ │ │ │ │ │ ├─┬ alter@0.2.0 -│ │ │ │ │ │ │ │ │ └── stable@0.1.8 -│ │ │ │ │ │ │ │ ├── ast-traverse@0.1.1 -│ │ │ │ │ │ │ │ ├── breakable@1.0.0 -│ │ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb -│ │ │ │ │ │ │ │ ├── simple-fmt@0.1.0 -│ │ │ │ │ │ │ │ ├── simple-is@0.2.0 -│ │ │ │ │ │ │ │ ├── stringmap@0.2.2 -│ │ │ │ │ │ │ │ ├── stringset@0.2.1 -│ │ │ │ │ │ │ │ ├── tryor@0.1.2 -│ │ │ │ │ │ │ │ └─┬ yargs@3.27.0 -│ │ │ │ │ │ │ │ ├── camelcase@1.2.1 -│ │ │ │ │ │ │ │ ├─┬ cliui@2.1.0 -│ │ │ │ │ │ │ │ │ ├─┬ center-align@0.1.3 -│ │ │ │ │ │ │ │ │ │ ├─┬ align-text@0.1.4 -│ │ │ │ │ │ │ │ │ │ │ ├─┬ kind-of@3.2.2 -│ │ │ │ │ │ │ │ │ │ │ │ └── is-buffer@1.1.6 -│ │ │ │ │ │ │ │ │ │ │ ├── longest@1.0.1 -│ │ │ │ │ │ │ │ │ │ │ └── repeat-string@1.6.1 -│ │ │ │ │ │ │ │ │ │ └── lazy-cache@1.0.4 -│ │ │ │ │ │ │ │ │ ├─┬ right-align@0.1.3 -│ │ │ │ │ │ │ │ │ │ └── align-text@0.1.4 deduped -│ │ │ │ │ │ │ │ │ └── wordwrap@0.0.2 -│ │ │ │ │ │ │ │ ├── decamelize@1.2.0 -│ │ │ │ │ │ │ │ ├─┬ os-locale@1.4.0 -│ │ │ │ │ │ │ │ │ └─┬ lcid@1.0.0 -│ │ │ │ │ │ │ │ │ └── invert-kv@1.0.0 -│ │ │ │ │ │ │ │ ├── window-size@0.1.4 -│ │ │ │ │ │ │ │ └── y18n@3.2.2 -│ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb -│ │ │ │ │ │ │ ├── private@0.1.8 -│ │ │ │ │ │ │ ├─┬ recast@0.10.33 -│ │ │ │ │ │ │ │ ├── ast-types@0.8.12 -│ │ │ │ │ │ │ │ ├── esprima-fb@15001.1001.0-dev-harmony-fb -│ │ │ │ │ │ │ │ ├── private@0.1.8 deduped -│ │ │ │ │ │ │ │ └── source-map@0.5.7 -│ │ │ │ │ │ │ ├── regenerator-runtime@0.9.6 -│ │ │ │ │ │ │ └── through@2.3.8 deduped -│ │ │ │ │ │ └── thunkify@2.1.2 -│ │ │ │ │ ├── proxy-agent@1.1.1 deduped -│ │ │ │ │ └── stream-to-array@1.0.0 deduped -│ │ │ │ └─┬ socks-proxy-agent@1.0.2 -│ │ │ │ ├── agent-base@1.0.2 deduped -│ │ │ │ ├── extend@1.2.1 -│ │ │ │ └─┬ socks@1.1.10 -│ │ │ │ ├── ip@1.1.9 -│ │ │ │ └── smart-buffer@1.1.15 -│ │ │ ├─┬ raw-body@1.3.4 -│ │ │ │ ├── bytes@1.0.0 -│ │ │ │ └── iconv-lite@0.4.8 -│ │ │ ├── statuses@1.5.0 -│ │ │ └─┬ write-to@1.1.1 -│ │ │ ├── dethroy@1.0.2 -│ │ │ └── mkdirp@0.3.5 deduped -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├─┬ component-validator@1.1.1 -│ │ │ └── component-consoler@2.0.0 deduped -│ │ ├── debug@4.3.4 deduped -│ │ ├── generator-supported@0.0.1 deduped -│ │ ├── graceful-fs@2.0.3 -│ │ └── semver@2.3.2 -│ ├─┬ component-resolver@1.3.0 -│ │ ├─┬ chanel@2.2.0 -│ │ │ ├── co@3.1.0 deduped -│ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ └── to-descriptor@1.0.1 -│ │ ├── co@3.1.0 deduped -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├─┬ component-downloader@1.2.0 -│ │ │ ├── chanel@2.2.0 deduped -│ │ │ ├── co@3.1.0 deduped -│ │ │ ├── component-consoler@2.0.0 deduped -│ │ │ ├── component-remotes@1.2.0 deduped -│ │ │ ├── debug@4.3.4 deduped -│ │ │ ├─┬ decompress@0.2.5 -│ │ │ │ ├── adm-zip@0.4.16 -│ │ │ │ ├─┬ ext-name@1.0.1 -│ │ │ │ │ ├─┬ ext-list@0.2.0 -│ │ │ │ │ │ └─┬ got@0.2.0 -│ │ │ │ │ │ └── object-assign@0.3.1 -│ │ │ │ │ └── underscore.string@2.3.3 -│ │ │ │ ├── get-stdin@0.1.0 -│ │ │ │ ├── mkdirp@0.3.5 deduped -│ │ │ │ ├─┬ nopt@2.2.1 -│ │ │ │ │ └── abbrev@1.1.1 deduped -│ │ │ │ ├─┬ rimraf@2.7.1 -│ │ │ │ │ └── glob@7.2.3 deduped -│ │ │ │ ├─┬ stream-combiner@0.0.4 -│ │ │ │ │ └── duplexer@0.1.2 deduped -│ │ │ │ ├─┬ tar@0.1.20 -│ │ │ │ │ ├─┬ block-stream@0.0.9 -│ │ │ │ │ │ └── inherits@2.0.4 deduped -│ │ │ │ │ ├─┬ fstream@0.1.31 -│ │ │ │ │ │ ├─┬ graceful-fs@3.0.12 -│ │ │ │ │ │ │ └── natives@1.1.6 -│ │ │ │ │ │ ├── inherits@2.0.4 deduped -│ │ │ │ │ │ ├─┬ mkdirp@0.5.6 -│ │ │ │ │ │ │ └── minimist@1.2.8 deduped -│ │ │ │ │ │ └─┬ rimraf@2.7.1 -│ │ │ │ │ │ └── glob@7.2.3 deduped -│ │ │ │ │ └── inherits@2.0.4 deduped -│ │ │ │ └─┬ tempfile@0.1.3 -│ │ │ │ └── uuid@1.4.2 -│ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ ├── graceful-fs@2.0.3 deduped -│ │ │ ├── mkdirp@0.3.5 deduped -│ │ │ ├─┬ rimraf@2.7.1 -│ │ │ │ └── glob@7.2.3 deduped -│ │ │ ├── semver@2.3.2 -│ │ │ ├── unglob@0.1.2 deduped -│ │ │ └── write-to@1.1.1 deduped -│ │ ├── component-flatten@1.0.1 deduped -│ │ ├── component-remotes@1.2.0 deduped -│ │ ├── component-validator@1.1.1 deduped -│ │ ├── debug@4.3.4 deduped -│ │ ├── generator-supported@0.0.1 deduped -│ │ ├── graceful-fs@2.0.3 deduped -│ │ ├── semver@2.3.2 -│ │ └─┬ unglob@0.1.2 -│ │ ├── generator-supported@0.0.1 deduped -│ │ ├─┬ glob@3.2.11 -│ │ │ ├── inherits@2.0.4 deduped -│ │ │ └─┬ minimatch@0.3.0 -│ │ │ ├── lru-cache@2.7.3 deduped -│ │ │ └── sigmund@1.0.1 deduped -│ │ └─┬ minimatch@0.2.14 -│ │ ├── lru-cache@2.7.3 -│ │ └── sigmund@1.0.1 -│ ├─┬ component-search2@1.1.1 -│ │ ├── bytes@0.3.0 -│ │ ├─┬ cogent@0.4.3 -│ │ │ ├── co@3.1.0 deduped -│ │ │ ├── debug@4.3.4 deduped -│ │ │ ├── generator-supported@0.0.1 deduped -│ │ │ ├── netrc@0.1.4 deduped -│ │ │ ├── proxy-agent@1.1.1 deduped -│ │ │ ├── raw-body@1.3.4 deduped -│ │ │ ├── statuses@1.5.0 deduped -│ │ │ └── write-to@1.1.1 deduped -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├── debug@4.3.4 deduped -│ │ ├─┬ event-stream@3.3.5 -│ │ │ ├── duplexer@0.1.2 deduped -│ │ │ ├── from@0.1.7 -│ │ │ ├── map-stream@0.0.7 -│ │ │ ├─┬ pause-stream@0.0.11 -│ │ │ │ └── through@2.3.8 deduped -│ │ │ ├─┬ split@1.0.1 -│ │ │ │ └── through@2.3.8 deduped -│ │ │ ├─┬ stream-combiner@0.2.2 -│ │ │ │ ├── duplexer@0.1.2 deduped -│ │ │ │ └── through@2.3.8 deduped -│ │ │ └── through@2.3.8 deduped -│ │ ├── generator-supported@0.0.1 deduped -│ │ ├─┬ JSONStream@0.8.4 -│ │ │ ├── jsonparse@0.0.5 -│ │ │ └── through@2.3.8 deduped -│ │ └── stream-to-array@1.0.0 -│ ├─┬ component-updater@1.0.5 -│ │ ├── component-consoler@2.0.0 deduped -│ │ ├── component-flatten@1.0.1 deduped -│ │ ├── component-remotes@1.2.0 deduped -│ │ ├── generator-supported@0.0.1 deduped -│ │ └── semver@2.3.2 -│ ├─┬ component-watcher@1.0.3 -│ │ ├── debug@4.3.4 deduped -│ │ └─┬ sane@0.8.1 -│ │ ├─┬ minimatch@0.2.14 -│ │ │ ├── lru-cache@2.7.3 -│ │ │ └── sigmund@1.0.1 deduped -│ │ ├─┬ walker@1.0.8 -│ │ │ └─┬ makeerror@1.0.12 -│ │ │ └── tmpl@1.0.5 -│ │ └── watch@0.10.0 -│ ├── debug@4.3.4 deduped -│ ├── mkdirp@0.3.5 -│ ├─┬ rimraf@2.7.1 -│ │ └── glob@7.2.3 deduped -│ ├── semver@2.3.2 -│ ├─┬ superagent@0.17.0 -│ │ ├── cookiejar@1.3.0 -│ │ ├── debug@0.7.4 -│ │ ├── emitter-component@1.0.0 -│ │ ├── extend@1.2.1 -│ │ ├── formidable@1.0.14 -│ │ ├── methods@0.0.1 -│ │ ├── mime@1.2.5 -│ │ ├── qs@0.6.5 -│ │ └── reduce-component@1.0.1 -│ ├─┬ tiny-lr-fork@0.0.5 -│ │ ├── debug@0.7.4 -│ │ ├── faye-websocket@0.4.4 -│ │ ├─┬ noptify@0.0.3 -│ │ │ └─┬ nopt@2.0.0 -│ │ │ └── abbrev@1.1.1 -│ │ └── qs@0.5.6 -│ └── win-fork@1.1.1 ├─┬ cypress@13.6.6 │ ├─┬ @cypress/request@3.0.1 │ │ ├── aws-sign2@0.7.0 @@ -4197,7 +3860,7 @@ dynamicbible@4.0.0 /Users/walljm/projects/walljm/dynamicbible/src │ │ │ ├─┬ on-finished@2.3.0 │ │ │ │ └── ee-first@1.1.1 deduped │ │ │ ├── parseurl@1.3.3 deduped -│ │ │ ├── statuses@1.5.0 deduped +│ │ │ ├── statuses@1.5.0 │ │ │ └── unpipe@1.0.0 deduped │ │ ├── parseurl@1.3.3 deduped │ │ └── utils-merge@1.0.1 deduped