Skip to content

Commit 5f35752

Browse files
committed
feat: improve metadata value types
1 parent 42eae60 commit 5f35752

15 files changed

+38
-40
lines changed

projects/ngx-meta/e2e/a15/src/app/meta-set-by-route-and-service/meta-set-by-route-and-service.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, OnInit } from '@angular/core'
2-
import { MetadataService, MetadataValues } from '@davidlj95/ngx-meta/core'
2+
import { MetadataService } from '@davidlj95/ngx-meta/core'
33
import { ActivatedRoute } from '@angular/router'
44
import {
55
OPEN_GRAPH_TYPE_BOOK,
@@ -42,8 +42,6 @@ export class MetaSetByRouteAndServiceComponent implements OnInit {
4242
}
4343

4444
ngOnInit(): void {
45-
this.metadataService.set(
46-
this.overriddenMetadata as unknown as MetadataValues,
47-
)
45+
this.metadataService.set(this.overriddenMetadata)
4846
}
4947
}

projects/ngx-meta/e2e/a16/src/app/meta-set-by-route-and-service/meta-set-by-route-and-service.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, OnInit } from '@angular/core'
2-
import { MetadataService, MetadataValues } from '@davidlj95/ngx-meta/core'
2+
import { MetadataService } from '@davidlj95/ngx-meta/core'
33
import { ActivatedRoute } from '@angular/router'
44
import {
55
OPEN_GRAPH_TYPE_BOOK,
@@ -42,8 +42,6 @@ export class MetaSetByRouteAndServiceComponent implements OnInit {
4242
}
4343

4444
ngOnInit(): void {
45-
this.metadataService.set(
46-
this.overriddenMetadata as unknown as MetadataValues,
47-
)
45+
this.metadataService.set(this.overriddenMetadata)
4846
}
4947
}

projects/ngx-meta/e2e/a17/src/app/meta-set-by-route-and-service/meta-set-by-route-and-service.component.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Component, OnInit } from '@angular/core'
2-
import { MetadataService, MetadataValues } from '@davidlj95/ngx-meta/core'
2+
import { MetadataService } from '@davidlj95/ngx-meta/core'
33
import { JsonPipe } from '@angular/common'
44
import { ActivatedRoute } from '@angular/router'
55
import {
@@ -45,8 +45,6 @@ export class MetaSetByRouteAndServiceComponent implements OnInit {
4545
}
4646

4747
ngOnInit(): void {
48-
this.metadataService.set(
49-
this.overriddenMetadata as unknown as MetadataValues,
50-
)
48+
this.metadataService.set(this.overriddenMetadata)
5149
}
5250
}

projects/ngx-meta/src/core/src/core.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { ModuleWithProviders, NgModule } from '@angular/core'
2-
import { MetadataValues } from './metadata-values'
32
import { CORE_PROVIDERS, withDefaults } from './provide-core'
3+
import { MetadataValues } from './metadata-values'
44

55
@NgModule()
66
export class CoreModule {

projects/ngx-meta/src/core/src/metadata-json-resolver.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ describe('MetadataJsonResolver', () => {
3737
})
3838
})
3939
describe('and global value exists', () => {
40-
const valuesWithGlobal = { [global]: value, ...values }
40+
const valuesWithGlobal = { [global]: value, ...(values as object) }
4141

4242
it('should return global value', () => {
4343
expect(sut.get(metadataWithGlobal, valuesWithGlobal)).toEqual(value)
Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,28 @@
1-
import { Metadata } from './metadata'
2-
import { MetadataValues } from './metadata-values'
31
import { MaybeUndefined } from './maybe-undefined'
42
import { isObject } from './is-object'
53
import { Injectable } from '@angular/core'
4+
import { Metadata } from './metadata'
5+
import { MetadataValues } from './metadata-values'
66

77
@Injectable({ providedIn: 'root' })
88
export class MetadataJsonResolver {
9-
get<T>(definition: Metadata, values?: MetadataValues): T | undefined {
9+
get<T>(metadata: Metadata, values?: MetadataValues): T | undefined {
1010
if (values === undefined) {
1111
return
1212
}
1313

14-
const keys = [...definition.jsonPath]
14+
const keys = [...metadata.jsonPath]
1515
let value: unknown = values
1616
for (const key of keys) {
1717
if (value === undefined || value === null) {
1818
break
1919
}
20-
value = (value as MetadataValues)[key]
20+
value = (value as IndexedObject)[key]
2121
}
2222
const globalValue =
23-
definition.global !== undefined ? values[definition.global] : undefined
23+
metadata.global !== undefined
24+
? (values as IndexedObject)[metadata.global]
25+
: undefined
2426
if (value !== undefined && !globalValue) {
2527
return value as MaybeUndefined<T>
2628
}
@@ -33,3 +35,5 @@ export class MetadataJsonResolver {
3335
return globalValue as MaybeUndefined<T>
3436
}
3537
}
38+
39+
type IndexedObject = Record<string, unknown>

projects/ngx-meta/src/core/src/metadata-resolver.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import { enableAutoSpy } from '../../__tests__/enable-auto-spy'
66
import { MetadataJsonResolver } from './metadata-json-resolver'
77
import { RouteMetadataValues } from './route-metadata-values'
88
import { Metadata } from './metadata'
9-
import { MetadataValues } from './metadata-values'
109
import { MaybeUndefined } from './maybe-undefined'
1110
import { makeGlobalMetadata } from './make-global-metadata'
1211
import { Provider } from '@angular/core'
1312
import { DEFAULTS_TOKEN } from './defaults-token'
13+
import { MetadataValues } from './metadata-values'
1414

1515
describe('MetadataResolver', () => {
1616
enableAutoSpy()

projects/ngx-meta/src/core/src/metadata-resolver.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Inject, Injectable, Optional } from '@angular/core'
22
import { MetadataJsonResolver } from './metadata-json-resolver'
3-
import { MetadataValues } from './metadata-values'
43
import { RouteMetadataValues } from './route-metadata-values'
54
import { DEFAULTS_TOKEN } from './defaults-token'
65
import { isObject } from './is-object'
76
import { Metadata } from './metadata'
87
import { MaybeUndefined } from './maybe-undefined'
8+
import { MetadataValues } from './metadata-values'
99

1010
@Injectable({ providedIn: 'root' })
1111
export class MetadataResolver {
@@ -14,7 +14,7 @@ export class MetadataResolver {
1414
private readonly routeMetadataValues: RouteMetadataValues,
1515
@Optional()
1616
@Inject(DEFAULTS_TOKEN)
17-
private readonly defaults: MetadataValues | null,
17+
private readonly defaults: unknown | null,
1818
) {}
1919

2020
get<T>(metadata: Metadata, values: MetadataValues): T | undefined {
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
export interface MetadataValues {
2-
[key: string]: unknown
3-
}
1+
export type MetadataValues = object

projects/ngx-meta/src/core/src/metadata.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Injectable } from '@angular/core'
22
import { MetadataResolver } from './metadata-resolver'
3-
import { MetadataValues } from './metadata-values'
43
import { RouteMetadataValues } from './route-metadata-values'
54
import { MetadataRegistry } from './metadata-registry'
5+
import { MetadataValues } from './metadata-values'
66

77
@Injectable({ providedIn: 'root' })
88
export class MetadataService {
@@ -12,7 +12,7 @@ export class MetadataService {
1212
private readonly routeValues: RouteMetadataValues,
1313
) {}
1414

15-
public set(values: MetadataValues = {}): void {
15+
public set<M extends MetadataValues>(values: M = {} as M): void {
1616
const allMetadata = this.registry.getAll()
1717
for (const metadata of allMetadata) {
1818
metadata.set(this.resolver.get(metadata.metadata, values))

projects/ngx-meta/src/core/src/provide-core.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ import {
33
makeEnvironmentProviders,
44
Provider,
55
} from '@angular/core'
6-
import { MetadataValues } from './metadata-values'
76
import { DEFAULTS_TOKEN } from './defaults-token'
87
import { HEAD_ELEMENT_UPSERT_OR_REMOVE_PROVIDER } from './head-element-upsert-or-remove'
8+
import { MetadataValues } from './metadata-values'
99

1010
export const CORE_PROVIDERS = [HEAD_ELEMENT_UPSERT_OR_REMOVE_PROVIDER]
1111

projects/ngx-meta/src/core/src/route-metadata-values.spec.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,12 @@ import { RouteMetadataValues } from './route-metadata-values'
44
import { enableAutoSpy } from '../../__tests__/enable-auto-spy'
55
import { MockProviders } from 'ng-mocks'
66
import { Router } from '@angular/router'
7-
import { MetadataValues } from './metadata-values'
87

98
describe('RouteMetadataValues', () => {
109
enableAutoSpy()
1110
let sut: RouteMetadataValues
1211
let router: jasmine.SpyObj<Router>
13-
const dummyValues: MetadataValues = { foo: 'bar' }
12+
const dummyValues = { foo: 'bar' }
1413
const url = '/set-url'
1514

1615
beforeEach(() => {
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { GlobalMetadata, MetadataValues } from '@davidlj95/ngx-meta/core'
1+
import { MetadataValues } from '@davidlj95/ngx-meta/core'
22

3-
export interface MetadataRouteData {
4-
meta: GlobalMetadata & MetadataValues
3+
export interface MetadataRouteData<M = MetadataValues> {
4+
meta: M
55
}
Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import { InjectionToken } from '@angular/core'
22
import { ActivatedRouteSnapshot } from '@angular/router'
3+
import { MetadataValues } from '@davidlj95/ngx-meta/core'
34

4-
export type MetadataRouteStrategy = <T>(
5+
export type MetadataRouteStrategy = (
56
activatedRouteSnapshot: ActivatedRouteSnapshot,
6-
) => T | undefined
7+
) => MetadataValues | undefined
78

8-
export const METADATA_ROUTE_STRATEGY = new InjectionToken(
9-
ngDevMode ? 'NgxMeta Metadata Route Strategy' : 'NgxMetaMRS',
10-
)
9+
export const METADATA_ROUTE_STRATEGY =
10+
new InjectionToken<MetadataRouteStrategy>(
11+
ngDevMode ? 'NgxMeta Metadata Route Strategy' : 'NgxMetaMRS',
12+
)

projects/ngx-meta/src/routing/src/router-listener.service.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ export class RouterListenerService implements OnDestroy {
4949
}
5050
return
5151
}
52-
this.metadataService.set(this.strategy(this.activatedRoute.snapshot))
52+
const data = this.strategy(this.activatedRoute.snapshot)
53+
this.metadataService.set(data ?? {})
5354
},
5455
})
5556
}

0 commit comments

Comments
 (0)