2.0.1 • Published 1 year ago
@ts-intl/dependency v2.0.1
I18n keys dependency analysis
Useful tools to help collect and reveal i18n keys usage, features:
- generate dependency graph
- generate used i18n keys which grouped by file path Easy integration, reduce size of dictionary/messages and helpful to manage locale files.
type DepsGraph = Record<string, string[]>;
const depsGraphExample: DepsGraph = {
'/src/a.tsx': ['/src/b.ts', '/src/c.tsx'],
'/src/b.ts': ['/src/c.tsx'],
};
type PathIntlKeysMap = Record<string, string[]>;
const pathIntlKeysMapExample = {
'/src/a.tsx': ['global.keyA', 'global.keyB', 'global.keyC'],
'/src/b.ts': ['global.keyB', 'global.keyC'],
'/src/c.tsx': ['global.keyC'],
};Installation
npm install @ts-intl/dependencygetDependencies
Interface
const getDependencies = (
statuses: FileStatus[],
entries: string[],
opts: {
extractIntlKeys?: (module: string) => string[] | Promise<string[]>;
ignoreCollectDeps?: boolean;
madgeConfig: MadgeConfig;
},
ctx: {
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
},
extractIntlKeysOpts?: {
funcNamePattern?: string;
hookNamePattern?: string;
richNamePattern?: string;
argIdx?: number;
}
) =>
Promise<{
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
modules: string[];
}>;Usage
const { graph, pathIntlKeysMap, modules } = await getDependencies(statuses, entries, { ...opts, ignoreCollectDeps: true }, ctx, extractIntlKeysOpts);Configuration
| Property | Type | Default | Description |
|---|---|---|---|
statuses | FileStatus[] | null | based on increment update, provide a file changed list to specify which files need to update |
entries | string[] | null | absolute entry path list, to reduce unused result |
opts.extractIntlKeys | (module: string) => string[] \| Promise<string[]> | undefined | custom intl keys extract method, using built-in one if not provide |
opts.ignoreCollectDeps | boolean | undefined | whether re-collect dependency graph, provide true to improve performance |
opts.madgeConfig | MadgeConfig | null | visit madge. baseDir is required and should be absolute path of root of your project. The provided config would merge with default config and pass to madge. |
ctx.graph | DepsGraph | null | latest dependency graph of your project(before oldest modified time of statuses) |
ctx.pathIntlKeysMap | PathIntlKeysMap | null | latest path-keys map of your project(before oldest modified time of statuses) |
extractIntlKeysOpts | { funcNamePattern?: string; hookNamePattern?: string; richNamePattern?: string; argIdx?: number; } | undefined | localization function syntax config for built-in extractIntlKeys |
getDependenciesByEntries
getDependenciesaim at increment update,getDependenciesByEntriesis based ongetDependenciesand aiming at full update, which generatestatusesandctxby itself.
Interface
const getDependenciesByEntries = (
entries: string[],
opts: {
extractIntlKeys?: (module: string) => string[] | Promise<string[]>;
ignoreCollectDeps?: boolean;
madgeConfig: MadgeConfig;
},
extractIntlKeysOpts?: {
funcNamePattern?: string;
hookNamePattern?: string;
richNamePattern?: string;
argIdx?: number;
}
) =>
Promise<{
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
modules: string[];
}>;opts.ignoreCollectDeps would set to true to improve performance.
getDependenciesFs
based on
getDependenciesByEntries, automatically generateentriesby providingentrydirectory, for example innextjsapp,entrycould be[nextjs-app-absolute-path]/src/pages
Interface
const getDependenciesFs = (
entry: string,
opts: {
extractIntlKeys?: (module: string) => string[] | Promise<string[]>;
ignoreCollectDeps?: boolean;
madgeConfig: MadgeConfig;
},
extractIntlKeysOpts?: {
funcNamePattern?: string;
hookNamePattern?: string;
richNamePattern?: string;
argIdx?: number;
}
) =>
Promise<{
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
modules: string[];
}>;pipeDependenciesRes
Return more useful information
Interface
pipeDependenciesRes(
res: {
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
modules: string[];
}
): {
graph: DepsGraph;
pathIntlKeysMap: PathIntlKeysMap;
modules: string[];
moduleIntlKeysMap: {
[module: string]: string[]; // used intl key list of a module(include offspring of this module)
};
usedIntlKeys: string[]; // all used intl keys
}