{"_id":"@ashetm/ng-utility","_rev":"4-a1d9af6ad5065a96f71334c3c49a539a","name":"@ashetm/ng-utility","dist-tags":{"latest":"16.0.0"},"versions":{"15.0.0":{"name":"@ashetm/ng-utility","version":"15.0.0","keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","service"],"author":{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"},"_id":"@ashetm/ng-utility@15.0.0","maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"contributors":[{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"}],"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"dist":{"shasum":"15082004f88e056336d71593895da6e365936e39","tarball":"https://registry.npmjs.org/@ashetm/ng-utility/-/ng-utility-15.0.0.tgz","fileCount":41,"integrity":"sha512-bOxSaxqWIGEWRpHv++WjGr3viCzH7CudCRUW9P+2TSlKU5GTlxiBcgNtnuZWB58mmF7mjXcXRZMwo6Anp5R1gg==","signatures":[{"sig":"MEUCIFviRkiJWTTUS2cnUwNrmg97SqjAQfIJt+awg9FtkwugAiEAvr7ppl+KdADs4waPsAFX+opU6bnJb7wgU0bgBfVh730=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113668,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj57YLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLcRAAm50TL9MI+eNCy08bf7kTzuBYBl2jXWB14+opFyZCUmBOkGYK\r\n8bYNkrk3nGWKriuW8krKQmDskJPBB6pCz2klI5+r2MgdSrr3Bn3eUTSGQnK8\r\nK/C2uGHX0j3JHUjP25OY8Q+kUuHa7uLsaMXyHEX+WJyuqhrL7EYDh2p5hzwa\r\nUu8YVXvqqqrUQhEGOA/S7ZfalNFvQBVu/ZmYOZCgEA/5LCOYMKvWuenHAwR4\r\nh5g9zEuqqPSo4zogZ5Dkh8GeObHgjS0U+wvGseb9/nVT1N7Pm2XLb0yGutxo\r\nYiDb7lSXhJSYDGvGr+Lhue9Muif/RpnZXN6RXnJ+J454HEO301971IQ9pBel\r\nUcNkB7s0+ocd3kqidchtnwbKcc5uV42N8BkncS/OMxQIGaD5vizaJaLGB+hp\r\nIbycfpiwCXGjVaeHQWT/epinNH7Ss5HOgo3YdhBjU+7biHNmbJ61UsLT8GQo\r\naexkbWZO9Gkel0lNJnFYyHSFleotmVLKQusqSA53aY4gboOBIw4Iyv3rmYZP\r\nixUhqebyfKgnUS6ZXQVGdbJJ88a+vXaqpJj4cxR9ZHCTzeumHmSVtZLcBtk3\r\nDejA3AXvqDNIAGURIRJfZPyQcBwaY/KK/89nwu1Rlt4BFwkGScM3u4OCqB94\r\neEJ9MwhwdM2pJyYIfLctN++oIrcdtNw9IbA=\r\n=Qvro\r\n-----END PGP SIGNATURE-----\r\n"},"es2020":"fesm2020/ashetm-ng-utility.mjs","module":"fesm2015/ashetm-ng-utility.mjs","esm2020":"esm2020/ashetm-ng-utility.mjs","exports":{".":{"node":"./fesm2015/ashetm-ng-utility.mjs","types":"./index.d.ts","es2015":"./fesm2015/ashetm-ng-utility.mjs","es2020":"./fesm2020/ashetm-ng-utility.mjs","default":"./fesm2020/ashetm-ng-utility.mjs","esm2020":"./esm2020/ashetm-ng-utility.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"c24bd44496a855484e189d48ff2d1d732677c040","private":false,"typings":"index.d.ts","_npmUser":{"name":"ashetm","email":"haithemalidaoud@gmail.com"},"fesm2015":"fesm2015/ashetm-ng-utility.mjs","fesm2020":"fesm2020/ashetm-ng-utility.mjs","repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"_npmVersion":"8.19.2","description":"This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.3.0.","directories":{},"sideEffects":false,"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^15.0.0","@angular/core":"^15.0.0","@angular/forms":"^15.0.0","@angular/common":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-utility_15.0.0_1676129802972_0.5987681438460777","host":"s3://npm-registry-packages"}},"14.0.0":{"name":"@ashetm/ng-utility","version":"14.0.0","keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","service"],"author":{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"},"_id":"@ashetm/ng-utility@14.0.0","maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"contributors":[{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"}],"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"dist":{"shasum":"844314fe42831777c2658516d086f5e6e0b9aa7f","tarball":"https://registry.npmjs.org/@ashetm/ng-utility/-/ng-utility-14.0.0.tgz","fileCount":41,"integrity":"sha512-vRQgI12b2mUjctK6RMDZGWoj0Dr8QYlOk7yx5o/JHZgdkdjPx6Qevtz5yPdBcbKlBAupJVbn7vTUjGc5a6jRSw==","signatures":[{"sig":"MEUCIF2O23YH1TQB5LE1x5iLGQBd/tUg3OtXBf0nooeu7or/AiEAmDTvv/hRMR8+eYSEHdXhTl9KEjSZyEOkHWQzVxZ5JLY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":113791,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj57bcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq65A/9FX++kOrx6fWPg0UFH0egvh3o5pjn3MEtx+6hv1sfK+sdOVbR\r\nqDYWLYrdfa75Z/hoLPaJmX6lz/xaV8dhBpSm+swhgxQoLx3/WN8c30xSvpuR\r\nnOJ/9rESi3+FBBZTqvyoQu1lpgVnEq3mquUYJGTtfpNdyogCzl/IoTzzT5F+\r\nWoYrulp2Ein6NvrbDATZ4wiTkqx9//tKrctPQlSBMyvZPnqV33NTPtJRepZ/\r\nPoHgOOOdFliJyqJfVaqVJWekVnFNrKeIMX69YXPhbjSncr6BJ0sCcI5h2z7b\r\nzSJETBJ1mXF/9PEDeOoHyX84KDzo/ZoV1Bek1qIrHK7+mya2ESh9cOsAl95Q\r\neIMmKAZFA0U+eVeLeiiawmivX7eBlFSUgOCaE0CwEP5pHfjEYnWWnWLyunDS\r\nQ5W2zr5wjn3lmkf7FI2FHai3ACMW3eFJd3DQGCOL0JjGW5bBd8CJ+SjoiUn7\r\nz6/gYrfmlomTQEO9x8A6yPstn3T4aEXz30sR3qjZACL8iTyBhJEDTlemoIJj\r\n6+0OnVOTCmdBhhAhXyK+tInJO/yLGOQOQspVIDj8Xw9E/CrDoAhtvyzsvVvo\r\nSpu0vEvikZG1lixJo4AhZWMvL1Q6Mo+j+zjEDGYYL3aBP6I+tCUP/ZBlk9NZ\r\n2HmjSV8fDnQ/y7fQlbx2/MNl4+LojGtuUns=\r\n=OTBo\r\n-----END PGP SIGNATURE-----\r\n"},"es2020":"fesm2020/ashetm-ng-utility.mjs","module":"fesm2015/ashetm-ng-utility.mjs","esm2020":"esm2020/ashetm-ng-utility.mjs","exports":{".":{"node":"./fesm2015/ashetm-ng-utility.mjs","types":"./index.d.ts","es2015":"./fesm2015/ashetm-ng-utility.mjs","es2020":"./fesm2020/ashetm-ng-utility.mjs","default":"./fesm2020/ashetm-ng-utility.mjs","esm2020":"./esm2020/ashetm-ng-utility.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"82638f1cf843110cf2ede572bfd393872c529ba2","private":false,"typings":"index.d.ts","_npmUser":{"name":"ashetm","email":"haithemalidaoud@gmail.com"},"fesm2015":"fesm2015/ashetm-ng-utility.mjs","fesm2020":"fesm2020/ashetm-ng-utility.mjs","repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"_npmVersion":"8.19.2","description":"This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.3.0.","directories":{},"sideEffects":false,"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^14.0.0","@angular/core":"^14.0.0","@angular/forms":"^14.0.0","@angular/common":"^14.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-utility_14.0.0_1676130011845_0.4638722972017315","host":"s3://npm-registry-packages"}},"14.0.1":{"name":"@ashetm/ng-utility","version":"14.0.1","keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","service"],"author":{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"},"_id":"@ashetm/ng-utility@14.0.1","maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"contributors":[{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"}],"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"dist":{"shasum":"bdbb995a7f995db7a3489591818a5bbde30575c6","tarball":"https://registry.npmjs.org/@ashetm/ng-utility/-/ng-utility-14.0.1.tgz","fileCount":41,"integrity":"sha512-j6HQUUeXldU/itgX5fBecXhgXeTibBjYb1yjklINUONOrp03OWFsahuzPCeZh6c/At8VZF+Ldfe2ww7S1wAyiQ==","signatures":[{"sig":"MEUCIFVR+VB2JYnQaO+gI+ABMyr0wmWPpqil5e4hq+EKDMzoAiEA64DdmJqYW4emowDOh8CV1Kbaz1EBJ5zNXYpD0J32Ngo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":119321,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj8ivMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoHWQ/9Hj8IXqaOg0VSj+V6N3xe8f6Q3mVxXUfl1Fsnf7HDPQTDMB7V\r\nusAuvWIQd3uMFQEfu1xanGGx+8qdcR9Z6aczwxfm795CX7Mygoi0N4IXZ8ob\r\nfFVpLmsT5SR10eLtPXSTiTIBxcCvgHi2YqrlYaZCJnYiS8gfFJJAFhSzU1ve\r\nnOUnzou9EUmb2IKs0ogAiZbbjBy2WCsjg967xslzAvoBTe4qNLffCoSd7dnE\r\nsupvol6Hg5MLFhidoYKo6yq64vD71oXrd0hWAyaMjtk2picttdCd1Vkikjjw\r\nVSzpNKGniU2cmdYXQTZSKfDkhxA+TdpcXZuoI4w5CBdWow5zuGuXBNBingdB\r\n5uZ3rv57yxDQjk5uujD/+Ov74ngUbhzMNGq6pk4+KfEsOQ+DamxWX+3Q9lhx\r\ntw7qyUZ6cTGSRbBzniJFnI8Q2AIUie1EsLPS0e88HDw6XZwW+OSsk76HMKBf\r\n6NN0PuOxSGH/qAIL7UhCTKrgi4SzvfTO6C9PjuvpQMn81qoKzjtOlg+VVnGn\r\nMiaemL1eug5ZH2oiDrgpVE3X1kKcm/R73ZUi6yStWdwv6KqYwpk5Sx5Jn44z\r\nGGKZwwRBawfqZHkCXqUBGj70hX8UmNTb4fmcjEoywYV2kGFPat/X18MK2021\r\nfX9wfcbUV3FkMXzm/qLykBeKyEDpWqaCrx0=\r\n=1tPA\r\n-----END PGP SIGNATURE-----\r\n"},"es2020":"fesm2020/ashetm-ng-utility.mjs","module":"fesm2015/ashetm-ng-utility.mjs","esm2020":"esm2020/ashetm-ng-utility.mjs","exports":{".":{"node":"./fesm2015/ashetm-ng-utility.mjs","types":"./index.d.ts","es2015":"./fesm2015/ashetm-ng-utility.mjs","es2020":"./fesm2020/ashetm-ng-utility.mjs","default":"./fesm2020/ashetm-ng-utility.mjs","esm2020":"./esm2020/ashetm-ng-utility.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"81551bfefa11ba5cce303d2f6245d2fae0d571fc","private":false,"typings":"index.d.ts","_npmUser":{"name":"ashetm","email":"haithemalidaoud@gmail.com"},"fesm2015":"fesm2015/ashetm-ng-utility.mjs","fesm2020":"fesm2020/ashetm-ng-utility.mjs","repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"_npmVersion":"8.19.2","description":"``@ashetm/ng-utility`` is a library that provide some utilities classes, like pipes.","directories":{},"sideEffects":false,"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^14.0.0","@angular/core":"^14.0.0","@angular/forms":"^14.0.0","@angular/common":"^14.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-utility_14.0.1_1676815308358_0.6229419183976908","host":"s3://npm-registry-packages"}},"15.0.1":{"name":"@ashetm/ng-utility","version":"15.0.1","keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","service"],"author":{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"},"_id":"@ashetm/ng-utility@15.0.1","maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"contributors":[{"url":"http://ashetm.com","name":"DAWOUD Haitham","email":"contact@ashetm.com"}],"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"dist":{"shasum":"077bff477f9e30a9677e73f57439cfa9de8ede69","tarball":"https://registry.npmjs.org/@ashetm/ng-utility/-/ng-utility-15.0.1.tgz","fileCount":41,"integrity":"sha512-RzLP+0F5eguxDQ2xnQu2z6tOISHeERTx/vSFl3keYUHim0NRw9FjLKu8u1SWy5RLTdBNFT96uKGuZ2CmHb+8Ig==","signatures":[{"sig":"MEUCIQD5s4tAN6nOSkBni9vndqRGtu68vsqVywYdVIv+nZXmawIgeDiw1zVeleMGrd7h04LsFL1EzULCDFUBae7G/R2tQVg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":119195,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj8nqkACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq7/Q//QKJNm++lY3PrMCRr9XYVKYZhq2bg0mUhUKY/jOocEbGj7+b9\r\ncsKjl+qA7il1J72eknJp3fF2+6iyMG5SFVU63gSgrQNJY1Nj27/mqGTBxpFH\r\ne97X7wVOdq+ny29KE7q8xdh5PgdSh3lcAgdl58wmbkQ8Cuhn/2gA1y7H2jjl\r\n+k9+4M70jSVd0dOWu24V496IUvnMxML3+KI6/KqPKOXu5ry7bs7gq83ZlNFZ\r\ntqL+VWtB1wyzM2GRLGYzKib0eJ0qorKFcDgnJ0M/rlIbOuyYOqH3nf/GX1Ev\r\nW5K54f52Aih9EpNJjLXiLafWbApoBQwUMOQtOARbuXwRg7V28Vlpi7R98Hs0\r\nJiKvG9W0mV5qvxbTs6gbJAttAi//li6kczAHFuqIwbgHsjmpG4Br6XUavjMH\r\n8lpvJ84ts3spzHFmSXujrT9oq7/prgTJoFyLRTWuXAAaMhxP38BD903UQfdQ\r\nFSQv6ga1g0CIxOTyzMi5/hdEk8dRqmotZIGmOUm7MtBHiFY5xHG15IJSkR3p\r\nHhGeylwz5uM/TKHtjbwdees7dOFHqp8MMLrqbZkASJB6MVjfJfhyJx6tVMj6\r\n5BcrflbqnDbGtOqdXZz/qojvb21r7ryoSpBllPwCAjJhRiC1HXjKnTNOJd5O\r\nrj09CDQugNmdTD9kIN6wb4IMOIm0/Naeg80=\r\n=4tmA\r\n-----END PGP SIGNATURE-----\r\n"},"es2020":"fesm2020/ashetm-ng-utility.mjs","module":"fesm2015/ashetm-ng-utility.mjs","esm2020":"esm2020/ashetm-ng-utility.mjs","exports":{".":{"node":"./fesm2015/ashetm-ng-utility.mjs","types":"./index.d.ts","es2015":"./fesm2015/ashetm-ng-utility.mjs","es2020":"./fesm2020/ashetm-ng-utility.mjs","default":"./fesm2020/ashetm-ng-utility.mjs","esm2020":"./esm2020/ashetm-ng-utility.mjs"},"./package.json":{"default":"./package.json"}},"gitHead":"1903c6a95dbf8c28d13afd003c946bf9c743b65b","private":false,"typings":"index.d.ts","_npmUser":{"name":"ashetm","email":"haithemalidaoud@gmail.com"},"fesm2015":"fesm2015/ashetm-ng-utility.mjs","fesm2020":"fesm2020/ashetm-ng-utility.mjs","repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"_npmVersion":"8.19.2","description":"``@ashetm/ng-utility`` is a library that provide some utilities classes, like pipes.","directories":{},"sideEffects":false,"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.3.0"},"_hasShrinkwrap":false,"peerDependencies":{"@angular/cdk":"^15.0.0","@angular/core":"^15.0.0","@angular/forms":"^15.0.0","@angular/common":"^15.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ng-utility_15.0.1_1676835491880_0.8754936405756719","host":"s3://npm-registry-packages"}},"16.0.0":{"name":"@ashetm/ng-utility","version":"16.0.0","contributors":[{"name":"DAWOUD Haitham","email":"contact@ashetm.com","url":"http://ashetm.com"}],"author":{"name":"DAWOUD Haitham","email":"contact@ashetm.com","url":"http://ashetm.com"},"keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","observable","operators","service","rxjs","rxjs/operators"],"private":false,"repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"peerDependencies":{"@angular/cdk":">=16.0.0","@angular/common":">=16.0.0","@angular/core":">=16.0.0","@angular/forms":">=16.0.0","rxjs":">=6.6.0"},"dependencies":{"tslib":"^2.3.0"},"module":"fesm2022/ashetm-ng-utility.mjs","typings":"index.d.ts","exports":{"./package.json":{"default":"./package.json"},".":{"types":"./index.d.ts","esm2022":"./esm2022/ashetm-ng-utility.mjs","esm":"./esm2022/ashetm-ng-utility.mjs","default":"./fesm2022/ashetm-ng-utility.mjs"}},"sideEffects":false,"scripts":{"prepublishOnly":"node --eval \"console.error('ERROR: Trying to publish a package that has been compiled by Ivy in full compilation mode. This is not allowed.\\nPlease delete and rebuild the package with Ivy partial compilation mode, before attempting to publish.\\n')\" && exit 1"},"_id":"@ashetm/ng-utility@16.0.0","gitHead":"64dc0c48dfa82d405d44671a823d0093ace18632","description":"``@ashetm/ng-utility`` is a library that provide some utilities classes, like pipes.","bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","_nodeVersion":"18.19.1","_npmVersion":"10.2.4","dist":{"integrity":"sha512-9vCUUQ+A73r2nYofMzlvRWlIN3xJlW/zOGW25x1kAMZ3K5LKCzTcwA/BX7yHLWZ2yH0liR4LYVi2gweUwQhrOg==","shasum":"6d0f519fa6c60081cdcc6a3261cbee7d6f16d31a","tarball":"https://registry.npmjs.org/@ashetm/ng-utility/-/ng-utility-16.0.0.tgz","fileCount":89,"unpackedSize":237911,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCTdRFA8SCtSbAJd25S5DHYwn88irBPLKvQarcf5xWrEAIgHVZt8+x3ETUBsmxOYkTIIHR4RLPdpLmbajm2eeh8IdA="}]},"_npmUser":{"name":"ashetm","email":"haithemalidaoud@gmail.com"},"directories":{},"maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ng-utility_16.0.0_1734901986246_0.752482796061299"},"_hasShrinkwrap":false}},"time":{"created":"2023-02-11T15:36:42.921Z","modified":"2024-12-22T21:13:06.637Z","15.0.0":"2023-02-11T15:36:43.155Z","14.0.0":"2023-02-11T15:40:12.018Z","14.0.1":"2023-02-19T14:01:48.541Z","15.0.1":"2023-02-19T19:38:12.036Z","16.0.0":"2024-12-22T21:13:06.447Z"},"bugs":{"url":"https://github.com/AsheTM/ng-services/issues"},"author":{"name":"DAWOUD Haitham","email":"contact@ashetm.com","url":"http://ashetm.com"},"homepage":"https://github.com/AsheTM/ng-services/tree/release#readme","keywords":["angular","utility","js","pipe","pipes","ng","ng-pipe","ng-service","ng-services","ng-utility","observable","operators","service","rxjs","rxjs/operators"],"repository":{"url":"git+https://github.com/AsheTM/ng-services.git#release"},"description":"``@ashetm/ng-utility`` is a library that provide some utilities classes, like pipes.","contributors":[{"name":"DAWOUD Haitham","email":"contact@ashetm.com","url":"http://ashetm.com"}],"maintainers":[{"name":"ashetm","email":"haithemalidaoud@gmail.com"}],"readme":"\r\n# @ashetm/ng-utility\r\n\r\n``@ashetm/ng-utility`` is a library that provide some utilities classes, like pipes.\r\n\r\n<!-- [![build status](http://img.shields.io/travis/likeastore/ngDialog.svg)](https://travis-ci.org/likeastore/ngDialog) -->\r\n<!-- [![npm version](http://badge.fury.io/js/ng-dialog.svg)](http://badge.fury.io/js/ng-dialog) -->\r\n<!-- [![github tag](https://img.shields.io/github/tag/likeastore/ngDialog.svg)](https://github.com/likeastore/ngDialog/tags) -->\r\n<!-- [![Download Count](https://img.shields.io/npm/dm/ng-dialog.svg)](http://www.npmjs.com/package/ng-dialog) -->\r\n<!-- [![Code Climate](https://codeclimate.com/github/likeastore/ngDialog/badges/gpa.svg)](https://codeclimate.com/github/likeastore/ngDialog) -->\r\n\r\n<!-- ### [Demo](http://likeastore.github.io/ngDialog) -->\r\n\r\n## Compatibility Table\r\n\r\n| Angular Version    | @ashetm/ng-utility Version     | RxJS Version   | Support |\r\n|--------------------|--------------------------------|----------------|---------|\r\n| Angular 16.x and + | @ashetm/ng-utility 16.x and +  | 6.x.x and +    | ✅     |\r\n| Angular 15.x       | @ashetm/ng-utility 15.x        | No requirement | ❌     |\r\n| Angular 14.x       | @ashetm/ng-utility 14.x        | No requirement | ❌     |\r\n| Angular 13.x       | @ashetm/ng-utility 13.x        | No requirement | ❌     |\r\n| Angular 12.x       | @ashetm/ng-utility 12.x        | No requirement | ❌     |\r\n\r\n## Install\r\n\r\nYou can install it with npm:\r\n\r\n```bash\r\nnpm install @ashetm/ng-utility\r\n```\r\n\r\n## Import\r\n\r\nYou only need to import ``UtilityModule``.\r\n\r\n```ts\r\n...\r\nimport { UtilityModule } from '@ashetm/ng-utility';\r\n...\r\n@NgModule({\r\n  ...\r\n  imports: [\r\n    ...\r\n    UtilityModule, \r\n    ...\r\n  ]\r\n  ...\r\n})\r\nexport class AppModule { }\r\n```\r\n\r\n## API\r\n\r\n``@ashetm/ng-utility`` exposes the following: \r\n\r\n### Modules\r\n\r\n* ``UtilityModule``, that needs to import in order to use the library.\r\n\r\n### Custom RXJS Operators\r\n\r\nAll custom RXJS operators are available without importing the module.\r\n\r\n#### `containsItem` Operator\r\n\r\n```ts\r\nfunction containsItem<T>(fn: (item: T) => boolean): OperatorFunction<T[], boolean> { ... }\r\n```\r\n\r\nThis custom operator checks if any item in the array emitted by the observable satisfies a condition specified by the provided predicate function. It returns a boolean indicating whether the condition is met for any item in the array.\r\n\r\nParameters:\r\n\r\n1. `fn`: A function that takes an item of type T and returns a boolean indicating whether the item satisfies the condition.\r\n\r\nReturns:\r\n\r\nAn observable emitting a boolean (true if any item satisfies the condition, false otherwise).\r\n\r\nExample: \r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(containsItem((item) => item > 3)).subscribe((result) => {\r\n  console.log(result); // true (because 4 and 5 are greater than 3)\r\n});\r\n\r\nobs.pipe(containsItem((item) => item > 6)).subscribe((result) => {\r\n  console.log(result); // false (no item greater than 6)\r\n});\r\n```\r\n\r\n#### `filterFromArray` Operator\r\n\r\n```ts\r\nfunction filterFromArray<T>(fn: (value: T, index: number) => boolean): MonoTypeOperatorFunction<T[]> { ... }\r\n```\r\n\r\nThis custom operator filters the array emitted by the observable based on a predicate function. The predicate function receives each item along with its index, and only the items for which the predicate returns true will be included in the resulting array.\r\n\r\nParameters:\r\n\r\n1. `fn`: A function that takes a value of type T and its index in the array, returning a boolean that determines whether the item should be included in the filtered array.\r\n\r\nReturns:\r\n\r\nAn observable that emits an array of items that passed the condition set by the predicate function.\r\n\r\nExample: \r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(filterFromArray((item, index) => item % 2 === 0)).subscribe((result) => {\r\n  console.log(result); // [2, 4] (only even numbers)\r\n});\r\n\r\nobs.pipe(filterFromArray((item, index) => index < 3)).subscribe((result) => {\r\n  console.log(result); // [1, 2, 3] (first three items)\r\n});\r\n```\r\n\r\n#### `firstFromArray` Operator\r\n\r\n```ts\r\nfunction firstFromArray<T>(): OperatorFunction<T[], T | undefined> { ... }\r\n```\r\n\r\nThis custom operator extracts the first item from an array emitted by the observable. If the array is empty, it returns `undefined`.\r\n\r\nReturns:\r\n\r\nAn observable emitting the first item from the array, or `undefined` if the array is empty.\r\n\r\nExample:\r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(firstFromArray()).subscribe((result) => {\r\n  console.log(result); // 1 (first item in the array)\r\n});\r\n\r\nconst emptyObs = new Observable<number[]>((observer) => {\r\n  observer.next([]);\r\n  observer.complete();\r\n});\r\n\r\nemptyObs.pipe(firstFromArray()).subscribe((result) => {\r\n  console.log(result); // undefined (no items in the array)\r\n});\r\n```\r\n\r\n#### `lastFromArray` Operator\r\n\r\n```ts\r\nfunction lastFromArray<T>(): OperatorFunction<T[], T | undefined> { ... }\r\n```\r\n\r\nThis custom operator extracts the last item from an array emitted by the observable. If the array is empty, it returns `undefined`.\r\n\r\nReturns:\r\n\r\nAn observable emitting the last item from the array, or `undefined` if the array is empty.\r\n\r\nExample:\r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(lastFromArray()).subscribe((result) => {\r\n  console.log(result); // 5 (last item in the array)\r\n});\r\n\r\nconst emptyObs = new Observable<number[]>((observer) => {\r\n  observer.next([]);\r\n  observer.complete();\r\n});\r\n\r\nemptyObs.pipe(lastFromArray()).subscribe((result) => {\r\n  console.log(result); // undefined (no items in the array)\r\n});\r\n```\r\n\r\n#### `mapFromArray` Operator\r\n\r\n```ts\r\nfunction mapFromArray<T, U = T>(fn: (item: T) => U): OperatorFunction<T[], U[]> { ... }\r\n```\r\n\r\nThis custom operator maps each item of an array emitted by the observable to a new value using the provided transformation function. It returns a new array with the transformed items.\r\n\r\nParameters:\r\n\r\n1. `fn`: A function that takes an item of type T and returns a transformed item of type U.\r\n\r\nReturns:\r\n\r\nAn observable emitting an array of transformed items.\r\n\r\nExample:\r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(mapFromArray((item) => item * 2)).subscribe((result) => {\r\n  console.log(result); // [2, 4, 6, 8, 10] (all items are doubled)\r\n});\r\n\r\nconst stringObs = new Observable<string[]>((observer) => {\r\n  observer.next(['apple', 'banana', 'cherry']);\r\n  observer.complete();\r\n});\r\n\r\nstringObs.pipe(mapFromArray((item) => item.toUpperCase())).subscribe((result) => {\r\n  console.log(result); // ['APPLE', 'BANANA', 'CHERRY'] (all items are uppercased)\r\n});\r\n```\r\n\r\n#### `nthFromArray` Operator\r\n\r\n```ts\r\nfunction nthFromArray<T>(index: number): OperatorFunction<T[], T | undefined> { ... }\r\n```\r\n\r\nThis custom operator extracts the item at the specified index from an array emitted by the observable. If the index is out of bounds or the array is empty, it returns `undefined`.\r\n\r\nParameters:\r\n\r\n1. `index`: The index of the item to extract from the array. This is a number.\r\n\r\nReturns:\r\n\r\nAn observable emitting the item at the specified index, or `undefined` if the index is out of bounds or the array is empty.\r\n\r\nExample:\r\n\r\n```tsx\r\nconst obs = new Observable<number[]>((observer) => {\r\n  observer.next([1, 2, 3, 4, 5]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(nthFromArray(2)).subscribe((result) => {\r\n  console.log(result); // 3 (item at index 2 in the array)\r\n});\r\n\r\nobs.pipe(nthFromArray(5)).subscribe((result) => {\r\n  console.log(result); // undefined (index out of bounds)\r\n});\r\n\r\nconst emptyObs = new Observable<number[]>((observer) => {\r\n  observer.next([]);\r\n  observer.complete();\r\n});\r\n\r\nemptyObs.pipe(nthFromArray(0)).subscribe((result) => {\r\n  console.log(result); // undefined (no items in the array)\r\n});\r\n```\r\n\r\n#### `pluckFromArray` Operator\r\n\r\n```ts\r\nfunction pluckFromArray<T, U extends keyof T>(key: U): OperatorFunction<T[], T[U][]> { ... }\r\n```\r\n\r\nThis custom operator extracts the value of a specific key from each item in an array emitted by the observable. It returns a new array containing only the values corresponding to the given key from each object.\r\n\r\nParameters:\r\n\r\n1. `key`: The key whose value should be extracted from each item in the array. This is a property name of type U (which is a key of T).\r\n\r\nReturns:\r\n\r\nAn observable emitting an array of values corresponding to the specified key for each item in the original array.\r\n\r\nExample:\r\n\r\n```tsx\r\ninterface User {\r\n  id: number;\r\n  name: string;\r\n}\r\n\r\nconst obs = new Observable<User[]>((observer) => {\r\n  observer.next([\r\n    { id: 1, name: 'Alice' },\r\n    { id: 2, name: 'Bob' },\r\n    { id: 3, name: 'Charlie' },\r\n  ]);\r\n  observer.complete();\r\n});\r\n\r\nobs.pipe(pluckFromArray('name')).subscribe((result) => {\r\n  console.log(result); // ['Alice', 'Bob', 'Charlie'] (only the 'name' values)\r\n});\r\n\r\nobs.pipe(pluckFromArray('id')).subscribe((result) => {\r\n  console.log(result); // [1, 2, 3] (only the 'id' values)\r\n});\r\n```\r\n\r\n### Custom Pipes\r\n\r\nAll pipes are standalone pipes. (Importing the module or the specific standalone pipe step is required)\r\n\r\n#### ArrayFill\r\n\r\n```ts\r\ntransform<T>(list: unknown[], value: T): T[] { ... }\r\n```\r\n\r\nUse on any array and fill it with the provided value of type T. The pipe replaces all elements in the array with the given value.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [1, 2, 3, 4] | arrayFill:'hello' }} // ['hello', 'hello', 'hello', 'hello']\r\n{{ [true, false, true] | arrayFill:false }} // [false, false, false]\r\n{{ [1, 2, 3, 4] | arrayFill:100 }} // [100, 100, 100, 100]\r\n```\r\n\r\n#### ArrayFilter\r\n\r\n```ts\r\n<T extends string | number | boolean> transform(\r\n  value: T[], \r\n  filterBy?: string | number | boolean\r\n): (string | number | boolean)[] { ... }\r\n```\r\n\r\nUse on array of string, number or boolean items, and needs an optional argument of type string, number or boolean.\r\nIf no argument provided, it will return the same array.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [0, 'test', false, 100, 'texts'] | arrayfilter }} // [0, 'test', false, 100, 'texts']\r\n{{ [0, 'test', false, 100, 'texts'] | arrayfilter:'te' }} // ['test', 'texts']\r\n```\r\n\r\n#### ArrayFrom\r\n\r\n```ts\r\ntransform(length: number, fill?: number): number[] { ... }\r\n```\r\n\r\nUse on a number, and needs an optional argument of type number.\r\nIf no argument provided, it will return an array with index as value.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ 5 | arrayFrom }} // [0, 1, 2, 3, 4]\r\n{{ 5 | arrayFrom:10 }} // [10, 10, 10, 10, 10]\r\n```\r\n\r\n#### ArrayIncludes\r\n\r\n```ts\r\ntransform<T>(list: T[], value: T): boolean { ... }\r\n```\r\n\r\nChecks if the provided value of type T exists in the given array. Returns true if the array includes the value, otherwise false.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [1, 2, 3, 4] | arrayIncludes:3 }} // true\r\n{{ [1, 2, 3, 4] | arrayIncludes:5 }} // false\r\n{{ ['apple', 'banana', 'cherry'] | arrayIncludes:'banana' }} // true\r\n{{ ['apple', 'banana', 'cherry'] | arrayIncludes:'orange' }} // false\r\n```\r\n\r\n#### ArrayPluck\r\n\r\n```ts\r\ntransform(\r\n    value: Array<Record<string | number, any>>,\r\n    key: (string | number)\r\n  ): Array<any> { ... }\r\n```\r\n\r\nUse on array of object items, and needs an argument of type number or string.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [{ a: 1, b: 5 }, { a: 2, c: 4 }, { a: true, b: 'test', c: {} }] | arrayPluck:'b' }} // [5, 'test']\r\n{{ [{ a: 1, b: 5 }, { a: 2, c: 4 }, { a: true, b: 'test', c: {} }] | arrayPluck:'a' }} // [1, 2, true]\r\n```\r\n\r\n#### ArrayPop \r\n\r\n```ts\r\ntransform<T>(list: T[]): T | undefined { ... }\r\n```\r\n\r\nRemoves and returns the last element of the provided array. If the array is empty, it returns undefined.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [1, 2, 3, 4] | arrayPop }} // 4\r\n{{ ['apple', 'banana', 'cherry'] | arrayPop }} // 'cherry'\r\n{{ [] | arrayPop }} // undefined\r\n```\r\n\r\n**Note**: This pipe mutates the original array by removing its last element. Use with caution in cases where immutability is critical.\r\n\r\n#### ArrayShuffle \r\n\r\n```ts\r\ntransform<T>(array: T[]): T[] { ... }\r\n```\r\n\r\nRandomly shuffles the elements of the given array and returns the modified array. The original array is mutated during the shuffle process.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ [1, 2, 3, 4] | arrayShuffle }} // [3, 1, 4, 2] (order will vary)\r\n{{ ['apple', 'banana', 'cherry'] | arrayShuffle }} // ['banana', 'cherry', 'apple'] (order will vary)\r\n```\r\n\r\n**Note**: Since the original array is shuffled in place, use this pipe cautiously if immutability is required. The shuffled order is random and will vary each time the pipe is executed.\r\n\r\n#### ArraySortAsc \r\n\r\n```ts\r\ntransform<T>(list: T[]): T[];\r\ntransform<T>(list: T[], key: keyof T): T[];\r\n```\r\n\r\nSorts an array in ascending order. If a key is provided, it sorts the array based on the values of that key in each object. The sorting is case-sensitive for strings and follows standard numeric ordering for numbers.\r\n\r\nExample: \r\n\r\nSorting an array of numbers:\r\n\r\n```tsx\r\n{{ [3, 1, 4, 2] | arraySortAsc }} // [1, 2, 3, 4]\r\n```\r\n\r\nSorting an array of strings:\r\n\r\n```tsx\r\n{{ ['banana', 'apple', 'cherry'] | arraySortAsc }} // ['apple', 'banana', 'cherry']\r\n```\r\n\r\nSorting an array of objects by a key:\r\n\r\n```tsx\r\n{{ [{ name: 'Zara' }, { name: 'Anna' }, { name: 'Mike' }] | arraySortAsc:'name' }} // [{ name: 'Anna' }, { name: 'Mike' }, { name: 'Zara' }]\r\n```\r\n\r\n**Note**: This pipe depends on the ArraySort pipe to perform the actual sorting. Ensure that the ArraySort pipe is properly implemented and available for use.\r\n\r\n#### ArraySortDesc \r\n\r\n```ts\r\ntransform<T>(list: T[]): T[];\r\ntransform<T>(list: T[], key: keyof T): T[];\r\n```\r\n\r\nSorts an array in descending order. If a key is provided, it sorts the array based on the values of that key in each object. The sorting is case-sensitive for strings and follows standard numeric ordering for numbers.\r\n\r\nExample: \r\n\r\nSorting an array of numbers:\r\n\r\n```tsx\r\n{{ [3, 1, 4, 2] | arraySortDesc }} // [4, 3, 2, 1]\r\n```\r\n\r\nSorting an array of strings:\r\n\r\n```tsx\r\n{{ ['banana', 'apple', 'cherry'] | arraySortDesc }} // ['cherry', 'banana', 'apple']\r\n```\r\n\r\nSorting an array of objects by a key:\r\n\r\n```tsx\r\n{{ [{ name: 'Zara' }, { name: 'Anna' }, { name: 'Mike' }] | arraySortDesc:'name' }} // [{ name: 'Zara' }, { name: 'Mike' }, { name: 'Anna' }]\r\n```\r\n\r\n**Note**: This pipe relies on the ArraySort pipe to handle the sorting logic. Ensure that the ArraySort pipe is implemented and available for use.\r\n\r\n#### ArraySort \r\n\r\n```ts\r\ntransform<T>(list: T[]): T[];\r\ntransform<T>(list: T[], direction: 'asc' | 'desc'): T[];\r\ntransform<T>(list: T[], direction: 'asc' | 'desc', key?: keyof T): T[];\r\n```\r\n\r\nSorts an array in either ascending or descending order. If a key is provided, it sorts the array based on the values of that key in each object. The sorting direction defaults to ascending ('asc') if not specified.\r\n\r\nExample: \r\n\r\nSorting an array (ascending):\r\n\r\n```tsx\r\n{{ [3, 1, 4, 2] | arraySort  }} // [4, 3, 2, 1]\r\n```\r\n\r\n```tsx\r\n{{ ['banana', 'apple', 'cherry'] | arraySort }} // ['apple', 'banana', 'cherry']\r\n```\r\n\r\n```tsx\r\n{{ [{ name: 'Zara' }, { name: 'Anna' }, { name: 'Mike' }] | arraySort:'asc':'name' }} // [{ name: 'Anna' }, { name: 'Mike' }, { name: 'Zara' }]\r\n```\r\n\r\nSorting an array (descending):\r\n\r\n```tsx\r\n{{ [3, 1, 4, 2] | arraySort:'desc' }} // [4, 3, 2, 1]\r\n```\r\n\r\n```tsx\r\n{{ ['banana', 'apple', 'cherry'] | arraySort:'desc' }} // ['cherry', 'banana', 'apple']\r\n```\r\n\r\n```tsx\r\n{{ [{ name: 'Zara' }, { name: 'Anna' }, { name: 'Mike' }] | arraySort:'desc':'name' }} // [{ name: 'Zara' }, { name: 'Mike' }, { name: 'Anna' }]\r\n```\r\n\r\n**Note**: This is a versatile pipe that serves as the base for specialized sorting pipes, such as `ArraySortAsc` and `ArraySortDesc`. It mutates the original array during sorting.\r\n\r\n#### CapitalCase\r\n\r\n```ts\r\ntransform(value: string): string { ... }\r\n```\r\n\r\nUse on string.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ 'Lorum ipsum' | capitalCase }} // 'Lorum Ipson'\r\n```\r\n\r\n#### CoerciveBoolean\r\n\r\n```ts\r\ntransform(value?: any): boolean { ... }\r\n```\r\n\r\nUse on any type.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ undefined | coerciveBoolean }} // true\r\n{{ null | coerciveBoolean }} // false\r\n{{ 'true' | coerciveBoolean }} // true\r\n```\r\n\r\n#### ControlErrors\r\n\r\n```ts\r\ntransform(controls: AbstractControl): (string | any)[] { ... }\r\n```\r\n\r\nUse on any ``AbstractControl`` type.\r\n\r\nExample: \r\n\r\n```tsx\r\nformControl = new FormControl(null, {\r\n  validators: [Validators.required, () => ({ customValidator: 'Custom Error Message in any key name!' })]\r\n});\r\n...\r\n{{ formControl | controlErrors }} // ['This field is required', 'Custom Error Message in any key name!']\r\n```\r\n\r\n#### ControlValue\r\n\r\n```ts\r\ntransform(value: AbstractControl): any { ... }\r\n```\r\n\r\nUse on any ``AbstractControl`` type.\r\n\r\nExample: \r\n\r\n```tsx\r\nformGroup = new FormGroup({\r\n  test1: new FormControl('test'), \r\n  test2: new FormControl(null), \r\n});\r\n...\r\n{{ formGroup | controlValue }} // { test1: 'test', test2: null }\r\n```\r\n\r\n#### Initial\r\n\r\n```ts\r\ntransform(value: string, max: number = Infinity): string { ... }\r\n```\r\n\r\nUse on a string, and needs an optional argument of type number.\r\nIf no argument provided, it will return string with initial of all words.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ 'abc Def Ghi Jkl' | initial }} // 'aDGJ'\r\n{{ 'abc Def Ghi Jkl' | initial:2 }} // 'aD'\r\n```\r\n\r\n#### IsArray\r\n\r\n```ts\r\ntransform(value: unknown): boolean { ... }\r\n```\r\n\r\nChecks if the provided value is an array. Returns true if the value is an array, otherwise false.\r\n\r\nExample:\r\n\r\nChecking an array:\r\n\r\n```tsx\r\n{{ [1, 2, 3] | isArray }} // true\r\n```\r\n\r\nChecking a string:\r\n\r\n```tsx\r\n{{ 'hello' | isArray }} // false\r\n```\r\n\r\nChecking an object:\r\n\r\n```tsx\r\n{{ { name: 'John' } | isArray }} // false\r\n```\r\n\r\nChecking a number:\r\n\r\n```tsx\r\n{{ 42 | isArray }} // false\r\n```\r\n\r\n#### IsDate\r\n\r\n```ts\r\ntransform(value: any): boolean { ... }\r\n```\r\n\r\nUse on a string, and needs an optional argument of type number.\r\nIf no argument provided, it will return string with initial of all words.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ 1676808350561 | isDate }} // true\r\n{{ 'Sun Feb 19 2023 13:05:50 GMT+0100 (UTC+01:00)' | isDate }} // true\r\n{{ 'WRONG' | isDate }} // false\r\n```\r\n\r\n#### IsDateAfter\r\n\r\n```ts\r\ntransform<T extends Date | number | string>(value: T, dateAfter: T): boolean { ... }\r\n```\r\n\r\nCompares two dates (or values that can be converted into dates) and checks if the first date is after the second one. This pipe returns true if the first date is after the second date, and false otherwise.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ '2024-12-22' | isDateAfter:'2024-12-21' }} // true\r\n{{ new Date('2024-12-22') | isDateAfter:1639593600000 }} // true (timestamp of '2021-12-17')\r\n{{ 'invalid-date' | isDateAfter:'2024-12-21' }} // false\r\n```\r\n\r\n#### IsDateBefore\r\n\r\n```ts\r\ntransform<T extends Date | number | string>(value: T, dateBefore: T): boolean { ... }\r\n```\r\n\r\nCompares two dates (or values that can be converted into dates) and checks if the first date is before the second one. This pipe returns true if the first date is before the second date, and false otherwise.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ '2024-12-20' | isDateBefore:'2024-12-21' }} // true\r\n{{ new Date('2024-12-20') | isDateBefore:1639593600000 }} // false (timestamp of '2021-12-17')\r\n{{ 'invalid-date' | isDateBefore:'2024-12-21' }} // false\r\n```\r\n\r\n#### IsDateBetween\r\n\r\n```ts\r\ntransform<T extends Date | number | string>(value: T, minDate: T, maxDate: T): boolean;\r\ntransform<T extends Date | number | string>(value: T, [minDate, maxDate]: [T, T]): boolean;\r\ntransform<T extends Date | number | string>(value: T, interval: T | [T, T], max?: T): boolean { ... }\r\n```\r\n\r\nChecks if a given date (or value that can be converted to a date) is between two other dates. This pipe returns true if the given date is within the specified range and false otherwise.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ '2024-12-20' | isDateBetween:'2024-12-19':'2024-12-21' }} // true\r\n{{ new Date('2024-12-20') | isDateBetween:['2024-12-19', '2024-12-21'] }} // true\r\n{{ '2024-12-22' | isDateBetween:'2024-12-19':'2024-12-21' }} // false\r\n{{ 'invalid-date' | isDateBetween:'2024-12-19':'2024-12-21' }} // false\r\n```\r\n\r\n#### IsDateFuture\r\n\r\n```ts\r\ntransform<T extends Date | number | string>(value: T): boolean { ... }\r\n```\r\n\r\nChecks if a given date (or value that can be converted to a date) is in the future compared to the current date and time. This pipe returns true if the date is in the future and false otherwise.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ '2025-01-01' | isDateFuture }} // true\r\n{{ new Date('2024-12-01') | isDateFuture }} // false\r\n{{ 'invalid-date' | isDateFuture }} // false\r\n```\r\n\r\n#### IsDatePast\r\n\r\n```ts\r\ntransform<T extends Date | number | string>(value: T): boolean { ... }\r\n```\r\n\r\nChecks if a given date (or value that can be converted to a date) is in the past compared to the current date and time. This pipe returns true if the date is in the past and false otherwise.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ '2020-01-01' | isDatePast }} // true\r\n{{ new Date('2024-12-01') | isDatePast }} // false\r\n{{ 'invalid-date' | isDatePast }} // false\r\n```\r\n\r\n#### Log\r\n\r\n```ts\r\ntransform<T>(value: T): T;\r\ntransform<T>(value: T, type: 'log' | 'info' | 'warn' | 'error'): T;\r\ntransform<T>(value: T, type: 'log' | 'info' | 'warn' | 'error' = 'log'): T { ... }\r\n```\r\n\r\nLogs a value to the browser console with the specified log type. If no log type is provided, it defaults to log. The value is returned after being logged.\r\n\r\nExample: \r\n\r\n```tsx\r\n{{ 'This is a log message' | log }} // Logs 'This is a log message' to the console\r\n{{ 'This is an info message' | log:'info' }} // Logs 'This is an info message' to the console as info\r\n{{ 'This is a warning' | log:'warn' }} // Logs 'This is a warning' to the console as a warning\r\n{{ 'This is an error' | log:'error' }} // Logs 'This is an error' to the console as an error\r\n```\r\n\r\n#### ObjectEntries\r\n\r\n```ts\r\ntransform(value: Record<string | number, any>): [string | number, any][] { ... }\r\n```\r\n\r\nUse on a object.\r\n\r\nExample: \r\n\r\nSame as ``Object.entries``.\r\n\r\n#### ObjectKeys\r\n\r\n```ts\r\ntransform(value: Record<string | number, any>): Array<string> { ... }\r\n```\r\n\r\nUse on a object.\r\n\r\nExample: \r\n\r\nSame as ``Object.keys``.\r\n\r\n#### ObjectValues\r\n\r\n```ts\r\ntransform(value: Record<string | number, any>): any[] { ... }\r\n```\r\n\r\nUse on a string, and needs an optional argument of type number.\r\n\r\nExample: \r\n\r\nSame as ``Object.values``.\r\n\r\n## Issue\r\n\r\nLOOKING FOR MAINTAINER OR IF THERE IS AN ISSUE OR ANY IDEA TO ADD. PLEASE CREATE ISSUE IN GITHUB REPOSITORY.\r\n","readmeFilename":"README.md"}