nxt-highlightjs 19.1.0 → 21.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, makeEnvironmentProviders, inject, PendingTasks, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
2
+ import { InjectionToken, makeEnvironmentProviders, inject, DOCUMENT, PendingTasks, resource, Injectable, ElementRef, effect, SecurityContext, Directive, input, signal, output, booleanAttribute, NgModule } from '@angular/core';
3
3
  import { DomSanitizer } from '@angular/platform-browser';
4
- import { toSignal } from '@angular/core/rxjs-interop';
5
- import { from } from 'rxjs';
6
- import { DOCUMENT } from '@angular/common';
4
+ import { firstValueFrom, filter } from 'rxjs';
5
+ import { toObservable } from '@angular/core/rxjs-interop';
7
6
 
7
+ /**
8
+ * @internal
9
+ */
8
10
  const NXT_HIGHLIGHT_OPTIONS = new InjectionToken('NXT_HIGHLIGHT_OPTIONS');
9
11
  function provideHighlightOptions(options) {
10
12
  return makeEnvironmentProviders([
@@ -15,6 +17,9 @@ function provideHighlightOptions(options) {
15
17
  ]);
16
18
  }
17
19
 
20
+ /**
21
+ * @internal
22
+ */
18
23
  var LoaderErrors;
19
24
  (function (LoaderErrors) {
20
25
  LoaderErrors["FULL_WITH_CORE_LIBRARY_IMPORTS"] = "The full library and the core library were imported, only one of them should be imported!";
@@ -74,7 +79,7 @@ class TokenTree {
74
79
  ;
75
80
  }
76
81
  toJSON() {
77
- return JSON.stringify(this.rootNode, null, 4);
82
+ return JSON.stringify(this.rootNode, undefined, 4);
78
83
  }
79
84
  /**
80
85
  * @typedef { import("./html_renderer").Renderer } Renderer
@@ -296,23 +301,34 @@ function escapeHTML(value) {
296
301
  }
297
302
 
298
303
  class HighlightLoader {
304
+ /**
305
+ * @deprecated use hljs.value()
306
+ */
307
+ get ready() {
308
+ return firstValueFrom(this._ready$);
309
+ }
299
310
  constructor() {
300
311
  this.document = inject(DOCUMENT);
301
312
  this.options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true });
302
313
  this.pendingTasks = inject(PendingTasks);
303
- this.ready = this.pendingTasks.run(() => this.loadLibrary()
304
- .then(async (hljs) => {
305
- if (this.options?.lineNumbersLoader) {
306
- const plugin = await this.options.lineNumbersLoader();
307
- hljs.lineNumbersBlock = plugin.activateLineNumbers(this.document);
308
- }
309
- hljs.configure({
310
- __emitter: TokenTreeEmitter
311
- });
312
- if (this.options?.highlightOptions)
313
- hljs.configure(this.options.highlightOptions);
314
- return hljs;
315
- }));
314
+ this._t = this.pendingTasks.add();
315
+ this.hljs = resource({
316
+ loader: () => this.loadLibrary()
317
+ .then(async (hljs) => {
318
+ if (this.options?.lineNumbersLoader) {
319
+ const plugin = await this.options.lineNumbersLoader();
320
+ hljs.lineNumbersBlock = plugin.activateLineNumbers(this.document);
321
+ }
322
+ hljs.configure({
323
+ __emitter: TokenTreeEmitter
324
+ });
325
+ if (this.options?.highlightOptions)
326
+ hljs.configure(this.options.highlightOptions);
327
+ return hljs;
328
+ })
329
+ .finally(this._t)
330
+ }).asReadonly();
331
+ this._ready$ = toObservable(this.hljs.value).pipe(filter((v) => !!v));
316
332
  if (this.options?.themePath) {
317
333
  this.loadTheme(this.options.themePath);
318
334
  }
@@ -373,10 +389,10 @@ class HighlightLoader {
373
389
  this.themeLinkElement.media = 'screen,print';
374
390
  this.document.head.appendChild(this.themeLinkElement);
375
391
  }
376
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
377
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
392
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
393
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightLoader, providedIn: 'root' }); }
378
394
  }
379
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightLoader, decorators: [{
395
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightLoader, decorators: [{
380
396
  type: Injectable,
381
397
  args: [{
382
398
  providedIn: 'root'
@@ -386,10 +402,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
386
402
  class HighlightJS {
387
403
  constructor() {
388
404
  this.loader = inject(HighlightLoader);
389
- this.hljs = toSignal(from(this.loader.ready));
405
+ this.hljs = this.loader.hljs.value;
390
406
  }
391
407
  /**
392
408
  * Core highlighting function. Accepts the code to highlight (string) and a list of options (object)
409
+ *
410
+ * @deprecated use hljs().highlight
393
411
  */
394
412
  async highlight(code, options) {
395
413
  const hljs = await this.loader.ready;
@@ -397,6 +415,8 @@ class HighlightJS {
397
415
  }
398
416
  /**
399
417
  * Highlighting with language detection.
418
+ *
419
+ * @deprecated use hljs().highlightAuto
400
420
  */
401
421
  async highlightAuto(value, languageSubset) {
402
422
  const hljs = await this.loader.ready;
@@ -406,6 +426,8 @@ class HighlightJS {
406
426
  * Applies highlighting to a DOM node containing code.
407
427
  * This function is the one to use to apply highlighting dynamically after page load or within initialization code of third-party JavaScript frameworks.
408
428
  * 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.
429
+ *
430
+ * @deprecated use hljs().highlightElement
409
431
  */
410
432
  async highlightElement(element) {
411
433
  const hljs = await this.loader.ready;
@@ -414,6 +436,8 @@ class HighlightJS {
414
436
  /**
415
437
  * Applies highlighting to all elements on a page matching the configured cssSelector. The default cssSelector value is 'pre code',
416
438
  * which highlights all code blocks. This can be called before or after the page’s onload event has fired.
439
+ *
440
+ * @deprecated use hljs().highlightAll
417
441
  */
418
442
  async highlightAll() {
419
443
  const hljs = await this.loader.ready;
@@ -422,6 +446,8 @@ class HighlightJS {
422
446
  /**
423
447
  * Adds new language to the library under the specified name. Used mostly internally.
424
448
  * The function is passed the hljs object to be able to use common regular expressions defined within it.
449
+ *
450
+ * @deprecated use hljs().registerLanguage
425
451
  */
426
452
  async registerLanguage(languageName, languageDefinition) {
427
453
  const hljs = await this.loader.ready;
@@ -429,6 +455,8 @@ class HighlightJS {
429
455
  }
430
456
  /**
431
457
  * Removes a language and its aliases from the library. Used mostly internally
458
+ *
459
+ * @deprecated use hljs().unregisterLanguage
432
460
  */
433
461
  async unregisterLanguage(languageName) {
434
462
  const hljs = await this.loader.ready;
@@ -436,6 +464,8 @@ class HighlightJS {
436
464
  }
437
465
  /**
438
466
  * Adds new language alias or aliases to the library for the specified language name defined under languageName key.
467
+ *
468
+ * @deprecated use hljs().registerAliases
439
469
  */
440
470
  async registerAliases(alias, { languageName }) {
441
471
  const hljs = await this.loader.ready;
@@ -443,6 +473,7 @@ class HighlightJS {
443
473
  }
444
474
  /**
445
475
  * @return The languages names list.
476
+ * @deprecated use hljs().listLanguages
446
477
  */
447
478
  async listLanguages() {
448
479
  const hljs = await this.loader.ready;
@@ -450,6 +481,8 @@ class HighlightJS {
450
481
  }
451
482
  /**
452
483
  * Looks up a language by name or alias.
484
+ *
485
+ * @deprecated use hljs().getLanguage
453
486
  */
454
487
  async getLanguage(name) {
455
488
  const hljs = await this.loader.ready;
@@ -457,6 +490,8 @@ class HighlightJS {
457
490
  }
458
491
  /**
459
492
  * Enables safe mode. This is the default mode, providing the most reliable experience for production usage.
493
+ *
494
+ * @deprecated use hljs().safeMode
460
495
  */
461
496
  async safeMode() {
462
497
  const hljs = await this.loader.ready;
@@ -464,6 +499,8 @@ class HighlightJS {
464
499
  }
465
500
  /**
466
501
  * Enables debug/development mode.
502
+ *
503
+ * @deprecated use hljs().debugMode
467
504
  */
468
505
  async debugMode() {
469
506
  const hljs = await this.loader.ready;
@@ -471,24 +508,23 @@ class HighlightJS {
471
508
  }
472
509
  /**
473
510
  * Display line numbers
511
+ *
512
+ * @deprecated use hljs().lineNumbersBlock
474
513
  */
475
- async lineNumbersBlock(el, options) {
514
+ async lineNumbersBlock(code, options) {
476
515
  const hljs = await this.loader.ready;
477
- if (hljs.lineNumbersBlock) {
478
- hljs.lineNumbersBlock(el, options);
479
- }
516
+ hljs.lineNumbersBlock(code, options);
480
517
  }
481
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
482
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
518
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightJS, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
519
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightJS, providedIn: 'root' }); }
483
520
  }
484
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightJS, decorators: [{
521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightJS, decorators: [{
485
522
  type: Injectable,
486
523
  args: [{
487
524
  providedIn: 'root'
488
525
  }]
489
- }], ctorParameters: () => [] });
526
+ }] });
490
527
 
491
- /// <reference types="trusted-types" />
492
528
  /**
493
529
  * Enable usage of the library together with "trusted-types" HTTP Content-Security-Policy (CSP)
494
530
  *
@@ -498,8 +534,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
498
534
  * Read more...
499
535
  * Angular Security: https://angular.io/guide/security#enforcing-trusted-types
500
536
  * Trusted Types: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/trusted-types
537
+ *
538
+ * @internal
501
539
  */
502
540
  let policy;
541
+ /**
542
+ * @internal
543
+ */
503
544
  function getPolicy() {
504
545
  if (!policy) {
505
546
  try {
@@ -516,6 +557,9 @@ function getPolicy() {
516
557
  }
517
558
  return policy;
518
559
  }
560
+ /**
561
+ * @internal
562
+ */
519
563
  function trustedHTMLFromStringBypass(html) {
520
564
  return getPolicy()?.createHTML(html) || html;
521
565
  }
@@ -547,10 +591,10 @@ class HighlightBase {
547
591
  setInnerHTML(content) {
548
592
  this.nativeElement.innerHTML = trustedHTMLFromStringBypass(this.sanitizer.sanitize(SecurityContext.HTML, content || null) || '');
549
593
  }
550
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
551
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.1.3", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
594
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
595
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.8", type: HighlightBase, isStandalone: true, ngImport: i0 }); }
552
596
  }
553
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightBase, decorators: [{
597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightBase, decorators: [{
554
598
  type: Directive
555
599
  }], ctorParameters: () => [] });
556
600
 
@@ -560,17 +604,17 @@ class HighlightAutoDirective extends HighlightBase {
560
604
  /**
561
605
  * Code to highlight
562
606
  */
563
- this.code = input(undefined, { alias: 'nxtHighlightAuto' });
607
+ this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : {}), alias: 'nxtHighlightAuto' });
564
608
  /**
565
609
  * Highlighted result
566
610
  */
567
- this.highlightResult = signal(undefined);
611
+ this.highlightResult = signal(undefined, ...(ngDevMode ? [{ debugName: "highlightResult" }] : []));
568
612
  /**
569
613
  * An optional array of language names and aliases restricting detection to only those languages
570
614
  *
571
615
  * The subset can also be set with configure, but the local parameter overrides the option if set.
572
616
  */
573
- this.languages = input();
617
+ this.languages = input(...(ngDevMode ? [undefined, { debugName: "languages" }] : []));
574
618
  /**
575
619
  * Stream that emits when code string is highlighted
576
620
  */
@@ -580,10 +624,10 @@ class HighlightAutoDirective extends HighlightBase {
580
624
  const hljs = this.hljs.hljs();
581
625
  return hljs?.highlightAuto(code, this.languages());
582
626
  }
583
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
584
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.3", type: HighlightAutoDirective, isStandalone: true, selector: "[nxtHighlightAuto]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlightAuto", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }], usesInheritance: true, ngImport: i0 }); }
627
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightAutoDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
628
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: HighlightAutoDirective, isStandalone: true, selector: "[nxtHighlightAuto]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlightAuto", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }], usesInheritance: true, ngImport: i0 }); }
585
629
  }
586
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightAutoDirective, decorators: [{
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightAutoDirective, decorators: [{
587
631
  type: Directive,
588
632
  args: [{
589
633
  selector: '[nxtHighlightAuto]',
@@ -592,7 +636,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
592
636
  '[class.hljs]': 'true'
593
637
  }
594
638
  }]
595
- }] });
639
+ }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "nxtHighlightAuto", required: false }] }], languages: [{ type: i0.Input, args: [{ isSignal: true, alias: "languages", required: false }] }], highlighted: [{ type: i0.Output, args: ["highlighted"] }] } });
596
640
 
597
641
  class HighlightDirective extends HighlightBase {
598
642
  constructor() {
@@ -600,22 +644,20 @@ class HighlightDirective extends HighlightBase {
600
644
  /**
601
645
  * Code to highlight
602
646
  */
603
- this.code = input(undefined, { alias: 'nxtHighlight' });
647
+ this.code = input(undefined, { ...(ngDevMode ? { debugName: "code" } : {}), alias: 'nxtHighlight' });
604
648
  /**
605
649
  * Highlighted result
606
650
  */
607
- this.highlightResult = signal(undefined);
651
+ this.highlightResult = signal(undefined, ...(ngDevMode ? [{ debugName: "highlightResult" }] : []));
608
652
  /**
609
653
  * The language name highlight only one language
610
654
  */
611
- this.language = input.required();
655
+ this.language = input.required(...(ngDevMode ? [{ debugName: "language" }] : []));
612
656
  /**
613
657
  * An optional flag, when set to true it forces highlighting to finish even in case of detecting
614
658
  * illegal syntax for the language instead of throwing an exception
615
659
  */
616
- this.ignoreIllegals = input(undefined, {
617
- transform: booleanAttribute
618
- });
660
+ this.ignoreIllegals = input(undefined, { ...(ngDevMode ? { debugName: "ignoreIllegals" } : {}), transform: booleanAttribute });
619
661
  /**
620
662
  * Stream that emits when code string is highlighted
621
663
  */
@@ -628,10 +670,10 @@ class HighlightDirective extends HighlightBase {
628
670
  ignoreIllegals: this.ignoreIllegals()
629
671
  });
630
672
  }
631
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
632
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "19.1.3", type: HighlightDirective, isStandalone: true, selector: "[nxtHighlight]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlight", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null }, ignoreIllegals: { classPropertyName: "ignoreIllegals", publicName: "ignoreIllegals", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightDirective }], usesInheritance: true, ngImport: i0 }); }
673
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
674
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.8", type: HighlightDirective, isStandalone: true, selector: "[nxtHighlight]", inputs: { code: { classPropertyName: "code", publicName: "nxtHighlight", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: true, transformFunction: null }, ignoreIllegals: { classPropertyName: "ignoreIllegals", publicName: "ignoreIllegals", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { highlighted: "highlighted" }, host: { properties: { "class.hljs": "true" } }, providers: [{ provide: HighlightBase, useExisting: HighlightDirective }], usesInheritance: true, ngImport: i0 }); }
633
675
  }
634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightDirective, decorators: [{
676
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightDirective, decorators: [{
635
677
  type: Directive,
636
678
  args: [{
637
679
  selector: '[nxtHighlight]',
@@ -640,14 +682,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImpor
640
682
  '[class.hljs]': 'true'
641
683
  }
642
684
  }]
643
- }] });
685
+ }], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "nxtHighlight", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: true }] }], ignoreIllegals: [{ type: i0.Input, args: [{ isSignal: true, alias: "ignoreIllegals", required: false }] }], highlighted: [{ type: i0.Output, args: ["highlighted"] }] } });
644
686
 
687
+ /** @deprecated use standalone imports */
645
688
  class HighlightModule {
646
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
647
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
648
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule }); }
689
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
690
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, imports: [HighlightDirective, HighlightAutoDirective], exports: [HighlightDirective, HighlightAutoDirective] }); }
691
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule }); }
649
692
  }
650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: HighlightModule, decorators: [{
693
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.8", ngImport: i0, type: HighlightModule, decorators: [{
651
694
  type: NgModule,
652
695
  args: [{
653
696
  imports: [HighlightDirective, HighlightAutoDirective],
@@ -1 +1 @@
1
- {"version":3,"file":"nxt-highlightjs.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/lib/highlight.module.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } 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<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_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","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, null, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#x27;')\r\n}\r\n","import { DOCUMENT } from '@angular/common'\r\nimport { Injectable, PendingTasks, inject } from '@angular/core'\r\nimport type { HLJSApi } from 'highlight.js'\r\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\r\nimport { LoaderErrors } from './loader-errors'\r\nimport { TokenTreeEmitter } from './output'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private readonly document: Document = inject(DOCUMENT)\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n readonly ready: Promise<HLJSApi> = this.pendingTasks.run(() => this.loadLibrary()\r\n .then(async hljs => {\r\n if (this.options?.lineNumbersLoader) {\r\n const plugin = await this.options.lineNumbersLoader();\r\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\r\n }\r\n\r\n hljs.configure({\r\n __emitter: TokenTreeEmitter\r\n })\r\n\r\n if (this.options?.highlightOptions)\r\n hljs.configure(this.options.highlightOptions)\r\n\r\n return hljs\r\n })\r\n )\r\n\r\n private themeLinkElement?: HTMLLinkElement\r\n\r\n constructor() {\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath)\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private async loadLibrary(): Promise<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.options.fullLibraryLoader()\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\r\n }\r\n }\r\n throw new Error(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 async loadLanguages(hljs: HLJSApi) {\r\n await Promise.all(Object.entries(this.options?.languages || {})\r\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\r\n return hljs\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\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 * 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","import { Injectable, inject } from '@angular/core'\r\nimport { toSignal } from '@angular/core/rxjs-interop'\r\nimport type {\r\n AutoHighlightResult,\r\n HLJSApi,\r\n HighlightOptions,\r\n HighlightResult,\r\n LanguageFn\r\n} from 'highlight.js'\r\nimport { from } from 'rxjs'\r\nimport { HighlightLoader } from './highlight.loader'\r\nimport { LineNumbersOptions } from './highlight.model'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader = inject(HighlightLoader)\r\n\r\n readonly hljs = toSignal(from(this.loader.ready))\r\n\r\n constructor() { }\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 * 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 * @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","/// <reference types=\"trusted-types\" />\r\n\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\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 nxt-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: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-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) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n InputSignal,\r\n OutputEmitterRef,\r\n SecurityContext,\r\n WritableSignal,\r\n effect,\r\n inject\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 readonly hljs: HighlightJS = inject(HighlightJS)\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\r\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n abstract code: InputSignal<string | null | undefined>\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n abstract highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n abstract highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n constructor() {\r\n effect(() => {\r\n const code = this.code()\r\n if (code) {\r\n const res = this.highlightElement(code)\r\n if (res) {\r\n this.setInnerHTML(res?.value ?? undefined)\r\n this.highlightResult.set(res)\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res)\r\n }\r\n } else {\r\n this.setTextContent('')\r\n }\r\n })\r\n }\r\n\r\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\r\n\r\n private setTextContent(content: string): void {\r\n this.nativeElement.textContent = content\r\n }\r\n\r\n private setInnerHTML(content: string | undefined): void {\r\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\r\n ) as any\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input,\r\n output,\r\n OutputEmitterRef,\r\n signal\r\n} from '@angular/core'\r\nimport type { AutoHighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAutoDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlightAuto' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<AutoHighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * An optional array of language names and aliases restricting detection to only those languages\r\n *\r\n * The subset can also be set with configure, but the local parameter overrides the option if set.\r\n */\r\n readonly languages = input<string[]>()\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted: OutputEmitterRef<AutoHighlightResult> = output<AutoHighlightResult>()\r\n\r\n protected highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlightAuto(code, this.languages())\r\n }\r\n}\r\n\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n input,\r\n InputSignal,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { HighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n code = input<string | null>(undefined, { alias: 'nxtHighlight' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n highlightResult = signal<HighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * The language name highlight only one language\r\n */\r\n readonly language: InputSignal<string> = input.required<string>()\r\n\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 */\r\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n })\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n highlighted = output<HighlightResult>()\r\n\r\n highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n })\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { HighlightAutoDirective } from './highlight-auto.directive'\r\nimport { HighlightDirective } from './highlight.directive'\r\n\r\n@NgModule({\r\n imports: [HighlightDirective, HighlightAutoDirective],\r\n exports: [HighlightDirective, HighlightAutoDirective]\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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"}
1
+ {"version":3,"file":"nxt-highlightjs.mjs","sources":["../../../packages/highlightjs/src/lib/highlight.model.ts","../../../packages/highlightjs/src/lib/loader-errors.ts","../../../packages/highlightjs/src/lib/output.ts","../../../packages/highlightjs/src/lib/highlight.loader.ts","../../../packages/highlightjs/src/lib/highlight.service.ts","../../../packages/highlightjs/src/lib/trusted-types.ts","../../../packages/highlightjs/src/lib/highlight-base.directive.ts","../../../packages/highlightjs/src/lib/highlight-auto.directive.ts","../../../packages/highlightjs/src/lib/highlight.directive.ts","../../../packages/highlightjs/src/lib/highlight.module.ts","../../../packages/highlightjs/src/nxt-highlightjs.ts"],"sourcesContent":["import { InjectionToken, makeEnvironmentProviders } from '@angular/core'\r\nimport type { HLJSApi, HLJSOptions, LanguageFn } 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<LanguageFn>>\r\n coreLibraryLoader?: () => Promise<HLJSApi>\r\n fullLibraryLoader?: () => Promise<HLJSApi>\r\n lineNumbersLoader?: () => Promise<{ activateLineNumbers: (document: Document) => (code: string, options?: LineNumbersOptions) => string }>\r\n themePath?: string\r\n}\r\n\r\n/**\r\n * @internal\r\n */\r\nexport const NXT_HIGHLIGHT_OPTIONS = new InjectionToken<HighlightJSOptions>('NXT_HIGHLIGHT_OPTIONS')\r\n\r\nexport function provideHighlightOptions(options: HighlightJSOptions) {\r\n return makeEnvironmentProviders([\r\n {\r\n provide: NXT_HIGHLIGHT_OPTIONS,\r\n useValue: options\r\n }\r\n ])\r\n}\r\n","/**\r\n * @internal\r\n */\r\nexport 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","// @ts-nocheck\r\n\r\nconst BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g\r\n\r\n/**\r\n * The contents of this file is from highlight.js, with a small modification to HTMLRenderer to make sure spans don't contain line breaks (important to improve performance of line numbers).\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\r\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\r\n/** @typedef {import('highlight.js').Emitter} Emitter */\r\n/** */\r\n\r\n/** @returns */\r\nconst newNode = (opts = {}) => {\r\n /** @type DataNode */\r\n const result = { children: [] }\r\n Object.assign(result, opts)\r\n return result\r\n}\r\n\r\nclass TokenTree {\r\n constructor() {\r\n /** @type DataNode */\r\n this.rootNode = newNode()\r\n this.stack = [this.rootNode]\r\n }\r\n\r\n get top() {\r\n return this.stack[this.stack.length - 1]\r\n }\r\n\r\n get root() {\r\n return this.rootNode\r\n }\r\n\r\n /** @param node */\r\n add(node) {\r\n this.top.children.push(node)\r\n }\r\n\r\n /** @param scope */\r\n openNode(scope) {\r\n /** @type Node */\r\n const node = newNode({ scope })\r\n this.add(node)\r\n this.stack.push(node)\r\n }\r\n\r\n closeNode() {\r\n if (this.stack.length > 1) {\r\n return this.stack.pop()\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n closeAllNodes() {\r\n while (this.closeNode());\r\n }\r\n\r\n toJSON() {\r\n return JSON.stringify(this.rootNode, undefined, 4)\r\n }\r\n\r\n /**\r\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\r\n * @param builder\r\n */\r\n walk(builder) {\r\n // this does not\r\n return this.constructor._walk(builder, this.rootNode)\r\n // this works\r\n // return TokenTree._walk(builder, this.rootNode);\r\n }\r\n\r\n /**\r\n * @param builder\r\n * @param node\r\n */\r\n static _walk(builder, node) {\r\n if (typeof node === 'string') {\r\n builder.addText(node)\r\n } else if (node.children) {\r\n builder.openNode(node)\r\n node.children.forEach((child) => this._walk(builder, child))\r\n builder.closeNode(node)\r\n }\r\n return builder\r\n }\r\n\r\n /**\r\n * @param node\r\n */\r\n static _collapse(node) {\r\n if (typeof node === 'string') return\r\n if (!node.children) return\r\n\r\n if (node.children.every(el => typeof el === 'string')) {\r\n // node.text = node.children.join(\"\");\r\n // delete node.children;\r\n node.children = [node.children.join('')]\r\n } else {\r\n node.children.forEach((child) => {\r\n TokenTree._collapse(child)\r\n })\r\n }\r\n }\r\n}\r\n\r\n/**\r\n Currently this is all private API, but this is the minimal API necessary\r\n that an Emitter must implement to fully support the parser.\r\n\r\n Minimal interface:\r\n\r\n - addText(text)\r\n - __addSublanguage(emitter, subLanguageName)\r\n - startScope(scope)\r\n - endScope()\r\n - finalize()\r\n - toHTML()\r\n\r\n */\r\n\r\n/**\r\n * @implements {Emitter}\r\n */\r\nexport class TokenTreeEmitter extends TokenTree {\r\n /**\r\n * @param options\r\n */\r\n constructor(options) {\r\n super()\r\n this.options = options\r\n }\r\n\r\n /**\r\n * @param text\r\n */\r\n addText(text) {\r\n if (text === '') {\r\n return\r\n }\r\n\r\n this.add(text)\r\n }\r\n\r\n /** @param scope */\r\n startScope(scope) {\r\n this.openNode(scope)\r\n }\r\n\r\n endScope() {\r\n this.closeNode()\r\n }\r\n\r\n /**\r\n * @param emitter\r\n * @param name\r\n */\r\n __addSublanguage(emitter, name) {\r\n /** @type DataNode */\r\n const node = emitter.root\r\n if (name) node.scope = `language:${name}`\r\n\r\n this.add(node)\r\n }\r\n\r\n toHTML() {\r\n const renderer = new HTMLRenderer(this, this.options)\r\n return renderer.value()\r\n }\r\n\r\n finalize() {\r\n this.closeAllNodes()\r\n return true\r\n }\r\n}\r\n\r\n/**\r\n * @typedef {object} Renderer\r\n * @property {(text: string) => void} addText\r\n * @property {(node: Node) => void} openNode\r\n * @property {(node: Node) => void} closeNode\r\n * @property {() => string} value\r\n */\r\n\r\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\r\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\r\n/** */\r\n\r\nconst SPAN_CLOSE = '</span>'\r\n\r\n/**\r\n * Determines if a node needs to be wrapped in <span>\r\n *\r\n * @param node */\r\nconst emitsWrappingTags = (node) =>\r\n // rarely we can have a sublanguage where language is undefined\r\n // TODO: track down why\r\n !!node.scope\r\n\r\n/**\r\n *\r\n * @param name\r\n * @param options\r\n */\r\nconst scopeToCSSClass = (name, { prefix }) => {\r\n // sub-language\r\n if (name.startsWith('language:')) {\r\n return name.replace('language:', 'language-')\r\n }\r\n // tiered scope: comment.line\r\n if (name.includes('.')) {\r\n const pieces = name.split('.')\r\n return [\r\n `${prefix}${pieces.shift()}`,\r\n ...(pieces.map((x, i) => `${x}${'_'.repeat(i + 1)}`))\r\n ].join(' ')\r\n }\r\n // simple scope\r\n return `${prefix}${name}`\r\n}\r\n\r\n/** @type {Renderer} */\r\nexport class HTMLRenderer {\r\n /**\r\n * Creates a new HTMLRenderer\r\n *\r\n * @param parseTree - the parse tree (must support `walk` API)\r\n * @param options\r\n */\r\n constructor(parseTree, options) {\r\n this.buffer = ''\r\n this.classPrefix = options.classPrefix\r\n this.openStack = []\r\n parseTree.walk(this)\r\n }\r\n\r\n /**\r\n * Adds texts to the output stream\r\n *\r\n * @param text */\r\n addText(text) {\r\n const lines = text.split(BREAK_LINE_REGEXP).map(escapeHTML)\r\n const lineBreak = new Array(this.openStack.length).fill(SPAN_CLOSE).join('') + '\\n' + this.openStack.join('')\r\n this.buffer += lines.join(lineBreak)\r\n }\r\n\r\n /**\r\n * Adds a node open to the output stream (if needed)\r\n *\r\n * @param node */\r\n openNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n const className = scopeToCSSClass(node.scope,\r\n { prefix: this.classPrefix })\r\n this.span(className)\r\n }\r\n\r\n /**\r\n * Adds a node close to the output stream (if needed)\r\n *\r\n * @param node */\r\n closeNode(node) {\r\n if (!emitsWrappingTags(node)) return\r\n\r\n this.buffer += SPAN_CLOSE\r\n this.openStack.pop()\r\n }\r\n\r\n /**\r\n * returns the accumulated buffer\r\n */\r\n value() {\r\n return this.buffer\r\n }\r\n\r\n // helpers\r\n\r\n /**\r\n * Builds a span element\r\n *\r\n * @param className */\r\n span(className) {\r\n const span = `<span class=\"${className}\">`\r\n this.buffer += span\r\n this.openStack.push(span)\r\n }\r\n}\r\n\r\n/**\r\n * @param value\r\n * @returns\r\n */\r\nexport function escapeHTML(value) {\r\n return value\r\n .replace(/&/g, '&amp;')\r\n .replace(/</g, '&lt;')\r\n .replace(/>/g, '&gt;')\r\n .replace(/\"/g, '&quot;')\r\n .replace(/'/g, '&#x27;')\r\n}\r\n","import { Injectable, PendingTasks, inject, DOCUMENT, resource } from '@angular/core'\r\nimport type { HLJSApi } from 'highlight.js'\r\nimport { filter, firstValueFrom } from 'rxjs'\r\nimport { toObservable } from '@angular/core/rxjs-interop'\r\nimport { NXT_HIGHLIGHT_OPTIONS } from './highlight.model'\r\nimport { LoaderErrors } from './loader-errors'\r\nimport { TokenTreeEmitter } from './output'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightLoader {\r\n\r\n private readonly document: Document = inject(DOCUMENT)\r\n private readonly options = inject(NXT_HIGHLIGHT_OPTIONS, { optional: true })\r\n private readonly pendingTasks = inject(PendingTasks)\r\n\r\n private _t = this.pendingTasks.add()\r\n readonly hljs = resource({\r\n loader: () => this.loadLibrary()\r\n .then(async hljs => {\r\n if (this.options?.lineNumbersLoader) {\r\n const plugin = await this.options.lineNumbersLoader();\r\n (hljs as any).lineNumbersBlock = plugin.activateLineNumbers(this.document)\r\n }\r\n\r\n hljs.configure({\r\n __emitter: TokenTreeEmitter\r\n })\r\n\r\n if (this.options?.highlightOptions)\r\n hljs.configure(this.options.highlightOptions)\r\n\r\n return hljs\r\n })\r\n .finally(this._t)\r\n }).asReadonly()\r\n\r\n private readonly _ready$ = toObservable(this.hljs.value).pipe(filter((v): v is HLJSApi => !!v))\r\n\r\n /**\r\n * @deprecated use hljs.value()\r\n */\r\n get ready() {\r\n return firstValueFrom(this._ready$)\r\n }\r\n\r\n private themeLinkElement?: HTMLLinkElement\r\n\r\n constructor() {\r\n if (this.options?.themePath) {\r\n this.loadTheme(this.options.themePath)\r\n }\r\n }\r\n\r\n /**\r\n * Lazy-Load highlight.js library\r\n */\r\n private async loadLibrary(): Promise<HLJSApi> {\r\n if (this.options) {\r\n if (this.options.fullLibraryLoader && this.options.coreLibraryLoader) {\r\n throw new Error(LoaderErrors.FULL_WITH_CORE_LIBRARY_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.FULL_WITH_LANGUAGE_IMPORTS)\r\n }\r\n if (this.options.coreLibraryLoader && !this.options.languages) {\r\n throw new Error(LoaderErrors.CORE_WITHOUT_LANGUAGE_IMPORTS)\r\n }\r\n if (!this.options.coreLibraryLoader && this.options.languages) {\r\n throw new Error(LoaderErrors.LANGUAGE_WITHOUT_CORE_IMPORTS)\r\n }\r\n if (this.options.fullLibraryLoader) {\r\n return this.options.fullLibraryLoader()\r\n }\r\n if (this.options.coreLibraryLoader && this.options.languages && Object.keys(this.options.languages).length) {\r\n return this.options.coreLibraryLoader().then(hljs => this.loadLanguages(hljs))\r\n }\r\n }\r\n throw new Error(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 async loadLanguages(hljs: HLJSApi) {\r\n await Promise.all(Object.entries(this.options?.languages || {})\r\n .map(([langName, langLoader]) => langLoader().then(langFunc => hljs.registerLanguage(langName, langFunc))))\r\n return hljs\r\n }\r\n\r\n /**\r\n * Reload theme styles\r\n */\r\n setTheme(path: string): void {\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 * 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","import { Injectable, inject } from '@angular/core'\r\nimport type {\r\n AutoHighlightResult,\r\n HLJSApi,\r\n HighlightOptions,\r\n HighlightResult,\r\n LanguageFn\r\n} from 'highlight.js'\r\nimport { LineNumbersOptions } from './highlight.model'\r\nimport { HighlightLoader } from './highlight.loader'\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HighlightJS {\r\n\r\n private readonly loader = inject(HighlightLoader)\r\n\r\n readonly hljs = this.loader.hljs.value\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 * @deprecated use hljs().highlight\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 * @deprecated use hljs().highlightAuto\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 * @deprecated use hljs().highlightElement\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 * @deprecated use hljs().highlightAll\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 * 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 * @deprecated use hljs().registerLanguage\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 * @deprecated use hljs().unregisterLanguage\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 * @deprecated use hljs().registerAliases\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 * @return The languages names list.\r\n * @deprecated use hljs().listLanguages\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 * @deprecated use hljs().getLanguage\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 * @deprecated use hljs().safeMode\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 * @deprecated use hljs().debugMode\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 * @deprecated use hljs().lineNumbersBlock\r\n */\r\n async lineNumbersBlock(code: string, options: LineNumbersOptions): Promise<void> {\r\n const hljs: HLJSApi = await this.loader.ready;\r\n (hljs as any).lineNumbersBlock(code, options)\r\n }\r\n}\r\n","/// <reference types=\"trusted-types\" />\r\nimport { TrustedTypePolicy } from 'trusted-types/lib'\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 nxt-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\n * @internal\r\n */\r\nlet policy: Pick<TrustedTypePolicy<{\r\n createHTML: (s: string) => string\r\n}>, 'name' | 'createHTML'> | undefined\r\n\r\n/**\r\n * @internal\r\n */\r\nfunction getPolicy() {\r\n if (!policy) {\r\n try {\r\n policy = window?.trustedTypes?.createPolicy('nxt-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\n/**\r\n * @internal\r\n */\r\nexport function trustedHTMLFromStringBypass(html: string) {\r\n return getPolicy()?.createHTML(html) || html\r\n}\r\n","import {\r\n Directive,\r\n ElementRef,\r\n InputSignal,\r\n OutputEmitterRef,\r\n SecurityContext,\r\n WritableSignal,\r\n effect,\r\n inject\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 readonly hljs: HighlightJS = inject(HighlightJS)\r\n\r\n private readonly nativeElement: HTMLElement = inject(ElementRef<HTMLElement>).nativeElement\r\n private readonly sanitizer: DomSanitizer = inject(DomSanitizer)\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n abstract readonly code: InputSignal<string | undefined>\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n abstract readonly highlightResult: WritableSignal<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n abstract readonly highlighted: OutputEmitterRef<HighlightResult | AutoHighlightResult | undefined>\r\n\r\n constructor() {\r\n effect(() => {\r\n const code = this.code()\r\n if (code) {\r\n const res = this.highlightElement(code)\r\n if (res) {\r\n this.setInnerHTML(res?.value ?? undefined)\r\n this.highlightResult.set(res)\r\n // Forward highlight response to the highlighted output\r\n this.highlighted.emit(res)\r\n }\r\n } else {\r\n this.setTextContent('')\r\n }\r\n })\r\n }\r\n\r\n protected abstract highlightElement(code: string): HighlightResult | AutoHighlightResult | undefined\r\n\r\n private setTextContent(content: string): void {\r\n this.nativeElement.textContent = content\r\n }\r\n\r\n private setInnerHTML(content: string | undefined): void {\r\n this.nativeElement.innerHTML = trustedHTMLFromStringBypass(\r\n this.sanitizer.sanitize(SecurityContext.HTML, content || null) || ''\r\n ) as any\r\n }\r\n}\r\n","import {\r\n Directive,\r\n input,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { AutoHighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlightAuto]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightAutoDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightAutoDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n readonly code = input<string>(undefined, { alias: 'nxtHighlightAuto' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n readonly highlightResult = signal<AutoHighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * An optional array of language names and aliases restricting detection to only those languages\r\n *\r\n * The subset can also be set with configure, but the local parameter overrides the option if set.\r\n */\r\n readonly languages = input<string[]>()\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n readonly highlighted = output<AutoHighlightResult>()\r\n\r\n protected highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlightAuto(code, this.languages())\r\n }\r\n}\r\n\r\n","import {\r\n booleanAttribute,\r\n Directive,\r\n input,\r\n output,\r\n signal\r\n} from '@angular/core'\r\nimport type { HighlightResult } from 'highlight.js'\r\nimport { HighlightBase } from './highlight-base.directive'\r\n\r\n@Directive({\r\n selector: '[nxtHighlight]',\r\n providers: [{ provide: HighlightBase, useExisting: HighlightDirective }],\r\n host: {\r\n '[class.hljs]': 'true'\r\n }\r\n})\r\nexport class HighlightDirective extends HighlightBase {\r\n\r\n /**\r\n * Code to highlight\r\n */\r\n readonly code = input<string>(undefined, { alias: 'nxtHighlight' })\r\n\r\n /**\r\n * Highlighted result\r\n */\r\n readonly highlightResult = signal<HighlightResult | undefined>(undefined)\r\n\r\n /**\r\n * The language name highlight only one language\r\n */\r\n readonly language = input.required<string>()\r\n\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 */\r\n readonly ignoreIllegals = input<boolean, unknown>(undefined, {\r\n transform: booleanAttribute\r\n })\r\n\r\n /**\r\n * Stream that emits when code string is highlighted\r\n */\r\n readonly highlighted = output<HighlightResult>()\r\n\r\n highlightElement(code: string) {\r\n const hljs = this.hljs.hljs()\r\n return hljs?.highlight(code, {\r\n language: this.language(),\r\n ignoreIllegals: this.ignoreIllegals()\r\n })\r\n }\r\n}\r\n","import { NgModule } from '@angular/core'\r\nimport { HighlightAutoDirective } from './highlight-auto.directive'\r\nimport { HighlightDirective } from './highlight.directive'\r\n\r\n/** @deprecated use standalone imports */\r\n@NgModule({\r\n imports: [HighlightDirective, HighlightAutoDirective],\r\n exports: [HighlightDirective, HighlightAutoDirective]\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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"}