diff --git a/.eslintrc.json b/.eslintrc.json
index 31d2023e3..4fd0d7001 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -7,7 +7,7 @@
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
"@nx/enforce-module-boundaries": [
- "error",
+ "warn",
{
"enforceBuildableLibDependency": true,
"allow": [],
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ae38b7d37..19aa47027 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -12,5 +12,6 @@
"apps/picsa-server/_deprecated/scripts"
],
"deno.unstable": true,
- "deno.config": "apps/picsa-server/supabase/functions/deno.jsonc"
+ "deno.config": "apps/picsa-server/supabase/functions/deno.jsonc",
+ "angular.enable-strict-mode-prompt": false
}
diff --git a/apps/picsa-apps/dashboard/.eslintrc.json b/apps/picsa-apps/dashboard/.eslintrc.json
index 904d31f0d..a8a7428e6 100644
--- a/apps/picsa-apps/dashboard/.eslintrc.json
+++ b/apps/picsa-apps/dashboard/.eslintrc.json
@@ -6,6 +6,8 @@
"files": ["*.ts"],
"extends": ["plugin:@nx/angular", "plugin:@angular-eslint/template/process-inline-templates"],
"rules": {
+ "@typescript-eslint/no-unused-vars": ["warn"],
+ "@typescript-eslint/no-explicit-any": ["warn"],
"@angular-eslint/directive-selector": [
"error",
{
diff --git a/apps/picsa-apps/dashboard/src/app/app.component.html b/apps/picsa-apps/dashboard/src/app/app.component.html
index 1fcd78283..1330340b3 100644
--- a/apps/picsa-apps/dashboard/src/app/app.component.html
+++ b/apps/picsa-apps/dashboard/src/app/app.component.html
@@ -4,9 +4,9 @@
menu
PICSA Dashboard
- @if(supabaseService.authUser(); as user){
+ @if(supabaseService.auth.authUser(); as user){
-
} @else {
-
+
person
Sign In
@@ -24,10 +24,30 @@
-
+
@for (link of navLinks; track link.href) {
- {{ link.label }}
+
+ {{ link.label }}
+
+ }
+
+ Global Admin
+
+ @for (link of globalLinks; track link.href) {
+
+ {{ link.label }}
+
}
diff --git a/apps/picsa-apps/dashboard/src/app/app.component.scss b/apps/picsa-apps/dashboard/src/app/app.component.scss
index 457cb4bcf..696b9d0ec 100644
--- a/apps/picsa-apps/dashboard/src/app/app.component.scss
+++ b/apps/picsa-apps/dashboard/src/app/app.component.scss
@@ -3,6 +3,10 @@ mat-sidenav {
}
mat-nav-list {
--mdc-list-list-item-one-line-container-height: 48px;
+
+ height: calc(100% - 16px);
+ display: flex;
+ flex-direction: column;
}
mat-toolbar {
z-index: 2;
@@ -11,3 +15,6 @@ mat-sidenav-content {
display: flex;
flex-direction: column;
}
+.active-link {
+ text-decoration: underline;
+}
diff --git a/apps/picsa-apps/dashboard/src/app/app.component.ts b/apps/picsa-apps/dashboard/src/app/app.component.ts
index 74d8f63ba..bac41280c 100644
--- a/apps/picsa-apps/dashboard/src/app/app.component.ts
+++ b/apps/picsa-apps/dashboard/src/app/app.component.ts
@@ -1,7 +1,6 @@
import { CommonModule } from '@angular/common';
import { AfterViewInit, Component } from '@angular/core';
import { RouterModule } from '@angular/router';
-import { PicsaNotificationService } from '@picsa/shared/services/core/notification.service';
import { SupabaseService } from '@picsa/shared/services/core/supabase';
import { DashboardMaterialModule } from './material.module';
@@ -27,16 +26,43 @@ export class AppComponent implements AfterViewInit {
label: 'Home',
href: '/',
},
+ {
+ label: 'Resources',
+ href: '/resources',
+ },
+ // {
+ // label: 'Climate Data',
+ // href: '/climate-data',
+ // },
+ // {
+ // label: 'Crop Information',
+ // href: '/crop-information',
+ // },
+ // {
+ // label: 'Monitoring Forms',
+ // href: '/monitoring-forms',
+ // },
+ // {
+ // label: 'Translations',
+ // href: '/translations',
+ // },
+ ];
+
+ globalLinks: INavLink[] = [
+ // {
+ // label: 'Deployments',
+ // href: '/deployments',
+ // },
// {
- // label: 'Resources',
- // href: '/resources',
+ // label: 'Users',
+ // href: '/users',
// },
];
- constructor(public supabaseService: SupabaseService, private notificationService: PicsaNotificationService) {}
+ constructor(public supabaseService: SupabaseService) {}
async ngAfterViewInit() {
- await this.supabaseService.init();
- await this.supabaseService.signInDefaultUser();
+ await this.supabaseService.ready();
+ await this.supabaseService.auth.signInDefaultUser();
}
}
diff --git a/apps/picsa-apps/dashboard/src/app/app.routes.ts b/apps/picsa-apps/dashboard/src/app/app.routes.ts
index 0e7f01bb8..e417943af 100644
--- a/apps/picsa-apps/dashboard/src/app/app.routes.ts
+++ b/apps/picsa-apps/dashboard/src/app/app.routes.ts
@@ -3,6 +3,6 @@ import { Route } from '@angular/router';
export const appRoutes: Route[] = [
{
path: 'resources',
- loadChildren: () => import('./pages/resources/resources.module').then((m) => m.ResourcesPageModule),
+ loadChildren: () => import('./modules/resources/resources.module').then((m) => m.ResourcesPageModule),
},
];
diff --git a/apps/picsa-apps/dashboard/src/app/material.module.ts b/apps/picsa-apps/dashboard/src/app/material.module.ts
index dd707f61e..e6dd0d0ce 100644
--- a/apps/picsa-apps/dashboard/src/app/material.module.ts
+++ b/apps/picsa-apps/dashboard/src/app/material.module.ts
@@ -1,11 +1,31 @@
import { NgModule } from '@angular/core';
import { MatButtonModule } from '@angular/material/button';
+import { MatChipsModule } from '@angular/material/chips';
+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 { MatRadioModule } from '@angular/material/radio';
import { MatSidenavModule } from '@angular/material/sidenav';
+import { MatStepperModule } from '@angular/material/stepper';
+import { MatTableModule } from '@angular/material/table';
+import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
-const matModules = [MatButtonModule, MatIconModule, MatListModule, MatSidenavModule, MatToolbarModule];
+const matModules = [
+ MatButtonModule,
+ MatChipsModule,
+ MatFormFieldModule,
+ MatIconModule,
+ MatInputModule,
+ MatListModule,
+ MatRadioModule,
+ MatSidenavModule,
+ MatStepperModule,
+ MatTableModule,
+ MatTabsModule,
+ MatToolbarModule,
+];
@NgModule({
imports: matModules,
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/components/index.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/components/index.ts
new file mode 100644
index 000000000..576086513
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/components/index.ts
@@ -0,0 +1 @@
+export * from './storage-link/storage-link.component';
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.html b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.html
new file mode 100644
index 000000000..e0bed275f
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.html
@@ -0,0 +1,29 @@
+@if(entry){ @switch (displayStyle) {
+
+@case ('button') {
+
+ {{ fileTypeIcon }}
+ {{ entry.name?.split('/')?.pop() }}
+
+
+}
+
+@case ('link') {
+
+ {{ entry.name?.split('/')?.pop() }}
+
+}
+
+@default {
+
+
{{ fileTypeIcon }}
+
{{ entry.name?.split('/')?.pop() }}
+
+} } } @if(notFound) {
+Storage file not found
+}
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.scss b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.scss
new file mode 100644
index 000000000..77f37357e
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.scss
@@ -0,0 +1,82 @@
+:host {
+ display: block;
+ max-width: 200px;
+}
+.error-message {
+ color: var(--color-warn);
+}
+mat-icon {
+ overflow: visible;
+}
+
+a {
+ text-decoration: none;
+ color: var(--color-primary);
+}
+
+button.chip-button {
+ padding: 0;
+ margin-bottom: 4px;
+ border: 1px solid;
+ height: auto;
+
+ .chip-icon {
+ color: white;
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 32px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .chip-text {
+ margin-left: 32px;
+ padding: 8px;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+ }
+}
+.filename {
+ word-break: break-word;
+}
+
+// Colors used for different filetypes
+$color-file-document: hsl(230, 40%, 40%);
+$color-file-video: hsl(0, 70%, 60%);
+$color-file-image: hsl(150, 60%, 40%);
+$color-file-audio: hsl(300, 60%, 40%);
+
+.filetype-icon {
+ color: var(--color-primary);
+ &[data-icon='description'] {
+ color: $color-file-document;
+ }
+ &[data-icon='smart_display'] {
+ color: $color-file-video;
+ }
+ &[data-icon='image'] {
+ color: $color-file-image;
+ }
+ &[data-icon='music_note'] {
+ color: $color-file-audio;
+ }
+}
+
+.filetype-icon.inverted {
+ color: white;
+ background: var(--color-primary);
+ &[data-icon='description'] {
+ background: $color-file-document;
+ }
+ &[data-icon='smart_display'] {
+ background: $color-file-video;
+ }
+ &[data-icon='image'] {
+ background: $color-file-image;
+ }
+ &[data-icon='music_note'] {
+ background: $color-file-audio;
+ }
+}
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.spec.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.spec.ts
new file mode 100644
index 000000000..4cde03cf4
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.spec.ts
@@ -0,0 +1,22 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { DashboardResourcesStorageLinkComponent } from './storage-link.component';
+
+describe('StorageLinkComponent', () => {
+ let component: DashboardResourcesStorageLinkComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [DashboardResourcesStorageLinkComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(DashboardResourcesStorageLinkComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.ts
new file mode 100644
index 000000000..d30f030bb
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/components/storage-link/storage-link.component.ts
@@ -0,0 +1,65 @@
+import { CommonModule } from '@angular/common';
+import { Component, Input, OnInit } from '@angular/core';
+import { MatButtonModule } from '@angular/material/button';
+import { MatIconModule } from '@angular/material/icon';
+
+import { IResourceStorageEntry, ResourcesDashboardService } from '../../resources.service';
+
+/**
+ * Mat icons used to represent various filetype extensions
+ * https://fonts.google.com/icons
+ */
+const filetypeIconMapping = {
+ pdf: 'description',
+ jpeg: 'image',
+ jpg: 'image',
+ png: 'image',
+ svg: 'image',
+ mp4: 'smart_display',
+ mp3: 'music_note',
+};
+
+@Component({
+ selector: 'dashboard-resources-storage-link',
+ standalone: true,
+ imports: [CommonModule, MatButtonModule, MatIconModule],
+ templateUrl: './storage-link.component.html',
+ styleUrls: ['./storage-link.component.scss'],
+})
+/**
+ * Minimal component that takes a storage file id input and returns a link
+ * to the public url of the file, as populated from resources store cache
+ */
+export class DashboardResourcesStorageLinkComponent implements OnInit {
+ /** Resource storage id */
+ @Input() id: string;
+
+ @Input() displayStyle: 'button' | 'link' | 'default' = 'default';
+
+ constructor(private service: ResourcesDashboardService) {}
+
+ public entry?: IResourceStorageEntry;
+
+ public notFound = false;
+
+ public fileTypeIcon = 'description';
+
+ async ngOnInit() {
+ const entry = await this.service.getStorageFileById(this.id);
+ this.entry = entry;
+ this.notFound = entry ? false : true;
+ if (entry) {
+ this.fileTypeIcon = this.getFileTypeIcon(entry);
+ }
+ }
+
+ public handleLinkClick(url: string) {
+ window.open(url, '_blank', 'noopener');
+ }
+
+ private getFileTypeIcon(entry: IResourceStorageEntry) {
+ const extension = entry.name?.split('.').pop();
+ if (!extension) return 'document';
+ return filetypeIconMapping[extension] || 'document';
+ }
+}
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.html b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.html
new file mode 100644
index 000000000..0fbc4250e
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.html
@@ -0,0 +1,119 @@
+
+
Edit Resource
+
+
+
+
+ File
+ Link
+
+
+
+ @if (resourceType==='file') {
+
+
+ } @if (resourceType==='link') {
+
+ }
+
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.scss b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.scss
new file mode 100644
index 000000000..0b10c43ce
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.scss
@@ -0,0 +1,40 @@
+mat-radio-button {
+ margin-right: 1rem;
+}
+mat-form-field {
+ flex: 1;
+ min-width: 200px;
+}
+
+label {
+ display: flex;
+ align-items: center;
+ margin-bottom: 1rem;
+ mat-icon {
+ margin-right: 4px;
+ }
+}
+picsa-supabase-upload {
+ width: 100%;
+ max-width: 284px;
+}
+dashboard-resources-storage-link {
+ display: inline-block;
+}
+button.file-remove {
+ display: inline;
+ padding: 0;
+ mat-icon {
+ margin-bottom: -4px;
+ }
+}
+textarea.mdc-text-field__input {
+ color: var(--color-primary) !important;
+ font-size: 20px;
+}
+img.cover-preview {
+ width: 200px;
+ max-height: 200px;
+ object-fit: contain;
+ border: 1px solid var(--color-light);
+}
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.spec.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.spec.ts
new file mode 100644
index 000000000..d5188806c
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { ResourceCreateComponent } from './resource-create.component';
+
+describe('ResourceCreateComponent', () => {
+ let component: ResourceCreateComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [ResourceCreateComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(ResourceCreateComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.ts
new file mode 100644
index 000000000..500e29ea6
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/create/resource-create.component.ts
@@ -0,0 +1,115 @@
+import { CommonModule } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { FormBuilder, FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
+import { ActivatedRoute } from '@angular/router';
+// eslint-disable-next-line @nx/enforce-module-boundaries
+import type { Database } from '@picsa/server-types';
+import { PICSAFormValidators } from '@picsa/shared/modules/forms/validators';
+import {
+ IUploadResult,
+ SupabaseStoragePickerDirective,
+ SupabaseUploadComponent,
+} from '@picsa/shared/services/core/supabase';
+import { IStorageEntry } from '@picsa/shared/services/core/supabase/services/supabase-storage.service';
+
+import { DashboardMaterialModule } from '../../../../material.module';
+import { DashboardResourcesStorageLinkComponent } from '../../components/storage-link/storage-link.component';
+import { ResourcesDashboardService } from '../../resources.service';
+
+type IResourceEntry = Database['public']['Tables']['resources']['Row'];
+
+@Component({
+ selector: 'dashboard-resource-create',
+ standalone: true,
+ imports: [
+ CommonModule,
+ DashboardMaterialModule,
+ DashboardResourcesStorageLinkComponent,
+ FormsModule,
+ ReactiveFormsModule,
+ SupabaseStoragePickerDirective,
+ SupabaseUploadComponent,
+ ],
+ templateUrl: './resource-create.component.html',
+ styleUrls: ['./resource-create.component.scss'],
+})
+export class ResourceCreateComponent implements OnInit {
+ constructor(
+ private service: ResourcesDashboardService,
+ private formBuilder: FormBuilder,
+ private route: ActivatedRoute
+ ) {}
+
+ public resourceType: 'file' | 'link';
+
+ public allowedFileTypes = ['pdf', 'mp4', 'mp3', 'jpg', 'jpeg', 'svg', 'png', 'webp'].map((ext) => `.${ext}`);
+ public allowedCoverTypes = ['jpg', 'jpeg', 'svg', 'png'].map((ext) => `.${ext}`);
+
+ public linkForm = this.formBuilder.group({
+ id: new FormControl(null),
+ type: ['link'],
+ url: ['', PICSAFormValidators.isUrl],
+ });
+ public fileForm = this.formBuilder.group({
+ id: new FormControl(null),
+ type: ['file'],
+ title: ['', Validators.required],
+ description: [''],
+ storage_file: ['', Validators.required],
+ storage_cover: [''],
+ });
+
+ private get form() {
+ return this.resourceType === 'file' ? this.fileForm : this.linkForm;
+ }
+
+ async ngOnInit() {
+ await this.service.ready();
+ const { id } = this.route.snapshot.params;
+ if (id) {
+ const { data } = await this.service.table.select<'*', IResourceEntry>('*').eq('id', id);
+ const resource = data?.[0];
+ if (resource) {
+ this.populateResource(resource);
+ }
+ }
+ }
+
+ // TODO - handle success/error messages
+ public async saveResource() {
+ const values = this.form.getRawValue() as any;
+ // Remove id entry if not populated
+ if (values.id === null) {
+ delete values.id;
+ }
+ const { data, error } = await this.service.table.upsert(values);
+ console.log({ data, error });
+ }
+
+ private populateResource(resource: IResourceEntry) {
+ this.resourceType = resource.type as any;
+ console.log('populate resource', resource);
+ switch (resource.type) {
+ case 'file':
+ this.fileForm.patchValue(resource);
+ break;
+ case 'link':
+ this.linkForm.patchValue(resource);
+ break;
+ default:
+ console.warn('Resource type not supported', resource.type);
+ }
+ }
+
+ public async handleUploadComplete(res: IUploadResult[], controlName: 'storage_file' | 'storage_cover') {
+ if (res.length === 0) {
+ return;
+ }
+ const [{ entry }] = res;
+ this.fileForm.patchValue({ [controlName]: entry.id });
+ }
+
+ public handleStorageFileSelected(entry: IStorageEntry | undefined, controlName: 'storage_file' | 'storage_cover') {
+ this.fileForm.patchValue({ [controlName]: entry?.id });
+ }
+}
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.html b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.html
new file mode 100644
index 000000000..d184666bb
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.html
@@ -0,0 +1,30 @@
+
+
+
Resources
+
+ add
+ Add Resource
+
+
+
+
+
+ Title |
+ {{resource.title}} |
+
+
+ storage_file |
+
+ @if(resource.storage_file; as storage_file ){
+
+ }
+ |
+
+
+
+
+
+
Super Admin
+
Import
+
Export
+
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.scss b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.scss
new file mode 100644
index 000000000..05bb98ef7
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.scss
@@ -0,0 +1,14 @@
+table.resources-table {
+ max-height: 50vh;
+ display: block;
+ overflow: auto;
+}
+tr.resource-row {
+ cursor: pointer;
+ &:hover {
+ background: whitesmoke;
+ }
+}
+th {
+ font-weight: bold;
+}
diff --git a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.spec.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.spec.ts
similarity index 100%
rename from apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.spec.ts
rename to apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.spec.ts
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.ts
new file mode 100644
index 000000000..9628f05d2
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/pages/home/resources.page.ts
@@ -0,0 +1,22 @@
+import { CommonModule } from '@angular/common';
+import { Component, OnInit } from '@angular/core';
+import { RouterModule } from '@angular/router';
+
+import { DashboardMaterialModule } from '../../../../material.module';
+import { DashboardResourcesStorageLinkComponent } from '../../components';
+import { ResourcesDashboardService } from '../../resources.service';
+
+@Component({
+ selector: 'dashboard-resources-page',
+ standalone: true,
+ imports: [CommonModule, DashboardResourcesStorageLinkComponent, DashboardMaterialModule, RouterModule],
+ templateUrl: './resources.page.html',
+ styleUrls: ['./resources.page.scss'],
+})
+export class ResourcesPageComponent implements OnInit {
+ public displayedColumns = ['title', 'storage_file'];
+ constructor(public service: ResourcesDashboardService) {}
+ ngOnInit(): void {
+ this.service.ready();
+ }
+}
diff --git a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.module.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/resources.module.ts
similarity index 52%
rename from apps/picsa-apps/dashboard/src/app/pages/resources/resources.module.ts
rename to apps/picsa-apps/dashboard/src/app/modules/resources/resources.module.ts
index c47e15277..f51054707 100644
--- a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.module.ts
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/resources.module.ts
@@ -2,7 +2,8 @@ import { CommonModule } from '@angular/common';
import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
-import { ResourcesPageComponent } from './resources.page';
+import { ResourceCreateComponent } from './pages/create/resource-create.component';
+import { ResourcesPageComponent } from './pages/home/resources.page';
@NgModule({
declarations: [],
@@ -13,6 +14,14 @@ import { ResourcesPageComponent } from './resources.page';
path: '',
component: ResourcesPageComponent,
},
+ {
+ path: 'create',
+ component: ResourceCreateComponent,
+ },
+ {
+ path: ':id',
+ component: ResourceCreateComponent,
+ },
]),
],
})
diff --git a/apps/picsa-apps/dashboard/src/app/modules/resources/resources.service.ts b/apps/picsa-apps/dashboard/src/app/modules/resources/resources.service.ts
new file mode 100644
index 000000000..0638c4133
--- /dev/null
+++ b/apps/picsa-apps/dashboard/src/app/modules/resources/resources.service.ts
@@ -0,0 +1,113 @@
+import { Injectable, signal } from '@angular/core';
+// eslint-disable-next-line @nx/enforce-module-boundaries
+import { Database } from '@picsa/server-types';
+import { PicsaAsyncService } from '@picsa/shared/services/asyncService.service';
+import { PicsaNotificationService } from '@picsa/shared/services/core/notification.service';
+import { SupabaseService } from '@picsa/shared/services/core/supabase';
+import { IStorageEntry } from '@picsa/shared/services/core/supabase/services/supabase-storage.service';
+import { arrayToHashmap } from '@picsa/utils';
+
+export interface IResourceStorageEntry extends IStorageEntry {
+ /** Url generated when upload to public bucket (will always be populated, even if bucket not public) */
+ publicUrl: string;
+}
+
+export type IResourceEntry = Database['public']['Tables']['resources']['Row'];
+
+@Injectable({ providedIn: 'root' })
+export class ResourcesDashboardService extends PicsaAsyncService {
+ private storageFiles: IResourceStorageEntry[] = [];
+ public storageFilesHashmap: Record = {};
+ public readonly resources = signal([]);
+
+ public get table() {
+ return this.supabaseService.db.table('resources');
+ }
+
+ constructor(private supabaseService: SupabaseService, private notificationService: PicsaNotificationService) {
+ super();
+ }
+
+ public override async init() {
+ await this.supabaseService.ready();
+ await this.listStorageFiles();
+ await this.listResources();
+ }
+
+ /** Retrieve storage db meta for a file */
+ public async getStorageFileById(id: string) {
+ // Refresh storage file cache if id not found
+ if (!this.storageFilesHashmap[id]) {
+ await this.listStorageFiles();
+ }
+ return this.storageFilesHashmap[id];
+ }
+
+ /**
+ *
+ * TODO - only enable super admin/local dev
+ * TODO - remove when no longer required
+ */
+ public async migrateHardcodedResources() {
+ // NOTE - assumes storage files manually uploaded
+
+ // eslint-disable-next-line @nx/enforce-module-boundaries
+ const { DB_COLLECTION_ENTRIES, DB_FILE_ENTRIES, DB_LINK_ENTRIES } = await import(
+ '@picsa/resources/src/app/data/index'
+ );
+ console.log({ DB_COLLECTION_ENTRIES, DB_FILE_ENTRIES, DB_LINK_ENTRIES });
+ const ref = this.supabaseService.db.table('resources');
+ const uploaded: unknown[] = [];
+ const missing: unknown[] = [];
+
+ for (const fileEntry of Object.values(DB_FILE_ENTRIES)) {
+ const { type, description, url } = fileEntry;
+ // extract pathname from firebase url
+ const { pathname } = new URL(url);
+ const storagePath = decodeURI(pathname).replace(/%2F/g, '/').replace('/v0/b/picsa-apps.appspot.com/o/', '');
+ // check for equivalent storage file
+ const storageFile = this.storageFiles.find((file) => file.name === storagePath);
+ if (storageFile) {
+ const dbEntry: Database['public']['Tables']['resources']['Insert'] = {
+ description,
+ type,
+
+ storage_file: storageFile.id,
+ };
+ const { error } = await ref.upsert(dbEntry, { ignoreDuplicates: false });
+
+ if (error) {
+ console.error(error);
+ }
+ uploaded.push(fileEntry);
+ } else {
+ missing.push(fileEntry);
+ }
+ }
+ console.log({ uploaded, missing });
+ if (missing.length > 0) {
+ this.notificationService.showUserNotification({
+ matIcon: 'error',
+ message: `${missing.length} files missing from storage`,
+ });
+ }
+ }
+
+ private async listStorageFiles() {
+ const storageFiles = await this.supabaseService.storage.list('resources');
+ this.storageFiles = storageFiles.map((file) => ({
+ ...file,
+ publicUrl: this.supabaseService.storage.getPublicLink(file.bucket_id as string, file.name as string),
+ }));
+ this.storageFilesHashmap = arrayToHashmap(this.storageFiles, 'id');
+ console.log('storage files', this.storageFilesHashmap);
+ }
+
+ private async listResources() {
+ const { data, error } = await this.supabaseService.db.table('resources').select<'*', IResourceEntry>('*');
+ if (error) {
+ throw error;
+ }
+ this.resources.set(data);
+ }
+}
diff --git a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.html b/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.html
deleted file mode 100644
index 16913ac32..000000000
--- a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.html
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- addAdd Resource
-
diff --git a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.scss b/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.scss
deleted file mode 100644
index e69de29bb..000000000
diff --git a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.ts b/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.ts
deleted file mode 100644
index e77cef65d..000000000
--- a/apps/picsa-apps/dashboard/src/app/pages/resources/resources.page.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-import '@uppy/core/dist/style.min.css';
-import '@uppy/dashboard/dist/style.min.css';
-
-import { CommonModule } from '@angular/common';
-import { Component, OnInit } from '@angular/core';
-import { SupabaseService } from '@picsa/shared/services/core/supabase';
-import { UppyAngularDashboardModule } from '@uppy/angular';
-import Uppy from '@uppy/core';
-
-import { DashboardMaterialModule } from '../../material.module';
-
-@Component({
- selector: 'dashboard-resources-page',
- standalone: true,
- imports: [CommonModule, DashboardMaterialModule, UppyAngularDashboardModule],
- templateUrl: './resources.page.html',
- styleUrls: ['./resources.page.scss'],
-})
-export class ResourcesPageComponent implements OnInit {
- uppy: Uppy = new Uppy({ debug: true, autoProceed: true });
-
- constructor(public supabaseService: SupabaseService) {}
-
- async ngOnInit() {
- const table = this.supabaseService.db.table('resources');
-
- const { data, error } = await table.select();
- console.log({ data, error });
- }
-}
diff --git a/apps/picsa-apps/dashboard/tsconfig.json b/apps/picsa-apps/dashboard/tsconfig.json
index 25ca437b4..d15278881 100644
--- a/apps/picsa-apps/dashboard/tsconfig.json
+++ b/apps/picsa-apps/dashboard/tsconfig.json
@@ -6,7 +6,7 @@
"forceConsistentCasingInFileNames": true,
"strict": true,
"noImplicitOverride": true,
- "noPropertyAccessFromIndexSignature": true,
+ "noPropertyAccessFromIndexSignature": false,
"noImplicitReturns": true,
"noFallthroughCasesInSwitch": true
},
diff --git a/apps/picsa-server/supabase/migrations/20231012180747_create_monitoring_tool_submissions.sql b/apps/picsa-server/supabase/migrations/20231012180747_create_monitoring_tool_submissions.sql
index c7743bc46..c937ba48a 100644
--- a/apps/picsa-server/supabase/migrations/20231012180747_create_monitoring_tool_submissions.sql
+++ b/apps/picsa-server/supabase/migrations/20231012180747_create_monitoring_tool_submissions.sql
@@ -1,14 +1,32 @@
+SET
+ statement_timeout = 0;
-SET statement_timeout = 0;
-SET lock_timeout = 0;
-SET idle_in_transaction_session_timeout = 0;
-SET client_encoding = 'UTF8';
-SET standard_conforming_strings = on;
-SELECT pg_catalog.set_config('search_path', '', false);
-SET check_function_bodies = false;
-SET xmloption = content;
-SET client_min_messages = warning;
-SET row_security = off;
+SET
+ lock_timeout = 0;
+
+SET
+ idle_in_transaction_session_timeout = 0;
+
+SET
+ client_encoding = 'UTF8';
+
+SET
+ standard_conforming_strings = on;
+
+SELECT
+ pg_catalog.set_config('search_path', '', false);
+
+SET
+ check_function_bodies = false;
+
+SET
+ xmloption = content;
+
+SET
+ client_min_messages = warning;
+
+SET
+ row_security = off;
CREATE EXTENSION IF NOT EXISTS "pgsodium" WITH SCHEMA "pgsodium";
@@ -24,50 +42,72 @@ CREATE EXTENSION IF NOT EXISTS "supabase_vault" WITH SCHEMA "vault";
CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA "extensions";
-SET default_tablespace = '';
+SET
+ default_tablespace = '';
-SET default_table_access_method = "heap";
+SET
+ default_table_access_method = "heap";
CREATE TABLE IF NOT EXISTS "public"."monitoring_tool_submissions" (
- "_id" "text" NOT NULL,
- "_created" timestamp with time zone DEFAULT "now"() NOT NULL,
- "_modified" timestamp with time zone DEFAULT "now"() NOT NULL,
- "formId" character varying NOT NULL,
- "enketoEntry" "jsonb" NOT NULL,
- "json" "jsonb" NOT NULL,
- "_app_user_id" character varying NOT NULL,
- "_attachments" "jsonb" NOT NULL,
- "_deleted" boolean DEFAULT false NOT NULL
+ "_id" "text" NOT NULL,
+ "_created" timestamp with time zone DEFAULT "now"() NOT NULL,
+ "_modified" timestamp with time zone DEFAULT "now"() NOT NULL,
+ "formId" character varying NOT NULL,
+ "enketoEntry" "jsonb" NOT NULL,
+ "json" "jsonb" NOT NULL,
+ "_app_user_id" character varying NOT NULL,
+ "_attachments" "jsonb" NOT NULL,
+ "_deleted" boolean DEFAULT false NOT NULL
);
-ALTER TABLE "public"."monitoring_tool_submissions" OWNER TO "postgres";
+ALTER TABLE
+ "public"."monitoring_tool_submissions" OWNER TO "postgres";
+
+ALTER TABLE
+ ONLY "public"."monitoring_tool_submissions"
+ADD
+ CONSTRAINT "monitoring_tool_submissions_pkey" PRIMARY KEY ("_id");
-ALTER TABLE ONLY "public"."monitoring_tool_submissions"
- ADD CONSTRAINT "monitoring_tool_submissions_pkey" PRIMARY KEY ("_id");
+REVOKE USAGE ON SCHEMA "public"
+FROM
+ PUBLIC;
-REVOKE USAGE ON SCHEMA "public" FROM PUBLIC;
GRANT USAGE ON SCHEMA "public" TO "postgres";
+
GRANT USAGE ON SCHEMA "public" TO "anon";
+
GRANT USAGE ON SCHEMA "public" TO "authenticated";
+
GRANT USAGE ON SCHEMA "public" TO "service_role";
GRANT ALL ON TABLE "public"."monitoring_tool_submissions" TO "anon";
+
GRANT ALL ON TABLE "public"."monitoring_tool_submissions" TO "authenticated";
+
GRANT ALL ON TABLE "public"."monitoring_tool_submissions" TO "service_role";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "service_role";
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "postgres";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "anon";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "authenticated";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON SEQUENCES TO "service_role";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "postgres";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "anon";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "authenticated";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "service_role";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "postgres";
+
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON FUNCTIONS TO "service_role";
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "postgres";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "anon";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "authenticated";
-ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "service_role";
+ALTER DEFAULT PRIVILEGES FOR ROLE "postgres" IN SCHEMA "public" GRANT ALL ON TABLES TO "service_role";
-RESET ALL;
+RESET ALL;
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231016165456_add_kobo_sync.sql b/apps/picsa-server/supabase/migrations/20231016165456_add_kobo_sync.sql
index 258cd3144..9f1e10123 100644
--- a/apps/picsa-server/supabase/migrations/20231016165456_add_kobo_sync.sql
+++ b/apps/picsa-server/supabase/migrations/20231016165456_add_kobo_sync.sql
@@ -1,52 +1,61 @@
-- kobo_sync table keeps track of all pending sync operations
CREATE TABLE IF NOT EXISTS "public"."kobo_sync" (
- "_id" "text",
- "_created" timestamp with time zone DEFAULT "now"() NOT NULL,
- "_modified" timestamp with time zone DEFAULT "now"() NOT NULL,
- "operation" "text" NOT NULL,
- "kobo_form_id" "text",
- "kobo_uuid" "text",
- "kobo_sync_time" timestamp with time zone,
- "kobo_sync_status" integer,
- "enketo_entry" "jsonb",
- "kobo_sync_required" boolean GENERATED ALWAYS AS ((kobo_sync_time IS NULL) OR (kobo_sync_time < _modified)) STORED,
- constraint kobo_sync_pkey primary key (_id)
+ "_id" "text",
+ "_created" timestamp with time zone DEFAULT "now"() NOT NULL,
+ "_modified" timestamp with time zone DEFAULT "now"() NOT NULL,
+ "operation" "text" NOT NULL,
+ "kobo_form_id" "text",
+ "kobo_uuid" "text",
+ "kobo_sync_time" timestamp with time zone,
+ "kobo_sync_status" integer,
+ "enketo_entry" "jsonb",
+ "kobo_sync_required" boolean GENERATED ALWAYS AS (
+ (kobo_sync_time IS NULL)
+ OR (kobo_sync_time < _modified)
+ ) STORED,
+ constraint kobo_sync_pkey primary key (_id)
);
-- Write to kobo_sync table when records changed
-- Assumes synced table includes _id reference column
-create function add_kobo_sync_entry() returns trigger as $$
-begin
- -- Handle upsert
- if (TG_OP = 'CREATE' OR TG_OP = 'UPDATE') then
- insert into
- kobo_sync(_id, operation, enketo_entry)
- values
- -- Hack - enketoEntry must be quoted as default to lowercase.
- -- Extract json xml child property, cast to text and then cast to xml data type
- -- TODO - would be cleaner if just storing xml in app instead of enketoEntry json
- -- although would need to be more careful with handling escape characters (can store as xml data type)
- (NEW._id, TG_OP, NEW."enketoEntry")
- ON CONFLICT (_id) DO UPDATE
- SET
- operation = 'UPDATE',
- enketo_entry = excluded.enketo_entry,
- _modified = excluded._modified;
- -- Handle delete
- -- TODO - want to avoid updating current row, prefer to delete current and create new 'DELETE' entry
- -- (double detection with update followed by delete)
- elsif (TG_OP = 'DELETE') then
- insert into
- kobo_sync(_id, operation)
- values
- (OLD._id, TG_OP)
- ON CONFLICT (_id) DO UPDATE
- SET
- operation = 'DELETE',
- _modified = excluded._modified;
- END IF;
- RETURN NULL;
+create function add_kobo_sync_entry() returns trigger as $$ begin -- Handle upsert
+if (
+ TG_OP = 'CREATE'
+ OR TG_OP = 'UPDATE'
+) then
+insert into
+ kobo_sync(_id, operation, enketo_entry)
+values
+ -- Hack - enketoEntry must be quoted as default to lowercase.
+ -- Extract json xml child property, cast to text and then cast to xml data type
+ -- TODO - would be cleaner if just storing xml in app instead of enketoEntry json
+ -- although would need to be more careful with handling escape characters (can store as xml data type)
+ (NEW._id, TG_OP, NEW."enketoEntry") ON CONFLICT (_id) DO
+UPDATE
+SET
+ operation = 'UPDATE',
+ enketo_entry = excluded.enketo_entry,
+ _modified = excluded._modified;
+
+-- Handle delete
+-- TODO - want to avoid updating current row, prefer to delete current and create new 'DELETE' entry
+-- (double detection with update followed by delete)
+elsif (TG_OP = 'DELETE') then
+insert into
+ kobo_sync(_id, operation)
+values
+ (OLD._id, TG_OP) ON CONFLICT (_id) DO
+UPDATE
+SET
+ operation = 'DELETE',
+ _modified = excluded._modified;
+
+END IF;
+
+RETURN NULL;
+
end;
+
$$ language plpgsql;
-- Trigger kobo-sync backend function when kobo_sync table updated
@@ -54,21 +63,19 @@ $$ language plpgsql;
-- https://github.com/supabase/pg_net/issues/79
-- https://github.com/orgs/supabase/discussions/9837
create trigger trigger_kobo_sync_function
- after insert or update on kobo_sync
- for each row
- -- TODO - handle production endpoint and auth token
- execute function "supabase_functions"."http_request"(
+after
+insert
+ or
+update
+ on kobo_sync for each row -- TODO - handle production endpoint and auth token
+ execute function "supabase_functions"."http_request"(
'http://172.17.0.1:54321/functions/v1/kobo-sync',
'POST',
'{"Content-Type":"application/json", "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU"}',
'{}',
'1000'
- );
-
-
-
+ );
-- Alt - could concat id with table `concat(TG_TABLE_NAME,'||',NEW._id`
-
-- Alt - could keep one entry per instance ID although could lead to data loss if next batch process
-- starts before previous finishes
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231016168059_kobo_sync_monitoring_tool_submissions.sql b/apps/picsa-server/supabase/migrations/20231016168059_kobo_sync_monitoring_tool_submissions.sql
index 662d43cb8..41158241e 100644
--- a/apps/picsa-server/supabase/migrations/20231016168059_kobo_sync_monitoring_tool_submissions.sql
+++ b/apps/picsa-server/supabase/migrations/20231016168059_kobo_sync_monitoring_tool_submissions.sql
@@ -1,5 +1,7 @@
-- Sync records from monitoring_tool_submissions table to kobo
create trigger monitoring_tool_kobo_sync
- after insert or update or delete on monitoring_tool_submissions
- for each row
- execute function add_kobo_sync_entry();
\ No newline at end of file
+after
+insert
+ or
+update
+ or delete on monitoring_tool_submissions for each row execute function add_kobo_sync_entry();
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231130163233_resources_storage_bucket.sql b/apps/picsa-server/supabase/migrations/20231130163233_resources_storage_bucket.sql
new file mode 100644
index 000000000..e1094ecab
--- /dev/null
+++ b/apps/picsa-server/supabase/migrations/20231130163233_resources_storage_bucket.sql
@@ -0,0 +1,27 @@
+-- Use Postgres to create a bucket.
+insert into
+ storage.buckets (id, name, public)
+values
+ ('resources', 'resources', true);
+
+-- Make resources fully accessisble to public
+-- NOTE - SELECT and UPDATE requires `WITH CHECK` whilst others require `USING`
+-- https://www.postgresql.org/docs/current/sql-createpolicy.html#:~:text=The%20USING%20expression%20determines%20which,stored%20back%20into%20the%20relation.
+-- TODO - try to limit some actions to authentciated (needs troubleshooting)
+-- https://supabase.com/docs/guides/storage/security/access-control
+CREATE POLICY "Storage resources public INSERT" ON storage.objects FOR
+INSERT
+ TO public WITH CHECK (bucket_id = 'resources');
+
+CREATE POLICY "Storage resources public SELECT" ON storage.objects FOR
+SELECT
+ TO public USING (bucket_id = 'resources');
+
+CREATE POLICY "Storage resources public UPDATE" ON storage.objects FOR
+UPDATE
+ TO public USING (bucket_id = 'resources');
+
+CREATE POLICY "Storage resources public DELETE" ON storage.objects FOR DELETE TO public USING (bucket_id = 'resources');
+
+-- CREATE POLICY "(debug) full access" ON "storage"."objects" AS PERMISSIVE
+-- FOR ALL TO authenticated WITH CHECK (bucket_id = 'resources')
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231130163716_auth_anon_user.sql b/apps/picsa-server/supabase/migrations/20231130163716_auth_anon_user.sql
new file mode 100644
index 000000000..438aa7995
--- /dev/null
+++ b/apps/picsa-server/supabase/migrations/20231130163716_auth_anon_user.sql
@@ -0,0 +1,43 @@
+-- https://github.com/orgs/supabase/discussions/5248
+INSERT INTO
+ auth.users (
+ id,
+ instance_id,
+ ROLE,
+ aud,
+ email,
+ raw_app_meta_data,
+ raw_user_meta_data,
+ is_super_admin,
+ encrypted_password,
+ created_at,
+ updated_at,
+ last_sign_in_at,
+ email_confirmed_at,
+ confirmation_sent_at,
+ confirmation_token,
+ recovery_token,
+ email_change_token_new,
+ email_change
+ )
+VALUES
+ (
+ gen_random_uuid(),
+ '00000000-0000-0000-0000-000000000000',
+ 'authenticated',
+ 'authenticated',
+ 'anonymous_user@picsa.app',
+ '{"provider":"email","providers":["email"]}',
+ '{}',
+ FALSE,
+ crypt('anonymous_user@picsa.app', gen_salt('bf')),
+ NOW(),
+ NOW(),
+ NOW(),
+ NOW(),
+ NOW(),
+ '',
+ '',
+ '',
+ ''
+ );
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231204104530_resources_table_create.sql b/apps/picsa-server/supabase/migrations/20231204104530_resources_table_create.sql
new file mode 100644
index 000000000..a535a9cc6
--- /dev/null
+++ b/apps/picsa-server/supabase/migrations/20231204104530_resources_table_create.sql
@@ -0,0 +1,14 @@
+CREATE TABLE IF NOT EXISTS "public"."resources" (
+ "id" text not null default gen_random_uuid (),
+ "created_at" timestamp with time zone not null default now(),
+ "modified_at" timestamp with time zone not null default now(),
+ "type" text not null,
+ "description" text not null default ''::text,
+ "storage_file" uuid null,
+ "storage_cover" uuid null,
+ "title" text null,
+ constraint resources_pkey primary key (id),
+ constraint resources_storage_cover_fkey foreign key (storage_cover) references storage.objects (id) on update cascade on delete set null,
+ constraint resources_storage_file_fkey foreign key (storage_file) references storage.objects (id) on update cascade on delete set null);
+
+CREATE POLICY "Resources authenticated public access" ON "public"."resources" AS PERMISSIVE FOR ALL TO PUBLIC USING (true)
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/migrations/20231204124638_storage_objects_view.sql b/apps/picsa-server/supabase/migrations/20231204124638_storage_objects_view.sql
new file mode 100644
index 000000000..d3e005efe
--- /dev/null
+++ b/apps/picsa-server/supabase/migrations/20231204124638_storage_objects_view.sql
@@ -0,0 +1,15 @@
+-- List resource entries from private storage.objects table
+CREATE VIEW storage_objects AS
+SELECT
+ *
+FROM
+ storage.objects;
+
+-- create or replace function storage_objects_list()
+-- returns setof Record language plpgsql security definer
+-- set search_path = public as $$
+-- begin
+-- return query
+-- select * from storage.objects;
+-- end;
+-- $$
\ No newline at end of file
diff --git a/apps/picsa-server/supabase/types/index.ts b/apps/picsa-server/supabase/types/index.ts
index 7da0fb0f8..581e0b7c7 100644
--- a/apps/picsa-server/supabase/types/index.ts
+++ b/apps/picsa-server/supabase/types/index.ts
@@ -109,9 +109,161 @@ export interface Database {
}
Relationships: []
}
+ resources: {
+ Row: {
+ created_at: string
+ description: string | null
+ id: string
+ modified_at: string
+ storage_cover: string | null
+ storage_file: string | null
+ type: string
+ }
+ Insert: {
+ created_at?: string
+ description?: string | null
+ id?: string
+ modified_at?: string
+ storage_cover?: string | null
+ storage_file?: string | null
+ type: string
+ }
+ Update: {
+ created_at?: string
+ description?: string | null
+ id?: string
+ modified_at?: string
+ storage_cover?: string | null
+ storage_file?: string | null
+ type?: string
+ }
+ Relationships: [
+ {
+ foreignKeyName: "resources_storage_cover_fkey"
+ columns: ["storage_cover"]
+ referencedRelation: "objects"
+ referencedColumns: ["id"]
+ },
+ {
+ foreignKeyName: "resources_storage_cover_fkey"
+ columns: ["storage_cover"]
+ referencedRelation: "storage_objects"
+ referencedColumns: ["id"]
+ },
+ {
+ foreignKeyName: "resources_storage_file_fkey"
+ columns: ["storage_file"]
+ referencedRelation: "objects"
+ referencedColumns: ["id"]
+ },
+ {
+ foreignKeyName: "resources_storage_file_fkey"
+ columns: ["storage_file"]
+ referencedRelation: "storage_objects"
+ referencedColumns: ["id"]
+ }
+ ]
+ }
+ resources_child: {
+ Row: {
+ country_code: string | null
+ created_at: string
+ id: number
+ language_code: string | null
+ parent: string
+ storage_file: string
+ tag: string | null
+ }
+ Insert: {
+ country_code?: string | null
+ created_at?: string
+ id?: number
+ language_code?: string | null
+ parent: string
+ storage_file: string
+ tag?: string | null
+ }
+ Update: {
+ country_code?: string | null
+ created_at?: string
+ id?: number
+ language_code?: string | null
+ parent?: string
+ storage_file?: string
+ tag?: string | null
+ }
+ Relationships: [
+ {
+ foreignKeyName: "resources_child_parent_fkey"
+ columns: ["parent"]
+ referencedRelation: "resources"
+ referencedColumns: ["id"]
+ },
+ {
+ foreignKeyName: "resources_child_storage_file_fkey"
+ columns: ["storage_file"]
+ referencedRelation: "objects"
+ referencedColumns: ["id"]
+ },
+ {
+ foreignKeyName: "resources_child_storage_file_fkey"
+ columns: ["storage_file"]
+ referencedRelation: "storage_objects"
+ referencedColumns: ["id"]
+ }
+ ]
+ }
}
Views: {
- [_ in never]: never
+ storage_objects: {
+ Row: {
+ bucket_id: string | null
+ created_at: string | null
+ id: string | null
+ last_accessed_at: string | null
+ metadata: Json | null
+ name: string | null
+ owner: string | null
+ owner_id: string | null
+ path_tokens: string[] | null
+ updated_at: string | null
+ version: string | null
+ }
+ Insert: {
+ bucket_id?: string | null
+ created_at?: string | null
+ id?: string | null
+ last_accessed_at?: string | null
+ metadata?: Json | null
+ name?: string | null
+ owner?: string | null
+ owner_id?: string | null
+ path_tokens?: string[] | null
+ updated_at?: string | null
+ version?: string | null
+ }
+ Update: {
+ bucket_id?: string | null
+ created_at?: string | null
+ id?: string | null
+ last_accessed_at?: string | null
+ metadata?: Json | null
+ name?: string | null
+ owner?: string | null
+ owner_id?: string | null
+ path_tokens?: string[] | null
+ updated_at?: string | null
+ version?: string | null
+ }
+ Relationships: [
+ {
+ foreignKeyName: "objects_bucketId_fkey"
+ columns: ["bucket_id"]
+ referencedRelation: "buckets"
+ referencedColumns: ["id"]
+ }
+ ]
+ }
}
Functions: {
[_ in never]: never
@@ -134,6 +286,7 @@ export interface Database {
id: string
name: string
owner: string | null
+ owner_id: string | null
public: boolean | null
updated_at: string | null
}
@@ -145,6 +298,7 @@ export interface Database {
id: string
name: string
owner?: string | null
+ owner_id?: string | null
public?: boolean | null
updated_at?: string | null
}
@@ -156,17 +310,11 @@ export interface Database {
id?: string
name?: string
owner?: string | null
+ owner_id?: string | null
public?: boolean | null
updated_at?: string | null
}
- Relationships: [
- {
- foreignKeyName: "buckets_owner_fkey"
- columns: ["owner"]
- referencedRelation: "users"
- referencedColumns: ["id"]
- }
- ]
+ Relationships: []
}
migrations: {
Row: {
@@ -198,6 +346,7 @@ export interface Database {
metadata: Json | null
name: string | null
owner: string | null
+ owner_id: string | null
path_tokens: string[] | null
updated_at: string | null
version: string | null
@@ -210,6 +359,7 @@ export interface Database {
metadata?: Json | null
name?: string | null
owner?: string | null
+ owner_id?: string | null
path_tokens?: string[] | null
updated_at?: string | null
version?: string | null
@@ -222,6 +372,7 @@ export interface Database {
metadata?: Json | null
name?: string | null
owner?: string | null
+ owner_id?: string | null
path_tokens?: string[] | null
updated_at?: string | null
version?: string | null
diff --git a/apps/picsa-tools/resources-tool/server/.gitignore b/apps/picsa-tools/resources-tool/server/.gitignore
index 49e5796a3..93f607ab6 100644
--- a/apps/picsa-tools/resources-tool/server/.gitignore
+++ b/apps/picsa-tools/resources-tool/server/.gitignore
@@ -1,3 +1,4 @@
*.*
+resources
!.gitignore
!README.md
\ No newline at end of file
diff --git a/apps/picsa-tools/resources-tool/src/app/data/index.ts b/apps/picsa-tools/resources-tool/src/app/data/index.ts
index d191138c7..b67e475d7 100644
--- a/apps/picsa-tools/resources-tool/src/app/data/index.ts
+++ b/apps/picsa-tools/resources-tool/src/app/data/index.ts
@@ -11,7 +11,6 @@ const byId: Record = {
...WEATHER,
...PICSA_RESOURCES,
};
-console.log({ PICSA_RESOURCES });
const typeExports: {
collection: schemas.IResourceCollection[];
diff --git a/libs/environments/src/.gitignore b/libs/environments/src/.gitignore
new file mode 100644
index 000000000..4ebf008cd
--- /dev/null
+++ b/libs/environments/src/.gitignore
@@ -0,0 +1 @@
+supabase/config.json
\ No newline at end of file
diff --git a/libs/environments/src/environment.prod.ts b/libs/environments/src/environment.prod.ts
index 7c7eecb14..9bc6bb12d 100644
--- a/libs/environments/src/environment.prod.ts
+++ b/libs/environments/src/environment.prod.ts
@@ -11,10 +11,14 @@ const productionEnvironment: IEnvironment = {
defaultConfiguration: 'global',
// TODO - load from CI
supabase: {
- apiUrl: 'https://earfrmpodubnbuhclccx.supabase.co',
appUser: { email: 'anonymous_user@picsa.app' },
- anonKey:
- 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImVhcmZybXBvZHVibmJ1aGNsY2N4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODQ3NTM2ODIsImV4cCI6MjAwMDMyOTY4Mn0.bNZcTIB-LqzcubgEy0_azbw7chMtCp-w4Ss9plTeuKY',
+ load: async () => {
+ return {
+ anonKey:
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImVhcmZybXBvZHVibmJ1aGNsY2N4Iiwicm9sZSI6ImFub24iLCJpYXQiOjE2ODQ3NTM2ODIsImV4cCI6MjAwMDMyOTY4Mn0.bNZcTIB-LqzcubgEy0_azbw7chMtCp-w4Ss9plTeuKY',
+ apiUrl: 'https://earfrmpodubnbuhclccx.supabase.co',
+ };
+ },
},
};
diff --git a/libs/environments/src/environment.ts b/libs/environments/src/environment.ts
index e35b6528a..c920890c8 100644
--- a/libs/environments/src/environment.ts
+++ b/libs/environments/src/environment.ts
@@ -10,10 +10,36 @@ const ENVIRONMENT: IEnvironment = {
production: false,
supabase: {
...PRODUCTION_ENVIRONMENT.supabase,
- apiUrl: 'http://localhost:54321',
- anonKey:
- 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0',
+ load: loadSupabaseDevEnvironment,
},
};
export default ENVIRONMENT;
+
+/**
+ * Asynchronously load supabase dev environment from local config file
+ * This enables any developers to provide their own local anonKey by creating a
+ * `config.json` file in the local `supabase` environment folder
+ *
+ * https://stackoverflow.com/a/47956054/5693245
+ * */
+async function loadSupabaseDevEnvironment(): Promise<{ anonKey: string; apiUrl: string }> {
+ const defaultConfig = {
+ anonKey:
+ 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0',
+ apiUrl: 'http://localhost:54321',
+ };
+ return new Promise((resolve) => {
+ try {
+ // Use a variable filename so that compiler bundles all files in folder
+ // regardless of whether specific config file exists or not
+ const filename = 'config.json';
+ import(`./supabase/${filename}`).then((res) => {
+ resolve({ ...defaultConfig, ...res.default });
+ });
+ } catch (error) {
+ console.warn('[Supabase] Dev config not provided\nlibs/environments/src/supabase/config.json');
+ resolve(defaultConfig);
+ }
+ });
+}
diff --git a/libs/environments/src/supabase/config.example.json b/libs/environments/src/supabase/config.example.json
new file mode 100644
index 000000000..63fee1d3c
--- /dev/null
+++ b/libs/environments/src/supabase/config.example.json
@@ -0,0 +1,3 @@
+{
+ "anonKey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.my_supabase_anon_key"
+}
diff --git a/libs/models/src/models.ts b/libs/models/src/models.ts
index fe7ce1909..ec1830776 100644
--- a/libs/models/src/models.ts
+++ b/libs/models/src/models.ts
@@ -34,11 +34,13 @@ export interface IFirebaseConfig {
}
export interface ISupabaseConfig {
- apiUrl: string;
/** Default credentials used by app to login as anonymous user */
appUser: { email: string; password?: string };
- /** DB anon key (TODO - is required?) */
- anonKey: string;
+ /** Async function used to load credentials which may be stored in local file */
+ load: () => Promise<{
+ anonKey: string;
+ apiUrl: string;
+ }>;
}
// combined settings
diff --git a/libs/shared/src/modules/forms/errorStateMatcher.ts b/libs/shared/src/modules/forms/errorStateMatcher.ts
new file mode 100644
index 000000000..2bc94ca06
--- /dev/null
+++ b/libs/shared/src/modules/forms/errorStateMatcher.ts
@@ -0,0 +1,13 @@
+import { FormControl, FormGroupDirective, NgForm } from '@angular/forms';
+import { ErrorStateMatcher } from '@angular/material/core';
+
+/**
+ * Implement custom error handler to only display if control is dirty, touched, or submitted.
+ * https://material.angular.io/components/input/overview#changing-when-error-messages-are-shown
+ * */
+export class showErrorAfterInteraction implements ErrorStateMatcher {
+ isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean {
+ const isSubmitted = form && form.submitted;
+ return !!(control && control.invalid && (control.dirty || control.touched || isSubmitted));
+ }
+}
diff --git a/libs/shared/src/modules/forms/index.ts b/libs/shared/src/modules/forms/index.ts
new file mode 100644
index 000000000..54a549e2c
--- /dev/null
+++ b/libs/shared/src/modules/forms/index.ts
@@ -0,0 +1,3 @@
+export * from './components';
+export * from './forms.module';
+export * from './validators';
diff --git a/libs/shared/src/modules/forms/validators/index.ts b/libs/shared/src/modules/forms/validators/index.ts
new file mode 100644
index 000000000..0bd9608b0
--- /dev/null
+++ b/libs/shared/src/modules/forms/validators/index.ts
@@ -0,0 +1,7 @@
+import isUrl from './isUrl';
+import passwordMatch from './passwordMatch';
+
+export const PICSAFormValidators = {
+ isUrl,
+ passwordMatch,
+};
diff --git a/libs/shared/src/modules/forms/validators/isUrl.ts b/libs/shared/src/modules/forms/validators/isUrl.ts
new file mode 100644
index 000000000..79fa27433
--- /dev/null
+++ b/libs/shared/src/modules/forms/validators/isUrl.ts
@@ -0,0 +1,7 @@
+import { Validators } from '@angular/forms';
+
+/**
+ * Custom form validator to match url regex pattern
+ * https://www.positronx.io/angular-url-validation-with-reactive-forms-tutorial/
+ */
+export default Validators.pattern('(https?://)?([\\da-z.-]+)\\.([a-z.]{2,6})[/\\w .-]*/?');
diff --git a/libs/shared/src/modules/forms/validators/passwordMatch.ts b/libs/shared/src/modules/forms/validators/passwordMatch.ts
new file mode 100644
index 000000000..8c1f899dd
--- /dev/null
+++ b/libs/shared/src/modules/forms/validators/passwordMatch.ts
@@ -0,0 +1,15 @@
+import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';
+
+/**
+ * Custom form validator to ensure passwords match. Adapted from
+ * https://stackoverflow.com/a/51606362/5693245
+ */
+const passwordMatch: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {
+ if (!control) return null;
+ const form = control.parent;
+ if (!form) return null;
+ const pass = form.get('password')?.value;
+ return pass === control.value ? null : { notSame: true };
+};
+
+export default passwordMatch;
diff --git a/libs/shared/src/services/core/supabase/components/index.ts b/libs/shared/src/services/core/supabase/components/index.ts
new file mode 100644
index 000000000..8ad6b3ecd
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/index.ts
@@ -0,0 +1,2 @@
+export * from './storage-file-picker/storage-file-picker.component';
+export * from './upload/supabase-upload.component';
diff --git a/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.html b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.html
new file mode 100644
index 000000000..de68e0fce
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.html
@@ -0,0 +1,24 @@
+
+ @for (entry of fileEntries; track entry.id) {
+ {{ entry.name }}
+ }
+
+
+ @if(previewUrl){
+
+
+ }
+
+
+
+ Cancel
+
+ Save
+
+
diff --git a/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.scss b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.scss
new file mode 100644
index 000000000..ae33ec169
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.scss
@@ -0,0 +1,15 @@
+.preview-image {
+ height: 200px;
+ width: 200px;
+ border: 1px solid var(--color-light);
+ img {
+ object-fit: contain;
+ width: 100%;
+ height: 100%;
+ }
+}
+mat-selection-list {
+ max-height: 50vh;
+ overflow: auto;
+ width: 600px;
+}
diff --git a/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.spec.ts b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.spec.ts
new file mode 100644
index 000000000..85ff16cbe
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { StorageFilePickerComponent } from './storage-file-picker.component';
+
+describe('StorageFilePickerComponent', () => {
+ let component: StorageFilePickerComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [StorageFilePickerComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(StorageFilePickerComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.ts b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.ts
new file mode 100644
index 000000000..e0dfd1712
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/storage-file-picker/storage-file-picker.component.ts
@@ -0,0 +1,86 @@
+import { CommonModule } from '@angular/common';
+import { Component, Directive, EventEmitter, HostListener, Input, Output } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { MatButtonModule } from '@angular/material/button';
+import { MatDialog } from '@angular/material/dialog';
+import { MatListModule } from '@angular/material/list';
+
+import { IStorageEntry } from '../../services/supabase-storage.service';
+import { SupabaseService } from '../../supabase.service';
+
+/**
+ * Directive that can be added to any component to launch storage file picker component
+ * ```
+ * Pick File
+ * ```
+ */
+@Directive({
+ selector: '[supabaseStoragePicker]',
+ standalone: true,
+})
+export class SupabaseStoragePickerDirective {
+ @Input() storageBucketName = 'default';
+ @Input() storageFolderPath?: string;
+ @Output() storageFileSelected = new EventEmitter();
+
+ @HostListener('click') pickerOpen() {
+ const dialogRef = this.dialog.open(SupabaseStorageFilePickerComponent, {});
+ const { componentInstance } = dialogRef;
+ componentInstance.storageBucketName = this.storageBucketName;
+ componentInstance.storageFolderPath = this.storageFolderPath;
+ componentInstance.fileSelected.subscribe((entry) => {
+ dialogRef.close();
+ this.storageFileSelected.next(entry);
+ });
+ }
+
+ constructor(private dialog: MatDialog) {}
+}
+
+@Component({
+ selector: 'picsa-supabase-storage-file-picker',
+ standalone: true,
+ imports: [CommonModule, FormsModule, MatButtonModule, MatListModule],
+ templateUrl: './storage-file-picker.component.html',
+ styleUrls: ['./storage-file-picker.component.scss'],
+})
+export class SupabaseStorageFilePickerComponent {
+ @Output() fileSelected = new EventEmitter();
+ @Input() storageBucketName = 'default';
+ @Input() storageFolderPath?: string;
+
+ public fileEntries: IStorageEntry[] = [];
+
+ public selected: IStorageEntry[] = [];
+
+ public previewUrl: string;
+
+ constructor(private supabaseService: SupabaseService) {}
+
+ private get storage() {
+ return this.supabaseService.storage;
+ }
+
+ async ngOnInit() {
+ await this.supabaseService.ready();
+ const entries = await this.storage.list(this.storageBucketName, this.storageFolderPath);
+ this.fileEntries = entries
+ // filter out metadata files which have filename starting with `.`
+ .filter(({ name }) => !name?.split('/').pop()?.startsWith('.'))
+ .sort((a, b) => {
+ if (!b.name) return 1;
+ if (!a.name) return -1;
+ return a.name > b.name ? 1 : -1;
+ });
+ }
+ public compareFn(a: IStorageEntry, b: IStorageEntry) {
+ return a.id === b.id;
+ }
+
+ public handleFileSelect() {
+ const [entry] = this.selected;
+ if (this.selected) {
+ this.previewUrl = this.storage.getPublicLink(this.storageBucketName, entry.name as string);
+ }
+ }
+}
diff --git a/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.html b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.html
new file mode 100644
index 000000000..509ac9363
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.html
@@ -0,0 +1,25 @@
+
+
+@if(uppy){
+
+}
+
+
+@if(storageFolderPathEditable){
+
+ Storage Folder
+
+ @if (storageFolderPath) {
+
+ close
+
+ }
+
+}
+
+
+@if(!this.autoUpload){
+
+ uploadUpload
+
+}
diff --git a/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.scss b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.scss
new file mode 100644
index 000000000..5d4e87f30
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.scss
@@ -0,0 +1,3 @@
+:host {
+ display: block;
+}
diff --git a/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.spec.ts b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.spec.ts
new file mode 100644
index 000000000..e4925cf7c
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.spec.ts
@@ -0,0 +1,21 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { SupabaseUploadComponent } from './supabase-upload.component';
+
+describe('SupabaseUploadComponent', () => {
+ let component: SupabaseUploadComponent;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [SupabaseUploadComponent],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(SupabaseUploadComponent);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
diff --git a/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.ts b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.ts
new file mode 100644
index 000000000..25928c919
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/components/upload/supabase-upload.component.ts
@@ -0,0 +1,220 @@
+import '@uppy/core/dist/style.min.css';
+import '@uppy/dashboard/dist/style.min.css';
+
+import { CommonModule } from '@angular/common';
+import { Component, EventEmitter, Input, Output } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { MatButtonModule } from '@angular/material/button';
+import { MatFormFieldModule } from '@angular/material/form-field';
+import { MatIconModule } from '@angular/material/icon';
+import { MatInputModule } from '@angular/material/input';
+import { ENVIRONMENT } from '@picsa/environments';
+import { UppyAngularDashboardModule } from '@uppy/angular';
+import Uppy, { InternalMetadata, UploadResult, UppyFile, UppyOptions } from '@uppy/core';
+import { DashboardOptions } from '@uppy/dashboard';
+import Tus from '@uppy/tus';
+
+import { PicsaNotificationService } from '../../../notification.service';
+import { IStorageEntrySDK, SupabaseStorageService } from '../../services/supabase-storage.service';
+import { SupabaseService } from '../../supabase.service';
+
+/** Metadata populated to uploads so that supabase can process correctly */
+interface IUploadMeta extends InternalMetadata {
+ bucketName: string;
+ cacheControl: number;
+ contentType?: string;
+ objectName: string;
+}
+
+/** Storage entry data returned following upload */
+export interface IUploadResult {
+ data: File | Blob;
+ entry: IStorageEntrySDK;
+}
+
+/**
+ * Supabase storage uploader built on top of Uppy dashboard, with support for resumable uploads
+ *
+ * https://supabase.com/docs/guides/storage/uploads/resumable-uploads
+ * https://uppy.io/docs/tus/
+ * https://tus.io/
+ *
+ */
+@Component({
+ selector: 'picsa-supabase-upload',
+ standalone: true,
+ imports: [
+ CommonModule,
+ UppyAngularDashboardModule,
+ MatIconModule,
+ MatButtonModule,
+ MatFormFieldModule,
+ MatInputModule,
+ FormsModule,
+ ],
+ templateUrl: './supabase-upload.component.html',
+ styleUrls: ['./supabase-upload.component.scss'],
+})
+export class SupabaseUploadComponent {
+ /** Default height of file dropper */
+ @Input() fileDropHeight = 300;
+
+ /** Name of storage bucket for upload. Must already exist with required access permissions */
+ @Input() storageBucketName = 'default';
+
+ /** Nested folder path within storage bucket */
+ @Input() storageFolderPath = '';
+
+ /** Specify if storage folder path can be manually edited */
+ @Input() storageFolderPathEditable = false;
+
+ @Input() autoUpload = false;
+
+ @Input() set disabled(disabled: boolean) {
+ // Update options through plugin interface for better change detection
+ this.dashboardOptions = { ...this.dashboardOptions, disabled };
+ }
+ /**
+ * Specify input file type. Must correspond to unique file type specifiers
+ * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/file#unique_file_type_specifiers
+ */
+ @Input() set fileTypes(filetypes: string[]) {
+ this.setFileTypeRestrictions(filetypes);
+ }
+
+ @Output() uploadComplete = new EventEmitter();
+
+ public uppy: Uppy;
+
+ public dashboardOptions: DashboardOptions = {
+ proudlyDisplayPoweredByUppy: false,
+ hideUploadButton: true,
+ };
+
+ private uppyOptions: UppyOptions = {
+ debug: false,
+ autoProceed: false,
+ restrictions: { maxNumberOfFiles: 1 },
+ };
+
+ private storageService: SupabaseStorageService;
+
+ constructor(private supabaseService: SupabaseService, private notificationService: PicsaNotificationService) {}
+
+ async ngOnInit() {
+ await this.supabaseService.ready();
+ this.storageService = this.supabaseService.storage;
+ this.initUppy();
+ }
+
+ private async initUppy() {
+ // Create new Uppy instance, mapping configurable props
+ this.uppy = new Uppy(this.uppyOptions);
+ this.dashboardOptions.height = this.fileDropHeight;
+ // Create custom upload to support upload to supabase
+ await this.registerSupabaseUppyUploader();
+ }
+
+ public async startUpload() {
+ // remove duplicates
+ for (const file of this.uppy.getFiles()) {
+ const objectName = this.storageFolderPath ? `${this.storageFolderPath}/${file.name}` : file.name;
+ const meta: IUploadMeta = {
+ ...file.meta,
+ contentType: file.type,
+ bucketName: this.storageBucketName,
+ objectName,
+ cacheControl: 3600,
+ };
+ this.uppy.setFileMeta(file.id, meta as Record);
+ await this.checkDuplicateUpload(file);
+ }
+ const res = await this.uppy.upload();
+ await this.handleUploadComplete(res);
+ this.storageFolderPath = '';
+ }
+
+ private async handleUploadComplete(res: UploadResult) {
+ const uploads = await Promise.all(
+ res.successful.map(async (res) => {
+ const meta: IUploadMeta = res.meta as any;
+ // HACK - manually retrieve db data associated with file. In future this may be handled automatically
+ // https://github.com/orgs/supabase/discussions/4303
+ const entry = await this.storageService.getFile({
+ bucketId: meta.bucketName,
+ filename: meta.name,
+ folderPath: meta.objectName.split('/').slice(0, -1).join('/'),
+ });
+ if (!entry) {
+ console.warn('Storage entry not found', meta);
+ throw new Error(`Storage entry not found`);
+ }
+ return { data: res.data, entry };
+ })
+ );
+ this.uploadComplete.next(uploads);
+ }
+
+ private async registerSupabaseUppyUploader() {
+ const { anonKey, apiUrl } = await ENVIRONMENT.supabase.load();
+ this.uppy.use(Tus, {
+ endpoint: `${apiUrl}/storage/v1/upload/resumable`,
+ headers: {
+ authorization: `Bearer ${anonKey}`,
+ apikey: anonKey,
+ },
+ // Retry upload after delay if not working immediately
+ retryDelays: [0, 2000, 5000],
+ uploadDataDuringCreation: true,
+ removeFingerprintOnSuccess: true,
+
+ chunkSize: 6 * 1024 * 1024,
+ allowedMetaFields: ['bucketName', 'objectName', 'contentType', 'cacheControl'],
+ onShouldRetry: (err) => {
+ if (err?.message.includes('The resource already exists')) {
+ // TODO - notify user
+ return false;
+ }
+ return true;
+ },
+ });
+ // Use file-added hook to update metadata used by supabase for managing file metadata
+ // NOTE - additional hooks can also be added to observe upload progress, errors etc.
+ this.uppy.on('file-added', (file) => this.handleFileAdded());
+ }
+ private handleFileAdded() {
+ if (this.autoUpload) {
+ this.startUpload();
+ }
+ }
+
+ private setFileTypeRestrictions(types: string[]) {
+ // Specify options loaded on init
+ this.uppyOptions = {
+ ...this.uppyOptions,
+ restrictions: {
+ ...this.uppyOptions.restrictions,
+ allowedFileTypes: types,
+ },
+ };
+ // Update options if uppy already initialised
+ if (this.uppy) {
+ this.uppy.setOptions(this.uppyOptions);
+ }
+ }
+
+ private async checkDuplicateUpload(file: UppyFile) {
+ const storageFile = await this.storageService.getFile({
+ bucketId: 'resources',
+ filename: file.name,
+ folderPath: this.storageFolderPath || '',
+ });
+ if (storageFile) {
+ this.notificationService.showUserNotification({
+ matIcon: 'error',
+ message: `Resource with name ${file.name} already exists`,
+ });
+ this.uppy.removeFile(file.id);
+ }
+ }
+}
diff --git a/libs/shared/src/services/core/supabase/dialogs/sign-in.dialog.ts b/libs/shared/src/services/core/supabase/dialogs/sign-in.dialog.ts
index 8e971e5b2..d758136a1 100644
--- a/libs/shared/src/services/core/supabase/dialogs/sign-in.dialog.ts
+++ b/libs/shared/src/services/core/supabase/dialogs/sign-in.dialog.ts
@@ -1,14 +1,11 @@
import { Component, Inject } from '@angular/core';
import {
- AbstractControl,
FormControl,
FormGroup,
FormGroupDirective,
FormsModule,
NgForm,
ReactiveFormsModule,
- ValidationErrors,
- ValidatorFn,
Validators,
} from '@angular/forms';
import { MatButtonModule } from '@angular/material/button';
@@ -17,11 +14,12 @@ import { MAT_DIALOG_DATA, MatDialogModule, MatDialogRef } from '@angular/materia
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatInputModule } from '@angular/material/input';
+import { PICSAFormValidators } from '../../../../modules/forms/validators';
import { PicsaNotificationService } from '../../notification.service';
-import type { SupabaseService } from '../supabase.service';
+import type { SupabaseAuthService } from '../services/supabase-auth.service';
export interface ISignInDialogData {
- service: SupabaseService;
+ authService: SupabaseAuthService;
}
/**
@@ -35,18 +33,6 @@ export class showErrorAfterInteraction implements ErrorStateMatcher {
}
}
-/**
- * Custom form validator to ensure passwords match. Adapted from
- * https://stackoverflow.com/a/51606362/5693245
- */
-const validatePasswordMatch: ValidatorFn = (control: AbstractControl): ValidationErrors | null => {
- if (!control) return null;
- const form = control.parent;
- if (!form) return null;
- const pass = form.get('password')?.value;
- return pass === control.value ? null : { notSame: true };
-};
-
@Component({
selector: 'picsa-supabase-sign-in-dialog',
standalone: true,
@@ -136,7 +122,7 @@ export class SupabaseSignInDialogComponent {
errorMatcher = new showErrorAfterInteraction();
- private service: SupabaseService;
+ private authService: SupabaseAuthService;
public form = new FormGroup<{ email: FormControl; password: FormControl; passwordConfirm?: FormControl }>({
email: new FormControl('', [Validators.required, Validators.email]),
@@ -148,19 +134,22 @@ export class SupabaseSignInDialogComponent {
@Inject(MAT_DIALOG_DATA) data: ISignInDialogData,
private notificationService: PicsaNotificationService
) {
- this.service = data.service;
+ this.authService = data.authService;
}
public enableRegisterMode() {
this.template = 'register';
this.title = 'Register';
- this.form.addControl('passwordConfirm', new FormControl('', [Validators.required, validatePasswordMatch]));
+ this.form.addControl(
+ 'passwordConfirm',
+ new FormControl('', [Validators.required, PICSAFormValidators.passwordMatch])
+ );
}
public async handleSignIn() {
this.form.disable();
const { email, password } = this.form.value;
- const { data, error } = await this.service.signInUser(email, password);
+ const { data, error } = await this.authService.signInUser(email, password);
console.log({ data, error });
if (error) {
console.error(error);
@@ -173,7 +162,7 @@ export class SupabaseSignInDialogComponent {
public async handleRegister() {
this.form.disable();
const { email, password } = this.form.value;
- const { error } = await this.service.signUpUser(email, password);
+ const { error } = await this.authService.signUpUser(email, password);
if (error) {
console.error(error);
this.notificationService.showUserNotification({ message: error.message, matIcon: 'error' });
diff --git a/libs/shared/src/services/core/supabase/index.ts b/libs/shared/src/services/core/supabase/index.ts
index 87efe61cb..bd38b603f 100644
--- a/libs/shared/src/services/core/supabase/index.ts
+++ b/libs/shared/src/services/core/supabase/index.ts
@@ -1 +1,2 @@
+export * from './components';
export * from './supabase.service';
diff --git a/libs/shared/src/services/core/supabase/services/supabase-auth.service.ts b/libs/shared/src/services/core/supabase/services/supabase-auth.service.ts
new file mode 100644
index 000000000..133bc3d83
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/services/supabase-auth.service.ts
@@ -0,0 +1,116 @@
+import { Injectable, signal } from '@angular/core';
+import { MatDialog } from '@angular/material/dialog';
+import { ENVIRONMENT } from '@picsa/environments';
+import { AuthError, SupabaseClient, User } from '@supabase/supabase-js';
+
+import { PicsaAsyncService } from '../../../asyncService.service';
+import { PicsaNotificationService } from '../../notification.service';
+import { SupabaseSignInDialogComponent } from '../dialogs/sign-in.dialog';
+
+@Injectable({ providedIn: 'root' })
+export class SupabaseAuthService extends PicsaAsyncService {
+ /** Authenticated user */
+ public authUser = signal(undefined);
+
+ private supabaseClient: SupabaseClient;
+
+ private get auth() {
+ if (!this.supabaseClient) {
+ throw new Error('Supabase client not registered in auth');
+ }
+ return this.supabaseClient.auth;
+ }
+
+ constructor(private dialog: MatDialog, private notificationService: PicsaNotificationService) {
+ super();
+ }
+
+ public override async init(): Promise {
+ this.subscribeToAuthChanges();
+ }
+
+ public registerSupabaseClient(client: SupabaseClient) {
+ this.supabaseClient = client;
+ }
+
+ public async signInPrompt() {
+ this.dialog.open(SupabaseSignInDialogComponent, { data: { service: this } });
+ }
+
+ public async signInUser(email: string, password: string) {
+ return this.auth.signInWithPassword({ email, password });
+ }
+
+ public async signUpUser(email: string, password: string) {
+ return this.auth.signUp({ email, password });
+ }
+
+ public async signOut() {
+ return this.auth.signOut();
+ }
+
+ /** Attempt to sign-in as persisted user, with fallback to anonymous */
+ public async signInDefaultUser() {
+ const { error } = await this.auth.getUser();
+ if (error) {
+ console.log('User session not found, signing in anonymous user');
+ return this.signInAnonymousUser();
+ }
+ // return user as updated by auth change subscriber
+ return this.authUser;
+ }
+
+ /** Create variants of error messages received in supabase for notification purposes */
+ public getUserErrorMessage(error: AuthError): { message: string; matIcon: string; devMessage?: string } {
+ const { name, message } = error;
+ const mapping = {
+ AuthRetryableFetchError: {
+ message: 'Server connection Failed',
+ matIcon: 'cloud_off',
+ devMessage: 'Ensure the server is running locally',
+ },
+ 'Invalid login credentials': {
+ message: 'User does not exist or password incorrect',
+ matIcon: 'person_alert',
+ },
+ 'invalid claim: missing sub claim': {
+ message: 'No user signed in, unable to load',
+ },
+ };
+ return mapping[message] || { message: `${name} - ${message}`, matIcon: 'error' };
+ }
+
+ public logUserErrorMessage(error: AuthError) {
+ const { message, matIcon, devMessage } = this.getUserErrorMessage(error);
+ this.notificationService.showUserNotification({ matIcon, message });
+ if (devMessage) {
+ console.error('[Developer Note]\n' + devMessage);
+ }
+ }
+
+ /** User shared credential to sign in as an anonymous user for supabase */
+ private async signInAnonymousUser() {
+ const { email, password } = ENVIRONMENT.supabase.appUser;
+ const { error } = await this.auth.signInWithPassword({ email, password: password || email });
+ // TODO - could consider function to generate app user base on id which could also use RLS for sync
+ if (error) {
+ console.error(error);
+ this.logUserErrorMessage(error);
+ if (error.message === 'Invalid login credentials') {
+ const devMessage = `Ensure user with email: [${email}] created in supabase auth.\nSee guidance in server Readme`;
+ console.error('[Developer Note]\n' + devMessage);
+ }
+ }
+ // return user as updated by auth change subscriber
+ return this.authUser;
+ }
+
+ private subscribeToAuthChanges() {
+ this.auth.onAuthStateChange((_event, session) => {
+ const user = session?.user;
+ if (user?.id !== this.authUser()?.id) {
+ this.authUser.set(session?.user);
+ }
+ });
+ }
+}
diff --git a/libs/shared/src/services/core/supabase/services/supabase-storage.service.ts b/libs/shared/src/services/core/supabase/services/supabase-storage.service.ts
new file mode 100644
index 000000000..6290aeed8
--- /dev/null
+++ b/libs/shared/src/services/core/supabase/services/supabase-storage.service.ts
@@ -0,0 +1,129 @@
+import { Injectable } from '@angular/core';
+// eslint-disable-next-line @nx/enforce-module-boundaries
+import { Database } from '@picsa/server-types';
+import { FileObject } from '@supabase/storage-js';
+import { SupabaseClient } from '@supabase/supabase-js';
+
+import { PicsaNotificationService } from '../../notification.service';
+
+type IStorageDB = Database['storage']['Tables']['objects']['Row'];
+
+/** DB entry populated to server storage objects with explicit metadata expected */
+export interface IStorageEntry extends IStorageDB {
+ metadata: {
+ /** cacheControl will be altered from input metadata, e.g. `3600` -> `"max-age=3600"` */
+ cacheControl: string;
+ contentLength: number;
+ eTag: string;
+ httpStatusCode: number;
+ lastModified: string;
+ mimetype: string;
+ size: number;
+ };
+}
+
+/** Data populated when storage object retrieved via SDK (as opposed to storage table direct) */
+export interface IStorageEntrySDK extends FileObject {}
+
+/**
+ * Utility class for interacting with supabase storage client
+ **/
+@Injectable({ providedIn: 'root' })
+export class SupabaseStorageService {
+ private supabaseClient: SupabaseClient;
+
+ constructor(private notificationService: PicsaNotificationService) {}
+
+ private get storage() {
+ if (!this.supabaseClient) {
+ throw new Error('Supabase client not registered in storage');
+ }
+ return this.supabaseClient.storage;
+ }
+
+ public registerSupabaseClient(client: SupabaseClient) {
+ this.supabaseClient = client;
+ }
+
+ /**
+ * List a bucket contents
+ * Uses custom table view as by default js sdk appears to only return top-level files/folders
+ * and not recursive children
+ * Requires custom view created (see example resources migration)
+ * */
+ public async list(bucketId: string, folderPath?: string) {
+ // NOTE - access via storage table instead of storage api as does not support recursive list
+ let query = this.supabaseClient.from(`storage_objects`).select<'*', IStorageEntry>('*').eq('bucket_id', bucketId);
+
+ if (folderPath) {
+ query = query.like('name', `${folderPath}/%`);
+ }
+ const { data, error } = await query;
+
+ if (error) {
+ console.error(error);
+ this.notificationService.showUserNotification({ matIcon: 'error', message: error.message });
+ }
+ return data || [];
+ }
+
+ public async getFile(options: {
+ bucketId: string;
+ filename: string;
+ folderPath?: string;
+ }): Promise {
+ const defaults = { folderPath: '' };
+ const { bucketId, filename, folderPath } = { ...defaults, ...options };
+ const { data, error } = await this.storage.from(bucketId).list(folderPath, { limit: 1, search: filename });
+ if (error) {
+ throw error;
+ }
+ return data?.[0] || null;
+ }
+
+ /** Return the link to a file in a public bucket */
+ public getPublicLink(bucketId: string, objectPath: string) {
+ return this.storage.from(bucketId).getPublicUrl(objectPath).data.publicUrl;
+ }
+}
+
+/**
+ * WiP
+ * Currently most API methods seem to not be passing auth credentials as expected
+ * Need to determine whether issue in local code/config or with supabase itself
+ * Existing workaround handles upload via xhr requests in uploader component
+ *
+ * TODO - check config toml if can be updated to provide right urls, or perhaps
+ * some setting needs to be enabled in supabase-js for local paths?
+ * Should also try via insomnia
+ *
+ * https://github.com/supabase/storage/issues?q=local
+ *
+ * https://github.com/supabase/supabase-js/issues?q=storage
+ */
+
+// private async getBucket(bucketId: string = 'default'): Promise {
+// const { data, error } = await this.storage.getBucket(bucketId);
+
+// console.log(`getBucket ${bucketId}`, { data, error });
+// if (error) {
+// if (error?.message === 'Bucket not found') {
+// this.notificationService.showUserNotification({
+// matIcon: 'error',
+// message: `[${bucketId}] Storage bucket not available`,
+// });
+// }
+
+// throw error;
+// }
+
+// return data;
+// }
+
+// private async createBucket(id: string) {
+// const { data, error } = await this.storage.createBucket(id);
+// console.log('create bucket', { id, data, error });
+// }
+
+// TODO - make buckets private but add RLS for authenticated user
+// https://supabase.com/docs/guides/storage/security/access-control
diff --git a/libs/shared/src/services/core/supabase/supabase.service.ts b/libs/shared/src/services/core/supabase/supabase.service.ts
index 83df66561..6d70174db 100644
--- a/libs/shared/src/services/core/supabase/supabase.service.ts
+++ b/libs/shared/src/services/core/supabase/supabase.service.ts
@@ -1,121 +1,36 @@
-import { Injectable, signal } from '@angular/core';
-import { MatDialog } from '@angular/material/dialog';
+import { Injectable } from '@angular/core';
import { ENVIRONMENT } from '@picsa/environments/src';
-import { StorageClient } from '@supabase/storage-js';
-import { AuthError, createClient, RealtimeClient, SupabaseClient, User } from '@supabase/supabase-js';
-import { SupabaseAuthClient } from '@supabase/supabase-js/dist/module/lib/SupabaseAuthClient';
+import { createClient, SupabaseClient } from '@supabase/supabase-js';
import { PicsaAsyncService } from '../../asyncService.service';
-import { PicsaNotificationService } from '../notification.service';
-import { SupabaseSignInDialogComponent } from './dialogs/sign-in.dialog';
-
-/** Key safe to use in browser (assuming tables have row-level security) */
+import { SupabaseAuthService } from './services/supabase-auth.service';
+import { SupabaseStorageService } from './services/supabase-storage.service';
+/**
+ * Main entrypoint for interacting with Supabase backend
+ * Module-specific code (e.g. storage, auth) injected via child services
+ */
@Injectable({ providedIn: 'root' })
export class SupabaseService extends PicsaAsyncService {
- /** Authenticated user */
- public authUser = signal(undefined);
-
/** Access to postgres db as a shortcut to table from method */
public db: { table: SupabaseClient['from'] };
private supabase: SupabaseClient;
- private storage: StorageClient;
- private realtime: RealtimeClient;
-
- private auth: SupabaseAuthClient;
- constructor(private notificationService: PicsaNotificationService, private dialog: MatDialog) {
+ constructor(public storage: SupabaseStorageService, public auth: SupabaseAuthService) {
super();
- const { anonKey, apiUrl } = ENVIRONMENT.supabase;
- this.supabase = createClient(apiUrl, anonKey, {});
- this.storage = this.supabase.storage;
- this.realtime = this.supabase.realtime;
- this.auth = this.supabase.auth;
- this.db = { table: (relation: string) => this.supabase.from(relation) };
- }
- public override async init(...args: any): Promise {
- this.subscribeToAuthChanges();
}
- public async signInPrompt() {
- this.dialog.open(SupabaseSignInDialogComponent, { data: { service: this } });
- }
-
- public async signInUser(email: string, password: string) {
- return this.auth.signInWithPassword({ email, password });
- }
-
- public async signUpUser(email: string, password: string) {
- return this.auth.signUp({ email, password });
- }
-
- public async signOut() {
- return this.auth.signOut();
- }
-
- /** Attempt to sign-in as persisted user, with fallback to anonymous */
- public async signInDefaultUser() {
- const { error } = await this.auth.getUser();
- if (error) {
- console.log('User session not found, signing in anonymous user');
- return this.signInAnonymousUser();
- }
- // return user as updated by auth change subscriber
- return this.authUser;
- }
-
- /** User shared credential to sign in as an anonymous user for supabase */
- private async signInAnonymousUser() {
- const { email, password } = ENVIRONMENT.supabase.appUser;
- const { error } = await this.supabase.auth.signInWithPassword({ email, password: password || email });
- // TODO - could consider function to generate app user base on id which could also use RLS for sync
- if (error) {
- console.error(error);
- this.logUserErrorMessage(error);
- if (error.message === 'Invalid login credentials') {
- const devMessage = `Ensure user with email: [${email}] created in supabase auth.\nSee guidance in server Readme`;
- console.error('[Developer Note]\n' + devMessage);
- }
- }
- // return user as updated by auth change subscriber
- return this.authUser;
- }
+ public override async init(): Promise {
+ const { anonKey, apiUrl } = await ENVIRONMENT.supabase.load();
+ this.supabase = createClient(apiUrl, anonKey, {});
- private subscribeToAuthChanges() {
- this.auth.onAuthStateChange((_event, session) => {
- const user = session?.user;
- if (user?.id !== this.authUser()?.id) {
- this.authUser.set(session?.user);
- }
- });
- }
+ // register supabase instance with child services
+ this.storage.registerSupabaseClient(this.supabase);
+ this.auth.registerSupabaseClient(this.supabase);
- /** Create variants of error messages received in supabase for notification purposes */
- private getUserErrorMessage(error: AuthError): { message: string; matIcon: string; devMessage?: string } {
- const { name, message } = error;
- const mapping = {
- AuthRetryableFetchError: {
- message: 'Server connection Failed',
- matIcon: 'cloud_off',
- devMessage: 'Ensure the server is running locally',
- },
- 'Invalid login credentials': {
- message: 'User does not exist or password incorrect',
- matIcon: 'person_alert',
- },
- 'invalid claim: missing sub claim': {
- message: 'No user signed in, unable to load',
- },
- };
- return mapping[message] || { message: `${name} - ${message}`, matIcon: 'error' };
- }
+ this.db = { table: (relation: string) => this.supabase.from(relation) };
- private logUserErrorMessage(error: AuthError) {
- const { message, matIcon, devMessage } = this.getUserErrorMessage(error);
- this.notificationService.showUserNotification({ matIcon, message });
- if (devMessage) {
- console.error('[Developer Note]\n' + devMessage);
- }
+ await this.auth.ready();
}
}
diff --git a/libs/theme/src/_overrides.scss b/libs/theme/src/_overrides.scss
index 0c077535e..325ec5d15 100644
--- a/libs/theme/src/_overrides.scss
+++ b/libs/theme/src/_overrides.scss
@@ -1,9 +1,12 @@
$fontFamily: Roboto, 'Helvetica Neue', sans-serif;
// fix height styles lost since angular/material 17 updates
+// NOTE - these may have been fixed since inclusion of `mat.all-component-bases`
body {
--mdc-protected-button-container-height: 36px;
--mdc-outlined-button-container-height: 36px;
+ --mdc-filled-button-container-height: 36px;
+ --mat-stepper-header-height: 72px;
}
// Revert changes appliec md14 -> md15
@@ -86,6 +89,13 @@ mat-form-field.no-hint {
margin-left: 4px;
}
+mat-chip {
+ // Mat chip pointer cursor
+ .mdc-evolution-chip__action--presentational {
+ cursor: pointer;
+ }
+}
+
// Create a colum-style layout for radio buttons where button appears below text
mat-radio-group.layout-column {
display: block;
diff --git a/libs/theme/src/themes/_index.scss b/libs/theme/src/themes/_index.scss
index a4d8f21e4..140950e39 100644
--- a/libs/theme/src/themes/_index.scss
+++ b/libs/theme/src/themes/_index.scss
@@ -4,6 +4,17 @@
@use '@angular/material' as mat;
@include mat.core();
+$theme-base: mat.define-light-theme(
+ (
+ color: (
+ primary: mat.$indigo-palette,
+ accent: mat.$indigo-palette,
+ warn: mat.$indigo-palette,
+ ),
+ )
+);
+@include mat.all-component-bases($theme-base);
+
@import './picsa-global.scss';
@import './picsa-mw.scss';
@import './picsa-tj.scss';
diff --git a/libs/theme/src/themes/picsa-global.scss b/libs/theme/src/themes/picsa-global.scss
index b73705103..5cb5e637c 100644
--- a/libs/theme/src/themes/picsa-global.scss
+++ b/libs/theme/src/themes/picsa-global.scss
@@ -84,7 +84,10 @@ $theme-global: mat.define-light-theme(
);
body[data-theme='picsa-global'] {
- @include mat.all-component-colors($theme-global);
+ // Include base layouts for all mat components. Could be restricted to specific components, e.g.
+ // https://github.com/angular/components/blob/main/src/material/core/theming/_all-theme.scss
+ // @include mat.all-component-themes($theme-global);
+ @include mat.all-component-themes($theme-global);
--color-primary: #{map-get($palette-primary, 500)};
--color-primary-50: #{map-get($palette-primary, 50)};
--color-secondary: #{map-get($palette-accent, 500)};
diff --git a/libs/theme/src/themes/picsa-mw.scss b/libs/theme/src/themes/picsa-mw.scss
index fb0cd9c74..ed2838bf8 100644
--- a/libs/theme/src/themes/picsa-mw.scss
+++ b/libs/theme/src/themes/picsa-mw.scss
@@ -84,7 +84,7 @@ $theme-mw: mat.define-light-theme(
);
body[data-theme='picsa-mw'] {
- @include mat.all-component-colors($theme-mw);
+ @include mat.all-component-themes($theme-mw);
--color-primary: #{map-get($palette-primary, 500)};
--color-primary-50: #{map-get($palette-primary, 50)};
--color-secondary: #{map-get($palette-accent, 500)};
diff --git a/libs/theme/src/themes/picsa-tj.scss b/libs/theme/src/themes/picsa-tj.scss
index 23b690eea..c552cc9de 100644
--- a/libs/theme/src/themes/picsa-tj.scss
+++ b/libs/theme/src/themes/picsa-tj.scss
@@ -84,7 +84,7 @@ $theme-tj: mat.define-light-theme(
);
body[data-theme='picsa-tj'] {
- @include mat.all-component-colors($theme-tj);
+ @include mat.all-component-themes($theme-tj);
--color-primary: #{map-get($palette-primary, 500)};
--color-primary-50: #{map-get($palette-primary, 50)};
--color-secondary: #{map-get($palette-accent, 500)};
diff --git a/libs/theme/src/themes/picsa-zm.scss b/libs/theme/src/themes/picsa-zm.scss
index d3b0b3098..9a7f20e5e 100644
--- a/libs/theme/src/themes/picsa-zm.scss
+++ b/libs/theme/src/themes/picsa-zm.scss
@@ -84,7 +84,7 @@ $theme-zm: mat.define-light-theme(
);
body[data-theme='picsa-zm'] {
- @include mat.all-component-colors($theme-zm);
+ @include mat.all-component-themes($theme-zm);
--color-primary: #{map-get($palette-primary, 500)};
--color-primary-50: #{map-get($palette-primary, 50)};
--color-secondary: #{map-get($palette-accent, 500)};
diff --git a/package.json b/package.json
index 62cc37020..b1b49cb19 100644
--- a/package.json
+++ b/package.json
@@ -36,12 +36,12 @@
},
"dependencies": {
"@angular/animations": "17.0.3",
- "@angular/cdk": "17.0.1",
+ "@angular/cdk": "17.0.3",
"@angular/common": "17.0.3",
"@angular/compiler": "17.0.3",
"@angular/core": "17.0.3",
"@angular/forms": "17.0.3",
- "@angular/material": "17.0.1",
+ "@angular/material": "17.0.3",
"@angular/platform-browser": "17.0.3",
"@angular/platform-browser-dynamic": "17.0.3",
"@angular/router": "17.0.3",
@@ -65,13 +65,14 @@
"@ngx-translate/http-loader": "~8.0.0",
"@nx/angular": "17.1.2",
"@stencil/angular-output-target": "^0.7.1",
- "@supabase/supabase-js": "^2.38.5",
+ "@supabase/supabase-js": "^2.39.0",
"@uppy/angular": "^0.6.1",
"@uppy/core": "^3.7.1",
"@uppy/dashboard": "^3.7.1",
"@uppy/drag-drop": "^3.0.3",
"@uppy/progress-bar": "^3.0.4",
"@uppy/status-bar": "^3.2.5",
+ "@uppy/tus": "^3.4.0",
"c3": "^0.7.20",
"capacitor-blob-writer": "^1.1.14",
"capacitor-video-player": "^5.0.3",
@@ -108,14 +109,14 @@
"zone.js": "0.14.2"
},
"devDependencies": {
- "@angular-devkit/build-angular": "17.0.1",
- "@angular-devkit/core": "17.0.1",
- "@angular-devkit/schematics": "17.0.1",
+ "@angular-devkit/build-angular": "17.1.0-next.1",
+ "@angular-devkit/core": "17.1.0-next.1",
+ "@angular-devkit/schematics": "17.1.0-next.1",
"@angular-eslint/eslint-plugin": "17.1.0",
"@angular-eslint/eslint-plugin-template": "17.1.0",
"@angular-eslint/template-parser": "17.1.0",
- "@angular/cli": "~17.0.0",
- "@angular/compiler-cli": "17.0.3",
+ "@angular/cli": "17.1.0-next.1",
+ "@angular/compiler-cli": "17.1.0-next.1",
"@angular/language-service": "17.0.3",
"@biesbjerg/ngx-translate-extract-marker": "^1.0.0",
"@capacitor/android": "5.5.1",
@@ -129,7 +130,7 @@
"@nx/web": "17.1.2",
"@nx/workspace": "17.1.2",
"@nxext/stencil": "^17.0.2",
- "@schematics/angular": "17.0.1",
+ "@schematics/angular": "17.0.3",
"@stencil/core": "3.2.2",
"@stencil/sass": "^3.0.2",
"@swc-node/register": "~1.6.7",
@@ -178,7 +179,7 @@
"puppeteer": "^15.5.0",
"rollup-plugin-node-polyfills": "^0.2.1",
"rollup-plugin-visualizer": "^5.8.3",
- "supabase": "^1.113.2",
+ "supabase": "1.115.4",
"tailwindcss": "^3.0.2",
"ts-jest": "29.1.1",
"ts-node": "10.9.1",
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 17c4e319c..9c558f0ec 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -39,6 +39,7 @@
"@picsa/option/*": ["apps/picsa-tools/option-tool/*"],
"@picsa/resources/*": ["apps/picsa-tools/resources-tool/*"],
"@picsa/seasonal-calendar/*": ["apps/picsa-tools/seasonal-calendar-tool/*"],
+ "@picsa/server-types": ["apps/picsa-server/supabase/types/index.ts"],
"@picsa/shared": ["libs/shared/src/index.ts"],
"@picsa/shared/*": ["libs/shared/src/*"],
"@picsa/theme": ["libs/theme/src/index.ts"],
diff --git a/yarn.lock b/yarn.lock
index 4608f8a60..6073e3e70 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -36,52 +36,51 @@ __metadata:
languageName: node
linkType: hard
-"@angular-devkit/architect@npm:0.1700.1":
- version: 0.1700.1
- resolution: "@angular-devkit/architect@npm:0.1700.1"
+"@angular-devkit/architect@npm:0.1701.0-next.1":
+ version: 0.1701.0-next.1
+ resolution: "@angular-devkit/architect@npm:0.1701.0-next.1"
dependencies:
- "@angular-devkit/core": 17.0.1
+ "@angular-devkit/core": 17.1.0-next.1
rxjs: 7.8.1
- checksum: 09ab67c6a266895fa29f8ecec38459eed1b07999d30e059582d76ecb3d46176991ae8c9f7356e83d10b287b06b58efbea07a2a5be091789b6add0050c76f2463
+ checksum: aeea813fe1186089b8e2e5fc5eb9e71a1ea78b65771e042d3340a2d06e31ceb2a8a3dd757bd737e2c38865ca0da3fc7cffffd6e0e1de54aef2c95b761b59aa86
languageName: node
linkType: hard
-"@angular-devkit/build-angular@npm:17.0.1":
- version: 17.0.1
- resolution: "@angular-devkit/build-angular@npm:17.0.1"
+"@angular-devkit/build-angular@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@angular-devkit/build-angular@npm:17.1.0-next.1"
dependencies:
"@ampproject/remapping": 2.2.1
- "@angular-devkit/architect": 0.1700.1
- "@angular-devkit/build-webpack": 0.1700.1
- "@angular-devkit/core": 17.0.1
- "@babel/core": 7.23.2
- "@babel/generator": 7.23.0
+ "@angular-devkit/architect": 0.1701.0-next.1
+ "@angular-devkit/build-webpack": 0.1701.0-next.1
+ "@angular-devkit/core": 17.1.0-next.1
+ "@babel/core": 7.23.5
+ "@babel/generator": 7.23.5
"@babel/helper-annotate-as-pure": 7.22.5
"@babel/helper-split-export-declaration": 7.22.6
- "@babel/plugin-transform-async-generator-functions": 7.23.2
- "@babel/plugin-transform-async-to-generator": 7.22.5
- "@babel/plugin-transform-runtime": 7.23.2
- "@babel/preset-env": 7.23.2
- "@babel/runtime": 7.23.2
+ "@babel/plugin-transform-async-generator-functions": 7.23.4
+ "@babel/plugin-transform-async-to-generator": 7.23.3
+ "@babel/plugin-transform-runtime": 7.23.4
+ "@babel/preset-env": 7.23.5
+ "@babel/runtime": 7.23.5
"@discoveryjs/json-ext": 0.5.7
- "@ngtools/webpack": 17.0.1
- "@vitejs/plugin-basic-ssl": 1.0.1
+ "@ngtools/webpack": 17.1.0-next.1
+ "@vitejs/plugin-basic-ssl": 1.0.2
ansi-colors: 4.1.3
autoprefixer: 10.4.16
babel-loader: 9.1.3
babel-plugin-istanbul: 6.1.1
- browser-sync: 2.29.3
browserslist: ^4.21.5
chokidar: 3.5.3
copy-webpack-plugin: 11.0.0
critters: 0.0.20
css-loader: 6.8.1
- esbuild: 0.19.5
- esbuild-wasm: 0.19.5
- fast-glob: 3.3.1
+ esbuild: 0.19.8
+ esbuild-wasm: 0.19.8
+ fast-glob: 3.3.2
http-proxy-middleware: 2.0.6
https-proxy-agent: 7.0.2
- inquirer: 9.2.11
+ inquirer: 9.2.12
jsonc-parser: 3.2.0
karma-source-map-support: 1.4.0
less: 4.2.0
@@ -95,8 +94,8 @@ __metadata:
ora: 5.4.1
parse5-html-rewriting-stream: 7.0.0
picomatch: 3.0.1
- piscina: 4.1.0
- postcss: 8.4.31
+ piscina: 4.2.0
+ postcss: 8.4.32
postcss-loader: 7.3.3
resolve-url-loader: 5.0.0
rxjs: 7.8.1
@@ -105,29 +104,30 @@ __metadata:
semver: 7.5.4
source-map-loader: 4.0.1
source-map-support: 0.5.21
- terser: 5.24.0
+ terser: 5.25.0
text-table: 0.2.0
tree-kill: 1.2.2
tslib: 2.6.2
- undici: 5.27.2
- vite: 4.5.0
+ undici: 6.0.1
+ vite: 5.0.6
webpack: 5.89.0
webpack-dev-middleware: 6.1.1
webpack-dev-server: 4.15.1
webpack-merge: 5.10.0
webpack-subresource-integrity: 5.1.0
peerDependencies:
- "@angular/compiler-cli": ^17.0.0
- "@angular/localize": ^17.0.0
- "@angular/platform-server": ^17.0.0
- "@angular/service-worker": ^17.0.0
+ "@angular/compiler-cli": ^17.0.0 || ^17.1.0-next.0
+ "@angular/localize": ^17.0.0 || ^17.1.0-next.0
+ "@angular/platform-server": ^17.0.0 || ^17.1.0-next.0
+ "@angular/service-worker": ^17.0.0 || ^17.1.0-next.0
+ browser-sync: ^2.29.3
jest: ^29.5.0
jest-environment-jsdom: ^29.5.0
karma: ^6.3.0
- ng-packagr: ^17.0.0
+ ng-packagr: ^17.0.0 || ^17.1.0-next.0
protractor: ^7.0.0
tailwindcss: ^2.0.0 || ^3.0.0
- typescript: ">=5.2 <5.3"
+ typescript: ">=5.2 <5.4"
dependenciesMeta:
esbuild:
optional: true
@@ -138,6 +138,8 @@ __metadata:
optional: true
"@angular/service-worker":
optional: true
+ browser-sync:
+ optional: true
jest:
optional: true
jest-environment-jsdom:
@@ -150,20 +152,20 @@ __metadata:
optional: true
tailwindcss:
optional: true
- checksum: 80ef057e5e59d4a06dfa8d32ae635b5fc2ad45ecefc642d5c576f04656d782fcbfdb9fb046adab98535d6b65812910c8bc64d61302f63785833b31f58e67c24e
+ checksum: d46fab008a7a3bea28fac331adbbbf8bfef0ed933fb5f585c4efd47cce3744dd6d3b9eee2f9d49966076c3db5e7cbb5d877b533fce5ec0a343f61a00817ba765
languageName: node
linkType: hard
-"@angular-devkit/build-webpack@npm:0.1700.1":
- version: 0.1700.1
- resolution: "@angular-devkit/build-webpack@npm:0.1700.1"
+"@angular-devkit/build-webpack@npm:0.1701.0-next.1":
+ version: 0.1701.0-next.1
+ resolution: "@angular-devkit/build-webpack@npm:0.1701.0-next.1"
dependencies:
- "@angular-devkit/architect": 0.1700.1
+ "@angular-devkit/architect": 0.1701.0-next.1
rxjs: 7.8.1
peerDependencies:
webpack: ^5.30.0
webpack-dev-server: ^4.0.0
- checksum: cb2067ab4b1455c45273027b32e9422243e388998b3c769a99dab3367e9a591f61f57249f1fc2573ab35340f4a1bdf901e09c66575927decb87f1320dfca38c5
+ checksum: 92e1eef2c470d07e7caa44b9c6723df523d1e9341f6b2f9015851e685a0b9e6ebf7472e17249a375b5c1c7bc7a0d72de7805a2e66217326725a3d4e7f4708dc2
languageName: node
linkType: hard
@@ -185,9 +187,28 @@ __metadata:
languageName: node
linkType: hard
-"@angular-devkit/core@npm:17.0.1":
- version: 17.0.1
- resolution: "@angular-devkit/core@npm:17.0.1"
+"@angular-devkit/core@npm:17.0.3":
+ version: 17.0.3
+ resolution: "@angular-devkit/core@npm:17.0.3"
+ dependencies:
+ ajv: 8.12.0
+ ajv-formats: 2.1.1
+ jsonc-parser: 3.2.0
+ picomatch: 3.0.1
+ rxjs: 7.8.1
+ source-map: 0.7.4
+ peerDependencies:
+ chokidar: ^3.5.2
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+ checksum: 35b1bfac3757efb89f02cfb07c20502d9b18386643ab8953cd23bbe0b23fcbe6226a76a439dee099f41a783bc2b2d433853335df8b28fd969451a3df7fdf4f61
+ languageName: node
+ linkType: hard
+
+"@angular-devkit/core@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@angular-devkit/core@npm:17.1.0-next.1"
dependencies:
ajv: 8.12.0
ajv-formats: 2.1.1
@@ -200,7 +221,7 @@ __metadata:
peerDependenciesMeta:
chokidar:
optional: true
- checksum: e9832de3c2520f6a049331567386b4824a05fbcf6aa0b62a48bd2ba3aee8af080d7e988e3fc4d1157037e1ce4ee4c43fd1c0cc6941cc4a8996ed912779007510
+ checksum: c60c39517d11aef064384cef09a181cb89f434a6e48baabf209ea57da0fccff87ca486d3cac3c5f16ed66436210ff9f54c7986ca80de928e25b590b539eebd41
languageName: node
linkType: hard
@@ -217,16 +238,29 @@ __metadata:
languageName: node
linkType: hard
-"@angular-devkit/schematics@npm:17.0.1":
- version: 17.0.1
- resolution: "@angular-devkit/schematics@npm:17.0.1"
+"@angular-devkit/schematics@npm:17.0.3":
+ version: 17.0.3
+ resolution: "@angular-devkit/schematics@npm:17.0.3"
+ dependencies:
+ "@angular-devkit/core": 17.0.3
+ jsonc-parser: 3.2.0
+ magic-string: 0.30.5
+ ora: 5.4.1
+ rxjs: 7.8.1
+ checksum: d9e2c5d56db8096963b6cabe26df8dfd57ce7e57bbeda6cccc1446e91c4e902a3b16456a1fe3480e7050a1e8baba58ad63dc1d2f9370edc44869a10692dacdca
+ languageName: node
+ linkType: hard
+
+"@angular-devkit/schematics@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@angular-devkit/schematics@npm:17.1.0-next.1"
dependencies:
- "@angular-devkit/core": 17.0.1
+ "@angular-devkit/core": 17.1.0-next.1
jsonc-parser: 3.2.0
magic-string: 0.30.5
ora: 5.4.1
rxjs: 7.8.1
- checksum: 6d630fb23f5958fb785f05cd514d4a8030061e8800410de9bee58d2ebf298d355d9f28e049acbaf2b16f61a6ff1b8dccd769cfbb7e2370750efbdb2ce3c4f364
+ checksum: e8e49a3c0bfd68e4e312260f58ff41bb10b4708311bd15be9b9260fbb2acb91be3ffa41949b36a24c050bfa9970fa45e668a7fe41e075322d9cb81bb8f212785
languageName: node
linkType: hard
@@ -304,9 +338,9 @@ __metadata:
languageName: node
linkType: hard
-"@angular/cdk@npm:17.0.1":
- version: 17.0.1
- resolution: "@angular/cdk@npm:17.0.1"
+"@angular/cdk@npm:17.0.3":
+ version: 17.0.3
+ resolution: "@angular/cdk@npm:17.0.3"
dependencies:
parse5: ^7.1.2
tslib: ^2.3.0
@@ -317,35 +351,35 @@ __metadata:
dependenciesMeta:
parse5:
optional: true
- checksum: 0610b16c08ca48fc90528edf12ac7eceb590ba227f9acd8b862fc81180afe56b816e8509b0228e1818c96b37721ad82a85913ff24bc1c7edd4bf8389ce3a10f6
+ checksum: 616875935bd4d6119b639666bdad3c20a83da245af6a381266c246b927bbae98cce29a41752fcd4fc4d22fde05417c1f54cf2ec1c7a5dfafc363ff004afea084
languageName: node
linkType: hard
-"@angular/cli@npm:~17.0.0":
- version: 17.0.1
- resolution: "@angular/cli@npm:17.0.1"
+"@angular/cli@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@angular/cli@npm:17.1.0-next.1"
dependencies:
- "@angular-devkit/architect": 0.1700.1
- "@angular-devkit/core": 17.0.1
- "@angular-devkit/schematics": 17.0.1
- "@schematics/angular": 17.0.1
+ "@angular-devkit/architect": 0.1701.0-next.1
+ "@angular-devkit/core": 17.1.0-next.1
+ "@angular-devkit/schematics": 17.1.0-next.1
+ "@schematics/angular": 17.1.0-next.1
"@yarnpkg/lockfile": 1.1.0
ansi-colors: 4.1.3
ini: 4.1.1
- inquirer: 9.2.11
+ inquirer: 9.2.12
jsonc-parser: 3.2.0
npm-package-arg: 11.0.1
npm-pick-manifest: 9.0.0
open: 8.4.2
ora: 5.4.1
- pacote: 17.0.4
+ pacote: 17.0.5
resolve: 1.22.8
semver: 7.5.4
symbol-observable: 4.0.0
yargs: 17.7.2
bin:
ng: bin/ng.js
- checksum: f27b3406140ca84a4cca9f0a5a66600b94adecce979e0bb5aa60001fa915808850be986577bdf7f3a4584c9309ef64ba12561f432fbac9978b20ededd6d9ed82
+ checksum: 0f0b4843ab39de6e69ecb0ff782e0c67247704ec8bb71722da784173bec33d5b7cf916d7a6fb47927c95d93789ca455b4b8264bd4ea8ebaf5a6662c35e31a1b7
languageName: node
linkType: hard
@@ -361,9 +395,9 @@ __metadata:
languageName: node
linkType: hard
-"@angular/compiler-cli@npm:17.0.3":
- version: 17.0.3
- resolution: "@angular/compiler-cli@npm:17.0.3"
+"@angular/compiler-cli@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@angular/compiler-cli@npm:17.1.0-next.1"
dependencies:
"@babel/core": 7.23.2
"@jridgewell/sourcemap-codec": ^1.4.14
@@ -374,13 +408,13 @@ __metadata:
tslib: ^2.3.0
yargs: ^17.2.1
peerDependencies:
- "@angular/compiler": 17.0.3
- typescript: ">=5.2 <5.3"
+ "@angular/compiler": 17.1.0-next.1
+ typescript: ">=5.2 <5.4"
bin:
ng-xi18n: bundles/src/bin/ng_xi18n.js
ngc: bundles/src/bin/ngc.js
ngcc: bundles/ngcc/index.js
- checksum: acb81a4118d7be15f1f82da744d1480abd09d63598288540ebcbb3b9c590bb2f0fbffed16915a68351dd23e5a31edfcf1854204f3e2efed46f3811ecbd84979c
+ checksum: c3d9bc58ffa89b8bf19e5644f05d657a72609f5ccb35fc0ff7057d29538f6c876dc70b53bddedb4e89baccbde9370768bc358b21c422ca1ac1c73fe17db47c1e
languageName: node
linkType: hard
@@ -431,9 +465,9 @@ __metadata:
languageName: node
linkType: hard
-"@angular/material@npm:17.0.1":
- version: 17.0.1
- resolution: "@angular/material@npm:17.0.1"
+"@angular/material@npm:17.0.3":
+ version: 17.0.3
+ resolution: "@angular/material@npm:17.0.3"
dependencies:
"@material/animation": 15.0.0-canary.a246a4439.0
"@material/auto-init": 15.0.0-canary.a246a4439.0
@@ -485,13 +519,13 @@ __metadata:
tslib: ^2.3.0
peerDependencies:
"@angular/animations": ^17.0.0 || ^18.0.0
- "@angular/cdk": 17.0.1
+ "@angular/cdk": 17.0.3
"@angular/common": ^17.0.0 || ^18.0.0
"@angular/core": ^17.0.0 || ^18.0.0
"@angular/forms": ^17.0.0 || ^18.0.0
"@angular/platform-browser": ^17.0.0 || ^18.0.0
rxjs: ^6.5.3 || ^7.4.0
- checksum: 3d2ba23780bd4d65fe10b37f3938e22d599fb8647c090569dad130a5d8e3bc2285da191e677bf20ac4c423355423e5effa42179a3d733f2fc3c194189769471f
+ checksum: d074130488977340819a82f996e872a7dd0bea0e25d33f7c4c7f50b014ea17a62ea212aa5cc34cf5605572d7eeff5a1e0a23e59d31420098d806972baacae94b
languageName: node
linkType: hard
@@ -642,6 +676,16 @@ __metadata:
languageName: node
linkType: hard
+"@babel/code-frame@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/code-frame@npm:7.23.5"
+ dependencies:
+ "@babel/highlight": ^7.23.4
+ chalk: ^2.4.2
+ checksum: d90981fdf56a2824a9b14d19a4c0e8db93633fd488c772624b4e83e0ceac6039a27cd298a247c3214faa952bf803ba23696172ae7e7235f3b97f43ba278c569a
+ languageName: node
+ linkType: hard
+
"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9":
version: 7.22.20
resolution: "@babel/compat-data@npm:7.22.20"
@@ -649,10 +693,10 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.23.2":
- version: 7.23.3
- resolution: "@babel/compat-data@npm:7.23.3"
- checksum: 52fff649d4e25b10e29e8a9b1c9ef117f44d354273c17b5ef056555f8e5db2429b35df4c38bdfb6865d23133e0fba92e558d31be87bb8457db4ac688646fdbf1
+"@babel/compat-data@npm:^7.23.3, @babel/compat-data@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/compat-data@npm:7.23.5"
+ checksum: 06ce244cda5763295a0ea924728c09bae57d35713b675175227278896946f922a63edf803c322f855a3878323d48d0255a2a3023409d2a123483c8a69ebb4744
languageName: node
linkType: hard
@@ -679,6 +723,29 @@ __metadata:
languageName: node
linkType: hard
+"@babel/core@npm:7.23.5":
+ version: 7.23.5
+ resolution: "@babel/core@npm:7.23.5"
+ dependencies:
+ "@ampproject/remapping": ^2.2.0
+ "@babel/code-frame": ^7.23.5
+ "@babel/generator": ^7.23.5
+ "@babel/helper-compilation-targets": ^7.22.15
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helpers": ^7.23.5
+ "@babel/parser": ^7.23.5
+ "@babel/template": ^7.22.15
+ "@babel/traverse": ^7.23.5
+ "@babel/types": ^7.23.5
+ convert-source-map: ^2.0.0
+ debug: ^4.1.0
+ gensync: ^1.0.0-beta.2
+ json5: ^2.2.3
+ semver: ^6.3.1
+ checksum: 5e5dfb1e61f298676f1fca18c646dbf6fb164ca1056b0169b8d42b7f5c35e026d81823582ccb2358e93a61b035e22b3ad37e2abaae4bf43f1ffb93b6ce19466e
+ languageName: node
+ linkType: hard
+
"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.22.9":
version: 7.22.20
resolution: "@babel/core@npm:7.22.20"
@@ -702,15 +769,15 @@ __metadata:
languageName: node
linkType: hard
-"@babel/generator@npm:7.23.0":
- version: 7.23.0
- resolution: "@babel/generator@npm:7.23.0"
+"@babel/generator@npm:7.23.5, @babel/generator@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/generator@npm:7.23.5"
dependencies:
- "@babel/types": ^7.23.0
+ "@babel/types": ^7.23.5
"@jridgewell/gen-mapping": ^0.3.2
"@jridgewell/trace-mapping": ^0.3.17
jsesc: ^2.5.1
- checksum: 8efe24adad34300f1f8ea2add420b28171a646edc70f2a1b3e1683842f23b8b7ffa7e35ef0119294e1901f45bfea5b3dc70abe1f10a1917ccdfb41bed69be5f1
+ checksum: 845ddda7cf38a3edf4be221cc8a439dee9ea6031355146a1a74047aa8007bc030305b27d8c68ec9e311722c910610bde38c0e13a9ce55225251e7cb7e7f3edc8
languageName: node
linkType: hard
@@ -747,7 +814,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5":
+"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.15, @babel/helper-builder-binary-assignment-operator-visitor@npm:^7.22.5":
version: 7.22.15
resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.22.15"
dependencies:
@@ -788,7 +855,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.5":
+"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.22.15, @babel/helper-create-regexp-features-plugin@npm:^7.22.5":
version: 7.22.15
resolution: "@babel/helper-create-regexp-features-plugin@npm:7.22.15"
dependencies:
@@ -944,7 +1011,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9":
+"@babel/helper-replace-supers@npm:^7.22.20, @babel/helper-replace-supers@npm:^7.22.5, @babel/helper-replace-supers@npm:^7.22.9":
version: 7.22.20
resolution: "@babel/helper-replace-supers@npm:7.22.20"
dependencies:
@@ -991,6 +1058,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-string-parser@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/helper-string-parser@npm:7.23.4"
+ checksum: c0641144cf1a7e7dc93f3d5f16d5327465b6cf5d036b48be61ecba41e1eece161b48f46b7f960951b67f8c3533ce506b16dece576baef4d8b3b49f8c65410f90
+ languageName: node
+ linkType: hard
+
"@babel/helper-validator-identifier@npm:^7.22.19, @babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.22.5":
version: 7.22.20
resolution: "@babel/helper-validator-identifier@npm:7.22.20"
@@ -1005,6 +1079,13 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helper-validator-option@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/helper-validator-option@npm:7.23.5"
+ checksum: 537cde2330a8aede223552510e8a13e9c1c8798afee3757995a7d4acae564124fe2bf7e7c3d90d62d3657434a74340a274b3b3b1c6f17e9a2be1f48af29cb09e
+ languageName: node
+ linkType: hard
+
"@babel/helper-wrap-function@npm:^7.22.20":
version: 7.22.20
resolution: "@babel/helper-wrap-function@npm:7.22.20"
@@ -1038,6 +1119,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/helpers@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/helpers@npm:7.23.5"
+ dependencies:
+ "@babel/template": ^7.22.15
+ "@babel/traverse": ^7.23.5
+ "@babel/types": ^7.23.5
+ checksum: c16dc8a3bb3d0e02c7ee1222d9d0865ed4b92de44fb8db43ff5afd37a0fc9ea5e2906efa31542c95b30c1a3a9540d66314663c9a23b5bb9b5ec76e8ebc896064
+ languageName: node
+ linkType: hard
+
"@babel/highlight@npm:^7.22.13":
version: 7.22.20
resolution: "@babel/highlight@npm:7.22.20"
@@ -1049,6 +1141,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/highlight@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/highlight@npm:7.23.4"
+ dependencies:
+ "@babel/helper-validator-identifier": ^7.22.20
+ chalk: ^2.4.2
+ js-tokens: ^4.0.0
+ checksum: 643acecdc235f87d925979a979b539a5d7d1f31ae7db8d89047269082694122d11aa85351304c9c978ceeb6d250591ccadb06c366f358ccee08bb9c122476b89
+ languageName: node
+ linkType: hard
+
"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16":
version: 7.22.16
resolution: "@babel/parser@npm:7.22.16"
@@ -1067,6 +1170,15 @@ __metadata:
languageName: node
linkType: hard
+"@babel/parser@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/parser@npm:7.23.5"
+ bin:
+ parser: ./bin/babel-parser.js
+ checksum: ea763629310f71580c4a3ea9d3705195b7ba994ada2cc98f9a584ebfdacf54e92b2735d351672824c2c2b03c7f19206899f4d95650d85ce514a822b19a8734c7
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.22.15"
@@ -1078,6 +1190,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: ddbaf2c396b7780f15e80ee01d6dd790db076985f3dfeb6527d1a8d4cacf370e49250396a3aa005b2c40233cac214a106232f83703d5e8491848bde273938232
+ languageName: node
+ linkType: hard
+
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.22.15"
@@ -1091,6 +1214,31 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ "@babel/plugin-transform-optional-chaining": ^7.23.3
+ peerDependencies:
+ "@babel/core": ^7.13.0
+ checksum: 434b9d710ae856fa1a456678cc304fbc93915af86d581ee316e077af746a709a741ea39d7e1d4f5b98861b629cc7e87f002d3138f5e836775632466d4c74aef2
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.23.3"
+ dependencies:
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 4690123f0ef7c11d6bf1a9579e4f463ce363563b75ec3f6ca66cf68687e39d8d747a82c833847653962f79da367eca895d9095c60d8ebb224a1d4277003acc11
+ languageName: node
+ linkType: hard
+
"@babel/plugin-proposal-decorators@npm:^7.22.7":
version: 7.22.15
resolution: "@babel/plugin-proposal-decorators@npm:7.22.15"
@@ -1203,6 +1351,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-import-assertions@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-syntax-import-assertions@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 883e6b35b2da205138caab832d54505271a3fee3fc1e8dc0894502434fc2b5d517cbe93bbfbfef8068a0fb6ec48ebc9eef3f605200a489065ba43d8cddc1c9a7
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-import-attributes@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-syntax-import-attributes@npm:7.22.5"
@@ -1214,6 +1373,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-syntax-import-attributes@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-syntax-import-attributes@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 9aed7661ffb920ca75df9f494757466ca92744e43072e0848d87fa4aa61a3f2ee5a22198ac1959856c036434b5614a8f46f1fb70298835dbe28220cdd1d4c11e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-syntax-import-meta@npm:^7.10.4, @babel/plugin-syntax-import-meta@npm:^7.8.3":
version: 7.10.4
resolution: "@babel/plugin-syntax-import-meta@npm:7.10.4"
@@ -1369,9 +1539,20 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:7.23.2":
- version: 7.23.2
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.2"
+"@babel/plugin-transform-arrow-functions@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-arrow-functions@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 1e99118176e5366c2636064d09477016ab5272b2a92e78b8edb571d20bc3eaa881789a905b20042942c3c2d04efc530726cf703f937226db5ebc495f5d067e66
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-async-generator-functions@npm:7.23.4, @babel/plugin-transform-async-generator-functions@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.4"
dependencies:
"@babel/helper-environment-visitor": ^7.22.20
"@babel/helper-plugin-utils": ^7.22.5
@@ -1379,7 +1560,7 @@ __metadata:
"@babel/plugin-syntax-async-generators": ^7.8.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: e1abae0edcda7304d7c17702ac25a127578791b89c4f767d60589249fa3e50ec33f8c9ff39d3d8d41f00b29947654eaddd4fd586e04c4d598122db745fab2868
+ checksum: e2fc132c9033711d55209f4781e1fc73f0f4da5e0ca80a2da73dec805166b73c92a6e83571a8994cd2c893a28302e24107e90856202b24781bab734f800102bb
languageName: node
linkType: hard
@@ -1397,21 +1578,20 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-async-generator-functions@npm:^7.23.2":
+"@babel/plugin-transform-async-to-generator@npm:7.23.3, @babel/plugin-transform-async-to-generator@npm:^7.23.3":
version: 7.23.3
- resolution: "@babel/plugin-transform-async-generator-functions@npm:7.23.3"
+ resolution: "@babel/plugin-transform-async-to-generator@npm:7.23.3"
dependencies:
- "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-module-imports": ^7.22.15
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-remap-async-to-generator": ^7.22.20
- "@babel/plugin-syntax-async-generators": ^7.8.4
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 39407e5d92905a824d6ef115af70755b26a6b458639686092d7e05d0701f7ff42e995e2c5aab28d6ab5311752190667766417e58834b54c98fac78c857e30320
+ checksum: 2e9d9795d4b3b3d8090332104e37061c677f29a1ce65bcbda4099a32d243e5d9520270a44bbabf0fb1fb40d463bd937685b1a1042e646979086c546d55319c3c
languageName: node
linkType: hard
-"@babel/plugin-transform-async-to-generator@npm:7.22.5, @babel/plugin-transform-async-to-generator@npm:^7.22.5":
+"@babel/plugin-transform-async-to-generator@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-async-to-generator@npm:7.22.5"
dependencies:
@@ -1435,6 +1615,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-block-scoped-functions@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: e63b16d94ee5f4d917e669da3db5ea53d1e7e79141a2ec873c1e644678cdafe98daa556d0d359963c827863d6b3665d23d4938a94a4c5053a1619c4ebd01d020
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-block-scoping@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-block-scoping@npm:7.22.15"
@@ -1446,14 +1637,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-block-scoping@npm:^7.23.0":
- version: 7.23.3
- resolution: "@babel/plugin-transform-block-scoping@npm:7.23.3"
+"@babel/plugin-transform-block-scoping@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-block-scoping@npm:7.23.4"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 2bad9491502942266ddacd76e026ee2095e71c2a6aa3d038343d65f8db67a2a2262701b2db23a30b7f06ab49710cbf0ab5bedbb930a9f39780cb366aecd30540
+ checksum: fc4b2100dd9f2c47d694b4b35ae8153214ccb4e24ef545c259a9db17211b18b6a430f22799b56db8f6844deaeaa201af45a03331d0c80cc28b0c4e3c814570e4
languageName: node
linkType: hard
@@ -1469,6 +1660,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-class-properties@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-class-properties@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 9c6f8366f667897541d360246de176dd29efc7a13d80a5b48361882f7173d9173be4646c3b7d9b003ccc0e01e25df122330308f33db921fa553aa17ad544b3fc
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-class-static-block@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-class-static-block@npm:7.22.11"
@@ -1482,6 +1685,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-class-static-block@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-class-static-block@npm:7.23.4"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-class-static-block": ^7.14.5
+ peerDependencies:
+ "@babel/core": ^7.12.0
+ checksum: c8bfaba19a674fc2eb54edad71e958647360474e3163e8226f1acd63e4e2dbec32a171a0af596c1dc5359aee402cc120fea7abd1fb0e0354b6527f0fc9e8aa1e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-classes@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-classes@npm:7.22.15"
@@ -1501,6 +1717,25 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-classes@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/plugin-transform-classes@npm:7.23.5"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-compilation-targets": ^7.22.15
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-optimise-call-expression": ^7.22.5
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-replace-supers": ^7.22.20
+ "@babel/helper-split-export-declaration": ^7.22.6
+ globals: ^11.1.0
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 6d0dd3b0828e84a139a51b368f33f315edee5688ef72c68ba25e0175c68ea7357f9c8810b3f61713e368a3063cdcec94f3a2db952e453b0b14ef428a34aa8169
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-computed-properties@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5"
@@ -1513,6 +1748,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-computed-properties@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-computed-properties@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/template": ^7.22.15
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 80452661dc25a0956f89fe98cb562e8637a9556fb6c00d312c57653ce7df8798f58d138603c7e1aad96614ee9ccd10c47e50ab9ded6b6eded5adeb230d2a982e
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-destructuring@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-destructuring@npm:7.22.15"
@@ -1524,7 +1771,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.23.0":
+"@babel/plugin-transform-destructuring@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-destructuring@npm:7.23.3"
dependencies:
@@ -1547,6 +1794,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-dotall-regex@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-dotall-regex@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a2dbbf7f1ea16a97948c37df925cb364337668c41a3948b8d91453f140507bd8a3429030c7ce66d09c299987b27746c19a2dd18b6f17dcb474854b14fd9159a3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-duplicate-keys@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-duplicate-keys@npm:7.22.5"
@@ -1558,6 +1817,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-duplicate-keys@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-duplicate-keys@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: c2a21c34dc0839590cd945192cbc46fde541a27e140c48fe1808315934664cdbf18db64889e23c4eeb6bad9d3e049482efdca91d29de5734ffc887c4fbabaa16
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-dynamic-import@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-dynamic-import@npm:7.22.11"
@@ -1570,6 +1840,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-dynamic-import@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-dynamic-import@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-dynamic-import": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 57a722604c430d9f3dacff22001a5f31250e34785d4969527a2ae9160fa86858d0892c5b9ff7a06a04076f8c76c9e6862e0541aadca9c057849961343aab0845
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-exponentiation-operator@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.22.5"
@@ -1582,6 +1864,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-exponentiation-operator@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.23.3"
+ dependencies:
+ "@babel/helper-builder-binary-assignment-operator-visitor": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 00d05ab14ad0f299160fcf9d8f55a1cc1b740e012ab0b5ce30207d2365f091665115557af7d989cd6260d075a252d9e4283de5f2b247dfbbe0e42ae586e6bf66
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-export-namespace-from@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-export-namespace-from@npm:7.22.11"
@@ -1594,6 +1888,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-export-namespace-from@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-export-namespace-from@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-export-namespace-from": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 9f770a81bfd03b48d6ba155d452946fd56d6ffe5b7d871e9ec2a0b15e0f424273b632f3ed61838b90015b25bbda988896b7a46c7d964fbf8f6feb5820b309f93
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-for-of@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-for-of@npm:7.22.15"
@@ -1605,6 +1911,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-for-of@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-for-of@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a6288122a5091d96c744b9eb23dc1b2d4cce25f109ac1e26a0ea03c4ea60330e6f3cc58530b33ba7369fa07163b71001399a145238b7e92bff6270ef3b9c32a0
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-function-name@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-function-name@npm:7.22.5"
@@ -1618,6 +1935,19 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-function-name@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-function-name@npm:7.23.3"
+ dependencies:
+ "@babel/helper-compilation-targets": ^7.22.15
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 355c6dbe07c919575ad42b2f7e020f320866d72f8b79181a16f8e0cd424a2c761d979f03f47d583d9471b55dcd68a8a9d829b58e1eebcd572145b934b48975a6
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-json-strings@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-json-strings@npm:7.22.11"
@@ -1630,6 +1960,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-json-strings@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-json-strings@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-json-strings": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: f9019820233cf8955d8ba346df709a0683c120fe86a24ed1c9f003f2db51197b979efc88f010d558a12e1491210fc195a43cd1c7fee5e23b92da38f793a875de
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-literals@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-literals@npm:7.22.5"
@@ -1641,9 +1983,20 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11":
- version: 7.22.11
- resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11"
+"@babel/plugin-transform-literals@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-literals@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 519a544cd58586b9001c4c9b18da25a62f17d23c48600ff7a685d75ca9eb18d2c5e8f5476f067f0a8f1fea2a31107eff950b9864833061e6076dcc4bdc3e71ed
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.22.11":
+ version: 7.22.11
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.22.11"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
"@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
@@ -1653,6 +2006,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-logical-assignment-operators@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 2ae1dc9b4ff3bf61a990ff3accdecb2afe3a0ca649b3e74c010078d1cdf29ea490f50ac0a905306a2bcf9ac177889a39ac79bdcc3a0fdf220b3b75fac18d39b5
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-member-expression-literals@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5"
@@ -1664,6 +2029,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-member-expression-literals@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-member-expression-literals@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 95cec13c36d447c5aa6b8e4c778b897eeba66dcb675edef01e0d2afcec9e8cb9726baf4f81b4bbae7a782595aed72e6a0d44ffb773272c3ca180fada99bf92db
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-modules-amd@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-modules-amd@npm:7.22.5"
@@ -1676,7 +2052,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-amd@npm:^7.23.0":
+"@babel/plugin-transform-modules-amd@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-modules-amd@npm:7.23.3"
dependencies:
@@ -1701,7 +2077,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.23.0":
+"@babel/plugin-transform-modules-commonjs@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3"
dependencies:
@@ -1728,7 +2104,7 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-systemjs@npm:^7.23.0":
+"@babel/plugin-transform-modules-systemjs@npm:^7.23.3":
version: 7.23.3
resolution: "@babel/plugin-transform-modules-systemjs@npm:7.23.3"
dependencies:
@@ -1754,6 +2130,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-modules-umd@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-modules-umd@npm:7.23.3"
+ dependencies:
+ "@babel/helper-module-transforms": ^7.23.3
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 586a7a2241e8b4e753a37af9466a9ffa8a67b4ba9aa756ad7500712c05d8fa9a8c1ed4f7bd25fae2a8265e6cf8fe781ec85a8ee885dd34cf50d8955ee65f12dc
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.22.5"
@@ -1777,6 +2165,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-new-target@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-new-target@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: e5053389316fce73ad5201b7777437164f333e24787fbcda4ae489cd2580dbbbdfb5694a7237bad91fabb46b591d771975d69beb1c740b82cb4761625379f00b
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.22.11"
@@ -1789,6 +2188,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a27d73ea134d3d9560a6b2e26ab60012fba15f1db95865aa0153c18f5ec82cfef6a7b3d8df74e3c2fca81534fa5efeb6cacaf7b08bdb7d123e3dafdd079886a3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-numeric-separator@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-numeric-separator@npm:7.22.11"
@@ -1801,6 +2212,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-numeric-separator@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-numeric-separator@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-numeric-separator": ^7.10.4
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 6ba0e5db3c620a3ec81f9e94507c821f483c15f196868df13fa454cbac719a5449baf73840f5b6eb7d77311b24a2cf8e45db53700d41727f693d46f7caf3eec3
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-object-rest-spread@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-object-rest-spread@npm:7.22.15"
@@ -1816,6 +2239,21 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-object-rest-spread@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-object-rest-spread@npm:7.23.4"
+ dependencies:
+ "@babel/compat-data": ^7.23.3
+ "@babel/helper-compilation-targets": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-object-rest-spread": ^7.8.3
+ "@babel/plugin-transform-parameters": ^7.23.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 73fec495e327ca3959c1c03d07a621be09df00036c69fff0455af9a008291677ee9d368eec48adacdc6feac703269a649747568b4af4c4e9f134aa71cc5b378d
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-object-super@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-object-super@npm:7.22.5"
@@ -1828,6 +2266,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-object-super@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-object-super@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-replace-supers": ^7.22.20
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: e495497186f621fa79026e183b4f1fbb172fd9df812cbd2d7f02c05b08adbe58012b1a6eb6dd58d11a30343f6ec80d0f4074f9b501d70aa1c94df76d59164c53
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-optional-catch-binding@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.22.11"
@@ -1840,6 +2290,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-optional-catch-binding@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.23.4"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-optional-catch-binding": ^7.8.3
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: d50b5ee142cdb088d8b5de1ccf7cea85b18b85d85b52f86618f6e45226372f01ad4cdb29abd4fd35ea99a71fefb37009e0107db7a787dcc21d4d402f97470faf
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-optional-chaining@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-optional-chaining@npm:7.22.15"
@@ -1853,16 +2315,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.23.0":
- version: 7.23.3
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.3"
+"@babel/plugin-transform-optional-chaining@npm:^7.23.3, @babel/plugin-transform-optional-chaining@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4"
dependencies:
"@babel/helper-plugin-utils": ^7.22.5
"@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
"@babel/plugin-syntax-optional-chaining": ^7.8.3
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 98529b9d10b5502ceb87259b538e5649d111ec1582c4c49c620f3181d53489c1ff887075fb208245baa43fa45ae85c9950f0db47be00e55b52c9bcd36271d701
+ checksum: e7a4c08038288057b7a08d68c4d55396ada9278095509ca51ed8dfb72a7f13f26bdd7c5185de21079fe0a9d60d22c227cb32e300d266c1bda40f70eee9f4bc1e
languageName: node
linkType: hard
@@ -1877,6 +2339,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-parameters@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-parameters@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: a735b3e85316d17ec102e3d3d1b6993b429bdb3b494651c9d754e3b7d270462ee1f1a126ccd5e3d871af5e683727e9ef98c9d34d4a42204fffaabff91052ed16
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-private-methods@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-private-methods@npm:7.22.5"
@@ -1889,6 +2362,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-private-methods@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-private-methods@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-class-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: cedc1285c49b5a6d9a3d0e5e413b756ac40b3ac2f8f68bdfc3ae268bc8d27b00abd8bb0861c72756ff5dd8bf1eb77211b7feb5baf4fdae2ebbaabe49b9adc1d0
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-private-property-in-object@npm:^7.22.11":
version: 7.22.11
resolution: "@babel/plugin-transform-private-property-in-object@npm:7.22.11"
@@ -1903,6 +2388,20 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-private-property-in-object@npm:^7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-private-property-in-object@npm:7.23.4"
+ dependencies:
+ "@babel/helper-annotate-as-pure": ^7.22.5
+ "@babel/helper-create-class-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/plugin-syntax-private-property-in-object": ^7.14.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: fb7adfe94ea97542f250a70de32bddbc3e0b802381c92be947fec83ebffda57e68533c4d0697152719a3496fdd3ebf3798d451c024cd4ac848fc15ac26b70aa7
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-property-literals@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-property-literals@npm:7.22.5"
@@ -1914,6 +2413,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-property-literals@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-property-literals@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 16b048c8e87f25095f6d53634ab7912992f78e6997a6ff549edc3cf519db4fca01c7b4e0798530d7f6a05228ceee479251245cdd850a5531c6e6f404104d6cc9
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-regenerator@npm:^7.22.10":
version: 7.22.10
resolution: "@babel/plugin-transform-regenerator@npm:7.22.10"
@@ -1926,6 +2436,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-regenerator@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-regenerator@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ regenerator-transform: ^0.15.2
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 7fdacc7b40008883871b519c9e5cdea493f75495118ccc56ac104b874983569a24edd024f0f5894ba1875c54ee2b442f295d6241c3280e61c725d0dd3317c8e6
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-reserved-words@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-reserved-words@npm:7.22.5"
@@ -1937,9 +2459,20 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-runtime@npm:7.23.2":
- version: 7.23.2
- resolution: "@babel/plugin-transform-runtime@npm:7.23.2"
+"@babel/plugin-transform-reserved-words@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-reserved-words@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 298c4440ddc136784ff920127cea137168e068404e635dc946ddb5d7b2a27b66f1dd4c4acb01f7184478ff7d5c3e7177a127279479926519042948fb7fa0fa48
+ languageName: node
+ linkType: hard
+
+"@babel/plugin-transform-runtime@npm:7.23.4":
+ version: 7.23.4
+ resolution: "@babel/plugin-transform-runtime@npm:7.23.4"
dependencies:
"@babel/helper-module-imports": ^7.22.15
"@babel/helper-plugin-utils": ^7.22.5
@@ -1949,7 +2482,7 @@ __metadata:
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 09f4273bfe9600c67e72e26f853f11c24ee4c1cbb3935c4a28a94d388e7c0d8733479d868c333cb34e9c236f1765788c6daef7852331f5c70a3b5543fd0247a1
+ checksum: a1693d27cd5ce17d0917280942a62bbf4ee27f6f0fe7beb33789bdc699cda21e5253997663248b32e8e36c01ccd202f96246413b9328b70a05d4cf64faa3191e
languageName: node
linkType: hard
@@ -1980,6 +2513,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-shorthand-properties@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-shorthand-properties@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 5d677a03676f9fff969b0246c423d64d77502e90a832665dc872a5a5e05e5708161ce1effd56bb3c0f2c20a1112fca874be57c8a759d8b08152755519281f326
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-spread@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-spread@npm:7.22.5"
@@ -1992,6 +2536,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-spread@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-spread@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ "@babel/helper-skip-transparent-expression-wrappers": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 8fd5cac201e77a0b4825745f4e07a25f923842f282f006b3a79223c00f61075c8868d12eafec86b2642cd0b32077cdd32314e27bcb75ee5e6a68c0144140dcf2
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-sticky-regex@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-sticky-regex@npm:7.22.5"
@@ -2003,6 +2559,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-sticky-regex@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-sticky-regex@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 53e55eb2575b7abfdb4af7e503a2bf7ef5faf8bf6b92d2cd2de0700bdd19e934e5517b23e6dfed94ba50ae516b62f3f916773ef7d9bc81f01503f585051e2949
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-template-literals@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-template-literals@npm:7.22.5"
@@ -2014,6 +2581,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-template-literals@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-template-literals@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: b16c5cb0b8796be0118e9c144d15bdc0d20a7f3f59009c6303a6e9a8b74c146eceb3f05186f5b97afcba7cfa87e34c1585a22186e3d5b22f2fd3d27d959d92b2
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-typeof-symbol@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-typeof-symbol@npm:7.22.5"
@@ -2025,6 +2603,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-typeof-symbol@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 0af7184379d43afac7614fc89b1bdecce4e174d52f4efaeee8ec1a4f2c764356c6dba3525c0685231f1cbf435b6dd4ee9e738d7417f3b10ce8bbe869c32f4384
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-typescript@npm:^7.22.15":
version: 7.22.15
resolution: "@babel/plugin-transform-typescript@npm:7.22.15"
@@ -2050,6 +2639,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-escapes@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-unicode-escapes@npm:7.23.3"
+ dependencies:
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 561c429183a54b9e4751519a3dfba6014431e9cdc1484fad03bdaf96582dfc72c76a4f8661df2aeeae7c34efd0fa4d02d3b83a2f63763ecf71ecc925f9cc1f60
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-property-regex@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.22.5"
@@ -2062,6 +2662,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-property-regex@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: 2298461a194758086d17c23c26c7de37aa533af910f9ebf31ebd0893d4aa317468043d23f73edc782ec21151d3c46cf0ff8098a83b725c49a59de28a1d4d6225
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-regex@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-unicode-regex@npm:7.22.5"
@@ -2074,6 +2686,18 @@ __metadata:
languageName: node
linkType: hard
+"@babel/plugin-transform-unicode-regex@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-unicode-regex@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0-0
+ checksum: c5f835d17483ba899787f92e313dfa5b0055e3deab332f1d254078a2bba27ede47574b6599fcf34d3763f0c048ae0779dc21d2d8db09295edb4057478dc80a9a
+ languageName: node
+ linkType: hard
+
"@babel/plugin-transform-unicode-sets-regex@npm:^7.22.5":
version: 7.22.5
resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.22.5"
@@ -2086,24 +2710,37 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.23.2":
- version: 7.23.2
- resolution: "@babel/preset-env@npm:7.23.2"
+"@babel/plugin-transform-unicode-sets-regex@npm:^7.23.3":
+ version: 7.23.3
+ resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.23.3"
+ dependencies:
+ "@babel/helper-create-regexp-features-plugin": ^7.22.15
+ "@babel/helper-plugin-utils": ^7.22.5
+ peerDependencies:
+ "@babel/core": ^7.0.0
+ checksum: 79d0b4c951955ca68235c87b91ab2b393c96285f8aeaa34d6db416d2ddac90000c9bd6e8c4d82b60a2b484da69930507245035f28ba63c6cae341cf3ba68fdef
+ languageName: node
+ linkType: hard
+
+"@babel/preset-env@npm:7.23.5":
+ version: 7.23.5
+ resolution: "@babel/preset-env@npm:7.23.5"
dependencies:
- "@babel/compat-data": ^7.23.2
+ "@babel/compat-data": ^7.23.5
"@babel/helper-compilation-targets": ^7.22.15
"@babel/helper-plugin-utils": ^7.22.5
- "@babel/helper-validator-option": ^7.22.15
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.22.15
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.22.15
+ "@babel/helper-validator-option": ^7.23.5
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.23.3
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.23.3
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ^7.23.3
"@babel/plugin-proposal-private-property-in-object": 7.21.0-placeholder-for-preset-env.2
"@babel/plugin-syntax-async-generators": ^7.8.4
"@babel/plugin-syntax-class-properties": ^7.12.13
"@babel/plugin-syntax-class-static-block": ^7.14.5
"@babel/plugin-syntax-dynamic-import": ^7.8.3
"@babel/plugin-syntax-export-namespace-from": ^7.8.3
- "@babel/plugin-syntax-import-assertions": ^7.22.5
- "@babel/plugin-syntax-import-attributes": ^7.22.5
+ "@babel/plugin-syntax-import-assertions": ^7.23.3
+ "@babel/plugin-syntax-import-attributes": ^7.23.3
"@babel/plugin-syntax-import-meta": ^7.10.4
"@babel/plugin-syntax-json-strings": ^7.8.3
"@babel/plugin-syntax-logical-assignment-operators": ^7.10.4
@@ -2115,56 +2752,55 @@ __metadata:
"@babel/plugin-syntax-private-property-in-object": ^7.14.5
"@babel/plugin-syntax-top-level-await": ^7.14.5
"@babel/plugin-syntax-unicode-sets-regex": ^7.18.6
- "@babel/plugin-transform-arrow-functions": ^7.22.5
- "@babel/plugin-transform-async-generator-functions": ^7.23.2
- "@babel/plugin-transform-async-to-generator": ^7.22.5
- "@babel/plugin-transform-block-scoped-functions": ^7.22.5
- "@babel/plugin-transform-block-scoping": ^7.23.0
- "@babel/plugin-transform-class-properties": ^7.22.5
- "@babel/plugin-transform-class-static-block": ^7.22.11
- "@babel/plugin-transform-classes": ^7.22.15
- "@babel/plugin-transform-computed-properties": ^7.22.5
- "@babel/plugin-transform-destructuring": ^7.23.0
- "@babel/plugin-transform-dotall-regex": ^7.22.5
- "@babel/plugin-transform-duplicate-keys": ^7.22.5
- "@babel/plugin-transform-dynamic-import": ^7.22.11
- "@babel/plugin-transform-exponentiation-operator": ^7.22.5
- "@babel/plugin-transform-export-namespace-from": ^7.22.11
- "@babel/plugin-transform-for-of": ^7.22.15
- "@babel/plugin-transform-function-name": ^7.22.5
- "@babel/plugin-transform-json-strings": ^7.22.11
- "@babel/plugin-transform-literals": ^7.22.5
- "@babel/plugin-transform-logical-assignment-operators": ^7.22.11
- "@babel/plugin-transform-member-expression-literals": ^7.22.5
- "@babel/plugin-transform-modules-amd": ^7.23.0
- "@babel/plugin-transform-modules-commonjs": ^7.23.0
- "@babel/plugin-transform-modules-systemjs": ^7.23.0
- "@babel/plugin-transform-modules-umd": ^7.22.5
+ "@babel/plugin-transform-arrow-functions": ^7.23.3
+ "@babel/plugin-transform-async-generator-functions": ^7.23.4
+ "@babel/plugin-transform-async-to-generator": ^7.23.3
+ "@babel/plugin-transform-block-scoped-functions": ^7.23.3
+ "@babel/plugin-transform-block-scoping": ^7.23.4
+ "@babel/plugin-transform-class-properties": ^7.23.3
+ "@babel/plugin-transform-class-static-block": ^7.23.4
+ "@babel/plugin-transform-classes": ^7.23.5
+ "@babel/plugin-transform-computed-properties": ^7.23.3
+ "@babel/plugin-transform-destructuring": ^7.23.3
+ "@babel/plugin-transform-dotall-regex": ^7.23.3
+ "@babel/plugin-transform-duplicate-keys": ^7.23.3
+ "@babel/plugin-transform-dynamic-import": ^7.23.4
+ "@babel/plugin-transform-exponentiation-operator": ^7.23.3
+ "@babel/plugin-transform-export-namespace-from": ^7.23.4
+ "@babel/plugin-transform-for-of": ^7.23.3
+ "@babel/plugin-transform-function-name": ^7.23.3
+ "@babel/plugin-transform-json-strings": ^7.23.4
+ "@babel/plugin-transform-literals": ^7.23.3
+ "@babel/plugin-transform-logical-assignment-operators": ^7.23.4
+ "@babel/plugin-transform-member-expression-literals": ^7.23.3
+ "@babel/plugin-transform-modules-amd": ^7.23.3
+ "@babel/plugin-transform-modules-commonjs": ^7.23.3
+ "@babel/plugin-transform-modules-systemjs": ^7.23.3
+ "@babel/plugin-transform-modules-umd": ^7.23.3
"@babel/plugin-transform-named-capturing-groups-regex": ^7.22.5
- "@babel/plugin-transform-new-target": ^7.22.5
- "@babel/plugin-transform-nullish-coalescing-operator": ^7.22.11
- "@babel/plugin-transform-numeric-separator": ^7.22.11
- "@babel/plugin-transform-object-rest-spread": ^7.22.15
- "@babel/plugin-transform-object-super": ^7.22.5
- "@babel/plugin-transform-optional-catch-binding": ^7.22.11
- "@babel/plugin-transform-optional-chaining": ^7.23.0
- "@babel/plugin-transform-parameters": ^7.22.15
- "@babel/plugin-transform-private-methods": ^7.22.5
- "@babel/plugin-transform-private-property-in-object": ^7.22.11
- "@babel/plugin-transform-property-literals": ^7.22.5
- "@babel/plugin-transform-regenerator": ^7.22.10
- "@babel/plugin-transform-reserved-words": ^7.22.5
- "@babel/plugin-transform-shorthand-properties": ^7.22.5
- "@babel/plugin-transform-spread": ^7.22.5
- "@babel/plugin-transform-sticky-regex": ^7.22.5
- "@babel/plugin-transform-template-literals": ^7.22.5
- "@babel/plugin-transform-typeof-symbol": ^7.22.5
- "@babel/plugin-transform-unicode-escapes": ^7.22.10
- "@babel/plugin-transform-unicode-property-regex": ^7.22.5
- "@babel/plugin-transform-unicode-regex": ^7.22.5
- "@babel/plugin-transform-unicode-sets-regex": ^7.22.5
+ "@babel/plugin-transform-new-target": ^7.23.3
+ "@babel/plugin-transform-nullish-coalescing-operator": ^7.23.4
+ "@babel/plugin-transform-numeric-separator": ^7.23.4
+ "@babel/plugin-transform-object-rest-spread": ^7.23.4
+ "@babel/plugin-transform-object-super": ^7.23.3
+ "@babel/plugin-transform-optional-catch-binding": ^7.23.4
+ "@babel/plugin-transform-optional-chaining": ^7.23.4
+ "@babel/plugin-transform-parameters": ^7.23.3
+ "@babel/plugin-transform-private-methods": ^7.23.3
+ "@babel/plugin-transform-private-property-in-object": ^7.23.4
+ "@babel/plugin-transform-property-literals": ^7.23.3
+ "@babel/plugin-transform-regenerator": ^7.23.3
+ "@babel/plugin-transform-reserved-words": ^7.23.3
+ "@babel/plugin-transform-shorthand-properties": ^7.23.3
+ "@babel/plugin-transform-spread": ^7.23.3
+ "@babel/plugin-transform-sticky-regex": ^7.23.3
+ "@babel/plugin-transform-template-literals": ^7.23.3
+ "@babel/plugin-transform-typeof-symbol": ^7.23.3
+ "@babel/plugin-transform-unicode-escapes": ^7.23.3
+ "@babel/plugin-transform-unicode-property-regex": ^7.23.3
+ "@babel/plugin-transform-unicode-regex": ^7.23.3
+ "@babel/plugin-transform-unicode-sets-regex": ^7.23.3
"@babel/preset-modules": 0.1.6-no-external-plugins
- "@babel/types": ^7.23.0
babel-plugin-polyfill-corejs2: ^0.4.6
babel-plugin-polyfill-corejs3: ^0.8.5
babel-plugin-polyfill-regenerator: ^0.5.3
@@ -2172,7 +2808,7 @@ __metadata:
semver: ^6.3.1
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 49327ef584b529b56aedd6577937b80c0d89603c68b23795495a13af04b5aa008db9ad04cd280423600cdc0d3cce13ae9d0d9a977db5c8193697b20ced8a10b2
+ checksum: adddd58d14fc1b2e5f8cf90995f522879362a0543e316afe9e5783f1bd715bb1e92300cd49d7ce3a95c64a96d60788d0089651e2cf4cac937f5469aac1087bb1
languageName: node
linkType: hard
@@ -2338,12 +2974,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/runtime@npm:7.23.2":
- version: 7.23.2
- resolution: "@babel/runtime@npm:7.23.2"
+"@babel/runtime@npm:7.23.5":
+ version: 7.23.5
+ resolution: "@babel/runtime@npm:7.23.5"
dependencies:
regenerator-runtime: ^0.14.0
- checksum: 6c4df4839ec75ca10175f636d6362f91df8a3137f86b38f6cd3a4c90668a0fe8e9281d320958f4fbd43b394988958585a17c3aab2a4ea6bf7316b22916a371fb
+ checksum: 164d9802424f06908e62d29b8fd3a87db55accf82f46f964ac481dcead11ff7df8391e3696e5fa91a8ca10ea8845bf650acd730fa88cf13f8026cd8d5eec6936
languageName: node
linkType: hard
@@ -2403,6 +3039,24 @@ __metadata:
languageName: node
linkType: hard
+"@babel/traverse@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/traverse@npm:7.23.5"
+ dependencies:
+ "@babel/code-frame": ^7.23.5
+ "@babel/generator": ^7.23.5
+ "@babel/helper-environment-visitor": ^7.22.20
+ "@babel/helper-function-name": ^7.23.0
+ "@babel/helper-hoist-variables": ^7.22.5
+ "@babel/helper-split-export-declaration": ^7.22.6
+ "@babel/parser": ^7.23.5
+ "@babel/types": ^7.23.5
+ debug: ^4.1.0
+ globals: ^11.1.0
+ checksum: 0558b05360850c3ad6384e85bd55092126a8d5f93e29a8e227dd58fa1f9e1a4c25fd337c07c7ae509f0983e7a2b1e761ffdcfaa77a1e1bedbc867058e1de5a7d
+ languageName: node
+ linkType: hard
+
"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
version: 7.22.19
resolution: "@babel/types@npm:7.22.19"
@@ -2425,6 +3079,17 @@ __metadata:
languageName: node
linkType: hard
+"@babel/types@npm:^7.23.5":
+ version: 7.23.5
+ resolution: "@babel/types@npm:7.23.5"
+ dependencies:
+ "@babel/helper-string-parser": ^7.23.4
+ "@babel/helper-validator-identifier": ^7.22.20
+ to-fast-properties: ^2.0.0
+ checksum: 3d21774480a459ef13b41c2e32700d927af649e04b70c5d164814d8e04ab584af66a93330602c2925e1a6925c2b829cc153418a613a4e7d79d011be1f29ad4b2
+ languageName: node
+ linkType: hard
+
"@bcoe/v8-coverage@npm:^0.2.3":
version: 0.2.3
resolution: "@bcoe/v8-coverage@npm:0.2.3"
@@ -3053,13 +3718,6 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/android-arm64@npm:0.18.20"
- conditions: os=android & cpu=arm64
- languageName: node
- linkType: hard
-
"@esbuild/android-arm64@npm:0.19.3":
version: 0.19.3
resolution: "@esbuild/android-arm64@npm:0.19.3"
@@ -3067,17 +3725,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/android-arm64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/android-arm64@npm:0.19.5"
+"@esbuild/android-arm64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/android-arm64@npm:0.19.8"
conditions: os=android & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/android-arm@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/android-arm@npm:0.18.20"
- conditions: os=android & cpu=arm
+"@esbuild/android-arm64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/android-arm64@npm:0.19.9"
+ conditions: os=android & cpu=arm64
languageName: node
linkType: hard
@@ -3088,17 +3746,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/android-arm@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/android-arm@npm:0.19.5"
+"@esbuild/android-arm@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/android-arm@npm:0.19.8"
conditions: os=android & cpu=arm
languageName: node
linkType: hard
-"@esbuild/android-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/android-x64@npm:0.18.20"
- conditions: os=android & cpu=x64
+"@esbuild/android-arm@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/android-arm@npm:0.19.9"
+ conditions: os=android & cpu=arm
languageName: node
linkType: hard
@@ -3109,17 +3767,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/android-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/android-x64@npm:0.19.5"
+"@esbuild/android-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/android-x64@npm:0.19.8"
conditions: os=android & cpu=x64
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/darwin-arm64@npm:0.18.20"
- conditions: os=darwin & cpu=arm64
+"@esbuild/android-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/android-x64@npm:0.19.9"
+ conditions: os=android & cpu=x64
languageName: node
linkType: hard
@@ -3130,17 +3788,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/darwin-arm64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/darwin-arm64@npm:0.19.5"
+"@esbuild/darwin-arm64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/darwin-arm64@npm:0.19.8"
conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/darwin-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/darwin-x64@npm:0.18.20"
- conditions: os=darwin & cpu=x64
+"@esbuild/darwin-arm64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/darwin-arm64@npm:0.19.9"
+ conditions: os=darwin & cpu=arm64
languageName: node
linkType: hard
@@ -3151,17 +3809,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/darwin-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/darwin-x64@npm:0.19.5"
+"@esbuild/darwin-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/darwin-x64@npm:0.19.8"
conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/freebsd-arm64@npm:0.18.20"
- conditions: os=freebsd & cpu=arm64
+"@esbuild/darwin-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/darwin-x64@npm:0.19.9"
+ conditions: os=darwin & cpu=x64
languageName: node
linkType: hard
@@ -3172,17 +3830,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/freebsd-arm64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/freebsd-arm64@npm:0.19.5"
+"@esbuild/freebsd-arm64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/freebsd-arm64@npm:0.19.8"
conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/freebsd-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/freebsd-x64@npm:0.18.20"
- conditions: os=freebsd & cpu=x64
+"@esbuild/freebsd-arm64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/freebsd-arm64@npm:0.19.9"
+ conditions: os=freebsd & cpu=arm64
languageName: node
linkType: hard
@@ -3193,17 +3851,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/freebsd-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/freebsd-x64@npm:0.19.5"
+"@esbuild/freebsd-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/freebsd-x64@npm:0.19.8"
conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/linux-arm64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-arm64@npm:0.18.20"
- conditions: os=linux & cpu=arm64
+"@esbuild/freebsd-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/freebsd-x64@npm:0.19.9"
+ conditions: os=freebsd & cpu=x64
languageName: node
linkType: hard
@@ -3214,17 +3872,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-arm64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-arm64@npm:0.19.5"
+"@esbuild/linux-arm64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-arm64@npm:0.19.8"
conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/linux-arm@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-arm@npm:0.18.20"
- conditions: os=linux & cpu=arm
+"@esbuild/linux-arm64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-arm64@npm:0.19.9"
+ conditions: os=linux & cpu=arm64
languageName: node
linkType: hard
@@ -3235,17 +3893,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-arm@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-arm@npm:0.19.5"
+"@esbuild/linux-arm@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-arm@npm:0.19.8"
conditions: os=linux & cpu=arm
languageName: node
linkType: hard
-"@esbuild/linux-ia32@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-ia32@npm:0.18.20"
- conditions: os=linux & cpu=ia32
+"@esbuild/linux-arm@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-arm@npm:0.19.9"
+ conditions: os=linux & cpu=arm
languageName: node
linkType: hard
@@ -3256,17 +3914,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-ia32@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-ia32@npm:0.19.5"
+"@esbuild/linux-ia32@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-ia32@npm:0.19.8"
conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/linux-loong64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-loong64@npm:0.18.20"
- conditions: os=linux & cpu=loong64
+"@esbuild/linux-ia32@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-ia32@npm:0.19.9"
+ conditions: os=linux & cpu=ia32
languageName: node
linkType: hard
@@ -3277,17 +3935,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-loong64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-loong64@npm:0.19.5"
+"@esbuild/linux-loong64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-loong64@npm:0.19.8"
conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
-"@esbuild/linux-mips64el@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-mips64el@npm:0.18.20"
- conditions: os=linux & cpu=mips64el
+"@esbuild/linux-loong64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-loong64@npm:0.19.9"
+ conditions: os=linux & cpu=loong64
languageName: node
linkType: hard
@@ -3298,17 +3956,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-mips64el@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-mips64el@npm:0.19.5"
+"@esbuild/linux-mips64el@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-mips64el@npm:0.19.8"
conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
-"@esbuild/linux-ppc64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-ppc64@npm:0.18.20"
- conditions: os=linux & cpu=ppc64
+"@esbuild/linux-mips64el@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-mips64el@npm:0.19.9"
+ conditions: os=linux & cpu=mips64el
languageName: node
linkType: hard
@@ -3319,17 +3977,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-ppc64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-ppc64@npm:0.19.5"
+"@esbuild/linux-ppc64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-ppc64@npm:0.19.8"
conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-riscv64@npm:0.18.20"
- conditions: os=linux & cpu=riscv64
+"@esbuild/linux-ppc64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-ppc64@npm:0.19.9"
+ conditions: os=linux & cpu=ppc64
languageName: node
linkType: hard
@@ -3340,17 +3998,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-riscv64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-riscv64@npm:0.19.5"
+"@esbuild/linux-riscv64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-riscv64@npm:0.19.8"
conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
-"@esbuild/linux-s390x@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-s390x@npm:0.18.20"
- conditions: os=linux & cpu=s390x
+"@esbuild/linux-riscv64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-riscv64@npm:0.19.9"
+ conditions: os=linux & cpu=riscv64
languageName: node
linkType: hard
@@ -3361,17 +4019,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-s390x@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-s390x@npm:0.19.5"
+"@esbuild/linux-s390x@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-s390x@npm:0.19.8"
conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
-"@esbuild/linux-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/linux-x64@npm:0.18.20"
- conditions: os=linux & cpu=x64
+"@esbuild/linux-s390x@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-s390x@npm:0.19.9"
+ conditions: os=linux & cpu=s390x
languageName: node
linkType: hard
@@ -3382,17 +4040,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/linux-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/linux-x64@npm:0.19.5"
+"@esbuild/linux-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/linux-x64@npm:0.19.8"
conditions: os=linux & cpu=x64
languageName: node
linkType: hard
-"@esbuild/netbsd-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/netbsd-x64@npm:0.18.20"
- conditions: os=netbsd & cpu=x64
+"@esbuild/linux-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/linux-x64@npm:0.19.9"
+ conditions: os=linux & cpu=x64
languageName: node
linkType: hard
@@ -3403,17 +4061,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/netbsd-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/netbsd-x64@npm:0.19.5"
+"@esbuild/netbsd-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/netbsd-x64@npm:0.19.8"
conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/openbsd-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/openbsd-x64@npm:0.18.20"
- conditions: os=openbsd & cpu=x64
+"@esbuild/netbsd-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/netbsd-x64@npm:0.19.9"
+ conditions: os=netbsd & cpu=x64
languageName: node
linkType: hard
@@ -3424,17 +4082,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/openbsd-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/openbsd-x64@npm:0.19.5"
+"@esbuild/openbsd-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/openbsd-x64@npm:0.19.8"
conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/sunos-x64@npm:0.18.20"
- conditions: os=sunos & cpu=x64
+"@esbuild/openbsd-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/openbsd-x64@npm:0.19.9"
+ conditions: os=openbsd & cpu=x64
languageName: node
linkType: hard
@@ -3445,17 +4103,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/sunos-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/sunos-x64@npm:0.19.5"
+"@esbuild/sunos-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/sunos-x64@npm:0.19.8"
conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/win32-arm64@npm:0.18.20"
- conditions: os=win32 & cpu=arm64
+"@esbuild/sunos-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/sunos-x64@npm:0.19.9"
+ conditions: os=sunos & cpu=x64
languageName: node
linkType: hard
@@ -3466,17 +4124,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/win32-arm64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/win32-arm64@npm:0.19.5"
+"@esbuild/win32-arm64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/win32-arm64@npm:0.19.8"
conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
-"@esbuild/win32-ia32@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/win32-ia32@npm:0.18.20"
- conditions: os=win32 & cpu=ia32
+"@esbuild/win32-arm64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/win32-arm64@npm:0.19.9"
+ conditions: os=win32 & cpu=arm64
languageName: node
linkType: hard
@@ -3487,17 +4145,17 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/win32-ia32@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/win32-ia32@npm:0.19.5"
+"@esbuild/win32-ia32@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/win32-ia32@npm:0.19.8"
conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
-"@esbuild/win32-x64@npm:0.18.20":
- version: 0.18.20
- resolution: "@esbuild/win32-x64@npm:0.18.20"
- conditions: os=win32 & cpu=x64
+"@esbuild/win32-ia32@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/win32-ia32@npm:0.19.9"
+ conditions: os=win32 & cpu=ia32
languageName: node
linkType: hard
@@ -3508,9 +4166,16 @@ __metadata:
languageName: node
linkType: hard
-"@esbuild/win32-x64@npm:0.19.5":
- version: 0.19.5
- resolution: "@esbuild/win32-x64@npm:0.19.5"
+"@esbuild/win32-x64@npm:0.19.8":
+ version: 0.19.8
+ resolution: "@esbuild/win32-x64@npm:0.19.8"
+ conditions: os=win32 & cpu=x64
+ languageName: node
+ linkType: hard
+
+"@esbuild/win32-x64@npm:0.19.9":
+ version: 0.19.9
+ resolution: "@esbuild/win32-x64@npm:0.19.9"
conditions: os=win32 & cpu=x64
languageName: node
linkType: hard
@@ -4575,7 +5240,7 @@ __metadata:
languageName: node
linkType: hard
-"@ljharb/through@npm:^2.3.9":
+"@ljharb/through@npm:^2.3.11":
version: 2.3.11
resolution: "@ljharb/through@npm:2.3.11"
dependencies:
@@ -5409,14 +6074,14 @@ __metadata:
languageName: node
linkType: hard
-"@ngtools/webpack@npm:17.0.1":
- version: 17.0.1
- resolution: "@ngtools/webpack@npm:17.0.1"
+"@ngtools/webpack@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@ngtools/webpack@npm:17.1.0-next.1"
peerDependencies:
- "@angular/compiler-cli": ^17.0.0
- typescript: ">=5.2 <5.3"
+ "@angular/compiler-cli": ^17.0.0 || ^17.1.0-next.0
+ typescript: ">=5.2 <5.4"
webpack: ^5.54.0
- checksum: dfd40b92ada65fde2af44c3b2a315f4dd16d487dd0318f7dc8c9128250238e9de42364400dd98e69830a40bca07055fda6224b540e9dfc05541434b160bb171b
+ checksum: cc13d3a308aaa9ee266d1cbe65c66107d95e04e4bdbc13bbbc2b71d5fda47d34dfb8efffee23de87c20d94d0865626beb80c76e8f70aa940d255f829013a1f44
languageName: node
linkType: hard
@@ -6714,14 +7379,25 @@ __metadata:
languageName: node
linkType: hard
-"@schematics/angular@npm:17.0.1":
- version: 17.0.1
- resolution: "@schematics/angular@npm:17.0.1"
+"@schematics/angular@npm:17.0.3":
+ version: 17.0.3
+ resolution: "@schematics/angular@npm:17.0.3"
+ dependencies:
+ "@angular-devkit/core": 17.0.3
+ "@angular-devkit/schematics": 17.0.3
+ jsonc-parser: 3.2.0
+ checksum: c211e74052ab0f9b9ee3a01982aee8828e3d7f82200f3f6942adb9492f6fa94d45cf7bb4029506f4dc76a383cb312ed71de61695f9424fabb5fae848459a6db2
+ languageName: node
+ linkType: hard
+
+"@schematics/angular@npm:17.1.0-next.1":
+ version: 17.1.0-next.1
+ resolution: "@schematics/angular@npm:17.1.0-next.1"
dependencies:
- "@angular-devkit/core": 17.0.1
- "@angular-devkit/schematics": 17.0.1
+ "@angular-devkit/core": 17.1.0-next.1
+ "@angular-devkit/schematics": 17.1.0-next.1
jsonc-parser: 3.2.0
- checksum: 7f006cad03409d78dabf13cba91bc46f3ec770b030160ad89fa662d5c1d95f22b006e2829cb2347c53e2bcb72f0cd2dc0c911f79fae8d5359c20b3b15e256053
+ checksum: df53cb8001997471be9197217e1218fd08ab3bb9a5e0687353cc2e28f1a5d67bf725a9f3525e31eca1e3edcb6e739ad3cb16fec5276c614b898b06e80fadc2e8
languageName: node
linkType: hard
@@ -6878,9 +7554,9 @@ __metadata:
languageName: node
linkType: hard
-"@supabase/supabase-js@npm:^2.38.5":
- version: 2.38.5
- resolution: "@supabase/supabase-js@npm:2.38.5"
+"@supabase/supabase-js@npm:^2.39.0":
+ version: 2.39.0
+ resolution: "@supabase/supabase-js@npm:2.39.0"
dependencies:
"@supabase/functions-js": ^2.1.5
"@supabase/gotrue-js": ^2.56.0
@@ -6888,7 +7564,7 @@ __metadata:
"@supabase/postgrest-js": ^1.8.6
"@supabase/realtime-js": ^2.8.4
"@supabase/storage-js": ^2.5.4
- checksum: db6b77ee1edcc71971e530caaecc0e3d969736212b07dc3505b3397b8daa46582bc1ea7e4ffdb353096af722640d277ee32a5b357f7dc06b41361c336d6bb0e4
+ checksum: 78bc615ddcb686b427d323273afa1d63feca93e0b177a5c41dab51d03d5906a1d8256f6896950604340d25c22b5a354196fffb1d3b841cb695bd7d9f1a904640
languageName: node
linkType: hard
@@ -7223,13 +7899,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/cookie@npm:^0.4.1":
- version: 0.4.1
- resolution: "@types/cookie@npm:0.4.1"
- checksum: 3275534ed69a76c68eb1a77d547d75f99fedc80befb75a3d1d03662fb08d697e6f8b1274e12af1a74c6896071b11510631ba891f64d30c78528d0ec45a9c1a18
- languageName: node
- linkType: hard
-
"@types/cordova@npm:latest":
version: 11.0.1
resolution: "@types/cordova@npm:11.0.1"
@@ -7246,15 +7915,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/cors@npm:^2.8.12":
- version: 2.8.16
- resolution: "@types/cors@npm:2.8.16"
- dependencies:
- "@types/node": "*"
- checksum: 0c760aa826167a42bfbccff00d67e39c9dd9852e0cd88610f6d3ea1ed17e438df0f8f1f3175c77bfbfdee4c77bf677b12f6b5bd309358c30b5d0e758624b7250
- languageName: node
- linkType: hard
-
"@types/d3-array@npm:^1":
version: 1.2.9
resolution: "@types/d3-array@npm:1.2.9"
@@ -7741,15 +8401,6 @@ __metadata:
languageName: node
linkType: hard
-"@types/node@npm:>=10.0.0":
- version: 20.9.1
- resolution: "@types/node@npm:20.9.1"
- dependencies:
- undici-types: ~5.26.4
- checksum: bb893c6790733dac32818c1ca170fa466622dec39a0ade4639463e1358cb811771e242accbd065e7a1bfe59adc989c0ee59be65e462d3a0ab49043426f0b7637
- languageName: node
- linkType: hard
-
"@types/node@npm:^18.14.2, @types/node@npm:^18.17.5":
version: 18.17.17
resolution: "@types/node@npm:18.17.17"
@@ -7827,6 +8478,13 @@ __metadata:
languageName: node
linkType: hard
+"@types/retry@npm:0.12.2":
+ version: 0.12.2
+ resolution: "@types/retry@npm:0.12.2"
+ checksum: e5675035717b39ce4f42f339657cae9637cf0c0051cf54314a6a2c44d38d91f6544be9ddc0280587789b6afd056be5d99dbe3e9f4df68c286c36321579b1bf4a
+ languageName: node
+ linkType: hard
+
"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0":
version: 7.5.5
resolution: "@types/semver@npm:7.5.5"
@@ -8213,6 +8871,17 @@ __metadata:
languageName: node
linkType: hard
+"@uppy/companion-client@npm:^3.6.0":
+ version: 3.6.1
+ resolution: "@uppy/companion-client@npm:3.6.1"
+ dependencies:
+ "@uppy/utils": ^5.6.0
+ namespace-emitter: ^2.0.1
+ p-retry: ^6.1.0
+ checksum: b35a231b52b79cfb2ed5877239cf9bdc37945640a13b06bffae4e8cc3e0d549bd9a8ee6e875af954e673bf7aa26176103d22c2c094275830377ef5eccd49d72e
+ languageName: node
+ linkType: hard
+
"@uppy/core@npm:^3.7.1":
version: 3.7.1
resolution: "@uppy/core@npm:3.7.1"
@@ -8335,6 +9004,19 @@ __metadata:
languageName: node
linkType: hard
+"@uppy/tus@npm:^3.4.0":
+ version: 3.4.0
+ resolution: "@uppy/tus@npm:3.4.0"
+ dependencies:
+ "@uppy/companion-client": ^3.6.0
+ "@uppy/utils": ^5.6.0
+ tus-js-client: ^3.0.0
+ peerDependencies:
+ "@uppy/core": ^3.7.0
+ checksum: 0f6393be525937cba1b624fffc0f0c9cb00f7162efb6fe5a98f2b6a446f0f0b22323950a5ceba4c16c473c9a99bbc161511e04f3e134c06cdea4337428ef2962
+ languageName: node
+ linkType: hard
+
"@uppy/utils@npm:^5.4.3, @uppy/utils@npm:^5.5.2, @uppy/utils@npm:^5.6.0":
version: 5.6.0
resolution: "@uppy/utils@npm:5.6.0"
@@ -8368,12 +9050,12 @@ __metadata:
languageName: node
linkType: hard
-"@vitejs/plugin-basic-ssl@npm:1.0.1":
- version: 1.0.1
- resolution: "@vitejs/plugin-basic-ssl@npm:1.0.1"
+"@vitejs/plugin-basic-ssl@npm:1.0.2":
+ version: 1.0.2
+ resolution: "@vitejs/plugin-basic-ssl@npm:1.0.2"
peerDependencies:
- vite: ^3.0.0 || ^4.0.0
- checksum: 9060dd9b02b51f48f9e655d920214879157db5b8bea9681465ab199e1be4f207cc968393410f93935a0443f8c2b302cef2a3ac0a69087af68fb33a8795e1e203
+ vite: ^3.0.0 || ^4.0.0 || ^5.0.0
+ checksum: aa6df5037c2b4cdfa3d2eb44f1a2402dab112a1ba9de32edf3cbd132894fed46f49a6cdd1006efce4e521decd66777ce18711f44c77129d616042d5539860cc3
languageName: node
linkType: hard
@@ -9019,14 +9701,7 @@ __metadata:
languageName: node
linkType: hard
-"async-each-series@npm:0.1.1":
- version: 0.1.1
- resolution: "async-each-series@npm:0.1.1"
- checksum: 674e5aeee2062a81551ca931a78d0488e10adafda7fd8c9e868a73d4bde78e835c5a04d145f566e32d13b61b31851cea0a6c4e9202b63d2cc6171d8e449a4086
- languageName: node
- linkType: hard
-
-"async@npm:^2.6.0, async@npm:^2.6.4":
+"async@npm:^2.6.4":
version: 2.6.4
resolution: "async@npm:2.6.4"
dependencies:
@@ -9113,15 +9788,6 @@ __metadata:
languageName: node
linkType: hard
-"axios@npm:0.21.4":
- version: 0.21.4
- resolution: "axios@npm:0.21.4"
- dependencies:
- follow-redirects: ^1.14.0
- checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c
- languageName: node
- linkType: hard
-
"axios@npm:^1.5.1":
version: 1.6.2
resolution: "axios@npm:1.6.2"
@@ -9357,13 +10023,6 @@ __metadata:
languageName: node
linkType: hard
-"base64id@npm:2.0.0, base64id@npm:~2.0.0":
- version: 2.0.0
- resolution: "base64id@npm:2.0.0"
- checksum: 581b1d37e6cf3738b7ccdd4d14fe2bfc5c238e696e2720ee6c44c183b838655842e22034e53ffd783f872a539915c51b0d4728a49c7cc678ac5a758e00d62168
- languageName: node
- linkType: hard
-
"basic-auth@npm:^2.0.1":
version: 2.0.1
resolution: "basic-auth@npm:2.0.1"
@@ -9567,71 +10226,6 @@ __metadata:
languageName: node
linkType: hard
-"browser-sync-client@npm:^2.29.3":
- version: 2.29.3
- resolution: "browser-sync-client@npm:2.29.3"
- dependencies:
- etag: 1.8.1
- fresh: 0.5.2
- mitt: ^1.1.3
- checksum: b73d7ffacd957597a1e7ee0b80133ef05908610e6a6e64c95b2dcb80803b6a35474ef9ae414748188c6c74c5ba56e510563e8f3c8d4f1bc7d8d797a689109e07
- languageName: node
- linkType: hard
-
-"browser-sync-ui@npm:^2.29.3":
- version: 2.29.3
- resolution: "browser-sync-ui@npm:2.29.3"
- dependencies:
- async-each-series: 0.1.1
- chalk: 4.1.2
- connect-history-api-fallback: ^1
- immutable: ^3
- server-destroy: 1.0.1
- socket.io-client: ^4.4.1
- stream-throttle: ^0.1.3
- checksum: 0fa95676df642a82f70e339ed75b76ace0a827b97881b74305f03c0d4eb16fcab316fb1beb4b6abd64d62cc78a379c0cf3d3080a97866bccece1f153e23315d4
- languageName: node
- linkType: hard
-
-"browser-sync@npm:2.29.3":
- version: 2.29.3
- resolution: "browser-sync@npm:2.29.3"
- dependencies:
- browser-sync-client: ^2.29.3
- browser-sync-ui: ^2.29.3
- bs-recipes: 1.3.4
- chalk: 4.1.2
- chokidar: ^3.5.1
- connect: 3.6.6
- connect-history-api-fallback: ^1
- dev-ip: ^1.0.1
- easy-extender: ^2.3.4
- eazy-logger: ^4.0.1
- etag: ^1.8.1
- fresh: ^0.5.2
- fs-extra: 3.0.1
- http-proxy: ^1.18.1
- immutable: ^3
- localtunnel: ^2.0.1
- micromatch: ^4.0.2
- opn: 5.3.0
- portscanner: 2.2.0
- raw-body: ^2.3.2
- resp-modifier: 6.0.2
- rx: 4.1.0
- send: 0.16.2
- serve-index: 1.9.1
- serve-static: 1.13.2
- server-destroy: 1.0.1
- socket.io: ^4.4.1
- ua-parser-js: ^1.0.33
- yargs: ^17.3.1
- bin:
- browser-sync: dist/bin.js
- checksum: 232392bf4124767d55112ce98508d47838a8d640b81dd55d8adc03d0deff97c35406ef8fa9a0898e0a9a0f104cb329ad2a309b162257803e6f791fe883fcbcc2
- languageName: node
- linkType: hard
-
"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.21.10, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5, browserslist@npm:^4.21.9":
version: 4.21.10
resolution: "browserslist@npm:4.21.10"
@@ -9669,13 +10263,6 @@ __metadata:
languageName: node
linkType: hard
-"bs-recipes@npm:1.3.4":
- version: 1.3.4
- resolution: "bs-recipes@npm:1.3.4"
- checksum: 2cd89e27730463dac8736f08042faae926f21fbc74788704825b727ad08a85fb5b663d57575aeda3fb188be3c0d446fce60d98560e7b0e76736f1e78e547d345
- languageName: node
- linkType: hard
-
"bser@npm:2.1.1":
version: 2.1.1
resolution: "bser@npm:2.1.1"
@@ -9699,7 +10286,7 @@ __metadata:
languageName: node
linkType: hard
-"buffer-from@npm:^1.0.0":
+"buffer-from@npm:^1.0.0, buffer-from@npm:^1.1.2":
version: 1.1.2
resolution: "buffer-from@npm:1.1.2"
checksum: 0448524a562b37d4d7ed9efd91685a5b77a50672c556ea254ac9a6d30e3403a517d8981f10e565db24e8339413b43c97ca2951f10e399c6125a0d8911f5679bb
@@ -9913,16 +10500,6 @@ __metadata:
languageName: node
linkType: hard
-"chalk@npm:4.1.2, chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
- version: 4.1.2
- resolution: "chalk@npm:4.1.2"
- dependencies:
- ansi-styles: ^4.1.0
- supports-color: ^7.1.0
- checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
- languageName: node
- linkType: hard
-
"chalk@npm:5.3.0, chalk@npm:^5.3.0":
version: 5.3.0
resolution: "chalk@npm:5.3.0"
@@ -9941,6 +10518,16 @@ __metadata:
languageName: node
linkType: hard
+"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.2":
+ version: 4.1.2
+ resolution: "chalk@npm:4.1.2"
+ dependencies:
+ ansi-styles: ^4.1.0
+ supports-color: ^7.1.0
+ checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
+ languageName: node
+ linkType: hard
+
"char-regex@npm:^1.0.2":
version: 1.0.2
resolution: "char-regex@npm:1.0.2"
@@ -9962,7 +10549,7 @@ __metadata:
languageName: node
linkType: hard
-"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.0.0, chokidar@npm:^3.5.1, chokidar@npm:^3.5.3":
+"chokidar@npm:3.5.3, chokidar@npm:>=3.0.0 <4.0.0, chokidar@npm:^3.0.0, chokidar@npm:^3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
dependencies:
@@ -10272,6 +10859,16 @@ __metadata:
languageName: node
linkType: hard
+"combine-errors@npm:^3.0.3":
+ version: 3.0.3
+ resolution: "combine-errors@npm:3.0.3"
+ dependencies:
+ custom-error-instance: 2.1.1
+ lodash.uniqby: 4.5.0
+ checksum: bd0b0d2a4020f9976b8fe8eb7d5aa855b43ecacdcb61ee1fc5664d73ff8c1d7d0bbe4dd948bea7ba1870518bfc5688b89941de7a4967659418b4664cdb02884f
+ languageName: node
+ linkType: hard
+
"combined-stream@npm:^1.0.6, combined-stream@npm:^1.0.8, combined-stream@npm:~1.0.6":
version: 1.0.8
resolution: "combined-stream@npm:1.0.8"
@@ -10288,7 +10885,7 @@ __metadata:
languageName: node
linkType: hard
-"commander@npm:2, commander@npm:^2.2.0, commander@npm:^2.20.0":
+"commander@npm:2, commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
@@ -10423,13 +11020,6 @@ __metadata:
languageName: node
linkType: hard
-"connect-history-api-fallback@npm:^1":
- version: 1.6.0
- resolution: "connect-history-api-fallback@npm:1.6.0"
- checksum: 804ca2be28c999032ecd37a9f71405e5d7b7a4b3defcebbe41077bb8c5a0a150d7b59f51dcc33b2de30bc7e217a31d10f8cfad27e8e74c2fc7655eeba82d6e7e
- languageName: node
- linkType: hard
-
"connect-history-api-fallback@npm:^2.0.0":
version: 2.0.0
resolution: "connect-history-api-fallback@npm:2.0.0"
@@ -10437,18 +11027,6 @@ __metadata:
languageName: node
linkType: hard
-"connect@npm:3.6.6":
- version: 3.6.6
- resolution: "connect@npm:3.6.6"
- dependencies:
- debug: 2.6.9
- finalhandler: 1.1.0
- parseurl: ~1.3.2
- utils-merge: 1.0.1
- checksum: b8038eee6d3febc7c36a1ef24879d9d7d8f596e0ec9b63189f955f615b40db1d83ae3812c6f122f21ad8ecbad1cee446b0a811457808f0cc136a1c80b8d0862f
- languageName: node
- linkType: hard
-
"console-control-strings@npm:^1.1.0":
version: 1.1.0
resolution: "console-control-strings@npm:1.1.0"
@@ -10500,13 +11078,6 @@ __metadata:
languageName: node
linkType: hard
-"cookie@npm:~0.4.1":
- version: 0.4.2
- resolution: "cookie@npm:0.4.2"
- checksum: a00833c998bedf8e787b4c342defe5fa419abd96b32f4464f718b91022586b8f1bafbddd499288e75c037642493c83083da426c6a9080d309e3bd90fd11baa9b
- languageName: node
- linkType: hard
-
"copy-anything@npm:^2.0.1":
version: 2.0.6
resolution: "copy-anything@npm:2.0.6"
@@ -10615,16 +11186,6 @@ __metadata:
languageName: node
linkType: hard
-"cors@npm:~2.8.5":
- version: 2.8.5
- resolution: "cors@npm:2.8.5"
- dependencies:
- object-assign: ^4
- vary: ^1
- checksum: ced838404ccd184f61ab4fdc5847035b681c90db7ac17e428f3d81d69e2989d2b680cc254da0e2554f5ed4f8a341820a1ce3d1c16b499f6e2f47a1b9b07b5006
- languageName: node
- linkType: hard
-
"corser@npm:^2.0.1":
version: 2.0.1
resolution: "corser@npm:2.0.1"
@@ -11107,6 +11668,13 @@ __metadata:
languageName: node
linkType: hard
+"custom-error-instance@npm:2.1.1":
+ version: 2.1.1
+ resolution: "custom-error-instance@npm:2.1.1"
+ checksum: db01483864c9f4356b720b443a1f9b374758745a75199187a0ccc12505cf822bc801a0d8e3f96d727559880024f40e09667d5c08e5de0bff243c6b5ae0bd303c
+ languageName: node
+ linkType: hard
+
"custom-idle-queue@npm:3.0.1":
version: 3.0.1
resolution: "custom-idle-queue@npm:3.0.1"
@@ -11565,18 +12133,6 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4.3.2":
- version: 4.3.2
- resolution: "debug@npm:4.3.2"
- dependencies:
- ms: 2.1.2
- peerDependenciesMeta:
- supports-color:
- optional: true
- checksum: 820ea160e267e23c953c9ed87e7ad93494d8cda2f7349af5e7e3bb236d23707ee3022f477d5a7d2ee86ef2bf7d60aa9ab22d1f58080d7deb9dccd073585e1e43
- languageName: node
- linkType: hard
-
"debug@npm:^3.1.0, debug@npm:^3.2.6, debug@npm:^3.2.7":
version: 3.2.7
resolution: "debug@npm:3.2.7"
@@ -11752,13 +12308,6 @@ __metadata:
languageName: node
linkType: hard
-"destroy@npm:~1.0.4":
- version: 1.0.4
- resolution: "destroy@npm:1.0.4"
- checksum: da9ab4961dc61677c709da0c25ef01733042614453924d65636a7db37308fef8a24cd1e07172e61173d471ca175371295fbc984b0af5b2b4ff47cd57bd784c03
- languageName: node
- linkType: hard
-
"detect-libc@npm:^2.0.0, detect-libc@npm:^2.0.1":
version: 2.0.2
resolution: "detect-libc@npm:2.0.2"
@@ -11793,15 +12342,6 @@ __metadata:
languageName: node
linkType: hard
-"dev-ip@npm:^1.0.1":
- version: 1.0.1
- resolution: "dev-ip@npm:1.0.1"
- bin:
- dev-ip: lib/dev-ip.js
- checksum: 274a6470c2143e4cdcb2b27e0bea137dbc2b42667eb59c890e703185054cb2bcaf2d8533e7ad2f532fe551a90542abc6b37053e8d73918a4fcfb7ffd76589620
- languageName: node
- linkType: hard
-
"devtools-protocol@npm:0.0.1019158":
version: 0.0.1019158
resolution: "devtools-protocol@npm:0.0.1019158"
@@ -11983,24 +12523,6 @@ __metadata:
languageName: node
linkType: hard
-"easy-extender@npm:^2.3.4":
- version: 2.3.4
- resolution: "easy-extender@npm:2.3.4"
- dependencies:
- lodash: ^4.17.10
- checksum: beaca0611fbf661ec3b7405d23ee27894ed00225d7a01c02aecf1a40e9ac751f1364f0627c01f2fca66420adc328b21bb6e113c5c9771c89ff5ecb7e050e897e
- languageName: node
- linkType: hard
-
-"eazy-logger@npm:^4.0.1":
- version: 4.0.1
- resolution: "eazy-logger@npm:4.0.1"
- dependencies:
- chalk: 4.1.2
- checksum: 2005f4676c29675facfce4143ce56f6560721ea60c770167138d2aa4bb27f3713ef76b0370fe1c093d76f71e4344b916a80d07e6f61ccd8dabf0afae5ad92735
- languageName: node
- linkType: hard
-
"ecc-jsbn@npm:~0.1.1":
version: 0.1.2
resolution: "ecc-jsbn@npm:0.1.2"
@@ -12080,7 +12602,7 @@ __metadata:
languageName: node
linkType: hard
-"encodeurl@npm:~1.0.1, encodeurl@npm:~1.0.2":
+"encodeurl@npm:~1.0.2":
version: 1.0.2
resolution: "encodeurl@npm:1.0.2"
checksum: e50e3d508cdd9c4565ba72d2012e65038e5d71bdc9198cb125beb6237b5b1ade6c0d343998da9e170fb2eae52c1bed37d4d6d98a46ea423a0cddbed5ac3f780c
@@ -12125,24 +12647,6 @@ __metadata:
languageName: node
linkType: hard
-"engine.io@npm:~6.5.2":
- version: 6.5.4
- resolution: "engine.io@npm:6.5.4"
- dependencies:
- "@types/cookie": ^0.4.1
- "@types/cors": ^2.8.12
- "@types/node": ">=10.0.0"
- accepts: ~1.3.4
- base64id: 2.0.0
- cookie: ~0.4.1
- cors: ~2.8.5
- debug: ~4.3.1
- engine.io-parser: ~5.2.1
- ws: ~8.11.0
- checksum: d5b55cbac718c5b1c10800314379923f8c7ef9e3a8a60c6827ed86303d1154b81d354a89fdecf4cbb773515c82c84a98d3c791ff88279393b53625dd67299d30
- languageName: node
- linkType: hard
-
"enhanced-resolve@npm:^5.0.0, enhanced-resolve@npm:^5.15.0, enhanced-resolve@npm:^5.7.0":
version: 5.15.0
resolution: "enhanced-resolve@npm:5.15.0"
@@ -12288,12 +12792,12 @@ __metadata:
languageName: node
linkType: hard
-"esbuild-wasm@npm:0.19.5, esbuild-wasm@npm:^0.19.5":
- version: 0.19.5
- resolution: "esbuild-wasm@npm:0.19.5"
+"esbuild-wasm@npm:0.19.8":
+ version: 0.19.8
+ resolution: "esbuild-wasm@npm:0.19.8"
bin:
esbuild: bin/esbuild
- checksum: 175e9a7c8c62bf1fc2341cadb55a6095d0c49af66539b0a27d4df2b9d9b34edfbe4ae35cb5c0131ee1b8e8e7f2c8a2e8ebcd578c4c9dbd831d79c1d33a28905e
+ checksum: 160c9f810c07f790b166bc21fbdd01fc1d928987c8902a274c513a1b0772cff684bade64a6e879d8ff167d1c64ad9a211639daabe79291dc598cbd8f9a275761
languageName: node
linkType: hard
@@ -12306,32 +12810,41 @@ __metadata:
languageName: node
linkType: hard
-"esbuild@npm:0.19.5":
+"esbuild-wasm@npm:^0.19.5":
version: 0.19.5
- resolution: "esbuild@npm:0.19.5"
- dependencies:
- "@esbuild/android-arm": 0.19.5
- "@esbuild/android-arm64": 0.19.5
- "@esbuild/android-x64": 0.19.5
- "@esbuild/darwin-arm64": 0.19.5
- "@esbuild/darwin-x64": 0.19.5
- "@esbuild/freebsd-arm64": 0.19.5
- "@esbuild/freebsd-x64": 0.19.5
- "@esbuild/linux-arm": 0.19.5
- "@esbuild/linux-arm64": 0.19.5
- "@esbuild/linux-ia32": 0.19.5
- "@esbuild/linux-loong64": 0.19.5
- "@esbuild/linux-mips64el": 0.19.5
- "@esbuild/linux-ppc64": 0.19.5
- "@esbuild/linux-riscv64": 0.19.5
- "@esbuild/linux-s390x": 0.19.5
- "@esbuild/linux-x64": 0.19.5
- "@esbuild/netbsd-x64": 0.19.5
- "@esbuild/openbsd-x64": 0.19.5
- "@esbuild/sunos-x64": 0.19.5
- "@esbuild/win32-arm64": 0.19.5
- "@esbuild/win32-ia32": 0.19.5
- "@esbuild/win32-x64": 0.19.5
+ resolution: "esbuild-wasm@npm:0.19.5"
+ bin:
+ esbuild: bin/esbuild
+ checksum: 175e9a7c8c62bf1fc2341cadb55a6095d0c49af66539b0a27d4df2b9d9b34edfbe4ae35cb5c0131ee1b8e8e7f2c8a2e8ebcd578c4c9dbd831d79c1d33a28905e
+ languageName: node
+ linkType: hard
+
+"esbuild@npm:0.19.8":
+ version: 0.19.8
+ resolution: "esbuild@npm:0.19.8"
+ dependencies:
+ "@esbuild/android-arm": 0.19.8
+ "@esbuild/android-arm64": 0.19.8
+ "@esbuild/android-x64": 0.19.8
+ "@esbuild/darwin-arm64": 0.19.8
+ "@esbuild/darwin-x64": 0.19.8
+ "@esbuild/freebsd-arm64": 0.19.8
+ "@esbuild/freebsd-x64": 0.19.8
+ "@esbuild/linux-arm": 0.19.8
+ "@esbuild/linux-arm64": 0.19.8
+ "@esbuild/linux-ia32": 0.19.8
+ "@esbuild/linux-loong64": 0.19.8
+ "@esbuild/linux-mips64el": 0.19.8
+ "@esbuild/linux-ppc64": 0.19.8
+ "@esbuild/linux-riscv64": 0.19.8
+ "@esbuild/linux-s390x": 0.19.8
+ "@esbuild/linux-x64": 0.19.8
+ "@esbuild/netbsd-x64": 0.19.8
+ "@esbuild/openbsd-x64": 0.19.8
+ "@esbuild/sunos-x64": 0.19.8
+ "@esbuild/win32-arm64": 0.19.8
+ "@esbuild/win32-ia32": 0.19.8
+ "@esbuild/win32-x64": 0.19.8
dependenciesMeta:
"@esbuild/android-arm":
optional: true
@@ -12379,7 +12892,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
- checksum: 5a0227cf6ffffa3076714d88230af1dfdd2fc363d91bd712a81fb91230c315a395e2c9b7588eee62986aeebf4999804b9b1b59eeab8e2457184eb0056bfe20c8
+ checksum: 1dff99482ecbfcc642ec66c71e4dc5c73ce6aef68e8158a4937890b570e86a95959ac47e0f14785ba70df5a673ae4289df88a162e9759b02367ed28074cee8ba
languageName: node
linkType: hard
@@ -12460,32 +12973,32 @@ __metadata:
languageName: node
linkType: hard
-"esbuild@npm:^0.18.10":
- version: 0.18.20
- resolution: "esbuild@npm:0.18.20"
- dependencies:
- "@esbuild/android-arm": 0.18.20
- "@esbuild/android-arm64": 0.18.20
- "@esbuild/android-x64": 0.18.20
- "@esbuild/darwin-arm64": 0.18.20
- "@esbuild/darwin-x64": 0.18.20
- "@esbuild/freebsd-arm64": 0.18.20
- "@esbuild/freebsd-x64": 0.18.20
- "@esbuild/linux-arm": 0.18.20
- "@esbuild/linux-arm64": 0.18.20
- "@esbuild/linux-ia32": 0.18.20
- "@esbuild/linux-loong64": 0.18.20
- "@esbuild/linux-mips64el": 0.18.20
- "@esbuild/linux-ppc64": 0.18.20
- "@esbuild/linux-riscv64": 0.18.20
- "@esbuild/linux-s390x": 0.18.20
- "@esbuild/linux-x64": 0.18.20
- "@esbuild/netbsd-x64": 0.18.20
- "@esbuild/openbsd-x64": 0.18.20
- "@esbuild/sunos-x64": 0.18.20
- "@esbuild/win32-arm64": 0.18.20
- "@esbuild/win32-ia32": 0.18.20
- "@esbuild/win32-x64": 0.18.20
+"esbuild@npm:^0.19.3":
+ version: 0.19.9
+ resolution: "esbuild@npm:0.19.9"
+ dependencies:
+ "@esbuild/android-arm": 0.19.9
+ "@esbuild/android-arm64": 0.19.9
+ "@esbuild/android-x64": 0.19.9
+ "@esbuild/darwin-arm64": 0.19.9
+ "@esbuild/darwin-x64": 0.19.9
+ "@esbuild/freebsd-arm64": 0.19.9
+ "@esbuild/freebsd-x64": 0.19.9
+ "@esbuild/linux-arm": 0.19.9
+ "@esbuild/linux-arm64": 0.19.9
+ "@esbuild/linux-ia32": 0.19.9
+ "@esbuild/linux-loong64": 0.19.9
+ "@esbuild/linux-mips64el": 0.19.9
+ "@esbuild/linux-ppc64": 0.19.9
+ "@esbuild/linux-riscv64": 0.19.9
+ "@esbuild/linux-s390x": 0.19.9
+ "@esbuild/linux-x64": 0.19.9
+ "@esbuild/netbsd-x64": 0.19.9
+ "@esbuild/openbsd-x64": 0.19.9
+ "@esbuild/sunos-x64": 0.19.9
+ "@esbuild/win32-arm64": 0.19.9
+ "@esbuild/win32-ia32": 0.19.9
+ "@esbuild/win32-x64": 0.19.9
dependenciesMeta:
"@esbuild/android-arm":
optional: true
@@ -12533,7 +13046,7 @@ __metadata:
optional: true
bin:
esbuild: bin/esbuild
- checksum: 5d253614e50cdb6ec22095afd0c414f15688e7278a7eb4f3720a6dd1306b0909cf431e7b9437a90d065a31b1c57be60130f63fe3e8d0083b588571f31ee6ec7b
+ checksum: 30a510de26068515693f2238d7e9697c68eb7ea3431fb31e6b5797dff576663c79e7c5076a8a227b4011c8050967655af2ab5775c2bffc554a62641bbb742e91
languageName: node
linkType: hard
@@ -12777,7 +13290,7 @@ __metadata:
languageName: node
linkType: hard
-"etag@npm:1.8.1, etag@npm:^1.8.1, etag@npm:~1.8.1":
+"etag@npm:~1.8.1":
version: 1.8.1
resolution: "etag@npm:1.8.1"
checksum: 571aeb3dbe0f2bbd4e4fadbdb44f325fc75335cd5f6f6b6a091e6a06a9f25ed5392f0863c5442acb0646787446e816f13cbfc6edce5b07658541dff573cab1ff
@@ -13054,29 +13567,29 @@ __metadata:
languageName: node
linkType: hard
-"fast-glob@npm:3.3.1, fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0":
- version: 3.3.1
- resolution: "fast-glob@npm:3.3.1"
+"fast-glob@npm:3.3.2, fast-glob@npm:^3.3.1":
+ version: 3.3.2
+ resolution: "fast-glob@npm:3.3.2"
dependencies:
"@nodelib/fs.stat": ^2.0.2
"@nodelib/fs.walk": ^1.2.3
glob-parent: ^5.1.2
merge2: ^1.3.0
micromatch: ^4.0.4
- checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5
+ checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1
languageName: node
linkType: hard
-"fast-glob@npm:^3.3.1":
- version: 3.3.2
- resolution: "fast-glob@npm:3.3.2"
+"fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.12, fast-glob@npm:^3.2.7, fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.0":
+ version: 3.3.1
+ resolution: "fast-glob@npm:3.3.1"
dependencies:
"@nodelib/fs.stat": ^2.0.2
"@nodelib/fs.walk": ^1.2.3
glob-parent: ^5.1.2
merge2: ^1.3.0
micromatch: ^4.0.4
- checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1
+ checksum: b6f3add6403e02cf3a798bfbb1183d0f6da2afd368f27456010c0bc1f9640aea308243d4cb2c0ab142f618276e65ecb8be1661d7c62a7b4e5ba774b9ce5432e5
languageName: node
linkType: hard
@@ -13197,21 +13710,6 @@ __metadata:
languageName: node
linkType: hard
-"finalhandler@npm:1.1.0":
- version: 1.1.0
- resolution: "finalhandler@npm:1.1.0"
- dependencies:
- debug: 2.6.9
- encodeurl: ~1.0.1
- escape-html: ~1.0.3
- on-finished: ~2.3.0
- parseurl: ~1.3.2
- statuses: ~1.3.1
- unpipe: ~1.0.0
- checksum: fb22b420315378b5c5d8a3a96f50c16a3ba3cc56b1ffa0bc65be63de978d08dc255002e4348663a6b2813e3ec6c930b1f1387aa3a0545d9bf4727b0f90a83ff2
- languageName: node
- linkType: hard
-
"finalhandler@npm:1.2.0":
version: 1.2.0
resolution: "finalhandler@npm:1.2.0"
@@ -13349,16 +13847,6 @@ __metadata:
languageName: node
linkType: hard
-"follow-redirects@npm:^1.14.0":
- version: 1.15.3
- resolution: "follow-redirects@npm:1.15.3"
- peerDependenciesMeta:
- debug:
- optional: true
- checksum: 584da22ec5420c837bd096559ebfb8fe69d82512d5585004e36a3b4a6ef6d5905780e0c74508c7b72f907d1fa2b7bd339e613859e9c304d0dc96af2027fd0231
- languageName: node
- linkType: hard
-
"for-each@npm:^0.3.3":
version: 0.3.3
resolution: "for-each@npm:0.3.3"
@@ -13471,28 +13959,17 @@ __metadata:
languageName: node
linkType: hard
-"fresh@npm:0.5.2, fresh@npm:^0.5.2":
+"fresh@npm:0.5.2":
version: 0.5.2
resolution: "fresh@npm:0.5.2"
checksum: 13ea8b08f91e669a64e3ba3a20eb79d7ca5379a81f1ff7f4310d54e2320645503cc0c78daedc93dfb6191287295f6479544a649c64d8e41a1c0fb0c221552346
languageName: node
linkType: hard
-"fs-constants@npm:^1.0.0":
- version: 1.0.0
- resolution: "fs-constants@npm:1.0.0"
- checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d
- languageName: node
- linkType: hard
-
-"fs-extra@npm:3.0.1":
- version: 3.0.1
- resolution: "fs-extra@npm:3.0.1"
- dependencies:
- graceful-fs: ^4.1.2
- jsonfile: ^3.0.0
- universalify: ^0.1.0
- checksum: 8957f9ee33a032b12f786158077dbd2a6b3b843449b36ce37bb3922200bbf12f0412aaebe10e3ce3e46e1f0dd37904e4053b4cfa2a717c80eca3af6dc840ba8b
+"fs-constants@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "fs-constants@npm:1.0.0"
+ checksum: 18f5b718371816155849475ac36c7d0b24d39a11d91348cfcb308b4494824413e03572c403c86d3a260e049465518c4f0d5bd00f0371cdfcad6d4f30a85b350d
languageName: node
linkType: hard
@@ -13562,7 +14039,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2":
+"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3":
version: 2.3.3
resolution: "fsevents@npm:2.3.3"
dependencies:
@@ -13572,7 +14049,7 @@ __metadata:
languageName: node
linkType: hard
-"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin":
+"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin":
version: 2.3.3
resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1"
dependencies:
@@ -14454,13 +14931,6 @@ __metadata:
languageName: node
linkType: hard
-"immutable@npm:^3":
- version: 3.8.2
- resolution: "immutable@npm:3.8.2"
- checksum: 41909b386950ff84ca3cfca77c74cfc87d225a914e98e6c57996fa81a328da61a7c32216d6d5abad40f54747ffdc5c4b02b102e6ad1a504c1752efde8041f964
- languageName: node
- linkType: hard
-
"immutable@npm:^4.0.0":
version: 4.3.4
resolution: "immutable@npm:4.3.4"
@@ -14572,11 +15042,11 @@ __metadata:
languageName: node
linkType: hard
-"inquirer@npm:9.2.11":
- version: 9.2.11
- resolution: "inquirer@npm:9.2.11"
+"inquirer@npm:9.2.12":
+ version: 9.2.12
+ resolution: "inquirer@npm:9.2.12"
dependencies:
- "@ljharb/through": ^2.3.9
+ "@ljharb/through": ^2.3.11
ansi-escapes: ^4.3.2
chalk: ^5.3.0
cli-cursor: ^3.1.0
@@ -14591,7 +15061,7 @@ __metadata:
string-width: ^4.2.3
strip-ansi: ^6.0.1
wrap-ansi: ^6.2.0
- checksum: af59b422eb6005dac90f6c5e8295013d0611ac5471ff4fbf4ad3e228136e0f41db73af2d5a68e36770f9e31ac203ae1589d35c3e970acbc6110bb5df905928f9
+ checksum: 8c372832367f5adb4bb08a0c3ee3b8b16e83202c125d1a681ece2c0ef2f00a5d7d6589a501fd58a0249b4ad49a8013584ac58ae12a20d29b1c24a0ec450927a5
languageName: node
linkType: hard
@@ -14807,12 +15277,10 @@ __metadata:
languageName: node
linkType: hard
-"is-number-like@npm:^1.0.3":
- version: 1.0.8
- resolution: "is-number-like@npm:1.0.8"
- dependencies:
- lodash.isfinite: ^3.3.2
- checksum: cfba928570a4e7d44a9ed9493986091c0d21dfbeb9bbe4cd92785d7a9c8bd4e5f66fc8837b59e793244f0b1bd742b3e4605e85bdcdcc9279a0382163e2174510
+"is-network-error@npm:^1.0.0":
+ version: 1.0.0
+ resolution: "is-network-error@npm:1.0.0"
+ checksum: 2ca2b4b2d420015e0237abe28ebf316fcd26a82304b07432abf155759a3bee6895609ac91e692a72ad61b7fc902c3283b2dece61e1ddb05a6257777a8573e468
languageName: node
linkType: hard
@@ -14935,13 +15403,6 @@ __metadata:
languageName: node
linkType: hard
-"is-wsl@npm:^1.1.0":
- version: 1.1.0
- resolution: "is-wsl@npm:1.1.0"
- checksum: ea157d232351e68c92bd62fc541771096942fe72f69dff452dd26dcc31466258c570a3b04b8cda2e01cd2968255b02951b8670d08ea4ed76d6b1a646061ac4fe
- languageName: node
- linkType: hard
-
"is-wsl@npm:^2.2.0":
version: 2.2.0
resolution: "is-wsl@npm:2.2.0"
@@ -15686,7 +16147,7 @@ __metadata:
languageName: node
linkType: hard
-"js-base64@npm:3.7.5":
+"js-base64@npm:3.7.5, js-base64@npm:^3.7.2":
version: 3.7.5
resolution: "js-base64@npm:3.7.5"
checksum: 67a78c8b1c47b73f1c6fba1957e9fe6fd9dc78ac93ac46cc2e43472dcb9cf150d126fb0e593192e88e0497354fa634d17d255add7cc6ee3c7b4d29870faa8e18
@@ -15883,18 +16344,6 @@ __metadata:
languageName: node
linkType: hard
-"jsonfile@npm:^3.0.0":
- version: 3.0.1
- resolution: "jsonfile@npm:3.0.1"
- dependencies:
- graceful-fs: ^4.1.6
- dependenciesMeta:
- graceful-fs:
- optional: true
- checksum: f2935da339462fe6489c3b8961b637e4eeebd42bcbbe1c8d88f4e937fe19d2d9bc222167281ada2e2f6ddc0324edb43b18107a9b12c743b350326d83ba4db5ef
- languageName: node
- linkType: hard
-
"jsonfile@npm:^6.0.1":
version: 6.1.0
resolution: "jsonfile@npm:6.1.0"
@@ -16145,13 +16594,6 @@ __metadata:
languageName: node
linkType: hard
-"limiter@npm:^1.0.5":
- version: 1.1.5
- resolution: "limiter@npm:1.1.5"
- checksum: 2d51d3a8bef131aada820b76530f8223380a0079aa0fffdfd3ec47ac2f65763225cb4c62a2f22347f4898c5eeb248edfec991c4a4f5b608dfca0aaa37ac48071
- languageName: node
- linkType: hard
-
"lines-and-columns@npm:^1.1.6":
version: 1.2.4
resolution: "lines-and-columns@npm:1.2.4"
@@ -16251,20 +16693,6 @@ __metadata:
languageName: node
linkType: hard
-"localtunnel@npm:^2.0.1":
- version: 2.0.2
- resolution: "localtunnel@npm:2.0.2"
- dependencies:
- axios: 0.21.4
- debug: 4.3.2
- openurl: 1.1.1
- yargs: 17.1.1
- bin:
- lt: bin/lt.js
- checksum: 181452d945a915d68c5c6e6ff5c7375f970dcbbe39d854ac8533c893bd133a3f5afd358ecd63ac84947319073a75e880552441c88380cb14446a67018209f0f1
- languageName: node
- linkType: hard
-
"locate-path@npm:^5.0.0":
version: 5.0.0
resolution: "locate-path@npm:5.0.0"
@@ -16292,6 +16720,55 @@ __metadata:
languageName: node
linkType: hard
+"lodash._baseiteratee@npm:~4.7.0":
+ version: 4.7.0
+ resolution: "lodash._baseiteratee@npm:4.7.0"
+ dependencies:
+ lodash._stringtopath: ~4.8.0
+ checksum: 814a7125b9e2fa7e436c4402eae842a200189e2839b56bd6cde7cd0a3628b60842f5d39a9f5dceaf8766669b2e4a17a36ce2a213d1d6a891c1bef8a6bda36ea9
+ languageName: node
+ linkType: hard
+
+"lodash._basetostring@npm:~4.12.0":
+ version: 4.12.0
+ resolution: "lodash._basetostring@npm:4.12.0"
+ checksum: ccaf83827f86be5c9daeb7b939f761d6a43f0de0781bc3b6772fcb8568fbcbfa1e1082c66e5e12dd23e00ac40a18349c5a793a6a552e3574cbbcb3e1545fcb4c
+ languageName: node
+ linkType: hard
+
+"lodash._baseuniq@npm:~4.6.0":
+ version: 4.6.0
+ resolution: "lodash._baseuniq@npm:4.6.0"
+ dependencies:
+ lodash._createset: ~4.0.0
+ lodash._root: ~3.0.0
+ checksum: 8c16fe2e80716b18c2f28bbcc902768141d432b0b98e03b30a2fba6a097377fabdc8753da232568375d2aa9502dc6b3a390200aa1467d2f685a582a46a271936
+ languageName: node
+ linkType: hard
+
+"lodash._createset@npm:~4.0.0":
+ version: 4.0.3
+ resolution: "lodash._createset@npm:4.0.3"
+ checksum: fb4450fbf4846aa7b420837ee44400b88664e28499388b7e04b4db38adca1305915f68a245fb2a87e031e7f440b997de4f360de6dea2712952520e97c7898de1
+ languageName: node
+ linkType: hard
+
+"lodash._root@npm:~3.0.0":
+ version: 3.0.1
+ resolution: "lodash._root@npm:3.0.1"
+ checksum: 3e12c6f409ae13164a8db358f44a691f1e038dad4e25463802980d0ed641ed118c147b65657501c51778c885422b913264dfbe33ec0c5d676443dd630a7e685a
+ languageName: node
+ linkType: hard
+
+"lodash._stringtopath@npm:~4.8.0":
+ version: 4.8.0
+ resolution: "lodash._stringtopath@npm:4.8.0"
+ dependencies:
+ lodash._basetostring: ~4.12.0
+ checksum: 00663b317796333e6315ebb4e8b590e68845de10d5d25c7585751fd9d28adf3e60e1ce85a6fbb6a0d440447c841465b91877e761239e358231eed2f52f0a5472
+ languageName: node
+ linkType: hard
+
"lodash.camelcase@npm:^4.3.0":
version: 4.3.0
resolution: "lodash.camelcase@npm:4.3.0"
@@ -16327,13 +16804,6 @@ __metadata:
languageName: node
linkType: hard
-"lodash.isfinite@npm:^3.3.2":
- version: 3.3.2
- resolution: "lodash.isfinite@npm:3.3.2"
- checksum: 5e9f9c27fdcdb940f7d4bd3546f584502448004825ce42dc6c40cbee6a3de73d825f9aced3f5b50ff0f613b8dcb1b985fe6e29d172522d1d7975d3f8d02cef86
- languageName: node
- linkType: hard
-
"lodash.memoize@npm:4.x, lodash.memoize@npm:^4.1.2":
version: 4.1.2
resolution: "lodash.memoize@npm:4.1.2"
@@ -16355,6 +16825,13 @@ __metadata:
languageName: node
linkType: hard
+"lodash.throttle@npm:^4.1.1":
+ version: 4.1.1
+ resolution: "lodash.throttle@npm:4.1.1"
+ checksum: 129c0a28cee48b348aef146f638ef8a8b197944d4e9ec26c1890c19d9bf5a5690fe11b655c77a4551268819b32d27f4206343e30c78961f60b561b8608c8c805
+ languageName: node
+ linkType: hard
+
"lodash.uniq@npm:^4.5.0":
version: 4.5.0
resolution: "lodash.uniq@npm:4.5.0"
@@ -16362,7 +16839,17 @@ __metadata:
languageName: node
linkType: hard
-"lodash@npm:^4.17.10, lodash@npm:^4.17.14, lodash@npm:^4.17.21":
+"lodash.uniqby@npm:4.5.0":
+ version: 4.5.0
+ resolution: "lodash.uniqby@npm:4.5.0"
+ dependencies:
+ lodash._baseiteratee: ~4.7.0
+ lodash._baseuniq: ~4.6.0
+ checksum: 40a4fdd4c31323fcb6db91ec3124020333212ca1f13e75cc9939decdd33e8b176d204fb277be36a51a855c2c90e14d67932b3b130b2f0eedc729e4cb9cdcaed1
+ languageName: node
+ linkType: hard
+
+"lodash@npm:^4.17.14, lodash@npm:^4.17.21":
version: 4.17.21
resolution: "lodash@npm:4.17.21"
checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7
@@ -16704,15 +17191,6 @@ __metadata:
languageName: node
linkType: hard
-"mime@npm:1.4.1":
- version: 1.4.1
- resolution: "mime@npm:1.4.1"
- bin:
- mime: cli.js
- checksum: 14c9de5c801ddad82619b66049f3314bbced9667689eed769fab64a323e79b3535ab650e9607670e52371b16436a49af3c0473d965ec743de931cb5d73d3adba
- languageName: node
- linkType: hard
-
"mime@npm:1.6.0, mime@npm:^1.4.1, mime@npm:^1.6.0":
version: 1.6.0
resolution: "mime@npm:1.6.0"
@@ -16797,7 +17275,7 @@ __metadata:
languageName: node
linkType: hard
-"minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
+"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2":
version: 3.1.2
resolution: "minimatch@npm:3.1.2"
dependencies:
@@ -16957,13 +17435,6 @@ __metadata:
languageName: node
linkType: hard
-"mitt@npm:^1.1.3":
- version: 1.2.0
- resolution: "mitt@npm:1.2.0"
- checksum: 53abb94c6203250e2498e152ae096288c4866c6aab1dc093922084a7414af4aa6cda5a51d480267a8f0bd7908b0e896099bc953317aca8a18672dc67ee7e923d
- languageName: node
- linkType: hard
-
"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3":
version: 0.5.3
resolution: "mkdirp-classic@npm:0.5.3"
@@ -17139,6 +17610,15 @@ __metadata:
languageName: node
linkType: hard
+"nanoid@npm:^3.3.7":
+ version: 3.3.7
+ resolution: "nanoid@npm:3.3.7"
+ bin:
+ nanoid: bin/nanoid.cjs
+ checksum: d36c427e530713e4ac6567d488b489a36582ef89da1d6d4e3b87eded11eb10d7042a877958c6f104929809b2ab0bafa17652b076cdf84324aa75b30b722204f2
+ languageName: node
+ linkType: hard
+
"nanoid@npm:^4.0.0":
version: 4.0.2
resolution: "nanoid@npm:4.0.2"
@@ -17816,7 +18296,7 @@ __metadata:
languageName: node
linkType: hard
-"object-assign@npm:^4, object-assign@npm:^4.0.1":
+"object-assign@npm:^4.0.1":
version: 4.1.1
resolution: "object-assign@npm:4.1.1"
checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
@@ -17884,15 +18364,6 @@ __metadata:
languageName: node
linkType: hard
-"on-finished@npm:~2.3.0":
- version: 2.3.0
- resolution: "on-finished@npm:2.3.0"
- dependencies:
- ee-first: 1.1.1
- checksum: 1db595bd963b0124d6fa261d18320422407b8f01dc65863840f3ddaaf7bcad5b28ff6847286703ca53f4ec19595bd67a2f1253db79fc4094911ec6aa8df1671b
- languageName: node
- linkType: hard
-
"on-headers@npm:~1.0.2":
version: 1.0.2
resolution: "on-headers@npm:1.0.2"
@@ -17956,22 +18427,6 @@ __metadata:
languageName: node
linkType: hard
-"openurl@npm:1.1.1":
- version: 1.1.1
- resolution: "openurl@npm:1.1.1"
- checksum: c90f2f065bc5950f1402aff67a3ce4b5fb0e4475cb07b5ff84247686f7436fbc5bc2d0e38bda4ebc9cf8aea866788424e07f25a68f7e97502d412527964351a9
- languageName: node
- linkType: hard
-
-"opn@npm:5.3.0":
- version: 5.3.0
- resolution: "opn@npm:5.3.0"
- dependencies:
- is-wsl: ^1.1.0
- checksum: 7f8620c47a213c1e0ddea97a238be9cc35df99480bc43f165165e06c03867fdeea352b455af585ba7a7a788c0c5c934d04926d94ae54dddff30e7e4290b488bc
- languageName: node
- linkType: hard
-
"optionator@npm:^0.9.3":
version: 0.9.3
resolution: "optionator@npm:0.9.3"
@@ -18133,6 +18588,17 @@ __metadata:
languageName: node
linkType: hard
+"p-retry@npm:^6.1.0":
+ version: 6.1.0
+ resolution: "p-retry@npm:6.1.0"
+ dependencies:
+ "@types/retry": 0.12.2
+ is-network-error: ^1.0.0
+ retry: ^0.13.1
+ checksum: 1083b2b72672205680f8a736583e31dce5d4ae472996cd06f4a33cd7ea11798d7712c202d253eb8afbdc80abf52f049651989c59f2e2ccca529e6b64d722b1f7
+ languageName: node
+ linkType: hard
+
"p-timeout@npm:^3.2.0":
version: 3.2.0
resolution: "p-timeout@npm:3.2.0"
@@ -18156,9 +18622,9 @@ __metadata:
languageName: node
linkType: hard
-"pacote@npm:17.0.4":
- version: 17.0.4
- resolution: "pacote@npm:17.0.4"
+"pacote@npm:17.0.5":
+ version: 17.0.5
+ resolution: "pacote@npm:17.0.5"
dependencies:
"@npmcli/git": ^5.0.0
"@npmcli/installed-package-contents": ^2.0.1
@@ -18180,7 +18646,7 @@ __metadata:
tar: ^6.1.11
bin:
pacote: lib/bin.js
- checksum: 931968cfb513d5bb40fcae8b5350c18d9734a50a8e848254ce2723de0fbd0f55a17959240ba53ee8185987c84ba9d3f71af9a5e6106746b867dc1f1e191ee9ce
+ checksum: 9cc3f4e0bfa1508b61ee301e08165cc137b14da5574b0b235b3072ea79bfbe1cd0ee855a21b4eb4406dd8507eef7563c8450cd74a9616b7661e89391d10a8fb5
languageName: node
linkType: hard
@@ -18419,22 +18885,22 @@ __metadata:
version: 0.0.0-use.local
resolution: "picsa-apps@workspace:."
dependencies:
- "@angular-devkit/build-angular": 17.0.1
- "@angular-devkit/core": 17.0.1
- "@angular-devkit/schematics": 17.0.1
+ "@angular-devkit/build-angular": 17.1.0-next.1
+ "@angular-devkit/core": 17.1.0-next.1
+ "@angular-devkit/schematics": 17.1.0-next.1
"@angular-eslint/eslint-plugin": 17.1.0
"@angular-eslint/eslint-plugin-template": 17.1.0
"@angular-eslint/template-parser": 17.1.0
"@angular/animations": 17.0.3
- "@angular/cdk": 17.0.1
- "@angular/cli": ~17.0.0
+ "@angular/cdk": 17.0.3
+ "@angular/cli": 17.1.0-next.1
"@angular/common": 17.0.3
"@angular/compiler": 17.0.3
- "@angular/compiler-cli": 17.0.3
+ "@angular/compiler-cli": 17.1.0-next.1
"@angular/core": 17.0.3
"@angular/forms": 17.0.3
"@angular/language-service": 17.0.3
- "@angular/material": 17.0.1
+ "@angular/material": 17.0.3
"@angular/platform-browser": 17.0.3
"@angular/platform-browser-dynamic": 17.0.3
"@angular/router": 17.0.3
@@ -18469,11 +18935,11 @@ __metadata:
"@nx/web": 17.1.2
"@nx/workspace": 17.1.2
"@nxext/stencil": ^17.0.2
- "@schematics/angular": 17.0.1
+ "@schematics/angular": 17.0.3
"@stencil/angular-output-target": ^0.7.1
"@stencil/core": 3.2.2
"@stencil/sass": ^3.0.2
- "@supabase/supabase-js": ^2.38.5
+ "@supabase/supabase-js": ^2.39.0
"@swc-node/register": ~1.6.7
"@swc/core": ~1.3.85
"@types/c3": ^0.7.8
@@ -18494,6 +18960,7 @@ __metadata:
"@uppy/drag-drop": ^3.0.3
"@uppy/progress-bar": ^3.0.4
"@uppy/status-bar": ^3.2.5
+ "@uppy/tus": ^3.4.0
"@vendure/ngx-translate-extract": ^8
autoprefixer: ^10.4.0
c3: ^0.7.20
@@ -18558,7 +19025,7 @@ __metadata:
save-svg-as-png: ^1.4.17
sharp: ^0.31.3
stacktrace-js: ^2.0.2
- supabase: ^1.113.2
+ supabase: 1.115.4
tailwindcss: ^3.0.2
ts-jest: 29.1.1
ts-node: 10.9.1
@@ -18598,7 +19065,21 @@ __metadata:
languageName: node
linkType: hard
-"piscina@npm:4.1.0, piscina@npm:^4.1.0":
+"piscina@npm:4.2.0":
+ version: 4.2.0
+ resolution: "piscina@npm:4.2.0"
+ dependencies:
+ hdr-histogram-js: ^2.0.1
+ hdr-histogram-percentiles-obj: ^3.0.0
+ nice-napi: ^1.0.2
+ dependenciesMeta:
+ nice-napi:
+ optional: true
+ checksum: ce80db687586efebb89bf3e86b25cd6a0c7ba6bb8f6b773f470c8b924ea52d8569a72d868643be4d674ea46698c6e0e4584608ea6528defa0709b9314c4c864d
+ languageName: node
+ linkType: hard
+
+"piscina@npm:^4.1.0":
version: 4.1.0
resolution: "piscina@npm:4.1.0"
dependencies:
@@ -18660,16 +19141,6 @@ __metadata:
languageName: node
linkType: hard
-"portscanner@npm:2.2.0":
- version: 2.2.0
- resolution: "portscanner@npm:2.2.0"
- dependencies:
- async: ^2.6.0
- is-number-like: ^1.0.3
- checksum: 5ca0b5bab4797327607a2979251057e476b2caf26dd17c7d628d059bd8962c23803a2b12ff2a72fca207dfb10563b158b915f6c38bc8319a4f351323266786c7
- languageName: node
- linkType: hard
-
"postcss-calc@npm:^9.0.0":
version: 9.0.1
resolution: "postcss-calc@npm:9.0.1"
@@ -19153,14 +19624,14 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:8.4.31, postcss@npm:^8.4.27, postcss@npm:^8.4.31":
- version: 8.4.31
- resolution: "postcss@npm:8.4.31"
+"postcss@npm:8.4.32, postcss@npm:^8.4.32":
+ version: 8.4.32
+ resolution: "postcss@npm:8.4.32"
dependencies:
- nanoid: ^3.3.6
+ nanoid: ^3.3.7
picocolors: ^1.0.0
source-map-js: ^1.0.2
- checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
+ checksum: 220d9d0bf5d65be7ed31006c523bfb11619461d296245c1231831f90150aeb4a31eab9983ac9c5c89759a3ca8b60b3e0d098574964e1691673c3ce5c494305ae
languageName: node
linkType: hard
@@ -19175,6 +19646,17 @@ __metadata:
languageName: node
linkType: hard
+"postcss@npm:^8.4.31":
+ version: 8.4.31
+ resolution: "postcss@npm:8.4.31"
+ dependencies:
+ nanoid: ^3.3.6
+ picocolors: ^1.0.0
+ source-map-js: ^1.0.2
+ checksum: 1d8611341b073143ad90486fcdfeab49edd243377b1f51834dc4f6d028e82ce5190e4f11bb2633276864503654fb7cab28e67abdc0fbf9d1f88cad4a0ff0beea
+ languageName: node
+ linkType: hard
+
"preact@npm:^10.5.13":
version: 10.19.2
resolution: "preact@npm:10.19.2"
@@ -19300,6 +19782,17 @@ __metadata:
languageName: node
linkType: hard
+"proper-lockfile@npm:^4.1.2":
+ version: 4.1.2
+ resolution: "proper-lockfile@npm:4.1.2"
+ dependencies:
+ graceful-fs: ^4.2.4
+ retry: ^0.12.0
+ signal-exit: ^3.0.2
+ checksum: 00078ee6a61c216a56a6140c7d2a98c6c733b3678503002dc073ab8beca5d50ca271de4c85fca13b9b8ee2ff546c36674d1850509b84a04a5d0363bcb8638939
+ languageName: node
+ linkType: hard
+
"protobufjs@npm:^6.11.3":
version: 6.11.4
resolution: "protobufjs@npm:6.11.4"
@@ -19476,7 +19969,7 @@ __metadata:
languageName: node
linkType: hard
-"range-parser@npm:^1.2.1, range-parser@npm:~1.2.0, range-parser@npm:~1.2.1":
+"range-parser@npm:^1.2.1, range-parser@npm:~1.2.1":
version: 1.2.1
resolution: "range-parser@npm:1.2.1"
checksum: 0a268d4fea508661cf5743dfe3d5f47ce214fd6b7dec1de0da4d669dd4ef3d2144468ebe4179049eff253d9d27e719c88dae55be64f954e80135a0cada804ec9
@@ -19495,18 +19988,6 @@ __metadata:
languageName: node
linkType: hard
-"raw-body@npm:^2.3.2":
- version: 2.5.2
- resolution: "raw-body@npm:2.5.2"
- dependencies:
- bytes: 3.1.2
- http-errors: 2.0.0
- iconv-lite: 0.4.24
- unpipe: 1.0.0
- checksum: ba1583c8d8a48e8fbb7a873fdbb2df66ea4ff83775421bfe21ee120140949ab048200668c47d9ae3880012f6e217052690628cf679ddfbd82c9fc9358d574676
- languageName: node
- linkType: hard
-
"rc@npm:^1.2.7":
version: 1.2.8
resolution: "rc@npm:1.2.8"
@@ -19852,16 +20333,6 @@ __metadata:
languageName: node
linkType: hard
-"resp-modifier@npm:6.0.2":
- version: 6.0.2
- resolution: "resp-modifier@npm:6.0.2"
- dependencies:
- debug: ^2.2.0
- minimatch: ^3.0.2
- checksum: b8403e16e8489723f87c8ca35288a0c688479b64ec5d1829ec74ccf63fa93ae55e0cb02db2ccd75a3c7c7edb9e024e9b8a3810a30c9f5398bb97f745031d22c0
- languageName: node
- linkType: hard
-
"restore-cursor@npm:^3.1.0":
version: 3.1.0
resolution: "restore-cursor@npm:3.1.0"
@@ -19980,20 +20451,6 @@ __metadata:
languageName: node
linkType: hard
-"rollup@npm:^3.27.1":
- version: 3.29.4
- resolution: "rollup@npm:3.29.4"
- dependencies:
- fsevents: ~2.3.2
- dependenciesMeta:
- fsevents:
- optional: true
- bin:
- rollup: dist/bin/rollup
- checksum: 8bb20a39c8d91130825159c3823eccf4dc2295c9a0a5c4ed851a5bf2167dbf24d9a29f23461a54c955e5506395e6cc188eafc8ab0e20399d7489fb33793b184e
- languageName: node
- linkType: hard
-
"rollup@npm:^4.2.0":
version: 4.4.1
resolution: "rollup@npm:4.4.1"
@@ -20067,13 +20524,6 @@ __metadata:
languageName: node
linkType: hard
-"rx@npm:4.1.0":
- version: 4.1.0
- resolution: "rx@npm:4.1.0"
- checksum: 64edd278f2e32361bdbaa44bd503e2d1caf1331cece2db87852925b4f58f407563d879ce9df0ac2a593b4588c552437e18bbd53ea361f0b3f2f274a7a5cc4c21
- languageName: node
- linkType: hard
-
"rxdb@npm:^14.11.1":
version: 14.17.0
resolution: "rxdb@npm:14.17.0"
@@ -20357,27 +20807,6 @@ __metadata:
languageName: node
linkType: hard
-"send@npm:0.16.2":
- version: 0.16.2
- resolution: "send@npm:0.16.2"
- dependencies:
- debug: 2.6.9
- depd: ~1.1.2
- destroy: ~1.0.4
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- etag: ~1.8.1
- fresh: 0.5.2
- http-errors: ~1.6.2
- mime: 1.4.1
- ms: 2.0.0
- on-finished: ~2.3.0
- range-parser: ~1.2.0
- statuses: ~1.4.0
- checksum: 54775ccc7ecc1ab5e7c8dd7576ce186d74c19f3adad70f0b583abb0ec33fbd6c13d59181fe2054bc21425814f23bad36120d78a99e1e86734b1f3694800700cf
- languageName: node
- linkType: hard
-
"send@npm:0.18.0":
version: 0.18.0
resolution: "send@npm:0.18.0"
@@ -20408,7 +20837,7 @@ __metadata:
languageName: node
linkType: hard
-"serve-index@npm:1.9.1, serve-index@npm:^1.9.1":
+"serve-index@npm:^1.9.1":
version: 1.9.1
resolution: "serve-index@npm:1.9.1"
dependencies:
@@ -20423,18 +20852,6 @@ __metadata:
languageName: node
linkType: hard
-"serve-static@npm:1.13.2":
- version: 1.13.2
- resolution: "serve-static@npm:1.13.2"
- dependencies:
- encodeurl: ~1.0.2
- escape-html: ~1.0.3
- parseurl: ~1.3.2
- send: 0.16.2
- checksum: 19244f8744984205dc0d9c1f6327d4d13dd691401b9619096c71260c9cb0b8173328b5de1558336bf57884864a15f23949e22924f388a4813604fd768de9fd55
- languageName: node
- linkType: hard
-
"serve-static@npm:1.15.0":
version: 1.15.0
resolution: "serve-static@npm:1.15.0"
@@ -20447,13 +20864,6 @@ __metadata:
languageName: node
linkType: hard
-"server-destroy@npm:1.0.1":
- version: 1.0.1
- resolution: "server-destroy@npm:1.0.1"
- checksum: cbc19d4f92d25a0a34430c6a09faccbea77d1a69563560eefe883feb67c14c3fb3a1c5af1affae0e82d537886ea0f91d317e39e46b5d6425de3acf57a3ab13e3
- languageName: node
- linkType: hard
-
"set-blocking@npm:^2.0.0":
version: 2.0.0
resolution: "set-blocking@npm:2.0.0"
@@ -20681,16 +21091,7 @@ __metadata:
languageName: node
linkType: hard
-"socket.io-adapter@npm:~2.5.2":
- version: 2.5.2
- resolution: "socket.io-adapter@npm:2.5.2"
- dependencies:
- ws: ~8.11.0
- checksum: 481251c3547221e57eb5cb247d0b1a3cde4d152a4c1c9051cc887345a7770e59f3b47f1011cac4499e833f01fcfc301ed13c4ec6e72f7dbb48a476375a6344cd
- languageName: node
- linkType: hard
-
-"socket.io-client@npm:4.7.2, socket.io-client@npm:^4.4.1":
+"socket.io-client@npm:4.7.2":
version: 4.7.2
resolution: "socket.io-client@npm:4.7.2"
dependencies:
@@ -20712,21 +21113,6 @@ __metadata:
languageName: node
linkType: hard
-"socket.io@npm:^4.4.1":
- version: 4.7.2
- resolution: "socket.io@npm:4.7.2"
- dependencies:
- accepts: ~1.3.4
- base64id: ~2.0.0
- cors: ~2.8.5
- debug: ~4.3.2
- engine.io: ~6.5.2
- socket.io-adapter: ~2.5.2
- socket.io-parser: ~4.2.4
- checksum: 2dfac8983a75e100e889c3dafc83b21b75a9863d0d1ee79cdc60c4391d5d9dffcf3a86fc8deca7568032bc11c2572676335fd2e469c7982f40d19f1141d4b266
- languageName: node
- linkType: hard
-
"sockjs@npm:^0.3.24":
version: 0.3.24
resolution: "sockjs@npm:0.3.24"
@@ -21035,32 +21421,6 @@ __metadata:
languageName: node
linkType: hard
-"statuses@npm:~1.3.1":
- version: 1.3.1
- resolution: "statuses@npm:1.3.1"
- checksum: da573f84ee32303ccb06f51dc1fc2ef592f4837d2d3fde8a9d1440058c6ae05805bca7cd3567c7fb9d6c4455a546ed8582a4ec647c8ceeae1654be8cd77e5a24
- languageName: node
- linkType: hard
-
-"statuses@npm:~1.4.0":
- version: 1.4.0
- resolution: "statuses@npm:1.4.0"
- checksum: a9e7fbd3bc4859643e183101ed074c877fb70fb2d32379320713e78106360ef0d41d31598e1345390cf4a003d108edecb9607eb466bfbc31ec808c13a527434f
- languageName: node
- linkType: hard
-
-"stream-throttle@npm:^0.1.3":
- version: 0.1.3
- resolution: "stream-throttle@npm:0.1.3"
- dependencies:
- commander: ^2.2.0
- limiter: ^1.0.5
- bin:
- throttleproxy: ./bin/throttleproxy.js
- checksum: 93d870b37266e61753c2d0c1227cf4c7bef3562b0d018291b4ccc1fe7063041a04ec165f2dcfe6f1b9dfb749fecb58abd34377b10cd793277eff3a652695831b
- languageName: node
- linkType: hard
-
"string-argv@npm:0.3.2":
version: 0.3.2
resolution: "string-argv@npm:0.3.2"
@@ -21265,9 +21625,9 @@ __metadata:
languageName: node
linkType: hard
-"supabase@npm:^1.113.2":
- version: 1.115.2
- resolution: "supabase@npm:1.115.2"
+"supabase@npm:1.115.4":
+ version: 1.115.4
+ resolution: "supabase@npm:1.115.4"
dependencies:
bin-links: ^4.0.1
https-proxy-agent: ^7.0.2
@@ -21275,7 +21635,7 @@ __metadata:
tar: 6.2.0
bin:
supabase: bin/supabase
- checksum: 4257a406e5088d67435aea33d8b3e39d7c41b6f3ce4d6f6ef77dd11d6dbd067e19fd9169542d9913753cf6c76b52b9f082259ac375b2415dddb12417ce531f83
+ checksum: 1456333e74d15420b2ad7ea0090a4e4687817d11b5ea4f3aaf341e8b7a9ed39b6bc883b0b57aa66e67ef658f06e57c5d8478fa911dcdf77fbbc85954c0c8d49d
languageName: node
linkType: hard
@@ -21464,9 +21824,9 @@ __metadata:
languageName: node
linkType: hard
-"terser@npm:5.24.0":
- version: 5.24.0
- resolution: "terser@npm:5.24.0"
+"terser@npm:5.25.0":
+ version: 5.25.0
+ resolution: "terser@npm:5.25.0"
dependencies:
"@jridgewell/source-map": ^0.3.3
acorn: ^8.8.2
@@ -21474,7 +21834,7 @@ __metadata:
source-map-support: ~0.5.20
bin:
terser: bin/terser
- checksum: d88f774b6fa711a234fcecefd7657f99189c367e17dbe95a51c2776d426ad0e4d98d1ffe6edfdf299877c7602e495bdd711d21b2caaec188410795e5447d0f6c
+ checksum: ddc5ba020060cea976105ea83f5832385297f5091198f10143c1224e35bbb4ad9dfc40ee95d51a8f1290d0a4c7910d66e0ecc4b596402e94ba829bfc58022151
languageName: node
linkType: hard
@@ -21821,6 +22181,21 @@ __metadata:
languageName: node
linkType: hard
+"tus-js-client@npm:^3.0.0":
+ version: 3.1.1
+ resolution: "tus-js-client@npm:3.1.1"
+ dependencies:
+ buffer-from: ^1.1.2
+ combine-errors: ^3.0.3
+ is-stream: ^2.0.0
+ js-base64: ^3.7.2
+ lodash.throttle: ^4.1.1
+ proper-lockfile: ^4.1.2
+ url-parse: ^1.5.7
+ checksum: 7cb227b8d94e1f48a172f52c0cf8f0d58a7866211157788c6a8c9d7512550d21ef5ed13d074b8ffadbecc7e730273eca9f346d0ea4c89d9da60f351162a68d02
+ languageName: node
+ linkType: hard
+
"tweetnacl@npm:1.0.3":
version: 1.0.3
resolution: "tweetnacl@npm:1.0.3"
@@ -21959,13 +22334,6 @@ __metadata:
languageName: node
linkType: hard
-"ua-parser-js@npm:^1.0.33":
- version: 1.0.37
- resolution: "ua-parser-js@npm:1.0.37"
- checksum: 4d481c720d523366d7762dc8a46a1b58967d979aacf786f9ceceb1cd767de069f64a4bdffb63956294f1c0696eb465ddb950f28ba90571709e33521b4bd75e07
- languageName: node
- linkType: hard
-
"unbzip2-stream@npm:1.4.3":
version: 1.4.3
resolution: "unbzip2-stream@npm:1.4.3"
@@ -21976,19 +22344,12 @@ __metadata:
languageName: node
linkType: hard
-"undici-types@npm:~5.26.4":
- version: 5.26.5
- resolution: "undici-types@npm:5.26.5"
- checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487
- languageName: node
- linkType: hard
-
-"undici@npm:5.27.2":
- version: 5.27.2
- resolution: "undici@npm:5.27.2"
+"undici@npm:6.0.1":
+ version: 6.0.1
+ resolution: "undici@npm:6.0.1"
dependencies:
"@fastify/busboy": ^2.0.0
- checksum: 22bbdd763798700979986546d70072b67223189353d2a811efa9c6e44476161a0d1781ffe24115221f69a1b344b95d5926bd39a6eb760a2cd8804781cec0c5eb
+ checksum: a277fdff09ac9971cfb96912abd5e6f5d70e7373e2f4e6d5eee8e2f1f727eb67852d367a9edf445d20f9b5e721558ac511a6788ff84c81014045c2ef523418ed
languageName: node
linkType: hard
@@ -22059,13 +22420,6 @@ __metadata:
languageName: node
linkType: hard
-"universalify@npm:^0.1.0":
- version: 0.1.2
- resolution: "universalify@npm:0.1.2"
- checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff
- languageName: node
- linkType: hard
-
"universalify@npm:^0.2.0":
version: 0.2.0
resolution: "universalify@npm:0.2.0"
@@ -22145,7 +22499,7 @@ __metadata:
languageName: node
linkType: hard
-"url-parse@npm:^1.5.3":
+"url-parse@npm:^1.5.3, url-parse@npm:^1.5.7":
version: 1.5.10
resolution: "url-parse@npm:1.5.10"
dependencies:
@@ -22279,7 +22633,7 @@ __metadata:
languageName: node
linkType: hard
-"vary@npm:^1, vary@npm:~1.1.2":
+"vary@npm:~1.1.2":
version: 1.1.2
resolution: "vary@npm:1.1.2"
checksum: ae0123222c6df65b437669d63dfa8c36cee20a504101b2fcd97b8bf76f91259c17f9f2b4d70a1e3c6bbcee7f51b28392833adb6b2770b23b01abec84e369660b
@@ -22297,16 +22651,16 @@ __metadata:
languageName: node
linkType: hard
-"vite@npm:4.5.0":
- version: 4.5.0
- resolution: "vite@npm:4.5.0"
+"vite@npm:5.0.6":
+ version: 5.0.6
+ resolution: "vite@npm:5.0.6"
dependencies:
- esbuild: ^0.18.10
- fsevents: ~2.3.2
- postcss: ^8.4.27
- rollup: ^3.27.1
+ esbuild: ^0.19.3
+ fsevents: ~2.3.3
+ postcss: ^8.4.32
+ rollup: ^4.2.0
peerDependencies:
- "@types/node": ">= 14"
+ "@types/node": ^18.0.0 || >=20.0.0
less: "*"
lightningcss: ^1.21.0
sass: "*"
@@ -22333,7 +22687,7 @@ __metadata:
optional: true
bin:
vite: bin/vite.js
- checksum: 06f1a4c858e4dc4c04a10466f4ccacea30c5a9f8574e5ba3deb9d03fa20e80ca6797f02dad97a988da7cdef96238dbc69c3b6a538156585c74722d996223619e
+ checksum: 06d85f7d838d0cb2063c82c67974044f6b11e2914ac2cb395185509ecea85dcd5a9d3bd380b13f3c3494665b08b0793d1a03008372a10575f7619db003dbfc7e
languageName: node
linkType: hard
@@ -23049,21 +23403,6 @@ __metadata:
languageName: node
linkType: hard
-"yargs@npm:17.1.1":
- version: 17.1.1
- resolution: "yargs@npm:17.1.1"
- dependencies:
- cliui: ^7.0.2
- escalade: ^3.1.1
- get-caller-file: ^2.0.5
- require-directory: ^2.1.1
- string-width: ^4.2.0
- y18n: ^5.0.5
- yargs-parser: ^20.2.2
- checksum: b05a9467937172e01a4af7a7ad4361a22ee510cd12d1d5a3ad3b4c2e57eb8c35ca94ee22e4bdfbb40fe693fbf8000771e41824f77f6b224f1496c57f20f192b6
- languageName: node
- linkType: hard
-
"yargs@npm:17.7.2, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.5.1, yargs@npm:^17.6.2, yargs@npm:^17.7.2":
version: 17.7.2
resolution: "yargs@npm:17.7.2"