@let-value/translate-extract 1.0.9 → 1.0.10
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/dist/bin/cli.cjs +2 -2
- package/dist/bin/cli.js +2 -2
- package/dist/bin/cli.js.map +1 -1
- package/dist/run-8jCGSKUe.cjs +184 -0
- package/dist/run-CMzN4vHt.js +150 -0
- package/dist/run-CMzN4vHt.js.map +1 -0
- package/dist/src/index.cjs +282 -120
- package/dist/src/index.d.cts +141 -62
- package/dist/src/index.d.cts.map +1 -1
- package/dist/src/index.d.ts +142 -63
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +281 -118
- package/dist/src/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/run-BMvkoNJ4.js +0 -192
- package/dist/run-BMvkoNJ4.js.map +0 -1
- package/dist/run-CbsVUbM3.cjs +0 -226
package/dist/src/index.d.cts
CHANGED
|
@@ -1,73 +1,74 @@
|
|
|
1
|
+
import { Locale } from "@let-value/translate";
|
|
1
2
|
import { LevelWithSilent, Logger } from "pino";
|
|
2
3
|
import { GetTextTranslationRecord } from "gettext-parser";
|
|
3
4
|
|
|
4
5
|
//#region src/plugin.d.ts
|
|
5
6
|
type MaybePromise<T> = T | Promise<T>;
|
|
6
|
-
interface
|
|
7
|
-
entrypoint: string;
|
|
7
|
+
interface Context {
|
|
8
8
|
config: ResolvedConfig;
|
|
9
9
|
generatedAt: Date;
|
|
10
|
-
locale: string;
|
|
11
10
|
logger?: Logger;
|
|
12
11
|
}
|
|
13
|
-
interface ResolveArgs {
|
|
12
|
+
interface ResolveArgs<TInput = unknown> {
|
|
14
13
|
entrypoint: string;
|
|
15
14
|
path: string;
|
|
15
|
+
namespace: string;
|
|
16
|
+
data?: TInput;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
+
interface ResolveResult<TInput = unknown> {
|
|
18
19
|
entrypoint: string;
|
|
19
20
|
path: string;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
contents: string;
|
|
25
|
-
};
|
|
26
|
-
type LoadHook = (args: LoadArgs, ctx: ExtractContext) => MaybePromise<LoadResult | undefined>;
|
|
27
|
-
type ExtractArgs = LoadResult;
|
|
28
|
-
type ExtractResult = ResolveResult & {
|
|
29
|
-
translations: unknown;
|
|
30
|
-
};
|
|
31
|
-
type ExtractHook = (args: ExtractArgs, ctx: ExtractContext) => MaybePromise<ExtractResult | undefined>;
|
|
32
|
-
type CollectArgs = ExtractResult & {
|
|
33
|
-
destination: string;
|
|
34
|
-
};
|
|
35
|
-
type CollectResult = ExtractResult & {
|
|
36
|
-
destination: string;
|
|
37
|
-
};
|
|
38
|
-
type CollectHook = (args: CollectArgs, ctx: ExtractContext) => MaybePromise<CollectResult | undefined>;
|
|
39
|
-
type GenerateArgs = {
|
|
21
|
+
namespace: string;
|
|
22
|
+
data?: TInput;
|
|
23
|
+
}
|
|
24
|
+
interface LoadArgs<TInput = unknown> {
|
|
40
25
|
entrypoint: string;
|
|
41
26
|
path: string;
|
|
42
|
-
|
|
27
|
+
namespace: string;
|
|
28
|
+
data?: TInput;
|
|
29
|
+
}
|
|
30
|
+
interface LoadResult<TInput = unknown> {
|
|
31
|
+
entrypoint: string;
|
|
32
|
+
path: string;
|
|
33
|
+
namespace: string;
|
|
34
|
+
data: TInput;
|
|
35
|
+
}
|
|
36
|
+
interface ProcessArgs<TInput = unknown> {
|
|
37
|
+
entrypoint: string;
|
|
38
|
+
path: string;
|
|
39
|
+
namespace: string;
|
|
40
|
+
data: TInput;
|
|
41
|
+
}
|
|
42
|
+
interface ProcessResult<TOutput = unknown> {
|
|
43
|
+
entrypoint: string;
|
|
44
|
+
path: string;
|
|
45
|
+
namespace: string;
|
|
46
|
+
data: TOutput;
|
|
47
|
+
}
|
|
48
|
+
type Filter = {
|
|
49
|
+
filter: RegExp;
|
|
50
|
+
namespace?: string;
|
|
43
51
|
};
|
|
44
|
-
type
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
onGenerate(options: {
|
|
59
|
-
filter: RegExp;
|
|
60
|
-
}, hook: GenerateHook): void;
|
|
61
|
-
resolvePath(args: ResolveArgs): void;
|
|
62
|
-
context: ExtractContext;
|
|
63
|
-
}
|
|
64
|
-
interface ExtractorPlugin {
|
|
52
|
+
type ResolveHook<TInput = unknown> = (args: ResolveArgs<TInput>) => MaybePromise<ResolveResult<TInput> | undefined>;
|
|
53
|
+
type LoadHook<TInput = unknown> = (args: LoadArgs<TInput>) => MaybePromise<LoadResult<TInput> | undefined>;
|
|
54
|
+
type ProcessHook<TInput = unknown, TOutput = unknown> = (args: ProcessArgs<TInput>) => MaybePromise<ProcessResult<TOutput> | undefined>;
|
|
55
|
+
interface Build<TInput = unknown, TOutput = unknown> {
|
|
56
|
+
context: Context;
|
|
57
|
+
resolve(args: ResolveArgs<unknown>): void;
|
|
58
|
+
load(args: LoadArgs<unknown>): void;
|
|
59
|
+
process(args: ProcessArgs<unknown>): void;
|
|
60
|
+
defer(namespace: string): Promise<void>;
|
|
61
|
+
onResolve(options: Filter, hook: ResolveHook<TInput>): void;
|
|
62
|
+
onLoad(options: Filter, hook: LoadHook<TInput>): void;
|
|
63
|
+
onProcess(options: Filter, hook: ProcessHook<TInput, TOutput>): void;
|
|
64
|
+
}
|
|
65
|
+
interface Plugin<TInput = unknown, TOutput = unknown> {
|
|
65
66
|
name: string;
|
|
66
|
-
setup(build:
|
|
67
|
+
setup(build: Build<TInput, TOutput>): void;
|
|
67
68
|
}
|
|
68
69
|
//#endregion
|
|
69
|
-
//#region src/plugins/
|
|
70
|
-
declare function
|
|
70
|
+
//#region src/plugins/cleanup/cleanup.d.ts
|
|
71
|
+
declare function cleanup(): Plugin;
|
|
71
72
|
//#endregion
|
|
72
73
|
//#region src/plugins/core/queries/types.d.ts
|
|
73
74
|
interface Comments {
|
|
@@ -86,11 +87,17 @@ interface Translation {
|
|
|
86
87
|
obsolete?: boolean;
|
|
87
88
|
}
|
|
88
89
|
//#endregion
|
|
90
|
+
//#region src/plugins/core/core.d.ts
|
|
91
|
+
declare function core(): Plugin<string, Translation[]>;
|
|
92
|
+
//#endregion
|
|
89
93
|
//#region src/plugins/po/po.d.ts
|
|
94
|
+
interface Collected {
|
|
95
|
+
translations: GetTextTranslationRecord;
|
|
96
|
+
}
|
|
90
97
|
declare function formatDate(date: Date): string;
|
|
91
98
|
declare function collect(source: Translation[], locale?: string): GetTextTranslationRecord;
|
|
92
|
-
declare function merge(sources:
|
|
93
|
-
declare function po():
|
|
99
|
+
declare function merge(sources: Collected[], existing: string | Buffer | undefined, obsolete: ObsoleteStrategy, locale: string, generatedAt: Date): string;
|
|
100
|
+
declare function po(): Plugin;
|
|
94
101
|
//#endregion
|
|
95
102
|
//#region src/configuration.d.ts
|
|
96
103
|
type DestinationFn = (args: {
|
|
@@ -98,36 +105,94 @@ type DestinationFn = (args: {
|
|
|
98
105
|
entrypoint: string;
|
|
99
106
|
path: string;
|
|
100
107
|
}) => string;
|
|
101
|
-
type ExcludeFn = (
|
|
108
|
+
type ExcludeFn = (args: {
|
|
109
|
+
entrypoint: string;
|
|
110
|
+
path: string;
|
|
111
|
+
}) => boolean;
|
|
102
112
|
type Exclude = RegExp | ExcludeFn;
|
|
103
113
|
declare const defaultPlugins: {
|
|
104
114
|
core: typeof core;
|
|
105
115
|
po: typeof po;
|
|
116
|
+
cleanup: typeof cleanup;
|
|
106
117
|
};
|
|
107
118
|
type DefaultPlugins = typeof defaultPlugins;
|
|
119
|
+
/**
|
|
120
|
+
* Strategy to handle obsolete translations in existing locale files:
|
|
121
|
+
* - "mark": keep obsolete entries in the locale file but mark them as obsolete
|
|
122
|
+
* - "remove": remove obsolete entries from the locale file
|
|
123
|
+
*/
|
|
108
124
|
type ObsoleteStrategy = "mark" | "remove";
|
|
109
125
|
interface EntrypointConfig {
|
|
110
126
|
entrypoint: string;
|
|
111
127
|
destination?: DestinationFn;
|
|
112
128
|
obsolete?: ObsoleteStrategy;
|
|
129
|
+
walk?: boolean;
|
|
113
130
|
exclude?: Exclude | Exclude[];
|
|
114
131
|
}
|
|
115
132
|
interface UserConfig {
|
|
116
|
-
|
|
133
|
+
/**
|
|
134
|
+
* Default locale to use as the base for extraction
|
|
135
|
+
* @default "en"
|
|
136
|
+
* @see {@link Locale} for available locales
|
|
137
|
+
*/
|
|
138
|
+
defaultLocale?: Locale;
|
|
139
|
+
/**
|
|
140
|
+
* Array of locales to extract translations for
|
|
141
|
+
* @default [defaultLocale]
|
|
142
|
+
* @see {@link Locale} for available locales
|
|
143
|
+
*/
|
|
144
|
+
locales?: Locale[];
|
|
145
|
+
/**
|
|
146
|
+
* Array of plugins to use or a function to override the default plugins
|
|
147
|
+
* @default DefaultPlugins
|
|
148
|
+
* @see {@link DefaultPlugins} for available plugins
|
|
149
|
+
*/
|
|
150
|
+
plugins?: Plugin[] | ((defaultPlugins: DefaultPlugins) => Plugin[]);
|
|
151
|
+
/**
|
|
152
|
+
* One or more entrypoints to extract translations from, could be:
|
|
153
|
+
* - file path, will be treated as a single file entrypoint
|
|
154
|
+
* - glob pattern will be expanded to match files, each treated as a separate entrypoint
|
|
155
|
+
* - configuration object with options for the entrypoint
|
|
156
|
+
* @see {@link EntrypointConfig} for configuration options
|
|
157
|
+
*/
|
|
117
158
|
entrypoints: string | EntrypointConfig | Array<string | EntrypointConfig>;
|
|
118
|
-
|
|
119
|
-
|
|
159
|
+
/**
|
|
160
|
+
* Function to determine the destination path for each extracted locale file
|
|
161
|
+
* @default `./translations/entrypoint.locale.po`
|
|
162
|
+
* @see {@link DestinationFn}
|
|
163
|
+
* @see Can be overridden per entrypoint via `destination` in {@link EntrypointConfig
|
|
164
|
+
*/
|
|
120
165
|
destination?: DestinationFn;
|
|
166
|
+
/**
|
|
167
|
+
* Strategy to handle obsolete translations in existing locale files
|
|
168
|
+
* @default "mark"
|
|
169
|
+
* @see {@link ObsoleteStrategy} for available strategies
|
|
170
|
+
* @see Can be overridden per entrypoint via `obsolete` in {@link EntrypointConfig
|
|
171
|
+
*/
|
|
121
172
|
obsolete?: ObsoleteStrategy;
|
|
173
|
+
/**
|
|
174
|
+
* Whether to recursively walk dependencies of the entrypoints
|
|
175
|
+
* @default true
|
|
176
|
+
* @see Can be overridden per entrypoint via `walk` in {@link EntrypointConfig}.
|
|
177
|
+
*/
|
|
122
178
|
walk?: boolean;
|
|
123
|
-
|
|
179
|
+
/**
|
|
180
|
+
* Paths or patterns to exclude from extraction, applied to all entrypoints
|
|
181
|
+
* @default [/node_modules/, /dist/, /build/]
|
|
182
|
+
* @see Can be overridden per entrypoint via `exclude` in {@link EntrypointConfig}.
|
|
183
|
+
*/
|
|
124
184
|
exclude?: Exclude | Exclude[];
|
|
185
|
+
/**
|
|
186
|
+
* Log level for the extraction process
|
|
187
|
+
* @default "info"
|
|
188
|
+
*/
|
|
189
|
+
logLevel?: LevelWithSilent;
|
|
125
190
|
}
|
|
126
191
|
interface ResolvedEntrypoint extends Omit<EntrypointConfig, "exclude"> {
|
|
127
192
|
exclude?: Exclude[];
|
|
128
193
|
}
|
|
129
194
|
interface ResolvedConfig {
|
|
130
|
-
plugins:
|
|
195
|
+
plugins: Plugin[];
|
|
131
196
|
entrypoints: ResolvedEntrypoint[];
|
|
132
197
|
defaultLocale: string;
|
|
133
198
|
locales: string[];
|
|
@@ -137,19 +202,33 @@ interface ResolvedConfig {
|
|
|
137
202
|
logLevel: LevelWithSilent;
|
|
138
203
|
exclude: Exclude[];
|
|
139
204
|
}
|
|
205
|
+
/**
|
|
206
|
+
* Type helper to make it easier to use translate.config.ts
|
|
207
|
+
* @param config - {@link UserConfig}.
|
|
208
|
+
*/
|
|
140
209
|
declare function defineConfig(config: UserConfig): ResolvedConfig;
|
|
141
210
|
//#endregion
|
|
142
211
|
//#region src/plugins/react/react.d.ts
|
|
143
|
-
declare function react():
|
|
212
|
+
declare function react(): Plugin<string, Translation[]>;
|
|
144
213
|
//#endregion
|
|
145
214
|
//#region src/run.d.ts
|
|
146
|
-
|
|
215
|
+
type Task = {
|
|
216
|
+
type: "resolve";
|
|
217
|
+
args: ResolveArgs;
|
|
218
|
+
} | {
|
|
219
|
+
type: "load";
|
|
220
|
+
args: LoadArgs;
|
|
221
|
+
} | {
|
|
222
|
+
type: "process";
|
|
223
|
+
args: ProcessArgs;
|
|
224
|
+
};
|
|
225
|
+
declare function run(entrypoint: ResolvedEntrypoint, {
|
|
147
226
|
config,
|
|
148
227
|
logger
|
|
149
228
|
}: {
|
|
150
229
|
config: ResolvedConfig;
|
|
151
230
|
logger?: Logger;
|
|
152
|
-
}): Promise<
|
|
231
|
+
}): Promise<void>;
|
|
153
232
|
//#endregion
|
|
154
|
-
export {
|
|
233
|
+
export { Build, Collected, Context, DestinationFn, EntrypointConfig, Exclude, ExcludeFn, Filter, LoadArgs, LoadHook, LoadResult, ObsoleteStrategy, Plugin, ProcessArgs, ProcessHook, ProcessResult, ResolveArgs, ResolveHook, ResolveResult, ResolvedConfig, ResolvedEntrypoint, Task, UserConfig, cleanup, collect, core, defineConfig, formatDate, merge, po, react, run };
|
|
155
234
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/src/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/plugin.ts","../../../../src/plugins/
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/plugin.ts","../../../../src/plugins/cleanup/cleanup.ts","../../../../src/plugins/core/queries/types.ts","../../../../src/plugins/core/core.ts","../../../../src/plugins/po/po.ts","../../../../src/configuration.ts","../../../../src/plugins/react/react.ts","../../../../src/run.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,74 +1,75 @@
|
|
|
1
1
|
import { LevelWithSilent, Logger } from "pino";
|
|
2
|
-
import Parser from "tree-sitter";
|
|
3
2
|
import { GetTextTranslationRecord } from "gettext-parser";
|
|
3
|
+
import Parser from "tree-sitter";
|
|
4
|
+
import { Locale } from "@let-value/translate";
|
|
4
5
|
|
|
5
6
|
//#region src/plugin.d.ts
|
|
6
7
|
type MaybePromise<T> = T | Promise<T>;
|
|
7
|
-
interface
|
|
8
|
-
entrypoint: string;
|
|
8
|
+
interface Context {
|
|
9
9
|
config: ResolvedConfig;
|
|
10
10
|
generatedAt: Date;
|
|
11
|
-
locale: string;
|
|
12
11
|
logger?: Logger;
|
|
13
12
|
}
|
|
14
|
-
interface ResolveArgs {
|
|
13
|
+
interface ResolveArgs<TInput = unknown> {
|
|
15
14
|
entrypoint: string;
|
|
16
15
|
path: string;
|
|
16
|
+
namespace: string;
|
|
17
|
+
data?: TInput;
|
|
17
18
|
}
|
|
18
|
-
|
|
19
|
+
interface ResolveResult<TInput = unknown> {
|
|
19
20
|
entrypoint: string;
|
|
20
21
|
path: string;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
destination: string;
|
|
38
|
-
};
|
|
39
|
-
type CollectHook = (args: CollectArgs, ctx: ExtractContext) => MaybePromise<CollectResult | undefined>;
|
|
40
|
-
type GenerateArgs = {
|
|
22
|
+
namespace: string;
|
|
23
|
+
data?: TInput;
|
|
24
|
+
}
|
|
25
|
+
interface LoadArgs<TInput = unknown> {
|
|
26
|
+
entrypoint: string;
|
|
27
|
+
path: string;
|
|
28
|
+
namespace: string;
|
|
29
|
+
data?: TInput;
|
|
30
|
+
}
|
|
31
|
+
interface LoadResult<TInput = unknown> {
|
|
32
|
+
entrypoint: string;
|
|
33
|
+
path: string;
|
|
34
|
+
namespace: string;
|
|
35
|
+
data: TInput;
|
|
36
|
+
}
|
|
37
|
+
interface ProcessArgs<TInput = unknown> {
|
|
41
38
|
entrypoint: string;
|
|
42
39
|
path: string;
|
|
43
|
-
|
|
40
|
+
namespace: string;
|
|
41
|
+
data: TInput;
|
|
42
|
+
}
|
|
43
|
+
interface ProcessResult<TOutput = unknown> {
|
|
44
|
+
entrypoint: string;
|
|
45
|
+
path: string;
|
|
46
|
+
namespace: string;
|
|
47
|
+
data: TOutput;
|
|
48
|
+
}
|
|
49
|
+
type Filter = {
|
|
50
|
+
filter: RegExp;
|
|
51
|
+
namespace?: string;
|
|
44
52
|
};
|
|
45
|
-
type
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
onGenerate(options: {
|
|
60
|
-
filter: RegExp;
|
|
61
|
-
}, hook: GenerateHook): void;
|
|
62
|
-
resolvePath(args: ResolveArgs): void;
|
|
63
|
-
context: ExtractContext;
|
|
64
|
-
}
|
|
65
|
-
interface ExtractorPlugin {
|
|
53
|
+
type ResolveHook<TInput = unknown> = (args: ResolveArgs<TInput>) => MaybePromise<ResolveResult<TInput> | undefined>;
|
|
54
|
+
type LoadHook<TInput = unknown> = (args: LoadArgs<TInput>) => MaybePromise<LoadResult<TInput> | undefined>;
|
|
55
|
+
type ProcessHook<TInput = unknown, TOutput = unknown> = (args: ProcessArgs<TInput>) => MaybePromise<ProcessResult<TOutput> | undefined>;
|
|
56
|
+
interface Build<TInput = unknown, TOutput = unknown> {
|
|
57
|
+
context: Context;
|
|
58
|
+
resolve(args: ResolveArgs<unknown>): void;
|
|
59
|
+
load(args: LoadArgs<unknown>): void;
|
|
60
|
+
process(args: ProcessArgs<unknown>): void;
|
|
61
|
+
defer(namespace: string): Promise<void>;
|
|
62
|
+
onResolve(options: Filter, hook: ResolveHook<TInput>): void;
|
|
63
|
+
onLoad(options: Filter, hook: LoadHook<TInput>): void;
|
|
64
|
+
onProcess(options: Filter, hook: ProcessHook<TInput, TOutput>): void;
|
|
65
|
+
}
|
|
66
|
+
interface Plugin<TInput = unknown, TOutput = unknown> {
|
|
66
67
|
name: string;
|
|
67
|
-
setup(build:
|
|
68
|
+
setup(build: Build<TInput, TOutput>): void;
|
|
68
69
|
}
|
|
69
70
|
//#endregion
|
|
70
|
-
//#region src/plugins/
|
|
71
|
-
declare function
|
|
71
|
+
//#region src/plugins/cleanup/cleanup.d.ts
|
|
72
|
+
declare function cleanup(): Plugin;
|
|
72
73
|
//#endregion
|
|
73
74
|
//#region src/plugins/core/queries/types.d.ts
|
|
74
75
|
interface Comments {
|
|
@@ -87,11 +88,17 @@ interface Translation {
|
|
|
87
88
|
obsolete?: boolean;
|
|
88
89
|
}
|
|
89
90
|
//#endregion
|
|
91
|
+
//#region src/plugins/core/core.d.ts
|
|
92
|
+
declare function core(): Plugin<string, Translation[]>;
|
|
93
|
+
//#endregion
|
|
90
94
|
//#region src/plugins/po/po.d.ts
|
|
95
|
+
interface Collected {
|
|
96
|
+
translations: GetTextTranslationRecord;
|
|
97
|
+
}
|
|
91
98
|
declare function formatDate(date: Date): string;
|
|
92
99
|
declare function collect(source: Translation[], locale?: string): GetTextTranslationRecord;
|
|
93
|
-
declare function merge(sources:
|
|
94
|
-
declare function po():
|
|
100
|
+
declare function merge(sources: Collected[], existing: string | Buffer | undefined, obsolete: ObsoleteStrategy, locale: string, generatedAt: Date): string;
|
|
101
|
+
declare function po(): Plugin;
|
|
95
102
|
//#endregion
|
|
96
103
|
//#region src/configuration.d.ts
|
|
97
104
|
type DestinationFn = (args: {
|
|
@@ -99,36 +106,94 @@ type DestinationFn = (args: {
|
|
|
99
106
|
entrypoint: string;
|
|
100
107
|
path: string;
|
|
101
108
|
}) => string;
|
|
102
|
-
type ExcludeFn = (
|
|
109
|
+
type ExcludeFn = (args: {
|
|
110
|
+
entrypoint: string;
|
|
111
|
+
path: string;
|
|
112
|
+
}) => boolean;
|
|
103
113
|
type Exclude = RegExp | ExcludeFn;
|
|
104
114
|
declare const defaultPlugins: {
|
|
105
115
|
core: typeof core;
|
|
106
116
|
po: typeof po;
|
|
117
|
+
cleanup: typeof cleanup;
|
|
107
118
|
};
|
|
108
119
|
type DefaultPlugins = typeof defaultPlugins;
|
|
120
|
+
/**
|
|
121
|
+
* Strategy to handle obsolete translations in existing locale files:
|
|
122
|
+
* - "mark": keep obsolete entries in the locale file but mark them as obsolete
|
|
123
|
+
* - "remove": remove obsolete entries from the locale file
|
|
124
|
+
*/
|
|
109
125
|
type ObsoleteStrategy = "mark" | "remove";
|
|
110
126
|
interface EntrypointConfig {
|
|
111
127
|
entrypoint: string;
|
|
112
128
|
destination?: DestinationFn;
|
|
113
129
|
obsolete?: ObsoleteStrategy;
|
|
130
|
+
walk?: boolean;
|
|
114
131
|
exclude?: Exclude | Exclude[];
|
|
115
132
|
}
|
|
116
133
|
interface UserConfig {
|
|
117
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Default locale to use as the base for extraction
|
|
136
|
+
* @default "en"
|
|
137
|
+
* @see {@link Locale} for available locales
|
|
138
|
+
*/
|
|
139
|
+
defaultLocale?: Locale;
|
|
140
|
+
/**
|
|
141
|
+
* Array of locales to extract translations for
|
|
142
|
+
* @default [defaultLocale]
|
|
143
|
+
* @see {@link Locale} for available locales
|
|
144
|
+
*/
|
|
145
|
+
locales?: Locale[];
|
|
146
|
+
/**
|
|
147
|
+
* Array of plugins to use or a function to override the default plugins
|
|
148
|
+
* @default DefaultPlugins
|
|
149
|
+
* @see {@link DefaultPlugins} for available plugins
|
|
150
|
+
*/
|
|
151
|
+
plugins?: Plugin[] | ((defaultPlugins: DefaultPlugins) => Plugin[]);
|
|
152
|
+
/**
|
|
153
|
+
* One or more entrypoints to extract translations from, could be:
|
|
154
|
+
* - file path, will be treated as a single file entrypoint
|
|
155
|
+
* - glob pattern will be expanded to match files, each treated as a separate entrypoint
|
|
156
|
+
* - configuration object with options for the entrypoint
|
|
157
|
+
* @see {@link EntrypointConfig} for configuration options
|
|
158
|
+
*/
|
|
118
159
|
entrypoints: string | EntrypointConfig | Array<string | EntrypointConfig>;
|
|
119
|
-
|
|
120
|
-
|
|
160
|
+
/**
|
|
161
|
+
* Function to determine the destination path for each extracted locale file
|
|
162
|
+
* @default `./translations/entrypoint.locale.po`
|
|
163
|
+
* @see {@link DestinationFn}
|
|
164
|
+
* @see Can be overridden per entrypoint via `destination` in {@link EntrypointConfig
|
|
165
|
+
*/
|
|
121
166
|
destination?: DestinationFn;
|
|
167
|
+
/**
|
|
168
|
+
* Strategy to handle obsolete translations in existing locale files
|
|
169
|
+
* @default "mark"
|
|
170
|
+
* @see {@link ObsoleteStrategy} for available strategies
|
|
171
|
+
* @see Can be overridden per entrypoint via `obsolete` in {@link EntrypointConfig
|
|
172
|
+
*/
|
|
122
173
|
obsolete?: ObsoleteStrategy;
|
|
174
|
+
/**
|
|
175
|
+
* Whether to recursively walk dependencies of the entrypoints
|
|
176
|
+
* @default true
|
|
177
|
+
* @see Can be overridden per entrypoint via `walk` in {@link EntrypointConfig}.
|
|
178
|
+
*/
|
|
123
179
|
walk?: boolean;
|
|
124
|
-
|
|
180
|
+
/**
|
|
181
|
+
* Paths or patterns to exclude from extraction, applied to all entrypoints
|
|
182
|
+
* @default [/node_modules/, /dist/, /build/]
|
|
183
|
+
* @see Can be overridden per entrypoint via `exclude` in {@link EntrypointConfig}.
|
|
184
|
+
*/
|
|
125
185
|
exclude?: Exclude | Exclude[];
|
|
186
|
+
/**
|
|
187
|
+
* Log level for the extraction process
|
|
188
|
+
* @default "info"
|
|
189
|
+
*/
|
|
190
|
+
logLevel?: LevelWithSilent;
|
|
126
191
|
}
|
|
127
192
|
interface ResolvedEntrypoint extends Omit<EntrypointConfig, "exclude"> {
|
|
128
193
|
exclude?: Exclude[];
|
|
129
194
|
}
|
|
130
195
|
interface ResolvedConfig {
|
|
131
|
-
plugins:
|
|
196
|
+
plugins: Plugin[];
|
|
132
197
|
entrypoints: ResolvedEntrypoint[];
|
|
133
198
|
defaultLocale: string;
|
|
134
199
|
locales: string[];
|
|
@@ -138,19 +203,33 @@ interface ResolvedConfig {
|
|
|
138
203
|
logLevel: LevelWithSilent;
|
|
139
204
|
exclude: Exclude[];
|
|
140
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Type helper to make it easier to use translate.config.ts
|
|
208
|
+
* @param config - {@link UserConfig}.
|
|
209
|
+
*/
|
|
141
210
|
declare function defineConfig(config: UserConfig): ResolvedConfig;
|
|
142
211
|
//#endregion
|
|
143
212
|
//#region src/plugins/react/react.d.ts
|
|
144
|
-
declare function react():
|
|
213
|
+
declare function react(): Plugin<string, Translation[]>;
|
|
145
214
|
//#endregion
|
|
146
215
|
//#region src/run.d.ts
|
|
147
|
-
|
|
216
|
+
type Task = {
|
|
217
|
+
type: "resolve";
|
|
218
|
+
args: ResolveArgs;
|
|
219
|
+
} | {
|
|
220
|
+
type: "load";
|
|
221
|
+
args: LoadArgs;
|
|
222
|
+
} | {
|
|
223
|
+
type: "process";
|
|
224
|
+
args: ProcessArgs;
|
|
225
|
+
};
|
|
226
|
+
declare function run(entrypoint: ResolvedEntrypoint, {
|
|
148
227
|
config,
|
|
149
228
|
logger
|
|
150
229
|
}: {
|
|
151
230
|
config: ResolvedConfig;
|
|
152
231
|
logger?: Logger;
|
|
153
|
-
}): Promise<
|
|
232
|
+
}): Promise<void>;
|
|
154
233
|
//#endregion
|
|
155
|
-
export {
|
|
234
|
+
export { Build, Collected, Context, DestinationFn, EntrypointConfig, Exclude, ExcludeFn, Filter, LoadArgs, LoadHook, LoadResult, ObsoleteStrategy, Plugin, ProcessArgs, ProcessHook, ProcessResult, ResolveArgs, ResolveHook, ResolveResult, ResolvedConfig, ResolvedEntrypoint, Task, UserConfig, cleanup, collect, core, defineConfig, formatDate, merge, po, react, run };
|
|
156
235
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/plugin.ts","../../../../src/plugins/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../../src/plugin.ts","../../../../src/plugins/cleanup/cleanup.ts","../../../../src/plugins/core/queries/types.ts","../../../../src/plugins/core/core.ts","../../../../src/plugins/po/po.ts","../../../../src/configuration.ts","../../../../src/plugins/react/react.ts","../../../../src/run.ts"],"sourcesContent":[],"mappings":"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"}
|