@gringow/gringow 0.1.4 → 0.2.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.
Files changed (53) hide show
  1. package/README.md +31 -36
  2. package/dist/config.d.mts +4 -6
  3. package/dist/config.mjs +30 -20
  4. package/dist/config.test.mjs +42 -30
  5. package/dist/constants/default-config.mjs +3 -3
  6. package/dist/create-cache-id.test.mjs +5 -5
  7. package/dist/data/check-cache.mjs +31 -63
  8. package/dist/data/clear-cache.mjs +30 -20
  9. package/dist/data/create-cache-dir.mjs +30 -20
  10. package/dist/data/delete-cache-item.mjs +30 -20
  11. package/dist/data/get-cache.mjs +30 -20
  12. package/dist/data/get-or-create-cache.mjs +30 -20
  13. package/dist/data/md5.test.mjs +5 -5
  14. package/dist/data/save-cache.mjs +30 -20
  15. package/dist/data/write-cache-to-disk.mjs +30 -20
  16. package/dist/flat-template-string.test.mjs +5 -5
  17. package/dist/gringow.mjs +82 -491
  18. package/dist/index.mjs +82 -491
  19. package/dist/io/ask-llm.d.mts +3 -1
  20. package/dist/io/ask-llm.mjs +75 -449
  21. package/dist/logger.test.mjs +5 -5
  22. package/dist/schemas/config.shcema.d.mts +23 -35
  23. package/dist/schemas/config.shcema.mjs +25 -15
  24. package/dist/types/index.d.mts +3 -25
  25. package/gringow.config.js.example +2 -4
  26. package/gringow.config.json.example +4 -2
  27. package/package.json +2 -5
  28. package/dist/io/anthropic/ask.d.mts +0 -11
  29. package/dist/io/anthropic/ask.mjs +0 -192
  30. package/dist/io/anthropic/commit-response.d.mts +0 -21
  31. package/dist/io/anthropic/commit-response.mjs +0 -10
  32. package/dist/io/anthropic/index.d.mts +0 -14
  33. package/dist/io/anthropic/index.mjs +0 -210
  34. package/dist/io/anthropic/parse.d.mts +0 -20
  35. package/dist/io/anthropic/parse.mjs +0 -10
  36. package/dist/io/gemini/ask.d.mts +0 -11
  37. package/dist/io/gemini/ask.mjs +0 -234
  38. package/dist/io/gemini/commit-response.d.mts +0 -11
  39. package/dist/io/gemini/commit-response.mjs +0 -7
  40. package/dist/io/gemini/index.d.mts +0 -14
  41. package/dist/io/gemini/index.mjs +0 -250
  42. package/dist/io/gemini/parse.d.mts +0 -20
  43. package/dist/io/gemini/parse.mjs +0 -11
  44. package/dist/io/huggingface/ask.d.mts +0 -13
  45. package/dist/io/huggingface/ask.mjs +0 -407
  46. package/dist/io/huggingface/commit-response.d.mts +0 -39
  47. package/dist/io/huggingface/commit-response.mjs +0 -14
  48. package/dist/io/huggingface/index.d.mts +0 -13
  49. package/dist/io/huggingface/index.mjs +0 -428
  50. package/dist/io/huggingface/languages-map.d.mts +0 -191
  51. package/dist/io/huggingface/languages-map.mjs +0 -187
  52. package/dist/io/huggingface/parse.d.mts +0 -20
  53. package/dist/io/huggingface/parse.mjs +0 -9
@@ -13236,7 +13236,7 @@ function findTestFileStackTrace(error, each) {
13236
13236
  globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
13237
13237
  globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
13238
13238
 
13239
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/utils.C8RiOc4B.js
13239
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/utils.C8RiOc4B.js
13240
13240
  var NAME_WORKER_STATE = "__vitest_worker__";
13241
13241
  function getWorkerState() {
13242
13242
  const workerState = globalThis[NAME_WORKER_STATE];
@@ -13296,7 +13296,7 @@ async function waitForImportsToResolve() {
13296
13296
  await waitForImportsToResolve();
13297
13297
  }
13298
13298
 
13299
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
13299
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
13300
13300
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
13301
13301
  function getDefaultExportFromCjs2(x2) {
13302
13302
  return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
@@ -15330,7 +15330,7 @@ var SnapshotClient = class {
15330
15330
  }
15331
15331
  };
15332
15332
 
15333
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/date.W2xKR2qe.js
15333
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/date.W2xKR2qe.js
15334
15334
  var RealDate = Date;
15335
15335
  var now2 = null;
15336
15336
  var MockDate = class _MockDate extends RealDate {
@@ -15383,7 +15383,7 @@ function resetDate() {
15383
15383
  globalThis.Date = RealDate;
15384
15384
  }
15385
15385
 
15386
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/vi.DgezovHB.js
15386
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/vi.DgezovHB.js
15387
15387
  var unsupported = [
15388
15388
  // .poll is meant to retry matchers until they succeed, and
15389
15389
  // snapshots will always succeed as long as the poll method doesn't thow an error
@@ -18115,7 +18115,7 @@ function getImporter(name) {
18115
18115
  return stack?.file || "";
18116
18116
  }
18117
18117
 
18118
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/index.js
18118
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/index.js
18119
18119
  __toESM(require_dist(), 1);
18120
18120
 
18121
18121
  // src/data/md5.ts
@@ -19,20 +19,34 @@ var defaultConfig = {
19
19
  prefix: "grw",
20
20
  write: true
21
21
  },
22
- keys: {},
23
22
  sourceLanguage: "en-US",
24
23
  defaultLanguage: "pt-BR",
25
24
  languages: ["pt-BR", "fr-CA"],
26
25
  llm: {
27
- choice: "huggingface",
28
- model: "Xenova/nllb-200-distilled-600M",
26
+ provider: "openai",
27
+ apiKey: void 0,
28
+ model: "gpt-4o-mini",
29
29
  temperature: 1,
30
30
  sleep: 0
31
31
  },
32
32
  globby: "./src/**/*.{js,jsx,ts,tsx}"
33
33
  };
34
34
  var languageSchema = z.string().regex(/^[a-z]{2,3}(-[A-Z]{2})?$/);
35
- var llmOptionsSchema = z.enum(["gemini", "anthropic", "huggingface"]);
35
+ var llmProviderSchema = z.enum([
36
+ "anthropic",
37
+ "gemini",
38
+ "openai",
39
+ "groq",
40
+ "mistral",
41
+ "ollama",
42
+ "xai",
43
+ "deepseek",
44
+ "openrouter",
45
+ "cerebras",
46
+ "lmstudio",
47
+ "azure",
48
+ "meta"
49
+ ]);
36
50
  var configSchema = z.object({
37
51
  debug: z.boolean().optional(),
38
52
  log: z.object({
@@ -44,15 +58,13 @@ var configSchema = z.object({
44
58
  prefix: z.string(),
45
59
  write: z.boolean().optional()
46
60
  }),
47
- keys: z.object({
48
- anthropicApiKey: z.string().optional(),
49
- geminiApiKey: z.string().optional()
50
- }),
51
61
  sourceLanguage: languageSchema,
52
62
  defaultLanguage: languageSchema,
53
63
  languages: z.array(languageSchema),
54
64
  llm: z.object({
55
- choice: llmOptionsSchema,
65
+ provider: llmProviderSchema,
66
+ apiKey: z.string().optional(),
67
+ baseURL: z.string().optional(),
56
68
  model: z.string().nullable(),
57
69
  temperature: z.number().optional(),
58
70
  sleep: z.number().optional(),
@@ -66,17 +78,15 @@ var configSchema = z.object({
66
78
  globby: z.string().regex(/^\.\/.*/).optional()
67
79
  }).refine(
68
80
  (data) => {
69
- if (data.llm.choice === "gemini" && !data.keys.geminiApiKey) {
70
- return false;
71
- }
72
- if (data.llm.choice === "anthropic" && !data.keys.anthropicApiKey) {
73
- return false;
81
+ const noApiKeyRequired = ["ollama", "lmstudio"];
82
+ if (noApiKeyRequired.includes(data.llm.provider)) {
83
+ return true;
74
84
  }
75
- return true;
85
+ return !!data.llm.apiKey;
76
86
  },
77
87
  {
78
- message: "The API key corresponding to the chosen LLM must be present.",
79
- path: ["keys"]
88
+ message: "The API key must be present in llm.apiKey for the chosen provider.",
89
+ path: ["llm", "apiKey"]
80
90
  }
81
91
  );
82
92
 
@@ -112,7 +122,7 @@ Your task is to translate a given text and output **only one valid JSON object**
112
122
 
113
123
  Follow these rules strictly:
114
124
 
115
- 1. The original text is written in English.
125
+ 1. The original text is written in English or Spanish.
116
126
  2. You will receive additional user parameters under the variable 'extraInstructions'. These may specify tone, persona, style, context, or any relevant translation guideline.
117
127
  - Examples: \u201Ctranslate as if you were a Shakespearean narrator\u201D or \u201Cuse a formal business tone suitable for a corporate presentation.\u201D
118
128
  - Apply these creatively but **without altering the meaning or punctuation** of the original text.
@@ -145,10 +155,10 @@ Translate the following text faithfully:
145
155
  function defaultPostPrompt(_config) {
146
156
  return "";
147
157
  }
148
- function prePrompt(config, append, replace) {
158
+ function prePrompt(config, prepend, replace) {
149
159
  return [
150
160
  // ...(append ? ['[SPECIFIC_INPUTS]', String(append), '[/SPECIFIC_INPUTS]'] : []),
151
- replace ? String(replace) : defaultPrePrompt(config, append)
161
+ replace ? String(replace) : defaultPrePrompt(config, prepend)
152
162
  ].join(" ").trim();
153
163
  }
154
164
  function postPrompt(config, prepend, replace) {
@@ -19,20 +19,34 @@ var defaultConfig = {
19
19
  prefix: "grw",
20
20
  write: true
21
21
  },
22
- keys: {},
23
22
  sourceLanguage: "en-US",
24
23
  defaultLanguage: "pt-BR",
25
24
  languages: ["pt-BR", "fr-CA"],
26
25
  llm: {
27
- choice: "huggingface",
28
- model: "Xenova/nllb-200-distilled-600M",
26
+ provider: "openai",
27
+ apiKey: void 0,
28
+ model: "gpt-4o-mini",
29
29
  temperature: 1,
30
30
  sleep: 0
31
31
  },
32
32
  globby: "./src/**/*.{js,jsx,ts,tsx}"
33
33
  };
34
34
  var languageSchema = z.string().regex(/^[a-z]{2,3}(-[A-Z]{2})?$/);
35
- var llmOptionsSchema = z.enum(["gemini", "anthropic", "huggingface"]);
35
+ var llmProviderSchema = z.enum([
36
+ "anthropic",
37
+ "gemini",
38
+ "openai",
39
+ "groq",
40
+ "mistral",
41
+ "ollama",
42
+ "xai",
43
+ "deepseek",
44
+ "openrouter",
45
+ "cerebras",
46
+ "lmstudio",
47
+ "azure",
48
+ "meta"
49
+ ]);
36
50
  var configSchema = z.object({
37
51
  debug: z.boolean().optional(),
38
52
  log: z.object({
@@ -44,15 +58,13 @@ var configSchema = z.object({
44
58
  prefix: z.string(),
45
59
  write: z.boolean().optional()
46
60
  }),
47
- keys: z.object({
48
- anthropicApiKey: z.string().optional(),
49
- geminiApiKey: z.string().optional()
50
- }),
51
61
  sourceLanguage: languageSchema,
52
62
  defaultLanguage: languageSchema,
53
63
  languages: z.array(languageSchema),
54
64
  llm: z.object({
55
- choice: llmOptionsSchema,
65
+ provider: llmProviderSchema,
66
+ apiKey: z.string().optional(),
67
+ baseURL: z.string().optional(),
56
68
  model: z.string().nullable(),
57
69
  temperature: z.number().optional(),
58
70
  sleep: z.number().optional(),
@@ -66,17 +78,15 @@ var configSchema = z.object({
66
78
  globby: z.string().regex(/^\.\/.*/).optional()
67
79
  }).refine(
68
80
  (data) => {
69
- if (data.llm.choice === "gemini" && !data.keys.geminiApiKey) {
70
- return false;
71
- }
72
- if (data.llm.choice === "anthropic" && !data.keys.anthropicApiKey) {
73
- return false;
81
+ const noApiKeyRequired = ["ollama", "lmstudio"];
82
+ if (noApiKeyRequired.includes(data.llm.provider)) {
83
+ return true;
74
84
  }
75
- return true;
85
+ return !!data.llm.apiKey;
76
86
  },
77
87
  {
78
- message: "The API key corresponding to the chosen LLM must be present.",
79
- path: ["keys"]
88
+ message: "The API key must be present in llm.apiKey for the chosen provider.",
89
+ path: ["llm", "apiKey"]
80
90
  }
81
91
  );
82
92
 
@@ -112,7 +122,7 @@ Your task is to translate a given text and output **only one valid JSON object**
112
122
 
113
123
  Follow these rules strictly:
114
124
 
115
- 1. The original text is written in English.
125
+ 1. The original text is written in English or Spanish.
116
126
  2. You will receive additional user parameters under the variable 'extraInstructions'. These may specify tone, persona, style, context, or any relevant translation guideline.
117
127
  - Examples: \u201Ctranslate as if you were a Shakespearean narrator\u201D or \u201Cuse a formal business tone suitable for a corporate presentation.\u201D
118
128
  - Apply these creatively but **without altering the meaning or punctuation** of the original text.
@@ -145,10 +155,10 @@ Translate the following text faithfully:
145
155
  function defaultPostPrompt(_config) {
146
156
  return "";
147
157
  }
148
- function prePrompt(config, append, replace) {
158
+ function prePrompt(config, prepend, replace) {
149
159
  return [
150
160
  // ...(append ? ['[SPECIFIC_INPUTS]', String(append), '[/SPECIFIC_INPUTS]'] : []),
151
- replace ? String(replace) : defaultPrePrompt(config, append)
161
+ replace ? String(replace) : defaultPrePrompt(config, prepend)
152
162
  ].join(" ").trim();
153
163
  }
154
164
  function postPrompt(config, prepend, replace) {
@@ -13236,7 +13236,7 @@ function findTestFileStackTrace(error, each) {
13236
13236
  globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
13237
13237
  globalThis.performance ? globalThis.performance.now.bind(globalThis.performance) : Date.now;
13238
13238
 
13239
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/utils.C8RiOc4B.js
13239
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/utils.C8RiOc4B.js
13240
13240
  var NAME_WORKER_STATE = "__vitest_worker__";
13241
13241
  function getWorkerState() {
13242
13242
  const workerState = globalThis[NAME_WORKER_STATE];
@@ -13296,7 +13296,7 @@ async function waitForImportsToResolve() {
13296
13296
  await waitForImportsToResolve();
13297
13297
  }
13298
13298
 
13299
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
13299
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/_commonjsHelpers.BFTU3MAI.js
13300
13300
  var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
13301
13301
  function getDefaultExportFromCjs2(x2) {
13302
13302
  return x2 && x2.__esModule && Object.prototype.hasOwnProperty.call(x2, "default") ? x2["default"] : x2;
@@ -15330,7 +15330,7 @@ var SnapshotClient = class {
15330
15330
  }
15331
15331
  };
15332
15332
 
15333
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/date.W2xKR2qe.js
15333
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/date.W2xKR2qe.js
15334
15334
  var RealDate = Date;
15335
15335
  var now2 = null;
15336
15336
  var MockDate = class _MockDate extends RealDate {
@@ -15383,7 +15383,7 @@ function resetDate() {
15383
15383
  globalThis.Date = RealDate;
15384
15384
  }
15385
15385
 
15386
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/chunks/vi.DgezovHB.js
15386
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/chunks/vi.DgezovHB.js
15387
15387
  var unsupported = [
15388
15388
  // .poll is meant to retry matchers until they succeed, and
15389
15389
  // snapshots will always succeed as long as the poll method doesn't thow an error
@@ -18115,7 +18115,7 @@ function getImporter(name) {
18115
18115
  return stack?.file || "";
18116
18116
  }
18117
18117
 
18118
- // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_terser@5.44.1/node_modules/vitest/dist/index.js
18118
+ // ../node_modules/.pnpm/vitest@2.1.9_@types+node@22.16.4_lightningcss@1.30.2_msw@2.12.8_@types+node@22.16.4_typescript@5.7.3__terser@5.44.1/node_modules/vitest/dist/index.js
18119
18119
  __toESM(require_dist(), 1);
18120
18120
 
18121
18121
  // src/flat-template-string.ts