@taon-dev/i18n 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERIFIED-BUILD-DATA.jsonc +5 -0
- package/assets/shared/shared_folder_info.txt +7 -0
- package/bin/i18n +5 -0
- package/bin/i18n-debug +5 -0
- package/bin/i18n-debug-brk +4 -0
- package/bin/start.js +38 -0
- package/browser/README.md +24 -0
- package/browser/fesm2022/i18n-browser.mjs +521 -0
- package/browser/fesm2022/i18n-browser.mjs.map +1 -0
- package/browser/package.json +23 -0
- package/browser/types/i18n-browser.d.ts +353 -0
- package/browser-prod/README.md +24 -0
- package/browser-prod/fesm2022/i18n-browser-prod.mjs +521 -0
- package/browser-prod/fesm2022/i18n-browser-prod.mjs.map +1 -0
- package/browser-prod/package.json +23 -0
- package/browser-prod/types/i18n-browser-prod.d.ts +353 -0
- package/browser-prod.re-export.json +1 -0
- package/browser-prod.split-namespaces.json +4 -0
- package/cli.d.ts +1 -0
- package/cli.js +8 -0
- package/cli.js.map +1 -0
- package/html/assets/generated/pwa/html-pwa.html +60 -0
- package/html/imports.html +3 -0
- package/index.d.ts +3 -0
- package/index.js +20 -0
- package/index.js.map +1 -0
- package/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib/build-info._auto-generated_.js +30 -0
- package/lib/build-info._auto-generated_.js.map +1 -0
- package/lib/env/env.angular-node-app.d.ts +67 -0
- package/lib/env/env.angular-node-app.js +141 -0
- package/lib/env/env.angular-node-app.js.map +1 -0
- package/lib/env/env.docs-webapp.d.ts +67 -0
- package/lib/env/env.docs-webapp.js +141 -0
- package/lib/env/env.docs-webapp.js.map +1 -0
- package/lib/env/env.electron-app.d.ts +67 -0
- package/lib/env/env.electron-app.js +141 -0
- package/lib/env/env.electron-app.js.map +1 -0
- package/lib/env/env.mobile-app.d.ts +67 -0
- package/lib/env/env.mobile-app.js +141 -0
- package/lib/env/env.mobile-app.js.map +1 -0
- package/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib/env/env.npm-lib-and-cli-tool.js +141 -0
- package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib/env/env.vscode-plugin.d.ts +67 -0
- package/lib/env/env.vscode-plugin.js +141 -0
- package/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib/env/index.d.ts +6 -0
- package/lib/env/index.js +23 -0
- package/lib/env/index.js.map +1 -0
- package/lib/features/index.d.ts +4 -0
- package/lib/features/index.js +21 -0
- package/lib/features/index.js.map +1 -0
- package/lib/features/types.d.ts +4 -0
- package/lib/features/types.js +3 -0
- package/lib/features/types.js.map +1 -0
- package/lib/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib/features/withLanguageLocalStorageSync.js +39 -0
- package/lib/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib/features/withNavigatorLanguage.d.ts +6 -0
- package/lib/features/withNavigatorLanguage.js +29 -0
- package/lib/features/withNavigatorLanguage.js.map +1 -0
- package/lib/features/withPreloadScopes.d.ts +8 -0
- package/lib/features/withPreloadScopes.js +25 -0
- package/lib/features/withPreloadScopes.js.map +1 -0
- package/lib/features/withServerSideLanguage.d.ts +6 -0
- package/lib/features/withServerSideLanguage.js +29 -0
- package/lib/features/withServerSideLanguage.js.map +1 -0
- package/lib/features/withTranslatedTitle.d.ts +34 -0
- package/lib/features/withTranslatedTitle.js +69 -0
- package/lib/features/withTranslatedTitle.js.map +1 -0
- package/lib/index._auto-generated_.d.ts +16 -0
- package/lib/index._auto-generated_.js +38 -0
- package/lib/index._auto-generated_.js.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +20 -0
- package/lib/index.js.map +1 -0
- package/lib/internals.d.ts +2 -0
- package/lib/internals.js +6 -0
- package/lib/internals.js.map +1 -0
- package/lib/package.json +4 -0
- package/lib/start-cli.d.ts +7 -0
- package/lib/start-cli.js +46 -0
- package/lib/start-cli.js.map +1 -0
- package/lib/transignal-config.d.ts +34 -0
- package/lib/transignal-config.js +42 -0
- package/lib/transignal-config.js.map +1 -0
- package/lib/transignal-param-handlers.d.ts +11 -0
- package/lib/transignal-param-handlers.js +31 -0
- package/lib/transignal-param-handlers.js.map +1 -0
- package/lib/transignal-service.d.ts +32 -0
- package/lib/transignal-service.js +206 -0
- package/lib/transignal-service.js.map +1 -0
- package/lib/transignal-testing.d.ts +8 -0
- package/lib/transignal-testing.js +14 -0
- package/lib/transignal-testing.js.map +1 -0
- package/lib/types.d.ts +124 -0
- package/lib/types.js +3 -0
- package/lib/types.js.map +1 -0
- package/lib/utility-types.d.ts +29 -0
- package/lib/utility-types.js +3 -0
- package/lib/utility-types.js.map +1 -0
- package/lib/utils.d.ts +15 -0
- package/lib/utils.js +20 -0
- package/lib/utils.js.map +1 -0
- package/lib-esm/app.d.ts +3 -0
- package/lib-esm/app.electron.d.ts +1 -0
- package/lib-esm/app.electron.js +2 -0
- package/lib-esm/app.electron.js.map +1 -0
- package/lib-esm/app.hosts.d.ts +95 -0
- package/lib-esm/app.hosts.js +157 -0
- package/lib-esm/app.hosts.js.map +1 -0
- package/lib-esm/app.js +460 -0
- package/lib-esm/app.js.map +1 -0
- package/lib-esm/app.vscode.d.ts +9 -0
- package/lib-esm/app.vscode.js +37 -0
- package/lib-esm/app.vscode.js.map +1 -0
- package/lib-esm/cli.d.ts +1 -0
- package/lib-esm/cli.js +4 -0
- package/lib-esm/cli.js.map +1 -0
- package/lib-esm/index.d.ts +3 -0
- package/lib-esm/index.js +4 -0
- package/lib-esm/index.js.map +1 -0
- package/lib-esm/lib/build-info._auto-generated_.d.ts +24 -0
- package/lib-esm/lib/build-info._auto-generated_.js +27 -0
- package/lib-esm/lib/build-info._auto-generated_.js.map +1 -0
- package/lib-esm/lib/env/env.angular-node-app.d.ts +67 -0
- package/lib-esm/lib/env/env.angular-node-app.js +137 -0
- package/lib-esm/lib/env/env.angular-node-app.js.map +1 -0
- package/lib-esm/lib/env/env.docs-webapp.d.ts +67 -0
- package/lib-esm/lib/env/env.docs-webapp.js +137 -0
- package/lib-esm/lib/env/env.docs-webapp.js.map +1 -0
- package/lib-esm/lib/env/env.electron-app.d.ts +67 -0
- package/lib-esm/lib/env/env.electron-app.js +137 -0
- package/lib-esm/lib/env/env.electron-app.js.map +1 -0
- package/lib-esm/lib/env/env.mobile-app.d.ts +67 -0
- package/lib-esm/lib/env/env.mobile-app.js +137 -0
- package/lib-esm/lib/env/env.mobile-app.js.map +1 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +137 -0
- package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-esm/lib/env/env.vscode-plugin.d.ts +67 -0
- package/lib-esm/lib/env/env.vscode-plugin.js +137 -0
- package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -0
- package/lib-esm/lib/env/index.d.ts +6 -0
- package/lib-esm/lib/env/index.js +7 -0
- package/lib-esm/lib/env/index.js.map +1 -0
- package/lib-esm/lib/features/index.d.ts +4 -0
- package/lib-esm/lib/features/index.js +5 -0
- package/lib-esm/lib/features/index.js.map +1 -0
- package/lib-esm/lib/features/types.d.ts +4 -0
- package/lib-esm/lib/features/types.js +2 -0
- package/lib-esm/lib/features/types.js.map +1 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.js +35 -0
- package/lib-esm/lib/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib-esm/lib/features/withNavigatorLanguage.d.ts +6 -0
- package/lib-esm/lib/features/withNavigatorLanguage.js +25 -0
- package/lib-esm/lib/features/withNavigatorLanguage.js.map +1 -0
- package/lib-esm/lib/features/withPreloadScopes.d.ts +8 -0
- package/lib-esm/lib/features/withPreloadScopes.js +21 -0
- package/lib-esm/lib/features/withPreloadScopes.js.map +1 -0
- package/lib-esm/lib/features/withServerSideLanguage.d.ts +6 -0
- package/lib-esm/lib/features/withServerSideLanguage.js +25 -0
- package/lib-esm/lib/features/withServerSideLanguage.js.map +1 -0
- package/lib-esm/lib/features/withTranslatedTitle.d.ts +34 -0
- package/lib-esm/lib/features/withTranslatedTitle.js +65 -0
- package/lib-esm/lib/features/withTranslatedTitle.js.map +1 -0
- package/lib-esm/lib/index._auto-generated_.d.ts +16 -0
- package/lib-esm/lib/index._auto-generated_.js +22 -0
- package/lib-esm/lib/index._auto-generated_.js.map +1 -0
- package/lib-esm/lib/index.d.ts +4 -0
- package/lib-esm/lib/index.js +4 -0
- package/lib-esm/lib/index.js.map +1 -0
- package/lib-esm/lib/internals.d.ts +2 -0
- package/lib-esm/lib/internals.js +3 -0
- package/lib-esm/lib/internals.js.map +1 -0
- package/lib-esm/lib/start-cli.d.ts +7 -0
- package/lib-esm/lib/start-cli.js +43 -0
- package/lib-esm/lib/start-cli.js.map +1 -0
- package/lib-esm/lib/transignal-config.d.ts +34 -0
- package/lib-esm/lib/transignal-config.js +36 -0
- package/lib-esm/lib/transignal-config.js.map +1 -0
- package/lib-esm/lib/transignal-param-handlers.d.ts +11 -0
- package/lib-esm/lib/transignal-param-handlers.js +25 -0
- package/lib-esm/lib/transignal-param-handlers.js.map +1 -0
- package/lib-esm/lib/transignal-service.d.ts +32 -0
- package/lib-esm/lib/transignal-service.js +197 -0
- package/lib-esm/lib/transignal-service.js.map +1 -0
- package/lib-esm/lib/transignal-testing.d.ts +8 -0
- package/lib-esm/lib/transignal-testing.js +10 -0
- package/lib-esm/lib/transignal-testing.js.map +1 -0
- package/lib-esm/lib/types.d.ts +124 -0
- package/lib-esm/lib/types.js +2 -0
- package/lib-esm/lib/types.js.map +1 -0
- package/lib-esm/lib/utility-types.d.ts +29 -0
- package/lib-esm/lib/utility-types.js +2 -0
- package/lib-esm/lib/utility-types.js.map +1 -0
- package/lib-esm/lib/utils.d.ts +15 -0
- package/lib-esm/lib/utils.js +15 -0
- package/lib-esm/lib/utils.js.map +1 -0
- package/lib-prod/build-info._auto-generated_.d.ts +24 -0
- package/lib-prod/build-info._auto-generated_.js +27 -0
- package/lib-prod/build-info._auto-generated_.js.map +1 -0
- package/lib-prod/env/env.angular-node-app.d.ts +67 -0
- package/lib-prod/env/env.angular-node-app.js +137 -0
- package/lib-prod/env/env.angular-node-app.js.map +1 -0
- package/lib-prod/env/env.docs-webapp.d.ts +67 -0
- package/lib-prod/env/env.docs-webapp.js +137 -0
- package/lib-prod/env/env.docs-webapp.js.map +1 -0
- package/lib-prod/env/env.electron-app.d.ts +67 -0
- package/lib-prod/env/env.electron-app.js +137 -0
- package/lib-prod/env/env.electron-app.js.map +1 -0
- package/lib-prod/env/env.mobile-app.d.ts +67 -0
- package/lib-prod/env/env.mobile-app.js +137 -0
- package/lib-prod/env/env.mobile-app.js.map +1 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +67 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js +137 -0
- package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -0
- package/lib-prod/env/env.vscode-plugin.d.ts +67 -0
- package/lib-prod/env/env.vscode-plugin.js +137 -0
- package/lib-prod/env/env.vscode-plugin.js.map +1 -0
- package/lib-prod/env/index.d.ts +6 -0
- package/lib-prod/env/index.js +7 -0
- package/lib-prod/env/index.js.map +1 -0
- package/lib-prod/features/index.d.ts +4 -0
- package/lib-prod/features/index.js +5 -0
- package/lib-prod/features/index.js.map +1 -0
- package/lib-prod/features/types.d.ts +4 -0
- package/lib-prod/features/types.js +2 -0
- package/lib-prod/features/types.js.map +1 -0
- package/lib-prod/features/withLanguageLocalStorageSync.d.ts +9 -0
- package/lib-prod/features/withLanguageLocalStorageSync.js +35 -0
- package/lib-prod/features/withLanguageLocalStorageSync.js.map +1 -0
- package/lib-prod/features/withNavigatorLanguage.d.ts +6 -0
- package/lib-prod/features/withNavigatorLanguage.js +25 -0
- package/lib-prod/features/withNavigatorLanguage.js.map +1 -0
- package/lib-prod/features/withPreloadScopes.d.ts +8 -0
- package/lib-prod/features/withPreloadScopes.js +21 -0
- package/lib-prod/features/withPreloadScopes.js.map +1 -0
- package/lib-prod/features/withServerSideLanguage.d.ts +6 -0
- package/lib-prod/features/withServerSideLanguage.js +25 -0
- package/lib-prod/features/withServerSideLanguage.js.map +1 -0
- package/lib-prod/features/withTranslatedTitle.d.ts +34 -0
- package/lib-prod/features/withTranslatedTitle.js +65 -0
- package/lib-prod/features/withTranslatedTitle.js.map +1 -0
- package/lib-prod/index._auto-generated_.d.ts +16 -0
- package/lib-prod/index._auto-generated_.js +22 -0
- package/lib-prod/index._auto-generated_.js.map +1 -0
- package/lib-prod/index.d.ts +4 -0
- package/lib-prod/index.js +4 -0
- package/lib-prod/index.js.map +1 -0
- package/lib-prod/internals.d.ts +2 -0
- package/lib-prod/internals.js +3 -0
- package/lib-prod/internals.js.map +1 -0
- package/lib-prod/package.json +4 -0
- package/lib-prod/start-cli.d.ts +7 -0
- package/lib-prod/start-cli.js +43 -0
- package/lib-prod/start-cli.js.map +1 -0
- package/lib-prod/transignal-config.d.ts +34 -0
- package/lib-prod/transignal-config.js +36 -0
- package/lib-prod/transignal-config.js.map +1 -0
- package/lib-prod/transignal-param-handlers.d.ts +11 -0
- package/lib-prod/transignal-param-handlers.js +25 -0
- package/lib-prod/transignal-param-handlers.js.map +1 -0
- package/lib-prod/transignal-service.d.ts +32 -0
- package/lib-prod/transignal-service.js +197 -0
- package/lib-prod/transignal-service.js.map +1 -0
- package/lib-prod/transignal-testing.d.ts +8 -0
- package/lib-prod/transignal-testing.js +10 -0
- package/lib-prod/transignal-testing.js.map +1 -0
- package/lib-prod/types.d.ts +124 -0
- package/lib-prod/types.js +2 -0
- package/lib-prod/types.js.map +1 -0
- package/lib-prod/utility-types.d.ts +29 -0
- package/lib-prod/utility-types.js +2 -0
- package/lib-prod/utility-types.js.map +1 -0
- package/lib-prod/utils.d.ts +15 -0
- package/lib-prod/utils.js +15 -0
- package/lib-prod/utils.js.map +1 -0
- package/lib-prod.re-export.json +1 -0
- package/lib-prod.split-namespaces.json +4 -0
- package/package.json +39 -0
- package/scss/global.scss +94 -0
- package/scss/index.scss +2 -0
- package/scss/lib/index.scss +2 -0
- package/scss/vars.scss +7 -0
- package/src.d.ts +6 -0
- package/src.js +4 -0
- package/websql/README.md +24 -0
- package/websql/fesm2022/i18n-websql.mjs +521 -0
- package/websql/fesm2022/i18n-websql.mjs.map +1 -0
- package/websql/package.json +23 -0
- package/websql/types/i18n-websql.d.ts +353 -0
- package/websql-prod/README.md +24 -0
- package/websql-prod/fesm2022/i18n-websql-prod.mjs +521 -0
- package/websql-prod/fesm2022/i18n-websql-prod.mjs.map +1 -0
- package/websql-prod/package.json +23 -0
- package/websql-prod/types/i18n-websql-prod.d.ts +353 -0
- package/websql-prod.re-export.json +1 -0
- package/websql-prod.split-namespaces.json +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internals.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAAa,QAAA,0BAA0B,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAClE,QAAA,wBAAwB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC"}
|
package/lib/package.json
ADDED
package/lib/start-cli.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//#region tnp-helpers cli template
|
|
3
|
+
// import { Helpers, BaseCommandLineFeature } from 'tnp-helpers/src';
|
|
4
|
+
// import { BaseProject, BaseStartConfig } from 'tnp-helpers/src'; // @backend
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.startCli = startCli;
|
|
7
|
+
// class $Version extends BaseCommandLineFeature<{}> {
|
|
8
|
+
// public _() {
|
|
9
|
+
// console.log(`Hello world from cli`);
|
|
10
|
+
// this._exit();
|
|
11
|
+
// }
|
|
12
|
+
// }
|
|
13
|
+
//#endregion
|
|
14
|
+
/**
|
|
15
|
+
*
|
|
16
|
+
* @param argsv process.argsv
|
|
17
|
+
* @param filename needed if you want ipc communicaiton
|
|
18
|
+
*/
|
|
19
|
+
async function startCli(argsv, filename) {
|
|
20
|
+
//#region @backendFunc
|
|
21
|
+
console.log('Hello from cli');
|
|
22
|
+
console.log({ argsv });
|
|
23
|
+
process.exit(0);
|
|
24
|
+
//#region start config
|
|
25
|
+
// new BaseStartConfig({
|
|
26
|
+
// ProjectClass: BaseProject,
|
|
27
|
+
// functionsOrClasses: [
|
|
28
|
+
// {
|
|
29
|
+
// classOrFnName: '$Version',
|
|
30
|
+
// funcOrClass: $Version,
|
|
31
|
+
// },
|
|
32
|
+
// ],
|
|
33
|
+
// argsv,
|
|
34
|
+
// useStringArrForArgsFunctions: true,
|
|
35
|
+
// shortArgsReplaceConfig: {
|
|
36
|
+
// v: 'version',
|
|
37
|
+
// },
|
|
38
|
+
// callbackNotRecognizedCommand: async () => {
|
|
39
|
+
// Helpers.error(`Command not recognized`, false, true);
|
|
40
|
+
// },
|
|
41
|
+
// });
|
|
42
|
+
//#endregion
|
|
43
|
+
//#endregion
|
|
44
|
+
}
|
|
45
|
+
exports.default = startCli;
|
|
46
|
+
//# sourceMappingURL=start-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-cli.js","sourceRoot":"","sources":[""],"names":[],"mappings":";AAAA,kCAAkC;AAClC,qEAAqE;AACrE,8EAA8E;;AAe9E,4BA0BC;AAvCD,sDAAsD;AACtD,iBAAiB;AACjB,2CAA2C;AAC3C,oBAAoB;AACpB,MAAM;AACN,IAAI;AACJ,YAAY;AAEZ;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAAC,KAAe,EAAE,QAAgB;IAC9D,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAEhB,sBAAsB;IACtB,wBAAwB;IACxB,+BAA+B;IAC/B,0BAA0B;IAC1B,QAAQ;IACR,mCAAmC;IACnC,+BAA+B;IAC/B,SAAS;IACT,OAAO;IACP,WAAW;IACX,wCAAwC;IACxC,8BAA8B;IAC9B,oBAAoB;IACpB,OAAO;IACP,gDAAgD;IAChD,4DAA4D;IAC5D,OAAO;IACP,MAAM;IACN,YAAY;IACZ,YAAY;AACd,CAAC;AAED,kBAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { TransignalFeature } from './features/types';
|
|
3
|
+
import { INTERNAL_TRANSIGNAL_CONFIG } from './internals';
|
|
4
|
+
import { TransignalService } from './transignal-service';
|
|
5
|
+
import { TransignalConfig } from './types';
|
|
6
|
+
import { StringKeys } from './utility-types';
|
|
7
|
+
/**
|
|
8
|
+
* Utility function to define a type of translations for type inference
|
|
9
|
+
*/
|
|
10
|
+
export declare const treeShakedTranslations: <Translations extends Record<string, Record<string, unknown>>>() => Translations;
|
|
11
|
+
export declare const TRANSIGNAL_CONFIG: InjectionToken<unknown>;
|
|
12
|
+
/**
|
|
13
|
+
* Use to inject transignal config
|
|
14
|
+
*/
|
|
15
|
+
export declare const injectTransignalConfig: <Languages extends string, Translations extends Record<string, Record<string, unknown>>>() => TransignalConfig<Languages, Translations>;
|
|
16
|
+
/**
|
|
17
|
+
* Prepares type-safe transignal object
|
|
18
|
+
* @param config Transignal configruation {@link TransignalConfig}
|
|
19
|
+
* @param features Extra tree-shakeable features
|
|
20
|
+
* - {@link withPreloadScopes} - preloads selected scopes
|
|
21
|
+
* - {@link withServerSideLanguage} - sets language based on `document.lang` in SSR environment
|
|
22
|
+
* - {@link withNavigatorLanguage} - sets language based on `navigator.language` in browser environment
|
|
23
|
+
* - {@link withLanguageLocalStorageSync} - syncs language with localStorage
|
|
24
|
+
* - {@link withTranslatedTitle} - enables translation of page title
|
|
25
|
+
*/
|
|
26
|
+
export declare const prepareTransignal: <Languages extends string, Translations extends Record<string, Record<string, unknown>>>(config: TransignalConfig<Languages, Translations>, ...features: NoInfer<TransignalFeature<Languages, Translations>[]>) => {
|
|
27
|
+
[INTERNAL_TRANSIGNAL_CONFIG]: {
|
|
28
|
+
config: TransignalConfig<Languages, Translations>;
|
|
29
|
+
features: TransignalFeature<Languages, Translations>[];
|
|
30
|
+
};
|
|
31
|
+
provide: () => import("@angular/core", { with: { "resolution-mode": "import" } }).EnvironmentProviders;
|
|
32
|
+
service: () => TransignalService<Languages, Translations, StringKeys<Translations>>;
|
|
33
|
+
t: <Scope extends StringKeys<Translations>>(scope: Scope) => import("./types").TranslateObj<Translations[Scope]>;
|
|
34
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.prepareTransignal = exports.injectTransignalConfig = exports.TRANSIGNAL_CONFIG = exports.treeShakedTranslations = void 0;
|
|
4
|
+
const core_1 = require("@angular/core");
|
|
5
|
+
const internals_1 = require("./internals");
|
|
6
|
+
const transignal_service_1 = require("./transignal-service");
|
|
7
|
+
/**
|
|
8
|
+
* Utility function to define a type of translations for type inference
|
|
9
|
+
*/
|
|
10
|
+
const treeShakedTranslations = () => internals_1.TREE_SHAKED_TRANSLATIONS;
|
|
11
|
+
exports.treeShakedTranslations = treeShakedTranslations;
|
|
12
|
+
exports.TRANSIGNAL_CONFIG = new core_1.InjectionToken('TRANSIGNAL_CONFIG');
|
|
13
|
+
/**
|
|
14
|
+
* Use to inject transignal config
|
|
15
|
+
*/
|
|
16
|
+
const injectTransignalConfig = () => (0, core_1.inject)(exports.TRANSIGNAL_CONFIG);
|
|
17
|
+
exports.injectTransignalConfig = injectTransignalConfig;
|
|
18
|
+
/**
|
|
19
|
+
* Prepares type-safe transignal object
|
|
20
|
+
* @param config Transignal configruation {@link TransignalConfig}
|
|
21
|
+
* @param features Extra tree-shakeable features
|
|
22
|
+
* - {@link withPreloadScopes} - preloads selected scopes
|
|
23
|
+
* - {@link withServerSideLanguage} - sets language based on `document.lang` in SSR environment
|
|
24
|
+
* - {@link withNavigatorLanguage} - sets language based on `navigator.language` in browser environment
|
|
25
|
+
* - {@link withLanguageLocalStorageSync} - syncs language with localStorage
|
|
26
|
+
* - {@link withTranslatedTitle} - enables translation of page title
|
|
27
|
+
*/
|
|
28
|
+
const prepareTransignal = (config, ...features) => {
|
|
29
|
+
const service = () => (0, core_1.inject)(transignal_service_1.TransignalService);
|
|
30
|
+
return {
|
|
31
|
+
[internals_1.INTERNAL_TRANSIGNAL_CONFIG]: { config, features },
|
|
32
|
+
provide: () => (0, core_1.makeEnvironmentProviders)([
|
|
33
|
+
{ provide: exports.TRANSIGNAL_CONFIG, useValue: config },
|
|
34
|
+
transignal_service_1.TransignalService,
|
|
35
|
+
features.map(feature => feature.providers),
|
|
36
|
+
]),
|
|
37
|
+
service,
|
|
38
|
+
t: (scope) => service().t(scope),
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
exports.prepareTransignal = prepareTransignal;
|
|
42
|
+
//# sourceMappingURL=transignal-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transignal-config.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAAA,wCAAiF;AAGjF,2CAAmF;AACnF,6DAAyD;AAIzD;;GAEG;AACI,MAAM,sBAAsB,GAAG,GAElC,EAAE,CAAC,oCAAmD,CAAC;AAF9C,QAAA,sBAAsB,0BAEwB;AAE9C,QAAA,iBAAiB,GAAG,IAAI,qBAAc,CAAC,mBAAmB,CAAC,CAAC;AAEzE;;GAEG;AACI,MAAM,sBAAsB,GAAG,GAGlC,EAAE,CAAC,IAAA,aAAM,EAA4C,yBAAiB,CAAC,CAAC;AAH/D,QAAA,sBAAsB,0BAGyC;AAE5E;;;;;;;;;GASG;AACI,MAAM,iBAAiB,GAAG,CAI/B,MAAiD,EACjD,GAAG,QAA+D,EAClE,EAAE;IACF,MAAM,OAAO,GAAG,GAAG,EAAE,CACnB,IAAA,aAAM,EAAuE,sCAAiB,CAAC,CAAC;IAClG,OAAO;QACL,CAAC,sCAA0B,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;QAClD,OAAO,EAAE,GAAG,EAAE,CACZ,IAAA,+BAAwB,EAAC;YACvB,EAAE,OAAO,EAAE,yBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE;YAChD,sCAAiB;YACjB,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;SAC3C,CAAC;QACJ,OAAO;QACP,CAAC,EAAE,CAAyC,KAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;KAChF,CAAC;AACJ,CAAC,CAAC;AApBW,QAAA,iBAAiB,qBAoB5B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TranslateParams } from './types';
|
|
2
|
+
export type ParamHandler = (translation: string, params?: TranslateParams) => string;
|
|
3
|
+
/**
|
|
4
|
+
* Param handler which allows for specification of basic params: `{name}`
|
|
5
|
+
*
|
|
6
|
+
* @param translation Translated text
|
|
7
|
+
* @param params Params provided to translation function
|
|
8
|
+
*/
|
|
9
|
+
export declare const simpleParamsHandler: ParamHandler;
|
|
10
|
+
export declare const noParamsHandler: ParamHandler;
|
|
11
|
+
export declare const simpleParamValueStringify: (paramValue: unknown) => any;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.simpleParamValueStringify = exports.noParamsHandler = exports.simpleParamsHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Param handler which allows for specification of basic params: `{name}`
|
|
6
|
+
*
|
|
7
|
+
* @param translation Translated text
|
|
8
|
+
* @param params Params provided to translation function
|
|
9
|
+
*/
|
|
10
|
+
const simpleParamsHandler = (translation, params) => {
|
|
11
|
+
if (!params)
|
|
12
|
+
return translation;
|
|
13
|
+
for (const [key, value] of Object.entries(params)) {
|
|
14
|
+
translation = translation.replaceAll(`{${key}}`, (0, exports.simpleParamValueStringify)(value));
|
|
15
|
+
}
|
|
16
|
+
return translation;
|
|
17
|
+
};
|
|
18
|
+
exports.simpleParamsHandler = simpleParamsHandler;
|
|
19
|
+
const noParamsHandler = translation => translation;
|
|
20
|
+
exports.noParamsHandler = noParamsHandler;
|
|
21
|
+
const simpleParamValueStringify = (paramValue) => {
|
|
22
|
+
if (typeof paramValue === 'string') {
|
|
23
|
+
return paramValue;
|
|
24
|
+
}
|
|
25
|
+
if (paramValue == null) {
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
return paramValue.toString();
|
|
29
|
+
};
|
|
30
|
+
exports.simpleParamValueStringify = simpleParamValueStringify;
|
|
31
|
+
//# sourceMappingURL=transignal-param-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transignal-param-handlers.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAIA;;;;;GAKG;AACI,MAAM,mBAAmB,GAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE;IACvE,IAAI,CAAC,MAAM;QAAE,OAAO,WAAW,CAAC;IAChC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,WAAW,GAAG,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,EAAE,IAAA,iCAAyB,EAAC,KAAK,CAAC,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AANW,QAAA,mBAAmB,uBAM9B;AAEK,MAAM,eAAe,GAAiB,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC;AAA3D,QAAA,eAAe,mBAA4C;AAEjE,MAAM,yBAAyB,GAAG,CAAC,UAAmB,EAAE,EAAE;IAC/D,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QACnC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAQ,UAAkB,CAAC,QAAQ,EAAE,CAAC;AACxC,CAAC,CAAC;AARW,QAAA,yBAAyB,6BAQpC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { TranslateObj, TranslateParams } from './types';
|
|
2
|
+
import { StringKeys } from './utility-types';
|
|
3
|
+
/**
|
|
4
|
+
* Main transignal service, used to process and cache translations
|
|
5
|
+
* Can be injected directly or with use of transignal object created with {@link prepareTransignal} function (recommended)
|
|
6
|
+
*/
|
|
7
|
+
export declare class TransignalService<Languages extends string, Translations extends Record<string, Record<string, any>>, Scopes extends StringKeys<Translations>> {
|
|
8
|
+
private readonly injector;
|
|
9
|
+
private readonly config;
|
|
10
|
+
private readonly paramsHandler;
|
|
11
|
+
private readonly loadingFn;
|
|
12
|
+
private readonly errorHandler;
|
|
13
|
+
private readonly loadingCount;
|
|
14
|
+
private readonly scopeMap;
|
|
15
|
+
private readonly languageMap;
|
|
16
|
+
/**
|
|
17
|
+
* Use to set or get active language
|
|
18
|
+
*/
|
|
19
|
+
readonly activeLang: import("@angular/core", { with: { "resolution-mode": "import" } }).WritableSignal<Languages>;
|
|
20
|
+
/**
|
|
21
|
+
* Use to determine whether service is currently loading translation files
|
|
22
|
+
*/
|
|
23
|
+
readonly isLoading: import("@angular/core", { with: { "resolution-mode": "import" } }).Signal<boolean>;
|
|
24
|
+
t<Scope extends Scopes>(scope: Scope): TranslateObj<Translations[Scope]>;
|
|
25
|
+
private initT;
|
|
26
|
+
private preparePrefixFn;
|
|
27
|
+
private preparePluralFn;
|
|
28
|
+
private prepareSelectFn;
|
|
29
|
+
protected replaceParams<T>(translation: T, params?: TranslateParams): T;
|
|
30
|
+
private fetchLanguage;
|
|
31
|
+
private resolveObjectPath;
|
|
32
|
+
}
|
|
@@ -0,0 +1,206 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TransignalService = void 0;
|
|
10
|
+
const core_1 = require("@angular/core");
|
|
11
|
+
const internals_1 = require("./internals");
|
|
12
|
+
const transignal_config_1 = require("./transignal-config");
|
|
13
|
+
const transignal_param_handlers_1 = require("./transignal-param-handlers");
|
|
14
|
+
/**
|
|
15
|
+
* Main transignal service, used to process and cache translations
|
|
16
|
+
* Can be injected directly or with use of transignal object created with {@link prepareTransignal} function (recommended)
|
|
17
|
+
*/
|
|
18
|
+
let TransignalService = class TransignalService {
|
|
19
|
+
injector = (0, core_1.inject)(core_1.EnvironmentInjector);
|
|
20
|
+
config = (0, transignal_config_1.injectTransignalConfig)();
|
|
21
|
+
paramsHandler = this.config.paramHandler ?? transignal_param_handlers_1.simpleParamsHandler;
|
|
22
|
+
loadingFn = this.config.loadingFn ?? (() => '...');
|
|
23
|
+
// eslint-disable-next-line no-console
|
|
24
|
+
errorHandler = this.config.errorHandler ?? console.error; // TODO maybe add a link to error page in docs
|
|
25
|
+
loadingCount = (0, core_1.signal)(0);
|
|
26
|
+
scopeMap = new Map();
|
|
27
|
+
languageMap = new Map();
|
|
28
|
+
/**
|
|
29
|
+
* Use to set or get active language
|
|
30
|
+
*/
|
|
31
|
+
activeLang = (0, core_1.signal)(this.config.defaultLang);
|
|
32
|
+
/**
|
|
33
|
+
* Use to determine whether service is currently loading translation files
|
|
34
|
+
*/
|
|
35
|
+
isLoading = (0, core_1.computed)(() => this.loadingCount() > 0);
|
|
36
|
+
t(scope) {
|
|
37
|
+
const existing = this.scopeMap.get(scope);
|
|
38
|
+
if (existing) {
|
|
39
|
+
return existing;
|
|
40
|
+
}
|
|
41
|
+
const scopeObj = this.initT(scope);
|
|
42
|
+
this.scopeMap.set(scope, scopeObj);
|
|
43
|
+
return scopeObj;
|
|
44
|
+
}
|
|
45
|
+
initT(scope) {
|
|
46
|
+
const cache = new Map();
|
|
47
|
+
const t = ((key, params) => {
|
|
48
|
+
const lang = this.activeLang();
|
|
49
|
+
const baseKey = `${lang}/${key}`;
|
|
50
|
+
const memoKey = params ? `${baseKey}_${JSON.stringify(params)}` : baseKey;
|
|
51
|
+
const alreadyComputed = cache.get(memoKey);
|
|
52
|
+
if (alreadyComputed) {
|
|
53
|
+
return alreadyComputed;
|
|
54
|
+
}
|
|
55
|
+
const { isLoading, error, value } = this.fetchLanguage(scope, lang);
|
|
56
|
+
if (isLoading()) {
|
|
57
|
+
return this.loadingFn?.(key);
|
|
58
|
+
}
|
|
59
|
+
if (error() || !value()) {
|
|
60
|
+
this.errorHandler('missing_file', error());
|
|
61
|
+
return '';
|
|
62
|
+
}
|
|
63
|
+
const result = this.replaceParams(this.resolveObjectPath(value(), key), params);
|
|
64
|
+
cache.set(memoKey, result);
|
|
65
|
+
return result;
|
|
66
|
+
}); // needed as other props are assigned below
|
|
67
|
+
t.arr = t;
|
|
68
|
+
t.obj = t;
|
|
69
|
+
t.prefix = this.preparePrefixFn(t, 1);
|
|
70
|
+
t.plural = this.preparePluralFn(t);
|
|
71
|
+
t.select = this.prepareSelectFn(t);
|
|
72
|
+
return t;
|
|
73
|
+
}
|
|
74
|
+
preparePrefixFn(t, depth) {
|
|
75
|
+
return (prefix) => {
|
|
76
|
+
const prefixedT = (key, params) => t(`${prefix}.${key}`, params);
|
|
77
|
+
prefixedT.arr = prefixedT;
|
|
78
|
+
prefixedT.obj = prefixedT;
|
|
79
|
+
prefixedT.plural = this.preparePluralFn(prefixedT);
|
|
80
|
+
prefixedT.select = this.prepareSelectFn(prefixedT);
|
|
81
|
+
prefixedT.prefix =
|
|
82
|
+
this.config.maxPrefixDepth || 3 >= depth
|
|
83
|
+
? this.preparePrefixFn(prefixedT, depth + 1)
|
|
84
|
+
: () => {
|
|
85
|
+
this.errorHandler('prefix_too_deep');
|
|
86
|
+
const t = () => '';
|
|
87
|
+
t.arr = () => [];
|
|
88
|
+
t.obj = () => ({});
|
|
89
|
+
t.plural = () => '';
|
|
90
|
+
return t;
|
|
91
|
+
};
|
|
92
|
+
return prefixedT;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
preparePluralFn(t) {
|
|
96
|
+
return (key, count, params) => {
|
|
97
|
+
const plurals = t(key, { count, ...params });
|
|
98
|
+
if (typeof plurals === 'string') {
|
|
99
|
+
if (plurals === this.loadingFn(key)) {
|
|
100
|
+
return plurals;
|
|
101
|
+
}
|
|
102
|
+
this.errorHandler('invalid_plural', key, plurals);
|
|
103
|
+
return plurals;
|
|
104
|
+
}
|
|
105
|
+
if (plurals[count]) {
|
|
106
|
+
return plurals[count];
|
|
107
|
+
}
|
|
108
|
+
const valueLastDigit = +count.toFixed(0).at(-1);
|
|
109
|
+
if (plurals.one && valueLastDigit === 1) {
|
|
110
|
+
return plurals.one;
|
|
111
|
+
}
|
|
112
|
+
if (plurals.many && valueLastDigit >= 5) {
|
|
113
|
+
return plurals.many;
|
|
114
|
+
}
|
|
115
|
+
if (plurals.few && valueLastDigit > 1 && valueLastDigit < 5) {
|
|
116
|
+
return plurals.few;
|
|
117
|
+
}
|
|
118
|
+
if (plurals.other) {
|
|
119
|
+
return plurals.other;
|
|
120
|
+
}
|
|
121
|
+
this.errorHandler('missing_plural', key, plurals, count);
|
|
122
|
+
return '';
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
prepareSelectFn(t) {
|
|
126
|
+
return (key, value, params) => {
|
|
127
|
+
const selects = t(key, { value, ...params });
|
|
128
|
+
if (typeof selects === 'string') {
|
|
129
|
+
if (selects === this.loadingFn(key)) {
|
|
130
|
+
return selects;
|
|
131
|
+
}
|
|
132
|
+
this.errorHandler('invalid_select', key, selects);
|
|
133
|
+
return selects;
|
|
134
|
+
}
|
|
135
|
+
if (value !== null) {
|
|
136
|
+
if (selects[value]) {
|
|
137
|
+
return selects[value];
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
else if (selects['null']) {
|
|
141
|
+
return selects['null'];
|
|
142
|
+
}
|
|
143
|
+
this.errorHandler('missing_select', key, selects, value);
|
|
144
|
+
return '';
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
replaceParams(translation, params) {
|
|
148
|
+
if (!translation)
|
|
149
|
+
return translation;
|
|
150
|
+
if (typeof translation === 'string') {
|
|
151
|
+
return this.paramsHandler(translation, params);
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(translation)) {
|
|
154
|
+
return translation.map(val => this.replaceParams(val, params));
|
|
155
|
+
}
|
|
156
|
+
if (typeof translation === 'object') {
|
|
157
|
+
return Object.entries(translation).reduce((prev, [objKey, objVal]) => {
|
|
158
|
+
prev[objKey] = this.replaceParams(objVal, params);
|
|
159
|
+
return prev;
|
|
160
|
+
}, {});
|
|
161
|
+
}
|
|
162
|
+
return translation;
|
|
163
|
+
}
|
|
164
|
+
fetchLanguage(scope, lang) {
|
|
165
|
+
const cacheKey = `${scope}/${lang}`;
|
|
166
|
+
const existing = this.languageMap.get(cacheKey);
|
|
167
|
+
if (existing)
|
|
168
|
+
return existing;
|
|
169
|
+
const { translations, loader } = this.config;
|
|
170
|
+
const translation = (0, core_1.runInInjectionContext)(this.injector, () => translations === internals_1.TREE_SHAKED_TRANSLATIONS
|
|
171
|
+
? (0, core_1.untracked)(() => (0, core_1.resource)({
|
|
172
|
+
loader: async () => {
|
|
173
|
+
this.loadingCount.update(count => ++count);
|
|
174
|
+
const file = await (0, core_1.runInInjectionContext)(this.injector, () => loader(scope, lang));
|
|
175
|
+
this.loadingCount.update(count => --count);
|
|
176
|
+
return file;
|
|
177
|
+
},
|
|
178
|
+
}))
|
|
179
|
+
: {
|
|
180
|
+
value: (0, core_1.signal)(translations[scope]),
|
|
181
|
+
isLoading: (0, core_1.signal)(false),
|
|
182
|
+
error: (0, core_1.signal)(undefined),
|
|
183
|
+
});
|
|
184
|
+
this.languageMap.set(cacheKey, translation);
|
|
185
|
+
return translation;
|
|
186
|
+
}
|
|
187
|
+
resolveObjectPath(obj, path) {
|
|
188
|
+
const keys = path.split('.');
|
|
189
|
+
let current = obj;
|
|
190
|
+
for (const key of keys) {
|
|
191
|
+
if (current && typeof current === 'object') {
|
|
192
|
+
current = current[key];
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
this.errorHandler('missing_key', { obj, path });
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return current;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
exports.TransignalService = TransignalService;
|
|
203
|
+
exports.TransignalService = TransignalService = __decorate([
|
|
204
|
+
(0, core_1.Injectable)()
|
|
205
|
+
], TransignalService);
|
|
206
|
+
//# sourceMappingURL=transignal-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transignal-service.js","sourceRoot":"","sources":[""],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { prepareTransignal } from './transignal-config';
|
|
2
|
+
/**
|
|
3
|
+
* Provides unit-test version of transignal that loads translation instantly without loading
|
|
4
|
+
*
|
|
5
|
+
* @param transignal existing transignal instance
|
|
6
|
+
* @param translations real translations in a selected language
|
|
7
|
+
*/
|
|
8
|
+
export declare const provideTransignalTesting: <Languages extends string, Translations extends Record<string, Record<string, unknown>>>(transignal: ReturnType<typeof prepareTransignal<Languages, Translations>>, translations: Translations) => import("@angular/core", { with: { "resolution-mode": "import" } }).EnvironmentProviders;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.provideTransignalTesting = void 0;
|
|
4
|
+
const internals_1 = require("./internals");
|
|
5
|
+
const transignal_config_1 = require("./transignal-config");
|
|
6
|
+
/**
|
|
7
|
+
* Provides unit-test version of transignal that loads translation instantly without loading
|
|
8
|
+
*
|
|
9
|
+
* @param transignal existing transignal instance
|
|
10
|
+
* @param translations real translations in a selected language
|
|
11
|
+
*/
|
|
12
|
+
const provideTransignalTesting = (transignal, translations) => (0, transignal_config_1.prepareTransignal)({ ...transignal[internals_1.INTERNAL_TRANSIGNAL_CONFIG].config, translations }, ...transignal[internals_1.INTERNAL_TRANSIGNAL_CONFIG].features).provide();
|
|
13
|
+
exports.provideTransignalTesting = provideTransignalTesting;
|
|
14
|
+
//# sourceMappingURL=transignal-testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transignal-testing.js","sourceRoot":"","sources":[""],"names":[],"mappings":";;;AAAA,2CAAyD;AACzD,2DAAwD;AAExD;;;;;GAKG;AACI,MAAM,wBAAwB,GAAG,CAItC,UAAyE,EACzE,YAA0B,EAC1B,EAAE,CACF,IAAA,qCAAiB,EACf,EAAE,GAAG,UAAU,CAAC,sCAA0B,CAAC,CAAC,MAAM,EAAE,YAAY,EAAE,EAClE,GAAG,UAAU,CAAC,sCAA0B,CAAC,CAAC,QAAQ,CACnD,CAAC,OAAO,EAAE,CAAC;AAVD,QAAA,wBAAwB,4BAUvB"}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { ParamHandler } from './transignal-param-handlers';
|
|
2
|
+
import { ArrayPaths, GetNestedType, ObjectPaths, PluralPaths, SelectPaths, StringKeys, StringPaths } from './utility-types';
|
|
3
|
+
export type TransignalError =
|
|
4
|
+
/** Error when key is not found in translations */
|
|
5
|
+
'missing_key'
|
|
6
|
+
/** Error when translation file for scope and lang has not been found */
|
|
7
|
+
| 'missing_file'
|
|
8
|
+
/** Error plural for a value is not defined for a language */
|
|
9
|
+
| 'missing_plural'
|
|
10
|
+
/** Error when plural used on a non-plural translation */
|
|
11
|
+
| 'invalid_plural'
|
|
12
|
+
/** Error select for a value is not defined for a language */
|
|
13
|
+
| 'missing_select'
|
|
14
|
+
/** Error when select used on a non-select translation */
|
|
15
|
+
| 'invalid_select'
|
|
16
|
+
/** Error when prefix chain is called more then {@link TransignalConfig.maxPrefixDepth} */
|
|
17
|
+
| 'prefix_too_deep';
|
|
18
|
+
export type TranslateParams = Record<string, unknown>;
|
|
19
|
+
export type Marked<K, T> = K & {
|
|
20
|
+
__marker: T;
|
|
21
|
+
};
|
|
22
|
+
export type BasePluralTranslation = Partial<Record<number | 'one' | 'few' | 'many' | 'other', string>>;
|
|
23
|
+
export type PluralTranslation = Marked<BasePluralTranslation, 'plural'>;
|
|
24
|
+
export type BaseSelectTranslation = Partial<Record<string | number | 'null', string>>;
|
|
25
|
+
export type MarkedAsSelect<T extends BaseSelectTranslation> = Marked<T, 'select'>;
|
|
26
|
+
export type SelectTranslation = MarkedAsSelect<BaseSelectTranslation>;
|
|
27
|
+
export type TranslateFn<Keys extends string, Result> = (key: Keys, params?: TranslateParams) => Result;
|
|
28
|
+
export type TranslateObj<Context extends Record<string, any>> = TranslateFn<StringPaths<Context>, string> & {
|
|
29
|
+
/**
|
|
30
|
+
* Returns translating function that returns an array of translations
|
|
31
|
+
* @param key path of translation
|
|
32
|
+
* @param params parameters of translation in syntax defined by {@link TransignalConfig.paramHandler}
|
|
33
|
+
*/
|
|
34
|
+
arr: <ArrKey extends ArrayPaths<Context>>(key: ArrKey, params?: TranslateParams) => GetNestedType<Context, ArrKey>;
|
|
35
|
+
/**
|
|
36
|
+
* Returns translating function that returns an object of translations
|
|
37
|
+
* @param key path of translation
|
|
38
|
+
* @param params parameters of translation in syntax defined by {@link TransignalConfig.paramHandler}
|
|
39
|
+
*/
|
|
40
|
+
obj: <ObjKey extends ObjectPaths<Context>>(key: ObjKey, params?: TranslateParams) => GetNestedType<Context, ObjKey>;
|
|
41
|
+
/**
|
|
42
|
+
* Returns translating function that returns a string translation depending on a correct plural form
|
|
43
|
+
* @param key path of translation
|
|
44
|
+
* @param count count to determine correct plural form
|
|
45
|
+
* @param params parameters of translation in syntax defined by {@link TransignalConfig.paramHandler}
|
|
46
|
+
*/
|
|
47
|
+
plural: <ObjKey extends PluralPaths<Context>>(key: ObjKey, count: number, params?: TranslateParams) => string;
|
|
48
|
+
/**
|
|
49
|
+
* Returns translating function that returns a string translation depending on a selected value
|
|
50
|
+
* @param key path of translation
|
|
51
|
+
* @param value value to determine selected translation
|
|
52
|
+
* @param params parameters of translation in syntax defined by {@link TransignalConfig.paramHandler}
|
|
53
|
+
*/
|
|
54
|
+
select: <ObjKey extends SelectPaths<Context>>(key: ObjKey, value: keyof SelectTranslation | null, params?: TranslateParams) => string;
|
|
55
|
+
/**
|
|
56
|
+
* Returns translating function that is encapsulated in a selected prefix
|
|
57
|
+
* @param prefix path of new root translation
|
|
58
|
+
*/
|
|
59
|
+
prefix: <T extends ObjectPaths<Context>>(prefix: T) => TranslateObj<GetNestedType<Context, T>>;
|
|
60
|
+
};
|
|
61
|
+
export type TranslationFile = Record<string, unknown>;
|
|
62
|
+
export type TransignalConfig<Languages extends string, Translations extends Record<string, Record<string, unknown>>> = {
|
|
63
|
+
/**
|
|
64
|
+
* Default language code
|
|
65
|
+
*/
|
|
66
|
+
defaultLang: NoInfer<Languages>;
|
|
67
|
+
/**
|
|
68
|
+
* An array of available languages that your application supports.
|
|
69
|
+
* These should be unique string identifiers for each language (e.g., ['en', 'fr', 'es']).
|
|
70
|
+
*/
|
|
71
|
+
availableLangs: Languages[];
|
|
72
|
+
/**
|
|
73
|
+
* Defines the type of translations.
|
|
74
|
+
* Please use helper function {@link treeShakedTranslations()}
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* import type translations from './i18n/translations';
|
|
78
|
+
* ...
|
|
79
|
+
* translations: treeShakedTranslations<typeof translations>(),
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
translations: Translations;
|
|
83
|
+
/**
|
|
84
|
+
* A function responsible for dynamically loading translation files.
|
|
85
|
+
* This function is called when a specific translation scope and language is requested
|
|
86
|
+
* It runs in TransignalService injection context so {@link inject()} can be used to e.g. use HttpClient
|
|
87
|
+
*
|
|
88
|
+
* @param scope The string key representing the translation scope (e.g., 'common', 'auth').
|
|
89
|
+
* @param lang The language identifier for which to load translations (e.g., 'en', 'fr').
|
|
90
|
+
* @returns A Promise that resolves to a `TranslationFile` object, which is
|
|
91
|
+
* a record of string keys to unknown values representing the translations for
|
|
92
|
+
* the given scope and language.
|
|
93
|
+
*/
|
|
94
|
+
loader: (scope: StringKeys<Translations>, lang: Languages) => Promise<TranslationFile>;
|
|
95
|
+
/**
|
|
96
|
+
* An optional function that defines how a loading message should be displayed
|
|
97
|
+
* while translations are being loaded.
|
|
98
|
+
*
|
|
99
|
+
* @param key The translation key that is currently being loaded.
|
|
100
|
+
* @returns A string representing the loading message.
|
|
101
|
+
*/
|
|
102
|
+
loadingFn?: (key: string) => string;
|
|
103
|
+
/**
|
|
104
|
+
* An optional function that defines how params should be processed
|
|
105
|
+
* Defaults to {@link simpleParamsHandler}
|
|
106
|
+
* Use {@link noParamsHandler} if you don't want to use params
|
|
107
|
+
* If you want to handle message format then you can install TODO
|
|
108
|
+
*/
|
|
109
|
+
paramHandler?: ParamHandler;
|
|
110
|
+
/**
|
|
111
|
+
* An optional error handler function that will be called when a `TransignalError` occurs.
|
|
112
|
+
* This allows you to implement custom error reporting or logging.
|
|
113
|
+
*
|
|
114
|
+
* @param errorCode Code of an error {@link TransignalError} code that occurred.
|
|
115
|
+
* @param args Any additional arguments relevant to the error.
|
|
116
|
+
*/
|
|
117
|
+
errorHandler?: (errorCode: TransignalError, ...args: unknown[]) => void;
|
|
118
|
+
/**
|
|
119
|
+
* Defines max depth of prefix functions in {@link TranslateObj}
|
|
120
|
+
* Defaults to 3, this means that if prefix function is used more than 3 time on the same t then it will fail
|
|
121
|
+
* Required for performance reasons
|
|
122
|
+
*/
|
|
123
|
+
maxPrefixDepth?: number;
|
|
124
|
+
};
|
package/lib/types.js
ADDED
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":[""],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { PluralTranslation, SelectTranslation } from './types';
|
|
3
|
+
export type GetNestedType<T, P extends string> = P extends `${infer Key}.${infer Rest}` ? Key extends keyof T ? GetNestedType<T[Key], Rest> : never : P extends keyof T ? NonNullable<T[P]> : never;
|
|
4
|
+
type DotPrefix<T extends string> = T extends '' ? '' : `.${T}`;
|
|
5
|
+
export type Paths<T> = T extends object ? T extends Array<infer U> ? `${number}${'' | DotPrefix<Paths<U>>}` : {
|
|
6
|
+
[K in keyof T]-?: K extends string | number ? `${K}${'' | DotPrefix<Paths<T[K]>>}` : never;
|
|
7
|
+
}[keyof T] : '';
|
|
8
|
+
export type ArrayPaths<T> = {
|
|
9
|
+
[P in Paths<T>]: GetNestedType<T, P> extends Array<unknown> ? P : never;
|
|
10
|
+
}[Paths<T>];
|
|
11
|
+
export type ObjectPaths<T> = {
|
|
12
|
+
[P in Paths<T>]: GetNestedType<T, P> extends Record<any, unknown> ? P : never;
|
|
13
|
+
}[Paths<T>];
|
|
14
|
+
export type PluralPaths<T> = {
|
|
15
|
+
[P in Paths<T>]: GetNestedType<T, P> extends PluralTranslation ? P : never;
|
|
16
|
+
}[Paths<T>];
|
|
17
|
+
export type SelectPaths<T> = {
|
|
18
|
+
[P in Paths<T>]: GetNestedType<T, P> extends SelectTranslation ? P : never;
|
|
19
|
+
}[Paths<T>];
|
|
20
|
+
export type StringPaths<T> = {
|
|
21
|
+
[P in Paths<T>]: GetNestedType<T, P> extends string ? P : never;
|
|
22
|
+
}[Paths<T>];
|
|
23
|
+
export type StringKeys<T> = Extract<keyof T, string>;
|
|
24
|
+
export type ResourceRefLike<T> = {
|
|
25
|
+
value: Signal<T | undefined>;
|
|
26
|
+
isLoading: Signal<boolean>;
|
|
27
|
+
error: Signal<Error | undefined>;
|
|
28
|
+
};
|
|
29
|
+
export {};
|