@gorniv/ngx-universal
Version:
Packages for Angular Universal
61 lines • 7.73 kB
JavaScript
import { __decorate } from "tslib";
// https://github.com/angular/angular/issues/15776#issuecomment-291862953
import { Injectable, ViewEncapsulation, Inject } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import * as i0 from "@angular/core";
let LinkService = class LinkService {
constructor(rendererFactory, document) {
this.rendererFactory = rendererFactory;
this.document = document;
}
/**
* Inject the State into the bottom of the <head>
*/
addTag(tag, forceCreation) {
try {
const renderer = this.rendererFactory.createRenderer(this.document, {
id: '-1',
encapsulation: ViewEncapsulation.None,
styles: [],
data: {}
});
const link = renderer.createElement('link');
const head = this.document.head;
const selector = this._parseSelector(tag);
if (head === null) {
throw new Error('<head> not found within DOCUMENT.');
}
Object.keys(tag).forEach((prop) => {
return renderer.setAttribute(link, prop, tag[prop]);
});
// [TODO]: get them to update the existing one (if it exists) ?
renderer.appendChild(head, link);
}
catch (e) {
console.error('Error within linkService : ', e);
}
}
_parseSelector(tag) {
// Possibly re-work this
const attr = tag.rel ? 'rel' : 'hreflang';
return `${attr}="${tag[attr]}"`;
}
};
LinkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: LinkService, deps: [{ token: i0.RendererFactory2 }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable });
LinkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: LinkService, providedIn: 'root' });
LinkService = __decorate([
Injectable()
], LinkService);
export { LinkService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: LinkService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}, {
type: Injectable
}], ctorParameters: function () { return [{ type: i0.RendererFactory2 }, { type: Document, decorators: [{
type: Inject,
args: [DOCUMENT]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NyYy9saW5rL2xpbmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEseUVBQXlFO0FBRXpFLE9BQU8sRUFBRSxVQUFVLEVBQThCLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7O0lBYzlCLFdBQVcsU0FBWCxXQUFXO0lBRXBCLFlBQ1ksZUFBaUMsRUFDZixRQUFrQjtRQURwQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDZixhQUFRLEdBQVIsUUFBUSxDQUFVO0lBRWhELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxHQUFtQixFQUFFLGFBQXVCO1FBRS9DLElBQUk7WUFDQSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNoRSxFQUFFLEVBQUUsSUFBSTtnQkFDUixhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtnQkFDckMsTUFBTSxFQUFFLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLEVBQUU7YUFDWCxDQUFDLENBQUM7WUFFSCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUMsSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFO2dCQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQzthQUN4RDtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBWSxFQUFFLEVBQUU7Z0JBQ3RDLE9BQU8sUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1lBRUgsK0RBQStEO1lBQy9ELFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBRXBDO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFtQjtRQUN0Qyx3QkFBd0I7UUFDeEIsTUFBTSxJQUFJLEdBQVcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbEQsT0FBTyxHQUFHLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNwQyxDQUFDO0NBQ0osQ0FBQTt3R0E5Q1ksV0FBVyxrREFJUixRQUFROzRHQUpYLFdBQVcsY0FYVixNQUFNO0FBV1AsV0FBVztJQUR2QixVQUFVLEVBQUU7R0FDQSxXQUFXLENBOEN2QjtTQTlDWSxXQUFXOzJGQUFYLFdBQVc7a0JBWnZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztrQkFTQSxVQUFVO3lGQUtpQyxRQUFROzBCQUEzQyxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNTc3NiNpc3N1ZWNvbW1lbnQtMjkxODYyOTUzXG5cbmltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsLCBSZW5kZXJlckZhY3RvcnkyLCBWaWV3RW5jYXBzdWxhdGlvbiwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuLypcbiAqIC0tIExpbmtTZXJ2aWNlIC0tICAgICAgICBbVGVtcG9yYXJ5XVxuICogQE1hcmtQaWVzemFrXG4gKlxuICogU2ltaWxhciB0byBNZXRhIHNlcnZpY2UgYnV0IG1hZGUgdG8gaGFuZGxlIDxsaW5rPiBjcmVhdGlvbiBmb3IgU0VPIHB1cnBvc2VzXG4gKiAtLSBOT1RFOiBTb29uIHRoZXJlIHdpbGwgYmUgYW4gb3ZlcmFsbCBEb2N1bWVudFNlcnZpY2Ugd2l0aGluIEFuZ3VsYXIgdGhhdCBoYW5kbGVzIE1ldGEvTGluayBldmVyeXRoaW5nXG4gKi9cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExpbmtTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyRmFjdG9yeTogUmVuZGVyZXJGYWN0b3J5MixcbiAgICAgICAgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogRG9jdW1lbnRcbiAgICApIHtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbmplY3QgdGhlIFN0YXRlIGludG8gdGhlIGJvdHRvbSBvZiB0aGUgPGhlYWQ+XG4gICAgICovXG4gICAgYWRkVGFnKHRhZzogTGlua0RlZmluaXRpb24sIGZvcmNlQ3JlYXRpb24/OiBib29sZWFuKSB7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gdGhpcy5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIodGhpcy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGlkOiAnLTEnLFxuICAgICAgICAgICAgICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgICAgICAgICAgICAgc3R5bGVzOiBbXSxcbiAgICAgICAgICAgICAgICBkYXRhOiB7fVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSByZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gdGhpcy5kb2N1bWVudC5oZWFkO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLl9wYXJzZVNlbGVjdG9yKHRhZyk7XG5cbiAgICAgICAgICAgIGlmIChoZWFkID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCc8aGVhZD4gbm90IGZvdW5kIHdpdGhpbiBET0NVTUVOVC4nKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgT2JqZWN0LmtleXModGFnKS5mb3JFYWNoKChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyZXIuc2V0QXR0cmlidXRlKGxpbmssIHByb3AsIHRhZ1twcm9wXSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gW1RPRE9dOiBnZXQgdGhlbSB0byB1cGRhdGUgdGhlIGV4aXN0aW5nIG9uZSAoaWYgaXQgZXhpc3RzKSA/XG4gICAgICAgICAgICByZW5kZXJlci5hcHBlbmRDaGlsZChoZWFkLCBsaW5rKTtcblxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciB3aXRoaW4gbGlua1NlcnZpY2UgOiAnLCBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX3BhcnNlU2VsZWN0b3IodGFnOiBMaW5rRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgICAgIC8vIFBvc3NpYmx5IHJlLXdvcmsgdGhpc1xuICAgICAgICBjb25zdCBhdHRyOiBzdHJpbmcgPSB0YWcucmVsID8gJ3JlbCcgOiAnaHJlZmxhbmcnO1xuICAgICAgICByZXR1cm4gYCR7YXR0cn09XCIke3RhZ1thdHRyXX1cImA7XG4gICAgfVxufVxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIExpbmtEZWZpbml0aW9uID0ge1xuICAgIGNoYXJzZXQ/OiBzdHJpbmc7XG4gICAgY3Jvc3NvcmlnaW4/OiBzdHJpbmc7XG4gICAgaHJlZj86IHN0cmluZztcbiAgICBocmVmbGFuZz86IHN0cmluZztcbiAgICBtZWRpYT86IHN0cmluZztcbiAgICByZWw/OiBzdHJpbmc7XG4gICAgcmV2Pzogc3RyaW5nO1xuICAgIHNpemVzPzogc3RyaW5nO1xuICAgIHRhcmdldD86IHN0cmluZztcbiAgICB0eXBlPzogc3RyaW5nO1xufSAmIHtcbiAgICAgICAgW3Byb3A6IHN0cmluZ106IHN0cmluZztcbiAgICB9O1xuIl19