@triangular/password-checker 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -19,6 +19,7 @@ Supported Angular Versions
19
19
  | 13.x | 8.0.1 |
20
20
  | 14.x | 9.0.0 |
21
21
  | 15.x | 10.0.0 |
22
+ | 16.x | 11.0.0 |
22
23
 
23
24
  ### Step 1: Install
24
25
 
@@ -32,6 +33,8 @@ npm i @triangular/password-checker crypto-js
32
33
 
33
34
  Then, add the __PasswordCheckerModule__ to the imports of your app.
34
35
 
36
+ _If you're using standalone components, you can skip this step._
37
+
35
38
  ```typescript
36
39
  import { NgModule } from '@angular/core';
37
40
  import { PasswordCheckerModule } from '@triangular/password-checker';
@@ -42,16 +42,16 @@ export class PasswordCheckerLibDirective {
42
42
  ? { pwnedPasswordOccurrence: password.count }
43
43
  : null));
44
44
  }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerLibDirective, deps: [{ token: i1.HttpClient }, { token: PasswordCheckerConfigValue, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
46
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.6", type: PasswordCheckerLibDirective, isStandalone: true, selector: "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", inputs: { pwnedPasswordApi: "pwnedPasswordApi", pwnedPasswordMinimumOccurrenceForError: "pwnedPasswordMinimumOccurrenceForError", pwnedPasswordApiCallDebounceTime: "pwnedPasswordApiCallDebounceTime" }, providers: [
47
+ {
48
+ provide: NG_ASYNC_VALIDATORS,
49
+ useExisting: PasswordCheckerLibDirective,
50
+ multi: true,
51
+ },
52
+ ], ngImport: i0 }); }
45
53
  }
46
- PasswordCheckerLibDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, deps: [{ token: i1.HttpClient }, { token: PasswordCheckerConfigValue, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
47
- PasswordCheckerLibDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.1", type: PasswordCheckerLibDirective, selector: "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", inputs: { pwnedPasswordApi: "pwnedPasswordApi", pwnedPasswordMinimumOccurrenceForError: "pwnedPasswordMinimumOccurrenceForError", pwnedPasswordApiCallDebounceTime: "pwnedPasswordApiCallDebounceTime" }, providers: [
48
- {
49
- provide: NG_ASYNC_VALIDATORS,
50
- useExisting: PasswordCheckerLibDirective,
51
- multi: true,
52
- },
53
- ], ngImport: i0 });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerLibDirective, decorators: [{
55
55
  type: Directive,
56
56
  args: [{
57
57
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -62,7 +62,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImpor
62
62
  useExisting: PasswordCheckerLibDirective,
63
63
  multi: true,
64
64
  },
65
- ]
65
+ ],
66
+ standalone: true
66
67
  }]
67
68
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
68
69
  type: Optional
@@ -76,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImpor
76
77
  }], pwnedPasswordApiCallDebounceTime: [{
77
78
  type: Input
78
79
  }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtY2hlY2tlci1saWIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFzc3dvcmQtY2hlY2tlci1saWIvc3JjL2xpYi9wYXNzd29yZC1jaGVja2VyLWxpYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBbUMsbUJBQW1CLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQyxPQUFPLEVBQWtDLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQWF2RyxNQUFNLE9BQU8sMkJBQTJCO0lBT3RDLFlBQ1UsSUFBZ0IsRUFDd0IsTUFBc0M7UUFEOUUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUl4QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gscURBQXFEO1lBQ3JELDZCQUE2QjtZQUM3QixNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsZ0JBQWdCO1lBQ25CLE1BQU0sQ0FBQyxnQkFBZ0I7bUJBQ3BCLHVDQUF1QyxDQUFDO1FBQzdDLElBQUksQ0FBQyxzQ0FBc0M7WUFDekMsTUFBTSxDQUFDLHNDQUFzQzttQkFDMUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLGdDQUFnQztZQUNuQyxNQUFNLENBQUMsZ0NBQWdDO21CQUNwQyxHQUFHLENBQUM7SUFDWCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVqRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUNQLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDckIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUNyRSxDQUFDLElBQUksQ0FDTixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzVDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzlCLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM5RSxDQUNGLEVBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHNDQUFzQztZQUN2RixDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDVixDQUFDO0lBQ0osQ0FBQzs7d0hBOURVLDJCQUEyQiw0Q0FTaEIsMEJBQTBCOzRHQVRyQywyQkFBMkIsdVZBUjNCO1FBQ0w7WUFDRSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSwyQkFBMkI7WUFDeEMsS0FBSyxFQUFFLElBQUk7U0FDWjtLQUNGOzJGQUVNLDJCQUEyQjtrQkFYdkMsU0FBUzttQkFBQztvQkFDVCwrREFBK0Q7b0JBQy9ELFFBQVEsRUFBRSxvSEFBb0g7b0JBQzlILFNBQVMsRUFBRTt3QkFDTDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7aUJBQ047OzBCQVVJLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsMEJBQTBCOzRDQU52QyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csc0NBQXNDO3NCQUE5QyxLQUFLO2dCQUNHLGdDQUFnQztzQkFBeEMsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3IsIE5HX0FTWU5DX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHNoYTEgZnJvbSAnY3J5cHRvLWpzL3NoYTEnO1xuaW1wb3J0IHsgUGFydGlhbCwgUGFzc3dvcmRDaGVja2VyQ29uZmlnLCBQYXNzd29yZENoZWNrZXJDb25maWdWYWx1ZSB9IGZyb20gJy4vcGFzc3dvcmQtY2hlY2tlci5jb25maWcnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3B3bmVkUGFzc3dvcmRWYWxpZGF0b3JdW2Zvcm1Db250cm9sTmFtZV0sIFtwd25lZFBhc3N3b3JkVmFsaWRhdG9yXVtuZ01vZGVsXSxbcHduZWRQYXNzd29yZFZhbGlkYXRvcl1bZm9ybUNvbnRyb2xdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBOR19BU1lOQ19WQUxJREFUT1JTLFxuICAgICAgICAgIHVzZUV4aXN0aW5nOiBQYXNzd29yZENoZWNrZXJMaWJEaXJlY3RpdmUsXG4gICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkQ2hlY2tlckxpYkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFzeW5jVmFsaWRhdG9yIHtcbiAgcHJpdmF0ZSBwd25lZFBhc3N3b3JkTWluaW11bU9jY3VycmVuY2VGb3JFcnJvclZhbHVlOiBudW1iZXI7XG5cbiAgQElucHV0KCkgcHduZWRQYXNzd29yZEFwaTogc3RyaW5nO1xuICBASW5wdXQoKSBwd25lZFBhc3N3b3JkTWluaW11bU9jY3VycmVuY2VGb3JFcnJvcjogbnVtYmVyO1xuICBASW5wdXQoKSBwd25lZFBhc3N3b3JkQXBpQ2FsbERlYm91bmNlVGltZTogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFBhc3N3b3JkQ2hlY2tlckNvbmZpZ1ZhbHVlKSBjb25maWc6IFBhcnRpYWw8UGFzc3dvcmRDaGVja2VyQ29uZmlnPixcbiAgICApIHtcblxuICAgIGlmICghY29uZmlnKSB7XG4gICAgICAvLyBkZWZhdWx0IGluaXRpYWxpemF0aW9uIGluIGNvbnN0cnVjdG9yIGRpZG4ndCB3b3JrLlxuICAgICAgLy8gY29uZmxpY3Qgd2l0aCBAT3B0aW9uYWwoKT9cbiAgICAgIGNvbmZpZyA9IHt9O1xuICAgIH1cblxuICAgIHRoaXMucHduZWRQYXNzd29yZEFwaSA9XG4gICAgICBjb25maWcucHduZWRQYXNzd29yZEFwaVxuICAgICAgfHwgJ2h0dHBzOi8vYXBpLnB3bmVkcGFzc3dvcmRzLmNvbS9yYW5nZS8nO1xuICAgIHRoaXMucHduZWRQYXNzd29yZE1pbmltdW1PY2N1cnJlbmNlRm9yRXJyb3IgPVxuICAgICAgY29uZmlnLnB3bmVkUGFzc3dvcmRNaW5pbXVtT2NjdXJyZW5jZUZvckVycm9yXG4gICAgICB8fCAxO1xuICAgIHRoaXMucHduZWRQYXNzd29yZEFwaUNhbGxEZWJvdW5jZVRpbWUgPVxuICAgICAgY29uZmlnLnB3bmVkUGFzc3dvcmRBcGlDYWxsRGVib3VuY2VUaW1lXG4gICAgICB8fCA0MDA7XG4gIH1cblxuICB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnN8bnVsbD4ge1xuICAgIGNvbnN0IHB3ID0gJycuY29uY2F0KGNvbnRyb2wudmFsdWUpO1xuXG4gICAgcmV0dXJuIHRpbWVyKHRoaXMucHduZWRQYXNzd29yZEFwaUNhbGxEZWJvdW5jZVRpbWUpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwd1NoYTEgPSBzaGExKHB3KS50b1N0cmluZygpLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmaXJzdFBhcnQ6IHB3U2hhMS5zdWJzdHJpbmcoMCwgNSksXG4gICAgICAgICAgbGFzdFBhcnQ6IHB3U2hhMS5zdWJzdHJpbmcoNSksXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcChcbiAgICAgICAgKGhhc2gpID0+IHRoaXMuaHR0cC5nZXQoXG4gICAgICAgICAgYCR7dGhpcy5wd25lZFBhc3N3b3JkQXBpfSR7aGFzaC5maXJzdFBhcnR9YCwgIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfVxuICAgICAgICAgICkucGlwZShcbiAgICAgICAgICBtYXAocGFzc3dvcmRzID0+IHBhc3N3b3Jkcy5zcGxpdCgvW1xcclxcbl0rLykpLFxuICAgICAgICAgIG1hcChwYXNzd29yZHMgPT4gcGFzc3dvcmRzLm1hcCgocGFzc3dvcmQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3BsaXQgPSAgcGFzc3dvcmQuc3BsaXQoJzonKTtcblxuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGhhc2g6IHNwbGl0WzBdLFxuICAgICAgICAgICAgICAgIGNvdW50OiBwYXJzZUludChzcGxpdFsxXSwgMTApLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICkpLFxuICAgICAgICAgIG1hcChwYXNzd29yZHMgPT4gcGFzc3dvcmRzLmZpbmQocGFzc3dvcmQgPT4gcGFzc3dvcmQuaGFzaCA9PT0gaGFzaC5sYXN0UGFydCkpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICAgIG1hcChwYXNzd29yZCA9PiBwYXNzd29yZCAmJiBwYXNzd29yZC5jb3VudCA+PSB0aGlzLnB3bmVkUGFzc3dvcmRNaW5pbXVtT2NjdXJyZW5jZUZvckVycm9yXG4gICAgICAgID8geyBwd25lZFBhc3N3b3JkT2NjdXJyZW5jZTogcGFzc3dvcmQuY291bnQgfVxuICAgICAgICA6IG51bGwpLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtY2hlY2tlci1saWIuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFzc3dvcmQtY2hlY2tlci1saWIvc3JjL2xpYi9wYXNzd29yZC1jaGVja2VyLWxpYi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6QyxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBbUMsbUJBQW1CLEVBQW9CLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEcsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRSxPQUFPLElBQUksTUFBTSxnQkFBZ0IsQ0FBQztBQUNsQyxPQUFPLEVBQWtDLDBCQUEwQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7OztBQWN2RyxNQUFNLE9BQU8sMkJBQTJCO0lBS3RDLFlBQ1UsSUFBZ0IsRUFDd0IsTUFBc0M7UUFEOUUsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUl4QixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gscURBQXFEO1lBQ3JELDZCQUE2QjtZQUM3QixNQUFNLEdBQUcsRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLENBQUMsZ0JBQWdCO1lBQ25CLE1BQU0sQ0FBQyxnQkFBZ0I7bUJBQ3BCLHVDQUF1QyxDQUFDO1FBQzdDLElBQUksQ0FBQyxzQ0FBc0M7WUFDekMsTUFBTSxDQUFDLHNDQUFzQzttQkFDMUMsQ0FBQyxDQUFDO1FBQ1AsSUFBSSxDQUFDLGdDQUFnQztZQUNuQyxNQUFNLENBQUMsZ0NBQWdDO21CQUNwQyxHQUFHLENBQUM7SUFDWCxDQUFDO0lBRUQsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXBDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDLElBQUksQ0FDdEQsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNQLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUVqRCxPQUFPO2dCQUNMLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUM5QixDQUFDO1FBQ0osQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUNQLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDckIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFHLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxDQUNyRSxDQUFDLElBQUksQ0FDTixHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQzVDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRW5DLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2QsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzlCLENBQUM7UUFDSixDQUFDLENBQ0YsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUM5RSxDQUNGLEVBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLHNDQUFzQztZQUN2RixDQUFDLENBQUMsRUFBRSx1QkFBdUIsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFO1lBQzdDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDVixDQUFDO0lBQ0osQ0FBQzs4R0E1RFUsMkJBQTJCLDRDQU9oQiwwQkFBMEI7a0dBUHJDLDJCQUEyQiwyV0FUM0I7WUFDTDtnQkFDRSxPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsMkJBQTJCO2dCQUN4QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzJGQUdNLDJCQUEyQjtrQkFadkMsU0FBUzttQkFBQztvQkFDVCwrREFBK0Q7b0JBQy9ELFFBQVEsRUFBRSxvSEFBb0g7b0JBQzlILFNBQVMsRUFBRTt3QkFDTDs0QkFDRSxPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLDZCQUE2Qjs0QkFDeEMsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7b0JBQ0wsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFRSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLDBCQUEwQjs0Q0FOdkMsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHNDQUFzQztzQkFBOUMsS0FBSztnQkFDRyxnQ0FBZ0M7c0JBQXhDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yLCBOR19BU1lOQ19WQUxJREFUT1JTLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwQ2xpZW50TW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgc2hhMSBmcm9tICdjcnlwdG8tanMvc2hhMSc7XG5pbXBvcnQgeyBQYXJ0aWFsLCBQYXNzd29yZENoZWNrZXJDb25maWcsIFBhc3N3b3JkQ2hlY2tlckNvbmZpZ1ZhbHVlIH0gZnJvbSAnLi9wYXNzd29yZC1jaGVja2VyLmNvbmZpZyc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbcHduZWRQYXNzd29yZFZhbGlkYXRvcl1bZm9ybUNvbnRyb2xOYW1lXSwgW3B3bmVkUGFzc3dvcmRWYWxpZGF0b3JdW25nTW9kZWxdLFtwd25lZFBhc3N3b3JkVmFsaWRhdG9yXVtmb3JtQ29udHJvbF0nLFxuICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5HX0FTWU5DX1ZBTElEQVRPUlMsXG4gICAgICAgICAgdXNlRXhpc3Rpbmc6IFBhc3N3b3JkQ2hlY2tlckxpYkRpcmVjdGl2ZSxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRDaGVja2VyTGliRGlyZWN0aXZlIGltcGxlbWVudHMgQXN5bmNWYWxpZGF0b3Ige1xuICBASW5wdXQoKSBwd25lZFBhc3N3b3JkQXBpOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHB3bmVkUGFzc3dvcmRNaW5pbXVtT2NjdXJyZW5jZUZvckVycm9yOiBudW1iZXI7XG4gIEBJbnB1dCgpIHB3bmVkUGFzc3dvcmRBcGlDYWxsRGVib3VuY2VUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoUGFzc3dvcmRDaGVja2VyQ29uZmlnVmFsdWUpIGNvbmZpZzogUGFydGlhbDxQYXNzd29yZENoZWNrZXJDb25maWc+LFxuICAgICkge1xuXG4gICAgaWYgKCFjb25maWcpIHtcbiAgICAgIC8vIGRlZmF1bHQgaW5pdGlhbGl6YXRpb24gaW4gY29uc3RydWN0b3IgZGlkbid0IHdvcmsuXG4gICAgICAvLyBjb25mbGljdCB3aXRoIEBPcHRpb25hbCgpP1xuICAgICAgY29uZmlnID0ge307XG4gICAgfVxuXG4gICAgdGhpcy5wd25lZFBhc3N3b3JkQXBpID1cbiAgICAgIGNvbmZpZy5wd25lZFBhc3N3b3JkQXBpXG4gICAgICB8fCAnaHR0cHM6Ly9hcGkucHduZWRwYXNzd29yZHMuY29tL3JhbmdlLyc7XG4gICAgdGhpcy5wd25lZFBhc3N3b3JkTWluaW11bU9jY3VycmVuY2VGb3JFcnJvciA9XG4gICAgICBjb25maWcucHduZWRQYXNzd29yZE1pbmltdW1PY2N1cnJlbmNlRm9yRXJyb3JcbiAgICAgIHx8IDE7XG4gICAgdGhpcy5wd25lZFBhc3N3b3JkQXBpQ2FsbERlYm91bmNlVGltZSA9XG4gICAgICBjb25maWcucHduZWRQYXNzd29yZEFwaUNhbGxEZWJvdW5jZVRpbWVcbiAgICAgIHx8IDQwMDtcbiAgfVxuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9yc3xudWxsPiB7XG4gICAgY29uc3QgcHcgPSAnJy5jb25jYXQoY29udHJvbC52YWx1ZSk7XG5cbiAgICByZXR1cm4gdGltZXIodGhpcy5wd25lZFBhc3N3b3JkQXBpQ2FsbERlYm91bmNlVGltZSkucGlwZShcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHB3U2hhMSA9IHNoYTEocHcpLnRvU3RyaW5nKCkudG9VcHBlckNhc2UoKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZpcnN0UGFydDogcHdTaGExLnN1YnN0cmluZygwLCA1KSxcbiAgICAgICAgICBsYXN0UGFydDogcHdTaGExLnN1YnN0cmluZyg1KSxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKFxuICAgICAgICAoaGFzaCkgPT4gdGhpcy5odHRwLmdldChcbiAgICAgICAgICBgJHt0aGlzLnB3bmVkUGFzc3dvcmRBcGl9JHtoYXNoLmZpcnN0UGFydH1gLCAgeyByZXNwb25zZVR5cGU6ICd0ZXh0JyB9XG4gICAgICAgICAgKS5waXBlKFxuICAgICAgICAgIG1hcChwYXNzd29yZHMgPT4gcGFzc3dvcmRzLnNwbGl0KC9bXFxyXFxuXSsvKSksXG4gICAgICAgICAgbWFwKHBhc3N3b3JkcyA9PiBwYXNzd29yZHMubWFwKChwYXNzd29yZCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzcGxpdCA9ICBwYXNzd29yZC5zcGxpdCgnOicpO1xuXG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaGFzaDogc3BsaXRbMF0sXG4gICAgICAgICAgICAgICAgY291bnQ6IHBhcnNlSW50KHNwbGl0WzFdLCAxMCksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgKSksXG4gICAgICAgICAgbWFwKHBhc3N3b3JkcyA9PiBwYXNzd29yZHMuZmluZChwYXNzd29yZCA9PiBwYXNzd29yZC5oYXNoID09PSBoYXNoLmxhc3RQYXJ0KSksXG4gICAgICAgICksXG4gICAgICApLFxuICAgICAgbWFwKHBhc3N3b3JkID0+IHBhc3N3b3JkICYmIHBhc3N3b3JkLmNvdW50ID49IHRoaXMucHduZWRQYXNzd29yZE1pbmltdW1PY2N1cnJlbmNlRm9yRXJyb3JcbiAgICAgICAgPyB7IHB3bmVkUGFzc3dvcmRPY2N1cnJlbmNlOiBwYXNzd29yZC5jb3VudCB9XG4gICAgICAgIDogbnVsbCksXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -15,16 +15,16 @@ export class PasswordCheckerModule {
15
15
  ]
16
16
  };
17
17
  }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
19
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule, PasswordCheckerLibDirective], exports: [PasswordCheckerLibDirective] }); }
20
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule] }); }
18
21
  }
19
- PasswordCheckerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
20
- PasswordCheckerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, declarations: [PasswordCheckerLibDirective], imports: [HttpClientModule], exports: [PasswordCheckerLibDirective] });
21
- PasswordCheckerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule] });
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, decorators: [{
23
23
  type: NgModule,
24
24
  args: [{
25
- declarations: [PasswordCheckerLibDirective],
26
- imports: [HttpClientModule],
25
+ declarations: [],
26
+ imports: [HttpClientModule, PasswordCheckerLibDirective],
27
27
  exports: [PasswordCheckerLibDirective]
28
28
  }]
29
29
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtY2hlY2tlci1saWIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFzc3dvcmQtY2hlY2tlci1saWIvc3JjL2xpYi9wYXNzd29yZC1jaGVja2VyLWxpYi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFrQywwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU92RyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBeUMsRUFBRTtRQUN4RCxPQUFPO1lBQ0wsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLDBCQUEwQjtvQkFDbkMsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs7a0hBWFUscUJBQXFCO21IQUFyQixxQkFBcUIsaUJBSmpCLDJCQUEyQixhQUNoQyxnQkFBZ0IsYUFDaEIsMkJBQTJCO21IQUUxQixxQkFBcUIsWUFIdEIsZ0JBQWdCOzJGQUdmLHFCQUFxQjtrQkFMakMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztvQkFDM0MsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDO2lCQUN2QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYXNzd29yZENoZWNrZXJMaWJEaXJlY3RpdmUgfSBmcm9tICcuL3Bhc3N3b3JkLWNoZWNrZXItbGliLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgUGFydGlhbCwgUGFzc3dvcmRDaGVja2VyQ29uZmlnLCBQYXNzd29yZENoZWNrZXJDb25maWdWYWx1ZSB9IGZyb20gJy4vcGFzc3dvcmQtY2hlY2tlci5jb25maWcnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtQYXNzd29yZENoZWNrZXJMaWJEaXJlY3RpdmVdLFxuICBpbXBvcnRzOiBbSHR0cENsaWVudE1vZHVsZV0sXG4gIGV4cG9ydHM6IFtQYXNzd29yZENoZWNrZXJMaWJEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkQ2hlY2tlck1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogUGFydGlhbDxQYXNzd29yZENoZWNrZXJDb25maWc+ID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBhc3N3b3JkQ2hlY2tlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogUGFzc3dvcmRDaGVja2VyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQYXNzd29yZENoZWNrZXJDb25maWdWYWx1ZSxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtY2hlY2tlci1saWIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcGFzc3dvcmQtY2hlY2tlci1saWIvc3JjL2xpYi9wYXNzd29yZC1jaGVja2VyLWxpYi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFrQywwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQU92RyxNQUFNLE9BQU8scUJBQXFCO0lBQ2hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBeUMsRUFBRTtRQUN4RCxPQUFPO1lBQ0wsUUFBUSxFQUFFLHFCQUFxQjtZQUMvQixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLDBCQUEwQjtvQkFDbkMsUUFBUSxFQUFFLE1BQU07aUJBQ2pCO2FBQ0Y7U0FDRixDQUFDO0lBQ0osQ0FBQzs4R0FYVSxxQkFBcUI7K0dBQXJCLHFCQUFxQixZQUh0QixnQkFBZ0IsRUFBRSwyQkFBMkIsYUFDN0MsMkJBQTJCOytHQUUxQixxQkFBcUIsWUFIdEIsZ0JBQWdCOzsyRkFHZixxQkFBcUI7a0JBTGpDLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLEVBQUU7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLDJCQUEyQixDQUFDO29CQUN4RCxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztpQkFDdkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGFzc3dvcmRDaGVja2VyTGliRGlyZWN0aXZlIH0gZnJvbSAnLi9wYXNzd29yZC1jaGVja2VyLWxpYi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IFBhcnRpYWwsIFBhc3N3b3JkQ2hlY2tlckNvbmZpZywgUGFzc3dvcmRDaGVja2VyQ29uZmlnVmFsdWUgfSBmcm9tICcuL3Bhc3N3b3JkLWNoZWNrZXIuY29uZmlnJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbXSxcbiAgaW1wb3J0czogW0h0dHBDbGllbnRNb2R1bGUsIFBhc3N3b3JkQ2hlY2tlckxpYkRpcmVjdGl2ZV0sXG4gIGV4cG9ydHM6IFtQYXNzd29yZENoZWNrZXJMaWJEaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkQ2hlY2tlck1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogUGFydGlhbDxQYXNzd29yZENoZWNrZXJDb25maWc+ID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzPFBhc3N3b3JkQ2hlY2tlck1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogUGFzc3dvcmRDaGVja2VyTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBQYXNzd29yZENoZWNrZXJDb25maWdWYWx1ZSxcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -45,16 +45,16 @@ class PasswordCheckerLibDirective {
45
45
  ? { pwnedPasswordOccurrence: password.count }
46
46
  : null));
47
47
  }
48
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerLibDirective, deps: [{ token: i1.HttpClient }, { token: PasswordCheckerConfigValue, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
49
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.6", type: PasswordCheckerLibDirective, isStandalone: true, selector: "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", inputs: { pwnedPasswordApi: "pwnedPasswordApi", pwnedPasswordMinimumOccurrenceForError: "pwnedPasswordMinimumOccurrenceForError", pwnedPasswordApiCallDebounceTime: "pwnedPasswordApiCallDebounceTime" }, providers: [
50
+ {
51
+ provide: NG_ASYNC_VALIDATORS,
52
+ useExisting: PasswordCheckerLibDirective,
53
+ multi: true,
54
+ },
55
+ ], ngImport: i0 }); }
48
56
  }
49
- PasswordCheckerLibDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, deps: [{ token: i1.HttpClient }, { token: PasswordCheckerConfigValue, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
50
- PasswordCheckerLibDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.1", type: PasswordCheckerLibDirective, selector: "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", inputs: { pwnedPasswordApi: "pwnedPasswordApi", pwnedPasswordMinimumOccurrenceForError: "pwnedPasswordMinimumOccurrenceForError", pwnedPasswordApiCallDebounceTime: "pwnedPasswordApiCallDebounceTime" }, providers: [
51
- {
52
- provide: NG_ASYNC_VALIDATORS,
53
- useExisting: PasswordCheckerLibDirective,
54
- multi: true,
55
- },
56
- ], ngImport: i0 });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, decorators: [{
57
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerLibDirective, decorators: [{
58
58
  type: Directive,
59
59
  args: [{
60
60
  // eslint-disable-next-line @angular-eslint/directive-selector
@@ -65,7 +65,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImpor
65
65
  useExisting: PasswordCheckerLibDirective,
66
66
  multi: true,
67
67
  },
68
- ]
68
+ ],
69
+ standalone: true
69
70
  }]
70
71
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
71
72
  type: Optional
@@ -92,15 +93,15 @@ class PasswordCheckerModule {
92
93
  ]
93
94
  };
94
95
  }
96
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
97
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule, PasswordCheckerLibDirective], exports: [PasswordCheckerLibDirective] }); }
98
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule] }); }
95
99
  }
96
- PasswordCheckerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
97
- PasswordCheckerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, declarations: [PasswordCheckerLibDirective], imports: [HttpClientModule], exports: [PasswordCheckerLibDirective] });
98
- PasswordCheckerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule] });
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, decorators: [{
100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PasswordCheckerModule, decorators: [{
100
101
  type: NgModule,
101
102
  args: [{
102
- declarations: [PasswordCheckerLibDirective],
103
- imports: [HttpClientModule],
103
+ declarations: [],
104
+ imports: [HttpClientModule, PasswordCheckerLibDirective],
104
105
  exports: [PasswordCheckerLibDirective]
105
106
  }]
106
107
  }] });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"triangular-password-checker.mjs","sources":["../../../projects/password-checker-lib/src/lib/password-checker.config.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.directive.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.module.ts","../../../projects/password-checker-lib/src/public_api.ts","../../../projects/password-checker-lib/src/triangular-password-checker.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport type Partial<T> = {\n [P in keyof T]?: T[P];\n};\n\nexport interface PasswordCheckerConfig {\n pwnedPasswordApi: string;\n pwnedPasswordMinimumOccurrenceForError: number;\n pwnedPasswordApiCallDebounceTime: number;\n}\n\nexport const PasswordCheckerConfigValue = new InjectionToken<Partial<PasswordCheckerConfig>>('PASSWORD_CHECKER_CONFIG');\n","import { Observable, timer } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors } from '@angular/forms';\nimport { Directive, Inject, Input, Optional } from '@angular/core';\nimport {HttpClient, HttpClientModule} from '@angular/common/http';\nimport sha1 from 'crypto-js/sha1';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]',\n providers: [\n {\n provide: NG_ASYNC_VALIDATORS,\n useExisting: PasswordCheckerLibDirective,\n multi: true,\n },\n ],\n standalone: true\n})\nexport class PasswordCheckerLibDirective implements AsyncValidator {\n @Input() pwnedPasswordApi: string;\n @Input() pwnedPasswordMinimumOccurrenceForError: number;\n @Input() pwnedPasswordApiCallDebounceTime: number;\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(PasswordCheckerConfigValue) config: Partial<PasswordCheckerConfig>,\n ) {\n\n if (!config) {\n // default initialization in constructor didn't work.\n // conflict with @Optional()?\n config = {};\n }\n\n this.pwnedPasswordApi =\n config.pwnedPasswordApi\n || 'https://api.pwnedpasswords.com/range/';\n this.pwnedPasswordMinimumOccurrenceForError =\n config.pwnedPasswordMinimumOccurrenceForError\n || 1;\n this.pwnedPasswordApiCallDebounceTime =\n config.pwnedPasswordApiCallDebounceTime\n || 400;\n }\n\n validate(control: AbstractControl): Observable<ValidationErrors|null> {\n const pw = ''.concat(control.value);\n\n return timer(this.pwnedPasswordApiCallDebounceTime).pipe(\n map(() => {\n const pwSha1 = sha1(pw).toString().toUpperCase();\n\n return {\n firstPart: pwSha1.substring(0, 5),\n lastPart: pwSha1.substring(5),\n };\n }),\n switchMap(\n (hash) => this.http.get(\n `${this.pwnedPasswordApi}${hash.firstPart}`, { responseType: 'text' }\n ).pipe(\n map(passwords => passwords.split(/[\\r\\n]+/)),\n map(passwords => passwords.map((password) => {\n const split = password.split(':');\n\n return {\n hash: split[0],\n count: parseInt(split[1], 10),\n };\n }\n )),\n map(passwords => passwords.find(password => password.hash === hash.lastPart)),\n ),\n ),\n map(password => password && password.count >= this.pwnedPasswordMinimumOccurrenceForError\n ? { pwnedPasswordOccurrence: password.count }\n : null),\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { PasswordCheckerLibDirective } from './password-checker-lib.directive';\nimport { HttpClientModule } from '@angular/common/http';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@NgModule({\n declarations: [],\n imports: [HttpClientModule, PasswordCheckerLibDirective],\n exports: [PasswordCheckerLibDirective]\n})\nexport class PasswordCheckerModule {\n static forRoot(config: Partial<PasswordCheckerConfig> = {}): ModuleWithProviders<PasswordCheckerModule> {\n return {\n ngModule: PasswordCheckerModule,\n providers: [\n {\n provide: PasswordCheckerConfigValue,\n useValue: config,\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of password-checker-lib\n */\n\nexport * from './lib/password-checker-lib.directive';\nexport * from './lib/password-checker-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -5,12 +5,11 @@ import { Partial, PasswordCheckerConfig } from './password-checker.config';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class PasswordCheckerLibDirective implements AsyncValidator {
7
7
  private http;
8
- private pwnedPasswordMinimumOccurrenceForErrorValue;
9
8
  pwnedPasswordApi: string;
10
9
  pwnedPasswordMinimumOccurrenceForError: number;
11
10
  pwnedPasswordApiCallDebounceTime: number;
12
11
  constructor(http: HttpClient, config: Partial<PasswordCheckerConfig>);
13
12
  validate(control: AbstractControl): Observable<ValidationErrors | null>;
14
13
  static ɵfac: i0.ɵɵFactoryDeclaration<PasswordCheckerLibDirective, [null, { optional: true; }]>;
15
- static ɵdir: i0.ɵɵDirectiveDeclaration<PasswordCheckerLibDirective, "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", never, { "pwnedPasswordApi": "pwnedPasswordApi"; "pwnedPasswordMinimumOccurrenceForError": "pwnedPasswordMinimumOccurrenceForError"; "pwnedPasswordApiCallDebounceTime": "pwnedPasswordApiCallDebounceTime"; }, {}, never, never, false, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PasswordCheckerLibDirective, "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", never, { "pwnedPasswordApi": { "alias": "pwnedPasswordApi"; "required": false; }; "pwnedPasswordMinimumOccurrenceForError": { "alias": "pwnedPasswordMinimumOccurrenceForError"; "required": false; }; "pwnedPasswordApiCallDebounceTime": { "alias": "pwnedPasswordApiCallDebounceTime"; "required": false; }; }, {}, never, never, true, never>;
16
15
  }
@@ -1,11 +1,11 @@
1
1
  import { ModuleWithProviders } from '@angular/core';
2
2
  import { Partial, PasswordCheckerConfig } from './password-checker.config';
3
3
  import * as i0 from "@angular/core";
4
- import * as i1 from "./password-checker-lib.directive";
5
- import * as i2 from "@angular/common/http";
4
+ import * as i1 from "@angular/common/http";
5
+ import * as i2 from "./password-checker-lib.directive";
6
6
  export declare class PasswordCheckerModule {
7
7
  static forRoot(config?: Partial<PasswordCheckerConfig>): ModuleWithProviders<PasswordCheckerModule>;
8
8
  static ɵfac: i0.ɵɵFactoryDeclaration<PasswordCheckerModule, never>;
9
- static ɵmod: i0.ɵɵNgModuleDeclaration<PasswordCheckerModule, [typeof i1.PasswordCheckerLibDirective], [typeof i2.HttpClientModule], [typeof i1.PasswordCheckerLibDirective]>;
9
+ static ɵmod: i0.ɵɵNgModuleDeclaration<PasswordCheckerModule, never, [typeof i1.HttpClientModule, typeof i2.PasswordCheckerLibDirective], [typeof i2.PasswordCheckerLibDirective]>;
10
10
  static ɵinj: i0.ɵɵInjectorDeclaration<PasswordCheckerModule>;
11
11
  }
@@ -1,5 +1,5 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- export declare type Partial<T> = {
2
+ export type Partial<T> = {
3
3
  [P in keyof T]?: T[P];
4
4
  };
5
5
  export interface PasswordCheckerConfig {
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@triangular/password-checker",
3
- "version": "10.0.0",
3
+ "version": "11.0.0",
4
4
  "peerDependencies": {
5
- "@angular/common": "^15.0.0",
6
- "@angular/core": "^15.0.0",
5
+ "@angular/common": "^16.0.0",
6
+ "@angular/core": "^16.0.0",
7
7
  "crypto-js": "^4.1.1"
8
8
  },
9
9
  "homepage": "https://password.akehir.com",
@@ -24,11 +24,7 @@
24
24
  "dependencies": {
25
25
  "tslib": "^2.0.0"
26
26
  },
27
- "module": "fesm2015/triangular-password-checker.mjs",
28
- "es2020": "fesm2020/triangular-password-checker.mjs",
29
- "esm2020": "esm2020/triangular-password-checker.mjs",
30
- "fesm2020": "fesm2020/triangular-password-checker.mjs",
31
- "fesm2015": "fesm2015/triangular-password-checker.mjs",
27
+ "module": "fesm2022/triangular-password-checker.mjs",
32
28
  "typings": "index.d.ts",
33
29
  "exports": {
34
30
  "./package.json": {
@@ -36,11 +32,9 @@
36
32
  },
37
33
  ".": {
38
34
  "types": "./index.d.ts",
39
- "esm2020": "./esm2020/triangular-password-checker.mjs",
40
- "es2020": "./fesm2020/triangular-password-checker.mjs",
41
- "es2015": "./fesm2015/triangular-password-checker.mjs",
42
- "node": "./fesm2015/triangular-password-checker.mjs",
43
- "default": "./fesm2020/triangular-password-checker.mjs"
35
+ "esm2022": "./esm2022/triangular-password-checker.mjs",
36
+ "esm": "./esm2022/triangular-password-checker.mjs",
37
+ "default": "./fesm2022/triangular-password-checker.mjs"
44
38
  }
45
39
  },
46
40
  "sideEffects": false
@@ -1,119 +0,0 @@
1
- import { timer } from 'rxjs';
2
- import { map, switchMap } from 'rxjs/operators';
3
- import { NG_ASYNC_VALIDATORS } from '@angular/forms';
4
- import * as i0 from '@angular/core';
5
- import { InjectionToken, Directive, Optional, Inject, Input, NgModule } from '@angular/core';
6
- import sha1 from 'crypto-js/sha1';
7
- import * as i1 from '@angular/common/http';
8
- import { HttpClientModule } from '@angular/common/http';
9
-
10
- const PasswordCheckerConfigValue = new InjectionToken('PASSWORD_CHECKER_CONFIG');
11
-
12
- class PasswordCheckerLibDirective {
13
- constructor(http, config) {
14
- this.http = http;
15
- if (!config) {
16
- // default initialization in constructor didn't work.
17
- // conflict with @Optional()?
18
- config = {};
19
- }
20
- this.pwnedPasswordApi =
21
- config.pwnedPasswordApi
22
- || 'https://api.pwnedpasswords.com/range/';
23
- this.pwnedPasswordMinimumOccurrenceForError =
24
- config.pwnedPasswordMinimumOccurrenceForError
25
- || 1;
26
- this.pwnedPasswordApiCallDebounceTime =
27
- config.pwnedPasswordApiCallDebounceTime
28
- || 400;
29
- }
30
- validate(control) {
31
- const pw = ''.concat(control.value);
32
- return timer(this.pwnedPasswordApiCallDebounceTime).pipe(map(() => {
33
- const pwSha1 = sha1(pw).toString().toUpperCase();
34
- return {
35
- firstPart: pwSha1.substring(0, 5),
36
- lastPart: pwSha1.substring(5),
37
- };
38
- }), switchMap((hash) => this.http.get(`${this.pwnedPasswordApi}${hash.firstPart}`, { responseType: 'text' }).pipe(map(passwords => passwords.split(/[\r\n]+/)), map(passwords => passwords.map((password) => {
39
- const split = password.split(':');
40
- return {
41
- hash: split[0],
42
- count: parseInt(split[1], 10),
43
- };
44
- })), map(passwords => passwords.find(password => password.hash === hash.lastPart)))), map(password => password && password.count >= this.pwnedPasswordMinimumOccurrenceForError
45
- ? { pwnedPasswordOccurrence: password.count }
46
- : null));
47
- }
48
- }
49
- PasswordCheckerLibDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, deps: [{ token: i1.HttpClient }, { token: PasswordCheckerConfigValue, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
50
- PasswordCheckerLibDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.1", type: PasswordCheckerLibDirective, selector: "[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]", inputs: { pwnedPasswordApi: "pwnedPasswordApi", pwnedPasswordMinimumOccurrenceForError: "pwnedPasswordMinimumOccurrenceForError", pwnedPasswordApiCallDebounceTime: "pwnedPasswordApiCallDebounceTime" }, providers: [
51
- {
52
- provide: NG_ASYNC_VALIDATORS,
53
- useExisting: PasswordCheckerLibDirective,
54
- multi: true,
55
- },
56
- ], ngImport: i0 });
57
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerLibDirective, decorators: [{
58
- type: Directive,
59
- args: [{
60
- // eslint-disable-next-line @angular-eslint/directive-selector
61
- selector: '[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]',
62
- providers: [
63
- {
64
- provide: NG_ASYNC_VALIDATORS,
65
- useExisting: PasswordCheckerLibDirective,
66
- multi: true,
67
- },
68
- ]
69
- }]
70
- }], ctorParameters: function () {
71
- return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
72
- type: Optional
73
- }, {
74
- type: Inject,
75
- args: [PasswordCheckerConfigValue]
76
- }] }];
77
- }, propDecorators: { pwnedPasswordApi: [{
78
- type: Input
79
- }], pwnedPasswordMinimumOccurrenceForError: [{
80
- type: Input
81
- }], pwnedPasswordApiCallDebounceTime: [{
82
- type: Input
83
- }] } });
84
-
85
- class PasswordCheckerModule {
86
- static forRoot(config = {}) {
87
- return {
88
- ngModule: PasswordCheckerModule,
89
- providers: [
90
- {
91
- provide: PasswordCheckerConfigValue,
92
- useValue: config,
93
- }
94
- ]
95
- };
96
- }
97
- }
98
- PasswordCheckerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
99
- PasswordCheckerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, declarations: [PasswordCheckerLibDirective], imports: [HttpClientModule], exports: [PasswordCheckerLibDirective] });
100
- PasswordCheckerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, imports: [HttpClientModule] });
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: PasswordCheckerModule, decorators: [{
102
- type: NgModule,
103
- args: [{
104
- declarations: [PasswordCheckerLibDirective],
105
- imports: [HttpClientModule],
106
- exports: [PasswordCheckerLibDirective]
107
- }]
108
- }] });
109
-
110
- /*
111
- * Public API Surface of password-checker-lib
112
- */
113
-
114
- /**
115
- * Generated bundle index. Do not edit.
116
- */
117
-
118
- export { PasswordCheckerLibDirective, PasswordCheckerModule };
119
- //# sourceMappingURL=triangular-password-checker.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"triangular-password-checker.mjs","sources":["../../../projects/password-checker-lib/src/lib/password-checker.config.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.directive.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.module.ts","../../../projects/password-checker-lib/src/public_api.ts","../../../projects/password-checker-lib/src/triangular-password-checker.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport type Partial<T> = {\n [P in keyof T]?: T[P];\n};\n\nexport interface PasswordCheckerConfig {\n pwnedPasswordApi: string;\n pwnedPasswordMinimumOccurrenceForError: number;\n pwnedPasswordApiCallDebounceTime: number;\n}\n\nexport const PasswordCheckerConfigValue = new InjectionToken<Partial<PasswordCheckerConfig>>('PASSWORD_CHECKER_CONFIG');\n","import { Observable, timer } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors } from '@angular/forms';\nimport { Directive, Inject, Input, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport sha1 from 'crypto-js/sha1';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]',\n providers: [\n {\n provide: NG_ASYNC_VALIDATORS,\n useExisting: PasswordCheckerLibDirective,\n multi: true,\n },\n ]\n})\nexport class PasswordCheckerLibDirective implements AsyncValidator {\n private pwnedPasswordMinimumOccurrenceForErrorValue: number;\n\n @Input() pwnedPasswordApi: string;\n @Input() pwnedPasswordMinimumOccurrenceForError: number;\n @Input() pwnedPasswordApiCallDebounceTime: number;\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(PasswordCheckerConfigValue) config: Partial<PasswordCheckerConfig>,\n ) {\n\n if (!config) {\n // default initialization in constructor didn't work.\n // conflict with @Optional()?\n config = {};\n }\n\n this.pwnedPasswordApi =\n config.pwnedPasswordApi\n || 'https://api.pwnedpasswords.com/range/';\n this.pwnedPasswordMinimumOccurrenceForError =\n config.pwnedPasswordMinimumOccurrenceForError\n || 1;\n this.pwnedPasswordApiCallDebounceTime =\n config.pwnedPasswordApiCallDebounceTime\n || 400;\n }\n\n validate(control: AbstractControl): Observable<ValidationErrors|null> {\n const pw = ''.concat(control.value);\n\n return timer(this.pwnedPasswordApiCallDebounceTime).pipe(\n map(() => {\n const pwSha1 = sha1(pw).toString().toUpperCase();\n\n return {\n firstPart: pwSha1.substring(0, 5),\n lastPart: pwSha1.substring(5),\n };\n }),\n switchMap(\n (hash) => this.http.get(\n `${this.pwnedPasswordApi}${hash.firstPart}`, { responseType: 'text' }\n ).pipe(\n map(passwords => passwords.split(/[\\r\\n]+/)),\n map(passwords => passwords.map((password) => {\n const split = password.split(':');\n\n return {\n hash: split[0],\n count: parseInt(split[1], 10),\n };\n }\n )),\n map(passwords => passwords.find(password => password.hash === hash.lastPart)),\n ),\n ),\n map(password => password && password.count >= this.pwnedPasswordMinimumOccurrenceForError\n ? { pwnedPasswordOccurrence: password.count }\n : null),\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { PasswordCheckerLibDirective } from './password-checker-lib.directive';\nimport { HttpClientModule } from '@angular/common/http';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@NgModule({\n declarations: [PasswordCheckerLibDirective],\n imports: [HttpClientModule],\n exports: [PasswordCheckerLibDirective]\n})\nexport class PasswordCheckerModule {\n static forRoot(config: Partial<PasswordCheckerConfig> = {}): ModuleWithProviders<PasswordCheckerModule> {\n return {\n ngModule: PasswordCheckerModule,\n providers: [\n {\n provide: PasswordCheckerConfigValue,\n useValue: config,\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of password-checker-lib\n */\n\nexport * from './lib/password-checker-lib.directive';\nexport * from './lib/password-checker-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"triangular-password-checker.mjs","sources":["../../../projects/password-checker-lib/src/lib/password-checker.config.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.directive.ts","../../../projects/password-checker-lib/src/lib/password-checker-lib.module.ts","../../../projects/password-checker-lib/src/public_api.ts","../../../projects/password-checker-lib/src/triangular-password-checker.ts"],"sourcesContent":["import {InjectionToken} from '@angular/core';\n\nexport type Partial<T> = {\n [P in keyof T]?: T[P];\n};\n\nexport interface PasswordCheckerConfig {\n pwnedPasswordApi: string;\n pwnedPasswordMinimumOccurrenceForError: number;\n pwnedPasswordApiCallDebounceTime: number;\n}\n\nexport const PasswordCheckerConfigValue = new InjectionToken<Partial<PasswordCheckerConfig>>('PASSWORD_CHECKER_CONFIG');\n","import { Observable, timer } from 'rxjs';\nimport { map, switchMap } from 'rxjs/operators';\nimport { AbstractControl, AsyncValidator, NG_ASYNC_VALIDATORS, ValidationErrors } from '@angular/forms';\nimport { Directive, Inject, Input, Optional } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport sha1 from 'crypto-js/sha1';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[pwnedPasswordValidator][formControlName], [pwnedPasswordValidator][ngModel],[pwnedPasswordValidator][formControl]',\n providers: [\n {\n provide: NG_ASYNC_VALIDATORS,\n useExisting: PasswordCheckerLibDirective,\n multi: true,\n },\n ]\n})\nexport class PasswordCheckerLibDirective implements AsyncValidator {\n private pwnedPasswordMinimumOccurrenceForErrorValue: number;\n\n @Input() pwnedPasswordApi: string;\n @Input() pwnedPasswordMinimumOccurrenceForError: number;\n @Input() pwnedPasswordApiCallDebounceTime: number;\n\n constructor(\n private http: HttpClient,\n @Optional() @Inject(PasswordCheckerConfigValue) config: Partial<PasswordCheckerConfig>,\n ) {\n\n if (!config) {\n // default initialization in constructor didn't work.\n // conflict with @Optional()?\n config = {};\n }\n\n this.pwnedPasswordApi =\n config.pwnedPasswordApi\n || 'https://api.pwnedpasswords.com/range/';\n this.pwnedPasswordMinimumOccurrenceForError =\n config.pwnedPasswordMinimumOccurrenceForError\n || 1;\n this.pwnedPasswordApiCallDebounceTime =\n config.pwnedPasswordApiCallDebounceTime\n || 400;\n }\n\n validate(control: AbstractControl): Observable<ValidationErrors|null> {\n const pw = ''.concat(control.value);\n\n return timer(this.pwnedPasswordApiCallDebounceTime).pipe(\n map(() => {\n const pwSha1 = sha1(pw).toString().toUpperCase();\n\n return {\n firstPart: pwSha1.substring(0, 5),\n lastPart: pwSha1.substring(5),\n };\n }),\n switchMap(\n (hash) => this.http.get(\n `${this.pwnedPasswordApi}${hash.firstPart}`, { responseType: 'text' }\n ).pipe(\n map(passwords => passwords.split(/[\\r\\n]+/)),\n map(passwords => passwords.map((password) => {\n const split = password.split(':');\n\n return {\n hash: split[0],\n count: parseInt(split[1], 10),\n };\n }\n )),\n map(passwords => passwords.find(password => password.hash === hash.lastPart)),\n ),\n ),\n map(password => password && password.count >= this.pwnedPasswordMinimumOccurrenceForError\n ? { pwnedPasswordOccurrence: password.count }\n : null),\n );\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { PasswordCheckerLibDirective } from './password-checker-lib.directive';\nimport { HttpClientModule } from '@angular/common/http';\nimport { Partial, PasswordCheckerConfig, PasswordCheckerConfigValue } from './password-checker.config';\n\n@NgModule({\n declarations: [PasswordCheckerLibDirective],\n imports: [HttpClientModule],\n exports: [PasswordCheckerLibDirective]\n})\nexport class PasswordCheckerModule {\n static forRoot(config: Partial<PasswordCheckerConfig> = {}): ModuleWithProviders<PasswordCheckerModule> {\n return {\n ngModule: PasswordCheckerModule,\n providers: [\n {\n provide: PasswordCheckerConfigValue,\n useValue: config,\n }\n ]\n };\n }\n}\n","/*\n * Public API Surface of password-checker-lib\n */\n\nexport * from './lib/password-checker-lib.directive';\nexport * from './lib/password-checker-lib.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
File without changes