@tstdl/base 0.82.45 → 0.82.47
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/api/default-error-handlers.d.ts +9 -3
- package/api/default-error-handlers.js +18 -5
- package/api/default-error-handlers.js.map +1 -1
- package/api/response.js +3 -1
- package/api/response.js.map +1 -1
- package/authentication/authentication.api.d.ts +76 -0
- package/authentication/authentication.api.js +26 -0
- package/authentication/authentication.api.js.map +1 -1
- package/authentication/client/authentication.service.d.ts +2 -1
- package/authentication/client/authentication.service.js +3 -0
- package/authentication/client/authentication.service.js.map +1 -1
- package/authentication/errors/index.d.ts +1 -0
- package/authentication/errors/index.js +18 -0
- package/authentication/errors/index.js.map +1 -0
- package/authentication/errors/secret-requirements.error.d.ts +5 -0
- package/authentication/errors/secret-requirements.error.js +12 -0
- package/authentication/errors/secret-requirements.error.js.map +1 -0
- package/authentication/models/index.d.ts +2 -0
- package/authentication/models/index.js +2 -0
- package/authentication/models/index.js.map +1 -1
- package/authentication/models/init-secret-reset-data.model.d.ts +5 -0
- package/authentication/models/init-secret-reset-data.model.js +28 -0
- package/authentication/models/init-secret-reset-data.model.js.map +1 -0
- package/authentication/models/secret-check-result.model.d.ts +3 -0
- package/authentication/models/secret-check-result.model.js +18 -0
- package/authentication/models/secret-check-result.model.js.map +1 -0
- package/authentication/models/token.model.d.ts +6 -3
- package/authentication/server/authentication-credentials.repository.js +2 -12
- package/authentication/server/authentication-credentials.repository.js.map +1 -1
- package/authentication/server/authentication-secret-requirements.validator.d.ts +9 -0
- package/authentication/server/authentication-secret-requirements.validator.js +35 -0
- package/authentication/server/authentication-secret-requirements.validator.js.map +1 -0
- package/authentication/server/authentication-secret-reset.handler.d.ts +4 -0
- package/authentication/server/authentication-secret-reset.handler.js +7 -0
- package/authentication/server/authentication-secret-reset.handler.js.map +1 -0
- package/authentication/server/authentication-subject.resolver.js +2 -12
- package/authentication/server/authentication-subject.resolver.js.map +1 -1
- package/authentication/server/authentication-token-payload.provider.js +2 -12
- package/authentication/server/authentication-token-payload.provider.js.map +1 -1
- package/authentication/server/authentication.api-controller.d.ts +3 -0
- package/authentication/server/authentication.api-controller.js +11 -0
- package/authentication/server/authentication.api-controller.js.map +1 -1
- package/authentication/server/authentication.service.d.ts +23 -5
- package/authentication/server/authentication.service.js +69 -30
- package/authentication/server/authentication.service.js.map +1 -1
- package/authentication/server/helper.d.ts +2 -1
- package/authentication/server/helper.js +12 -1
- package/authentication/server/helper.js.map +1 -1
- package/authentication/server/index.d.ts +2 -0
- package/authentication/server/index.js +2 -0
- package/authentication/server/index.js.map +1 -1
- package/container/container.js +6 -6
- package/container/container.js.map +1 -1
- package/container/resolve-chain.d.ts +1 -1
- package/container/resolve-chain.js +6 -2
- package/container/resolve-chain.js.map +1 -1
- package/container/resolve.error.js +1 -1
- package/container/resolve.error.js.map +1 -1
- package/examples/api/authentication.js +4 -2
- package/examples/api/authentication.js.map +1 -1
- package/package.json +5 -1
- package/password/have-i-been-pwned.d.ts +6 -0
- package/password/have-i-been-pwned.js +24 -0
- package/password/have-i-been-pwned.js.map +1 -0
- package/password/index.d.ts +3 -0
- package/password/index.js +20 -0
- package/password/index.js.map +1 -0
- package/password/password-check.d.ts +21 -0
- package/password/password-check.js +102 -0
- package/password/password-check.js.map +1 -0
- package/password/password-check.localization.d.ts +20 -0
- package/password/password-check.localization.js +94 -0
- package/password/password-check.localization.js.map +1 -0
- package/schema/schema.error.d.ts +2 -2
- package/schema/schema.error.js +1 -1
- package/schema/schema.error.js.map +1 -1
- package/text/localization.service.d.ts +8 -7
- package/text/localization.service.js +29 -12
- package/text/localization.service.js.map +1 -1
- package/types.d.ts +1 -1
- package/utils/object/property-name.js +4 -1
- package/utils/object/property-name.js.map +1 -1
|
@@ -28,9 +28,13 @@ class ResolveChain {
|
|
|
28
28
|
const node = { type: 'property', constructor, property, token };
|
|
29
29
|
return new ResolveChain([...this.nodes, node]);
|
|
30
30
|
}
|
|
31
|
-
format() {
|
|
31
|
+
format(truncate) {
|
|
32
32
|
let chainString = '';
|
|
33
|
-
|
|
33
|
+
const chain = (0, type_guards_js_1.isDefined)(truncate) ? this.truncate(truncate) : this;
|
|
34
|
+
if (chain.length < this.length) {
|
|
35
|
+
chainString += '\n [...]';
|
|
36
|
+
}
|
|
37
|
+
for (const node of chain.nodes) {
|
|
34
38
|
const tokenName = (0, token_js_1.getTokenName)(node.token);
|
|
35
39
|
switch (node.type) {
|
|
36
40
|
case 'token':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-chain.js","sourceRoot":"","sources":["../../source/container/resolve-chain.ts"],"names":[],"mappings":";;;AAAA,qDAA2D;AAE3D,
|
|
1
|
+
{"version":3,"file":"resolve-chain.js","sourceRoot":"","sources":["../../source/container/resolve-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@ class ResolveError extends custom_error_js_1.CustomError {
|
|
|
7
7
|
constructor(message, chain, cause) {
|
|
8
8
|
const causeMessage = (0, type_guards_js_1.isDefined)(cause) ? `\n cause: ${cause.message}` : '';
|
|
9
9
|
super({
|
|
10
|
-
message: `${message}${causeMessage}\n chain: ${chain.format()}`,
|
|
10
|
+
message: `${message}${causeMessage}\n chain: ${chain.format(15)}`,
|
|
11
11
|
cause
|
|
12
12
|
});
|
|
13
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve.error.js","sourceRoot":"","sources":["../../source/container/resolve.error.ts"],"names":[],"mappings":";;;AAAA,8DAAsD;AACtD,4DAAmD;AAGnD,MAAa,YAAa,SAAQ,6BAAW;IAC3C,YAAY,OAAe,EAAE,KAAmB,EAAE,KAAa;QAC7D,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,KAAK,CAAC;YACJ,OAAO,EAAE,GAAG,OAAO,GAAG,YAAY,cAAc,KAAK,CAAC,MAAM,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"resolve.error.js","sourceRoot":"","sources":["../../source/container/resolve.error.ts"],"names":[],"mappings":";;;AAAA,8DAAsD;AACtD,4DAAmD;AAGnD,MAAa,YAAa,SAAQ,6BAAW;IAC3C,YAAY,OAAe,EAAE,KAAmB,EAAE,KAAa;QAC7D,MAAM,YAAY,GAAG,IAAA,0BAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAE3E,KAAK,CAAC;YACJ,OAAO,EAAE,GAAG,OAAO,GAAG,YAAY,cAAc,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;YAClE,KAAK;SACN,CAAC,CAAC;IACL,CAAC;CACF;AATD,oCASC"}
|
|
@@ -29,13 +29,15 @@ const undici_1 = require("undici");
|
|
|
29
29
|
(0, module_js_3.configureLocalMessageBus)();
|
|
30
30
|
async function serverTest() {
|
|
31
31
|
const authenticationService = await index_js_4.container.resolveAsync(index_js_3.AuthenticationService);
|
|
32
|
-
await authenticationService.setCredentials('foobar', '
|
|
32
|
+
await authenticationService.setCredentials('foobar', 'mysuperdupersecret-fvhc54w');
|
|
33
33
|
}
|
|
34
34
|
async function clientTest() {
|
|
35
35
|
await (0, timing_js_1.timeout)(250); // allow server to initialize
|
|
36
36
|
const authenticationService = index_js_4.container.resolve(index_js_2.AuthenticationService);
|
|
37
37
|
authenticationService.initialize();
|
|
38
|
-
await authenticationService.
|
|
38
|
+
const passwordCheckResult = await authenticationService.checkSecret('123456');
|
|
39
|
+
console.log({ 'password check for "123456"': passwordCheckResult });
|
|
40
|
+
await authenticationService.login('foobar', 'mysuperdupersecret-fvhc54w');
|
|
39
41
|
authenticationService.token$.subscribe((token) => console.log({ token }));
|
|
40
42
|
}
|
|
41
43
|
function main() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../source/examples/api/authentication.ts"],"names":[],"mappings":";;AAAA,yCAAyC;AACzC,wDAA2D;AAC3D,qEAA2D;AAC3D,6EAAgF;AAChF,mEAAuI;AACvI,mEAAoK;AACpK,qJAA2L;AAC3L,6IAA+K;AAC/K,uDAAiD;AACjD,4GAAwG;AACxG,2DAA8D;AAC9D,gEAAuE;AACvE,iEAAyE;AACzE,oFAAwE;AACxE,qDAA4C;AAC5C,mCAA+B;AAE/B,IAAA,wCAA6B,EAAC;IAC5B,cAAc,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3C,qBAAqB,EAAE,yFAAwC;IAC/D,iBAAiB,EAAE,iFAAoC;CACxD,CAAC,CAAC;AAEH,IAAA,kGAAiD,EAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;AACjF,IAAA,0FAA6C,EAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AAE1E,IAAA,wCAA6B,EAAC;IAC5B,uBAAuB,EAAE,uCAAuB;CACjD,CAAC,CAAC;AAEH,IAAA,oCAAwB,GAAE,CAAC;AAE3B,KAAK,UAAU,UAAU;IACvB,MAAM,qBAAqB,GAAG,MAAM,oBAAS,CAAC,YAAY,CAAC,gCAA2B,CAAC,CAAC;IACxF,MAAM,qBAAqB,CAAC,cAAc,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"authentication.js","sourceRoot":"","sources":["../../../source/examples/api/authentication.ts"],"names":[],"mappings":";;AAAA,yCAAyC;AACzC,wDAA2D;AAC3D,qEAA2D;AAC3D,6EAAgF;AAChF,mEAAuI;AACvI,mEAAoK;AACpK,qJAA2L;AAC3L,6IAA+K;AAC/K,uDAAiD;AACjD,4GAAwG;AACxG,2DAA8D;AAC9D,gEAAuE;AACvE,iEAAyE;AACzE,oFAAwE;AACxE,qDAA4C;AAC5C,mCAA+B;AAE/B,IAAA,wCAA6B,EAAC;IAC5B,cAAc,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;IAC3C,qBAAqB,EAAE,yFAAwC;IAC/D,iBAAiB,EAAE,iFAAoC;CACxD,CAAC,CAAC;AAEH,IAAA,kGAAiD,EAAC,EAAE,UAAU,EAAE,aAAa,EAAE,CAAC,CAAC;AACjF,IAAA,0FAA6C,EAAC,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;AAE1E,IAAA,wCAA6B,EAAC;IAC5B,uBAAuB,EAAE,uCAAuB;CACjD,CAAC,CAAC;AAEH,IAAA,oCAAwB,GAAE,CAAC;AAE3B,KAAK,UAAU,UAAU;IACvB,MAAM,qBAAqB,GAAG,MAAM,oBAAS,CAAC,YAAY,CAAC,gCAA2B,CAAC,CAAC;IACxF,MAAM,qBAAqB,CAAC,cAAc,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;AACrF,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,IAAA,mBAAO,EAAC,GAAG,CAAC,CAAC,CAAC,6BAA6B;IAEjD,MAAM,qBAAqB,GAAG,oBAAS,CAAC,OAAO,CAAC,gCAA2B,CAAC,CAAC;IAC7E,qBAAqB,CAAC,UAAU,EAAE,CAAC;IAEnC,MAAM,mBAAmB,GAAG,MAAM,qBAAqB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAEpE,MAAM,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,4BAA4B,CAAC,CAAC;IAC1E,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,IAAI;IACX,IAAA,mCAAuB,GAAE,CAAC;IAC1B,IAAA,6BAAkB,EAAC,EAAE,WAAW,EAAE,CAAC,sCAA2B,CAAC,EAAE,CAAC,CAAC;IACnE,IAAA,gEAAgC,EAAC,EAAE,UAAU,EAAE,IAAI,cAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACxF,IAAA,+BAAmB,EAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAE1D,4BAAW,CAAC,GAAG,CAAC,sCAAe,CAAC,CAAC;AACnC,CAAC;AAED,IAAI,EAAE,CAAC;AAEP,KAAK,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,4BAAW,CAAC,QAAQ,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tstdl/base",
|
|
3
|
-
"version": "0.82.
|
|
3
|
+
"version": "0.82.47",
|
|
4
4
|
"author": "Patrick Hein",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -40,6 +40,10 @@
|
|
|
40
40
|
"@elastic/elasticsearch": "^8.6",
|
|
41
41
|
"@koa/router": "^12.0",
|
|
42
42
|
"@tstdl/angular": "^0.82",
|
|
43
|
+
"@zxcvbn-ts/core": "2.2",
|
|
44
|
+
"@zxcvbn-ts/language-common": "2.0",
|
|
45
|
+
"@zxcvbn-ts/language-de": "2.1",
|
|
46
|
+
"@zxcvbn-ts/language-en": "2.1",
|
|
43
47
|
"chroma-js": "^2.4",
|
|
44
48
|
"got": "^12.5",
|
|
45
49
|
"handlebars": "^4.7",
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.haveIBeenPwned = void 0;
|
|
4
|
+
const cryptography_1 = require("../utils/cryptography");
|
|
5
|
+
const urlBase = 'https://api.pwnedpasswords.com';
|
|
6
|
+
/**
|
|
7
|
+
* Checks password against https://haveibeenpwned.com/passwords
|
|
8
|
+
* @param password password to check
|
|
9
|
+
* @returns how often the password was pwned
|
|
10
|
+
*/
|
|
11
|
+
async function haveIBeenPwned(password) {
|
|
12
|
+
const hash = (await (0, cryptography_1.digest)('SHA-1', password).toHex()).toUpperCase();
|
|
13
|
+
const prefix = hash.slice(0, 5);
|
|
14
|
+
const suffix = hash.slice(5);
|
|
15
|
+
const response = await fetch(`${urlBase}/range/${prefix}`);
|
|
16
|
+
const result = await response.text();
|
|
17
|
+
const lineStart = result.indexOf(suffix);
|
|
18
|
+
const lineEnd = result.indexOf('\r\n', lineStart);
|
|
19
|
+
const line = result.slice(lineStart, lineEnd);
|
|
20
|
+
const pwnedCount = parseInt(line.split(':')[1], 10);
|
|
21
|
+
return pwnedCount;
|
|
22
|
+
}
|
|
23
|
+
exports.haveIBeenPwned = haveIBeenPwned;
|
|
24
|
+
//# sourceMappingURL=have-i-been-pwned.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"have-i-been-pwned.js","sourceRoot":"","sources":["../../source/password/have-i-been-pwned.ts"],"names":[],"mappings":";;;AAAA,wDAA8C;AAE9C,MAAM,OAAO,GAAG,gCAAgC,CAAC;AAEjD;;;;GAIG;AACI,KAAK,UAAU,cAAc,CAAC,QAAgB;IACnD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAA,qBAAM,EAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,UAAU,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAErC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IAErD,OAAO,UAAU,CAAC;AACpB,CAAC;AAdD,wCAcC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./have-i-been-pwned"), exports);
|
|
18
|
+
__exportStar(require("./password-check"), exports);
|
|
19
|
+
__exportStar(require("./password-check.localization"), exports);
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../source/password/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAoC;AACpC,mDAAiC;AACjC,gEAA8C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export type CheckPasswordOptions = {
|
|
2
|
+
checkForPwned?: boolean;
|
|
3
|
+
};
|
|
4
|
+
export declare enum PasswordStrength {
|
|
5
|
+
VeryWeak = 0,
|
|
6
|
+
Weak = 1,
|
|
7
|
+
Medium = 2,
|
|
8
|
+
Strong = 3,
|
|
9
|
+
VeryStrong = 4
|
|
10
|
+
}
|
|
11
|
+
export declare class PasswordCheckResult {
|
|
12
|
+
strength: PasswordStrength;
|
|
13
|
+
/**
|
|
14
|
+
* Count of how many times it appears in the data set from https://haveibeenpwned.com/
|
|
15
|
+
* Undefined if disabled in options or error occured (either timeout or api error)
|
|
16
|
+
*/
|
|
17
|
+
pwned?: number;
|
|
18
|
+
warnings: string[];
|
|
19
|
+
suggestions: string[];
|
|
20
|
+
}
|
|
21
|
+
export declare function checkPassword(password: string, { checkForPwned }?: CheckPasswordOptions): Promise<PasswordCheckResult>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.checkPassword = exports.PasswordCheckResult = exports.PasswordStrength = void 0;
|
|
13
|
+
const schema_1 = require("../schema");
|
|
14
|
+
const object_1 = require("../utils/object");
|
|
15
|
+
const timing_1 = require("../utils/timing");
|
|
16
|
+
const type_guards_1 = require("../utils/type-guards");
|
|
17
|
+
const have_i_been_pwned_1 = require("./have-i-been-pwned");
|
|
18
|
+
const password_check_localization_1 = require("./password-check.localization");
|
|
19
|
+
var PasswordStrength;
|
|
20
|
+
(function (PasswordStrength) {
|
|
21
|
+
PasswordStrength[PasswordStrength["VeryWeak"] = 0] = "VeryWeak";
|
|
22
|
+
PasswordStrength[PasswordStrength["Weak"] = 1] = "Weak";
|
|
23
|
+
PasswordStrength[PasswordStrength["Medium"] = 2] = "Medium";
|
|
24
|
+
PasswordStrength[PasswordStrength["Strong"] = 3] = "Strong";
|
|
25
|
+
PasswordStrength[PasswordStrength["VeryStrong"] = 4] = "VeryStrong";
|
|
26
|
+
})(PasswordStrength = exports.PasswordStrength || (exports.PasswordStrength = {}));
|
|
27
|
+
class PasswordCheckResult {
|
|
28
|
+
strength;
|
|
29
|
+
/**
|
|
30
|
+
* Count of how many times it appears in the data set from https://haveibeenpwned.com/
|
|
31
|
+
* Undefined if disabled in options or error occured (either timeout or api error)
|
|
32
|
+
*/
|
|
33
|
+
pwned;
|
|
34
|
+
warnings;
|
|
35
|
+
suggestions;
|
|
36
|
+
}
|
|
37
|
+
__decorate([
|
|
38
|
+
(0, schema_1.Enumeration)(PasswordStrength),
|
|
39
|
+
__metadata("design:type", Number)
|
|
40
|
+
], PasswordCheckResult.prototype, "strength", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, schema_1.Property)(Number, { optional: true }),
|
|
43
|
+
__metadata("design:type", Number)
|
|
44
|
+
], PasswordCheckResult.prototype, "pwned", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
(0, schema_1.Array)(String),
|
|
47
|
+
__metadata("design:type", Array)
|
|
48
|
+
], PasswordCheckResult.prototype, "warnings", void 0);
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, schema_1.Array)(String),
|
|
51
|
+
__metadata("design:type", Array)
|
|
52
|
+
], PasswordCheckResult.prototype, "suggestions", void 0);
|
|
53
|
+
exports.PasswordCheckResult = PasswordCheckResult;
|
|
54
|
+
async function checkPassword(password, { checkForPwned = true } = {}) {
|
|
55
|
+
const zxcvbn = await getZxcvbn();
|
|
56
|
+
const [zxcvbnResult, pwnedResult] = await Promise.all([
|
|
57
|
+
zxcvbn(password),
|
|
58
|
+
checkForPwned ? Promise.race([(0, have_i_been_pwned_1.haveIBeenPwned)(password).catch(() => undefined), (0, timing_1.timeout)(1000).then(() => undefined)]) : undefined
|
|
59
|
+
]);
|
|
60
|
+
const pawned = ((0, type_guards_1.isDefined)(pwnedResult) && (pwnedResult > 0)) ? [password_check_localization_1.passwordCheckLocalizationKeys.tstdl.passwordCheck.warnings.pwned[object_1.propertyName]] : [];
|
|
61
|
+
const warnings = zxcvbnResult.feedback.warning
|
|
62
|
+
? [...pawned, password_check_localization_1.passwordCheckLocalizationKeys.tstdl.passwordCheck.warnings[zxcvbnResult.feedback.warning][object_1.propertyName]]
|
|
63
|
+
: pawned;
|
|
64
|
+
const suggestions = zxcvbnResult.feedback.suggestions
|
|
65
|
+
.map((suggestion) => password_check_localization_1.passwordCheckLocalizationKeys.tstdl.passwordCheck.suggestions[suggestion][object_1.propertyName]);
|
|
66
|
+
return {
|
|
67
|
+
strength: zxcvbnResult.score,
|
|
68
|
+
pwned: pwnedResult,
|
|
69
|
+
warnings,
|
|
70
|
+
suggestions
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
exports.checkPassword = checkPassword;
|
|
74
|
+
let zxcvbnAsyncInstance;
|
|
75
|
+
async function getZxcvbn() {
|
|
76
|
+
if ((0, type_guards_1.isUndefined)(zxcvbnAsyncInstance)) {
|
|
77
|
+
zxcvbnAsyncInstance = importZxcvbn();
|
|
78
|
+
}
|
|
79
|
+
return zxcvbnAsyncInstance;
|
|
80
|
+
}
|
|
81
|
+
async function importZxcvbn() {
|
|
82
|
+
const [{ zxcvbnAsync, zxcvbnOptions }, common, english, german] = await Promise.all([
|
|
83
|
+
Promise.resolve().then(() => require('@zxcvbn-ts/core')),
|
|
84
|
+
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
|
|
85
|
+
Promise.resolve().then(() => require('@zxcvbn-ts/language-common')).then((module) => module.default ?? module),
|
|
86
|
+
Promise.resolve().then(() => require('@zxcvbn-ts/language-en')).then((module) => module.default ?? module),
|
|
87
|
+
Promise.resolve().then(() => require('@zxcvbn-ts/language-de')).then((module) => module.default ?? module)
|
|
88
|
+
/* eslint-enable @typescript-eslint/no-unnecessary-condition */
|
|
89
|
+
]);
|
|
90
|
+
const options = {
|
|
91
|
+
graphs: common.adjacencyGraphs,
|
|
92
|
+
useLevenshteinDistance: true,
|
|
93
|
+
dictionary: {
|
|
94
|
+
...common.dictionary,
|
|
95
|
+
...english.dictionary,
|
|
96
|
+
...german.dictionary
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
zxcvbnOptions.setOptions(options);
|
|
100
|
+
return zxcvbnAsync;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=password-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-check.js","sourceRoot":"","sources":["../../source/password/password-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Localization, LocalizeItem } from "../text/localization.service";
|
|
2
|
+
import type zxcvbnTranslationKeys from '@zxcvbn-ts/core/dist/data/translationKeys';
|
|
3
|
+
export type PasswordCheckLocalization = Localization<{
|
|
4
|
+
tstdl: {
|
|
5
|
+
passwordCheck: {
|
|
6
|
+
warnings: Record<keyof typeof zxcvbnTranslationKeys.warnings, LocalizeItem>;
|
|
7
|
+
suggestions: Record<keyof typeof zxcvbnTranslationKeys.suggestions, LocalizeItem>;
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
}>;
|
|
11
|
+
export declare const passwordCheckLocalizationKeys: import("../text/localization.service").ProxyLocalizationKeys<{
|
|
12
|
+
tstdl: {
|
|
13
|
+
passwordCheck: {
|
|
14
|
+
warnings: Record<keyof typeof zxcvbnTranslationKeys.warnings, LocalizeItem>;
|
|
15
|
+
suggestions: Record<keyof typeof zxcvbnTranslationKeys.suggestions, LocalizeItem>;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
}>;
|
|
19
|
+
export declare const germanPasswordCheckLocalization: PasswordCheckLocalization;
|
|
20
|
+
export declare const englishPasswordCheckLocalization: PasswordCheckLocalization;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.englishPasswordCheckLocalization = exports.germanPasswordCheckLocalization = exports.passwordCheckLocalizationKeys = void 0;
|
|
4
|
+
const localization_service_1 = require("../text/localization.service");
|
|
5
|
+
exports.passwordCheckLocalizationKeys = (0, localization_service_1.getLocalizationKeys)();
|
|
6
|
+
exports.germanPasswordCheckLocalization = {
|
|
7
|
+
language: { code: 'de', name: 'Deutsch' },
|
|
8
|
+
keys: {
|
|
9
|
+
tstdl: {
|
|
10
|
+
passwordCheck: {
|
|
11
|
+
warnings: {
|
|
12
|
+
straightRow: 'Gerade Linien von Tasten auf der Tastatur sind leicht zu erraten.',
|
|
13
|
+
keyPattern: 'Kurze Tastaturmuster sind leicht zu erraten.',
|
|
14
|
+
simpleRepeat: 'Sich wiederholende Zeichen wie "aaa" sind leicht zu erraten.',
|
|
15
|
+
extendedRepeat: 'Sich wiederholende Zeichenmuster wie "abcabcabc" sind leicht zu erraten.',
|
|
16
|
+
sequences: 'Häufige Zeichenfolgen wie "abc" sind leicht zu erraten.',
|
|
17
|
+
recentYears: 'Die jüngsten Jahreszahlen sind leicht zu erraten.',
|
|
18
|
+
dates: 'Ein Datum ist leicht zu erraten.',
|
|
19
|
+
topTen: 'Dies ist ein sehr häufig verwendetes Passwort.',
|
|
20
|
+
topHundred: 'Dies ist ein häufig verwendetes Passwort.',
|
|
21
|
+
common: 'Dies ist ein oft verwendetes Passwort.',
|
|
22
|
+
similarToCommon: 'Dies weist Ähnlichkeit zu anderen oft verwendeten Passwörtern auf.',
|
|
23
|
+
wordByItself: 'Einzelne Wörter sind leicht zu erraten.',
|
|
24
|
+
namesByThemselves: 'Einzelne Namen oder Nachnamen sind leicht zu erraten.',
|
|
25
|
+
commonNames: 'Vornamen und Nachnamen sind leicht zu erraten.',
|
|
26
|
+
userInputs: 'Es sollten keine persönlichen oder Seiten relevanten Daten vorkommen.',
|
|
27
|
+
pwned: 'Ihr Kennwort wurde durch eine Datenpanne im Internet offengelegt.'
|
|
28
|
+
},
|
|
29
|
+
suggestions: {
|
|
30
|
+
l33t: 'Vorhersehbare Buchstabenersetzungen wie \'@\' für \'a\' vermeiden.',
|
|
31
|
+
reverseWords: 'Umgekehrte Schreibweise von gebräuchlichen Wörtern vermeiden.',
|
|
32
|
+
allUppercase: 'Einige, aber nicht alle Buchstaben groß schreiben.',
|
|
33
|
+
capitalization: 'Nicht nur den ersten Buchstaben groß schreiben.',
|
|
34
|
+
dates: 'Daten, die mit persönlichen Daten in Verbindung gebracht werden können, vermeiden.',
|
|
35
|
+
recentYears: 'Die jüngsten Jahreszahlen vermeiden.',
|
|
36
|
+
associatedYears: 'Jahre, die mit persönlichen Daten in Verbindung gebracht werden können, vermeiden.',
|
|
37
|
+
sequences: 'Häufige Zeichenfolgen vermeiden.',
|
|
38
|
+
repeated: 'Wort- und Zeichenwiederholungen vermeiden.',
|
|
39
|
+
longerKeyboardPattern: 'Längere Tastaturmuster in unterschiedlicher Tipprichtung verwenden.',
|
|
40
|
+
anotherWord: 'Weitere Wörter, die weniger häufig vorkommen, hinzufügen.',
|
|
41
|
+
useWords: 'Mehrere Wörter verwenden, aber allgemeine Phrasen vermeiden.',
|
|
42
|
+
noNeed: 'Es ist möglich, starke Passwörter zu erstellen, ohne Symbole, Zahlen oder Großbuchstaben zu verwenden.',
|
|
43
|
+
pwned: 'Wenn Sie dieses Kennwort an anderer Stelle verwenden, sollten Sie es ändern.'
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
enums: []
|
|
49
|
+
};
|
|
50
|
+
exports.englishPasswordCheckLocalization = {
|
|
51
|
+
language: { code: 'de', name: 'Deutsch' },
|
|
52
|
+
keys: {
|
|
53
|
+
tstdl: {
|
|
54
|
+
passwordCheck: {
|
|
55
|
+
warnings: {
|
|
56
|
+
straightRow: 'Straight rows of keys on your keyboard are easy to guess.',
|
|
57
|
+
keyPattern: 'Short keyboard patterns are easy to guess.',
|
|
58
|
+
simpleRepeat: 'Repeated characters like "aaa" are easy to guess.',
|
|
59
|
+
extendedRepeat: 'Repeated character patterns like "abcabcabc" are easy to guess.',
|
|
60
|
+
sequences: 'Common character sequences like "abc" are easy to guess.',
|
|
61
|
+
recentYears: 'Recent years are easy to guess.',
|
|
62
|
+
dates: 'Dates are easy to guess.',
|
|
63
|
+
topTen: 'This is a heavily used password.',
|
|
64
|
+
topHundred: 'This is a frequently used password.',
|
|
65
|
+
common: 'This is a commonly used password.',
|
|
66
|
+
similarToCommon: 'This is similar to a commonly used password.',
|
|
67
|
+
wordByItself: 'Single words are easy to guess.',
|
|
68
|
+
namesByThemselves: 'Single names or surnames are easy to guess.',
|
|
69
|
+
commonNames: 'Common names and surnames are easy to guess.',
|
|
70
|
+
userInputs: 'There should not be any personal or page related data.',
|
|
71
|
+
pwned: 'Your password was exposed by a data breach on the Internet.'
|
|
72
|
+
},
|
|
73
|
+
suggestions: {
|
|
74
|
+
l33t: 'Avoid predictable letter substitutions like \'@\' for \'a\'.',
|
|
75
|
+
reverseWords: 'Avoid reversed spellings of common words.',
|
|
76
|
+
allUppercase: 'Capitalize some, but not all letters.',
|
|
77
|
+
capitalization: 'Capitalize more than the first letter.',
|
|
78
|
+
dates: 'Avoid dates and years that are associated with you.',
|
|
79
|
+
recentYears: 'Avoid recent years.',
|
|
80
|
+
associatedYears: 'Avoid years that are associated with you.',
|
|
81
|
+
sequences: 'Avoid common character sequences.',
|
|
82
|
+
repeated: 'Avoid repeated words and characters.',
|
|
83
|
+
longerKeyboardPattern: 'Use longer keyboard patterns and change typing direction multiple times.',
|
|
84
|
+
anotherWord: 'Add more words that are less common.',
|
|
85
|
+
useWords: 'Use multiple words, but avoid common phrases.',
|
|
86
|
+
noNeed: 'You can create strong passwords without using symbols, numbers, or uppercase letters.',
|
|
87
|
+
pwned: 'If you use this password elsewhere, you should change it.'
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
enums: []
|
|
93
|
+
};
|
|
94
|
+
//# sourceMappingURL=password-check.localization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-check.localization.js","sourceRoot":"","sources":["../../source/password/password-check.localization.ts"],"names":[],"mappings":";;;AACA,uEAAkE;AAYrD,QAAA,6BAA6B,GAAG,IAAA,0CAAmB,GAA6B,CAAC;AAEjF,QAAA,+BAA+B,GAA8B;IACxE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,QAAQ,EAAE;oBACR,WAAW,EAAE,mEAAmE;oBAChF,UAAU,EAAE,8CAA8C;oBAC1D,YAAY,EAAE,8DAA8D;oBAC5E,cAAc,EAAE,0EAA0E;oBAC1F,SAAS,EAAE,yDAAyD;oBACpE,WAAW,EAAE,mDAAmD;oBAChE,KAAK,EAAE,kCAAkC;oBACzC,MAAM,EAAE,gDAAgD;oBACxD,UAAU,EAAE,2CAA2C;oBACvD,MAAM,EAAE,wCAAwC;oBAChD,eAAe,EAAE,oEAAoE;oBACrF,YAAY,EAAE,yCAAyC;oBACvD,iBAAiB,EAAE,uDAAuD;oBAC1E,WAAW,EAAE,gDAAgD;oBAC7D,UAAU,EAAE,uEAAuE;oBACnF,KAAK,EAAE,mEAAmE;iBAC3E;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,oEAAoE;oBAC1E,YAAY,EAAE,+DAA+D;oBAC7E,YAAY,EAAE,oDAAoD;oBAClE,cAAc,EAAE,iDAAiD;oBACjE,KAAK,EAAE,oFAAoF;oBAC3F,WAAW,EAAE,sCAAsC;oBACnD,eAAe,EAAE,oFAAoF;oBACrG,SAAS,EAAE,kCAAkC;oBAC7C,QAAQ,EAAE,4CAA4C;oBACtD,qBAAqB,EAAE,qEAAqE;oBAC5F,WAAW,EAAE,2DAA2D;oBACxE,QAAQ,EAAE,8DAA8D;oBACxE,MAAM,EAAE,wGAAwG;oBAChH,KAAK,EAAE,8EAA8E;iBACtF;aACF;SACF;KACF;IACD,KAAK,EAAE,EAAE;CACV,CAAC;AAEW,QAAA,gCAAgC,GAA8B;IACzE,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;IACzC,IAAI,EAAE;QACJ,KAAK,EAAE;YACL,aAAa,EAAE;gBACb,QAAQ,EAAE;oBACR,WAAW,EAAE,2DAA2D;oBACxE,UAAU,EAAE,4CAA4C;oBACxD,YAAY,EAAE,mDAAmD;oBACjE,cAAc,EAAE,iEAAiE;oBACjF,SAAS,EAAE,0DAA0D;oBACrE,WAAW,EAAE,iCAAiC;oBAC9C,KAAK,EAAE,0BAA0B;oBACjC,MAAM,EAAE,kCAAkC;oBAC1C,UAAU,EAAE,qCAAqC;oBACjD,MAAM,EAAE,mCAAmC;oBAC3C,eAAe,EAAE,8CAA8C;oBAC/D,YAAY,EAAE,iCAAiC;oBAC/C,iBAAiB,EAAE,6CAA6C;oBAChE,WAAW,EAAE,8CAA8C;oBAC3D,UAAU,EAAE,wDAAwD;oBACpE,KAAK,EAAE,6DAA6D;iBACrE;gBACD,WAAW,EAAE;oBACX,IAAI,EAAE,8DAA8D;oBACpE,YAAY,EAAE,2CAA2C;oBACzD,YAAY,EAAE,uCAAuC;oBACrD,cAAc,EAAE,wCAAwC;oBACxD,KAAK,EAAE,qDAAqD;oBAC5D,WAAW,EAAE,qBAAqB;oBAClC,eAAe,EAAE,2CAA2C;oBAC5D,SAAS,EAAE,mCAAmC;oBAC9C,QAAQ,EAAE,sCAAsC;oBAChD,qBAAqB,EAAE,0EAA0E;oBACjG,WAAW,EAAE,sCAAsC;oBACnD,QAAQ,EAAE,+CAA+C;oBACzD,MAAM,EAAE,uFAAuF;oBAC/F,KAAK,EAAE,2DAA2D;iBACnE;aACF;SACF;KACF;IACD,KAAK,EAAE,EAAE;CACV,CAAC"}
|
package/schema/schema.error.d.ts
CHANGED
|
@@ -6,15 +6,15 @@ import type { ErrorExtraInfo } from "../utils/format-error.js";
|
|
|
6
6
|
import type { ValueType } from './types/index.js';
|
|
7
7
|
export type SchemaErrorOptions = Pick<CustomErrorOptions, 'fast'> & {
|
|
8
8
|
path: string | JsonPath;
|
|
9
|
-
inner?: OneOrMany<SchemaError>;
|
|
10
9
|
details?: UndefinableJson;
|
|
10
|
+
inner?: OneOrMany<SchemaError>;
|
|
11
11
|
cause?: any;
|
|
12
12
|
};
|
|
13
13
|
export declare class SchemaError extends CustomError implements ErrorExtraInfo {
|
|
14
14
|
static readonly errorName = "SchemaError";
|
|
15
15
|
readonly path: string;
|
|
16
|
-
readonly inner?: OneOrMany<SchemaError>;
|
|
17
16
|
readonly details?: UndefinableJson;
|
|
17
|
+
readonly inner?: OneOrMany<SchemaError>;
|
|
18
18
|
constructor(message: string, options: SchemaErrorOptions, cause?: any);
|
|
19
19
|
static expectedButGot(expected: OneOrMany<string | ValueType>, got: string | ValueType, path: string | JsonPath, options: TypedOmit<SchemaErrorOptions, 'path'> & {
|
|
20
20
|
customMessage?: string;
|
package/schema/schema.error.js
CHANGED
|
@@ -8,8 +8,8 @@ const index_js_1 = require("./utils/index.js");
|
|
|
8
8
|
class SchemaError extends custom_error_js_1.CustomError {
|
|
9
9
|
static errorName = 'SchemaError';
|
|
10
10
|
path;
|
|
11
|
-
inner;
|
|
12
11
|
details;
|
|
12
|
+
inner;
|
|
13
13
|
constructor(message, options, cause) {
|
|
14
14
|
super({ message, cause: cause ?? options.cause, fast: options.fast });
|
|
15
15
|
this.path = (0, type_guards_js_1.isString)(options.path) ? options.path : options.path.path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.error.js","sourceRoot":"","sources":["../../source/schema/schema.error.ts"],"names":[],"mappings":";;;AACA,8DAAsD;AAGtD,sDAAiD;AAEjD,4DAA4F;AAE5F,+CAAoD;AASpD,MAAa,WAAY,SAAQ,6BAAW;IAC1C,MAAM,CAAU,SAAS,GAAG,aAAa,CAAC;IAEjC,IAAI,CAAS;IACb,
|
|
1
|
+
{"version":3,"file":"schema.error.js","sourceRoot":"","sources":["../../source/schema/schema.error.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,10 @@ export type Localization<T extends LocalizationTemplate = LocalizationTemplate,
|
|
|
23
23
|
};
|
|
24
24
|
};
|
|
25
25
|
declare const parametersSymbol: unique symbol;
|
|
26
|
-
export type
|
|
27
|
-
[parametersSymbol]
|
|
26
|
+
export type ProxyLocalizationKey<Parameters = void> = PropertyName & {
|
|
27
|
+
[parametersSymbol]?: Parameters;
|
|
28
28
|
};
|
|
29
|
+
export type LocalizationKey<Parameters = void> = string | ProxyLocalizationKey<Parameters>;
|
|
29
30
|
export type LocalizationData<Parameters = any> = LocalizationKey | LocalizationDataObject<Parameters> | {
|
|
30
31
|
key: LocalizationKey;
|
|
31
32
|
parameters?: void;
|
|
@@ -34,10 +35,10 @@ export type LocalizationDataObject<Parameters> = {
|
|
|
34
35
|
key: LocalizationKey<Parameters>;
|
|
35
36
|
parameters: Parameters;
|
|
36
37
|
};
|
|
37
|
-
export type
|
|
38
|
-
[P in keyof T]: T[P] extends LocalizationTemplate ?
|
|
38
|
+
export type ProxyLocalizationKeys<T extends LocalizationTemplate> = {
|
|
39
|
+
[P in keyof T]: T[P] extends LocalizationTemplate ? ProxyLocalizationKeys<T[P]> : T[P] extends LocalizeItem<infer R> ? ProxyLocalizationKey<R> : ProxyLocalizationKey;
|
|
39
40
|
};
|
|
40
|
-
export declare function
|
|
41
|
+
export declare function isProxyLocalizationKey(value: any): value is ProxyLocalizationKey;
|
|
41
42
|
export declare function getLocalizationKey<Parameters = void>(key: string): LocalizationKey<Parameters>;
|
|
42
43
|
/** helper function to ensure type safety */
|
|
43
44
|
export declare function localizationData<T>(data: LocalizationData<T>): LocalizationData<T>;
|
|
@@ -46,7 +47,7 @@ export declare function localizationData<T>(data: LocalizationData<T>): Localiza
|
|
|
46
47
|
* @param localization
|
|
47
48
|
* @returns
|
|
48
49
|
*/
|
|
49
|
-
export declare function getLocalizationKeys<T extends Localization<any, any
|
|
50
|
+
export declare function getLocalizationKeys<T extends Localization<any, any> | LocalizationTemplate>(_localization?: T): ProxyLocalizationKeys<T extends Localization ? T['keys'] : T>;
|
|
50
51
|
export declare const autoEnumerationLocalization: typeof _autoEnumerationLocalization;
|
|
51
52
|
export declare class LocalizationService {
|
|
52
53
|
private readonly logger;
|
|
@@ -66,7 +67,7 @@ export declare class LocalizationService {
|
|
|
66
67
|
setLocalization(localization: Localization<any, any>): void;
|
|
67
68
|
tryGetItem<Parameters>(key: LocalizationKey<Parameters> | LocalizationData<Parameters>): LocalizeItem | undefined;
|
|
68
69
|
hasKey<Parameters>(key: LocalizationKey<Parameters> | LocalizationData<Parameters>): boolean;
|
|
69
|
-
localize<Parameters>(
|
|
70
|
+
localize<Parameters>(keyOrData: LocalizationKey<Parameters> | LocalizationData<Parameters>): string;
|
|
70
71
|
localizeEnum<T extends Enumeration>(enumeration: T, value: EnumerationValue<T>, parameters?: unknown): string;
|
|
71
72
|
localize$<Parameters>(data: LocalizationData<Parameters>): Observable<string>;
|
|
72
73
|
localizeEnum$<T extends Enumeration>(enumeration: T, value: EnumerationValue<T>, parameters?: unknown): Observable<string>;
|
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.enumerationLocalization = exports.LocalizationService = exports.autoEnumerationLocalization = exports.getLocalizationKeys = exports.localizationData = exports.getLocalizationKey = exports.
|
|
15
|
+
exports.enumerationLocalization = exports.LocalizationService = exports.autoEnumerationLocalization = exports.getLocalizationKeys = exports.localizationData = exports.getLocalizationKey = exports.isProxyLocalizationKey = void 0;
|
|
16
16
|
const index_js_1 = require("../container/index.js");
|
|
17
17
|
const index_js_2 = require("../logger/index.js");
|
|
18
18
|
const enum_js_1 = require("../utils/enum.js");
|
|
@@ -21,10 +21,10 @@ const object_js_1 = require("../utils/object/object.js");
|
|
|
21
21
|
const property_name_js_1 = require("../utils/object/property-name.js");
|
|
22
22
|
const type_guards_js_1 = require("../utils/type-guards.js");
|
|
23
23
|
const rxjs_1 = require("rxjs");
|
|
24
|
-
function
|
|
24
|
+
function isProxyLocalizationKey(value) {
|
|
25
25
|
return (0, property_name_js_1.isPropertyName)(value);
|
|
26
26
|
}
|
|
27
|
-
exports.
|
|
27
|
+
exports.isProxyLocalizationKey = isProxyLocalizationKey;
|
|
28
28
|
function getLocalizationKey(key) {
|
|
29
29
|
return { [property_name_js_1.propertyName]: key };
|
|
30
30
|
}
|
|
@@ -75,11 +75,15 @@ let LocalizationService = class LocalizationService {
|
|
|
75
75
|
}
|
|
76
76
|
registerLocalization(...localizations) {
|
|
77
77
|
for (const localization of localizations) {
|
|
78
|
+
const mappedLocalization = buildMappedLocalization(localization);
|
|
78
79
|
if (this.localizations.has(localization.language.code)) {
|
|
79
|
-
|
|
80
|
+
const existing = this.localizations.get(localization.language.code);
|
|
81
|
+
const merged = mergeMappedLocalization(existing, mappedLocalization);
|
|
82
|
+
this.localizations.set(localization.language.code, merged);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
this.localizations.set(localization.language.code, mappedLocalization);
|
|
80
86
|
}
|
|
81
|
-
const mappedLocalization = buildMappedLocalization(localization);
|
|
82
|
-
this.localizations.set(localization.language.code, mappedLocalization);
|
|
83
87
|
if ((0, type_guards_js_1.isUndefined)(this.activeLanguage)) {
|
|
84
88
|
this.setLocalization(localization);
|
|
85
89
|
}
|
|
@@ -107,8 +111,7 @@ let LocalizationService = class LocalizationService {
|
|
|
107
111
|
if ((0, type_guards_js_1.isUndefined)(this.activeLanguage)) {
|
|
108
112
|
return undefined;
|
|
109
113
|
}
|
|
110
|
-
const
|
|
111
|
-
const actualKey = keyIsLocalizationKey ? key[property_name_js_1.propertyName] : key.key[property_name_js_1.propertyName];
|
|
114
|
+
const actualKey = getStringKey(key);
|
|
112
115
|
return this.localizations.get(this.activeLanguage.code)?.keys.get(actualKey);
|
|
113
116
|
}
|
|
114
117
|
hasKey(key) {
|
|
@@ -116,10 +119,9 @@ let LocalizationService = class LocalizationService {
|
|
|
116
119
|
return (0, type_guards_js_1.isDefined)(item);
|
|
117
120
|
}
|
|
118
121
|
// eslint-disable-next-line max-statements
|
|
119
|
-
localize(
|
|
120
|
-
const
|
|
121
|
-
const
|
|
122
|
-
const parameters = dataIsLocalizationKey ? {} : data.parameters;
|
|
122
|
+
localize(keyOrData) {
|
|
123
|
+
const key = getStringKey(keyOrData);
|
|
124
|
+
const parameters = ((0, type_guards_js_1.isString)(keyOrData) || isProxyLocalizationKey(keyOrData)) ? {} : keyOrData.parameters;
|
|
123
125
|
const templateOrFunction = (0, type_guards_js_1.isDefined)(this.activeLanguage) ? this.localizations.get(this.activeLanguage.code)?.keys.get(key) : undefined;
|
|
124
126
|
if ((0, type_guards_js_1.isUndefined)(templateOrFunction)) {
|
|
125
127
|
if (!warnedMissingKeys.has(key)) {
|
|
@@ -190,4 +192,19 @@ function buildMappedLocalization({ language, keys, enums }) {
|
|
|
190
192
|
};
|
|
191
193
|
return mappedLocalization;
|
|
192
194
|
}
|
|
195
|
+
function getStringKey(key) {
|
|
196
|
+
return isProxyLocalizationKey(key) ? key[property_name_js_1.propertyName]
|
|
197
|
+
: (0, type_guards_js_1.isString)(key) ? key
|
|
198
|
+
: getStringKey(key.key);
|
|
199
|
+
}
|
|
200
|
+
function mergeMappedLocalization(a, b, force = false) {
|
|
201
|
+
if (!force && (a.language.code != b.language.code)) {
|
|
202
|
+
throw new Error('Language code mismatch. Set force to true to force.');
|
|
203
|
+
}
|
|
204
|
+
return {
|
|
205
|
+
language: b.language,
|
|
206
|
+
keys: new Map([...a.keys, ...b.keys]),
|
|
207
|
+
enums: new Map([...a.enums, ...b.enums])
|
|
208
|
+
};
|
|
209
|
+
}
|
|
193
210
|
//# sourceMappingURL=localization.service.js.map
|