revamp manifest types

This commit is contained in:
Matt Hill
2024-03-21 17:21:37 -06:00
parent ab836c6922
commit 66b0108c51
43 changed files with 279 additions and 834 deletions

View File

@@ -1,6 +1,6 @@
<ion-item class="service-card" [routerLink]="['/marketplace', pkg.manifest.id]">
<ion-thumbnail slot="start">
<img alt="" [src]="pkg | mimeType | trustUrl" />
<img alt="" [src]="pkg.icon | trustUrl" />
</ion-thumbnail>
<ion-label>
<h2 class="montserrat">

View File

@@ -4,17 +4,10 @@ import { IonicModule } from '@ionic/angular'
import { RouterModule } from '@angular/router'
import { SharedPipesModule } from '@start9labs/shared'
import { ItemComponent } from './item.component'
import { MimeTypePipeModule } from '../../../pipes/mime-type.pipe'
@NgModule({
declarations: [ItemComponent],
exports: [ItemComponent],
imports: [
CommonModule,
IonicModule,
RouterModule,
SharedPipesModule,
MimeTypePipeModule,
],
imports: [CommonModule, IonicModule, RouterModule, SharedPipesModule],
})
export class ItemModule {}

View File

@@ -18,15 +18,11 @@
<ion-label>
<h2>
{{ pkg['dependency-metadata'][dep.key].title }}
<ng-container [ngSwitch]="dep.value.requirement.type">
<span *ngSwitchCase="'required'">(required)</span>
<span *ngSwitchCase="'opt-out'">(required by default)</span>
<span *ngIf="dep.value.optional; else required">(optional)</span>
<ng-template #required>
<span *ngSwitchCase="'opt-in'">(optional)</span>
</ng-container>
</ng-template>
</h2>
<p>
<small>{{ dep.value.version | displayEmver }}</small>
</p>
<p>{{ dep.value.description }}</p>
</ion-label>
</ion-item>

View File

@@ -11,7 +11,6 @@ export class DependenciesComponent {
pkg!: MarketplacePkg
getImg(key: string): string {
// @TODO fix when registry api is updated to include mimetype in icon url
return 'data:image/png;base64,' + this.pkg['dependency-metadata'][key].icon
return this.pkg['dependency-metadata'][key].icon
}
}

View File

@@ -1,5 +1,5 @@
<div class="header montserrat">
<img class="logo" alt="" [src]="pkg | mimeType | trustUrl" />
<img class="logo" alt="" [src]="pkg.icon | trustUrl" />
<div class="text">
<h1 ticker class="title">{{ pkg.manifest.title }}</h1>
<p class="version">{{ pkg.manifest.version | displayEmver }}</p>

View File

@@ -8,7 +8,6 @@ import {
} from '@start9labs/shared'
import { PackageComponent } from './package.component'
import { MimeTypePipeModule } from '../../../pipes/mime-type.pipe'
@NgModule({
declarations: [PackageComponent],
@@ -19,7 +18,6 @@ import { MimeTypePipeModule } from '../../../pipes/mime-type.pipe'
SharedPipesModule,
EmverPipesModule,
TickerModule,
MimeTypePipeModule,
],
})
export class PackageModule {}

View File

@@ -1,32 +0,0 @@
import { NgModule, Pipe, PipeTransform } from '@angular/core'
import { MarketplacePkg } from '../types'
@Pipe({
name: 'mimeType',
})
export class MimeTypePipe implements PipeTransform {
transform(pkg: MarketplacePkg): string {
if (pkg.manifest.assets.icon) {
switch (pkg.manifest.assets.icon.split('.').pop()) {
case 'png':
return `data:image/png;base64,${pkg.icon}`
case 'jpeg':
case 'jpg':
return `data:image/jpeg;base64,${pkg.icon}`
case 'gif':
return `data:image/gif;base64,${pkg.icon}`
case 'svg':
return `data:image/svg+xml;base64,${pkg.icon}`
default:
return `data:image/png;base64,${pkg.icon}`
}
}
return `data:image/png;base64,${pkg.icon}`
}
}
@NgModule({
declarations: [MimeTypePipe],
exports: [MimeTypePipe],
})
export class MimeTypePipeModule {}

View File

@@ -22,7 +22,6 @@ export * from './pages/show/package/package.component'
export * from './pages/show/package/package.module'
export * from './pipes/filter-packages.pipe'
export * from './pipes/mime-type.pipe'
export * from './services/marketplace.service'

View File

@@ -19,11 +19,13 @@ export interface StoreInfo {
categories: string[]
}
export type StoreIdentityWithData = StoreData & StoreIdentity
export interface MarketplacePkg {
icon: Url
license: Url
instructions: Url
manifest: MarketplaceManifest
manifest: Manifest
categories: string[]
versions: string[]
'dependency-metadata': {
@@ -35,10 +37,11 @@ export interface MarketplacePkg {
export interface DependencyMetadata {
title: string
icon: Url
optional: boolean
hidden: boolean
}
export interface MarketplaceManifest<T = unknown> {
export interface Manifest {
id: string
title: string
version: string
@@ -47,12 +50,9 @@ export interface MarketplaceManifest<T = unknown> {
short: string
long: string
}
assets: {
icon: string // ie. icon.png
}
replaces?: string[]
'release-notes': string
license: string // type of license
license: string // name of license
'wrapper-repo': Url
'upstream-repo': Url
'support-site': Url
@@ -65,23 +65,12 @@ export interface MarketplaceManifest<T = unknown> {
start: string | null
stop: string | null
}
dependencies: Record<string, Dependency<T>>
dependencies: Record<string, Dependency>
'os-version': string
'has-config': boolean
}
export interface Dependency<T> {
version: string
requirement:
| {
type: 'opt-in'
how: string
}
| {
type: 'opt-out'
how: string
}
| {
type: 'required'
}
export interface Dependency {
description: string | null
config: T
optional: boolean
}