UNPKG

@davidlj95/ngx-meta

Version:

Set your Angular site's metadata: standard meta tags, Open Graph, Twitter Cards, JSON-LD structured data and more. Supports SSR (and Angular Universal). Use a service. Use routes' data. Set it up in a flash! 🚀

112 lines 11.1 kB
import { Inject, Injectable } from '@angular/core'; import { metadataRegistry, } from '../managers/metadata-registry'; import { metadataResolver, } from '../resolvers/metadata-resolver'; import { _formatDevMessage } from '../messaging'; import { MODULE_NAME } from '../module-name'; import * as i0 from "@angular/core"; /** * Manages the metadata values of the current page. * * @public */ export class NgxMetaService { constructor(registry, resolver) { this.registry = registry; this.resolver = resolver; } /** * Sets the metadata values of the current page * * @remarks * * The method is designed as an atomic operation. Subsequent calls to this * method won't set more metadata, but will instead set the metadata values * provided when calling it. * * For instance, * * ```typescript * ngxMetaService.set({description: 'Description'}) * ngxMetaService.set({title: 'Title'}) * ``` * * Will result in a page with title <b>but no description</b> * * For more information check the {@link https://ngx-meta.dev/guides/set-metadata-using-service/ | service guide docs} * * @param values - Metadata values to set, as a JSON object */ set(values = {}) { const allMetadata = this.registry.getAll(); for (const metadata of allMetadata) { metadata.set(this.resolver(values, metadata.resolverOptions)); } } /** * Sets a metadata value for the page * * You can specify which metadata elements will be changed by using the * global or JSON Path that you would use if using {@link NgxMetaService.set} API * * @remarks * For instance, if you want to just set the title of the page. You'd set it * with {@link NgxMetaService.set} API like this: * * ```typescript * this.ngxMetaService.set({ * title: 'Global title' * standard: { * title: 'Standard title', * } * }) * ``` * * But rest of metadata would be removed. * * To only set the `title`, you can use this API: * * ```typescript * this.ngxMetaService.setOne('title', 'Global title') * this.ngxMetaService.setOne('standard.title', 'Standard title') * ``` * * For more information check the {@link https://ngx-meta.dev/guides/set-metadata-using-service/ | service guide docs} * * @param globalOrJsonPath - Looks for metadata managers whose global matches * this argument. Or whose JSON path matches this * argument. * @param value - Value to set for matching metadata elements */ setOne(globalOrJsonPath, value) { const managers = this.registry.findByGlobalOrJsonPath(globalOrJsonPath); /* istanbul ignore next - not unit tested hence no warning test */ if (ngDevMode && [...managers].length === 0) { console.warn(_formatDevMessage('no metadata managers found for global or JSON Path', { module: MODULE_NAME, value: globalOrJsonPath, })); } for (const manager of managers) { manager.set(value); } } /** * Clears all managed metadata elements of the current page */ clear() { this.set(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxMetaService, deps: [{ token: metadataRegistry() }, { token: metadataResolver() }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxMetaService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NgxMetaService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [metadataRegistry()] }] }, { type: undefined, decorators: [{ type: Inject, args: [metadataResolver()] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1ldGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb3JlL3NyYy9zZXJ2aWNlL25neC1tZXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDbEQsT0FBTyxFQUVMLGdCQUFnQixHQUNqQixNQUFNLCtCQUErQixDQUFBO0FBQ3RDLE9BQU8sRUFFTCxnQkFBZ0IsR0FDakIsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUN2QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBOztBQUU1Qzs7OztHQUlHO0FBRUgsTUFBTSxPQUFPLGNBQWM7SUFDekIsWUFDc0MsUUFBMEIsRUFDMUIsUUFBMEI7UUFEMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7UUFDMUIsYUFBUSxHQUFSLFFBQVEsQ0FBa0I7SUFDN0QsQ0FBQztJQUVKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FxQkc7SUFDSCxHQUFHLENBQUMsU0FBeUIsRUFBRTtRQUM3QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFBO1FBQzFDLEtBQUssTUFBTSxRQUFRLElBQUksV0FBVyxFQUFFLENBQUM7WUFDbkMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0NHO0lBQ0gsTUFBTSxDQUFDLGdCQUF3QixFQUFFLEtBQWM7UUFDN0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3ZFLGtFQUFrRTtRQUNsRSxJQUFJLFNBQVMsSUFBSSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsaUJBQWlCLENBQ2Ysb0RBQW9ELEVBQ3BEO2dCQUNFLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixLQUFLLEVBQUUsZ0JBQWdCO2FBQ3hCLENBQ0YsQ0FDRixDQUFBO1FBQ0gsQ0FBQztRQUNELEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7WUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSztRQUNILElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQTtJQUNaLENBQUM7K0dBOUZVLGNBQWMsa0JBRWYsZ0JBQWdCLEVBQUUsYUFDbEIsZ0JBQWdCLEVBQUU7bUhBSGpCLGNBQWMsY0FERCxNQUFNOzs0RkFDbkIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUc3QixNQUFNOzJCQUFDLGdCQUFnQixFQUFFOzswQkFDekIsTUFBTTsyQkFBQyxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1ldGFkYXRhVmFsdWVzIH0gZnJvbSAnLi9tZXRhZGF0YS12YWx1ZXMnXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgTWV0YWRhdGFSZWdpc3RyeSxcbiAgbWV0YWRhdGFSZWdpc3RyeSxcbn0gZnJvbSAnLi4vbWFuYWdlcnMvbWV0YWRhdGEtcmVnaXN0cnknXG5pbXBvcnQge1xuICBNZXRhZGF0YVJlc29sdmVyLFxuICBtZXRhZGF0YVJlc29sdmVyLFxufSBmcm9tICcuLi9yZXNvbHZlcnMvbWV0YWRhdGEtcmVzb2x2ZXInXG5pbXBvcnQgeyBfZm9ybWF0RGV2TWVzc2FnZSB9IGZyb20gJy4uL21lc3NhZ2luZydcbmltcG9ydCB7IE1PRFVMRV9OQU1FIH0gZnJvbSAnLi4vbW9kdWxlLW5hbWUnXG5cbi8qKlxuICogTWFuYWdlcyB0aGUgbWV0YWRhdGEgdmFsdWVzIG9mIHRoZSBjdXJyZW50IHBhZ2UuXG4gKlxuICogQHB1YmxpY1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5neE1ldGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChtZXRhZGF0YVJlZ2lzdHJ5KCkpIHByaXZhdGUgcmVnaXN0cnk6IE1ldGFkYXRhUmVnaXN0cnksXG4gICAgQEluamVjdChtZXRhZGF0YVJlc29sdmVyKCkpIHByaXZhdGUgcmVzb2x2ZXI6IE1ldGFkYXRhUmVzb2x2ZXIsXG4gICkge31cblxuICAvKipcbiAgICogU2V0cyB0aGUgbWV0YWRhdGEgdmFsdWVzIG9mIHRoZSBjdXJyZW50IHBhZ2VcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICpcbiAgICogVGhlIG1ldGhvZCBpcyBkZXNpZ25lZCBhcyBhbiBhdG9taWMgb3BlcmF0aW9uLiBTdWJzZXF1ZW50IGNhbGxzIHRvIHRoaXNcbiAgICogbWV0aG9kIHdvbid0IHNldCBtb3JlIG1ldGFkYXRhLCBidXQgd2lsbCBpbnN0ZWFkIHNldCB0aGUgbWV0YWRhdGEgdmFsdWVzXG4gICAqIHByb3ZpZGVkIHdoZW4gY2FsbGluZyBpdC5cbiAgICpcbiAgICogRm9yIGluc3RhbmNlLFxuICAgKlxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIG5neE1ldGFTZXJ2aWNlLnNldCh7ZGVzY3JpcHRpb246ICdEZXNjcmlwdGlvbid9KVxuICAgKiBuZ3hNZXRhU2VydmljZS5zZXQoe3RpdGxlOiAnVGl0bGUnfSlcbiAgICogYGBgXG4gICAqXG4gICAqIFdpbGwgcmVzdWx0IGluIGEgcGFnZSB3aXRoIHRpdGxlIDxiPmJ1dCBubyBkZXNjcmlwdGlvbjwvYj5cbiAgICpcbiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gY2hlY2sgdGhlIHtAbGluayBodHRwczovL25neC1tZXRhLmRldi9ndWlkZXMvc2V0LW1ldGFkYXRhLXVzaW5nLXNlcnZpY2UvIHwgc2VydmljZSBndWlkZSBkb2NzfVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVzIC0gTWV0YWRhdGEgdmFsdWVzIHRvIHNldCwgYXMgYSBKU09OIG9iamVjdFxuICAgKi9cbiAgc2V0KHZhbHVlczogTWV0YWRhdGFWYWx1ZXMgPSB7fSk6IHZvaWQge1xuICAgIGNvbnN0IGFsbE1ldGFkYXRhID0gdGhpcy5yZWdpc3RyeS5nZXRBbGwoKVxuICAgIGZvciAoY29uc3QgbWV0YWRhdGEgb2YgYWxsTWV0YWRhdGEpIHtcbiAgICAgIG1ldGFkYXRhLnNldCh0aGlzLnJlc29sdmVyKHZhbHVlcywgbWV0YWRhdGEucmVzb2x2ZXJPcHRpb25zKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIG1ldGFkYXRhIHZhbHVlIGZvciB0aGUgcGFnZVxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgd2hpY2ggbWV0YWRhdGEgZWxlbWVudHMgd2lsbCBiZSBjaGFuZ2VkIGJ5IHVzaW5nIHRoZVxuICAgKiBnbG9iYWwgb3IgSlNPTiBQYXRoIHRoYXQgeW91IHdvdWxkIHVzZSBpZiB1c2luZyB7QGxpbmsgTmd4TWV0YVNlcnZpY2Uuc2V0fSBBUElcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIGluc3RhbmNlLCBpZiB5b3Ugd2FudCB0byBqdXN0IHNldCB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UuIFlvdSdkIHNldCBpdFxuICAgKiB3aXRoIHtAbGluayBOZ3hNZXRhU2VydmljZS5zZXR9IEFQSSBsaWtlIHRoaXM6XG4gICAqXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogdGhpcy5uZ3hNZXRhU2VydmljZS5zZXQoe1xuICAgKiAgdGl0bGU6ICdHbG9iYWwgdGl0bGUnXG4gICAqICBzdGFuZGFyZDoge1xuICAgKiAgICB0aXRsZTogJ1N0YW5kYXJkIHRpdGxlJyxcbiAgICogIH1cbiAgICogfSlcbiAgICogYGBgXG4gICAqXG4gICAqIEJ1dCByZXN0IG9mIG1ldGFkYXRhIHdvdWxkIGJlIHJlbW92ZWQuXG4gICAqXG4gICAqIFRvIG9ubHkgc2V0IHRoZSBgdGl0bGVgLCB5b3UgY2FuIHVzZSB0aGlzIEFQSTpcbiAgICpcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiB0aGlzLm5neE1ldGFTZXJ2aWNlLnNldE9uZSgndGl0bGUnLCAnR2xvYmFsIHRpdGxlJylcbiAgICogdGhpcy5uZ3hNZXRhU2VydmljZS5zZXRPbmUoJ3N0YW5kYXJkLnRpdGxlJywgJ1N0YW5kYXJkIHRpdGxlJylcbiAgICogYGBgXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGNoZWNrIHRoZSB7QGxpbmsgaHR0cHM6Ly9uZ3gtbWV0YS5kZXYvZ3VpZGVzL3NldC1tZXRhZGF0YS11c2luZy1zZXJ2aWNlLyB8IHNlcnZpY2UgZ3VpZGUgZG9jc31cbiAgICpcbiAgICogQHBhcmFtIGdsb2JhbE9ySnNvblBhdGggLSBMb29rcyBmb3IgbWV0YWRhdGEgbWFuYWdlcnMgd2hvc2UgZ2xvYmFsIG1hdGNoZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGFyZ3VtZW50LiBPciB3aG9zZSBKU09OIHBhdGggbWF0Y2hlcyB0aGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHNldCBmb3IgbWF0Y2hpbmcgbWV0YWRhdGEgZWxlbWVudHNcbiAgICovXG4gIHNldE9uZShnbG9iYWxPckpzb25QYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgbWFuYWdlcnMgPSB0aGlzLnJlZ2lzdHJ5LmZpbmRCeUdsb2JhbE9ySnNvblBhdGgoZ2xvYmFsT3JKc29uUGF0aClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtIG5vdCB1bml0IHRlc3RlZCBoZW5jZSBubyB3YXJuaW5nIHRlc3QgKi9cbiAgICBpZiAobmdEZXZNb2RlICYmIFsuLi5tYW5hZ2Vyc10ubGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIF9mb3JtYXREZXZNZXNzYWdlKFxuICAgICAgICAgICdubyBtZXRhZGF0YSBtYW5hZ2VycyBmb3VuZCBmb3IgZ2xvYmFsIG9yIEpTT04gUGF0aCcsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbW9kdWxlOiBNT0RVTEVfTkFNRSxcbiAgICAgICAgICAgIHZhbHVlOiBnbG9iYWxPckpzb25QYXRoLFxuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApXG4gICAgfVxuICAgIGZvciAoY29uc3QgbWFuYWdlciBvZiBtYW5hZ2Vycykge1xuICAgICAgbWFuYWdlci5zZXQodmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbGwgbWFuYWdlZCBtZXRhZGF0YSBlbGVtZW50cyBvZiB0aGUgY3VycmVudCBwYWdlXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnNldCgpXG4gIH1cbn1cbiJdfQ==