@forumulate/cli 0.4.0 → 0.8.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 (229) hide show
  1. package/README.md +116 -5
  2. package/dist/api/args.d.ts +21 -0
  3. package/dist/api/args.d.ts.map +1 -0
  4. package/dist/api/args.js +81 -0
  5. package/dist/api/args.js.map +1 -0
  6. package/dist/api/command.d.ts +17 -0
  7. package/dist/api/command.d.ts.map +1 -0
  8. package/dist/api/command.js +182 -0
  9. package/dist/api/command.js.map +1 -0
  10. package/dist/api/describe.d.ts +5 -0
  11. package/dist/api/describe.d.ts.map +1 -0
  12. package/dist/api/describe.js +121 -0
  13. package/dist/api/describe.js.map +1 -0
  14. package/dist/api/http.d.ts +81 -0
  15. package/dist/api/http.d.ts.map +1 -0
  16. package/dist/api/http.js +183 -0
  17. package/dist/api/http.js.map +1 -0
  18. package/dist/api/operations.json +1 -0
  19. package/dist/api/output.d.ts +35 -0
  20. package/dist/api/output.d.ts.map +1 -0
  21. package/dist/api/output.js +176 -0
  22. package/dist/api/output.js.map +1 -0
  23. package/dist/api/request.d.ts +37 -0
  24. package/dist/api/request.d.ts.map +1 -0
  25. package/dist/api/request.js +230 -0
  26. package/dist/api/request.js.map +1 -0
  27. package/dist/api/send.d.ts +35 -0
  28. package/dist/api/send.d.ts.map +1 -0
  29. package/dist/api/send.js +85 -0
  30. package/dist/api/send.js.map +1 -0
  31. package/dist/api/spec.d.ts +96 -0
  32. package/dist/api/spec.d.ts.map +1 -0
  33. package/dist/api/spec.js +126 -0
  34. package/dist/api/spec.js.map +1 -0
  35. package/dist/cli.js +12 -0
  36. package/dist/cli.js.map +1 -1
  37. package/dist/commands/completion.d.ts +12 -0
  38. package/dist/commands/completion.d.ts.map +1 -0
  39. package/dist/commands/completion.js +153 -0
  40. package/dist/commands/completion.js.map +1 -0
  41. package/dist/commands/config.d.ts +33 -0
  42. package/dist/commands/config.d.ts.map +1 -0
  43. package/dist/commands/config.js +144 -0
  44. package/dist/commands/config.js.map +1 -0
  45. package/dist/commands/context.d.ts +35 -0
  46. package/dist/commands/context.d.ts.map +1 -0
  47. package/dist/commands/context.js +59 -0
  48. package/dist/commands/context.js.map +1 -0
  49. package/dist/commands/groups-api.d.ts +11 -0
  50. package/dist/commands/groups-api.d.ts.map +1 -0
  51. package/dist/commands/groups-api.js +140 -0
  52. package/dist/commands/groups-api.js.map +1 -0
  53. package/dist/commands/groups-community.d.ts +15 -0
  54. package/dist/commands/groups-community.d.ts.map +1 -0
  55. package/dist/commands/groups-community.js +344 -0
  56. package/dist/commands/groups-community.js.map +1 -0
  57. package/dist/commands/groups-content.d.ts +10 -0
  58. package/dist/commands/groups-content.d.ts.map +1 -0
  59. package/dist/commands/groups-content.js +331 -0
  60. package/dist/commands/groups-content.js.map +1 -0
  61. package/dist/commands/groups-docs.d.ts +12 -0
  62. package/dist/commands/groups-docs.d.ts.map +1 -0
  63. package/dist/commands/groups-docs.js +414 -0
  64. package/dist/commands/groups-docs.js.map +1 -0
  65. package/dist/commands/groups-org.d.ts +10 -0
  66. package/dist/commands/groups-org.d.ts.map +1 -0
  67. package/dist/commands/groups-org.js +405 -0
  68. package/dist/commands/groups-org.js.map +1 -0
  69. package/dist/commands/groups-site.d.ts +3 -0
  70. package/dist/commands/groups-site.d.ts.map +1 -0
  71. package/dist/commands/groups-site.js +230 -0
  72. package/dist/commands/groups-site.js.map +1 -0
  73. package/dist/commands/groups-spaces.d.ts +3 -0
  74. package/dist/commands/groups-spaces.d.ts.map +1 -0
  75. package/dist/commands/groups-spaces.js +273 -0
  76. package/dist/commands/groups-spaces.js.map +1 -0
  77. package/dist/commands/groups-types.d.ts +3 -0
  78. package/dist/commands/groups-types.d.ts.map +1 -0
  79. package/dist/commands/groups-types.js +251 -0
  80. package/dist/commands/groups-types.js.map +1 -0
  81. package/dist/commands/groups.d.ts +4 -0
  82. package/dist/commands/groups.d.ts.map +1 -0
  83. package/dist/commands/groups.js +71 -0
  84. package/dist/commands/groups.js.map +1 -0
  85. package/dist/commands/index.d.ts +25 -0
  86. package/dist/commands/index.d.ts.map +1 -0
  87. package/dist/commands/index.js +118 -0
  88. package/dist/commands/index.js.map +1 -0
  89. package/dist/commands/resource.d.ts +86 -0
  90. package/dist/commands/resource.d.ts.map +1 -0
  91. package/dist/commands/resource.js +314 -0
  92. package/dist/commands/resource.js.map +1 -0
  93. package/dist/content/command.d.ts +34 -0
  94. package/dist/content/command.d.ts.map +1 -0
  95. package/dist/content/command.js +225 -0
  96. package/dist/content/command.js.map +1 -0
  97. package/dist/content/library.d.ts +23 -0
  98. package/dist/content/library.d.ts.map +1 -0
  99. package/dist/content/library.js +41 -0
  100. package/dist/content/library.js.map +1 -0
  101. package/dist/content/render.d.ts +15 -0
  102. package/dist/content/render.d.ts.map +1 -0
  103. package/dist/content/render.js +85 -0
  104. package/dist/content/render.js.map +1 -0
  105. package/dist/content/types-gen.d.ts +40 -0
  106. package/dist/content/types-gen.d.ts.map +1 -0
  107. package/dist/content/types-gen.js +200 -0
  108. package/dist/content/types-gen.js.map +1 -0
  109. package/dist/help.d.ts +3 -0
  110. package/dist/help.d.ts.map +1 -0
  111. package/dist/help.js +142 -0
  112. package/dist/help.js.map +1 -0
  113. package/dist/import/coerce.d.ts +34 -0
  114. package/dist/import/coerce.d.ts.map +1 -0
  115. package/dist/import/coerce.js +134 -0
  116. package/dist/import/coerce.js.map +1 -0
  117. package/dist/import/command.d.ts +25 -0
  118. package/dist/import/command.d.ts.map +1 -0
  119. package/dist/import/command.js +127 -0
  120. package/dist/import/command.js.map +1 -0
  121. package/dist/import/config.d.ts +39 -0
  122. package/dist/import/config.d.ts.map +1 -0
  123. package/dist/import/config.js +48 -0
  124. package/dist/import/config.js.map +1 -0
  125. package/dist/import/contentful.d.ts +3 -0
  126. package/dist/import/contentful.d.ts.map +1 -0
  127. package/dist/import/contentful.js +179 -0
  128. package/dist/import/contentful.js.map +1 -0
  129. package/dist/import/disk.d.ts +4 -0
  130. package/dist/import/disk.d.ts.map +1 -0
  131. package/dist/import/disk.js +19 -0
  132. package/dist/import/disk.js.map +1 -0
  133. package/dist/import/engine-locales.d.ts +35 -0
  134. package/dist/import/engine-locales.d.ts.map +1 -0
  135. package/dist/import/engine-locales.js +61 -0
  136. package/dist/import/engine-locales.js.map +1 -0
  137. package/dist/import/engine.d.ts +29 -0
  138. package/dist/import/engine.d.ts.map +1 -0
  139. package/dist/import/engine.js +248 -0
  140. package/dist/import/engine.js.map +1 -0
  141. package/dist/import/media.d.ts +24 -0
  142. package/dist/import/media.d.ts.map +1 -0
  143. package/dist/import/media.js +39 -0
  144. package/dist/import/media.js.map +1 -0
  145. package/dist/import/model-fields.d.ts +22 -0
  146. package/dist/import/model-fields.d.ts.map +1 -0
  147. package/dist/import/model-fields.js +60 -0
  148. package/dist/import/model-fields.js.map +1 -0
  149. package/dist/import/payload/index.d.ts +9 -0
  150. package/dist/import/payload/index.d.ts.map +1 -0
  151. package/dist/import/payload/index.js +129 -0
  152. package/dist/import/payload/index.js.map +1 -0
  153. package/dist/import/report.d.ts +5 -0
  154. package/dist/import/report.d.ts.map +1 -0
  155. package/dist/import/report.js +52 -0
  156. package/dist/import/report.js.map +1 -0
  157. package/dist/import/richtext-core.d.ts +26 -0
  158. package/dist/import/richtext-core.d.ts.map +1 -0
  159. package/dist/import/richtext-core.js +65 -0
  160. package/dist/import/richtext-core.js.map +1 -0
  161. package/dist/import/richtext-html.d.ts +5 -0
  162. package/dist/import/richtext-html.d.ts.map +1 -0
  163. package/dist/import/richtext-html.js +311 -0
  164. package/dist/import/richtext-html.js.map +1 -0
  165. package/dist/import/richtext-json.d.ts +10 -0
  166. package/dist/import/richtext-json.d.ts.map +1 -0
  167. package/dist/import/richtext-json.js +250 -0
  168. package/dist/import/richtext-json.js.map +1 -0
  169. package/dist/import/sanity.d.ts +8 -0
  170. package/dist/import/sanity.d.ts.map +1 -0
  171. package/dist/import/sanity.js +158 -0
  172. package/dist/import/sanity.js.map +1 -0
  173. package/dist/import/strapi-archive.d.ts +6 -0
  174. package/dist/import/strapi-archive.d.ts.map +1 -0
  175. package/dist/import/strapi-archive.js +127 -0
  176. package/dist/import/strapi-archive.js.map +1 -0
  177. package/dist/import/strapi.d.ts +7 -0
  178. package/dist/import/strapi.d.ts.map +1 -0
  179. package/dist/import/strapi.js +185 -0
  180. package/dist/import/strapi.js.map +1 -0
  181. package/dist/import/tar.d.ts +3 -0
  182. package/dist/import/tar.d.ts.map +1 -0
  183. package/dist/import/tar.js +48 -0
  184. package/dist/import/tar.js.map +1 -0
  185. package/dist/import/types.d.ts +157 -0
  186. package/dist/import/types.d.ts.map +1 -0
  187. package/dist/import/types.js +12 -0
  188. package/dist/import/types.js.map +1 -0
  189. package/dist/import/wordpress.d.ts +15 -0
  190. package/dist/import/wordpress.d.ts.map +1 -0
  191. package/dist/import/wordpress.js +147 -0
  192. package/dist/import/wordpress.js.map +1 -0
  193. package/dist/publish/scan.d.ts +1 -1
  194. package/dist/publish/scan.d.ts.map +1 -1
  195. package/dist/publish/scan.js +2 -2
  196. package/dist/publish/scan.js.map +1 -1
  197. package/dist/publish-dir.d.ts +54 -0
  198. package/dist/publish-dir.d.ts.map +1 -0
  199. package/dist/publish-dir.js +119 -0
  200. package/dist/publish-dir.js.map +1 -0
  201. package/dist/run.d.ts +21 -1
  202. package/dist/run.d.ts.map +1 -1
  203. package/dist/run.js +70 -65
  204. package/dist/run.js.map +1 -1
  205. package/dist/translations/command.d.ts +36 -0
  206. package/dist/translations/command.d.ts.map +1 -0
  207. package/dist/translations/command.js +411 -0
  208. package/dist/translations/command.js.map +1 -0
  209. package/dist/translations/extras.d.ts +29 -0
  210. package/dist/translations/extras.d.ts.map +1 -0
  211. package/dist/translations/extras.js +123 -0
  212. package/dist/translations/extras.js.map +1 -0
  213. package/dist/translations/files.d.ts +22 -0
  214. package/dist/translations/files.d.ts.map +1 -0
  215. package/dist/translations/files.js +75 -0
  216. package/dist/translations/files.js.map +1 -0
  217. package/dist/translations/sync.d.ts +89 -0
  218. package/dist/translations/sync.d.ts.map +1 -0
  219. package/dist/translations/sync.js +215 -0
  220. package/dist/translations/sync.js.map +1 -0
  221. package/dist/translations/target.d.ts +33 -0
  222. package/dist/translations/target.d.ts.map +1 -0
  223. package/dist/translations/target.js +54 -0
  224. package/dist/translations/target.js.map +1 -0
  225. package/dist/translations/xliff.d.ts +29 -0
  226. package/dist/translations/xliff.d.ts.map +1 -0
  227. package/dist/translations/xliff.js +62 -0
  228. package/dist/translations/xliff.js.map +1 -0
  229. package/package.json +6 -4
@@ -0,0 +1,411 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TRANSLATIONS_VALUE_FLAGS = exports.TRANSLATIONS_COMMANDS = void 0;
4
+ exports.runTranslations = runTranslations;
5
+ exports.failingCells = failingCells;
6
+ const node_fs_1 = require("node:fs");
7
+ const node_path_1 = require("node:path");
8
+ const sdk_1 = require("@forumulate/sdk");
9
+ const library_1 = require("../content/library");
10
+ const target_1 = require("./target");
11
+ const extras_1 = require("./extras");
12
+ const sync_1 = require("./sync");
13
+ /** The subcommands, as data — `test/translation-surfaces.test.ts` checks the registry against it. */
14
+ exports.TRANSLATIONS_COMMANDS = [
15
+ 'locales list',
16
+ 'locales add',
17
+ 'locales relabel',
18
+ 'locales remove',
19
+ 'locales set',
20
+ 'status',
21
+ 'pull',
22
+ 'push',
23
+ 'auto',
24
+ 'labels pull',
25
+ 'labels push',
26
+ 'overrides pull',
27
+ 'overrides push',
28
+ 'item-locale',
29
+ 'remove',
30
+ 'entry',
31
+ 'name',
32
+ 'switcher',
33
+ 'provider',
34
+ ];
35
+ exports.TRANSLATIONS_VALUE_FLAGS = ['--site', '--locale', '--fail-on', '--state', '--entry', '--fields', '--collection', '--description'];
36
+ const disk = {
37
+ read: (p) => (0, node_fs_1.readFileSync)(p, 'utf8'),
38
+ write: (p, t) => {
39
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(p), { recursive: true });
40
+ (0, node_fs_1.writeFileSync)(p, t);
41
+ },
42
+ exists: (p) => (0, node_fs_1.existsSync)(p),
43
+ list: (dir) => {
44
+ const out = [];
45
+ const walk = (d) => {
46
+ for (const name of (0, node_fs_1.readdirSync)(d)) {
47
+ const p = (0, node_path_1.join)(d, name);
48
+ if ((0, node_fs_1.statSync)(p).isDirectory())
49
+ walk(p);
50
+ else
51
+ out.push(p);
52
+ }
53
+ };
54
+ if ((0, node_fs_1.existsSync)(dir))
55
+ walk(dir);
56
+ return out;
57
+ },
58
+ };
59
+ class UsageError extends Error {
60
+ }
61
+ function valuesOf(argv, name) {
62
+ const out = [];
63
+ argv.forEach((a, i) => {
64
+ if (a === name && argv[i + 1] !== undefined)
65
+ out.push(argv[i + 1]);
66
+ else if (a.startsWith(`${name}=`))
67
+ out.push(a.slice(name.length + 1));
68
+ });
69
+ return out;
70
+ }
71
+ /** `--locale es,fr --locale de` → ['es','fr','de']. */
72
+ const listOf = (argv, name) => {
73
+ const v = valuesOf(argv, name).flatMap((x) => x.split(',')).map((x) => x.trim()).filter(Boolean);
74
+ return v.length ? v : undefined;
75
+ };
76
+ const STATES = ['missing', 'draft', 'published', 'outdated'];
77
+ function statesOf(argv, name, fallback) {
78
+ const v = listOf(argv, name);
79
+ if (!v)
80
+ return fallback;
81
+ for (const s of v)
82
+ if (!STATES.includes(s))
83
+ throw new UsageError(`${name} takes ${STATES.join(',')}, not "${s}".`);
84
+ return v;
85
+ }
86
+ /** What the reader's switcher would call a language, when no label is given ("español"). */
87
+ function nativeName(code) {
88
+ try {
89
+ return new Intl.DisplayNames([code], { type: 'language' }).of(code) ?? code;
90
+ }
91
+ catch {
92
+ return code;
93
+ }
94
+ }
95
+ const NO_PROVIDER = 'This organization has no translation provider connected, and there is no platform key: machine translation uses your own. ' +
96
+ 'Connect a DeepL key in Settings → Integrations (or PUT /orgs/{orgId}/deepl), then run this again.';
97
+ async function runTranslations(argv, positional, deps) {
98
+ const files = deps.files ?? disk;
99
+ const env = deps.env ?? process.env;
100
+ const flag = (name) => argv.includes(name);
101
+ const value = (name) => valuesOf(argv, name)[0];
102
+ const json = flag('--json');
103
+ const dump = (v) => deps.out(JSON.stringify(v, null, 2));
104
+ const want = () => ({
105
+ org: value('--org') ?? env.FORUMULATE_ORG,
106
+ space: value('--space') ?? (value('--library') ? undefined : env.FORUMULATE_SPACE),
107
+ library: value('--library') ?? env.FORUMULATE_LIBRARY,
108
+ });
109
+ const t = deps.client.translations;
110
+ const [sub, ...rest] = positional;
111
+ try {
112
+ switch (sub) {
113
+ case 'locales': {
114
+ const [verb = 'list', ...args] = rest;
115
+ const { orgId, target, name } = await (0, target_1.resolveLocaleTarget)(deps.client, want());
116
+ if (verb === 'list') {
117
+ const locales = await t.locales.list(orgId, target);
118
+ if (json)
119
+ dump(locales);
120
+ else
121
+ for (const l of locales)
122
+ deps.out(`${l.code} ${l.label}${l.isSource ? ' (source)' : ''}`);
123
+ return 0;
124
+ }
125
+ if (verb === 'add' || verb === 'relabel') {
126
+ const [code, ...label] = args;
127
+ if (!code)
128
+ throw new UsageError(`Usage: forumulate translations locales ${verb} <code> [label]`);
129
+ const text = label.join(' ') || nativeName(code);
130
+ const locales = verb === 'add' ? await t.locales.add(orgId, target, { code, label: text }) : await t.locales.relabel(orgId, target, code, text);
131
+ if (json)
132
+ dump(locales);
133
+ else
134
+ deps.out(`${verb === 'add' ? 'Added' : 'Renamed'} ${code} (“${text}”) on "${name}".`);
135
+ return 0;
136
+ }
137
+ if (verb === 'remove') {
138
+ const [code] = args;
139
+ if (!code)
140
+ throw new UsageError('Usage: forumulate translations locales remove <code> [--yes]');
141
+ if (!flag('--yes')) {
142
+ const answer = deps.ask ? (await deps.ask(`Remove ${code} from "${name}"? Its translations go to the trash. [y/N] `)).trim().toLowerCase() : '';
143
+ if (answer !== 'y' && answer !== 'yes') {
144
+ deps.err(deps.ask ? 'Nothing removed.' : 'Nothing removed: pass --yes to remove a language without a prompt.');
145
+ return 1;
146
+ }
147
+ }
148
+ const locales = await t.locales.remove(orgId, target, code);
149
+ if (json)
150
+ dump(locales);
151
+ else
152
+ deps.out(`Removed ${code} from "${name}".`);
153
+ return 0;
154
+ }
155
+ if (verb === 'set') {
156
+ if (!args.length)
157
+ throw new UsageError('Usage: forumulate translations locales set <code[=Label]>... [--prune]');
158
+ const wanted = args.map((a) => {
159
+ const [code, ...label] = a.split('=');
160
+ return { code: code, label: label.join('=') || nativeName(code) };
161
+ });
162
+ const res = await t.locales.set(orgId, target, wanted, { prune: flag('--prune') });
163
+ if (json)
164
+ dump(res);
165
+ else {
166
+ const said = [
167
+ res.added.length && `added ${res.added.join(', ')}`,
168
+ res.relabeled.length && `renamed ${res.relabeled.join(', ')}`,
169
+ res.removed.length && `removed ${res.removed.join(', ')}`,
170
+ ].filter(Boolean);
171
+ deps.out(said.length ? `"${name}": ${said.join('; ')}.` : `"${name}" already declares exactly these languages.`);
172
+ }
173
+ return 0;
174
+ }
175
+ throw new UsageError('Usage: forumulate translations locales list|add|relabel|remove|set …');
176
+ }
177
+ case 'status': {
178
+ const s = await (0, target_1.resolveSpace)(deps.client, want());
179
+ const cov = await t.status(s.orgId, s.spaceId);
180
+ const locales = listOf(argv, '--locale') ?? cov.locales.map((l) => l.code);
181
+ const failOn = statesOf(argv, '--fail-on', []) ?? [];
182
+ const failing = failingCells(cov, locales, failOn);
183
+ if (json)
184
+ dump({ ...cov, failOn, failing: failing.length });
185
+ else
186
+ renderStatus(deps.out, s.name, cov, locales);
187
+ if (failing.length) {
188
+ deps.err(`FAIL: ${failing.length} translation(s) ${failOn.join(' or ')} in ${locales.join(', ')}.`);
189
+ return 1;
190
+ }
191
+ return 0;
192
+ }
193
+ case 'pull': {
194
+ const s = await (0, target_1.resolveSpace)(deps.client, want());
195
+ const cov = await t.status(s.orgId, s.spaceId);
196
+ const out = value('--out') ?? 'translations';
197
+ const res = await (0, sync_1.pullPieces)({ ...deps, files }, s, cov, {
198
+ out,
199
+ locales: listOf(argv, '--locale') ?? cov.locales.map((l) => l.code),
200
+ only: listOf(argv, '--only'),
201
+ includeMissing: flag('--include-missing'),
202
+ });
203
+ if (json)
204
+ dump(res);
205
+ else
206
+ deps.out(`Wrote ${res.written.length} file(s) under ${out}/` +
207
+ (res.skipped ? `; ${res.skipped} missing translation(s) not written (add --include-missing for stubs).` : '.'));
208
+ return 0;
209
+ }
210
+ case 'push': {
211
+ const s = await (0, target_1.resolveSpace)(deps.client, want());
212
+ const dir = rest[0] ?? value('--out') ?? 'translations';
213
+ const dryRun = flag('--dry-run');
214
+ const plans = await (0, sync_1.pushPieces)({ ...deps, files }, s, { dir, locales: listOf(argv, '--locale'), dryRun });
215
+ if (json)
216
+ dump(plans);
217
+ else {
218
+ for (const p of plans.filter((x) => x.action !== 'unchanged'))
219
+ deps.out(p.action === 'write'
220
+ ? ` ${dryRun ? 'would write' : 'wrote'} ${p.locale} ${p.path} (${p.fields.join(', ')})`
221
+ : p.action === 'stub'
222
+ ? ` skip ${p.locale} ${p.path} (still the original's words)`
223
+ : ` skip ${p.locale} ${p.path} (pulled from another space)`);
224
+ const n = plans.filter((x) => x.action === 'write').length;
225
+ deps.out(`${n} translation(s) ${dryRun ? 'would change' : 'changed'}; ${plans.filter((x) => x.action === 'unchanged').length} unchanged.`);
226
+ }
227
+ return 0;
228
+ }
229
+ case 'auto':
230
+ return await runAuto(argv, deps, want(), { json, dump, listOf, statesOf, value });
231
+ case 'labels': {
232
+ const [verb, file] = rest;
233
+ const site = value('--site');
234
+ const sp = site ? null : await (0, target_1.resolveSpace)(deps.client, want());
235
+ const orgId = sp ? sp.orgId : await (0, target_1.resolveOrg)(deps.client, want().org);
236
+ const scope = sp ? { spaceId: sp.spaceId } : { siteId: site };
237
+ const syncDeps = { ...deps, files };
238
+ if (verb === 'pull') {
239
+ const format = (0, sync_1.tableFormat)(value('--format'), value('--out'));
240
+ const out = value('--out') ?? (format === 'xliff' ? 'labels.xlf' : 'labels.json');
241
+ files.write(out, await (0, sync_1.pullLabels)(syncDeps, orgId, scope, { format, locales: listOf(argv, '--locale') }));
242
+ deps.out(`Wrote ${out}.`);
243
+ return 0;
244
+ }
245
+ if (verb === 'push') {
246
+ if (!file)
247
+ throw new UsageError('Usage: forumulate translations labels push <file> (--site <id> | --space <id|slug>) [--dry-run]');
248
+ const res = await (0, sync_1.pushLabels)(syncDeps, orgId, scope, files.read(file), { format: (0, sync_1.tableFormat)(value('--format'), file), dryRun: flag('--dry-run') });
249
+ if (json)
250
+ dump(res);
251
+ else {
252
+ for (const c of res.changes)
253
+ deps.out(` ${c.locale} “${c.text}” → ${JSON.stringify(c.to)}`);
254
+ deps.out(`${res.changes.length} word(s) ${flag('--dry-run') ? 'would change' : 'changed'}.`);
255
+ }
256
+ return 0;
257
+ }
258
+ throw new UsageError('Usage: forumulate translations labels pull|push …');
259
+ }
260
+ case 'overrides': {
261
+ const [verb, file] = rest;
262
+ const orgId = await (0, target_1.resolveOrg)(deps.client, want().org);
263
+ const syncDeps = { ...deps, files };
264
+ if (verb === 'pull') {
265
+ const format = (0, sync_1.tableFormat)(value('--format'), value('--out'));
266
+ const out = value('--out') ?? (format === 'xliff' ? 'overrides.xlf' : 'overrides.json');
267
+ files.write(out, await (0, sync_1.pullOverrides)(syncDeps, orgId, { format, locales: listOf(argv, '--locale') }));
268
+ deps.out(`Wrote ${out}.`);
269
+ return 0;
270
+ }
271
+ if (verb === 'push') {
272
+ if (!file)
273
+ throw new UsageError('Usage: forumulate translations overrides push <file> [--dry-run] [--prune]');
274
+ const res = await (0, sync_1.pushOverrides)(syncDeps, orgId, files.read(file), {
275
+ format: (0, sync_1.tableFormat)(value('--format'), file),
276
+ dryRun: flag('--dry-run'),
277
+ prune: flag('--prune'),
278
+ });
279
+ if (json)
280
+ dump(res);
281
+ else {
282
+ const verbWord = flag('--dry-run') ? 'would ' : '';
283
+ deps.out(`${res.set.length} override(s) ${verbWord}set, ${res.removed.length} ${verbWord}removed.`);
284
+ }
285
+ return 0;
286
+ }
287
+ throw new UsageError('Usage: forumulate translations overrides pull|push …');
288
+ }
289
+ case 'item-locale': {
290
+ const [itemId, locale] = rest;
291
+ if (!itemId || !locale)
292
+ throw new UsageError('Usage: forumulate translations item-locale <itemId> <locale|none> --space <id|slug>');
293
+ const s = await (0, target_1.resolveSpace)(deps.client, want());
294
+ const res = await t.setItemLocale(s.orgId, s.spaceId, itemId, locale === 'none' ? null : locale);
295
+ if (json)
296
+ dump(res);
297
+ else
298
+ deps.out(`${itemId} is declared ${res.item.locale ?? 'without a language'}.`);
299
+ return 0;
300
+ }
301
+ default: {
302
+ const extra = await (0, extras_1.runExtra)(sub, { argv, rest, deps, files, want, value, json });
303
+ if (extra !== null)
304
+ return extra;
305
+ deps.err('Usage: forumulate translations locales|status|pull|push|auto|labels|overrides|item-locale|remove|entry|name|switcher|provider … (forumulate help)');
306
+ return 1;
307
+ }
308
+ }
309
+ }
310
+ catch (e) {
311
+ if (e instanceof UsageError || e instanceof target_1.TargetError || e instanceof extras_1.ExtraUsage) {
312
+ deps.err(e.message);
313
+ return 1;
314
+ }
315
+ if (e.code === 'ai.unavailable') {
316
+ deps.err(NO_PROVIDER);
317
+ return 1;
318
+ }
319
+ throw e;
320
+ }
321
+ }
322
+ /** Every (piece, language) cell in one of `states`, for the selected languages. */
323
+ function failingCells(cov, locales, states) {
324
+ if (!states.length)
325
+ return [];
326
+ return cov.items.flatMap((item) => locales.flatMap((l) => (item.locales[l] && states.includes(item.locales[l].state) ? [{ item, locale: l }] : [])));
327
+ }
328
+ function renderStatus(out, name, cov, locales) {
329
+ out(`Translations of "${name}" — ${cov.items.length} ${cov.kind}(s)${cov.truncated ? ' (first 1,000)' : ''}`);
330
+ if (!locales.length) {
331
+ out('This space declares no languages yet: forumulate translations locales add <code> --space …');
332
+ return;
333
+ }
334
+ const pad = (s, n) => s + ' '.repeat(Math.max(1, n - s.length));
335
+ out(pad('', 12) + locales.map((l) => pad(l, 10)).join(''));
336
+ for (const st of STATES)
337
+ out(pad(st, 12) + locales.map((l) => pad(String(cov.totals[l]?.[st] ?? 0), 10)).join(''));
338
+ const todo = cov.items.flatMap((i) => locales.flatMap((l) => (i.locales[l] && i.locales[l].state !== 'published' ? [` ${pad(l, 6)}${pad(i.locales[l].state, 10)}${i.slug ?? i.id} ${i.title}`] : [])));
339
+ if (todo.length)
340
+ out('');
341
+ for (const line of todo)
342
+ out(line);
343
+ }
344
+ async function runAuto(argv, deps, want, h) {
345
+ const t = deps.client.translations;
346
+ const locales = h.listOf(argv, '--locale');
347
+ if (!locales)
348
+ throw new UsageError('Say which language(s): --locale es[,fr].');
349
+ const force = argv.includes('--force');
350
+ const dryRun = argv.includes('--dry-run');
351
+ if (want.library && !want.space) {
352
+ const entries = h.listOf(argv, '--entry');
353
+ if (!entries)
354
+ throw new UsageError('Say which entries: --entry <id>[,<id>] (a library is translated entry by entry).');
355
+ const lib = await (0, library_1.resolveLibrary)(deps.client, want);
356
+ const results = [];
357
+ for (const locale of locales)
358
+ for (const entryId of entries) {
359
+ if (dryRun) {
360
+ deps.out(` would translate ${entryId} → ${locale}`);
361
+ continue;
362
+ }
363
+ const r = await t.autoEntry(lib.orgId, lib.libraryId, entryId, locale, { force });
364
+ results.push(r);
365
+ for (const x of r.results)
366
+ deps.out(` ${x.ok ? 'ok ' : 'FAIL'} ${x.entryId} → ${locale}${x.error ? ` ${x.error}` : ''}`);
367
+ }
368
+ if (h.json)
369
+ h.dump(results);
370
+ return 0;
371
+ }
372
+ const s = await (0, target_1.resolveSpace)(deps.client, want);
373
+ // Say so before the first piece, not after a run of identical 409s.
374
+ if (!dryRun && !(await t.deepl.status(s.orgId)).configured) {
375
+ deps.err(NO_PROVIDER);
376
+ return 1;
377
+ }
378
+ const states = h.statesOf(argv, '--state', ['missing', 'outdated']);
379
+ const only = h.listOf(argv, '--only');
380
+ const cov = await t.status(s.orgId, s.spaceId);
381
+ const work = cov.items
382
+ .filter((i) => !only || only.some((o) => o === i.id || o === i.slug))
383
+ .flatMap((i) => locales.filter((l) => i.locales[l] && states.includes(i.locales[l].state)).map((l) => ({ item: i, locale: l })));
384
+ const done = [];
385
+ for (const { item, locale } of work) {
386
+ if (dryRun) {
387
+ deps.out(` would translate ${item.slug ?? item.id} → ${locale} (${item.locales[locale].state})`);
388
+ continue;
389
+ }
390
+ try {
391
+ await t.auto(s.orgId, s.spaceId, item.id, locale, { force, published: argv.includes('--publish'), door: (0, sdk_1.translationDoorOf)(cov.spaceType) });
392
+ done.push({ id: item.id, locale, ok: true });
393
+ if (!h.json)
394
+ deps.out(` ok ${item.slug ?? item.id} → ${locale}`);
395
+ }
396
+ catch (e) {
397
+ const err = e;
398
+ if (err.code === 'ai.unavailable')
399
+ throw e;
400
+ done.push({ id: item.id, locale, ok: false, error: err.message });
401
+ if (!h.json)
402
+ deps.out(` FAIL ${item.slug ?? item.id} → ${locale} ${err.message ?? ''}`);
403
+ }
404
+ }
405
+ if (h.json)
406
+ h.dump({ planned: work.length, results: done });
407
+ else
408
+ deps.out(`${dryRun ? work.length + ' would be translated' : `${done.filter((d) => d.ok).length} translated, ${done.filter((d) => !d.ok).length} failed`}.`);
409
+ return done.some((d) => !d.ok) ? 1 : 0;
410
+ }
411
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/translations/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * The smaller `forumulate translations` verbs: removing one translation, a
3
+ * library entry's locale twin, a space's or collection's name, the reader's
4
+ * language switcher default, and the org's own translation provider key.
5
+ *
6
+ * Beside `command.ts` rather than in it so that file stays the dispatcher and
7
+ * the four big verbs; each of these is one SDK call and its confirmation.
8
+ */
9
+ import type { TranslationsDeps } from './command';
10
+ import type { SyncFiles } from './sync';
11
+ export declare class ExtraUsage extends Error {
12
+ }
13
+ interface Ctx {
14
+ argv: readonly string[];
15
+ rest: readonly string[];
16
+ deps: TranslationsDeps;
17
+ files: SyncFiles;
18
+ want: () => {
19
+ org?: string;
20
+ space?: string;
21
+ library?: string;
22
+ };
23
+ value: (name: string) => string | undefined;
24
+ json: boolean;
25
+ }
26
+ /** One of the verbs here, or `null` when `sub` is not one of them. */
27
+ export declare function runExtra(sub: string | undefined, ctx: Ctx): Promise<number | null>;
28
+ export {};
29
+ //# sourceMappingURL=extras.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.d.ts","sourceRoot":"","sources":["../../src/translations/extras.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAExC,UAAU,GAAG;IACX,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,IAAI,EAAE,MAAM;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/D,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAC5C,IAAI,EAAE,OAAO,CAAC;CACf;AAcD,sEAAsE;AACtE,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA6FxF"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExtraUsage = void 0;
4
+ exports.runExtra = runExtra;
5
+ const library_1 = require("../content/library");
6
+ const target_1 = require("./target");
7
+ class ExtraUsage extends Error {
8
+ }
9
+ exports.ExtraUsage = ExtraUsage;
10
+ const confirmed = async (ctx, question) => {
11
+ if (ctx.argv.includes('--yes'))
12
+ return true;
13
+ if (!ctx.deps.ask) {
14
+ ctx.deps.err('Nothing changed: pass --yes to do this without a prompt.');
15
+ return false;
16
+ }
17
+ const answer = (await ctx.deps.ask(`${question} [y/N] `)).trim().toLowerCase();
18
+ if (answer === 'y' || answer === 'yes')
19
+ return true;
20
+ ctx.deps.err('Nothing changed.');
21
+ return false;
22
+ };
23
+ /** One of the verbs here, or `null` when `sub` is not one of them. */
24
+ async function runExtra(sub, ctx) {
25
+ const { deps, rest, value, json } = ctx;
26
+ const t = deps.client.translations;
27
+ const dump = (v) => deps.out(JSON.stringify(v, null, 2));
28
+ switch (sub) {
29
+ case 'remove': {
30
+ const [pieceId, locale] = rest;
31
+ if (!pieceId || !locale)
32
+ throw new ExtraUsage('Usage: forumulate translations remove <pieceId> <locale> --space <id|slug> [--yes]');
33
+ const s = await (0, target_1.resolveSpace)(deps.client, ctx.want());
34
+ if (!(await confirmed(ctx, `Remove the ${locale} translation of ${pieceId}?`)))
35
+ return 1;
36
+ await t.remove(s.orgId, s.spaceId, pieceId, locale);
37
+ deps.out(`Removed the ${locale} translation of ${pieceId}.`);
38
+ return 0;
39
+ }
40
+ case 'entry': {
41
+ const [entryId, locale] = rest;
42
+ if (!entryId || !locale)
43
+ throw new ExtraUsage('Usage: forumulate translations entry <entryId> <locale> --library <id|slug> [--fields file.json]');
44
+ const lib = await (0, library_1.resolveLibrary)(deps.client, ctx.want());
45
+ const file = value('--fields');
46
+ if (!file) {
47
+ dump(await t.entryLocale.get(lib.orgId, lib.libraryId, entryId, locale));
48
+ return 0;
49
+ }
50
+ const fields = JSON.parse(ctx.files.read(file));
51
+ const res = await t.entryLocale.put(lib.orgId, lib.libraryId, entryId, locale, fields);
52
+ if (json)
53
+ dump(res);
54
+ else
55
+ deps.out(`Wrote the ${locale} draft of ${entryId} (${res.created ? 'new twin ' : ''}${res.entryId}).`);
56
+ return 0;
57
+ }
58
+ case 'name': {
59
+ const [locale, ...words] = rest;
60
+ if (!locale)
61
+ throw new ExtraUsage('Usage: forumulate translations name <locale> <name…> --space <id|slug> [--collection <id>] [--description …] [--remove]');
62
+ const s = await (0, target_1.resolveSpace)(deps.client, ctx.want());
63
+ const collectionId = value('--collection');
64
+ const description = value('--description');
65
+ const remove = ctx.argv.includes('--remove');
66
+ if (!remove && !words.length && description === undefined) {
67
+ dump(await t.names.get(s.orgId, s.spaceId, { collectionId }));
68
+ return 0;
69
+ }
70
+ const set = await t.names.set(s.orgId, s.spaceId, locale, remove ? null : { ...(words.length ? { name: words.join(' ') } : {}), ...(description !== undefined ? { description } : {}) }, { collectionId });
71
+ if (json)
72
+ dump(set);
73
+ else
74
+ deps.out(remove ? `Removed the ${locale} name.` : `${collectionId ? 'Collection' : `"${s.name}"`} is “${set[locale]?.name ?? ''}” in ${locale}.`);
75
+ return 0;
76
+ }
77
+ case 'switcher': {
78
+ const [verb = 'get', file] = rest;
79
+ const orgId = await (0, target_1.resolveOrg)(deps.client, ctx.want().org);
80
+ if (verb === 'get') {
81
+ dump(await t.switcher.get(orgId));
82
+ return 0;
83
+ }
84
+ if (verb === 'set' && file) {
85
+ dump(await t.switcher.set(orgId, JSON.parse(ctx.files.read(file))));
86
+ return 0;
87
+ }
88
+ throw new ExtraUsage('Usage: forumulate translations switcher get | set <file.json> [--org …]');
89
+ }
90
+ case 'provider': {
91
+ const [verb = 'status'] = rest;
92
+ const orgId = await (0, target_1.resolveOrg)(deps.client, ctx.want().org);
93
+ if (verb === 'status') {
94
+ const { configured } = await t.deepl.status(orgId);
95
+ if (json)
96
+ dump({ configured });
97
+ else
98
+ deps.out(configured ? 'A DeepL key is connected: machine translation uses it.' : 'No translation provider connected (forumulate translations provider connect).');
99
+ return 0;
100
+ }
101
+ if (verb === 'connect') {
102
+ // The key from the environment, never argv: a flag is in shell history.
103
+ const key = (deps.env ?? process.env).DEEPL_API_KEY;
104
+ if (!key)
105
+ throw new ExtraUsage('Set DEEPL_API_KEY in the environment, then run: forumulate translations provider connect');
106
+ await t.deepl.connect(orgId, key);
107
+ deps.out('DeepL key connected.');
108
+ return 0;
109
+ }
110
+ if (verb === 'disconnect') {
111
+ if (!(await confirmed(ctx, 'Disconnect the DeepL key? Machine translation stops until a key is connected.')))
112
+ return 1;
113
+ await t.deepl.disconnect(orgId);
114
+ deps.out('DeepL key removed.');
115
+ return 0;
116
+ }
117
+ throw new ExtraUsage('Usage: forumulate translations provider status|connect|disconnect');
118
+ }
119
+ default:
120
+ return null;
121
+ }
122
+ }
123
+ //# sourceMappingURL=extras.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extras.js","sourceRoot":"","sources":["../../src/translations/extras.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface TranslationFile {
2
+ space: string;
3
+ piece: string;
4
+ locale: string;
5
+ door: string;
6
+ title: string;
7
+ markdown: string;
8
+ excerpt?: string;
9
+ updates?: Record<string, string>;
10
+ published?: boolean;
11
+ /** State when pulled (informational). */
12
+ state?: string;
13
+ /** The stub hash, when the file was written from the original (see above). */
14
+ source?: string;
15
+ }
16
+ export declare const stubHash: (title: string, markdown: string) => string;
17
+ export declare function writeTranslationFile(f: TranslationFile): string;
18
+ /** A pulled file, or null when it is not one of ours (any other Markdown in the folder). */
19
+ export declare function readTranslationFile(text: string): TranslationFile | null;
20
+ /** A file name a TMS and a filesystem both accept. */
21
+ export declare function fileStem(slug: string | null, id: string): string;
22
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/translations/files.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,EAAE,UAAU,MAAM,KAAG,MAC6B,CAAC;AAEzF,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAe/D;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsBxE;AAED,sDAAsD;AACtD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAGhE"}