UNPKG

ngx-highlightjs

Version:

Instant code highlighting, auto-detect language, super easy to use.

67 lines 7.88 kB
import { Inject, Injectable, Optional } from '@angular/core'; import { HttpParams } from '@angular/common/http'; import { EMPTY } from 'rxjs'; import { catchError, publishReplay, refCount } from 'rxjs/operators'; import { GIST_OPTIONS } from './gist.model'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; export class CodeLoader { constructor(_http, _options) { this._http = _http; this._options = _options; } /** * Get plus code * @param id Gist ID */ getCodeFromGist(id) { let params; if (this.isOAuthProvided()) { params = new HttpParams().set('client_id', this._options.clientId).set('client_secret', this._options.clientSecret); } return this.fetchFile(`https://api.github.com/gists/${id}`, { params, responseType: 'json' }); } /** * Get code by URL * @param url File raw link */ getCodeFromUrl(url) { return this.fetchFile(url, { responseType: 'text' }); } /** * Check if OAuth option is provided */ isOAuthProvided() { return !!this._options && !!this._options.clientId && !!this._options.clientSecret; } fetchFile(url, options) { // Check if URL is valid if (isUrl(url)) { return this._http.get(url, options).pipe( // Catch response publishReplay(1), refCount(), catchError((err) => { console.error('[NgxHighlight]: Unable to fetch the URL!', err.message); return EMPTY; })); } return EMPTY; } } CodeLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CodeLoader, deps: [{ token: i1.HttpClient }, { token: GIST_OPTIONS, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); CodeLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CodeLoader, providedIn: 'root' }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: CodeLoader, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [GIST_OPTIONS] }] }]; } }); function isUrl(url) { const regExp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/; return regExp.test(url); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlnaGxpZ2h0anMvcGx1cy9zcmMvY29kZS1sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBYyxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM5RCxPQUFPLEVBQWMsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBUSxZQUFZLEVBQWUsTUFBTSxjQUFjLENBQUM7OztBQUsvRCxNQUFNLE9BQU8sVUFBVTtJQUNyQixZQUFvQixLQUFpQixFQUE0QyxRQUFxQjtRQUFsRixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQTRDLGFBQVEsR0FBUixRQUFRLENBQWE7SUFDdEcsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWUsQ0FBQyxFQUFVO1FBQ3hCLElBQUksTUFBbUIsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUMxQixNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3JIO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLGdDQUFnQyxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxDQUFDLEdBQVc7UUFDeEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRDs7T0FFRztJQUNLLGVBQWU7UUFDckIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3JGLENBQUM7SUFFTyxTQUFTLENBQUMsR0FBVyxFQUFFLE9BQVk7UUFDekMsd0JBQXdCO1FBQ3hCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSTtZQUN0QyxpQkFBaUI7WUFDakIsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUNoQixRQUFRLEVBQUUsRUFDVixVQUFVLENBQUMsQ0FBQyxHQUFVLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxDQUFDLEtBQUssQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3ZFLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNIO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzt1R0E3Q1UsVUFBVSw0Q0FDc0MsWUFBWTsyR0FENUQsVUFBVSxjQUZULE1BQU07MkZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUV5QyxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFlBQVk7O0FBZ0R6RSxTQUFTLEtBQUssQ0FBQyxHQUFXO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLG1GQUFtRixDQUFDO0lBQ25HLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBFTVBUWSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgR2lzdCwgR0lTVF9PUFRJT05TLCBHaXN0T3B0aW9ucyB9IGZyb20gJy4vZ2lzdC5tb2RlbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb2RlTG9hZGVyIHtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50LCBAT3B0aW9uYWwoKSBASW5qZWN0KEdJU1RfT1BUSU9OUykgcHJpdmF0ZSBfb3B0aW9uczogR2lzdE9wdGlvbnMpIHtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBwbHVzIGNvZGVcclxuICAgKiBAcGFyYW0gaWQgR2lzdCBJRFxyXG4gICAqL1xyXG4gIGdldENvZGVGcm9tR2lzdChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxHaXN0PiB7XHJcbiAgICBsZXQgcGFyYW1zITogSHR0cFBhcmFtcztcclxuICAgIGlmICh0aGlzLmlzT0F1dGhQcm92aWRlZCgpKSB7XHJcbiAgICAgIHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdjbGllbnRfaWQnLCB0aGlzLl9vcHRpb25zLmNsaWVudElkKS5zZXQoJ2NsaWVudF9zZWNyZXQnLCB0aGlzLl9vcHRpb25zLmNsaWVudFNlY3JldCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5mZXRjaEZpbGUoYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vZ2lzdHMvJHtpZH1gLCB7IHBhcmFtcywgcmVzcG9uc2VUeXBlOiAnanNvbicgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgY29kZSBieSBVUkxcclxuICAgKiBAcGFyYW0gdXJsIEZpbGUgcmF3IGxpbmtcclxuICAgKi9cclxuICBnZXRDb2RlRnJvbVVybCh1cmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gdGhpcy5mZXRjaEZpbGUodXJsLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgT0F1dGggb3B0aW9uIGlzIHByb3ZpZGVkXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBpc09BdXRoUHJvdmlkZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLl9vcHRpb25zICYmICEhdGhpcy5fb3B0aW9ucy5jbGllbnRJZCAmJiAhIXRoaXMuX29wdGlvbnMuY2xpZW50U2VjcmV0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmZXRjaEZpbGUodXJsOiBzdHJpbmcsIG9wdGlvbnM6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAvLyBDaGVjayBpZiBVUkwgaXMgdmFsaWRcclxuICAgIGlmIChpc1VybCh1cmwpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldCh1cmwsIG9wdGlvbnMpLnBpcGUoXHJcbiAgICAgICAgLy8gQ2F0Y2ggcmVzcG9uc2VcclxuICAgICAgICBwdWJsaXNoUmVwbGF5KDEpLFxyXG4gICAgICAgIHJlZkNvdW50KCksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBFcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignW05neEhpZ2hsaWdodF06IFVuYWJsZSB0byBmZXRjaCB0aGUgVVJMIScsIGVyci5tZXNzYWdlKTtcclxuICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEVNUFRZO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgY29uc3QgcmVnRXhwID0gLyhmdHB8aHR0cHxodHRwcyk6XFwvXFwvKFxcdys6ezAsMX1cXHcqQCk/KFxcUyspKDpbMC05XSspPyhcXC98XFwvKFtcXHcjITouPys9JiVAIVxcLVxcL10pKT8vO1xyXG4gIHJldHVybiByZWdFeHAudGVzdCh1cmwpO1xyXG59XHJcbiJdfQ==