@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! 🚀
41 lines • 6.6 kB
JavaScript
import { _GLOBAL_CANONICAL_URL, _headElementUpsertOrRemove, _isDefined, _maybeNonHttpUrlDevMessage, _urlResolver, _withModuleManagerSameGlobalKey, _withModuleManagerSetterFactory, withManagerDeps, } from '@davidlj95/ngx-meta/core';
import { DOCUMENT } from '@angular/common';
import { MODULE_NAME } from '../module-name';
import { provideStandardManager } from '../utils/provide-standard-manager';
/**
* Manages the {@link Standard.canonicalUrl} metadata
* @public
*/
export const provideStandardCanonicalUrl = () => provideStandardManager(_GLOBAL_CANONICAL_URL, _withModuleManagerSameGlobalKey(), withManagerDeps(_headElementUpsertOrRemove(), DOCUMENT, _urlResolver()), _withModuleManagerSetterFactory((headElementUpsertOrRemove, doc, urlResolver) => (url) => {
const resolvedUrl = urlResolver(url);
/* istanbul ignore next https://github.com/istanbuljs/istanbuljs/issues/719 */
if (ngDevMode) {
_maybeNonHttpUrlDevMessage(resolvedUrl, {
module: MODULE_NAME,
property: _GLOBAL_CANONICAL_URL,
value: resolvedUrl,
link: 'https://stackoverflow.com/a/8467966/3263250',
shouldInsteadOfMust: true,
});
}
let linkElement;
if (_isDefined(resolvedUrl)) {
linkElement = doc.createElement(LINK_TAG);
linkElement.setAttribute(REL_ATTR, CANONICAL_VAL);
linkElement.setAttribute('href', resolvedUrl);
}
headElementUpsertOrRemove(SELECTOR, linkElement);
}));
const LINK_TAG = 'link';
const REL_ATTR = 'rel';
const CANONICAL_VAL = 'canonical';
const SELECTOR = `${LINK_TAG}[${REL_ATTR}='${CANONICAL_VAL}']`;
/**
* {@inheritDoc provideStandardCanonicalUrl}
* @deprecated Use {@link provideStandardCanonicalUrl} instead
* @public
*/
export const STANDARD_CANONICAL_URL_METADATA_PROVIDER =
/* @__PURE__ */
provideStandardCanonicalUrl();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS1zdGFuZGFyZC1jYW5vbmljYWwtdXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3N0YW5kYXJkL3NyYy9tYW5hZ2Vycy9wcm92aWRlLXN0YW5kYXJkLWNhbm9uaWNhbC11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsVUFBVSxFQUNWLDBCQUEwQixFQUMxQixZQUFZLEVBQ1osK0JBQStCLEVBQy9CLCtCQUErQixFQUMvQixlQUFlLEdBQ2hCLE1BQU0sMEJBQTBCLENBQUE7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUM1QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUUxRTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLEVBQUUsQ0FDOUMsc0JBQXNCLENBQ3BCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFBRSxFQUNqQyxlQUFlLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsRUFDdkUsK0JBQStCLENBQzdCLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtJQUN2RCxNQUFNLFdBQVcsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEMsOEVBQThFO0lBQzlFLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCwwQkFBMEIsQ0FBQyxXQUFXLEVBQUU7WUFDdEMsTUFBTSxFQUFFLFdBQVc7WUFDbkIsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsNkNBQTZDO1lBQ25ELG1CQUFtQixFQUFFLElBQUk7U0FDMUIsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUNELElBQUksV0FBd0MsQ0FBQTtJQUM1QyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1FBQzVCLFdBQVcsR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQ3pDLFdBQVksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFBO1FBQ2xELFdBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBQ2hELENBQUM7SUFDRCx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDbEQsQ0FBQyxDQUNGLENBQ0YsQ0FBQTtBQUVILE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQTtBQUN2QixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUE7QUFDdEIsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFBO0FBQ2pDLE1BQU0sUUFBUSxHQUFHLEdBQUcsUUFBUSxJQUFJLFFBQVEsS0FBSyxhQUFhLElBQUksQ0FBQTtBQUU5RDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0NBQXdDO0FBQ25ELGVBQWU7QUFDZiwyQkFBMkIsRUFBRSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgX0dMT0JBTF9DQU5PTklDQUxfVVJMLFxuICBfaGVhZEVsZW1lbnRVcHNlcnRPclJlbW92ZSxcbiAgX2lzRGVmaW5lZCxcbiAgX21heWJlTm9uSHR0cFVybERldk1lc3NhZ2UsXG4gIF91cmxSZXNvbHZlcixcbiAgX3dpdGhNb2R1bGVNYW5hZ2VyU2FtZUdsb2JhbEtleSxcbiAgX3dpdGhNb2R1bGVNYW5hZ2VyU2V0dGVyRmFjdG9yeSxcbiAgd2l0aE1hbmFnZXJEZXBzLFxufSBmcm9tICdAZGF2aWRsajk1L25neC1tZXRhL2NvcmUnXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IE1PRFVMRV9OQU1FIH0gZnJvbSAnLi4vbW9kdWxlLW5hbWUnXG5pbXBvcnQgeyBwcm92aWRlU3RhbmRhcmRNYW5hZ2VyIH0gZnJvbSAnLi4vdXRpbHMvcHJvdmlkZS1zdGFuZGFyZC1tYW5hZ2VyJ1xuXG4vKipcbiAqIE1hbmFnZXMgdGhlIHtAbGluayBTdGFuZGFyZC5jYW5vbmljYWxVcmx9IG1ldGFkYXRhXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBwcm92aWRlU3RhbmRhcmRDYW5vbmljYWxVcmwgPSAoKSA9PlxuICBwcm92aWRlU3RhbmRhcmRNYW5hZ2VyKFxuICAgIF9HTE9CQUxfQ0FOT05JQ0FMX1VSTCxcbiAgICBfd2l0aE1vZHVsZU1hbmFnZXJTYW1lR2xvYmFsS2V5KCksXG4gICAgd2l0aE1hbmFnZXJEZXBzKF9oZWFkRWxlbWVudFVwc2VydE9yUmVtb3ZlKCksIERPQ1VNRU5ULCBfdXJsUmVzb2x2ZXIoKSksXG4gICAgX3dpdGhNb2R1bGVNYW5hZ2VyU2V0dGVyRmFjdG9yeShcbiAgICAgIChoZWFkRWxlbWVudFVwc2VydE9yUmVtb3ZlLCBkb2MsIHVybFJlc29sdmVyKSA9PiAodXJsKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkVXJsID0gdXJsUmVzb2x2ZXIodXJsKVxuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCBodHRwczovL2dpdGh1Yi5jb20vaXN0YW5idWxqcy9pc3RhbmJ1bGpzL2lzc3Vlcy83MTkgKi9cbiAgICAgICAgaWYgKG5nRGV2TW9kZSkge1xuICAgICAgICAgIF9tYXliZU5vbkh0dHBVcmxEZXZNZXNzYWdlKHJlc29sdmVkVXJsLCB7XG4gICAgICAgICAgICBtb2R1bGU6IE1PRFVMRV9OQU1FLFxuICAgICAgICAgICAgcHJvcGVydHk6IF9HTE9CQUxfQ0FOT05JQ0FMX1VSTCxcbiAgICAgICAgICAgIHZhbHVlOiByZXNvbHZlZFVybCxcbiAgICAgICAgICAgIGxpbms6ICdodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvODQ2Nzk2Ni8zMjYzMjUwJyxcbiAgICAgICAgICAgIHNob3VsZEluc3RlYWRPZk11c3Q6IHRydWUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGlua0VsZW1lbnQ6IEhUTUxMaW5rRWxlbWVudCB8IHVuZGVmaW5lZFxuICAgICAgICBpZiAoX2lzRGVmaW5lZChyZXNvbHZlZFVybCkpIHtcbiAgICAgICAgICBsaW5rRWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KExJTktfVEFHKVxuICAgICAgICAgIGxpbmtFbGVtZW50IS5zZXRBdHRyaWJ1dGUoUkVMX0FUVFIsIENBTk9OSUNBTF9WQUwpXG4gICAgICAgICAgbGlua0VsZW1lbnQhLnNldEF0dHJpYnV0ZSgnaHJlZicsIHJlc29sdmVkVXJsKVxuICAgICAgICB9XG4gICAgICAgIGhlYWRFbGVtZW50VXBzZXJ0T3JSZW1vdmUoU0VMRUNUT1IsIGxpbmtFbGVtZW50KVxuICAgICAgfSxcbiAgICApLFxuICApXG5cbmNvbnN0IExJTktfVEFHID0gJ2xpbmsnXG5jb25zdCBSRUxfQVRUUiA9ICdyZWwnXG5jb25zdCBDQU5PTklDQUxfVkFMID0gJ2Nhbm9uaWNhbCdcbmNvbnN0IFNFTEVDVE9SID0gYCR7TElOS19UQUd9WyR7UkVMX0FUVFJ9PScke0NBTk9OSUNBTF9WQUx9J11gXG5cbi8qKlxuICoge0Bpbmhlcml0RG9jIHByb3ZpZGVTdGFuZGFyZENhbm9uaWNhbFVybH1cbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgcHJvdmlkZVN0YW5kYXJkQ2Fub25pY2FsVXJsfSBpbnN0ZWFkXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjb25zdCBTVEFOREFSRF9DQU5PTklDQUxfVVJMX01FVEFEQVRBX1BST1ZJREVSID1cbiAgLyogQF9fUFVSRV9fICovXG4gIHByb3ZpZGVTdGFuZGFyZENhbm9uaWNhbFVybCgpXG4iXX0=