@acorex/core 7.17.29 → 7.18.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/esm2022/format/index.mjs +2 -1
- package/esm2022/format/lib/format.module.mjs +26 -12
- package/esm2022/format/lib/formatters/string-formatter.mjs +16 -0
- package/esm2022/translation/lib/translation.service.mjs +23 -5
- package/esm2022/translation/lib/translator.directive.mjs +1 -1
- package/esm2022/validation/lib/rules/between-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/callback-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/equal-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/greater-than.mjs +2 -2
- package/esm2022/validation/lib/rules/length-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/less-than-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/maxlength-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/minlength-rule.mjs +2 -2
- package/esm2022/validation/lib/rules/regex-rule.mjs +4 -3
- package/esm2022/validation/lib/rules/required-rule.mjs +4 -3
- package/esm2022/validation/lib/validation.module.mjs +24 -11
- package/esm2022/validation/lib/validation.service.mjs +4 -4
- package/esm2022/validation/lib/validation.types.mjs +1 -1
- package/fesm2022/acorex-core-format.mjs +41 -11
- package/fesm2022/acorex-core-format.mjs.map +1 -1
- package/fesm2022/acorex-core-translation.mjs +22 -4
- package/fesm2022/acorex-core-translation.mjs.map +1 -1
- package/fesm2022/acorex-core-validation.mjs +40 -24
- package/fesm2022/acorex-core-validation.mjs.map +1 -1
- package/format/index.d.ts +1 -0
- package/format/lib/format.module.d.ts +1 -3
- package/format/lib/formatters/string-formatter.d.ts +14 -0
- package/package.json +1 -1
- package/translation/lib/translation.service.d.ts +1 -0
- package/validation/lib/rules/between-rule.d.ts +1 -1
- package/validation/lib/rules/callback-rule.d.ts +1 -1
- package/validation/lib/rules/equal-rule.d.ts +1 -1
- package/validation/lib/rules/greater-than.d.ts +1 -1
- package/validation/lib/rules/length-rule.d.ts +1 -1
- package/validation/lib/rules/less-than-rule.d.ts +1 -1
- package/validation/lib/rules/maxlength-rule.d.ts +1 -1
- package/validation/lib/rules/minlength-rule.d.ts +1 -1
- package/validation/lib/rules/regex-rule.d.ts +1 -1
- package/validation/lib/rules/required-rule.d.ts +1 -1
- package/validation/lib/validation.module.d.ts +1 -3
- package/validation/lib/validation.service.d.ts +1 -1
- package/validation/lib/validation.types.d.ts +1 -1
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { Inject, NgModule } from '@angular/core';
|
2
2
|
import { AXValidationRegistryService } from './validation.service';
|
3
3
|
import { AXRegexValidationRule } from './rules/regex-rule';
|
4
4
|
import { AXRequiredValidationRule } from './rules/required-rule';
|
@@ -11,7 +11,6 @@ import { AXLessThanValidationRule } from './rules/less-than-rule';
|
|
11
11
|
import { AXGreaterThanValidationRule } from './rules/greater-than';
|
12
12
|
import { AXBetweenValidationRule } from './rules/between-rule';
|
13
13
|
import * as i0 from "@angular/core";
|
14
|
-
import * as i1 from "./validation.service";
|
15
14
|
const BUILT_IN_RULES = [
|
16
15
|
AXRequiredValidationRule,
|
17
16
|
AXRegexValidationRule,
|
@@ -34,8 +33,10 @@ export class AXValidationModule {
|
|
34
33
|
providers: [
|
35
34
|
...(configs?.rules || []),
|
36
35
|
{
|
37
|
-
provide:
|
38
|
-
useFactory: (pluginRegistry) => () =>
|
36
|
+
provide: 'AXValidationModuleFactory',
|
37
|
+
useFactory: (pluginRegistry) => () => {
|
38
|
+
pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
|
39
|
+
},
|
39
40
|
deps: [AXValidationRegistryService],
|
40
41
|
multi: true
|
41
42
|
}
|
@@ -43,21 +44,30 @@ export class AXValidationModule {
|
|
43
44
|
};
|
44
45
|
}
|
45
46
|
static forChild(configs) {
|
46
|
-
AXValidationModule.registry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
|
47
47
|
return {
|
48
48
|
ngModule: AXValidationModule,
|
49
49
|
providers: [
|
50
|
-
...(configs?.rules || [])
|
50
|
+
...(configs?.rules || []),
|
51
|
+
{
|
52
|
+
provide: 'AXValidationModuleFactory',
|
53
|
+
useFactory: (pluginRegistry) => () => {
|
54
|
+
pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.rules || [])]);
|
55
|
+
},
|
56
|
+
deps: [AXValidationRegistryService],
|
57
|
+
multi: true
|
58
|
+
}
|
51
59
|
]
|
52
60
|
};
|
53
61
|
}
|
54
62
|
/**
|
55
63
|
* @ignore
|
56
64
|
*/
|
57
|
-
constructor(
|
58
|
-
|
65
|
+
constructor(instances) {
|
66
|
+
instances.forEach(f => {
|
67
|
+
f();
|
68
|
+
});
|
59
69
|
}
|
60
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule, deps: [{ token:
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule, deps: [{ token: 'AXValidationModuleFactory' }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
61
71
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule }); }
|
62
72
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXValidationModule, providers: [
|
63
73
|
...BUILT_IN_RULES
|
@@ -71,5 +81,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
71
81
|
...BUILT_IN_RULES
|
72
82
|
]
|
73
83
|
}]
|
74
|
-
}], ctorParameters: () => [{ type:
|
75
|
-
|
84
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
85
|
+
type: Inject,
|
86
|
+
args: ['AXValidationModuleFactory']
|
87
|
+
}] }] });
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvdmFsaWRhdGlvbi9zcmMvbGliL3ZhbGlkYXRpb24ubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsTUFBTSxFQUFpQyxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBSS9ELE1BQU0sY0FBYyxHQUFHO0lBQ25CLHdCQUF3QjtJQUN4QixxQkFBcUI7SUFDckIsd0JBQXdCO0lBQ3hCLHdCQUF3QjtJQUN4QixFQUFFO0lBQ0YseUJBQXlCO0lBQ3pCLHlCQUF5QjtJQUN6QixzQkFBc0I7SUFDdEIsRUFBRTtJQUNGLHFCQUFxQjtJQUNyQix3QkFBd0I7SUFDeEIsMkJBQTJCO0lBQzNCLHVCQUF1QjtDQUMxQixDQUFBO0FBYUQsTUFBTSxPQUFPLGtCQUFrQjtJQUUzQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQW1DO1FBQzlDLE9BQU87WUFDSCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRTtnQkFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pCO29CQUNJLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLFVBQVUsRUFBRSxDQUFDLGNBQTJDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDOUQsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUNuQyxLQUFLLEVBQUUsSUFBSTtpQkFDZDthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQW1DO1FBQy9DLE9BQU87WUFDSCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLFNBQVMsRUFBRTtnQkFDUCxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3pCO29CQUNJLE9BQU8sRUFBRSwyQkFBMkI7b0JBQ3BDLFVBQVUsRUFBRSxDQUFDLGNBQTJDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTt3QkFDOUQsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvRSxDQUFDO29CQUNELElBQUksRUFBRSxDQUFDLDJCQUEyQixDQUFDO29CQUNuQyxLQUFLLEVBQUUsSUFBSTtpQkFDZDthQUVKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNILFlBQWlELFNBQWdCO1FBQzdELFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbEIsQ0FBQyxFQUFFLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OEdBNUNRLGtCQUFrQixrQkF3Q1AsMkJBQTJCOytHQXhDdEMsa0JBQWtCOytHQUFsQixrQkFBa0IsYUFKaEI7WUFDUCxHQUFHLGNBQWM7U0FDcEI7OzJGQUVRLGtCQUFrQjtrQkFOOUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsRUFBRTtvQkFDWCxTQUFTLEVBQUU7d0JBQ1AsR0FBRyxjQUFjO3FCQUNwQjtpQkFDSjs7MEJBeUNnQixNQUFNOzJCQUFDLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9JTklUSUFMSVpFUiwgSW5qZWN0LCBJbmplY3RvciwgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFYVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3ZhbGlkYXRpb24udHlwZXMnO1xuaW1wb3J0IHsgQVhSZWdleFZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9yZWdleC1ydWxlJztcbmltcG9ydCB7IEFYUmVxdWlyZWRWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvcmVxdWlyZWQtcnVsZSc7XG5pbXBvcnQgeyBBWENhbGxiYWNrVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL2NhbGxiYWNrLXJ1bGUnO1xuaW1wb3J0IHsgQVhNaW5MZW5ndGhWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvbWlubGVuZ3RoLXJ1bGUnO1xuaW1wb3J0IHsgQVhNYXhMZW5ndGhWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvbWF4bGVuZ3RoLXJ1bGUnO1xuaW1wb3J0IHsgQVhMZW5ndGhWYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvbGVuZ3RoLXJ1bGUnO1xuaW1wb3J0IHsgQVhFcXVhbFZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9lcXVhbC1ydWxlJztcbmltcG9ydCB7IEFYTGVzc1RoYW5WYWxpZGF0aW9uUnVsZSB9IGZyb20gJy4vcnVsZXMvbGVzcy10aGFuLXJ1bGUnO1xuaW1wb3J0IHsgQVhHcmVhdGVyVGhhblZhbGlkYXRpb25SdWxlIH0gZnJvbSAnLi9ydWxlcy9ncmVhdGVyLXRoYW4nO1xuaW1wb3J0IHsgQVhCZXR3ZWVuVmFsaWRhdGlvblJ1bGUgfSBmcm9tICcuL3J1bGVzL2JldHdlZW4tcnVsZSc7XG5cblxuXG5jb25zdCBCVUlMVF9JTl9SVUxFUyA9IFtcbiAgICBBWFJlcXVpcmVkVmFsaWRhdGlvblJ1bGUsXG4gICAgQVhSZWdleFZhbGlkYXRpb25SdWxlLFxuICAgIEFYUmVxdWlyZWRWYWxpZGF0aW9uUnVsZSxcbiAgICBBWENhbGxiYWNrVmFsaWRhdGlvblJ1bGUsXG4gICAgLy9cbiAgICBBWE1pbkxlbmd0aFZhbGlkYXRpb25SdWxlLFxuICAgIEFYTWF4TGVuZ3RoVmFsaWRhdGlvblJ1bGUsXG4gICAgQVhMZW5ndGhWYWxpZGF0aW9uUnVsZSxcbiAgICAvL1xuICAgIEFYRXF1YWxWYWxpZGF0aW9uUnVsZSxcbiAgICBBWExlc3NUaGFuVmFsaWRhdGlvblJ1bGUsXG4gICAgQVhHcmVhdGVyVGhhblZhbGlkYXRpb25SdWxlLFxuICAgIEFYQmV0d2VlblZhbGlkYXRpb25SdWxlXG5dXG5cblxuZXhwb3J0IGludGVyZmFjZSBBWFZhbGlkYXRpb25Nb2R1bGVDb25maWdzIHtcbiAgICBydWxlczogKG5ldyAoKSA9PiBBWFZhbGlkYXRpb25SdWxlKVtdXG59XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIC4uLkJVSUxUX0lOX1JVTEVTXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBWFZhbGlkYXRpb25Nb2R1bGUge1xuXG4gICAgc3RhdGljIGZvclJvb3QoY29uZmlncz86IEFYVmFsaWRhdGlvbk1vZHVsZUNvbmZpZ3MpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEFYVmFsaWRhdGlvbk1vZHVsZT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmdNb2R1bGU6IEFYVmFsaWRhdGlvbk1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIC4uLihjb25maWdzPy5ydWxlcyB8fCBbXSksXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwcm92aWRlOiAnQVhWYWxpZGF0aW9uTW9kdWxlRmFjdG9yeScsXG4gICAgICAgICAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChwbHVnaW5SZWdpc3RyeTogQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlKSA9PiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW5SZWdpc3RyeS5yZWdpc3RlciguLi5bLi4uQlVJTFRfSU5fUlVMRVMsIC4uLihjb25maWdzPy5ydWxlcyB8fCBbXSldKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZGVwczogW0FYVmFsaWRhdGlvblJlZ2lzdHJ5U2VydmljZV0sXG4gICAgICAgICAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBmb3JDaGlsZChjb25maWdzPzogQVhWYWxpZGF0aW9uTW9kdWxlQ29uZmlncyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8QVhWYWxpZGF0aW9uTW9kdWxlPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuZ01vZHVsZTogQVhWYWxpZGF0aW9uTW9kdWxlLFxuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgICAgLi4uKGNvbmZpZ3M/LnJ1bGVzIHx8IFtdKSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGU6ICdBWFZhbGlkYXRpb25Nb2R1bGVGYWN0b3J5JyxcbiAgICAgICAgICAgICAgICAgICAgdXNlRmFjdG9yeTogKHBsdWdpblJlZ2lzdHJ5OiBBWFZhbGlkYXRpb25SZWdpc3RyeVNlcnZpY2UpID0+ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpblJlZ2lzdHJ5LnJlZ2lzdGVyKC4uLlsuLi5CVUlMVF9JTl9SVUxFUywgLi4uKGNvbmZpZ3M/LnJ1bGVzIHx8IFtdKV0pO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBkZXBzOiBbQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlXSxcbiAgICAgICAgICAgICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIF1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaWdub3JlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoQEluamVjdCgnQVhWYWxpZGF0aW9uTW9kdWxlRmFjdG9yeScpIGluc3RhbmNlczogYW55W10pIHtcbiAgICAgICAgaW5zdGFuY2VzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBmKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -39,19 +39,19 @@ export class AXValidationService {
|
|
39
39
|
this.pluginRegistry = pluginRegistry;
|
40
40
|
this.translationService = translationService;
|
41
41
|
}
|
42
|
-
validate(ruleName, value, options) {
|
42
|
+
async validate(ruleName, value, options) {
|
43
43
|
const customRule = this.pluginRegistry.customRules[ruleName];
|
44
44
|
const validator = this.pluginRegistry.get(ruleName);
|
45
45
|
if (!validator && !customRule) {
|
46
46
|
return {
|
47
47
|
rule: ruleName,
|
48
48
|
result: false,
|
49
|
-
message: this.translationService.
|
49
|
+
message: await this.translationService.translateAsync('validation.messages.invalid-rull-name', { params: { name: ruleName } }),
|
50
50
|
value
|
51
51
|
};
|
52
52
|
}
|
53
53
|
if (options?.message) {
|
54
|
-
options.message = this.translationService.
|
54
|
+
options.message = await this.translationService.translateAsync(options.message);
|
55
55
|
}
|
56
56
|
//
|
57
57
|
if (validator)
|
@@ -92,4 +92,4 @@ class AXValidationRuleChain {
|
|
92
92
|
return this.validationSummary;
|
93
93
|
}
|
94
94
|
}
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3ZhbGlkYXRpb24vc3JjL2xpYi92YWxpZGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdELE9BQU8sRUFBMkIsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7QUFLbEMsTUFBTSxPQUFPLDJCQUEyQjtJQUtwQyxJQUFXLFdBQVc7UUFDbEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBSUQsWUFBWSxRQUFrQjtRQVZ0QixZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUVqQyxZQUFPLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFTM0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDN0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFHLE9BQXVDO1FBQy9DLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUNySCxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRS9CLElBQUksQ0FBQyxJ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QUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBUTtRQUNWLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUMzQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7YUFDekM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQ2xDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpbmplY3QgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQVhWYWxpZGF0aW9uUnVsZSwgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMsIEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zTWFwLCBBWFZhbGlkYXRpb25SdWxlUmVzdWx0LCBBWFZhbGlkYXRpb25TdW1tYXJ5IH0gZnJvbSBcIi4vdmFsaWRhdGlvbi50eXBlc1wiO1xuaW1wb3J0IHsgQVhWYWxpZGF0aW9uQ29uZmlnUnVsZXMsIEFYX1ZBTElEQVRJT05fQ09ORklHIH0gZnJvbSBcIi4vdmFsaWRhdGlvbi5jb25maWdcIjtcbmltcG9ydCB7IEFYVHJhbnNsYXRpb25TZXJ2aWNlIH0gZnJvbSBcIkBhY29yZXgvY29yZS90cmFuc2xhdGlvblwiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQVhWYWxpZGF0aW9uUmVnaXN0cnlTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHBsdWdpbnM6IEFYVmFsaWRhdGlvblJ1bGVbXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBjb25maWdzID0gaW5qZWN0KEFYX1ZBTElEQVRJT05fQ09ORklHKTtcblxuICAgIHB1YmxpYyBnZXQgY3VzdG9tUnVsZXMoKTogQVhWYWxpZGF0aW9uQ29uZmlnUnVsZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWdzLnJ1bGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yO1xuXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHRoaXMuaW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICB9XG5cbiAgICByZWdpc3RlciguLi5wbHVnaW5zOiAobmV3ICgpID0+IEFYVmFsaWRhdGlvblJ1bGUpW10pIHtcbiAgICAgICAgcGx1Z2lucy5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgICAgY29uc3QgY2hpbGRJbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogW3sgcHJvdmlkZTogdCwgdXNlQ2xhc3M6IHQsIGRlcHM6IFtdIH1dLCBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICBjb25zdCB2ID0gY2hpbGRJbmplY3Rvci5nZXQodCk7XG5cbiAgICAgICAgICAgIGlmICh2ICYmICF0aGlzLnBsdWdpbnMuc29tZShwID0+IHAubmFtZSA9PSB2Lm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zLnB1c2godik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0KHJ1bGVOYW1lOiBzdHJpbmcpOiBBWFZhbGlkYXRpb25SdWxlIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2lucy5maW5kKChjKSA9PiBjLm5hbWUgPT0gcnVsZU5hbWUpXG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFYVmFsaWRhdGlvblNlcnZpY2Uge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHBsdWdpblJlZ2lzdHJ5OiBBWFZhbGlkYXRpb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRpb25TZXJ2aWNlOiBBWFRyYW5zbGF0aW9uU2VydmljZSxcblxuICAgICkgeyB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZShydWxlTmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGN1c3RvbVJ1bGUgPSB0aGlzLnBsdWdpblJlZ2lzdHJ5LmN1c3RvbVJ1bGVzW3J1bGVOYW1lXTtcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5wbHVnaW5SZWdpc3RyeS5nZXQocnVsZU5hbWUpO1xuXG4gICAgICAgIGlmICghdmFsaWRhdG9yICYmICFjdXN0b21SdWxlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJ1bGU6IHJ1bGVOYW1lLFxuICAgICAgICAgICAgICAgIHJlc3VsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYXdhaXQgdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlQXN5bmMoJ3ZhbGlkYXRpb24ubWVzc2FnZXMuaW52YWxpZC1ydWxsLW5hbWUnLCB7IHBhcmFtczogeyBuYW1lOiBydWxlTmFtZSB9IH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnM/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubWVzc2FnZSA9IGF3YWl0IHRoaXMudHJhbnNsYXRpb25TZXJ2aWNlLnRyYW5zbGF0ZUFzeW5jKG9wdGlvbnMubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgICAvL1xuICAgICAgICBpZiAodmFsaWRhdG9yKVxuICAgICAgICAgICAgcmV0dXJuIHZhbGlkYXRvci52YWxpZGF0ZSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIGVsc2Uge1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZShjdXN0b21SdWxlLnJ1bGUsIHZhbHVlLCBtZXJnZShvcHRpb25zLCBjdXN0b21SdWxlLm9wdGlvbnMpKTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcnVsZUZvcih2YWx1ZTogdW5rbm93bik6IEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gICAgICAgIHJldHVybiBuZXcgQVhWYWxpZGF0aW9uUnVsZUNoYWluKHRoaXMsIHZhbHVlKTtcbiAgICB9XG59XG5cbmNsYXNzIEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gICAgcHJpdmF0ZSBydWxlczogeyBuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBBWFZhbGlkYXRpb25SdWxlT3B0aW9ucyB9W10gPSBbXTtcbiAgICBwcml2YXRlIHZhbGlkYXRpb25TdW1tYXJ5OiBBWFZhbGlkYXRpb25TdW1tYXJ5ID0geyByZXN1bHQ6IHRydWUsIHJ1bGVzOiBbXSB9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogQVhWYWxpZGF0aW9uU2VydmljZSwgcHJpdmF0ZSBpbml0aWFsVmFsdWU6IHVua25vd24pIHsgfVxuXG4gICAgYWRkUnVsZTxLIGV4dGVuZHMga2V5b2YgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnNNYXA+KG5hbWU6IEssIG9wdGlvbnM/OiBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcFtLXSk6IEFYVmFsaWRhdGlvblJ1bGVDaGFpbiB7XG4gICAgICAgIHRoaXMucnVsZXMucHVzaCh7IG5hbWUsIG9wdGlvbnMgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlKCk6IFByb21pc2U8QVhWYWxpZGF0aW9uU3VtbWFyeT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgdGhpcy5ydWxlcykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy52YWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZShydWxlLm5hbWUsIHRoaXMuaW5pdGlhbFZhbHVlLCBydWxlLm9wdGlvbnMpO1xuICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3VtbWFyeS5ydWxlcy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdW1tYXJ5LnJlc3VsdCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25TdW1tYXJ5O1xuICAgIH1cbn1cbiJdfQ==
|
@@ -1,3 +1,3 @@
|
|
1
1
|
export class AXValidationRule {
|
2
2
|
}
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvdmFsaWRhdGlvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLE9BQWdCLGdCQUFnQjtDQUdyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMge1xuICAgIG1lc3NhZ2U/
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS92YWxpZGF0aW9uL3NyYy9saWIvdmFsaWRhdGlvbi50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFXQSxNQUFNLE9BQWdCLGdCQUFnQjtDQUdyQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uUnVsZU9wdGlvbnMge1xuICAgIG1lc3NhZ2U/OiBzdHJpbmdcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cblxuZXhwb3J0IGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlT3B0aW9uc01hcCB7XG4gICAgLy8gaW5pdGlhbGx5IGVtcHR5LCBidXQgd2lsbCBiZSBleHRlbmRlZCBieSBvdGhlciBtb2R1bGVzXG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYVmFsaWRhdGlvblJ1bGUge1xuICAgIGFic3RyYWN0IGdldCBuYW1lKCk6IHN0cmluZztcbiAgICBhYnN0cmFjdCB2YWxpZGF0ZSh2YWx1ZTogdW5rbm93biwgb3B0aW9ucz86IEFYVmFsaWRhdGlvblJ1bGVPcHRpb25zKTogUHJvbWlzZTxBWFZhbGlkYXRpb25SdWxlUmVzdWx0Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBWFZhbGlkYXRpb25SdWxlUmVzdWx0IHtcbiAgICBydWxlOiBzdHJpbmc7XG4gICAgdmFsdWU/OiB1bmtub3duO1xuICAgIG1lc3NhZ2U/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlc3VsdDogYm9vbGVhbjtcbiAgICBba2V5OiBzdHJpbmddOiB1bmtub3duXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhWYWxpZGF0aW9uU3VtbWFyeSB7XG4gICAgcmVzdWx0OiBib29sZWFuO1xuICAgIHJ1bGVzOiBBWFZhbGlkYXRpb25SdWxlUmVzdWx0W11cbn1cbiJdfQ==
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
|
-
import { Injector, Injectable, inject, Pipe,
|
2
|
+
import { Injector, Injectable, inject, Pipe, NgModule, Inject } from '@angular/core';
|
3
3
|
import { Subject, filter, startWith, of, switchMap } from 'rxjs';
|
4
4
|
import { AXEventService } from '@acorex/core/events';
|
5
5
|
import { defaults, padStart, isInteger } from 'lodash-es';
|
@@ -196,8 +196,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
196
196
|
type: Injectable
|
197
197
|
}] });
|
198
198
|
|
199
|
+
class AXStringFormatter {
|
200
|
+
get name() {
|
201
|
+
return 'string';
|
202
|
+
}
|
203
|
+
format(value, options) {
|
204
|
+
debugger;
|
205
|
+
if (typeof value != 'string')
|
206
|
+
return String(value);
|
207
|
+
const result = value.replace(/{{\s*([^}]+)\s*}}/g, (match, variable) => {
|
208
|
+
const value = options?.[variable];
|
209
|
+
return value ?? match;
|
210
|
+
});
|
211
|
+
return result;
|
212
|
+
}
|
213
|
+
}
|
214
|
+
|
199
215
|
const BUILT_IN_RULES = [
|
200
216
|
AXNumberFormatter,
|
217
|
+
AXStringFormatter
|
201
218
|
];
|
202
219
|
class AXFormatModule {
|
203
220
|
static forRoot(configs) {
|
@@ -206,8 +223,10 @@ class AXFormatModule {
|
|
206
223
|
providers: [
|
207
224
|
...(configs?.formatters || []),
|
208
225
|
{
|
209
|
-
provide:
|
210
|
-
useFactory: (pluginRegistry) => () =>
|
226
|
+
provide: 'AXFormatModuleFactory',
|
227
|
+
useFactory: (pluginRegistry) => () => {
|
228
|
+
pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);
|
229
|
+
},
|
211
230
|
deps: [AXFormatterRegistryService],
|
212
231
|
multi: true
|
213
232
|
}
|
@@ -215,22 +234,30 @@ class AXFormatModule {
|
|
215
234
|
};
|
216
235
|
}
|
217
236
|
static forChild(configs) {
|
218
|
-
AXFormatModule.registry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);
|
219
237
|
return {
|
220
238
|
ngModule: AXFormatModule,
|
221
239
|
providers: [
|
222
|
-
...(configs?.formatters || [])
|
240
|
+
...(configs?.formatters || []),
|
241
|
+
{
|
242
|
+
provide: 'AXFormatModuleFactory',
|
243
|
+
useFactory: (pluginRegistry) => () => {
|
244
|
+
pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);
|
245
|
+
},
|
246
|
+
deps: [AXFormatterRegistryService],
|
247
|
+
multi: true
|
248
|
+
}
|
223
249
|
]
|
224
250
|
};
|
225
251
|
}
|
226
252
|
/**
|
227
253
|
* @ignore
|
228
254
|
*/
|
229
|
-
constructor(
|
230
|
-
|
231
|
-
|
255
|
+
constructor(instances) {
|
256
|
+
instances.forEach(f => {
|
257
|
+
f();
|
258
|
+
});
|
232
259
|
}
|
233
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXFormatModule, deps: [{ token:
|
260
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXFormatModule, deps: [{ token: 'AXFormatModuleFactory' }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
234
261
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.8", ngImport: i0, type: AXFormatModule, declarations: [AXFormatPipe], exports: [AXFormatPipe] }); }
|
235
262
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXFormatModule }); }
|
236
263
|
}
|
@@ -241,11 +268,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
|
|
241
268
|
exports: [AXFormatPipe],
|
242
269
|
declarations: [AXFormatPipe],
|
243
270
|
}]
|
244
|
-
}], ctorParameters: () => [{ type:
|
271
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
272
|
+
type: Inject,
|
273
|
+
args: ['AXFormatModuleFactory']
|
274
|
+
}] }] });
|
245
275
|
|
246
276
|
/**
|
247
277
|
* Generated bundle index. Do not edit.
|
248
278
|
*/
|
249
279
|
|
250
|
-
export { AXFormatModule, AXFormatPipe, AXFormatService, AXFormatter, AXFormatterRegistryService, AXNumberFormatter };
|
280
|
+
export { AXFormatModule, AXFormatPipe, AXFormatService, AXFormatter, AXFormatterRegistryService, AXNumberFormatter, AXStringFormatter };
|
251
281
|
//# sourceMappingURL=acorex-core-format.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"acorex-core-format.mjs","sources":["../../../../libs/core/format/src/lib/format.config.ts","../../../../libs/core/format/src/lib/format.service.ts","../../../../libs/core/format/src/lib/format.pipe.ts","../../../../libs/core/format/src/lib/formatters/number-formatter.ts","../../../../libs/core/format/src/lib/format.module.ts","../../../../libs/core/format/src/acorex-core-format.ts"],"sourcesContent":["import { AXFormatOptions } from \"./format.types\";\n\nexport abstract class AXFormatter {\n abstract get name(): string;\n abstract format(value: unknown, options?: AXFormatOptions | string): string;\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { AXFormatter } from './format.config';\nimport { AXFormatOptionsMap } from './format.types';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXFormatterRegistryService {\n private plugins: AXFormatter[] = [];\n\n private injector: Injector;\n\n constructor(injector: Injector) {\n this.injector = injector;\n }\n\n register(...plugins: (new () => AXFormatter)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const v = childInjector.get(t);\n\n if (v && !this.plugins.some(p => p.name == v.name)) {\n this.plugins.push(v);\n }\n })\n }\n\n get formatters(): AXFormatter[] {\n return this.plugins;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXFormatService {\n constructor(\n private pluginRegistry: AXFormatterRegistryService\n ) { }\n\n\n private renderSubject = new Subject<void>();\n\n // Observable that other services/components can subscribe to\n onRender = this.renderSubject.asObservable();\n\n\n render() {\n this.renderSubject.next();\n }\n\n\n /**\n * Resolves a formatter by its name.\n * @param name The name of the formatter.\n * @returns The formatter if found, otherwise throws an error.\n */\n resolveFormatter(name: string): AXFormatter {\n const formatter = this.pluginRegistry.formatters.find((c) => c.name == name);\n if (!formatter) {\n throw new Error(`Formatter not found: ${name}`);\n }\n return formatter;\n }\n\n // Overload for traditional formatting\n format<K extends keyof AXFormatOptionsMap>(\n value: unknown,\n name: K,\n options?: AXFormatOptionsMap[K]\n ): string;\n\n // Overload for starting fluent API chain\n format(value: unknown): AXFormatFluent;\n\n // Implementation of the format method\n format<K extends keyof AXFormatOptionsMap>(\n value: unknown,\n formatter?: K,\n options?: AXFormatOptionsMap[K]\n ): string | AXFormatFluent {\n if (typeof formatter === 'string') {\n const formatterRef = this.resolveFormatter(formatter);\n return formatterRef.format(value, options);\n } else {\n return new AXFormatFluent(this, value);\n }\n }\n}\n\n\nclass AXFormatFluent {\n\n constructor(private formatService: AXFormatService, private initialValue: unknown) { }\n\n /**\n * Formats the value using the specified formatter and options.\n * @param formatter The name of the formatter to use.\n * @param options The options to pass to the formatter.\n * @returns The formatted string.\n */\n to<K extends keyof AXFormatOptionsMap>(formatter: K, options?: AXFormatOptionsMap[K]): string {\n try {\n const formatterRef = this.formatService.resolveFormatter(formatter);\n return formatterRef.format(this.initialValue, options);\n } catch (error) {\n // Handle or log the error as needed\n console.error(error);\n return String(this.initialValue);\n }\n }\n\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { AXFormatService } from './format.service';\nimport { AXFormatOptions } from './format.types';\nimport { Observable, filter, of, startWith, switchMap } from 'rxjs';\nimport { AXEventService, AXEventData } from '@acorex/core/events';\n\n\n@Pipe({\n name: 'format',\n pure: true\n})\nexport class AXFormatPipe implements PipeTransform {\n private formatService = inject(AXFormatService);\n private eventService = inject(AXEventService);\n\n private triggers = ['AX_CALENDAR_CHANGED', 'AX_LANGUAGE_CHANGED', 'AX_LANGUAGE_LOADED']\n\n transform(value: unknown, name: string, options?: AXFormatOptions | string): Observable<string> {\n // Initial formatted value\n const initialFormattedValue = this.formatService.format(value, name as any, options);\n\n // React to language changes and re-format the value\n return this.eventService.onEvent.pipe(\n filter((event: AXEventData) => this.triggers.includes(event.type)),\n startWith(initialFormattedValue), // Emit the initial formatted value immediately\n switchMap((event) => {\n // Re-call format method on every language change\n const formattedValue = this.formatService.format(value, name as any, options);\n return of(formattedValue);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFormatter } from '../format.config';\nimport { AXFormatOptions } from '../format.types';\nimport { isInteger, defaults, padStart } from 'lodash-es';\n\n\nexport interface AXNumberFormatterOptions extends AXFormatOptions {\n decimalPlaces?: number;\n thousandSeparator?: string;\n decimalSeparator?: string;\n zeroPadLength?: number; // New option for zero padding,\n locale?: string\n}\n\ndeclare module '../format.types' {\n interface AXFormatOptionsMap {\n 'number': AXNumberFormatterOptions;\n }\n}\n\n@Injectable()\nexport class AXNumberFormatter implements AXFormatter {\n\n private separatorsCache = {};\n\n get name(): string {\n return 'number';\n }\n\n format(value: number, options: AXNumberFormatterOptions): string {\n const { thousandSeparator, decimalSeparator } = this.getLocaleSeparators(options?.locale);\n // Merge user options with default options\n const effectiveOptions = defaults({}, options, {\n thousandSeparator,\n decimalSeparator,\n zeroPadLength: 0,\n locale: navigator.language\n });\n\n const sign = value < 0 ? '-' : '';\n const absoluteValue = Math.abs(value);\n\n // Handling zero padding for integer part\n let integerPart = Math.floor(absoluteValue).toString();\n if (effectiveOptions.zeroPadLength && effectiveOptions.zeroPadLength > integerPart.length) {\n integerPart = padStart(integerPart, effectiveOptions.zeroPadLength, '0');\n }\n\n // Applying thousand separator to integer part\n if (effectiveOptions.thousandSeparator) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, effectiveOptions.thousandSeparator);\n }\n\n // Constructing the final formatted value\n let formattedValue = sign + integerPart;\n if (effectiveOptions.decimalPlaces !== undefined) {\n // Limiting decimal places if specified\n const decimalPart = absoluteValue.toFixed(effectiveOptions.decimalPlaces).split('.')[1];\n formattedValue += effectiveOptions.decimalSeparator + decimalPart;\n } else if (!isInteger(value)) {\n // Showing full decimal part if decimalPlaces is not specified\n const decimalPart = absoluteValue.toString().split('.')[1] || '';\n if (decimalPart.length > 0) {\n formattedValue += effectiveOptions.decimalSeparator + decimalPart;\n }\n }\n\n return formattedValue;\n }\n\n private getLocaleSeparators(locale = navigator.language): { thousandSeparator: string, decimalSeparator: string } {\n // Use cache if available\n if (this.separatorsCache[locale]) {\n return this.separatorsCache[locale];\n }\n\n console.log('getLocaleSeparators', locale)\n const numberFormat = new Intl.NumberFormat(locale);\n const parts = numberFormat.formatToParts(1234567.89);\n let thousandSeparator = '';\n let decimalSeparator = '';\n\n for (const part of parts) {\n if (part.type === 'group') {\n thousandSeparator = part.value;\n } else if (part.type === 'decimal') {\n decimalSeparator = part.value;\n }\n }\n\n // Cache the result\n this.separatorsCache[locale] = { thousandSeparator, decimalSeparator };\n return this.separatorsCache[locale];\n }\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AXFormatPipe } from './format.pipe';\nimport { AXNumberFormatter } from './formatters/number-formatter';\nimport { AXFormatterRegistryService } from './format.service';\nimport { AXFormatter } from './format.config';\n\n\nconst BUILT_IN_RULES = [\n AXNumberFormatter,\n]\n\nexport interface AXFormatModuleConfigs {\n formatters: (new () => AXFormatter)[]\n}\n\n@NgModule({\n imports: [],\n exports: [AXFormatPipe],\n declarations: [AXFormatPipe],\n})\nexport class AXFormatModule {\n\n private static registry: AXFormatterRegistryService;\n\n static forRoot(configs?: AXFormatModuleConfigs): ModuleWithProviders<AXFormatModule> {\n return {\n ngModule: AXFormatModule,\n providers: [\n ...(configs?.formatters || []),\n {\n provide: APP_INITIALIZER,\n useFactory: (pluginRegistry: AXFormatterRegistryService) => () =>\n pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]),\n deps: [AXFormatterRegistryService],\n multi: true\n }\n ]\n };\n }\n\n static forChild(configs?: AXFormatModuleConfigs): ModuleWithProviders<AXFormatModule> {\n AXFormatModule.registry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);\n return {\n ngModule: AXFormatModule,\n providers: [\n ...(configs?.formatters || [])\n ]\n };\n }\n\n /**\n * @ignore\n */\n constructor(pluginRegistry: AXFormatterRegistryService) {\n AXFormatModule.registry = pluginRegistry;\n AXFormatModule.registry.register(...BUILT_IN_RULES);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.AXFormatterRegistryService"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"acorex-core-format.mjs","sources":["../../../../libs/core/format/src/lib/format.config.ts","../../../../libs/core/format/src/lib/format.service.ts","../../../../libs/core/format/src/lib/format.pipe.ts","../../../../libs/core/format/src/lib/formatters/number-formatter.ts","../../../../libs/core/format/src/lib/formatters/string-formatter.ts","../../../../libs/core/format/src/lib/format.module.ts","../../../../libs/core/format/src/acorex-core-format.ts"],"sourcesContent":["import { AXFormatOptions } from \"./format.types\";\n\nexport abstract class AXFormatter {\n abstract get name(): string;\n abstract format(value: unknown, options?: AXFormatOptions | string): string;\n}\n","import { Injectable, Injector } from '@angular/core';\nimport { AXFormatter } from './format.config';\nimport { AXFormatOptionsMap } from './format.types';\nimport { Subject } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AXFormatterRegistryService {\n private plugins: AXFormatter[] = [];\n\n private injector: Injector;\n\n constructor(injector: Injector) {\n this.injector = injector;\n }\n\n register(...plugins: (new () => AXFormatter)[]) {\n plugins.forEach(t => {\n const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });\n const v = childInjector.get(t);\n\n if (v && !this.plugins.some(p => p.name == v.name)) {\n this.plugins.push(v);\n }\n })\n }\n\n get formatters(): AXFormatter[] {\n return this.plugins;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class AXFormatService {\n constructor(\n private pluginRegistry: AXFormatterRegistryService\n ) { }\n\n\n private renderSubject = new Subject<void>();\n\n // Observable that other services/components can subscribe to\n onRender = this.renderSubject.asObservable();\n\n\n render() {\n this.renderSubject.next();\n }\n\n\n /**\n * Resolves a formatter by its name.\n * @param name The name of the formatter.\n * @returns The formatter if found, otherwise throws an error.\n */\n resolveFormatter(name: string): AXFormatter {\n const formatter = this.pluginRegistry.formatters.find((c) => c.name == name);\n if (!formatter) {\n throw new Error(`Formatter not found: ${name}`);\n }\n return formatter;\n }\n\n // Overload for traditional formatting\n format<K extends keyof AXFormatOptionsMap>(\n value: unknown,\n name: K,\n options?: AXFormatOptionsMap[K]\n ): string;\n\n // Overload for starting fluent API chain\n format(value: unknown): AXFormatFluent;\n\n // Implementation of the format method\n format<K extends keyof AXFormatOptionsMap>(\n value: unknown,\n formatter?: K,\n options?: AXFormatOptionsMap[K]\n ): string | AXFormatFluent {\n if (typeof formatter === 'string') {\n const formatterRef = this.resolveFormatter(formatter);\n return formatterRef.format(value, options);\n } else {\n return new AXFormatFluent(this, value);\n }\n }\n}\n\n\nclass AXFormatFluent {\n\n constructor(private formatService: AXFormatService, private initialValue: unknown) { }\n\n /**\n * Formats the value using the specified formatter and options.\n * @param formatter The name of the formatter to use.\n * @param options The options to pass to the formatter.\n * @returns The formatted string.\n */\n to<K extends keyof AXFormatOptionsMap>(formatter: K, options?: AXFormatOptionsMap[K]): string {\n try {\n const formatterRef = this.formatService.resolveFormatter(formatter);\n return formatterRef.format(this.initialValue, options);\n } catch (error) {\n // Handle or log the error as needed\n console.error(error);\n return String(this.initialValue);\n }\n }\n\n}\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { AXFormatService } from './format.service';\nimport { AXFormatOptions } from './format.types';\nimport { Observable, filter, of, startWith, switchMap } from 'rxjs';\nimport { AXEventService, AXEventData } from '@acorex/core/events';\n\n\n@Pipe({\n name: 'format',\n pure: true\n})\nexport class AXFormatPipe implements PipeTransform {\n private formatService = inject(AXFormatService);\n private eventService = inject(AXEventService);\n\n private triggers = ['AX_CALENDAR_CHANGED', 'AX_LANGUAGE_CHANGED', 'AX_LANGUAGE_LOADED']\n\n transform(value: unknown, name: string, options?: AXFormatOptions | string): Observable<string> {\n // Initial formatted value\n const initialFormattedValue = this.formatService.format(value, name as any, options);\n\n // React to language changes and re-format the value\n return this.eventService.onEvent.pipe(\n filter((event: AXEventData) => this.triggers.includes(event.type)),\n startWith(initialFormattedValue), // Emit the initial formatted value immediately\n switchMap((event) => {\n // Re-call format method on every language change\n const formattedValue = this.formatService.format(value, name as any, options);\n return of(formattedValue);\n })\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AXFormatter } from '../format.config';\nimport { AXFormatOptions } from '../format.types';\nimport { isInteger, defaults, padStart } from 'lodash-es';\n\n\nexport interface AXNumberFormatterOptions extends AXFormatOptions {\n decimalPlaces?: number;\n thousandSeparator?: string;\n decimalSeparator?: string;\n zeroPadLength?: number; // New option for zero padding,\n locale?: string\n}\n\ndeclare module '../format.types' {\n interface AXFormatOptionsMap {\n 'number': AXNumberFormatterOptions;\n }\n}\n\n@Injectable()\nexport class AXNumberFormatter implements AXFormatter {\n\n private separatorsCache = {};\n\n get name(): string {\n return 'number';\n }\n\n format(value: number, options: AXNumberFormatterOptions): string {\n const { thousandSeparator, decimalSeparator } = this.getLocaleSeparators(options?.locale);\n // Merge user options with default options\n const effectiveOptions = defaults({}, options, {\n thousandSeparator,\n decimalSeparator,\n zeroPadLength: 0,\n locale: navigator.language\n });\n\n const sign = value < 0 ? '-' : '';\n const absoluteValue = Math.abs(value);\n\n // Handling zero padding for integer part\n let integerPart = Math.floor(absoluteValue).toString();\n if (effectiveOptions.zeroPadLength && effectiveOptions.zeroPadLength > integerPart.length) {\n integerPart = padStart(integerPart, effectiveOptions.zeroPadLength, '0');\n }\n\n // Applying thousand separator to integer part\n if (effectiveOptions.thousandSeparator) {\n integerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, effectiveOptions.thousandSeparator);\n }\n\n // Constructing the final formatted value\n let formattedValue = sign + integerPart;\n if (effectiveOptions.decimalPlaces !== undefined) {\n // Limiting decimal places if specified\n const decimalPart = absoluteValue.toFixed(effectiveOptions.decimalPlaces).split('.')[1];\n formattedValue += effectiveOptions.decimalSeparator + decimalPart;\n } else if (!isInteger(value)) {\n // Showing full decimal part if decimalPlaces is not specified\n const decimalPart = absoluteValue.toString().split('.')[1] || '';\n if (decimalPart.length > 0) {\n formattedValue += effectiveOptions.decimalSeparator + decimalPart;\n }\n }\n\n return formattedValue;\n }\n\n private getLocaleSeparators(locale = navigator.language): { thousandSeparator: string, decimalSeparator: string } {\n // Use cache if available\n if (this.separatorsCache[locale]) {\n return this.separatorsCache[locale];\n }\n\n console.log('getLocaleSeparators', locale)\n const numberFormat = new Intl.NumberFormat(locale);\n const parts = numberFormat.formatToParts(1234567.89);\n let thousandSeparator = '';\n let decimalSeparator = '';\n\n for (const part of parts) {\n if (part.type === 'group') {\n thousandSeparator = part.value;\n } else if (part.type === 'decimal') {\n decimalSeparator = part.value;\n }\n }\n\n // Cache the result\n this.separatorsCache[locale] = { thousandSeparator, decimalSeparator };\n return this.separatorsCache[locale];\n }\n}\n","import { AXFormatter } from '../format.config';\nimport { AXFormatOptions } from '../format.types';\n\n\nexport interface AXStringFormatterOptions extends AXFormatOptions {\n [key: string]: any\n}\n\ndeclare module '../format.types' {\n interface AXFormatOptionsMap {\n 'string': AXStringFormatterOptions;\n }\n}\n\nexport class AXStringFormatter implements AXFormatter {\n get name(): string {\n return 'string';\n }\n\n format(value: unknown, options: AXStringFormatterOptions): string {\n debugger\n if (typeof value != 'string') return String(value);\n const result = value.replace(/{{\\s*([^}]+)\\s*}}/g, (match, variable) => {\n\n const value = options?.[variable] as string;\n return value ?? match;\n });\n return result;\n }\n}\n","import { Inject, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AXFormatPipe } from './format.pipe';\nimport { AXNumberFormatter } from './formatters/number-formatter';\nimport { AXFormatterRegistryService } from './format.service';\nimport { AXFormatter } from './format.config';\nimport { AXStringFormatter } from './formatters/string-formatter';\n\n\nconst BUILT_IN_RULES = [\n AXNumberFormatter,\n AXStringFormatter\n]\n\nexport interface AXFormatModuleConfigs {\n formatters: (new () => AXFormatter)[]\n}\n\n@NgModule({\n imports: [],\n exports: [AXFormatPipe],\n declarations: [AXFormatPipe],\n})\nexport class AXFormatModule {\n\n\n static forRoot(configs?: AXFormatModuleConfigs): ModuleWithProviders<AXFormatModule> {\n return {\n ngModule: AXFormatModule,\n providers: [\n ...(configs?.formatters || []),\n {\n provide: 'AXFormatModuleFactory',\n useFactory: (pluginRegistry: AXFormatterRegistryService) => () => {\n pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);\n },\n deps: [AXFormatterRegistryService],\n multi: true\n }\n ]\n };\n }\n\n static forChild(configs?: AXFormatModuleConfigs): ModuleWithProviders<AXFormatModule> {\n return {\n ngModule: AXFormatModule,\n providers: [\n ...(configs?.formatters || []),\n {\n provide: 'AXFormatModuleFactory',\n useFactory: (pluginRegistry: AXFormatterRegistryService) => () => {\n pluginRegistry.register(...[...BUILT_IN_RULES, ...(configs?.formatters || [])]);\n },\n deps: [AXFormatterRegistryService],\n multi: true\n }\n\n ]\n };\n }\n\n /**\n * @ignore\n */\n constructor(@Inject('AXFormatModuleFactory') instances: any[]) {\n instances.forEach(f => {\n f();\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
2
|
import { InjectionToken, inject, Injectable, Pipe, Directive, APP_INITIALIZER, NgModule } from '@angular/core';
|
3
|
-
import { of, BehaviorSubject, forkJoin, tap, catchError, finalize, shareReplay, map, switchMap, startWith } from 'rxjs';
|
3
|
+
import { of, BehaviorSubject, forkJoin, tap, catchError, finalize, shareReplay, map, switchMap, startWith, take, firstValueFrom } from 'rxjs';
|
4
4
|
import { set, get } from 'lodash-es';
|
5
5
|
import { AXEventService, AXEventTypes } from '@acorex/core/events';
|
6
6
|
|
@@ -148,10 +148,28 @@ class AXTranslationService {
|
|
148
148
|
if (options?.lang) {
|
149
149
|
return this.load(key, options);
|
150
150
|
}
|
151
|
-
return this.langChanges$.pipe(switchMap((lang) => {
|
151
|
+
return this.langChanges$.pipe(startWith(this.getActiveLang()), switchMap((lang) => {
|
152
152
|
return this.load(key, { ...options, lang: lang });
|
153
153
|
}));
|
154
154
|
}
|
155
|
+
async translateAsync(key, options) {
|
156
|
+
const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options || {};
|
157
|
+
let translation = get(this.translationCache, `${lang}.${scope}.${key}`);
|
158
|
+
if (!translation) {
|
159
|
+
// If the translation is not in the cache, load it
|
160
|
+
await firstValueFrom(this.load(key, { lang, scope }).pipe(take(1)));
|
161
|
+
translation = get(this.translationCache, `${lang}.${scope}.${key}`);
|
162
|
+
}
|
163
|
+
// If still not available, try the last active language or default language
|
164
|
+
if (!translation && this.lastActiveLang) {
|
165
|
+
translation = get(this.translationCache, `${this.lastActiveLang}.${scope}.${key}`);
|
166
|
+
}
|
167
|
+
if (!translation) {
|
168
|
+
translation = get(this.translationCache, `${this.getDefaultLang()}.${scope}.${key}`);
|
169
|
+
}
|
170
|
+
// Perform parameter replacement
|
171
|
+
return this.getTranslation((translation || key), lang, scope, options?.params);
|
172
|
+
}
|
155
173
|
translateSync(key, options) {
|
156
174
|
const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options || {};
|
157
175
|
// Check if the translation for the active language is available
|
@@ -164,8 +182,8 @@ class AXTranslationService {
|
|
164
182
|
if (!translation) {
|
165
183
|
translation = get(this.translationCache, `${this.getDefaultLang()}.${scope}.${key}`);
|
166
184
|
}
|
167
|
-
//
|
168
|
-
return translation ||
|
185
|
+
// Perform parameter replacement
|
186
|
+
return this.getTranslation((translation || key), lang, scope, options?.params);
|
169
187
|
}
|
170
188
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
171
189
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: AXTranslationService, providedIn: 'root' }); }
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../libs/core/translation/src/lib/translation.config.ts","../../../../libs/core/translation/src/lib/translation.loader.ts","../../../../libs/core/translation/src/lib/translation.service.ts","../../../../libs/core/translation/src/lib/translator.pipe.ts","../../../../libs/core/translation/src/lib/translator.directive.ts","../../../../libs/core/translation/src/lib/translation.module.ts","../../../../libs/core/translation/src/lib/translation-scope.resolver.ts","../../../../libs/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { AXTranslateLang, AXTranslateScope } from \"./translation.types\";\n\n\n\nexport interface AXTranslationConfig {\n defaultLang: AXTranslateLang,\n defaultScope: AXTranslateScope,\n preloadLangs?: AXTranslateLang[],\n preloadScopes?: AXTranslateLang[],\n availableLangs?: AXTranslateLang[],\n scopeResolverKey: string\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaultLang: 'en',\n defaultScope: 'common',\n scopeResolverKey: 'scope',\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from \"./translation.types\";\nimport { Observable, of } from \"rxjs\";\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang,\n scope?: AXTranslateScope;\n}\n\n\nexport interface AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, catchError, finalize, forkJoin, map, of, shareReplay, startWith, switchMap, tap } from 'rxjs';\nimport { AXTranslateHashMap, AXTranslateOptions, AXTranslateParams } from './translation.types';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { set as lodashSet, get as lodashGet } from 'lodash-es';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXEventService, AXEventTypes } from '@acorex/core/events';\n\n\nlet service: AXTranslationService;\n\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return service.translateSync(key, options);\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationService {\n\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n\n private eventService = inject(AXEventService);\n\n\n private translationCache: AXTranslateHashMap<AXTranslateHashMap<string>> = {};\n private ongoingRequests: Map<string, Observable<any>> = new Map();\n\n private activeLang: BehaviorSubject<string> = new BehaviorSubject<string>(this.getDefaultLang());\n langChanges$: Observable<string> = this.activeLang.asObservable();\n\n private lastActiveLang: string | null = null;\n\n\n /**\n * @ignore\n */\n constructor() {\n service = this;\n }\n\n\n public loadLanguagesAndScopes(languages: string[], scopes: string[]): Observable<unknown> {\n const requests = languages.flatMap(lang =>\n scopes.map(scope => {\n // Check if translations are already cached\n if (this.translationCache[lang]?.[scope]) {\n return of(this.translationCache[lang][scope]);\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.getOrLoadTranslations(lang, scope);\n })\n );\n\n return forkJoin(requests);\n }\n\n\n private getOrLoadTranslations(lang: string, scope: string): Observable<AXTranslateHashMap<string>> {\n const requestKey = `${lang}_${scope}`;\n\n // Return existing observable if the request is already in progress\n if (this.ongoingRequests.has(requestKey)) {\n return this.ongoingRequests.get(requestKey);\n }\n\n // Load translations if not in cache or ongoing requests\n const translationObservable = this.loader.getTranslation({ lang, scope }).pipe(\n tap(translations => this.cacheTranslations(lang, scope, translations)),\n catchError(error => {\n console.error(`Error loading translations for lang: ${lang}, scope: ${scope}`, error);\n return of(null);\n }),\n finalize(() => {\n this.eventService.emitEvent({ type: AXEventTypes.AXLanguageLoaded, payload: lang });\n this.ongoingRequests.delete(requestKey);\n }),\n shareReplay(1)\n );\n\n this.ongoingRequests.set(requestKey, translationObservable);\n return translationObservable;\n }\n\n private cacheTranslations(lang: string, scope: string, translations: AXTranslateHashMap<string>): void {\n lodashSet(this.translationCache, `${lang}.${scope}`, translations);\n }\n\n public getDefaultLang(): string {\n return this.config.defaultLang;\n }\n\n public getActiveLang(): string {\n return this.activeLang.getValue();\n }\n\n public setActiveLang(lang: string): void {\n if (lang != this.getActiveLang()) {\n this.lastActiveLang = this.getActiveLang(); // Update last active language\n this.activeLang.next(lang);\n this.eventService.emitEvent({ type: AXEventTypes.AXLanguageChanged, payload: lang });\n }\n }\n\n private load(key: string, options: AXTranslateOptions = {}): Observable<string> {\n const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options;\n\n // Function to fetch translation\n const fetchTranslation = (language: string): Observable<string> => {\n // Check if translations are available in the cache\n if (this.translationCache[language]?.[scope]) {\n return of(this.getTranslation(key, language, scope, options.params));\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.getOrLoadTranslations(language, scope).pipe(\n map(() => {\n const translation = this.translationCache[language]?.[scope]?.[key] || key;\n return this.getTranslation(translation, language, scope, options.params);\n }),\n switchMap(translatedText => {\n if (translatedText === key && language !== this.getDefaultLang()) {\n // If the translation is not found and the language is not default,\n // try fetching from the default language\n return fetchTranslation(this.getDefaultLang());\n }\n return of(translatedText);\n })\n );\n };\n\n // First, try to fetch the translation for the requested language\n const translationForRequestedLang = fetchTranslation(lang);\n\n // If lastActiveLang is available and different from the requested language, use it as a fallback\n if (this.lastActiveLang && this.lastActiveLang !== lang) {\n const translationForLastActiveLang = this.getTranslation(key, this.lastActiveLang, scope, options.params);\n return translationForRequestedLang.pipe(\n startWith(translationForLastActiveLang)\n );\n }\n\n return translationForRequestedLang;\n }\n\n private getTranslation(key: string, lang: string, scope: string, params?: AXTranslateParams): string {\n let translation: string = (lodashGet(this.translationCache, `${lang}.${scope}.${key}`) || key) as string\n\n // Replace params like {{ name }}\n if (params) {\n Object.keys(params).forEach(paramKey => {\n const paramValue = params[paramKey] as string;\n translation = translation.replace(new RegExp(`{{\\\\s*${paramKey}\\\\s*}}`, 'g'), paramValue);\n });\n }\n\n // Replace translations like {{ t('key') }}\n const translationPattern = /{{\\s*t\\('([^']+)'\\)\\s*}}/g;\n translation = translation.replace(translationPattern, (match, innerKey) => {\n return this.getTranslation(innerKey, lang, scope, params);\n });\n\n return translation;\n }\n\n public translate(key: string, options?: AXTranslateOptions): Observable<string> {\n if (options?.lang) {\n return this.load(key, options)\n }\n return this.langChanges$.pipe(\n switchMap((lang) => {\n return this.load(key, { ...options, lang: lang })\n })\n );\n }\n\n public translateSync(key: string, options?: AXTranslateOptions): string {\n const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options || {};\n\n // Check if the translation for the active language is available\n let translation = lodashGet(this.translationCache, `${lang}.${scope}.${key}`)\n\n // If not available, check lastActiveLang\n if (!translation && this.lastActiveLang) {\n translation = lodashGet(this.translationCache, `${this.lastActiveLang}.${scope}.${key}`)\n }\n\n // If still not available, use the default language\n if (!translation) {\n translation = lodashGet(this.translationCache, `${this.getDefaultLang()}.${scope}.${key}`)\n }\n\n // If no translation found, return the key\n return translation as any || this.getTranslation(key, lang, scope, options?.params);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AXTranslationService } from './translation.service';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateOptions } from './translation.types';\n\n\n\n\n@Pipe({ name: 'translate', pure: true }) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n\n constructor(private service: AXTranslationService) { }\n\n transform(key: string, options?: AXTranslateOptions): Observable<string> {\n if (!key) {\n return of(''); // Return an empty observable if the key is not provided\n }\n return this.service.translate(key, options);\n }\n}\n","import { Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef, ViewContainerRef, inject } from \"@angular/core\";\nimport { AXTranslationService } from \"./translation.service\";\nimport { AXTranslateOptions } from \"./translation.types\";\n\n@Directive({\n selector: '[translate]',\n})\nexport class AXTranslatorDirective implements OnInit {\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private translationService: AXTranslationService\n ) { }\n\n ngOnInit() {\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView(this.templateRef, {\n $implicit: (key: string, options?: AXTranslateOptions) => {\n return this.translationService.translate(key, options)\n }\n });\n }\n}","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { AXTranslatorPipe } from './translator.pipe';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslationService } from './translation.service';\nimport { Observable } from 'rxjs';\nimport { AXTranslationConfig, AX_TRANSLATION_CONFIG } from './translation.config';\n\n\nfunction initializeApp(translatorService: AXTranslationService, config: AXTranslationConfig) {\n return (): Observable<any> => {\n return translatorService.loadLanguagesAndScopes(\n config.preloadLangs ?? [config.defaultLang],\n config.preloadScopes ?? [config.defaultScope])\n };\n}\n\n@NgModule({\n imports: [],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n declarations: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AXTranslationService, AX_TRANSLATION_CONFIG],\n multi: true\n }\n ],\n})\nexport class AXTranslationModule { }\n","import { inject } from \"@angular/core\";\nimport { AXTranslationService } from \"./translation.service\";\nimport { ResolveFn } from \"@angular/router\";\nimport { AX_TRANSLATION_CONFIG } from \"./translation.config\";\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translatorService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.scopeResolverKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translatorService.loadLanguagesAndScopes([translatorService.getActiveLang()], scopes);\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["lodashSet","lodashGet","i1.AXTranslationService"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../libs/core/translation/src/lib/translation.config.ts","../../../../libs/core/translation/src/lib/translation.loader.ts","../../../../libs/core/translation/src/lib/translation.service.ts","../../../../libs/core/translation/src/lib/translator.pipe.ts","../../../../libs/core/translation/src/lib/translator.directive.ts","../../../../libs/core/translation/src/lib/translation.module.ts","../../../../libs/core/translation/src/lib/translation-scope.resolver.ts","../../../../libs/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\nimport { AXTranslateLang, AXTranslateScope } from \"./translation.types\";\n\n\n\nexport interface AXTranslationConfig {\n defaultLang: AXTranslateLang,\n defaultScope: AXTranslateScope,\n preloadLangs?: AXTranslateLang[],\n preloadScopes?: AXTranslateLang[],\n availableLangs?: AXTranslateLang[],\n scopeResolverKey: string\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaultLang: 'en',\n defaultScope: 'common',\n scopeResolverKey: 'scope',\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from \"@angular/core\";\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from \"./translation.types\";\nimport { Observable, of } from \"rxjs\";\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang,\n scope?: AXTranslateScope;\n}\n\n\nexport interface AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n getTranslation(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});","import { Injectable, inject } from '@angular/core';\nimport { BehaviorSubject, Observable, catchError, finalize, firstValueFrom, forkJoin, map, of, shareReplay, startWith, switchMap, take, tap } from 'rxjs';\nimport { AXTranslateHashMap, AXTranslateOptions, AXTranslateParams } from './translation.types';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { set as lodashSet, get as lodashGet } from 'lodash-es';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXEventService, AXEventTypes } from '@acorex/core/events';\n\n\nlet service: AXTranslationService;\n\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return service.translateSync(key, options);\n}\n\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationService {\n\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n\n private eventService = inject(AXEventService);\n\n\n private translationCache: AXTranslateHashMap<AXTranslateHashMap<string>> = {};\n private ongoingRequests: Map<string, Observable<any>> = new Map();\n\n private activeLang: BehaviorSubject<string> = new BehaviorSubject<string>(this.getDefaultLang());\n langChanges$: Observable<string> = this.activeLang.asObservable();\n\n private lastActiveLang: string | null = null;\n\n\n /**\n * @ignore\n */\n constructor() {\n service = this;\n }\n\n\n public loadLanguagesAndScopes(languages: string[], scopes: string[]): Observable<unknown> {\n const requests = languages.flatMap(lang =>\n scopes.map(scope => {\n // Check if translations are already cached\n if (this.translationCache[lang]?.[scope]) {\n return of(this.translationCache[lang][scope]);\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.getOrLoadTranslations(lang, scope);\n })\n );\n\n return forkJoin(requests);\n }\n\n\n private getOrLoadTranslations(lang: string, scope: string): Observable<AXTranslateHashMap<string>> {\n const requestKey = `${lang}_${scope}`;\n\n // Return existing observable if the request is already in progress\n if (this.ongoingRequests.has(requestKey)) {\n return this.ongoingRequests.get(requestKey);\n }\n\n // Load translations if not in cache or ongoing requests\n const translationObservable = this.loader.getTranslation({ lang, scope }).pipe(\n tap(translations => this.cacheTranslations(lang, scope, translations)),\n catchError(error => {\n console.error(`Error loading translations for lang: ${lang}, scope: ${scope}`, error);\n return of(null);\n }),\n finalize(() => {\n this.eventService.emitEvent({ type: AXEventTypes.AXLanguageLoaded, payload: lang });\n this.ongoingRequests.delete(requestKey);\n }),\n shareReplay(1)\n );\n\n this.ongoingRequests.set(requestKey, translationObservable);\n return translationObservable;\n }\n\n private cacheTranslations(lang: string, scope: string, translations: AXTranslateHashMap<string>): void {\n lodashSet(this.translationCache, `${lang}.${scope}`, translations);\n }\n\n public getDefaultLang(): string {\n return this.config.defaultLang;\n }\n\n public getActiveLang(): string {\n return this.activeLang.getValue();\n }\n\n public setActiveLang(lang: string): void {\n if (lang != this.getActiveLang()) {\n this.lastActiveLang = this.getActiveLang(); // Update last active language\n this.activeLang.next(lang);\n this.eventService.emitEvent({ type: AXEventTypes.AXLanguageChanged, payload: lang });\n }\n }\n\n private load(key: string, options: AXTranslateOptions = {}): Observable<string> {\n const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options;\n\n // Function to fetch translation\n const fetchTranslation = (language: string): Observable<string> => {\n // Check if translations are available in the cache\n if (this.translationCache[language]?.[scope]) {\n return of(this.getTranslation(key, language, scope, options.params));\n }\n\n // Use the new method to handle ongoing requests and loading\n return this.getOrLoadTranslations(language, scope).pipe(\n map(() => {\n const translation = this.translationCache[language]?.[scope]?.[key] || key;\n return this.getTranslation(translation, language, scope, options.params);\n }),\n switchMap(translatedText => {\n if (translatedText === key && language !== this.getDefaultLang()) {\n // If the translation is not found and the language is not default,\n // try fetching from the default language\n return fetchTranslation(this.getDefaultLang());\n }\n return of(translatedText);\n })\n );\n };\n\n // First, try to fetch the translation for the requested language\n const translationForRequestedLang = fetchTranslation(lang);\n\n // If lastActiveLang is available and different from the requested language, use it as a fallback\n if (this.lastActiveLang && this.lastActiveLang !== lang) {\n const translationForLastActiveLang = this.getTranslation(key, this.lastActiveLang, scope, options.params);\n return translationForRequestedLang.pipe(\n startWith(translationForLastActiveLang)\n );\n }\n\n return translationForRequestedLang;\n }\n\n private getTranslation(key: string, lang: string, scope: string, params?: AXTranslateParams): string {\n let translation: string = (lodashGet(this.translationCache, `${lang}.${scope}.${key}`) || key) as string\n\n // Replace params like {{ name }}\n if (params) {\n Object.keys(params).forEach(paramKey => {\n const paramValue = params[paramKey] as string;\n translation = translation.replace(new RegExp(`{{\\\\s*${paramKey}\\\\s*}}`, 'g'), paramValue);\n });\n }\n\n // Replace translations like {{ t('key') }}\n const translationPattern = /{{\\s*t\\('([^']+)'\\)\\s*}}/g;\n translation = translation.replace(translationPattern, (match, innerKey) => {\n return this.getTranslation(innerKey, lang, scope, params);\n });\n return translation;\n }\n\n public translate(key: string, options?: AXTranslateOptions): Observable<string> {\n if (options?.lang) {\n return this.load(key, options)\n }\n return this.langChanges$.pipe(\n startWith(this.getActiveLang()),\n switchMap((lang) => {\n return this.load(key, { ...options, lang: lang })\n })\n );\n }\n\n public async translateAsync(key: string, options?: AXTranslateOptions): Promise<string> {\n const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options || {};\n let translation = lodashGet(this.translationCache, `${lang}.${scope}.${key}`);\n\n if (!translation) {\n // If the translation is not in the cache, load it\n await firstValueFrom(this.load(key, { lang, scope }).pipe(take(1)));\n translation = lodashGet(this.translationCache, `${lang}.${scope}.${key}`);\n }\n\n // If still not available, try the last active language or default language\n if (!translation && this.lastActiveLang) {\n translation = lodashGet(this.translationCache, `${this.lastActiveLang}.${scope}.${key}`);\n }\n if (!translation) {\n translation = lodashGet(this.translationCache, `${this.getDefaultLang()}.${scope}.${key}`);\n }\n\n // Perform parameter replacement\n return this.getTranslation((translation || key) as any, lang, scope, options?.params);\n }\n\n public translateSync(key: string, options?: AXTranslateOptions): string {\n const { lang = this.getActiveLang(), scope = this.config.defaultScope } = options || {};\n\n // Check if the translation for the active language is available\n let translation = lodashGet(this.translationCache, `${lang}.${scope}.${key}`)\n\n // If not available, check lastActiveLang\n if (!translation && this.lastActiveLang) {\n translation = lodashGet(this.translationCache, `${this.lastActiveLang}.${scope}.${key}`)\n }\n\n // If still not available, use the default language\n if (!translation) {\n translation = lodashGet(this.translationCache, `${this.getDefaultLang()}.${scope}.${key}`)\n }\n\n // Perform parameter replacement\n return this.getTranslation((translation || key) as any, lang, scope, options?.params);\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { AXTranslationService } from './translation.service';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateOptions } from './translation.types';\n\n\n\n\n@Pipe({ name: 'translate', pure: true }) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n\n constructor(private service: AXTranslationService) { }\n\n transform(key: string, options?: AXTranslateOptions): Observable<string> {\n if (!key) {\n return of(''); // Return an empty observable if the key is not provided\n }\n return this.service.translate(key, options);\n }\n}\n","import { Directive, OnInit, TemplateRef, ViewContainerRef } from \"@angular/core\";\nimport { AXTranslationService } from \"./translation.service\";\nimport { AXTranslateOptions } from \"./translation.types\";\n\n@Directive({\n selector: '[translate]',\n})\nexport class AXTranslatorDirective implements OnInit {\n\n constructor(\n private templateRef: TemplateRef<any>,\n private viewContainer: ViewContainerRef,\n private translationService: AXTranslationService\n ) { }\n\n ngOnInit() {\n this.viewContainer.clear();\n this.viewContainer.createEmbeddedView(this.templateRef, {\n $implicit: (key: string, options?: AXTranslateOptions) => {\n return this.translationService.translate(key, options)\n }\n });\n }\n}","import { APP_INITIALIZER, NgModule } from '@angular/core';\nimport { AXTranslatorPipe } from './translator.pipe';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslationService } from './translation.service';\nimport { Observable } from 'rxjs';\nimport { AXTranslationConfig, AX_TRANSLATION_CONFIG } from './translation.config';\n\n\nfunction initializeApp(translatorService: AXTranslationService, config: AXTranslationConfig) {\n return (): Observable<any> => {\n return translatorService.loadLanguagesAndScopes(\n config.preloadLangs ?? [config.defaultLang],\n config.preloadScopes ?? [config.defaultScope])\n };\n}\n\n@NgModule({\n imports: [],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n declarations: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n {\n provide: APP_INITIALIZER,\n useFactory: initializeApp,\n deps: [AXTranslationService, AX_TRANSLATION_CONFIG],\n multi: true\n }\n ],\n})\nexport class AXTranslationModule { }\n","import { inject } from \"@angular/core\";\nimport { AXTranslationService } from \"./translation.service\";\nimport { ResolveFn } from \"@angular/router\";\nimport { AX_TRANSLATION_CONFIG } from \"./translation.config\";\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translatorService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.scopeResolverKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translatorService.loadLanguagesAndScopes([translatorService.getActiveLang()], scopes);\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["lodashSet","lodashGet","i1.AXTranslationService"],"mappings":"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"}
|