@commandkit/i18n 0.1.2 → 1.2.0-rc.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/README.md CHANGED
@@ -75,13 +75,13 @@ The `$command` key defines localization for the command name and description (or
75
75
  This plugin adds `locale()` function to your command context. You can use it to localize your command responses.
76
76
 
77
77
  ```ts
78
- export const chatInput: SlashCommand = async (ctx) => {
78
+ export const chatInput: ChatInputCommand = async (ctx) => {
79
79
  // ctx.locale() auto infers the localization of the current guild
80
80
  // you can also pass a discord.js locale enum to use custom locale
81
81
  // ctx.locale("fr") // uses french locale
82
82
  const { t, i18n } = ctx.locale()
83
- // ^ TFunction
84
- // ^ i18next instance
83
+ // | |__ i18next instance
84
+ // |_____ TFunction
85
85
 
86
86
  ctx.interaction.reply({
87
87
  content: t("response", { latency: client.ping }),
@@ -105,4 +105,4 @@ export async function run({ interaction }) {
105
105
  }
106
106
  ```
107
107
 
108
- This function is identical to the one in the context and it can also infer the locale automatically.
108
+ This function is identical to the one in the context and it can also infer the locale automatically.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { CompilerPlugin, CompilerPluginRuntime } from 'commandkit';
2
+ /**
3
+ * Compiler plugin for the CommandKit CLI to create locale files.
4
+ * This plugin allows users to create locale files for commands in the CLI.
5
+ * It registers a template named "locale" that can be used to generate locale files.
6
+ * @example ```sh
7
+ * commandkit create locale <locale> <commandName>
8
+ * ```
9
+ */
10
+ export declare class I18nCliTemplatePlugin extends CompilerPlugin {
11
+ readonly name = "I18nCliTemplatePlugin";
12
+ activate(ctx: CompilerPluginRuntime): Promise<void>;
13
+ deactivate(ctx: CompilerPluginRuntime): Promise<void>;
14
+ private panic;
15
+ private handleTemplate;
16
+ }
package/dist/cli.js ADDED
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.I18nCliTemplatePlugin = void 0;
4
+ const commandkit_1 = require("commandkit");
5
+ const constants_1 = require("./constants");
6
+ const i18n_1 = require("./i18n");
7
+ const fs_1 = require("fs");
8
+ const path_1 = require("path");
9
+ /**
10
+ * Compiler plugin for the CommandKit CLI to create locale files.
11
+ * This plugin allows users to create locale files for commands in the CLI.
12
+ * It registers a template named "locale" that can be used to generate locale files.
13
+ * @example ```sh
14
+ * commandkit create locale <locale> <commandName>
15
+ * ```
16
+ */
17
+ class I18nCliTemplatePlugin extends commandkit_1.CompilerPlugin {
18
+ constructor() {
19
+ super(...arguments);
20
+ this.name = 'I18nCliTemplatePlugin';
21
+ }
22
+ async activate(ctx) {
23
+ try {
24
+ ctx.registerTemplate('locale', this.handleTemplate.bind(this));
25
+ }
26
+ catch (e) {
27
+ commandkit_1.Logger.error(`Failed to register the CLI template "locale": ${e}`);
28
+ }
29
+ }
30
+ async deactivate(ctx) {
31
+ ctx.unregisterTemplate('locale');
32
+ }
33
+ panic(message) {
34
+ commandkit_1.Logger.error(message);
35
+ process.exit(1);
36
+ }
37
+ async handleTemplate(args) {
38
+ if (args.length < 2) {
39
+ this.panic(`Invalid arguments for locale template. Expected: <locale> <commandName>`);
40
+ }
41
+ const [locale, commandName] = args;
42
+ if (!constants_1.DISCORD_LOCALES.has(locale)) {
43
+ this.panic(`Invalid locale ${locale}. Please use one of the followings:\n${Array.from(constants_1.DISCORD_LOCALES)
44
+ .map((l) => `- ${l}`)
45
+ .join('\n')}`);
46
+ }
47
+ const localePath = i18n_1.I18nPlugin.getLoadPath('src', locale, commandName);
48
+ if ((0, fs_1.existsSync)(localePath)) {
49
+ this.panic(`Locale file for "${locale}:${commandName}" already exists.`);
50
+ }
51
+ const localeDirSrc = (0, path_1.join)(localePath, '..', '..');
52
+ if (!(0, fs_1.existsSync)(localeDirSrc)) {
53
+ this.panic(`Could not locate source directory. Please make sure you are running this command from the location of your commandkit config file.`);
54
+ }
55
+ const localeDir = (0, path_1.join)(localePath, '..');
56
+ if (!(0, fs_1.existsSync)(localeDir)) {
57
+ (0, fs_1.mkdirSync)(localeDir, { recursive: true });
58
+ }
59
+ const data = {
60
+ $command: {
61
+ name: commandName,
62
+ description: `${commandName} command`,
63
+ },
64
+ };
65
+ (0, fs_1.writeFileSync)(localePath, JSON.stringify(data, null, 2));
66
+ commandkit_1.Logger.info(`Locale file for ${locale} and ${commandName} created at ${localePath}`);
67
+ }
68
+ }
69
+ exports.I18nCliTemplatePlugin = I18nCliTemplatePlugin;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBMkU7QUFDM0UsMkNBQThDO0FBRTlDLGlDQUFvQztBQUNwQywyQkFBMEQ7QUFDMUQsK0JBQTRCO0FBRTVCOzs7Ozs7O0dBT0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDJCQUFjO0lBQXpEOztRQUNrQixTQUFJLEdBQUcsdUJBQXVCLENBQUM7SUF1RWpELENBQUM7SUFyRVEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUEwQjtRQUM5QyxJQUFJLENBQUM7WUFDSCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDWCxtQkFBTSxDQUFDLEtBQUssQ0FBQyxpREFBaUQsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBMEI7UUFDaEQsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxLQUFLLENBQUMsT0FBZTtRQUMzQixtQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQWM7UUFDekMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxLQUFLLENBQ1IseUVBQXlFLENBQzFFLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7UUFFbkMsSUFBSSxDQUFDLDJCQUFlLENBQUMsR0FBRyxDQUFDLE1BQWdCLENBQUMsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxLQUFLLENBQ1Isa0JBQWtCLE1BQU0sd0NBQXdDLEtBQUssQ0FBQyxJQUFJLENBQ3hFLDJCQUFlLENBQ2hCO2lCQUNFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztpQkFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsaUJBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztRQUV0RSxJQUFJLElBQUEsZUFBVSxFQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsTUFBTSxJQUFJLFdBQVcsbUJBQW1CLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBQSxXQUFJLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVsRCxJQUFJLENBQUMsSUFBQSxlQUFVLEVBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsS0FBSyxDQUNSLG9JQUFvSSxDQUNySSxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLElBQUEsV0FBSSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsSUFBQSxlQUFVLEVBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMzQixJQUFBLGNBQVMsRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUU7Z0JBQ1IsSUFBSSxFQUFFLFdBQVc7Z0JBQ2pCLFdBQVcsRUFBRSxHQUFHLFdBQVcsVUFBVTthQUN0QztTQUNGLENBQUM7UUFFRixJQUFBLGtCQUFhLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXpELG1CQUFNLENBQUMsSUFBSSxDQUNULG1CQUFtQixNQUFNLFFBQVEsV0FBVyxlQUFlLFVBQVUsRUFBRSxDQUN4RSxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeEVELHNEQXdFQyJ9
@@ -1,3 +1,10 @@
1
1
  import { Locale } from 'discord.js';
2
+ /**
3
+ * Represents a set of locales supported by Discord.
4
+ */
2
5
  export declare const DISCORD_LOCALES: Set<Locale>;
6
+ /**
7
+ * Metadata key for command localization.
8
+ * This key is used to store metadata about commands in the i18n system.
9
+ */
3
10
  export declare const COMMAND_METADATA_KEY = "$command";
package/dist/constants.js CHANGED
@@ -2,6 +2,13 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.COMMAND_METADATA_KEY = exports.DISCORD_LOCALES = void 0;
4
4
  const discord_js_1 = require("discord.js");
5
+ /**
6
+ * Represents a set of locales supported by Discord.
7
+ */
5
8
  exports.DISCORD_LOCALES = new Set(Object.values(discord_js_1.Locale).filter((locale) => !/^\d+/.test(locale)));
9
+ /**
10
+ * Metadata key for command localization.
11
+ * This key is used to store metadata about commands in the i18n system.
12
+ */
6
13
  exports.COMMAND_METADATA_KEY = '$command';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBb0M7QUFFdkIsUUFBQSxlQUFlLEdBQUcsSUFBSSxHQUFHLENBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQy9ELENBQUM7QUFFVyxRQUFBLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBb0M7QUFFcEM7O0dBRUc7QUFDVSxRQUFBLGVBQWUsR0FBRyxJQUFJLEdBQUcsQ0FDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxtQkFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FDL0QsQ0FBQztBQUVGOzs7R0FHRztBQUNVLFFBQUEsb0JBQW9CLEdBQUcsVUFBVSxDQUFDIn0=
package/dist/hooks.d.ts CHANGED
@@ -1,7 +1,21 @@
1
1
  import type { Locale } from 'discord.js';
2
- import type { CommandLocalizationContext } from './i18n';
2
+ import { type CommandLocalizationContext } from './i18n';
3
+ import { TFunction } from 'i18next';
3
4
  /**
4
- * Gets the localization context.
5
+ * Gets the localization context. If the context originates from the event worker context, the returned t function is not bound to the command.
5
6
  * @param locale The locale to use. Defaults to the detected locale or the default locale.
7
+ * @example const { t, locale, i18n } = locale('en-US');
8
+ * const translated = t('hello'); // Translates 'hello' in the 'en-US' locale
6
9
  */
7
10
  export declare function locale(locale?: Locale): CommandLocalizationContext;
11
+ /**
12
+ * Fetches the translation function for the given locale and namespace.
13
+ * @param lng The locale to use.
14
+ * @param ns The namespace to use.
15
+ * @param keyPrefix The key prefix to use.
16
+ * @returns The translation function.
17
+ * @example
18
+ * const t = fetchT('en-US', 'common');
19
+ * const translated = t('hello'); // Translates 'hello' in the 'en-US' locale
20
+ */
21
+ export declare function fetchT(lng: string | string[], ns?: string | null, keyPrefix?: string): TFunction;
package/dist/hooks.js CHANGED
@@ -1,17 +1,53 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.locale = locale;
4
+ exports.fetchT = fetchT;
5
+ const i18n_1 = require("./i18n");
4
6
  const commandkit_1 = require("commandkit");
5
7
  /**
6
- * Gets the localization context.
8
+ * Gets the localization context. If the context originates from the event worker context, the returned t function is not bound to the command.
7
9
  * @param locale The locale to use. Defaults to the detected locale or the default locale.
10
+ * @example const { t, locale, i18n } = locale('en-US');
11
+ * const translated = t('hello'); // Translates 'hello' in the 'en-US' locale
8
12
  */
9
13
  function locale(locale) {
10
- const env = (0, commandkit_1.useEnvironment)();
14
+ let env;
15
+ try {
16
+ env = (0, commandkit_1.useEnvironment)();
17
+ }
18
+ catch { }
19
+ if (!env) {
20
+ const context = commandkit_1.eventWorkerContext.getStore();
21
+ if (!context) {
22
+ throw new Error('No localization context found');
23
+ }
24
+ const commandkit = context.commandkit;
25
+ const i18n = (0, i18n_1.useI18n)(commandkit);
26
+ const detectedLocale = locale || commandkit.appConfig.defaultLocale;
27
+ return {
28
+ t: i18n.getFixedT(detectedLocale, `${context.event}.event`),
29
+ locale: detectedLocale,
30
+ i18n,
31
+ isEventWorker: true,
32
+ };
33
+ }
11
34
  const context = env.context;
12
35
  if (!context) {
13
36
  throw new Error('No localization context found');
14
37
  }
15
38
  return context.locale(locale);
16
39
  }
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFRQSx3QkFTQztBQWZELDJDQUE0QztBQUU1Qzs7O0dBR0c7QUFDSCxTQUFnQixNQUFNLENBQUMsTUFBZTtJQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFBLDJCQUFjLEdBQUUsQ0FBQztJQUM3QixNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==
40
+ /**
41
+ * Fetches the translation function for the given locale and namespace.
42
+ * @param lng The locale to use.
43
+ * @param ns The namespace to use.
44
+ * @param keyPrefix The key prefix to use.
45
+ * @returns The translation function.
46
+ * @example
47
+ * const t = fetchT('en-US', 'common');
48
+ * const translated = t('hello'); // Translates 'hello' in the 'en-US' locale
49
+ */
50
+ function fetchT(lng, ns, keyPrefix) {
51
+ return (0, i18n_1.useI18n)().getFixedT(lng, ns, keyPrefix);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaG9va3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSx3QkFrQ0M7QUFZRCx3QkFNQztBQWxFRCxpQ0FBa0U7QUFDbEUsMkNBSW9CO0FBR3BCOzs7OztHQUtHO0FBQ0gsU0FBZ0IsTUFBTSxDQUFDLE1BQWU7SUFDcEMsSUFBSSxHQUFzQyxDQUFDO0lBRTNDLElBQUksQ0FBQztRQUNILEdBQUcsR0FBRyxJQUFBLDJCQUFjLEdBQUUsQ0FBQztJQUN6QixDQUFDO0lBQUMsTUFBTSxDQUFDLENBQUEsQ0FBQztJQUVWLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNULE1BQU0sT0FBTyxHQUFHLCtCQUFrQixDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTlDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUV0QyxNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxNQUFNLGNBQWMsR0FBVyxNQUFNLElBQUksVUFBVSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7UUFFNUUsT0FBTztZQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQztZQUMzRCxNQUFNLEVBQUUsY0FBYztZQUN0QixJQUFJO1lBQ0osYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO0lBRTVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixNQUFNLENBQ3BCLEdBQXNCLEVBQ3RCLEVBQWtCLEVBQ2xCLFNBQWtCO0lBRWxCLE9BQU8sSUFBQSxjQUFPLEdBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRCxDQUFDIn0=
package/dist/i18n.d.ts CHANGED
@@ -1,9 +1,23 @@
1
1
  import type { NewableModule, Module, Newable, i18n, InitOptions } from 'i18next';
2
- import { CommandKitPluginRuntime, RuntimePlugin, CommandKitEnvironment, CommandSource, PreparedAppCommandExecution, CommandBuilderLike, CommandKitHMREvent } from 'commandkit';
2
+ import CommandKit, { CommandKitPluginRuntime, RuntimePlugin, CommandKitEnvironment, CommandSource, PreparedAppCommandExecution, CommandBuilderLike, CommandKitHMREvent } from 'commandkit';
3
3
  import { Locale } from 'discord.js';
4
+ /**
5
+ * @private
6
+ */
4
7
  export type Awaitable<T> = Promise<T> | T;
8
+ /**
9
+ * Represents a localization module that can be used with the i18next plugin.
10
+ */
5
11
  export type LocalizationModule = NewableModule<Module> | Module | Newable<Module>;
12
+ /**
13
+ * Represents a dynamic localization module that can be used with the i18next plugin.
14
+ */
6
15
  export type DynamicLocalizationModule = () => Awaitable<LocalizationModule>;
16
+ /**
17
+ * Options for the localization plugin.
18
+ * This interface defines the options that can be passed to the localization plugin.
19
+ * It includes the i18next plugins to use and the i18next initialization options.
20
+ */
7
21
  export interface LocalizationPluginOptions {
8
22
  /**
9
23
  * The i18next plugins to use. The plugins are loaded in the order they are
@@ -31,8 +45,15 @@ export interface CommandLocalizationContext {
31
45
  * The locale to use for the command.
32
46
  */
33
47
  locale: Locale;
48
+ /**
49
+ * Whether the localization context is from event worker context.
50
+ */
51
+ isEventWorker?: boolean;
34
52
  }
35
53
  declare module 'commandkit' {
54
+ /**
55
+ * Represents the localization context for a command.
56
+ */
36
57
  interface LocalizationContext extends CommandLocalizationContext {
37
58
  }
38
59
  interface Context {
@@ -43,12 +64,29 @@ declare module 'commandkit' {
43
64
  locale: (locale?: Locale) => LocalizationContext;
44
65
  }
45
66
  }
67
+ /**
68
+ * Retrieves the i18n instance from the commandkit store.
69
+ * @param commandkit The commandkit instance.
70
+ * @returns The i18n instance.
71
+ * @throws Error if the i18n instance is not found in the store.
72
+ * @example
73
+ * ```ts
74
+ * import { useI18n } from '@commandkit/i18n';
75
+ * import { commandkit } from 'commandkit';
76
+ *
77
+ * const i18n = useI18n(commandkit);
78
+ *
79
+ * // Use the i18n instance
80
+ * i18n.t('key');
81
+ * ```
82
+ */
83
+ export declare function useI18n(commandkit?: CommandKit): i18n;
46
84
  export declare class I18nPlugin extends RuntimePlugin<LocalizationPluginOptions> {
47
85
  readonly name = "I18nPlugin";
48
86
  private i18n;
49
87
  private metadata;
50
88
  activate(ctx: CommandKitPluginRuntime): Promise<void>;
51
- private getLoadPath;
89
+ static getLoadPath(cwd?: string, lng?: string, ns?: string): string;
52
90
  private scanLocaleDirectory;
53
91
  performHMR(ctx: CommandKitPluginRuntime, event: CommandKitHMREvent): Promise<void>;
54
92
  private loadMetadata;
package/dist/i18n.js CHANGED
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.I18nPlugin = void 0;
7
+ exports.useI18n = useI18n;
7
8
  const i18next_1 = __importDefault(require("i18next"));
8
9
  const commandkit_1 = require("commandkit");
9
10
  const i18next_fs_backend_1 = __importDefault(require("i18next-fs-backend"));
@@ -25,6 +26,30 @@ commandkit_1.Context.prototype.locale = function (locale) {
25
26
  i18n,
26
27
  };
27
28
  };
29
+ /**
30
+ * Retrieves the i18n instance from the commandkit store.
31
+ * @param commandkit The commandkit instance.
32
+ * @returns The i18n instance.
33
+ * @throws Error if the i18n instance is not found in the store.
34
+ * @example
35
+ * ```ts
36
+ * import { useI18n } from '@commandkit/i18n';
37
+ * import { commandkit } from 'commandkit';
38
+ *
39
+ * const i18n = useI18n(commandkit);
40
+ *
41
+ * // Use the i18n instance
42
+ * i18n.t('key');
43
+ * ```
44
+ */
45
+ function useI18n(commandkit) {
46
+ commandkit ?? (commandkit = (0, commandkit_1.getCommandKit)(true));
47
+ const i18n = commandkit.store.get('i18n:plugin:instance');
48
+ if (!i18n) {
49
+ throw new Error('I18n not found, is the I18nPlugin registered?');
50
+ }
51
+ return i18n;
52
+ }
28
53
  class I18nPlugin extends commandkit_1.RuntimePlugin {
29
54
  constructor() {
30
55
  super(...arguments);
@@ -33,6 +58,7 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
33
58
  }
34
59
  async activate(ctx) {
35
60
  this.i18n = i18next_1.default;
61
+ ctx.commandkit.store.set('i18n:plugin:instance', this.i18n);
36
62
  this.i18n.use(i18next_fs_backend_1.default);
37
63
  if (this.options.plugins?.length) {
38
64
  for (const plugin of this.options.plugins) {
@@ -67,16 +93,17 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
67
93
  commandkit_1.Logger.warn('I18nPlugin: No languages loaded. Using default language only.');
68
94
  }
69
95
  // Set the default locale for command execution
70
- ctx.commandkit.config.defaultLocale = (this.i18n.language ||
96
+ ctx.commandkit.appConfig.defaultLocale = (this.i18n.language ||
71
97
  'en-US');
72
98
  commandkit_1.Logger.info('I18nPlugin has been activated');
73
99
  }
74
- getLoadPath() {
75
- return (0, path_1.join)((0, commandkit_1.getCurrentDirectory)(), '/app/locales/{{lng}}/{{ns}}.json');
100
+ static getLoadPath(cwd = (0, commandkit_1.getCurrentDirectory)(), lng = '{{lng}}', ns = '{{ns}}') {
101
+ return (0, path_1.join)(cwd, `/app/locales/${lng}/${ns}.json`);
76
102
  }
77
103
  async scanLocaleDirectory() {
78
104
  const endPattern = /{{lng}}(\/|\\){{ns}}.json$/;
79
- const localesPath = this.getLoadPath();
105
+ const eventFilePattern = /\.event\.json$/;
106
+ const localesPath = I18nPlugin.getLoadPath();
80
107
  const scanDirTarget = localesPath.replace(endPattern, '');
81
108
  if (!(0, fs_1.existsSync)(scanDirTarget)) {
82
109
  commandkit_1.Logger.warn(`I18nPlugin: No locales directory found at ${scanDirTarget}. Skipping scan.`);
@@ -101,10 +128,12 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
101
128
  const ext = (0, path_1.extname)(file.name);
102
129
  if (!/\.json$/.test(ext))
103
130
  continue;
131
+ const isEvent = eventFilePattern.test(file.name);
104
132
  const name = (0, path_1.basename)(file.name, ext);
105
133
  namespaces.add(name);
106
134
  const locale = (0, path_1.basename)(file.parentPath);
107
- await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
135
+ if (!isEvent)
136
+ await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
108
137
  }
109
138
  }
110
139
  }
@@ -112,10 +141,13 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
112
141
  const ext = (0, path_1.extname)(file.name);
113
142
  if (!/\.json$/.test(ext))
114
143
  continue;
144
+ const isEvent = eventFilePattern.test(file.name);
115
145
  const name = (0, path_1.basename)(file.name, ext);
116
146
  namespaces.add(name);
117
147
  const locale = (0, path_1.basename)(file.parentPath);
118
- await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
148
+ if (!isEvent) {
149
+ await this.loadMetadata((0, path_1.join)(file.parentPath, file.name), locale, name);
150
+ }
119
151
  }
120
152
  }
121
153
  return {
@@ -125,7 +157,7 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
125
157
  }
126
158
  async performHMR(ctx, event) {
127
159
  const targetLocation = event.path;
128
- const localeDir = (0, path_1.join)(process.cwd(), '/src/app/locales');
160
+ const localeDir = (0, path_1.join)(commandkit_1.COMMANDKIT_CWD, '/src/app/locales');
129
161
  if (!targetLocation.startsWith(localeDir))
130
162
  return;
131
163
  event.accept();
@@ -150,7 +182,7 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
150
182
  catch { }
151
183
  }
152
184
  getBackendOptions() {
153
- const loadPath = this.getLoadPath();
185
+ const loadPath = I18nPlugin.getLoadPath();
154
186
  return {
155
187
  loadPath: function (lng, namespace) {
156
188
  const path = loadPath
@@ -182,4 +214,4 @@ class I18nPlugin extends commandkit_1.RuntimePlugin {
182
214
  }
183
215
  }
184
216
  exports.I18nPlugin = I18nPlugin;
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHNEQUE4QjtBQVE5QiwyQ0FZb0I7QUFDcEIsNEVBQTJDO0FBQzNDLCtCQUErQztBQUcvQywyQkFBZ0M7QUFFaEMsMkNBQW9FO0FBQ3BFLG1DQUE0QztBQUM1QywwQ0FBZ0Q7QUFxRGhELG9CQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxVQUFVLE1BQWU7SUFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksSUFBQSwyQkFBYyxHQUFFLENBQUM7SUFDeEQsTUFBTSxjQUFjLEdBQVcsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUMxRCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBUyxDQUFDO0lBRS9ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsT0FBTztRQUNMLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5RCxNQUFNLEVBQUUsY0FBYztRQUN0QixJQUFJO0tBQ2dDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBYSxVQUFXLFNBQVEsMEJBQXdDO0lBQXhFOztRQUNrQixTQUFJLEdBQUcsWUFBWSxDQUFDO1FBRTVCLGFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztJQXVObkUsQ0FBQztJQXJOUSxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQTRCO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQU8sQ0FBQztRQUVwQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyw0QkFBUyxDQUFD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
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQXlJQSwwQkFVQztBQW5KRCxzREFBOEI7QUFROUIsMkNBY29CO0FBQ3BCLDRFQUEyQztBQUMzQywrQkFBK0M7QUFHL0MsMkJBQWdDO0FBRWhDLDJDQUFvRTtBQUNwRSxtQ0FBNEM7QUFDNUMsMENBQWdEO0FBMEVoRCxvQkFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsVUFBVSxNQUFlO0lBQ3hELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUEsMkJBQWMsR0FBRSxDQUFDO0lBQ3hELE1BQU0sY0FBYyxHQUFXLE1BQU0sSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDMUQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQVMsQ0FBQztJQUUvRCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDVixNQUFNLElBQUksS0FBSyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELE9BQU87UUFDTCxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDOUQsTUFBTSxFQUFFLGNBQWM7UUFDdEIsSUFBSTtLQUNnQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILFNBQWdCLE9BQU8sQ0FBQyxVQUF1QjtJQUM3QyxVQUFVLEtBQVYsVUFBVSxHQUFLLElBQUEsMEJBQWEsRUFBQyxJQUFJLENBQUMsRUFBQztJQUVuQyxNQUFNLElBQUksR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBUyxDQUFDO0lBRWxFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNW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
package/dist/index.d.ts CHANGED
@@ -1,2 +1,12 @@
1
+ import { I18nCliTemplatePlugin } from './cli';
1
2
  import { I18nPlugin, LocalizationPluginOptions } from './i18n';
2
- export declare function i18n(options?: LocalizationPluginOptions): I18nPlugin;
3
+ /**
4
+ * Returns the i18n plugin and CLI template plugin.
5
+ * This function initializes the i18n plugin with the provided options and returns both the i18n plugin and the CLI template plugin.
6
+ * @param options The options for the i18n plugin. If not provided, default options will be used.
7
+ * @returns A tuple containing the i18n plugin and the CLI template plugin.
8
+ */
9
+ export declare function i18n(options?: LocalizationPluginOptions): [I18nPlugin, I18nCliTemplatePlugin];
10
+ export { I18nCliTemplatePlugin };
11
+ export { locale, fetchT } from './hooks';
12
+ export { useI18n, I18nPlugin, type CommandLocalizationContext } from './i18n';
package/dist/index.js CHANGED
@@ -1,7 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.I18nPlugin = exports.useI18n = exports.fetchT = exports.locale = exports.I18nCliTemplatePlugin = void 0;
3
4
  exports.i18n = i18n;
5
+ const cli_1 = require("./cli");
6
+ Object.defineProperty(exports, "I18nCliTemplatePlugin", { enumerable: true, get: function () { return cli_1.I18nCliTemplatePlugin; } });
4
7
  const i18n_1 = require("./i18n");
8
+ /**
9
+ * Returns the i18n plugin and CLI template plugin.
10
+ * This function initializes the i18n plugin with the provided options and returns both the i18n plugin and the CLI template plugin.
11
+ * @param options The options for the i18n plugin. If not provided, default options will be used.
12
+ * @returns A tuple containing the i18n plugin and the CLI template plugin.
13
+ */
5
14
  function i18n(options) {
6
15
  const opt = {
7
16
  ...options,
@@ -15,6 +24,12 @@ function i18n(options) {
15
24
  },
16
25
  };
17
26
  const localization = new i18n_1.I18nPlugin(opt);
18
- return localization;
27
+ return [localization, new cli_1.I18nCliTemplatePlugin({})];
19
28
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSxvQkFnQkM7QUFsQkQsaUNBQStEO0FBRS9ELFNBQWdCLElBQUksQ0FBQyxPQUFtQztJQUN0RCxNQUFNLEdBQUcsR0FBRztRQUNWLEdBQUcsT0FBTztRQUNWLFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLElBQUksRUFBRSxhQUFhO1lBQ25CLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsR0FBRyxPQUFPLEVBQUUsV0FBVztTQUN4QjtLQUMyQixDQUFDO0lBRS9CLE1BQU0sWUFBWSxHQUFHLElBQUksaUJBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6QyxPQUFPLFlBQVksQ0FBQztBQUN0QixDQUFDIn0=
29
+ var hooks_1 = require("./hooks");
30
+ Object.defineProperty(exports, "locale", { enumerable: true, get: function () { return hooks_1.locale; } });
31
+ Object.defineProperty(exports, "fetchT", { enumerable: true, get: function () { return hooks_1.fetchT; } });
32
+ var i18n_2 = require("./i18n");
33
+ Object.defineProperty(exports, "useI18n", { enumerable: true, get: function () { return i18n_2.useI18n; } });
34
+ Object.defineProperty(exports, "I18nPlugin", { enumerable: true, get: function () { return i18n_2.I18nPlugin; } });
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU0Esb0JBa0JDO0FBM0JELCtCQUE4QztBQTZCckMsc0dBN0JBLDJCQUFxQixPQTZCQTtBQTVCOUIsaUNBQStEO0FBRS9EOzs7OztHQUtHO0FBQ0gsU0FBZ0IsSUFBSSxDQUNsQixPQUFtQztJQUVuQyxNQUFNLEdBQUcsR0FBRztRQUNWLEdBQUcsT0FBTztRQUNWLFdBQVcsRUFBRTtZQUNYLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLElBQUksRUFBRSxhQUFhO1lBQ25CLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLHVCQUF1QixFQUFFLElBQUk7WUFDN0IsR0FBRyxPQUFPLEVBQUUsV0FBVztTQUN4QjtLQUMyQixDQUFDO0lBRS9CLE1BQU0sWUFBWSxHQUFHLElBQUksaUJBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUV6QyxPQUFPLENBQUMsWUFBWSxFQUFFLElBQUksMkJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDO0FBR0QsaUNBQXlDO0FBQWhDLCtGQUFBLE1BQU0sT0FBQTtBQUFFLCtGQUFBLE1BQU0sT0FBQTtBQUN2QiwrQkFBOEU7QUFBckUsK0ZBQUEsT0FBTyxPQUFBO0FBQUUsa0dBQUEsVUFBVSxPQUFBIn0=
package/dist/types.d.ts CHANGED
@@ -1,10 +1,31 @@
1
1
  import { COMMAND_METADATA_KEY } from './constants';
2
+ /**
3
+ * Represents the metadata for command translations.
4
+ */
2
5
  export interface CommandTranslationMetadata {
6
+ /**
7
+ * The name of the command.
8
+ */
3
9
  name?: string;
10
+ /**
11
+ * The description of the command.
12
+ */
4
13
  description?: string;
14
+ /**
15
+ * The options for the command.
16
+ */
5
17
  options?: (Record<'name' | 'description', string> | Record<string, Record<'name' | 'description', string>>)[];
6
18
  }
19
+ /**
20
+ * Represents a command translation, including its metadata and translations.
21
+ */
7
22
  export interface CommandTranslation {
23
+ /**
24
+ * The metadata for the command translation.
25
+ */
8
26
  [COMMAND_METADATA_KEY]: CommandTranslationMetadata;
27
+ /**
28
+ * The translations for the command, keyed by locale.
29
+ */
9
30
  translations: Record<string, any>;
10
31
  }
package/dist/utils.d.ts CHANGED
@@ -1,3 +1,11 @@
1
1
  import type { CommandBuilderLike } from 'commandkit';
2
2
  import type { CommandTranslationMetadata } from './types';
3
+ /**
4
+ * Applies translations to a command builder-like object.
5
+ * @param command The command builder-like object to apply translations to.
6
+ * @param locale The locale to apply the translations for.
7
+ * @param translation The translation metadata containing the translations.
8
+ * @returns The command builder-like object with applied translations.
9
+ * @private
10
+ */
3
11
  export declare function applyTranslations(command: CommandBuilderLike, locale: string, translation: CommandTranslationMetadata): CommandBuilderLike;
package/dist/utils.js CHANGED
@@ -1,6 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applyTranslations = applyTranslations;
4
+ /**
5
+ * Applies translations to a command builder-like object.
6
+ * @param command The command builder-like object to apply translations to.
7
+ * @param locale The locale to apply the translations for.
8
+ * @param translation The translation metadata containing the translations.
9
+ * @returns The command builder-like object with applied translations.
10
+ * @private
11
+ */
4
12
  function applyTranslations(command, locale, translation) {
5
13
  const json = 'toJSON' in command ? command.toJSON() : command;
6
14
  const { name, description, options } = translation;
@@ -55,4 +63,4 @@ function applyTranslations(command, locale, translation) {
55
63
  }
56
64
  return json;
57
65
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSw4Q0FtRUM7QUFuRUQsU0FBZ0IsaUJBQWlCLENBQy9CLE9BQTJCLEVBQzNCLE1BQWMsRUFDZCxXQUF1QztJQUV2QyxNQUFNLElBQUksR0FBRyxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUM5RCxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsR0FBRyxXQUFXLENBQUM7SUFFbkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNULElBQUksQ0FBQyxJQUFJLEtBQVQsSUFBSSxDQUFDLElBQUksR0FBSyxJQUFJLEVBQUM7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixLQUF2QixJQUFJLENBQUMsa0JBQWtCLEdBQUssRUFBRSxFQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLFdBQVcsS0FBaEIsSUFBSSxDQUFDLFdBQVcsR0FBSyxXQUFXLEVBQUM7UUFDakMsSUFBSSxDQUFDLHlCQUF5QixLQUE5QixJQUFJLENBQUMseUJBQXlCLEdBQUssRUFBRSxFQUFDO1FBQ3RDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7SUFDdkQsQ0FBQztJQUVELElBQUksT0FBTyxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsT0FBTyxLQUFaLElBQUksQ0FBQyxPQUFPLEdBQUssRUFBRSxFQUFDO1FBQ3BCLE1BQU0sY0FBYyxHQUFHLENBQ3JCLE1BQTJCLEVBQzNCLGlCQUFzQyxFQUN0QyxFQUFFO1lBQ0YsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQztZQUNoRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNULE1BQU0sQ0FBQyxJQUFJLEtBQVgsTUFBTSxDQUFDLElBQUksR0FBSyxJQUFJLEVBQUM7Z0JBQ3JCLE1BQU0sQ0FBQyxrQkFBa0IsS0FBekIsTUFBTSxDQUFDLGtCQUFrQixHQUFLLEVBQUUsRUFBQztnQkFDakMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMzQyxDQUFDO1lBRUQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLFdBQVcsS0FBbEIsTUFBTSxDQUFDLFdBQVcsR0FBSyxXQUFXLEVBQUM7Z0JBQ25DLE1BQU0sQ0FBQyx5QkFBeUIsS0FBaEMsTUFBTSxDQUFDLHlCQUF5QixHQUFLLEVBQUUsRUFBQztnQkFDeEMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQztZQUN6RCxDQUFDO1lBRUQsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUMvQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxNQUFNLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxJQUFJLG9CQUFvQixFQUFFLENBQUM7d0JBQ3pCLGNBQWMsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDbEQsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsQ0FBQztRQUVGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFckMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO29CQUNyQyxLQUFLLE1BQU0sb0JBQW9CLElBQUksaUJBQWlCLEVBQUUsQ0FBQzt3QkFDckQsY0FBYyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO29CQUNsRCxDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixjQUFjLENBQUMsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUM7Z0JBQy9DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFXQSw4Q0FtRUM7QUEzRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGlCQUFpQixDQUMvQixPQUEyQixFQUMzQixNQUFjLEVBQ2QsV0FBdUM7SUFFdkMsTUFBTSxJQUFJLEdBQUcsUUFBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDOUQsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDO0lBRW5ELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLENBQUMsSUFBSSxLQUFULElBQUksQ0FBQyxJQUFJLEdBQUssSUFBSSxFQUFDO1FBQ25CLElBQUksQ0FBQyxrQkFBa0IsS0FBdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFLLEVBQUUsRUFBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxXQUFXLEtBQWhCLElBQUksQ0FBQyxXQUFXLEdBQUssV0FBVyxFQUFDO1FBQ2pDLElBQUksQ0FBQyx5QkFBeUIsS0FBOUIsSUFBSSxDQUFDLHlCQUF5QixHQUFLLEVBQUUsRUFBQztRQUN0QyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ1osSUFBSSxDQUFDLE9BQU8sS0FBWixJQUFJLENBQUMsT0FBTyxHQUFLLEVBQUUsRUFBQztRQUNwQixNQUFNLGNBQWMsR0FBRyxDQUNyQixNQUEyQixFQUMzQixpQkFBc0MsRUFDdEMsRUFBRTtZQUNGLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsaUJBQWlCLENBQUM7WUFDaEQsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsSUFBSSxLQUFYLE1BQU0sQ0FBQyxJQUFJLEdBQUssSUFBSSxFQUFDO2dCQUNyQixNQUFNLENBQUMsa0JBQWtCLEtBQXpCLE1BQU0sQ0FBQyxrQkFBa0IsR0FBSyxFQUFFLEVBQUM7Z0JBQ2pDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDM0MsQ0FBQztZQUVELElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxXQUFXLEtBQWxCLE1BQU0sQ0FBQyxXQUFXLEdBQUssV0FBVyxFQUFDO2dCQUNuQyxNQUFNLENBQUMseUJBQXlCLEtBQWhDLE1BQU0sQ0FBQyx5QkFBeUIsR0FBSyxFQUFFLEVBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUM7WUFDekQsQ0FBQztZQUVELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDL0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsTUFBTSxvQkFBb0IsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDNUQsSUFBSSxvQkFBb0IsRUFBRSxDQUFDO3dCQUN6QixjQUFjLENBQUMsU0FBUyxFQUFFLG9CQUFvQixDQUFDLENBQUM7b0JBQ2xELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRXJDLElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQztvQkFDckMsS0FBSyxNQUFNLG9CQUFvQixJQUFJLGlCQUFpQixFQUFFLENBQUM7d0JBQ3JELGNBQWMsQ0FBQyxTQUFTLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztvQkFDbEQsQ0FBQztnQkFDSCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sY0FBYyxDQUFDLFNBQVMsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@commandkit/i18n",
3
- "version": "0.1.2",
3
+ "version": "1.2.0-rc.1",
4
4
  "description": "CommandKit plugin that adds command localizations backed by i18next",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -16,24 +16,27 @@
16
16
  "redis",
17
17
  "cache"
18
18
  ],
19
- "author": "twilight <hello@twlite.dev>",
19
+ "contributors": [
20
+ "Twilight <hello@twlite.dev>",
21
+ "Avraj <avraj@underctrl.io>"
22
+ ],
20
23
  "license": "MIT",
21
24
  "bugs": {
22
25
  "url": "https://github.com/underctrl-io/commandkit/issues"
23
26
  },
24
27
  "homepage": "https://github.com/underctrl-io/commandkit#readme",
25
28
  "dependencies": {
26
- "i18next": "^24.2.3",
29
+ "i18next": "^25.0.0",
27
30
  "i18next-fs-backend": "^2.6.0"
28
31
  },
29
32
  "devDependencies": {
30
- "discord.js": "14",
31
- "typescript": "^5.7.3",
32
- "commandkit": "0.1.11",
33
- "tsconfig": "0.0.0"
33
+ "discord.js": "^14.21.0",
34
+ "typescript": "^5.8.3",
35
+ "commandkit": "1.2.0-rc.1",
36
+ "tsconfig": "0.0.0-rc.1"
34
37
  },
35
38
  "scripts": {
36
- "lint": "tsc --noEmit",
39
+ "check-types": "tsc --noEmit",
37
40
  "build": "tsc"
38
41
  }
39
42
  }