Skip to content

perf: add global consts to reduce dup strings #176

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 10 additions & 7 deletions projects/ngx-meta/src/core/src/global-metadata.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { GlobalMetadataImage } from './global-metadata-image'
import { GlobalMetadataKey } from './global-metadata-key'

export interface GlobalMetadata {
/**
Expand Down Expand Up @@ -69,11 +70,13 @@ export interface GlobalMetadata {
* image if you want to customize those too.
*/
readonly image?: GlobalMetadataImage | null

/**
* JSON-LD object to set in the page
*
* Needs JSON-LD module to be imported
*/
readonly jsonLd?: object | null
}

export const GLOBAL_TITLE = 'title' satisfies GlobalMetadataKey
export const GLOBAL_DESCRIPTION = 'description' satisfies GlobalMetadataKey
export const GLOBAL_APPLICATION_NAME =
'applicationName' satisfies GlobalMetadataKey

export const GLOBAL_CANONICAL_URL = 'canonicalUrl' satisfies GlobalMetadataKey
export const GLOBAL_LOCALE = 'locale' satisfies GlobalMetadataKey
export const GLOBAL_IMAGE = 'image' satisfies GlobalMetadataKey
10 changes: 5 additions & 5 deletions projects/ngx-meta/src/json-ld/src/json-ld-metadata-provider.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { DOCUMENT } from '@angular/common'
import {
GlobalMetadata,
HEAD_ELEMENT_UPSERT_OR_REMOVE,
HeadElementUpsertOrRemove,
makeGlobalMetadata,
makeMetadata,
MetadataSetterFactory,
provideMetadataFactory,
} from '@davidlj95/ngx-meta/core'
import { JsonLdMetadata } from './json-ld-metadata'

const KEY: keyof GlobalMetadata = 'jsonLd'
const KEY: keyof JsonLdMetadata = 'jsonLd'
const SCRIPT_TYPE = 'application/ld+json'

export const JSON_LD_METADATA_SETTER_FACTORY: MetadataSetterFactory<
GlobalMetadata[typeof KEY]
JsonLdMetadata[typeof KEY]
> =
(headElementUpsertOrRemove: HeadElementUpsertOrRemove, doc: Document) =>
(jsonLd) => {
Expand All @@ -26,7 +26,7 @@ export const JSON_LD_METADATA_SETTER_FACTORY: MetadataSetterFactory<
}

export const JSON_LD_METADATA_PROVIDER = provideMetadataFactory(
makeGlobalMetadata('jsonLd'),
makeMetadata([KEY]),
JSON_LD_METADATA_SETTER_FACTORY,
[HEAD_ELEMENT_UPSERT_OR_REMOVE, DOCUMENT],
)
6 changes: 6 additions & 0 deletions projects/ngx-meta/src/json-ld/src/json-ld-metadata.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export interface JsonLdMetadata {
/**
* JSON-LD object to set in the page
*/
readonly jsonLd?: object | null
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { OpenGraph } from './open-graph'

const KEY: keyof OpenGraph = 'description'
import { GLOBAL_DESCRIPTION } from '@davidlj95/ngx-meta/core'

export const OPEN_GRAPH_DESCRIPTION_METADATA_PROVIDER =
makeOpenGraphMetadataProvider(KEY, { g: KEY })
makeOpenGraphMetadataProvider(GLOBAL_DESCRIPTION, { g: GLOBAL_DESCRIPTION })
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { OpenGraph } from './open-graph'
import { MetaService } from '@davidlj95/ngx-meta/core'
import { GLOBAL_IMAGE, MetaService } from '@davidlj95/ngx-meta/core'
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { makeOpenGraphMetaProperty } from './make-open-graph-meta-property'

const KEY: keyof OpenGraph = 'image'
const NO_KEY_VALUE: OpenGraph[typeof KEY] = {
const NO_KEY_VALUE: OpenGraph[typeof GLOBAL_IMAGE] = {
url: undefined,
alt: undefined,
secureUrl: null,
Expand All @@ -14,30 +13,33 @@ const NO_KEY_VALUE: OpenGraph[typeof KEY] = {
}

export const OPEN_GRAPH_IMAGE_SETTER_FACTORY =
(metaService: MetaService) => (value: OpenGraph[typeof KEY]) => {
(metaService: MetaService) => (value: OpenGraph[typeof GLOBAL_IMAGE]) => {
const imageUrl = value?.url?.toString()
const effectiveValue: OpenGraph[typeof KEY] =
const effectiveValue: OpenGraph[typeof GLOBAL_IMAGE] =
imageUrl !== undefined && imageUrl !== null ? value : NO_KEY_VALUE
metaService.set(makeOpenGraphMetaProperty(KEY), imageUrl)
metaService.set(makeOpenGraphMetaProperty(KEY, 'alt'), effectiveValue?.alt)
metaService.set(makeOpenGraphMetaProperty(GLOBAL_IMAGE), imageUrl)
metaService.set(
makeOpenGraphMetaProperty(KEY, 'secure_url'),
makeOpenGraphMetaProperty(GLOBAL_IMAGE, 'alt'),
effectiveValue?.alt,
)
metaService.set(
makeOpenGraphMetaProperty(GLOBAL_IMAGE, 'secure_url'),
effectiveValue?.secureUrl?.toString(),
)
metaService.set(
makeOpenGraphMetaProperty(KEY, 'type'),
makeOpenGraphMetaProperty(GLOBAL_IMAGE, 'type'),
effectiveValue?.type,
)
metaService.set(
makeOpenGraphMetaProperty(KEY, 'width'),
makeOpenGraphMetaProperty(GLOBAL_IMAGE, 'width'),
effectiveValue?.width?.toString(),
)
metaService.set(
makeOpenGraphMetaProperty(KEY, 'height'),
makeOpenGraphMetaProperty(GLOBAL_IMAGE, 'height'),
effectiveValue?.height?.toString(),
)
}
export const OPEN_GRAPH_IMAGE_METADATA_PROVIDER = makeOpenGraphMetadataProvider(
KEY,
{ s: OPEN_GRAPH_IMAGE_SETTER_FACTORY, g: KEY },
GLOBAL_IMAGE,
{ s: OPEN_GRAPH_IMAGE_SETTER_FACTORY, g: GLOBAL_IMAGE },
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { OpenGraph } from './open-graph'
import { GLOBAL_LOCALE } from '@davidlj95/ngx-meta/core'

const key: keyof OpenGraph = 'locale'
export const OPEN_GRAPH_LOCALE_METADATA_PROVIDER =
makeOpenGraphMetadataProvider(key, { g: key })
makeOpenGraphMetadataProvider(GLOBAL_LOCALE, { g: GLOBAL_LOCALE })
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { GLOBAL_APPLICATION_NAME } from '@davidlj95/ngx-meta/core'

export const OPEN_GRAPH_SITE_NAME_METADATA_PROVIDER =
makeOpenGraphMetadataProvider('siteName', {
g: 'applicationName',
g: GLOBAL_APPLICATION_NAME,
p: 'site_name',
})
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { OpenGraph } from './open-graph'

const KEY: keyof OpenGraph = 'title'
import { GLOBAL_TITLE } from '@davidlj95/ngx-meta/core'

export const OPEN_GRAPH_TITLE_METADATA_PROVIDER = makeOpenGraphMetadataProvider(
KEY,
{ g: KEY },
GLOBAL_TITLE,
{ g: GLOBAL_TITLE },
)
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { makeOpenGraphMetadataProvider } from './make-open-graph-metadata-provider'
import { GLOBAL_CANONICAL_URL } from '@davidlj95/ngx-meta/core'

export const OPEN_GRAPH_URL_METADATA_PROVIDER = makeOpenGraphMetadataProvider(
'url',
{ g: 'canonicalUrl' },
{ g: GLOBAL_CANONICAL_URL },
)
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
import { makeStandardMetadataProvider } from './make-standard-metadata-provider'
import { Standard } from './standard'
import {
GLOBAL_CANONICAL_URL,
HEAD_ELEMENT_UPSERT_OR_REMOVE,
HeadElementUpsertOrRemove,
} from '@davidlj95/ngx-meta/core'
import { DOCUMENT } from '@angular/common'

const KEY: keyof Standard = 'canonicalUrl'
const LINK_TAG = 'link'
const REL_ATTR = 'rel'
const CANONICAL_VAL = 'canonical'
const SELECTOR = `${LINK_TAG}[${REL_ATTR}='${CANONICAL_VAL}']`

export const STANDARD_CANONICAL_URL_METADATA_PROVIDER =
makeStandardMetadataProvider(KEY, {
g: KEY,
makeStandardMetadataProvider(GLOBAL_CANONICAL_URL, {
g: GLOBAL_CANONICAL_URL,
s:
(headElementUpsertOrRemove: HeadElementUpsertOrRemove, doc: Document) =>
(value) => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import { makeStandardMetadataProvider } from './make-standard-metadata-provider'
import { Standard } from './standard'
import { GLOBAL_DESCRIPTION } from '@davidlj95/ngx-meta/core'

const KEY: keyof Standard = 'description'
const KEY: keyof Standard = GLOBAL_DESCRIPTION

export const STANDARD_DESCRIPTION_METADATA_PROVIDER =
makeStandardMetadataProvider(KEY, { g: KEY })
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
import { makeStandardMetadataProvider } from './make-standard-metadata-provider'
import { Standard } from './standard'
import { HtmlLangAttributeService } from './html-lang-attribute/html-lang-attribute.service'

const KEY: keyof Standard = 'locale'
import { GLOBAL_LOCALE } from '@davidlj95/ngx-meta/core'

export const STANDARD_LOCALE_METADATA_PROVIDER = makeStandardMetadataProvider(
KEY,
GLOBAL_LOCALE,
{
g: KEY,
g: GLOBAL_LOCALE,
s: (htmlLangAttributeService: HtmlLangAttributeService) => (value) =>
htmlLangAttributeService.set(value),
d: [HtmlLangAttributeService],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import { makeStandardMetadataProvider } from './make-standard-metadata-provider'
import { Standard } from './standard'
import { Title } from '@angular/platform-browser'
import { MetadataSetterFactory } from '@davidlj95/ngx-meta/core'

const KEY: keyof Standard = 'title'
import { GLOBAL_TITLE, MetadataSetterFactory } from '@davidlj95/ngx-meta/core'

export const STANDARD_TITLE_METADATA_SETTER_FACTORY: MetadataSetterFactory<
Standard[typeof KEY]
Standard[typeof GLOBAL_TITLE]
> = (titleService: Title) => (value) => {
if (value === undefined || value === null) {
return
Expand All @@ -15,6 +13,6 @@ export const STANDARD_TITLE_METADATA_SETTER_FACTORY: MetadataSetterFactory<
}

export const STANDARD_TITLE_METADATA_PROVIDER = makeStandardMetadataProvider(
KEY,
{ g: KEY, s: STANDARD_TITLE_METADATA_SETTER_FACTORY, d: [Title] },
GLOBAL_TITLE,
{ g: GLOBAL_TITLE, s: STANDARD_TITLE_METADATA_SETTER_FACTORY, d: [Title] },
)
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { makeTwitterCardMetadataProvider } from './make-twitter-card-metadata-provider'
import { TwitterCard } from './twitter-card'

const KEY: keyof TwitterCard = 'description'
import { GLOBAL_DESCRIPTION } from '@davidlj95/ngx-meta/core'

export const TWITTER_CARD_DESCRIPTION_METADATA_PROVIDER =
makeTwitterCardMetadataProvider(KEY, { g: KEY })
makeTwitterCardMetadataProvider(GLOBAL_DESCRIPTION, { g: GLOBAL_DESCRIPTION })
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import { makeTwitterCardMetadataProvider } from './make-twitter-card-metadata-provider'
import { TwitterCard } from './twitter-card'
import { makeTwitterCardMetaProperty } from './make-twitter-card-meta-property'

const KEY: keyof TwitterCard = 'image'
import { GLOBAL_IMAGE } from '@davidlj95/ngx-meta/core'

export const TWITTER_CARD_IMAGE_METADATA_PROVIDER =
makeTwitterCardMetadataProvider(KEY, {
g: KEY,
makeTwitterCardMetadataProvider(GLOBAL_IMAGE, {
g: GLOBAL_IMAGE,
s: (metaService) => (value) => {
metaService.set(makeTwitterCardMetaProperty(KEY), value?.url?.toString())
metaService.set(makeTwitterCardMetaProperty(KEY, 'alt'), value?.alt)
metaService.set(
makeTwitterCardMetaProperty(GLOBAL_IMAGE),
value?.url?.toString(),
)
metaService.set(
makeTwitterCardMetaProperty(GLOBAL_IMAGE, 'alt'),
value?.alt,
)
},
})
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { makeTwitterCardMetadataProvider } from './make-twitter-card-metadata-provider'
import { TwitterCard } from './twitter-card'

const KEY: keyof TwitterCard = 'title'
import { GLOBAL_TITLE } from '@davidlj95/ngx-meta/core'

export const TWITTER_CARD_TITLE_METADATA_PROVIDER =
makeTwitterCardMetadataProvider(KEY, { g: KEY })
makeTwitterCardMetadataProvider(GLOBAL_TITLE, { g: GLOBAL_TITLE })