@tolgee/cli 2.1.7 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/cli.js +3 -3
  2. package/dist/extractor/extractor.js +11 -4
  3. package/dist/extractor/parser/extractComment.js +7 -10
  4. package/dist/extractor/parser/generalMapper.js +4 -4
  5. package/dist/extractor/parser/mergerMachine.js +42 -11
  6. package/dist/extractor/parser/tokenMergers/closingTagMerger.js +1 -1
  7. package/dist/extractor/parser/tokenMergers/commentsMerger.js +8 -5
  8. package/dist/extractor/parser/tokenMergers/stringMerger.js +5 -5
  9. package/dist/extractor/parser/tokenMergers/templateStringMerger.js +1 -1
  10. package/dist/extractor/parser/tree/getTranslateProps.js +1 -1
  11. package/dist/extractor/parserNgx/ParserNgx.js +29 -0
  12. package/dist/extractor/parserNgx/ngxMapper.js +67 -0
  13. package/dist/extractor/parserNgx/ngxTreeTransform.js +46 -0
  14. package/dist/extractor/parserNgx/rules/componentWithT.js +43 -0
  15. package/dist/extractor/parserNgx/rules/helpers/parsePipeArgs.js +26 -0
  16. package/dist/extractor/parserNgx/rules/translateFunction.js +7 -0
  17. package/dist/extractor/parserNgx/rules/translatePipe.js +57 -0
  18. package/dist/extractor/parserNgx/tokenMergers/elementMerger.js +29 -0
  19. package/dist/extractor/parserNgx/tokenMergers/pipeMerger.js +19 -0
  20. package/dist/extractor/parserNgx/tokenMergers/translateMerger.js +41 -0
  21. package/dist/extractor/parserSvelte/svelteMapper.js +2 -2
  22. package/dist/extractor/parserVue/vueMapper.js +2 -2
  23. package/dist/extractor/runner.js +11 -1
  24. package/dist/extractor/tokenizer.js +12 -6
  25. package/dist/options.js +1 -1
  26. package/extractor.d.ts +1 -1
  27. package/package.json +1 -1
  28. package/schema.json +1 -1
  29. package/textmate/AngularHtml.tmLanguage +1 -0
  30. package/textmate/THIRD_PARTY_NOTICE +32 -0
@@ -0,0 +1,41 @@
1
+ const SERVICE_NAME_POSSIBILITIES = ['translateService'];
2
+ const TRANSLATE_FUNCTION_NAMES = ['translate', 'instant', 'get'];
3
+ // translateService.translate('key1', 'default-1', { ns: 'ns-1' })
4
+ export const translateMerger = {
5
+ initial: 0 /* S.Idle */,
6
+ step: (state, t, end) => {
7
+ const type = t.customType;
8
+ const token = t.token;
9
+ switch (state) {
10
+ case 0 /* S.Idle */:
11
+ if (['variable', 'function.call.pipe'].includes(type) &&
12
+ SERVICE_NAME_POSSIBILITIES.includes(token)) {
13
+ return 2 /* S.ExpectDot */;
14
+ }
15
+ break;
16
+ case 2 /* S.ExpectDot */:
17
+ if (type === 'acessor.dot') {
18
+ return 3 /* S.ExpectCall */;
19
+ }
20
+ break;
21
+ case 3 /* S.ExpectCall */:
22
+ if (type === 'function.call' &&
23
+ TRANSLATE_FUNCTION_NAMES.includes(token)) {
24
+ return 1 /* S.ExpectBracket */;
25
+ }
26
+ break;
27
+ case 1 /* S.ExpectBracket */:
28
+ if (type === 'expression.begin') {
29
+ return end.MERGE_CUSTOM;
30
+ }
31
+ }
32
+ },
33
+ customType: 'trigger.translate.function',
34
+ customMerge(tokens) {
35
+ return {
36
+ before: tokens.slice(0, -2),
37
+ toMerge: tokens.slice(-2),
38
+ after: [],
39
+ };
40
+ },
41
+ };
@@ -2,9 +2,9 @@ export const svelteMapper = (token) => {
2
2
  switch (token.type) {
3
3
  // strings
4
4
  case 'punctuation.definition.string.begin.svelte':
5
- return 'string.begin';
5
+ return 'string.quote';
6
6
  case 'punctuation.definition.string.end.svelte':
7
- return 'string.end';
7
+ return 'string.quote';
8
8
  case 'string.quoted.svelte':
9
9
  return 'string.body';
10
10
  case 'string.unquoted.svelte':
@@ -24,9 +24,9 @@ export const vueMapper = (token) => {
24
24
  return 'operator.assignment';
25
25
  // html string attributes
26
26
  case 'punctuation.definition.string.begin.html':
27
- return 'string.begin';
27
+ return 'string.quote';
28
28
  case 'punctuation.definition.string.end.html':
29
- return 'string.end';
29
+ return 'string.quote';
30
30
  case 'string.quoted.single.html':
31
31
  case 'string.quoted.double.html':
32
32
  return 'string.body';
@@ -16,7 +16,14 @@ export async function extractKeysFromFile(file, parserType, options, extractor)
16
16
  }
17
17
  export function findPossibleFrameworks(fileNames) {
18
18
  const possibleFrameworks = [];
19
- const extensions = new Set(fileNames.map((name) => extname(name)));
19
+ const extensions = new Set(fileNames.map((name) => {
20
+ if (name.endsWith('.component.html')) {
21
+ return '.component.html';
22
+ }
23
+ else {
24
+ return extname(name);
25
+ }
26
+ }));
20
27
  if (extensions.has('.jsx') || extensions.has('.tsx')) {
21
28
  possibleFrameworks.push('react');
22
29
  }
@@ -26,6 +33,9 @@ export function findPossibleFrameworks(fileNames) {
26
33
  if (extensions.has('.svelte')) {
27
34
  possibleFrameworks.push('svelte');
28
35
  }
36
+ if (extensions.has('.component.html')) {
37
+ possibleFrameworks.push('ngx');
38
+ }
29
39
  return possibleFrameworks;
30
40
  }
31
41
  function detectParserType(fileNames) {
@@ -9,6 +9,7 @@ const GrammarFiles = {
9
9
  ["source.tsx" /* Grammar.TYPESCRIPT_TSX */]: new URL('TypeScriptReact.tmLanguage', GRAMMAR_PATH),
10
10
  ["source.svelte" /* Grammar.SVELTE */]: new URL('Svelte.tmLanguage', GRAMMAR_PATH),
11
11
  ["source.vue" /* Grammar.VUE */]: new URL('Vue.tmLanguage', GRAMMAR_PATH),
12
+ ["html-template.ng" /* Grammar.ANGULAR_HTML */]: new URL('AngularHtml.tmLanguage', GRAMMAR_PATH),
12
13
  ["text.html.basic" /* Grammar.HTML */]: new URL('HTML.tmLanguage', GRAMMAR_PATH),
13
14
  ["text.html.derivative" /* Grammar.HTML_D */]: new URL('HTML.tmLanguage', GRAMMAR_PATH),
14
15
  };
@@ -33,8 +34,9 @@ async function loadGrammar(scope) {
33
34
  const grammar = await readFile(file, 'utf8');
34
35
  return JSON.parse(grammar);
35
36
  }
36
- function extnameToGrammar(extname) {
37
- switch (extname) {
37
+ function fileNameToGrammar(fileName) {
38
+ const ext = extname(fileName);
39
+ switch (ext) {
38
40
  case '.js':
39
41
  case '.mjs':
40
42
  case '.cjs':
@@ -50,7 +52,12 @@ function extnameToGrammar(extname) {
50
52
  case '.svelte':
51
53
  return "source.svelte" /* Grammar.SVELTE */;
52
54
  case '.html':
53
- return "text.html.basic" /* Grammar.HTML */;
55
+ if (/.*\.component\.html/.test(fileName)) {
56
+ return "html-template.ng" /* Grammar.ANGULAR_HTML */;
57
+ }
58
+ else {
59
+ return "text.html.basic" /* Grammar.HTML */;
60
+ }
54
61
  }
55
62
  }
56
63
  function tokenize(code, grammar) {
@@ -98,10 +105,9 @@ export default async function (code, fileName) {
98
105
  loadGrammar: loadGrammar,
99
106
  });
100
107
  }
101
- const fileType = extname(fileName);
102
- const grammarName = extnameToGrammar(fileType);
108
+ const grammarName = fileNameToGrammar(fileName);
103
109
  if (!grammarName) {
104
- throw new Error(`Cannot find grammar for file type ${fileType}`);
110
+ throw new Error(`Cannot find grammar for file type ${fileName}`);
105
111
  }
106
112
  const grammar = await registry.loadGrammar(grammarName);
107
113
  if (!grammar) {
package/dist/options.js CHANGED
@@ -59,5 +59,5 @@ export const FILE_PATTERNS = new Option('-pt, --patterns <patterns...>', 'File g
59
59
  export const STRICT_NAMESPACE = new Option('--strict-namespace').hideHelp(true);
60
60
  export const STRICT_NAMESPACE_NEGATION = new Option('--no-strict-namespace', "No require namespace to be reachable, use if you don't use namespaces.");
61
61
  export const DEFAULT_NAMESPACE = new Option('--default-namespace <namespace>', 'Default namespace used in extraction if not specified otherwise.');
62
- export const PARSER = new Option('--parser <parser>', 'Override parser detection.').choices(['react', 'vue', 'svelte']);
62
+ export const PARSER = new Option('--parser <parser>', 'Override parser detection.').choices(['react', 'vue', 'svelte', 'ngx']);
63
63
  export const VERBOSE = new Option('-v, --verbose [rules...]', 'Enable verbose logging. If you want more info to be logged pass an option.').choices(['extractor']);
package/extractor.d.ts CHANGED
@@ -18,7 +18,7 @@ export type ExtractOptions = {
18
18
  strictNamespace: boolean;
19
19
  defaultNamespace: string | undefined;
20
20
  };
21
- export type ParserType = 'react' | 'vue' | 'svelte';
21
+ export type ParserType = 'react' | 'vue' | 'svelte' | 'ngx';
22
22
  export type Extractor = (fileContents: string, fileName: string, options: ExtractOptions) => ExtractionResult;
23
23
  export type ExtractionResult = {
24
24
  keys: ExtractedKey[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolgee/cli",
3
- "version": "2.1.7",
3
+ "version": "2.2.0",
4
4
  "type": "module",
5
5
  "description": "A tool to interact with the Tolgee Platform through CLI",
6
6
  "repository": {
package/schema.json CHANGED
@@ -33,7 +33,7 @@
33
33
  },
34
34
  "parser": {
35
35
  "description": "Override parser detection.",
36
- "enum": ["react", "vue", "svelte"]
36
+ "enum": ["react", "vue", "svelte", "ngx"]
37
37
  },
38
38
  "push": {
39
39
  "type": "object",