UNPKG

ngx-highlightjs

Version:

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

1 lines 32.7 kB
{"version":3,"file":"ngx-highlightjs.mjs","sources":["../../../projects/ngx-highlightjs/src/lib/highlight.model.ts","../../../projects/ngx-highlightjs/src/lib/loader-errors.ts","../../../projects/ngx-highlightjs/src/lib/highlight.loader.ts","../../../projects/ngx-highlightjs/src/lib/highlight.service.ts","../../../projects/ngx-highlightjs/src/lib/trusted-types.ts","../../../projects/ngx-highlightjs/src/lib/highlight-base.ts","../../../projects/ngx-highlightjs/src/lib/highlight.ts","../../../projects/ngx-highlightjs/src/lib/highlight-auto.ts","../../../projects/ngx-highlightjs/src/lib/highlight.module.ts","../../../projects/ngx-highlightjs/src/ngx-highlightjs.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\r\nimport type { HLJSOptions } from 'highlight.js';\r\n\r\n/**\r\n * Full documentation is available here https://highlightjs.readthedocs.io/en/latest/api.html\r\n */\r\n\r\nexport interface LineNumbersOptions {\r\n startFrom?: number;\r\n singleLine?: boolean;\r\n}\r\n\r\nexport interface HighlightJSOptions {\r\n highlightOptions?: Partial<HLJSOptions>;\r\n lineNumbersOptions?: LineNumbersOptions;\r\n languages?: Record<string, () => Promise<unknown>>;\r\n coreLibraryLoader?: () => Promise<unknown>;\r\n fullLibraryLoader?: () => Promise<unknown>;\r\n lineNumbersLoader?: () => Promise<unknown>;\r\n themePath?: string;\r\n}\r\n\r\nexport const HIGHLIGHT_OPTIONS: InjectionToken<HighlightJSOptions> = new InjectionToken<HighlightJSOptions>('HIGHLIGHT_OPTIONS');\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions): EnvironmentProviders {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ]);\r\n}\r\n","export enum LoaderErrors {\r\n FULL_WITH_CORE_LIBRARY_IMPORTS = 'The full library and the core library were imported, only one of them should be imported!',\r\n FULL_WITH_LANGUAGE_IMPORTS = 'The highlighting languages were imported they are not needed!',\r\n CORE_WITHOUT_LANGUAGE_IMPORTS = 'The highlighting languages were not imported!',\r\n LANGUAGE_WITHOUT_CORE_IMPORTS = 'The core library was not imported!',\r\n NO_FULL_AND_NO_CORE_IMPORTS = 'Highlight.js library was not imported!',\r\n}\r\n","import { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\nimport { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n Observable,\r\n BehaviorSubject,\r\n EMPTY,\r\n tap,\r\n map,\r\n from,\r\n filter,\r\n forkJoin,\r\n switchMap,\r\n throwError,\r\n catchError,\r\n firstValueFrom\r\n} from 'rxjs';\r\nimport { HIGHLIGHT_OPTIONS, HighlightJSOptions } from './highlight.model';\r\nimport type { HLJSApi, LanguageFn } from 'highlight.js';\r\nimport { LoaderErrors } from './loader-errors';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private document: Document = inject(DOCUMENT);\r\n private isPlatformBrowser: boolean = isPlatformBrowser(inject(PLATFORM_ID));\r\n private options: HighlightJSOptions = inject(HIGHLIGHT_OPTIONS, { optional: true });\r\n\r\n // Stream that emits when hljs library is loaded and ready to use\r\n private readonly _ready: BehaviorSubject<HLJSApi> = new BehaviorSubject<HLJSApi>(null);\r\n\r\n readonly ready: Promise<HLJSApi> = firstValueFrom(this._ready.asObservable().pipe(\r\n filter((hljs: HLJSApi) => !!hljs),\r\n ));\r\n\r\n private _themeLinkElement: HTMLLinkElement;\r\n\r\n constructor() {\r\n if (this.isPlatformBrowser) {\r\n // Check if hljs is already available\r\n if (this.document.defaultView['hljs']) {\r\n this._ready.next(this.document.defaultView['hljs']);\r\n } else {\r\n // Load hljs library\r\n this._loadLibrary().pipe(\r\n switchMap((hljs: HLJSApi) => {\r\n if (this.options?.lineNumbersLoader) {\r\n // Make hljs available on window object (required for the line numbers library)\r\n this.document.defaultView['hljs'] = hljs;\r\n // Load line numbers library\r\n return this.loadLineNumbers().pipe(\r\n tap((plugin: { activateLineNumbers: () => void }) => {\r\n plugin.activateLineNumbers();\r\n this._ready.next(hljs);\r\n })\r\n );\r\n } else {\r\n this._ready.next(hljs);\r\n return EMPTY;\r\n }\r\n }),\r\n catchError((e: Error) => {\r\n console.error('[HLJS] ', e);\r\n this._ready.error(e);\r\n return EMPTY;\r\n })\r\n ).subscribe();\r\n }\r\n // Load highlighting theme\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private _loadLibrary(): Observable<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n return throwError(() => LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS);\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n return throwError(() => LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS);\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n return throwError(() => LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS);\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n return throwError(() => LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS);\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.loadFullLibrary();\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.loadCoreLibrary().pipe(switchMap((hljs: HLJSApi) => this._loadLanguages(hljs)));\r\n }\r\n }\r\n return throwError(() => LoaderErrors.NO_FULL_AND_NO_CORE_IMPORTS);\r\n }\r\n\r\n /**\r\n * Lazy-load highlight.js languages\r\n */\r\n private _loadLanguages(hljs: HLJSApi): Observable<HLJSApi> {\r\n const languages: Observable<unknown>[] = Object.entries(this.options.languages).map(([langName, langLoader]: [string, () => Promise<unknown>]) =>\r\n importModule(langLoader()).pipe(\r\n tap((langFunc: LanguageFn) => hljs.registerLanguage(langName, langFunc))\r\n )\r\n );\r\n return forkJoin(languages).pipe(map(() => hljs));\r\n }\r\n\r\n\r\n /**\r\n * Import highlight.js core library\r\n */\r\n private loadCoreLibrary(): Observable<HLJSApi> {\r\n return importModule<HLJSApi>(this.options.coreLibraryLoader());\r\n }\r\n\r\n /**\r\n * Import highlight.js library with all languages\r\n */\r\n private loadFullLibrary(): Observable<HLJSApi> {\r\n return importModule<HLJSApi>(this.options.fullLibraryLoader());\r\n }\r\n\r\n /**\r\n * Import line numbers library\r\n */\r\n private loadLineNumbers(): Observable<unknown> {\r\n return from(this.options.lineNumbersLoader!());\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\r\n if (this.isPlatformBrowser) {\r\n if (this._themeLinkElement) {\r\n this._themeLinkElement.href = path;\r\n } else {\r\n this.loadTheme(path);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Load theme\r\n */\r\n private loadTheme(path: string): void {\r\n this._themeLinkElement = this.document.createElement('link');\r\n this._themeLinkElement.href = path;\r\n this._themeLinkElement.type = 'text/css';\r\n this._themeLinkElement.rel = 'stylesheet';\r\n this._themeLinkElement.media = 'screen,print';\r\n this.document.head.appendChild(this._themeLinkElement);\r\n }\r\n}\r\n\r\n/**\r\n * Map loader response to module object\r\n */\r\nconst importModule = <T>(moduleLoader: Promise<unknown>): Observable<T> => {\r\n return from(moduleLoader).pipe(\r\n filter((module: { default: T }) => !!module?.default),\r\n map((module: { default: T }) => module.default)\r\n );\r\n};\r\n","import { Injectable, signal, inject, computed, WritableSignal, Signal } from '@angular/core';\r\nimport type {\r\n HLJSApi,\r\n LanguageFn,\r\n HLJSOptions,\r\n HighlightResult,\r\n HighlightOptions,\r\n AutoHighlightResult\r\n} from 'highlight.js';\r\nimport { HighlightJSOptions, LineNumbersOptions, HIGHLIGHT_OPTIONS } from './highlight.model';\r\nimport { HighlightLoader } from './highlight.loader';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader: HighlightLoader = inject(HighlightLoader);\r\n\r\n private readonly options: Partial<HighlightJSOptions> = inject(HIGHLIGHT_OPTIONS, { optional: true });\r\n\r\n private readonly hljsSignal: WritableSignal<HLJSApi> = signal(null);\r\n\r\n readonly hljs: Signal<HLJSApi> = computed(() => this.hljsSignal());\r\n\r\n constructor() {\r\n // Load highlight.js library on init\r\n this.loader.ready.then((hljs: HLJSApi) => {\r\n this.hljsSignal.set(hljs);\r\n if (this.options?.highlightOptions) {\r\n // Set global config if present\r\n hljs.configure(this.options.highlightOptions);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)\r\n */\r\n async highlight(code: string, options: HighlightOptions): Promise<HighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n return hljs.highlight(code, options);\r\n }\r\n\r\n /**\r\n * Highlighting with language detection.\r\n */\r\n async highlightAuto(value: string, languageSubset: string[]): Promise<AutoHighlightResult> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n return hljs.highlightAuto(value, languageSubset);\r\n }\r\n\r\n /**\r\n * Applies highlighting to a DOM node containing code.\r\n * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.\r\n * The function uses language detection by default but you can specify the language in the class attribute of the DOM node. See the scopes reference for all available language names and scopes.\r\n */\r\n async highlightElement(element: HTMLElement): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.highlightElement(element);\r\n }\r\n\r\n /**\r\n * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',\r\n * which highlights all code blocks. This can be called before or after the page’s onload event has fired.\r\n */\r\n async highlightAll(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.highlightAll();\r\n }\r\n\r\n /**\r\n * @deprecated in version 12\r\n * Configures global options:\r\n */\r\n async configure(config: Partial<HLJSOptions>): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.configure(config);\r\n }\r\n\r\n /**\r\n * Adds new language to the library under the specified name. Used mostly internally.\r\n * The function is passed the hljs object to be able to use common regular expressions defined within it.\r\n */\r\n async registerLanguage(languageName: string, languageDefinition: LanguageFn): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.registerLanguage(languageName, languageDefinition);\r\n }\r\n\r\n /**\r\n * Removes a language and its aliases from the library. Used mostly internally\r\n */\r\n async unregisterLanguage(languageName: string): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.unregisterLanguage(languageName);\r\n }\r\n\r\n /**\r\n * Adds new language alias or aliases to the library for the specified language name defined under languageName key.\r\n */\r\n async registerAliases(alias: string | string[], { languageName }: { languageName: string }): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.registerAliases(alias, { languageName });\r\n }\r\n\r\n\r\n /**\r\n * @return The languages names list.\r\n */\r\n async listLanguages(): Promise<string[]> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n return hljs.listLanguages();\r\n }\r\n\r\n /**\r\n * Looks up a language by name or alias.\r\n */\r\n async getLanguage(name: string): Promise<any> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n return hljs.getLanguage(name);\r\n }\r\n\r\n /**\r\n * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.\r\n */\r\n async safeMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.safeMode();\r\n }\r\n\r\n /**\r\n * Enables debug/development mode.\r\n */\r\n async debugMode(): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n hljs.debugMode();\r\n }\r\n\r\n /**\r\n * Display line numbers\r\n */\r\n async lineNumbersBlock(el: HTMLElement, options: LineNumbersOptions): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n if ((hljs as any).lineNumbersBlock) {\r\n (hljs as any).lineNumbersBlock(el, options);\r\n }\r\n }\r\n}\r\n","/**\r\n * Enable usage of the library together with \"trusted-types\" HTTP Content-Security-Policy (CSP)\r\n *\r\n * Can be added to angular.json -> serve -> options -> headers to try it out in DEV mode\r\n * \"Content-Security-Policy\": \"trusted-types ngx-highlightjs; require-trusted-types-for 'script'\"\r\n *\r\n * Read more...\r\n * Angular Security: https://angular.io/guide/security#enforcing-trusted-types\r\n * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types\r\n */\r\nlet policy;\r\n\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = (window as any)?.trustedTypes?.createPolicy('ngx-highlightjs', {\r\n createHTML: (s: string) => s,\r\n });\r\n } catch {\r\n // trustedTypes.createPolicy throws if called with a name that is\r\n // already registered, even in report-only mode. Until the API changes,\r\n // catch the error not to break the applications functionally. In such\r\n // cases, the code will fall back to using strings.\r\n }\r\n }\r\n return policy;\r\n}\r\n\r\nexport function trustedHTMLFromStringBypass(html: string): string {\r\n return getPolicy()?.createHTML(html) || html;\r\n}\r\n","import {\r\n Directive,\r\n inject,\r\n afterRenderEffect,\r\n ElementRef,\r\n InputSignal,\r\n WritableSignal,\r\n SecurityContext,\r\n OutputEmitterRef\r\n} from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\nimport type { AutoHighlightResult, HighlightResult } from 'highlight.js';\r\nimport { HighlightJS } from './highlight.service';\r\nimport { trustedHTMLFromStringBypass } from './trusted-types';\r\n\r\n@Directive()\r\nexport abstract class HighlightBase {\r\n\r\n protected _hljs: HighlightJS = inject(HighlightJS);\r\n\r\n private readonly _nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement;\r\n private _sanitizer: DomSanitizer = inject(DomSanitizer);\r\n\r\n // Code to highlight\r\n abstract code: InputSignal<string>;\r\n\r\n // Highlighted result\r\n abstract highlightResult: WritableSignal<HighlightResult | AutoHighlightResult>;\r\n\r\n // Stream that emits when code string is highlighted\r\n abstract highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult>;\r\n\r\n\r\n constructor() {\r\n afterRenderEffect({\r\n write: () => {\r\n const code: string = this.code();\r\n // Set code text before highlighting\r\n this.setTextContent(code || '');\r\n if (code) {\r\n this.highlightElement(code);\r\n }\r\n }\r\n });\r\n\r\n afterRenderEffect({\r\n write: () => {\r\n const res: AutoHighlightResult = this.highlightResult();\r\n this.setInnerHTML(res?.value);\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res);\r\n }\r\n });\r\n }\r\n\r\n protected abstract highlightElement(code: string): Promise<void> ;\r\n\r\n private setTextContent(content: string): void {\r\n requestAnimationFrame(() =>\r\n this._nativeElement.textContent = content\r\n );\r\n }\r\n\r\n private setInnerHTML(content: string | null): void {\r\n requestAnimationFrame(() =>\r\n this._nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this._sanitizer.sanitize(SecurityContext.HTML, content) || ''\r\n )\r\n );\r\n }\r\n}\r\n","import {\r\n Directive,\r\n signal,\r\n output,\r\n booleanAttribute,\r\n input,\r\n InputSignal,\r\n WritableSignal,\r\n OutputEmitterRef,\r\n InputSignalWithTransform\r\n} from '@angular/core';\r\nimport type { HighlightResult } from 'highlight.js';\r\nimport { HighlightBase } from './highlight-base';\r\n\r\n@Directive({\r\n selector: '[highlight]',\r\n providers: [{ provide: HighlightBase, useExisting: Highlight }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class Highlight extends HighlightBase {\r\n\r\n // Code to highlight\r\n code: InputSignal<string> = input(null, { alias: 'highlight' });\r\n\r\n // Highlighted result\r\n highlightResult: WritableSignal<HighlightResult> = signal(null);\r\n\r\n // The language name highlight only one language.\r\n readonly language: InputSignal<string> = input.required<string>();\r\n\r\n // An optional flag, when set to true it forces highlighting to finish even in case of detecting\r\n // illegal syntax for the language instead of throwing an exception.\r\n readonly ignoreIllegals: InputSignalWithTransform<boolean, unknown> = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n });\r\n\r\n // Stream that emits when code string is highlighted\r\n highlighted: OutputEmitterRef<HighlightResult> = output<HighlightResult>();\r\n\r\n async highlightElement(code: string): Promise<void> {\r\n const res: HighlightResult = await this._hljs.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n });\r\n this.highlightResult.set(res);\r\n }\r\n}\r\n","import {\r\n Directive,\r\n signal,\r\n output,\r\n input,\r\n InputSignal,\r\n WritableSignal,\r\n OutputEmitterRef\r\n} from '@angular/core';\r\nimport type { AutoHighlightResult } from 'highlight.js';\r\nimport { HighlightBase } from './highlight-base';\r\n\r\n@Directive({\r\n selector: '[highlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAuto }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAuto extends HighlightBase {\r\n\r\n // Code to highlight\r\n code: InputSignal<string> = input(null, { alias: 'highlightAuto' });\r\n\r\n // Highlighted result\r\n highlightResult: WritableSignal<AutoHighlightResult> = signal(null);\r\n\r\n // An optional array of language names and aliases restricting detection to only those languages.\r\n // The subset can also be set with configure, but the local parameter overrides the option if set.\r\n readonly languages: InputSignal<string[]> = input<string[]>();\r\n\r\n // Stream that emits when code string is highlighted\r\n highlighted: OutputEmitterRef<AutoHighlightResult> = output<AutoHighlightResult>();\r\n\r\n protected async highlightElement(code: string): Promise<void> {\r\n const res: AutoHighlightResult = await this._hljs.highlightAuto(code, this.languages());\r\n this.highlightResult.set(res);\r\n }\r\n}\r\n\r\n","import { NgModule } from '@angular/core';\r\nimport { Highlight } from './highlight';\r\nimport { HighlightAuto } from './highlight-auto';\r\n\r\n@NgModule({\r\n imports: [Highlight, HighlightAuto],\r\n exports: [Highlight, HighlightAuto]\r\n})\r\nexport class HighlightModule {\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}