ngx-transforms 0.3.0 → 0.3.1
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.
- package/README.md +33 -78
- package/fesm2022/ngx-transforms.mjs +1430 -1
- package/fesm2022/ngx-transforms.mjs.map +1 -1
- package/package.json +3 -3
- package/types/ngx-transforms.d.ts +817 -1
|
@@ -473,6 +473,1397 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImpor
|
|
|
473
473
|
}]
|
|
474
474
|
}] });
|
|
475
475
|
|
|
476
|
+
/**
|
|
477
|
+
* TrimPipe: Removes whitespace (or specified characters) from both ends of a string.
|
|
478
|
+
*
|
|
479
|
+
* By default, trims whitespace. Pass a string of characters to trim those instead.
|
|
480
|
+
*
|
|
481
|
+
* @param {string} value - The string to trim.
|
|
482
|
+
* @param {string} [chars] - Optional set of characters to trim from both ends.
|
|
483
|
+
*
|
|
484
|
+
* @returns {string} - The trimmed string, or an empty string if input is invalid.
|
|
485
|
+
*
|
|
486
|
+
* @example
|
|
487
|
+
* {{ ' hello ' | trim }} // 'hello'
|
|
488
|
+
* {{ '--hello--' | trim:'-' }} // 'hello'
|
|
489
|
+
* {{ '***title***' | trim:'*' }} // 'title'
|
|
490
|
+
*/
|
|
491
|
+
class TrimPipe {
|
|
492
|
+
transform(value, chars) {
|
|
493
|
+
if (typeof value !== 'string')
|
|
494
|
+
return '';
|
|
495
|
+
if (!chars)
|
|
496
|
+
return value.trim();
|
|
497
|
+
const escaped = chars
|
|
498
|
+
.split('')
|
|
499
|
+
.map(c => c.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))
|
|
500
|
+
.join('');
|
|
501
|
+
const regex = new RegExp(`^[${escaped}]+|[${escaped}]+$`, 'g');
|
|
502
|
+
return value.replace(regex, '');
|
|
503
|
+
}
|
|
504
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TrimPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
505
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: TrimPipe, isStandalone: true, name: "trim" });
|
|
506
|
+
}
|
|
507
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TrimPipe, decorators: [{
|
|
508
|
+
type: Pipe,
|
|
509
|
+
args: [{
|
|
510
|
+
name: 'trim',
|
|
511
|
+
standalone: true,
|
|
512
|
+
}]
|
|
513
|
+
}] });
|
|
514
|
+
|
|
515
|
+
/**
|
|
516
|
+
* CapitalizePipe: Uppercases the first character and lowercases the rest.
|
|
517
|
+
*
|
|
518
|
+
* Useful for normalizing headings, labels, and proper nouns.
|
|
519
|
+
* Differs from `upperFirst` which only uppercases the first character without
|
|
520
|
+
* altering the remaining characters.
|
|
521
|
+
*
|
|
522
|
+
* @param {string} value - The string to capitalize.
|
|
523
|
+
*
|
|
524
|
+
* @returns {string} - The capitalized string, or an empty string if input is invalid.
|
|
525
|
+
*
|
|
526
|
+
* @example
|
|
527
|
+
* {{ 'hello world' | capitalize }} // 'Hello world'
|
|
528
|
+
* {{ 'HELLO WORLD' | capitalize }} // 'Hello world'
|
|
529
|
+
* {{ 'hELLo' | capitalize }} // 'Hello'
|
|
530
|
+
*/
|
|
531
|
+
class CapitalizePipe {
|
|
532
|
+
transform(value) {
|
|
533
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
534
|
+
return '';
|
|
535
|
+
return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
|
|
536
|
+
}
|
|
537
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: CapitalizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
538
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: CapitalizePipe, isStandalone: true, name: "capitalize" });
|
|
539
|
+
}
|
|
540
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: CapitalizePipe, decorators: [{
|
|
541
|
+
type: Pipe,
|
|
542
|
+
args: [{
|
|
543
|
+
name: 'capitalize',
|
|
544
|
+
standalone: true,
|
|
545
|
+
}]
|
|
546
|
+
}] });
|
|
547
|
+
|
|
548
|
+
/**
|
|
549
|
+
* UpperFirstPipe: Uppercases the first character of a string without altering the rest.
|
|
550
|
+
*
|
|
551
|
+
* Differs from `capitalize` which also lowercases the remaining characters.
|
|
552
|
+
* Useful when you want to preserve acronyms, camelCase, or existing casing.
|
|
553
|
+
*
|
|
554
|
+
* @param {string} value - The string to transform.
|
|
555
|
+
*
|
|
556
|
+
* @returns {string} - The transformed string, or an empty string if input is invalid.
|
|
557
|
+
*
|
|
558
|
+
* @example
|
|
559
|
+
* {{ 'hello WORLD' | upperFirst }} // 'Hello WORLD'
|
|
560
|
+
* {{ 'javaScript' | upperFirst }} // 'JavaScript'
|
|
561
|
+
* {{ 'apiKey' | upperFirst }} // 'ApiKey'
|
|
562
|
+
*/
|
|
563
|
+
class UpperFirstPipe {
|
|
564
|
+
transform(value) {
|
|
565
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
566
|
+
return '';
|
|
567
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
568
|
+
}
|
|
569
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UpperFirstPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
570
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: UpperFirstPipe, isStandalone: true, name: "upperFirst" });
|
|
571
|
+
}
|
|
572
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: UpperFirstPipe, decorators: [{
|
|
573
|
+
type: Pipe,
|
|
574
|
+
args: [{
|
|
575
|
+
name: 'upperFirst',
|
|
576
|
+
standalone: true,
|
|
577
|
+
}]
|
|
578
|
+
}] });
|
|
579
|
+
|
|
580
|
+
/**
|
|
581
|
+
* LeftPadPipe: Pads a string on the left until it reaches the target length.
|
|
582
|
+
*
|
|
583
|
+
* Wraps JavaScript's native `padStart`. If the input is already at or above
|
|
584
|
+
* the target length, returns it unchanged. Defaults to padding with spaces.
|
|
585
|
+
*
|
|
586
|
+
* @param {string | number} value - The string or number to pad.
|
|
587
|
+
* @param {number} length - The target length of the resulting string.
|
|
588
|
+
* @param {string} [char=' '] - The character (or string) to pad with.
|
|
589
|
+
*
|
|
590
|
+
* @returns {string} - The padded string, or empty string if input is invalid.
|
|
591
|
+
*
|
|
592
|
+
* @example
|
|
593
|
+
* {{ '5' | leftPad:3:'0' }} // '005'
|
|
594
|
+
* {{ 42 | leftPad:5 }} // ' 42'
|
|
595
|
+
* {{ 'hi' | leftPad:6:'-' }} // '----hi'
|
|
596
|
+
*/
|
|
597
|
+
class LeftPadPipe {
|
|
598
|
+
transform(value, length, char = ' ') {
|
|
599
|
+
if (value === null || value === undefined)
|
|
600
|
+
return '';
|
|
601
|
+
const str = typeof value === 'number' ? String(value) : value;
|
|
602
|
+
if (typeof str !== 'string')
|
|
603
|
+
return '';
|
|
604
|
+
if (typeof length !== 'number' || isNaN(length) || length < 0)
|
|
605
|
+
return str;
|
|
606
|
+
const padChar = char === '' ? ' ' : char;
|
|
607
|
+
return str.padStart(length, padChar);
|
|
608
|
+
}
|
|
609
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LeftPadPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
610
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: LeftPadPipe, isStandalone: true, name: "leftPad" });
|
|
611
|
+
}
|
|
612
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LeftPadPipe, decorators: [{
|
|
613
|
+
type: Pipe,
|
|
614
|
+
args: [{
|
|
615
|
+
name: 'leftPad',
|
|
616
|
+
standalone: true,
|
|
617
|
+
}]
|
|
618
|
+
}] });
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* RightPadPipe: Pads a string on the right until it reaches the target length.
|
|
622
|
+
*
|
|
623
|
+
* Wraps JavaScript's native `padEnd`. If the input is already at or above
|
|
624
|
+
* the target length, returns it unchanged. Defaults to padding with spaces.
|
|
625
|
+
*
|
|
626
|
+
* @param {string | number} value - The string or number to pad.
|
|
627
|
+
* @param {number} length - The target length of the resulting string.
|
|
628
|
+
* @param {string} [char=' '] - The character (or string) to pad with.
|
|
629
|
+
*
|
|
630
|
+
* @returns {string} - The padded string, or empty string if input is invalid.
|
|
631
|
+
*
|
|
632
|
+
* @example
|
|
633
|
+
* {{ 'hi' | rightPad:5:'.' }} // 'hi...'
|
|
634
|
+
* {{ 'name' | rightPad:10 }} // 'name '
|
|
635
|
+
* {{ 42 | rightPad:5:'0' }} // '42000'
|
|
636
|
+
*/
|
|
637
|
+
class RightPadPipe {
|
|
638
|
+
transform(value, length, char = ' ') {
|
|
639
|
+
if (value === null || value === undefined)
|
|
640
|
+
return '';
|
|
641
|
+
const str = typeof value === 'number' ? String(value) : value;
|
|
642
|
+
if (typeof str !== 'string')
|
|
643
|
+
return '';
|
|
644
|
+
if (typeof length !== 'number' || isNaN(length) || length < 0)
|
|
645
|
+
return str;
|
|
646
|
+
const padChar = char === '' ? ' ' : char;
|
|
647
|
+
return str.padEnd(length, padChar);
|
|
648
|
+
}
|
|
649
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RightPadPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
650
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: RightPadPipe, isStandalone: true, name: "rightPad" });
|
|
651
|
+
}
|
|
652
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RightPadPipe, decorators: [{
|
|
653
|
+
type: Pipe,
|
|
654
|
+
args: [{
|
|
655
|
+
name: 'rightPad',
|
|
656
|
+
standalone: true,
|
|
657
|
+
}]
|
|
658
|
+
}] });
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* PadPipe: Pads a string on both sides to reach the target length (centers it).
|
|
662
|
+
*
|
|
663
|
+
* When the padding is uneven, the extra character goes to the right.
|
|
664
|
+
* Defaults to padding with spaces.
|
|
665
|
+
*
|
|
666
|
+
* @param {string | number} value - The string or number to pad.
|
|
667
|
+
* @param {number} length - The target length of the resulting string.
|
|
668
|
+
* @param {string} [char=' '] - The character (or string) to pad with.
|
|
669
|
+
*
|
|
670
|
+
* @returns {string} - The padded string, or empty string if input is invalid.
|
|
671
|
+
*
|
|
672
|
+
* @example
|
|
673
|
+
* {{ 'x' | pad:5:'-' }} // '--x--'
|
|
674
|
+
* {{ 'hi' | pad:6:'*' }} // '**hi**'
|
|
675
|
+
* {{ 'hi' | pad:7:'*' }} // '**hi***' (extra right)
|
|
676
|
+
*/
|
|
677
|
+
class PadPipe {
|
|
678
|
+
transform(value, length, char = ' ') {
|
|
679
|
+
if (value === null || value === undefined)
|
|
680
|
+
return '';
|
|
681
|
+
const str = typeof value === 'number' ? String(value) : value;
|
|
682
|
+
if (typeof str !== 'string')
|
|
683
|
+
return '';
|
|
684
|
+
if (typeof length !== 'number' || isNaN(length) || length < 0)
|
|
685
|
+
return str;
|
|
686
|
+
if (str.length >= length)
|
|
687
|
+
return str;
|
|
688
|
+
const padChar = char === '' ? ' ' : char;
|
|
689
|
+
const diff = length - str.length;
|
|
690
|
+
const leftCount = Math.floor(diff / 2);
|
|
691
|
+
const leftTarget = str.length + leftCount;
|
|
692
|
+
return str.padStart(leftTarget, padChar).padEnd(length, padChar);
|
|
693
|
+
}
|
|
694
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PadPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
695
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: PadPipe, isStandalone: true, name: "pad" });
|
|
696
|
+
}
|
|
697
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PadPipe, decorators: [{
|
|
698
|
+
type: Pipe,
|
|
699
|
+
args: [{
|
|
700
|
+
name: 'pad',
|
|
701
|
+
standalone: true,
|
|
702
|
+
}]
|
|
703
|
+
}] });
|
|
704
|
+
|
|
705
|
+
/**
|
|
706
|
+
* RepeatPipe: Repeats a string a given number of times.
|
|
707
|
+
*
|
|
708
|
+
* Wraps `String.prototype.repeat`. Optional separator is inserted between repetitions.
|
|
709
|
+
*
|
|
710
|
+
* @param {string} value - The string to repeat.
|
|
711
|
+
* @param {number} count - Number of times to repeat (must be >= 0).
|
|
712
|
+
* @param {string} [separator=''] - Optional separator placed between repetitions.
|
|
713
|
+
*
|
|
714
|
+
* @returns {string} - The repeated string, or an empty string if input is invalid.
|
|
715
|
+
*
|
|
716
|
+
* @example
|
|
717
|
+
* {{ '-' | repeat:10 }} // '----------'
|
|
718
|
+
* {{ 'ha' | repeat:3 }} // 'hahaha'
|
|
719
|
+
* {{ 'item' | repeat:3:', ' }} // 'item, item, item'
|
|
720
|
+
*/
|
|
721
|
+
class RepeatPipe {
|
|
722
|
+
transform(value, count, separator = '') {
|
|
723
|
+
if (typeof value !== 'string')
|
|
724
|
+
return '';
|
|
725
|
+
if (typeof count !== 'number' || isNaN(count) || count < 0 || !isFinite(count)) {
|
|
726
|
+
return '';
|
|
727
|
+
}
|
|
728
|
+
const repetitions = Math.floor(count);
|
|
729
|
+
if (repetitions === 0)
|
|
730
|
+
return '';
|
|
731
|
+
if (!separator)
|
|
732
|
+
return value.repeat(repetitions);
|
|
733
|
+
return Array(repetitions).fill(value).join(separator);
|
|
734
|
+
}
|
|
735
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RepeatPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
736
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: RepeatPipe, isStandalone: true, name: "repeat" });
|
|
737
|
+
}
|
|
738
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: RepeatPipe, decorators: [{
|
|
739
|
+
type: Pipe,
|
|
740
|
+
args: [{
|
|
741
|
+
name: 'repeat',
|
|
742
|
+
standalone: true,
|
|
743
|
+
}]
|
|
744
|
+
}] });
|
|
745
|
+
|
|
746
|
+
/**
|
|
747
|
+
* SlugifyPipe: Converts a string into a URL-friendly slug.
|
|
748
|
+
*
|
|
749
|
+
* Removes diacritics, lowercases, replaces non-alphanumerics with the separator,
|
|
750
|
+
* collapses consecutive separators, and trims them from the ends.
|
|
751
|
+
*
|
|
752
|
+
* @param {string} value - The string to slugify.
|
|
753
|
+
* @param {string} [separator='-'] - Character used to join words.
|
|
754
|
+
*
|
|
755
|
+
* @returns {string} - The slugified string, or an empty string if input is invalid.
|
|
756
|
+
*
|
|
757
|
+
* @example
|
|
758
|
+
* {{ 'Hello World!' | slugify }} // 'hello-world'
|
|
759
|
+
* {{ 'Café & Tea' | slugify }} // 'cafe-tea'
|
|
760
|
+
* {{ 'My Blog Post' | slugify:'_' }} // 'my_blog_post'
|
|
761
|
+
*/
|
|
762
|
+
class SlugifyPipe {
|
|
763
|
+
transform(value, separator = '-') {
|
|
764
|
+
if (typeof value !== 'string')
|
|
765
|
+
return '';
|
|
766
|
+
const sep = separator || '-';
|
|
767
|
+
const escaped = sep.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
768
|
+
return value
|
|
769
|
+
.normalize('NFD')
|
|
770
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
771
|
+
.toLowerCase()
|
|
772
|
+
.replace(/[^a-z0-9]+/g, sep)
|
|
773
|
+
.replace(new RegExp(`${escaped}+`, 'g'), sep)
|
|
774
|
+
.replace(new RegExp(`^${escaped}|${escaped}$`, 'g'), '');
|
|
775
|
+
}
|
|
776
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SlugifyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
777
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: SlugifyPipe, isStandalone: true, name: "slugify" });
|
|
778
|
+
}
|
|
779
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SlugifyPipe, decorators: [{
|
|
780
|
+
type: Pipe,
|
|
781
|
+
args: [{
|
|
782
|
+
name: 'slugify',
|
|
783
|
+
standalone: true,
|
|
784
|
+
}]
|
|
785
|
+
}] });
|
|
786
|
+
|
|
787
|
+
/**
|
|
788
|
+
* StripTagsPipe: Removes HTML tags from a string.
|
|
789
|
+
*
|
|
790
|
+
* By default strips every tag. Pass an array of allowed tag names to keep
|
|
791
|
+
* those specific tags while stripping the rest. HTML comments and DOCTYPEs
|
|
792
|
+
* are always removed.
|
|
793
|
+
*
|
|
794
|
+
* Note: this pipe returns a plain string — the caller is responsible for
|
|
795
|
+
* binding the output safely (e.g. via `[textContent]`). For sanitization
|
|
796
|
+
* that also neutralizes dangerous attributes/scripts, use HtmlSanitizePipe.
|
|
797
|
+
*
|
|
798
|
+
* @param {string} value - The HTML string to strip.
|
|
799
|
+
* @param {string[]} [allowedTags] - Optional list of tag names to preserve.
|
|
800
|
+
*
|
|
801
|
+
* @returns {string} - The stripped string, or empty string if input is invalid.
|
|
802
|
+
*
|
|
803
|
+
* @example
|
|
804
|
+
* {{ '<p>Hi <b>there</b></p>' | stripTags }} // 'Hi there'
|
|
805
|
+
* {{ '<p>Hi <b>bold</b></p>' | stripTags:['b'] }} // 'Hi <b>bold</b>'
|
|
806
|
+
* {{ '<script>alert(1)</script>Safe' | stripTags }} // 'Safe'
|
|
807
|
+
*/
|
|
808
|
+
class StripTagsPipe {
|
|
809
|
+
transform(value, allowedTags) {
|
|
810
|
+
if (typeof value !== 'string')
|
|
811
|
+
return '';
|
|
812
|
+
let result = value
|
|
813
|
+
.replace(/<!--[\s\S]*?-->/g, '')
|
|
814
|
+
.replace(/<!DOCTYPE[^>]*>/gi, '')
|
|
815
|
+
.replace(/<script\b[\s\S]*?<\/script>/gi, '')
|
|
816
|
+
.replace(/<style\b[\s\S]*?<\/style>/gi, '');
|
|
817
|
+
if (!Array.isArray(allowedTags) || allowedTags.length === 0) {
|
|
818
|
+
return result.replace(/<\/?[a-zA-Z][^>]*>/g, '');
|
|
819
|
+
}
|
|
820
|
+
const allowed = allowedTags
|
|
821
|
+
.filter(t => typeof t === 'string' && t.length > 0)
|
|
822
|
+
.map(t => t.toLowerCase().replace(/[^a-z0-9]/g, ''));
|
|
823
|
+
if (allowed.length === 0) {
|
|
824
|
+
return result.replace(/<\/?[a-zA-Z][^>]*>/g, '');
|
|
825
|
+
}
|
|
826
|
+
const pattern = new RegExp(`</?(?!(?:${allowed.join('|')})\\b)[a-zA-Z][^>]*>`, 'gi');
|
|
827
|
+
result = result.replace(pattern, '');
|
|
828
|
+
return result;
|
|
829
|
+
}
|
|
830
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StripTagsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
831
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: StripTagsPipe, isStandalone: true, name: "stripTags" });
|
|
832
|
+
}
|
|
833
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: StripTagsPipe, decorators: [{
|
|
834
|
+
type: Pipe,
|
|
835
|
+
args: [{
|
|
836
|
+
name: 'stripTags',
|
|
837
|
+
standalone: true,
|
|
838
|
+
}]
|
|
839
|
+
}] });
|
|
840
|
+
|
|
841
|
+
/**
|
|
842
|
+
* EncodeUriPipe: Encodes a full URI by escaping characters that would be invalid.
|
|
843
|
+
*
|
|
844
|
+
* Wraps the native `encodeURI`. Preserves URI structural characters
|
|
845
|
+
* (`: / ? # [ ] @ ! $ & ' ( ) * + , ; =`) so this is suitable for entire URLs,
|
|
846
|
+
* not for individual query string values (use `encodeURIComponent` for those).
|
|
847
|
+
*
|
|
848
|
+
* @param {string} value - The URI to encode.
|
|
849
|
+
*
|
|
850
|
+
* @returns {string} - The encoded URI, or empty string if input is invalid.
|
|
851
|
+
*
|
|
852
|
+
* @example
|
|
853
|
+
* {{ 'https://example.com/?q=hi world' | encodeURI }} // 'https://example.com/?q=hi%20world'
|
|
854
|
+
* {{ '/path with space.html' | encodeURI }} // '/path%20with%20space.html'
|
|
855
|
+
*/
|
|
856
|
+
class EncodeUriPipe {
|
|
857
|
+
transform(value) {
|
|
858
|
+
if (typeof value !== 'string')
|
|
859
|
+
return '';
|
|
860
|
+
try {
|
|
861
|
+
return encodeURI(value);
|
|
862
|
+
}
|
|
863
|
+
catch {
|
|
864
|
+
return value;
|
|
865
|
+
}
|
|
866
|
+
}
|
|
867
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
868
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriPipe, isStandalone: true, name: "encodeURI" });
|
|
869
|
+
}
|
|
870
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriPipe, decorators: [{
|
|
871
|
+
type: Pipe,
|
|
872
|
+
args: [{
|
|
873
|
+
name: 'encodeURI',
|
|
874
|
+
standalone: true,
|
|
875
|
+
}]
|
|
876
|
+
}] });
|
|
877
|
+
|
|
878
|
+
/**
|
|
879
|
+
* EncodeUriComponentPipe: Encodes a single URI component, escaping reserved characters.
|
|
880
|
+
*
|
|
881
|
+
* Wraps the native `encodeURIComponent`. Encodes everything except
|
|
882
|
+
* `A-Z a-z 0-9 - _ . ! ~ * ' ( )`. Use this for query parameter values,
|
|
883
|
+
* path segments, or anywhere a value must not collide with URL syntax.
|
|
884
|
+
*
|
|
885
|
+
* @param {string} value - The URI component to encode.
|
|
886
|
+
*
|
|
887
|
+
* @returns {string} - The encoded component, or empty string if input is invalid.
|
|
888
|
+
*
|
|
889
|
+
* @example
|
|
890
|
+
* {{ 'hi world&you' | encodeURIComponent }} // 'hi%20world%26you'
|
|
891
|
+
* {{ 'foo/bar?baz=1' | encodeURIComponent }} // 'foo%2Fbar%3Fbaz%3D1'
|
|
892
|
+
*/
|
|
893
|
+
class EncodeUriComponentPipe {
|
|
894
|
+
transform(value) {
|
|
895
|
+
if (typeof value !== 'string')
|
|
896
|
+
return '';
|
|
897
|
+
try {
|
|
898
|
+
return encodeURIComponent(value);
|
|
899
|
+
}
|
|
900
|
+
catch {
|
|
901
|
+
return value;
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriComponentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
905
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriComponentPipe, isStandalone: true, name: "encodeURIComponent" });
|
|
906
|
+
}
|
|
907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: EncodeUriComponentPipe, decorators: [{
|
|
908
|
+
type: Pipe,
|
|
909
|
+
args: [{
|
|
910
|
+
name: 'encodeURIComponent',
|
|
911
|
+
standalone: true,
|
|
912
|
+
}]
|
|
913
|
+
}] });
|
|
914
|
+
|
|
915
|
+
/**
|
|
916
|
+
* DecodeUriPipe: Decodes a URI previously encoded with `encodeURI`.
|
|
917
|
+
*
|
|
918
|
+
* Wraps the native `decodeURI`. Returns the input unchanged if the string
|
|
919
|
+
* contains a malformed escape sequence.
|
|
920
|
+
*
|
|
921
|
+
* @param {string} value - The encoded URI to decode.
|
|
922
|
+
*
|
|
923
|
+
* @returns {string} - The decoded URI, or empty string if input is invalid.
|
|
924
|
+
*
|
|
925
|
+
* @example
|
|
926
|
+
* {{ 'https://example.com/?q=hi%20world' | decodeURI }} // 'https://example.com/?q=hi world'
|
|
927
|
+
* {{ '/path%20with%20space.html' | decodeURI }} // '/path with space.html'
|
|
928
|
+
*/
|
|
929
|
+
class DecodeUriPipe {
|
|
930
|
+
transform(value) {
|
|
931
|
+
if (typeof value !== 'string')
|
|
932
|
+
return '';
|
|
933
|
+
try {
|
|
934
|
+
return decodeURI(value);
|
|
935
|
+
}
|
|
936
|
+
catch {
|
|
937
|
+
return value;
|
|
938
|
+
}
|
|
939
|
+
}
|
|
940
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
941
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriPipe, isStandalone: true, name: "decodeURI" });
|
|
942
|
+
}
|
|
943
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriPipe, decorators: [{
|
|
944
|
+
type: Pipe,
|
|
945
|
+
args: [{
|
|
946
|
+
name: 'decodeURI',
|
|
947
|
+
standalone: true,
|
|
948
|
+
}]
|
|
949
|
+
}] });
|
|
950
|
+
|
|
951
|
+
/**
|
|
952
|
+
* DecodeUriComponentPipe: Decodes a URI component encoded with `encodeURIComponent`.
|
|
953
|
+
*
|
|
954
|
+
* Wraps the native `decodeURIComponent`. Returns the input unchanged if the
|
|
955
|
+
* string contains a malformed escape sequence.
|
|
956
|
+
*
|
|
957
|
+
* @param {string} value - The encoded URI component to decode.
|
|
958
|
+
*
|
|
959
|
+
* @returns {string} - The decoded component, or empty string if input is invalid.
|
|
960
|
+
*
|
|
961
|
+
* @example
|
|
962
|
+
* {{ 'hi%20world%26you' | decodeURIComponent }} // 'hi world&you'
|
|
963
|
+
* {{ 'foo%2Fbar%3Fbaz%3D1' | decodeURIComponent }} // 'foo/bar?baz=1'
|
|
964
|
+
*/
|
|
965
|
+
class DecodeUriComponentPipe {
|
|
966
|
+
transform(value) {
|
|
967
|
+
if (typeof value !== 'string')
|
|
968
|
+
return '';
|
|
969
|
+
try {
|
|
970
|
+
return decodeURIComponent(value);
|
|
971
|
+
}
|
|
972
|
+
catch {
|
|
973
|
+
return value;
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriComponentPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
977
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriComponentPipe, isStandalone: true, name: "decodeURIComponent" });
|
|
978
|
+
}
|
|
979
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DecodeUriComponentPipe, decorators: [{
|
|
980
|
+
type: Pipe,
|
|
981
|
+
args: [{
|
|
982
|
+
name: 'decodeURIComponent',
|
|
983
|
+
standalone: true,
|
|
984
|
+
}]
|
|
985
|
+
}] });
|
|
986
|
+
|
|
987
|
+
/**
|
|
988
|
+
* SplitPipe: Splits a string into an array using the given separator.
|
|
989
|
+
*
|
|
990
|
+
* Wraps `String.prototype.split`. Returns an empty array for invalid inputs.
|
|
991
|
+
*
|
|
992
|
+
* @param {string} value - The string to split.
|
|
993
|
+
* @param {string | RegExp} [separator=''] - Character, string, or regex to split on.
|
|
994
|
+
* An empty separator splits the string into individual characters.
|
|
995
|
+
* @param {number} [limit] - Optional maximum number of elements to return.
|
|
996
|
+
*
|
|
997
|
+
* @returns {string[]} - The resulting array, or an empty array for invalid input.
|
|
998
|
+
*
|
|
999
|
+
* @example
|
|
1000
|
+
* {{ 'a,b,c' | split:',' }} // ['a', 'b', 'c']
|
|
1001
|
+
* {{ 'abc' | split }} // ['a', 'b', 'c']
|
|
1002
|
+
* {{ 'one two three' | split:' ':2 }} // ['one', 'two']
|
|
1003
|
+
*/
|
|
1004
|
+
class SplitPipe {
|
|
1005
|
+
transform(value, separator = '', limit) {
|
|
1006
|
+
if (typeof value !== 'string')
|
|
1007
|
+
return [];
|
|
1008
|
+
if (typeof limit === 'number' && limit >= 0) {
|
|
1009
|
+
return value.split(separator, limit);
|
|
1010
|
+
}
|
|
1011
|
+
return value.split(separator);
|
|
1012
|
+
}
|
|
1013
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SplitPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1014
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: SplitPipe, isStandalone: true, name: "split" });
|
|
1015
|
+
}
|
|
1016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: SplitPipe, decorators: [{
|
|
1017
|
+
type: Pipe,
|
|
1018
|
+
args: [{
|
|
1019
|
+
name: 'split',
|
|
1020
|
+
standalone: true,
|
|
1021
|
+
}]
|
|
1022
|
+
}] });
|
|
1023
|
+
|
|
1024
|
+
/**
|
|
1025
|
+
* MatchPipe: Returns all regex matches found in a string.
|
|
1026
|
+
*
|
|
1027
|
+
* Wraps `String.prototype.match` with a global default. Returns an empty array
|
|
1028
|
+
* when nothing matches or the regex is invalid.
|
|
1029
|
+
*
|
|
1030
|
+
* @param {string} value - The string to search.
|
|
1031
|
+
* @param {string | RegExp} pattern - Pattern string (or RegExp) to match.
|
|
1032
|
+
* @param {string} [flags='g'] - Regex flags used when `pattern` is a string.
|
|
1033
|
+
*
|
|
1034
|
+
* @returns {string[]} - Array of matches, or empty array if none / invalid input.
|
|
1035
|
+
*
|
|
1036
|
+
* @example
|
|
1037
|
+
* {{ 'abc123def456' | match:'[0-9]+' }} // ['123', '456']
|
|
1038
|
+
* {{ 'hello world' | match:'[a-z]+' }} // ['hello', 'world']
|
|
1039
|
+
* {{ 'HELLO' | match:'[a-z]+':'gi' }} // ['HELLO']
|
|
1040
|
+
*/
|
|
1041
|
+
class MatchPipe {
|
|
1042
|
+
transform(value, pattern, flags = 'g') {
|
|
1043
|
+
if (typeof value !== 'string' || !pattern)
|
|
1044
|
+
return [];
|
|
1045
|
+
try {
|
|
1046
|
+
const regex = typeof pattern === 'string'
|
|
1047
|
+
? new RegExp(pattern, flags.includes('g') ? flags : flags + 'g')
|
|
1048
|
+
: (pattern.flags.includes('g') ? pattern : new RegExp(pattern.source, pattern.flags + 'g'));
|
|
1049
|
+
const matches = value.match(regex);
|
|
1050
|
+
return matches ?? [];
|
|
1051
|
+
}
|
|
1052
|
+
catch {
|
|
1053
|
+
return [];
|
|
1054
|
+
}
|
|
1055
|
+
}
|
|
1056
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: MatchPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1057
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: MatchPipe, isStandalone: true, name: "match" });
|
|
1058
|
+
}
|
|
1059
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: MatchPipe, decorators: [{
|
|
1060
|
+
type: Pipe,
|
|
1061
|
+
args: [{
|
|
1062
|
+
name: 'match',
|
|
1063
|
+
standalone: true,
|
|
1064
|
+
}]
|
|
1065
|
+
}] });
|
|
1066
|
+
|
|
1067
|
+
/**
|
|
1068
|
+
* TestPipe: Returns true when a string matches a regex pattern.
|
|
1069
|
+
*
|
|
1070
|
+
* Wraps `RegExp.prototype.test`. Returns false for invalid input or regex.
|
|
1071
|
+
*
|
|
1072
|
+
* @param {string} value - The string to test.
|
|
1073
|
+
* @param {string | RegExp} pattern - Pattern string (or RegExp) to test against.
|
|
1074
|
+
* @param {string} [flags=''] - Regex flags used when `pattern` is a string.
|
|
1075
|
+
*
|
|
1076
|
+
* @returns {boolean} - `true` if the pattern matches anywhere in the string.
|
|
1077
|
+
*
|
|
1078
|
+
* @example
|
|
1079
|
+
* {{ 'abc@x.com' | test:'@' }} // true
|
|
1080
|
+
* {{ 'ABC' | test:'[a-z]':'i' }} // true
|
|
1081
|
+
* {{ '123' | test:'^[0-9]+$' }} // true
|
|
1082
|
+
*/
|
|
1083
|
+
class TestPipe {
|
|
1084
|
+
transform(value, pattern, flags = '') {
|
|
1085
|
+
if (typeof value !== 'string' || !pattern)
|
|
1086
|
+
return false;
|
|
1087
|
+
try {
|
|
1088
|
+
const regex = typeof pattern === 'string'
|
|
1089
|
+
? new RegExp(pattern, flags)
|
|
1090
|
+
: pattern;
|
|
1091
|
+
return regex.test(value);
|
|
1092
|
+
}
|
|
1093
|
+
catch {
|
|
1094
|
+
return false;
|
|
1095
|
+
}
|
|
1096
|
+
}
|
|
1097
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TestPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1098
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: TestPipe, isStandalone: true, name: "test" });
|
|
1099
|
+
}
|
|
1100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TestPipe, decorators: [{
|
|
1101
|
+
type: Pipe,
|
|
1102
|
+
args: [{
|
|
1103
|
+
name: 'test',
|
|
1104
|
+
standalone: true,
|
|
1105
|
+
}]
|
|
1106
|
+
}] });
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* NewlinesPipe: Replaces line breaks in a string with a custom replacement.
|
|
1110
|
+
*
|
|
1111
|
+
* Handles all common line-break variants (`\n`, `\r\n`, `\r`). Defaults to
|
|
1112
|
+
* `<br>` for HTML display via `[innerHTML]`. Pass any string to customize.
|
|
1113
|
+
*
|
|
1114
|
+
* @param {string} value - The string containing line breaks.
|
|
1115
|
+
* @param {string} [replacement='<br>'] - String inserted in place of each line break.
|
|
1116
|
+
*
|
|
1117
|
+
* @returns {string} - The transformed string, or empty string if input is invalid.
|
|
1118
|
+
*
|
|
1119
|
+
* @example
|
|
1120
|
+
* {{ text | newlines }} // 'a<br>b<br>c' (use [innerHTML])
|
|
1121
|
+
* {{ text | newlines:' | ' }} // 'a | b | c'
|
|
1122
|
+
* {{ text | newlines:' ' }} // 'a b c' (flatten to single line)
|
|
1123
|
+
*/
|
|
1124
|
+
class NewlinesPipe {
|
|
1125
|
+
transform(value, replacement = '<br>') {
|
|
1126
|
+
if (typeof value !== 'string')
|
|
1127
|
+
return '';
|
|
1128
|
+
return value.replace(/\r\n|\r|\n/g, replacement);
|
|
1129
|
+
}
|
|
1130
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NewlinesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1131
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: NewlinesPipe, isStandalone: true, name: "newlines" });
|
|
1132
|
+
}
|
|
1133
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: NewlinesPipe, decorators: [{
|
|
1134
|
+
type: Pipe,
|
|
1135
|
+
args: [{
|
|
1136
|
+
name: 'newlines',
|
|
1137
|
+
standalone: true,
|
|
1138
|
+
}]
|
|
1139
|
+
}] });
|
|
1140
|
+
|
|
1141
|
+
/**
|
|
1142
|
+
* TemplatePipe: Replaces `{key}` placeholders in a string with values from an object.
|
|
1143
|
+
*
|
|
1144
|
+
* Supports dot notation for nested keys. Missing keys are left as-is.
|
|
1145
|
+
*
|
|
1146
|
+
* @param {string} value - The template string containing placeholders like `{name}`.
|
|
1147
|
+
* @param {Record<string, unknown>} [values={}] - Map of keys to replacement values.
|
|
1148
|
+
*
|
|
1149
|
+
* @returns {string} - The interpolated string, or empty string if input is invalid.
|
|
1150
|
+
*
|
|
1151
|
+
* @example
|
|
1152
|
+
* {{ 'Hello {name}!' | template:{name:'Alice'} }} // 'Hello Alice!'
|
|
1153
|
+
* {{ '{user.name} is {user.age}' | template:{user:{name:'Bob',age:30}} }} // 'Bob is 30'
|
|
1154
|
+
* {{ 'Hi {missing}!' | template:{name:'Alice'} }} // 'Hi {missing}!'
|
|
1155
|
+
*/
|
|
1156
|
+
class TemplatePipe {
|
|
1157
|
+
transform(value, values = {}) {
|
|
1158
|
+
if (typeof value !== 'string')
|
|
1159
|
+
return '';
|
|
1160
|
+
if (!values || typeof values !== 'object')
|
|
1161
|
+
return value;
|
|
1162
|
+
return value.replace(/\{([\w.]+)\}/g, (match, key) => {
|
|
1163
|
+
const resolved = this.getNestedValue(values, key);
|
|
1164
|
+
return resolved === undefined || resolved === null ? match : String(resolved);
|
|
1165
|
+
});
|
|
1166
|
+
}
|
|
1167
|
+
getNestedValue(obj, path) {
|
|
1168
|
+
return path.split('.').reduce((current, segment) => current?.[segment], obj);
|
|
1169
|
+
}
|
|
1170
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TemplatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1171
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: TemplatePipe, isStandalone: true, name: "template" });
|
|
1172
|
+
}
|
|
1173
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: TemplatePipe, decorators: [{
|
|
1174
|
+
type: Pipe,
|
|
1175
|
+
args: [{
|
|
1176
|
+
name: 'template',
|
|
1177
|
+
standalone: true,
|
|
1178
|
+
}]
|
|
1179
|
+
}] });
|
|
1180
|
+
|
|
1181
|
+
/**
|
|
1182
|
+
* LatinizePipe: Strips diacritics (accents) from a string while preserving
|
|
1183
|
+
* casing, spaces, and punctuation.
|
|
1184
|
+
*
|
|
1185
|
+
* Uses Unicode NFD normalization to split combining marks from base letters,
|
|
1186
|
+
* then removes the combining mark range (U+0300–U+036F). Unlike `slugify`,
|
|
1187
|
+
* this pipe leaves the string structure intact — it only removes accents.
|
|
1188
|
+
*
|
|
1189
|
+
* @param {string} value - The string to latinize.
|
|
1190
|
+
*
|
|
1191
|
+
* @returns {string} - The latinized string, or empty string if input is invalid.
|
|
1192
|
+
*
|
|
1193
|
+
* @example
|
|
1194
|
+
* {{ 'Café' | latinize }} // 'Cafe'
|
|
1195
|
+
* {{ 'naïve résumé' | latinize }} // 'naive resume'
|
|
1196
|
+
* {{ 'Crème Brûlée' | latinize }} // 'Creme Brulee'
|
|
1197
|
+
*/
|
|
1198
|
+
class LatinizePipe {
|
|
1199
|
+
transform(value) {
|
|
1200
|
+
if (typeof value !== 'string')
|
|
1201
|
+
return '';
|
|
1202
|
+
return value.normalize('NFD').replace(/[̀-ͯ]/g, '');
|
|
1203
|
+
}
|
|
1204
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LatinizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1205
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: LatinizePipe, isStandalone: true, name: "latinize" });
|
|
1206
|
+
}
|
|
1207
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: LatinizePipe, decorators: [{
|
|
1208
|
+
type: Pipe,
|
|
1209
|
+
args: [{
|
|
1210
|
+
name: 'latinize',
|
|
1211
|
+
standalone: true,
|
|
1212
|
+
}]
|
|
1213
|
+
}] });
|
|
1214
|
+
|
|
1215
|
+
/**
|
|
1216
|
+
* WrapPipe: Surrounds a string with a prefix and optional suffix.
|
|
1217
|
+
*
|
|
1218
|
+
* When no suffix is provided, the prefix is used on both sides.
|
|
1219
|
+
*
|
|
1220
|
+
* @param {string} value - The string to wrap.
|
|
1221
|
+
* @param {string} [prefix=''] - Text to place before the value.
|
|
1222
|
+
* @param {string} [suffix] - Text to place after the value (defaults to prefix).
|
|
1223
|
+
*
|
|
1224
|
+
* @returns {string} - The wrapped string, or empty string if input is invalid.
|
|
1225
|
+
*
|
|
1226
|
+
* @example
|
|
1227
|
+
* {{ 'value' | wrap:'[':']' }} // '[value]'
|
|
1228
|
+
* {{ 'bold' | wrap:'**' }} // '**bold**'
|
|
1229
|
+
* {{ 'tag' | wrap:'<':'>' }} // '<tag>'
|
|
1230
|
+
*/
|
|
1231
|
+
class WrapPipe {
|
|
1232
|
+
transform(value, prefix = '', suffix) {
|
|
1233
|
+
if (typeof value !== 'string')
|
|
1234
|
+
return '';
|
|
1235
|
+
const pfx = typeof prefix === 'string' ? prefix : '';
|
|
1236
|
+
const sfx = suffix === undefined
|
|
1237
|
+
? pfx
|
|
1238
|
+
: (typeof suffix === 'string' ? suffix : '');
|
|
1239
|
+
return `${pfx}${value}${sfx}`;
|
|
1240
|
+
}
|
|
1241
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: WrapPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1242
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: WrapPipe, isStandalone: true, name: "wrap" });
|
|
1243
|
+
}
|
|
1244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: WrapPipe, decorators: [{
|
|
1245
|
+
type: Pipe,
|
|
1246
|
+
args: [{
|
|
1247
|
+
name: 'wrap',
|
|
1248
|
+
standalone: true,
|
|
1249
|
+
}]
|
|
1250
|
+
}] });
|
|
1251
|
+
|
|
1252
|
+
/**
|
|
1253
|
+
* KeysPipe: Returns the own enumerable property names of an object as an array.
|
|
1254
|
+
*
|
|
1255
|
+
* Wraps `Object.keys`. Works on plain objects and arrays. Returns an empty array
|
|
1256
|
+
* for null, undefined, or primitive inputs.
|
|
1257
|
+
*
|
|
1258
|
+
* @param {unknown} value - The object whose keys to extract.
|
|
1259
|
+
*
|
|
1260
|
+
* @returns {string[]} - Array of property names, or an empty array if invalid input.
|
|
1261
|
+
*
|
|
1262
|
+
* @example
|
|
1263
|
+
* {{ { a: 1, b: 2, c: 3 } | keys }} // ['a', 'b', 'c']
|
|
1264
|
+
* {{ user | keys }} // ['name', 'age', 'email']
|
|
1265
|
+
* @for (key of obj | keys; track key) { ... }
|
|
1266
|
+
*/
|
|
1267
|
+
class KeysPipe {
|
|
1268
|
+
transform(value) {
|
|
1269
|
+
if (value === null || value === undefined)
|
|
1270
|
+
return [];
|
|
1271
|
+
if (typeof value !== 'object')
|
|
1272
|
+
return [];
|
|
1273
|
+
return Object.keys(value);
|
|
1274
|
+
}
|
|
1275
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: KeysPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1276
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: KeysPipe, isStandalone: true, name: "keys" });
|
|
1277
|
+
}
|
|
1278
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: KeysPipe, decorators: [{
|
|
1279
|
+
type: Pipe,
|
|
1280
|
+
args: [{
|
|
1281
|
+
name: 'keys',
|
|
1282
|
+
standalone: true,
|
|
1283
|
+
}]
|
|
1284
|
+
}] });
|
|
1285
|
+
|
|
1286
|
+
/**
|
|
1287
|
+
* ValuesPipe: Returns the own enumerable property values of an object as an array.
|
|
1288
|
+
*
|
|
1289
|
+
* Wraps `Object.values`. Works on plain objects and arrays. Returns an empty array
|
|
1290
|
+
* for null, undefined, or primitive inputs.
|
|
1291
|
+
*
|
|
1292
|
+
* @param {unknown} value - The object whose values to extract.
|
|
1293
|
+
*
|
|
1294
|
+
* @returns {unknown[]} - Array of property values, or an empty array if invalid input.
|
|
1295
|
+
*
|
|
1296
|
+
* @example
|
|
1297
|
+
* {{ { a: 1, b: 2, c: 3 } | values }} // [1, 2, 3]
|
|
1298
|
+
* {{ user | values }} // ['Alice', 30, 'a@b.com']
|
|
1299
|
+
* @for (val of obj | values; track $index) { ... }
|
|
1300
|
+
*/
|
|
1301
|
+
class ValuesPipe {
|
|
1302
|
+
transform(value) {
|
|
1303
|
+
if (value === null || value === undefined)
|
|
1304
|
+
return [];
|
|
1305
|
+
if (typeof value !== 'object')
|
|
1306
|
+
return [];
|
|
1307
|
+
return Object.values(value);
|
|
1308
|
+
}
|
|
1309
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ValuesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1310
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: ValuesPipe, isStandalone: true, name: "values" });
|
|
1311
|
+
}
|
|
1312
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ValuesPipe, decorators: [{
|
|
1313
|
+
type: Pipe,
|
|
1314
|
+
args: [{
|
|
1315
|
+
name: 'values',
|
|
1316
|
+
standalone: true,
|
|
1317
|
+
}]
|
|
1318
|
+
}] });
|
|
1319
|
+
|
|
1320
|
+
/**
|
|
1321
|
+
* PairsPipe: Returns the own enumerable properties of an object as an array of
|
|
1322
|
+
* [key, value] tuples.
|
|
1323
|
+
*
|
|
1324
|
+
* Wraps `Object.entries`. Works on plain objects and arrays. Returns an empty
|
|
1325
|
+
* array for null, undefined, or primitive inputs.
|
|
1326
|
+
*
|
|
1327
|
+
* @param {unknown} value - The object to convert into key/value pairs.
|
|
1328
|
+
*
|
|
1329
|
+
* @returns {[string, unknown][]} - Array of [key, value] tuples, or empty array.
|
|
1330
|
+
*
|
|
1331
|
+
* @example
|
|
1332
|
+
* {{ { a: 1, b: 2 } | pairs }} // [['a', 1], ['b', 2]]
|
|
1333
|
+
* @for (entry of user | pairs; track entry[0]) {
|
|
1334
|
+
* <li>{{ entry[0] }}: {{ entry[1] }}</li>
|
|
1335
|
+
* }
|
|
1336
|
+
*/
|
|
1337
|
+
class PairsPipe {
|
|
1338
|
+
transform(value) {
|
|
1339
|
+
if (value === null || value === undefined)
|
|
1340
|
+
return [];
|
|
1341
|
+
if (typeof value !== 'object')
|
|
1342
|
+
return [];
|
|
1343
|
+
return Object.entries(value);
|
|
1344
|
+
}
|
|
1345
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PairsPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1346
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: PairsPipe, isStandalone: true, name: "pairs" });
|
|
1347
|
+
}
|
|
1348
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PairsPipe, decorators: [{
|
|
1349
|
+
type: Pipe,
|
|
1350
|
+
args: [{
|
|
1351
|
+
name: 'pairs',
|
|
1352
|
+
standalone: true,
|
|
1353
|
+
}]
|
|
1354
|
+
}] });
|
|
1355
|
+
|
|
1356
|
+
/**
|
|
1357
|
+
* PickPipe: Returns a new object containing only the specified keys.
|
|
1358
|
+
*
|
|
1359
|
+
* Non-existent keys are skipped silently. Returns an empty object for null,
|
|
1360
|
+
* undefined, or primitive inputs. Does not mutate the input.
|
|
1361
|
+
*
|
|
1362
|
+
* @param {unknown} value - The source object.
|
|
1363
|
+
* @param {string[] | string} keys - Key (or array of keys) to keep.
|
|
1364
|
+
*
|
|
1365
|
+
* @returns {Record<string, unknown>} - A new object with only the picked keys.
|
|
1366
|
+
*
|
|
1367
|
+
* @example
|
|
1368
|
+
* {{ user | pick:['name', 'email'] }} // { name: 'Alice', email: 'a@b.com' }
|
|
1369
|
+
* {{ obj | pick:'id' }} // { id: 42 }
|
|
1370
|
+
*/
|
|
1371
|
+
class PickPipe {
|
|
1372
|
+
transform(value, keys) {
|
|
1373
|
+
if (value === null || value === undefined)
|
|
1374
|
+
return {};
|
|
1375
|
+
if (typeof value !== 'object')
|
|
1376
|
+
return {};
|
|
1377
|
+
const list = Array.isArray(keys) ? keys : (typeof keys === 'string' ? [keys] : []);
|
|
1378
|
+
if (list.length === 0)
|
|
1379
|
+
return {};
|
|
1380
|
+
const source = value;
|
|
1381
|
+
const result = {};
|
|
1382
|
+
for (const key of list) {
|
|
1383
|
+
if (typeof key !== 'string')
|
|
1384
|
+
continue;
|
|
1385
|
+
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
1386
|
+
result[key] = source[key];
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
return result;
|
|
1390
|
+
}
|
|
1391
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PickPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1392
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: PickPipe, isStandalone: true, name: "pick" });
|
|
1393
|
+
}
|
|
1394
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: PickPipe, decorators: [{
|
|
1395
|
+
type: Pipe,
|
|
1396
|
+
args: [{
|
|
1397
|
+
name: 'pick',
|
|
1398
|
+
standalone: true,
|
|
1399
|
+
}]
|
|
1400
|
+
}] });
|
|
1401
|
+
|
|
1402
|
+
/**
|
|
1403
|
+
* OmitPipe: Returns a new object with the specified keys removed.
|
|
1404
|
+
*
|
|
1405
|
+
* Keys that don't exist on the source are ignored. Returns an empty object
|
|
1406
|
+
* for null, undefined, or primitive inputs. Does not mutate the input.
|
|
1407
|
+
*
|
|
1408
|
+
* @param {unknown} value - The source object.
|
|
1409
|
+
* @param {string[] | string} keys - Key (or array of keys) to remove.
|
|
1410
|
+
*
|
|
1411
|
+
* @returns {Record<string, unknown>} - A new object without the omitted keys.
|
|
1412
|
+
*
|
|
1413
|
+
* @example
|
|
1414
|
+
* {{ user | omit:['password'] }} // user without password
|
|
1415
|
+
* {{ obj | omit:['internal', '_id'] }} // public-safe view
|
|
1416
|
+
*/
|
|
1417
|
+
class OmitPipe {
|
|
1418
|
+
transform(value, keys) {
|
|
1419
|
+
if (value === null || value === undefined)
|
|
1420
|
+
return {};
|
|
1421
|
+
if (typeof value !== 'object')
|
|
1422
|
+
return {};
|
|
1423
|
+
const list = Array.isArray(keys) ? keys : (typeof keys === 'string' ? [keys] : []);
|
|
1424
|
+
const exclude = new Set(list.filter((k) => typeof k === 'string'));
|
|
1425
|
+
const source = value;
|
|
1426
|
+
const result = {};
|
|
1427
|
+
for (const key of Object.keys(source)) {
|
|
1428
|
+
if (!exclude.has(key)) {
|
|
1429
|
+
result[key] = source[key];
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
return result;
|
|
1433
|
+
}
|
|
1434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: OmitPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1435
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: OmitPipe, isStandalone: true, name: "omit" });
|
|
1436
|
+
}
|
|
1437
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: OmitPipe, decorators: [{
|
|
1438
|
+
type: Pipe,
|
|
1439
|
+
args: [{
|
|
1440
|
+
name: 'omit',
|
|
1441
|
+
standalone: true,
|
|
1442
|
+
}]
|
|
1443
|
+
}] });
|
|
1444
|
+
|
|
1445
|
+
/**
|
|
1446
|
+
* InvertPipe: Returns a new object with keys and values swapped.
|
|
1447
|
+
*
|
|
1448
|
+
* Values are coerced to strings to become valid keys. When two source keys
|
|
1449
|
+
* share a value, the **last one wins** (use `invertBy` if you need to keep
|
|
1450
|
+
* every collision as an array). Returns an empty object for null, undefined,
|
|
1451
|
+
* or primitive inputs. Does not mutate the input.
|
|
1452
|
+
*
|
|
1453
|
+
* @param {unknown} value - The source object.
|
|
1454
|
+
*
|
|
1455
|
+
* @returns {Record<string, string>} - A new object with keys/values swapped.
|
|
1456
|
+
*
|
|
1457
|
+
* @example
|
|
1458
|
+
* {{ { a: 1, b: 2 } | invert }} // { '1': 'a', '2': 'b' }
|
|
1459
|
+
* {{ { en: 'hello', fr: 'bonjour' } | invert }} // { hello: 'en', bonjour: 'fr' }
|
|
1460
|
+
* {{ { a: 1, b: 1 } | invert }} // { '1': 'b' } (last wins)
|
|
1461
|
+
*/
|
|
1462
|
+
class InvertPipe {
|
|
1463
|
+
transform(value) {
|
|
1464
|
+
if (value === null || value === undefined)
|
|
1465
|
+
return {};
|
|
1466
|
+
if (typeof value !== 'object')
|
|
1467
|
+
return {};
|
|
1468
|
+
const source = value;
|
|
1469
|
+
const result = {};
|
|
1470
|
+
for (const key of Object.keys(source)) {
|
|
1471
|
+
const v = source[key];
|
|
1472
|
+
if (v === undefined)
|
|
1473
|
+
continue;
|
|
1474
|
+
result[String(v)] = key;
|
|
1475
|
+
}
|
|
1476
|
+
return result;
|
|
1477
|
+
}
|
|
1478
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: InvertPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1479
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: InvertPipe, isStandalone: true, name: "invert" });
|
|
1480
|
+
}
|
|
1481
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: InvertPipe, decorators: [{
|
|
1482
|
+
type: Pipe,
|
|
1483
|
+
args: [{
|
|
1484
|
+
name: 'invert',
|
|
1485
|
+
standalone: true,
|
|
1486
|
+
}]
|
|
1487
|
+
}] });
|
|
1488
|
+
|
|
1489
|
+
/**
|
|
1490
|
+
* InvertByPipe: Returns a new object with values as keys, grouping the original
|
|
1491
|
+
* keys for each value into an array.
|
|
1492
|
+
*
|
|
1493
|
+
* Unlike `invert`, no data is lost when multiple source keys share a value —
|
|
1494
|
+
* they're collected into an array under the shared key.
|
|
1495
|
+
*
|
|
1496
|
+
* @param {unknown} value - The source object.
|
|
1497
|
+
*
|
|
1498
|
+
* @returns {Record<string, string[]>} - A new object with values-as-keys
|
|
1499
|
+
* pointing at arrays of the original keys.
|
|
1500
|
+
*
|
|
1501
|
+
* @example
|
|
1502
|
+
* {{ { a: 1, b: 2, c: 1 } | invertBy }} // { '1': ['a', 'c'], '2': ['b'] }
|
|
1503
|
+
* {{ { alice: 'admin', bob: 'user', carol: 'admin' } | invertBy }}
|
|
1504
|
+
* // { admin: ['alice', 'carol'], user: ['bob'] }
|
|
1505
|
+
*/
|
|
1506
|
+
class InvertByPipe {
|
|
1507
|
+
transform(value) {
|
|
1508
|
+
if (value === null || value === undefined)
|
|
1509
|
+
return {};
|
|
1510
|
+
if (typeof value !== 'object')
|
|
1511
|
+
return {};
|
|
1512
|
+
const source = value;
|
|
1513
|
+
const result = {};
|
|
1514
|
+
for (const key of Object.keys(source)) {
|
|
1515
|
+
const v = source[key];
|
|
1516
|
+
if (v === undefined)
|
|
1517
|
+
continue;
|
|
1518
|
+
const stringKey = String(v);
|
|
1519
|
+
if (!result[stringKey])
|
|
1520
|
+
result[stringKey] = [];
|
|
1521
|
+
result[stringKey].push(key);
|
|
1522
|
+
}
|
|
1523
|
+
return result;
|
|
1524
|
+
}
|
|
1525
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: InvertByPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1526
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: InvertByPipe, isStandalone: true, name: "invertBy" });
|
|
1527
|
+
}
|
|
1528
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: InvertByPipe, decorators: [{
|
|
1529
|
+
type: Pipe,
|
|
1530
|
+
args: [{
|
|
1531
|
+
name: 'invertBy',
|
|
1532
|
+
standalone: true,
|
|
1533
|
+
}]
|
|
1534
|
+
}] });
|
|
1535
|
+
|
|
1536
|
+
/**
|
|
1537
|
+
* DiffObjPipe: Returns the slice of `value` whose properties differ from `compareTo`.
|
|
1538
|
+
*
|
|
1539
|
+
* For each key in `value`, the entry is included in the result when:
|
|
1540
|
+
* - The key is missing from `compareTo`, or
|
|
1541
|
+
* - `value[key]` is not strictly equal (`!==`) to `compareTo[key]`.
|
|
1542
|
+
*
|
|
1543
|
+
* Comparison is shallow — nested objects/arrays are compared by reference.
|
|
1544
|
+
*
|
|
1545
|
+
* @param {unknown} value - The source object.
|
|
1546
|
+
* @param {unknown} compareTo - The object to compare against.
|
|
1547
|
+
*
|
|
1548
|
+
* @returns {Record<string, unknown>} - A new object containing the differing entries.
|
|
1549
|
+
*
|
|
1550
|
+
* @example
|
|
1551
|
+
* {{ { a: 1, b: 2 } | diffObj:{ a: 1, b: 99 } }} // { b: 2 }
|
|
1552
|
+
* {{ { a: 1, b: 2, c: 3 } | diffObj:{ a: 1 } }} // { b: 2, c: 3 }
|
|
1553
|
+
* {{ { a: 1 } | diffObj:{ a: 1 } }} // {} (no differences)
|
|
1554
|
+
*/
|
|
1555
|
+
class DiffObjPipe {
|
|
1556
|
+
transform(value, compareTo) {
|
|
1557
|
+
if (value === null || value === undefined)
|
|
1558
|
+
return {};
|
|
1559
|
+
if (typeof value !== 'object')
|
|
1560
|
+
return {};
|
|
1561
|
+
const source = value;
|
|
1562
|
+
if (compareTo === null || compareTo === undefined || typeof compareTo !== 'object') {
|
|
1563
|
+
return { ...source };
|
|
1564
|
+
}
|
|
1565
|
+
const target = compareTo;
|
|
1566
|
+
const result = {};
|
|
1567
|
+
for (const key of Object.keys(source)) {
|
|
1568
|
+
if (!Object.prototype.hasOwnProperty.call(target, key) || source[key] !== target[key]) {
|
|
1569
|
+
result[key] = source[key];
|
|
1570
|
+
}
|
|
1571
|
+
}
|
|
1572
|
+
return result;
|
|
1573
|
+
}
|
|
1574
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DiffObjPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1575
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: DiffObjPipe, isStandalone: true, name: "diffObj" });
|
|
1576
|
+
}
|
|
1577
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: DiffObjPipe, decorators: [{
|
|
1578
|
+
type: Pipe,
|
|
1579
|
+
args: [{
|
|
1580
|
+
name: 'diffObj',
|
|
1581
|
+
standalone: true,
|
|
1582
|
+
}]
|
|
1583
|
+
}] });
|
|
1584
|
+
|
|
1585
|
+
/**
|
|
1586
|
+
* IsDefinedPipe: Returns `true` when the value is neither `null` nor `undefined`.
|
|
1587
|
+
*
|
|
1588
|
+
* Useful for guarding optional bindings in templates without resorting to
|
|
1589
|
+
* verbose `value !== null && value !== undefined` checks. Empty strings,
|
|
1590
|
+
* `0`, and `false` are all considered defined.
|
|
1591
|
+
*
|
|
1592
|
+
* @param {unknown} value - The value to test.
|
|
1593
|
+
*
|
|
1594
|
+
* @returns {boolean} - `true` if defined, `false` if null/undefined.
|
|
1595
|
+
*
|
|
1596
|
+
* @example
|
|
1597
|
+
* {{ user | isDefined }} // true when user is set
|
|
1598
|
+
* {{ 0 | isDefined }} // true
|
|
1599
|
+
* {{ '' | isDefined }} // true
|
|
1600
|
+
* {{ null | isDefined }} // false
|
|
1601
|
+
* {{ undefined | isDefined }} // false
|
|
1602
|
+
*/
|
|
1603
|
+
class IsDefinedPipe {
|
|
1604
|
+
transform(value) {
|
|
1605
|
+
return value !== null && value !== undefined;
|
|
1606
|
+
}
|
|
1607
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsDefinedPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1608
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsDefinedPipe, isStandalone: true, name: "isDefined" });
|
|
1609
|
+
}
|
|
1610
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsDefinedPipe, decorators: [{
|
|
1611
|
+
type: Pipe,
|
|
1612
|
+
args: [{
|
|
1613
|
+
name: 'isDefined',
|
|
1614
|
+
standalone: true,
|
|
1615
|
+
}]
|
|
1616
|
+
}] });
|
|
1617
|
+
|
|
1618
|
+
/**
|
|
1619
|
+
* IsNullPipe: Returns `true` only when the value is exactly `null`.
|
|
1620
|
+
*
|
|
1621
|
+
* Strict check — `undefined` returns `false`. Use `isDefined` (with `!`) if
|
|
1622
|
+
* you want to catch both null and undefined together.
|
|
1623
|
+
*
|
|
1624
|
+
* @param {unknown} value - The value to test.
|
|
1625
|
+
*
|
|
1626
|
+
* @returns {boolean} - `true` if the value is null, `false` otherwise.
|
|
1627
|
+
*
|
|
1628
|
+
* @example
|
|
1629
|
+
* {{ null | isNull }} // true
|
|
1630
|
+
* {{ undefined | isNull }} // false
|
|
1631
|
+
* {{ 0 | isNull }} // false
|
|
1632
|
+
* {{ '' | isNull }} // false
|
|
1633
|
+
*/
|
|
1634
|
+
class IsNullPipe {
|
|
1635
|
+
transform(value) {
|
|
1636
|
+
return value === null;
|
|
1637
|
+
}
|
|
1638
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsNullPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1639
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsNullPipe, isStandalone: true, name: "isNull" });
|
|
1640
|
+
}
|
|
1641
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsNullPipe, decorators: [{
|
|
1642
|
+
type: Pipe,
|
|
1643
|
+
args: [{
|
|
1644
|
+
name: 'isNull',
|
|
1645
|
+
standalone: true,
|
|
1646
|
+
}]
|
|
1647
|
+
}] });
|
|
1648
|
+
|
|
1649
|
+
/**
|
|
1650
|
+
* IsStringPipe: Returns `true` when the value is a primitive string.
|
|
1651
|
+
*
|
|
1652
|
+
* Uses `typeof value === 'string'` — boxed `String` objects (rare) are not
|
|
1653
|
+
* matched. Useful for polymorphic templates that render values from JSON,
|
|
1654
|
+
* dynamic forms, or `unknown`-typed data.
|
|
1655
|
+
*
|
|
1656
|
+
* @param {unknown} value - The value to test.
|
|
1657
|
+
*
|
|
1658
|
+
* @returns {boolean} - `true` if the value is a string primitive, `false` otherwise.
|
|
1659
|
+
*
|
|
1660
|
+
* @example
|
|
1661
|
+
* {{ 'hello' | isString }} // true
|
|
1662
|
+
* {{ '' | isString }} // true
|
|
1663
|
+
* {{ 42 | isString }} // false
|
|
1664
|
+
* {{ null | isString }} // false
|
|
1665
|
+
*/
|
|
1666
|
+
class IsStringPipe {
|
|
1667
|
+
transform(value) {
|
|
1668
|
+
return typeof value === 'string';
|
|
1669
|
+
}
|
|
1670
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsStringPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1671
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsStringPipe, isStandalone: true, name: "isString" });
|
|
1672
|
+
}
|
|
1673
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsStringPipe, decorators: [{
|
|
1674
|
+
type: Pipe,
|
|
1675
|
+
args: [{
|
|
1676
|
+
name: 'isString',
|
|
1677
|
+
standalone: true,
|
|
1678
|
+
}]
|
|
1679
|
+
}] });
|
|
1680
|
+
|
|
1681
|
+
/**
|
|
1682
|
+
* IsNumberPipe: Returns `true` when the value is a primitive number.
|
|
1683
|
+
*
|
|
1684
|
+
* Uses `typeof value === 'number'`. By design `NaN` returns `true` because
|
|
1685
|
+
* its type is `number` — if you need a finite-only check, follow up with
|
|
1686
|
+
* `Number.isFinite`. Numeric strings (e.g. `'42'`) return `false`.
|
|
1687
|
+
*
|
|
1688
|
+
* @param {unknown} value - The value to test.
|
|
1689
|
+
*
|
|
1690
|
+
* @returns {boolean} - `true` if the value is a number primitive, `false` otherwise.
|
|
1691
|
+
*
|
|
1692
|
+
* @example
|
|
1693
|
+
* {{ 42 | isNumber }} // true
|
|
1694
|
+
* {{ 0 | isNumber }} // true
|
|
1695
|
+
* {{ NaN | isNumber }} // true
|
|
1696
|
+
* {{ '42' | isNumber }} // false
|
|
1697
|
+
* {{ null | isNumber }} // false
|
|
1698
|
+
*/
|
|
1699
|
+
class IsNumberPipe {
|
|
1700
|
+
transform(value) {
|
|
1701
|
+
return typeof value === 'number';
|
|
1702
|
+
}
|
|
1703
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsNumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1704
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsNumberPipe, isStandalone: true, name: "isNumber" });
|
|
1705
|
+
}
|
|
1706
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsNumberPipe, decorators: [{
|
|
1707
|
+
type: Pipe,
|
|
1708
|
+
args: [{
|
|
1709
|
+
name: 'isNumber',
|
|
1710
|
+
standalone: true,
|
|
1711
|
+
}]
|
|
1712
|
+
}] });
|
|
1713
|
+
|
|
1714
|
+
/**
|
|
1715
|
+
* IsArrayPipe: Returns `true` when the value is an Array.
|
|
1716
|
+
*
|
|
1717
|
+
* Backed by `Array.isArray`, so array-likes (NodeList, HTMLCollection,
|
|
1718
|
+
* arguments, typed arrays) all return `false`. Use it to discriminate between
|
|
1719
|
+
* structural and scalar inputs in polymorphic templates.
|
|
1720
|
+
*
|
|
1721
|
+
* @param {unknown} value - The value to test.
|
|
1722
|
+
*
|
|
1723
|
+
* @returns {boolean} - `true` if the value is an array, `false` otherwise.
|
|
1724
|
+
*
|
|
1725
|
+
* @example
|
|
1726
|
+
* {{ [1, 2, 3] | isArray }} // true
|
|
1727
|
+
* {{ [] | isArray }} // true
|
|
1728
|
+
* {{ 'abc' | isArray }} // false
|
|
1729
|
+
* {{ { length: 0 } | isArray }} // false
|
|
1730
|
+
*/
|
|
1731
|
+
class IsArrayPipe {
|
|
1732
|
+
transform(value) {
|
|
1733
|
+
return Array.isArray(value);
|
|
1734
|
+
}
|
|
1735
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsArrayPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1736
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsArrayPipe, isStandalone: true, name: "isArray" });
|
|
1737
|
+
}
|
|
1738
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsArrayPipe, decorators: [{
|
|
1739
|
+
type: Pipe,
|
|
1740
|
+
args: [{
|
|
1741
|
+
name: 'isArray',
|
|
1742
|
+
standalone: true,
|
|
1743
|
+
}]
|
|
1744
|
+
}] });
|
|
1745
|
+
|
|
1746
|
+
/**
|
|
1747
|
+
* IsObjectPipe: Returns `true` when the value is a non-null object that is
|
|
1748
|
+
* not an array.
|
|
1749
|
+
*
|
|
1750
|
+
* Lenient — class instances, Date, Map, Set, and RegExp all return `true`
|
|
1751
|
+
* because their JS type is "object". Only `null` and arrays are excluded.
|
|
1752
|
+
* Pair with `isArray` to discriminate between the two structural shapes.
|
|
1753
|
+
*
|
|
1754
|
+
* @param {unknown} value - The value to test.
|
|
1755
|
+
*
|
|
1756
|
+
* @returns {boolean} - `true` if the value is a non-null, non-array object.
|
|
1757
|
+
*
|
|
1758
|
+
* @example
|
|
1759
|
+
* {{ { a: 1 } | isObject }} // true
|
|
1760
|
+
* {{ {} | isObject }} // true
|
|
1761
|
+
* {{ [1, 2] | isObject }} // false
|
|
1762
|
+
* {{ null | isObject }} // false
|
|
1763
|
+
* {{ 'abc' | isObject }} // false
|
|
1764
|
+
*/
|
|
1765
|
+
class IsObjectPipe {
|
|
1766
|
+
transform(value) {
|
|
1767
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
1768
|
+
}
|
|
1769
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsObjectPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1770
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsObjectPipe, isStandalone: true, name: "isObject" });
|
|
1771
|
+
}
|
|
1772
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsObjectPipe, decorators: [{
|
|
1773
|
+
type: Pipe,
|
|
1774
|
+
args: [{
|
|
1775
|
+
name: 'isObject',
|
|
1776
|
+
standalone: true,
|
|
1777
|
+
}]
|
|
1778
|
+
}] });
|
|
1779
|
+
|
|
1780
|
+
/**
|
|
1781
|
+
* IsFunctionPipe: Returns `true` when the value is callable.
|
|
1782
|
+
*
|
|
1783
|
+
* Backed by `typeof value === 'function'`, so arrow functions, regular
|
|
1784
|
+
* functions, async functions, generator functions, and class constructors
|
|
1785
|
+
* all return `true`. Methods and bound functions count too.
|
|
1786
|
+
*
|
|
1787
|
+
* @param {unknown} value - The value to test.
|
|
1788
|
+
*
|
|
1789
|
+
* @returns {boolean} - `true` if the value is a function, `false` otherwise.
|
|
1790
|
+
*
|
|
1791
|
+
* @example
|
|
1792
|
+
* {{ (() => 0) | isFunction }} // true
|
|
1793
|
+
* {{ Math.max | isFunction }} // true
|
|
1794
|
+
* {{ class {} | isFunction }} // true
|
|
1795
|
+
* {{ 'fn' | isFunction }} // false
|
|
1796
|
+
*/
|
|
1797
|
+
class IsFunctionPipe {
|
|
1798
|
+
transform(value) {
|
|
1799
|
+
return typeof value === 'function';
|
|
1800
|
+
}
|
|
1801
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsFunctionPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1802
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsFunctionPipe, isStandalone: true, name: "isFunction" });
|
|
1803
|
+
}
|
|
1804
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsFunctionPipe, decorators: [{
|
|
1805
|
+
type: Pipe,
|
|
1806
|
+
args: [{
|
|
1807
|
+
name: 'isFunction',
|
|
1808
|
+
standalone: true,
|
|
1809
|
+
}]
|
|
1810
|
+
}] });
|
|
1811
|
+
|
|
1812
|
+
/**
|
|
1813
|
+
* IsEmptyPipe: Returns `true` when the value has nothing in it.
|
|
1814
|
+
*
|
|
1815
|
+
* - `null` / `undefined` → `true`
|
|
1816
|
+
* - `''` (empty string) → `true`
|
|
1817
|
+
* - `[]` (empty array) → `true`
|
|
1818
|
+
* - `{}` (no own enumerable keys) → `true`
|
|
1819
|
+
* - empty `Map` / `Set` → `true`
|
|
1820
|
+
* - everything else (numbers, booleans, dates, functions, non-empty containers) → `false`
|
|
1821
|
+
*
|
|
1822
|
+
* Whitespace strings count as non-empty — chain `trim` first if you want a
|
|
1823
|
+
* "blank" check.
|
|
1824
|
+
*
|
|
1825
|
+
* @param {unknown} value - The value to test.
|
|
1826
|
+
*
|
|
1827
|
+
* @returns {boolean} - `true` if the value is considered empty.
|
|
1828
|
+
*
|
|
1829
|
+
* @example
|
|
1830
|
+
* {{ '' | isEmpty }} // true
|
|
1831
|
+
* {{ [] | isEmpty }} // true
|
|
1832
|
+
* {{ {} | isEmpty }} // true
|
|
1833
|
+
* {{ null | isEmpty }} // true
|
|
1834
|
+
* {{ ' ' | isEmpty }} // false (use trim first)
|
|
1835
|
+
* {{ 0 | isEmpty }} // false
|
|
1836
|
+
*/
|
|
1837
|
+
class IsEmptyPipe {
|
|
1838
|
+
transform(value) {
|
|
1839
|
+
if (value === null || value === undefined)
|
|
1840
|
+
return true;
|
|
1841
|
+
if (typeof value === 'string' || Array.isArray(value))
|
|
1842
|
+
return value.length === 0;
|
|
1843
|
+
if (value instanceof Map || value instanceof Set)
|
|
1844
|
+
return value.size === 0;
|
|
1845
|
+
if (typeof value === 'object') {
|
|
1846
|
+
// Only plain objects are "empty when no keys".
|
|
1847
|
+
// Built-in types (Date, RegExp) and class instances carry meaning.
|
|
1848
|
+
const proto = Object.getPrototypeOf(value);
|
|
1849
|
+
if (proto === Object.prototype || proto === null) {
|
|
1850
|
+
return Object.keys(value).length === 0;
|
|
1851
|
+
}
|
|
1852
|
+
return false;
|
|
1853
|
+
}
|
|
1854
|
+
return false;
|
|
1855
|
+
}
|
|
1856
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsEmptyPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
|
|
1857
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.1.3", ngImport: i0, type: IsEmptyPipe, isStandalone: true, name: "isEmpty" });
|
|
1858
|
+
}
|
|
1859
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: IsEmptyPipe, decorators: [{
|
|
1860
|
+
type: Pipe,
|
|
1861
|
+
args: [{
|
|
1862
|
+
name: 'isEmpty',
|
|
1863
|
+
standalone: true,
|
|
1864
|
+
}]
|
|
1865
|
+
}] });
|
|
1866
|
+
|
|
476
1867
|
/**
|
|
477
1868
|
* CreditCardMaskPipe: Masks all but the last four digits of a string, optionally controlled by a boolean flag.
|
|
478
1869
|
* By default, masking is applied.
|
|
@@ -2572,6 +3963,44 @@ const ALL_PIPES = [
|
|
|
2572
3963
|
SnakeCasePipe,
|
|
2573
3964
|
TitleCasePipe,
|
|
2574
3965
|
TruncatePipe,
|
|
3966
|
+
TrimPipe,
|
|
3967
|
+
CapitalizePipe,
|
|
3968
|
+
UpperFirstPipe,
|
|
3969
|
+
LeftPadPipe,
|
|
3970
|
+
RightPadPipe,
|
|
3971
|
+
PadPipe,
|
|
3972
|
+
RepeatPipe,
|
|
3973
|
+
SlugifyPipe,
|
|
3974
|
+
StripTagsPipe,
|
|
3975
|
+
EncodeUriPipe,
|
|
3976
|
+
EncodeUriComponentPipe,
|
|
3977
|
+
DecodeUriPipe,
|
|
3978
|
+
DecodeUriComponentPipe,
|
|
3979
|
+
SplitPipe,
|
|
3980
|
+
MatchPipe,
|
|
3981
|
+
TestPipe,
|
|
3982
|
+
NewlinesPipe,
|
|
3983
|
+
TemplatePipe,
|
|
3984
|
+
LatinizePipe,
|
|
3985
|
+
WrapPipe,
|
|
3986
|
+
// Object
|
|
3987
|
+
KeysPipe,
|
|
3988
|
+
ValuesPipe,
|
|
3989
|
+
PairsPipe,
|
|
3990
|
+
PickPipe,
|
|
3991
|
+
OmitPipe,
|
|
3992
|
+
InvertPipe,
|
|
3993
|
+
InvertByPipe,
|
|
3994
|
+
DiffObjPipe,
|
|
3995
|
+
// Boolean
|
|
3996
|
+
IsDefinedPipe,
|
|
3997
|
+
IsNullPipe,
|
|
3998
|
+
IsStringPipe,
|
|
3999
|
+
IsNumberPipe,
|
|
4000
|
+
IsArrayPipe,
|
|
4001
|
+
IsObjectPipe,
|
|
4002
|
+
IsFunctionPipe,
|
|
4003
|
+
IsEmptyPipe,
|
|
2575
4004
|
// Security & Privacy
|
|
2576
4005
|
CreditCardMaskPipe,
|
|
2577
4006
|
EmailMaskPipe,
|
|
@@ -2632,5 +4061,5 @@ const ALL_PIPES = [
|
|
|
2632
4061
|
* Generated bundle index. Do not edit.
|
|
2633
4062
|
*/
|
|
2634
4063
|
|
|
2635
|
-
export { ALL_PIPES, AsciiArtPipe, AveragePipe, BarcodePipe, BytesPipe, CamelCasePipe, CeilPipe, ChunkPipe, ColorConvertPipe, CountPipe, CreditCardMaskPipe, DegreesPipe, DeviceTypePipe, DiffPipe, EmailMaskPipe, EveryPipe, FilterByPipe, Flatten, FloorPipe, GravatarPipe, GroupByPipe, HighlightPipe, HtmlEscapePipe, HtmlSanitizePipe, InitialPipe, InitialsPipe, IntersectionPipe, IpAddressMaskPipe, JsonPrettyPipe, KebabCasePipe, MaxPipe, MinPipe, MorseCodePipe, OrderByPipe, PercentagePipe, PluckPipe, PowPipe, QrCodePipe, RadiansPipe, RangePipe, ReplacePipe, ReversePipe, RoundPipe, SamplePipe, ShufflePipe, SnakeCasePipe, SomePipe, SqrtPipe, SumPipe, TailPipe, TextToSpeechPipe, TimeAgoPipePipe, TitleCasePipe, TruncatePipe, TruthifyPipe, UnionPipe, UniquePipe, WithoutPipe };
|
|
4064
|
+
export { ALL_PIPES, AsciiArtPipe, AveragePipe, BarcodePipe, BytesPipe, CamelCasePipe, CapitalizePipe, CeilPipe, ChunkPipe, ColorConvertPipe, CountPipe, CreditCardMaskPipe, DecodeUriComponentPipe, DecodeUriPipe, DegreesPipe, DeviceTypePipe, DiffObjPipe, DiffPipe, EmailMaskPipe, EncodeUriComponentPipe, EncodeUriPipe, EveryPipe, FilterByPipe, Flatten, FloorPipe, GravatarPipe, GroupByPipe, HighlightPipe, HtmlEscapePipe, HtmlSanitizePipe, InitialPipe, InitialsPipe, IntersectionPipe, InvertByPipe, InvertPipe, IpAddressMaskPipe, IsArrayPipe, IsDefinedPipe, IsEmptyPipe, IsFunctionPipe, IsNullPipe, IsNumberPipe, IsObjectPipe, IsStringPipe, JsonPrettyPipe, KebabCasePipe, KeysPipe, LatinizePipe, LeftPadPipe, MatchPipe, MaxPipe, MinPipe, MorseCodePipe, NewlinesPipe, OmitPipe, OrderByPipe, PadPipe, PairsPipe, PercentagePipe, PickPipe, PluckPipe, PowPipe, QrCodePipe, RadiansPipe, RangePipe, RepeatPipe, ReplacePipe, ReversePipe, RightPadPipe, RoundPipe, SamplePipe, ShufflePipe, SlugifyPipe, SnakeCasePipe, SomePipe, SplitPipe, SqrtPipe, StripTagsPipe, SumPipe, TailPipe, TemplatePipe, TestPipe, TextToSpeechPipe, TimeAgoPipePipe, TitleCasePipe, TrimPipe, TruncatePipe, TruthifyPipe, UnionPipe, UniquePipe, UpperFirstPipe, ValuesPipe, WithoutPipe, WrapPipe };
|
|
2636
4065
|
//# sourceMappingURL=ngx-transforms.mjs.map
|