@terai/dev 0.0.6 → 0.0.8

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 (61) hide show
  1. package/dist/chunk-27YGPZZO.mjs +30 -0
  2. package/dist/chunk-27YGPZZO.mjs.map +1 -0
  3. package/dist/chunk-3ELQZT5F.js +17773 -0
  4. package/dist/chunk-3ELQZT5F.js.map +1 -0
  5. package/dist/chunk-42NIF5EX.js +8 -0
  6. package/dist/chunk-42NIF5EX.js.map +1 -0
  7. package/dist/chunk-6YEMZ7V4.mjs +120 -0
  8. package/dist/chunk-6YEMZ7V4.mjs.map +1 -0
  9. package/dist/chunk-73E3KEZD.js +199 -0
  10. package/dist/chunk-73E3KEZD.js.map +1 -0
  11. package/dist/chunk-7KUNFJIY.mjs +563 -0
  12. package/dist/chunk-7KUNFJIY.mjs.map +1 -0
  13. package/dist/chunk-K2FH2SX6.mjs +17755 -0
  14. package/dist/chunk-K2FH2SX6.mjs.map +1 -0
  15. package/dist/chunk-KYDPPJQL.js +86 -0
  16. package/dist/chunk-KYDPPJQL.js.map +1 -0
  17. package/dist/chunk-LIRTPATK.js +52 -0
  18. package/dist/chunk-LIRTPATK.js.map +1 -0
  19. package/dist/chunk-M6WICIYM.js +571 -0
  20. package/dist/chunk-M6WICIYM.js.map +1 -0
  21. package/dist/chunk-OF7BELAL.js +32 -0
  22. package/dist/chunk-OF7BELAL.js.map +1 -0
  23. package/dist/chunk-QC3QM3MM.mjs +192 -0
  24. package/dist/chunk-QC3QM3MM.mjs.map +1 -0
  25. package/dist/chunk-RKCAHME2.mjs +6 -0
  26. package/dist/chunk-RKCAHME2.mjs.map +1 -0
  27. package/dist/chunk-RWH4GVGM.mjs +83 -0
  28. package/dist/chunk-RWH4GVGM.mjs.map +1 -0
  29. package/dist/chunk-SSJE2GTB.js +123 -0
  30. package/dist/chunk-SSJE2GTB.js.map +1 -0
  31. package/dist/chunk-UOKEQCV3.mjs +50 -0
  32. package/dist/chunk-UOKEQCV3.mjs.map +1 -0
  33. package/dist/cli.default.js +24 -18291
  34. package/dist/cli.default.js.map +1 -1
  35. package/dist/cli.default.mjs +20 -18308
  36. package/dist/cli.default.mjs.map +1 -1
  37. package/dist/cli.js +13 -18285
  38. package/dist/cli.js.map +1 -1
  39. package/dist/cli.mjs +9 -18298
  40. package/dist/cli.mjs.map +1 -1
  41. package/dist/commands/extract.js +12 -682
  42. package/dist/commands/extract.js.map +1 -1
  43. package/dist/commands/extract.mjs +5 -656
  44. package/dist/commands/extract.mjs.map +1 -1
  45. package/dist/commands/index.js +31 -992
  46. package/dist/commands/index.js.map +1 -1
  47. package/dist/commands/index.mjs +8 -960
  48. package/dist/commands/index.mjs.map +1 -1
  49. package/dist/commands/init.js +12 -773
  50. package/dist/commands/init.js.map +1 -1
  51. package/dist/commands/init.mjs +4 -742
  52. package/dist/commands/init.mjs.map +1 -1
  53. package/dist/commands/translate.js +12 -719
  54. package/dist/commands/translate.js.map +1 -1
  55. package/dist/commands/translate.mjs +5 -687
  56. package/dist/commands/translate.mjs.map +1 -1
  57. package/dist/index.js +21 -79
  58. package/dist/index.js.map +1 -1
  59. package/dist/index.mjs +6 -79
  60. package/dist/index.mjs.map +1 -1
  61. package/package.json +8 -8
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ var chunkLIRTPATK_js = require('./chunk-LIRTPATK.js');
4
+
5
+ // src/commands/index.ts
6
+ chunkLIRTPATK_js.init_cjs_shims();
7
+ //# sourceMappingURL=chunk-42NIF5EX.js.map
8
+ //# sourceMappingURL=chunk-42NIF5EX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/index.ts"],"names":["init_cjs_shims"],"mappings":";;;;;AAAAA,+BAAA,EAAA","file":"chunk-42NIF5EX.js","sourcesContent":["export * from './init'\nexport * from './extract'\nexport * from './translate'\n"]}
@@ -0,0 +1,120 @@
1
+ import { generate } from './chunk-27YGPZZO.mjs';
2
+ import { logger } from './chunk-7KUNFJIY.mjs';
3
+ import { init_esm_shims } from './chunk-UOKEQCV3.mjs';
4
+ import { loadConfig, runtime } from '@terai/runtime';
5
+ import { translate } from '@terai/translator';
6
+ import { merge, groupDictionaryByChunks, stringify } from '@terai/utils';
7
+
8
+ // src/commands/translate.ts
9
+ init_esm_shims();
10
+ function createTranslateCommand(cli, cwd) {
11
+ return cli.command("translate", "Translate messages from your project").option("--cwd <cwd>", "Current working directory", { default: cwd }).action(translateCmd);
12
+ }
13
+ async function translateCmd({ cwd }) {
14
+ logger.heading("translate", "Translate messages from your project");
15
+ const done = logger.time.success();
16
+ const config = await loadConfig({ cwd });
17
+ const outDirPath = runtime.path.resolve(cwd, config.outDir);
18
+ const tmuDirPath = runtime.path.resolve(cwd, config.outDir, ".terai");
19
+ const manifestPath = runtime.path.resolve(tmuDirPath, "locale-manifest.json");
20
+ const existsManifest = runtime.fs.exists(manifestPath);
21
+ if (!existsManifest) {
22
+ return logger.error(
23
+ "translate",
24
+ `No locale-manifest.json found in ${tmuDirPath}. Please run "extract" first.`
25
+ );
26
+ }
27
+ const buildManifest = JSON.parse(
28
+ runtime.fs.readFile(manifestPath)
29
+ );
30
+ let totalTranslatedMsgs = 0;
31
+ let totalCachedMsgs = 0;
32
+ await Promise.all(
33
+ config.outLocales.map(async (locale) => {
34
+ try {
35
+ let translatedDictionary = {};
36
+ const untranslatedDictionary = {};
37
+ const localeDirPath = runtime.path.resolve(outDirPath, locale);
38
+ const localeCachePath = runtime.path.resolve(
39
+ tmuDirPath,
40
+ "cache",
41
+ `${locale}.cache.json`
42
+ );
43
+ const cacheExists = runtime.fs.exists(localeCachePath);
44
+ let cache = cacheExists ? JSON.parse(runtime.fs.readFile(localeCachePath)) : {};
45
+ let localeCachedMsgs = 0;
46
+ let localeTranslatedMsgs = 0;
47
+ for (const id in buildManifest.messages) {
48
+ const { value, chunksIds } = buildManifest.messages[id];
49
+ const chnks = chunksIds.length ? chunksIds : [locale];
50
+ for (const chunkId of chnks) {
51
+ const chunkPath = runtime.path.resolve(
52
+ localeDirPath,
53
+ `${chunkId}.json`
54
+ );
55
+ const existsChunk = runtime.fs.exists(chunkPath);
56
+ const chunk = existsChunk ? JSON.parse(runtime.fs.readFile(chunkPath)) : {};
57
+ const localeValue = chunk[id] ?? cache[id];
58
+ if (!localeValue) {
59
+ untranslatedDictionary[id] = value;
60
+ localeTranslatedMsgs++;
61
+ } else {
62
+ translatedDictionary[id] = localeValue;
63
+ cache[id] = localeValue;
64
+ localeCachedMsgs++;
65
+ }
66
+ }
67
+ }
68
+ if (localeTranslatedMsgs > 0) {
69
+ const translation = await translate({
70
+ ...config,
71
+ dictionary: untranslatedDictionary,
72
+ locale
73
+ });
74
+ translatedDictionary = merge(translation, translatedDictionary);
75
+ }
76
+ cache = {
77
+ ...cache,
78
+ ...translatedDictionary
79
+ };
80
+ runtime.fs.remove(localeDirPath);
81
+ const dictionaries = groupDictionaryByChunks(
82
+ translatedDictionary,
83
+ buildManifest,
84
+ locale
85
+ );
86
+ await generate({
87
+ ...config,
88
+ dictionaries,
89
+ locale,
90
+ cwd
91
+ });
92
+ runtime.fs.write(localeCachePath, stringify(cache));
93
+ totalTranslatedMsgs += localeTranslatedMsgs;
94
+ totalCachedMsgs += localeCachedMsgs;
95
+ logger.info(
96
+ `Locale ${locale.toUpperCase()}:`,
97
+ `${localeTranslatedMsgs} new messages translated, ${localeCachedMsgs} recovered from cache`
98
+ );
99
+ } catch (err) {
100
+ if (err instanceof Error) {
101
+ logger.error(
102
+ `${locale} translation:`,
103
+ `Error translating to ${locale}: ${err.message}
104
+ `
105
+ );
106
+ }
107
+ }
108
+ })
109
+ );
110
+ if (!totalTranslatedMsgs) {
111
+ return done("Everything up-to-date");
112
+ }
113
+ done(
114
+ `Translated ${totalTranslatedMsgs} messages, ${totalCachedMsgs} read from cache`
115
+ );
116
+ }
117
+
118
+ export { createTranslateCommand, translateCmd };
119
+ //# sourceMappingURL=chunk-6YEMZ7V4.mjs.map
120
+ //# sourceMappingURL=chunk-6YEMZ7V4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/translate.ts"],"names":[],"mappings":"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","file":"chunk-6YEMZ7V4.mjs","sourcesContent":["// Dependencies\nimport { generate } from '@terai/generator'\nimport { loadConfig, runtime } from '@terai/runtime'\nimport { logger } from '@terai/logger'\nimport { translate } from '@terai/translator'\nimport { merge, stringify, groupDictionaryByChunks } from '@terai/utils'\n\n// Types\nimport type { CAC } from 'cac'\nimport type { Dictionary, BuildManifest } from '@terai/types'\n\nexport type TranslateOptions = {\n\tcwd: string\n}\n\nexport function createTranslateCommand(cli: CAC, cwd: string) {\n\treturn cli\n\t\t.command('translate', 'Translate messages from your project')\n\t\t.option('--cwd <cwd>', 'Current working directory', { default: cwd })\n\t\t.action(translateCmd)\n}\n\nexport async function translateCmd({ cwd }: TranslateOptions) {\n\tlogger.heading('translate', 'Translate messages from your project')\n\tconst done = logger.time.success()\n\n\tconst config = await loadConfig({ cwd })\n\n\tconst outDirPath = runtime.path.resolve(cwd, config.outDir)\n\tconst tmuDirPath = runtime.path.resolve(cwd, config.outDir, '.terai')\n\tconst manifestPath = runtime.path.resolve(tmuDirPath, 'locale-manifest.json')\n\tconst existsManifest = runtime.fs.exists(manifestPath)\n\tif (!existsManifest) {\n\t\treturn logger.error(\n\t\t\t'translate',\n\t\t\t`No locale-manifest.json found in ${tmuDirPath}. Please run \"extract\" first.`\n\t\t)\n\t}\n\n\tconst buildManifest = JSON.parse(\n\t\truntime.fs.readFile(manifestPath)\n\t) as BuildManifest\n\n\tlet totalTranslatedMsgs = 0\n\tlet totalCachedMsgs = 0\n\n\tawait Promise.all(\n\t\tconfig.outLocales.map(async (locale) => {\n\t\t\ttry {\n\t\t\t\tlet translatedDictionary: Dictionary = {}\n\t\t\t\tconst untranslatedDictionary: Dictionary = {}\n\t\t\t\tconst localeDirPath = runtime.path.resolve(outDirPath, locale)\n\t\t\t\tconst localeCachePath = runtime.path.resolve(\n\t\t\t\t\ttmuDirPath,\n\t\t\t\t\t'cache',\n\t\t\t\t\t`${locale}.cache.json`\n\t\t\t\t)\n\t\t\t\tconst cacheExists = runtime.fs.exists(localeCachePath)\n\t\t\t\tlet cache: Dictionary = cacheExists\n\t\t\t\t\t? JSON.parse(runtime.fs.readFile(localeCachePath))\n\t\t\t\t\t: {}\n\n\t\t\t\tlet localeCachedMsgs = 0\n\t\t\t\tlet localeTranslatedMsgs = 0\n\n\t\t\t\tfor (const id in buildManifest.messages) {\n\t\t\t\t\tconst { value, chunksIds } = buildManifest.messages[id]\n\t\t\t\t\tconst chnks = chunksIds.length ? chunksIds : [locale]\n\n\t\t\t\t\tfor (const chunkId of chnks) {\n\t\t\t\t\t\tconst chunkPath = runtime.path.resolve(\n\t\t\t\t\t\t\tlocaleDirPath,\n\t\t\t\t\t\t\t`${chunkId}.json`\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst existsChunk = runtime.fs.exists(chunkPath)\n\t\t\t\t\t\tconst chunk: Dictionary = existsChunk\n\t\t\t\t\t\t\t? JSON.parse(runtime.fs.readFile(chunkPath))\n\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\tconst localeValue = chunk[id] ?? cache[id]\n\n\t\t\t\t\t\tif (!localeValue) {\n\t\t\t\t\t\t\tuntranslatedDictionary[id] = value\n\t\t\t\t\t\t\tlocaleTranslatedMsgs++\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttranslatedDictionary[id] = localeValue\n\t\t\t\t\t\t\t// Update cache in case local value is different\n\t\t\t\t\t\t\tcache[id] = localeValue\n\t\t\t\t\t\t\tlocaleCachedMsgs++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (localeTranslatedMsgs > 0) {\n\t\t\t\t\tconst translation = await translate({\n\t\t\t\t\t\t...config,\n\t\t\t\t\t\tdictionary: untranslatedDictionary,\n\t\t\t\t\t\tlocale\n\t\t\t\t\t})\n\n\t\t\t\t\ttranslatedDictionary = merge(translation, translatedDictionary)\n\t\t\t\t}\n\n\t\t\t\tcache = {\n\t\t\t\t\t...cache,\n\t\t\t\t\t...translatedDictionary\n\t\t\t\t}\n\n\t\t\t\truntime.fs.remove(localeDirPath)\n\n\t\t\t\tconst dictionaries = groupDictionaryByChunks(\n\t\t\t\t\ttranslatedDictionary,\n\t\t\t\t\tbuildManifest,\n\t\t\t\t\tlocale\n\t\t\t\t)\n\n\t\t\t\tawait generate({\n\t\t\t\t\t...config,\n\t\t\t\t\tdictionaries: dictionaries,\n\t\t\t\t\tlocale,\n\t\t\t\t\tcwd\n\t\t\t\t})\n\n\t\t\t\truntime.fs.write(localeCachePath, stringify(cache))\n\n\t\t\t\ttotalTranslatedMsgs += localeTranslatedMsgs\n\t\t\t\ttotalCachedMsgs += localeCachedMsgs\n\n\t\t\t\tlogger.info(\n\t\t\t\t\t`Locale ${locale.toUpperCase()}:`,\n\t\t\t\t\t`${localeTranslatedMsgs} new messages translated, ${localeCachedMsgs} recovered from cache`\n\t\t\t\t)\n\t\t\t} catch (err) {\n\t\t\t\tif (err instanceof Error) {\n\t\t\t\t\tlogger.error(\n\t\t\t\t\t\t`${locale} translation:`,\n\t\t\t\t\t\t`Error translating to ${locale}: ${err.message}\\n`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t)\n\n\tif (!totalTranslatedMsgs) {\n\t\treturn done('Everything up-to-date')\n\t}\n\n\tdone(\n\t\t`Translated ${totalTranslatedMsgs} messages, ${totalCachedMsgs} read from cache`\n\t)\n}\n"]}
@@ -0,0 +1,199 @@
1
+ 'use strict';
2
+
3
+ var chunkM6WICIYM_js = require('./chunk-M6WICIYM.js');
4
+ var chunkLIRTPATK_js = require('./chunk-LIRTPATK.js');
5
+ var runtime = require('@terai/runtime');
6
+ var prompts = require('@inquirer/prompts');
7
+ var getPackageManager = require('preferred-pm');
8
+
9
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
+
11
+ var getPackageManager__default = /*#__PURE__*/_interopDefault(getPackageManager);
12
+
13
+ // src/commands/init.ts
14
+ chunkLIRTPATK_js.init_cjs_shims();
15
+
16
+ // ../../node_modules/.pnpm/outdent@0.8.0/node_modules/outdent/lib-module/index.js
17
+ chunkLIRTPATK_js.init_cjs_shims();
18
+ function noop() {
19
+ }
20
+ function createWeakMap() {
21
+ if (typeof WeakMap !== "undefined") {
22
+ return /* @__PURE__ */ new WeakMap();
23
+ } else {
24
+ return fakeSetOrMap();
25
+ }
26
+ }
27
+ function fakeSetOrMap() {
28
+ return {
29
+ add: noop,
30
+ delete: noop,
31
+ get: noop,
32
+ set: noop,
33
+ has: function(k) {
34
+ return false;
35
+ }
36
+ };
37
+ }
38
+ var hop = Object.prototype.hasOwnProperty;
39
+ var has = function(obj, prop) {
40
+ return hop.call(obj, prop);
41
+ };
42
+ function extend(target, source) {
43
+ for (var prop in source) {
44
+ if (has(source, prop)) {
45
+ target[prop] = source[prop];
46
+ }
47
+ }
48
+ return target;
49
+ }
50
+ var reLeadingNewline = /^[ \t]*(?:\r\n|\r|\n)/;
51
+ var reTrailingNewline = /(?:\r\n|\r|\n)[ \t]*$/;
52
+ var reStartsWithNewlineOrIsEmpty = /^(?:[\r\n]|$)/;
53
+ var reDetectIndentation = /(?:\r\n|\r|\n)([ \t]*)(?:[^ \t\r\n]|$)/;
54
+ var reOnlyWhitespaceWithAtLeastOneNewline = /^[ \t]*[\r\n][ \t\r\n]*$/;
55
+ function _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options) {
56
+ var indentationLevel = 0;
57
+ var match = strings[0].match(reDetectIndentation);
58
+ if (match) {
59
+ indentationLevel = match[1].length;
60
+ }
61
+ var reSource = "(\\r\\n|\\r|\\n).{0," + indentationLevel + "}";
62
+ var reMatchIndent = new RegExp(reSource, "g");
63
+ if (firstInterpolatedValueSetsIndentationLevel) {
64
+ strings = strings.slice(1);
65
+ }
66
+ var newline = options.newline, trimLeadingNewline = options.trimLeadingNewline, trimTrailingNewline = options.trimTrailingNewline;
67
+ var normalizeNewlines = typeof newline === "string";
68
+ var l = strings.length;
69
+ var outdentedStrings = strings.map(function(v, i) {
70
+ v = v.replace(reMatchIndent, "$1");
71
+ if (i === 0 && trimLeadingNewline) {
72
+ v = v.replace(reLeadingNewline, "");
73
+ }
74
+ if (i === l - 1 && trimTrailingNewline) {
75
+ v = v.replace(reTrailingNewline, "");
76
+ }
77
+ if (normalizeNewlines) {
78
+ v = v.replace(/\r\n|\n|\r/g, function(_) {
79
+ return newline;
80
+ });
81
+ }
82
+ return v;
83
+ });
84
+ return outdentedStrings;
85
+ }
86
+ function concatStringsAndValues(strings, values) {
87
+ var ret = "";
88
+ for (var i = 0, l = strings.length; i < l; i++) {
89
+ ret += strings[i];
90
+ if (i < l - 1) {
91
+ ret += values[i];
92
+ }
93
+ }
94
+ return ret;
95
+ }
96
+ function isTemplateStringsArray(v) {
97
+ return has(v, "raw") && has(v, "length");
98
+ }
99
+ function createInstance(options) {
100
+ var arrayAutoIndentCache = createWeakMap();
101
+ var arrayFirstInterpSetsIndentCache = createWeakMap();
102
+ function outdent(stringsOrOptions) {
103
+ var values = [];
104
+ for (var _i = 1; _i < arguments.length; _i++) {
105
+ values[_i - 1] = arguments[_i];
106
+ }
107
+ if (isTemplateStringsArray(stringsOrOptions)) {
108
+ var strings = stringsOrOptions;
109
+ var firstInterpolatedValueSetsIndentationLevel = (values[0] === outdent || values[0] === defaultOutdent) && reOnlyWhitespaceWithAtLeastOneNewline.test(strings[0]) && reStartsWithNewlineOrIsEmpty.test(strings[1]);
110
+ var cache = firstInterpolatedValueSetsIndentationLevel ? arrayFirstInterpSetsIndentCache : arrayAutoIndentCache;
111
+ var renderedArray = cache.get(strings);
112
+ if (!renderedArray) {
113
+ renderedArray = _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options);
114
+ cache.set(strings, renderedArray);
115
+ }
116
+ if (values.length === 0) {
117
+ return renderedArray[0];
118
+ }
119
+ var rendered = concatStringsAndValues(renderedArray, firstInterpolatedValueSetsIndentationLevel ? values.slice(1) : values);
120
+ return rendered;
121
+ } else {
122
+ return createInstance(extend(extend({}, options), stringsOrOptions || {}));
123
+ }
124
+ }
125
+ var fullOutdent = extend(outdent, {
126
+ string: function(str) {
127
+ return _outdentArray([str], false, options)[0];
128
+ }
129
+ });
130
+ return fullOutdent;
131
+ }
132
+ var defaultOutdent = createInstance({
133
+ trimLeadingNewline: true,
134
+ trimTrailingNewline: true
135
+ });
136
+ if (typeof module !== "undefined") {
137
+ try {
138
+ module.exports = defaultOutdent;
139
+ Object.defineProperty(defaultOutdent, "__esModule", { value: true });
140
+ defaultOutdent.default = defaultOutdent;
141
+ defaultOutdent.outdent = defaultOutdent;
142
+ } catch (e) {
143
+ }
144
+ }
145
+ function createInitCommand(cli, cwd) {
146
+ return cli.command("init", "Initialize config file").option("-f, --force", "Force overwrite existing config files").option("--cwd <cwd>", "Current working directory", { default: cwd }).action(initCmd);
147
+ }
148
+ async function initCmd({ cwd, force }) {
149
+ chunkM6WICIYM_js.logger.heading("init", "Initialize config file");
150
+ const configFile = runtime.findConfig({ cwd });
151
+ const pmResult = await getPackageManager__default.default(cwd);
152
+ const pm = pmResult?.name ?? "npm";
153
+ const cmd = pm === "npm" ? "npm run" : pm;
154
+ if (configFile && !force) {
155
+ return chunkM6WICIYM_js.logger.log(
156
+ defaultOutdent`
157
+ It looks like you already have terai created.
158
+ You can now run ${chunkM6WICIYM_js.logger.colors.cyan(`'${cmd} terai extract --watch'`)}
159
+ `
160
+ );
161
+ }
162
+ const projectLocale = await prompts.input({
163
+ message: "What locale do you use for development?",
164
+ default: "en"
165
+ });
166
+ const outDir = await prompts.input({
167
+ message: "Where do you want to place your generated files?",
168
+ default: "./locale-system"
169
+ });
170
+ const framework = await prompts.select({
171
+ message: "Would you like to use any of these templates? (recommended)",
172
+ choices: [
173
+ {
174
+ name: "No",
175
+ value: null
176
+ },
177
+ {
178
+ name: "Next",
179
+ value: "next"
180
+ },
181
+ {
182
+ name: "Vite",
183
+ value: "vite"
184
+ }
185
+ ]
186
+ });
187
+ const done = chunkM6WICIYM_js.logger.time.success();
188
+ await runtime.setupConfig({ cwd, projectLocale, outDir });
189
+ if (framework) {
190
+ await runtime.setupTemplate({ cwd, outDir, framework });
191
+ }
192
+ done("Config file created");
193
+ chunkM6WICIYM_js.logger.log("\u{1F680} You are set up to start using Terai! Thanks for choosing it.");
194
+ }
195
+
196
+ exports.createInitCommand = createInitCommand;
197
+ exports.initCmd = initCmd;
198
+ //# sourceMappingURL=chunk-73E3KEZD.js.map
199
+ //# sourceMappingURL=chunk-73E3KEZD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commands/init.ts","../../../node_modules/.pnpm/outdent@0.8.0/node_modules/outdent/src/index.ts"],"names":["init_cjs_shims","logger","findConfig","getPackageManager","input","select","setupConfig","setupTemplate"],"mappings":"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","file":"chunk-73E3KEZD.js","sourcesContent":["// Dependencies\nimport { findConfig, setupConfig, setupTemplate } from '@terai/runtime'\nimport { input, select } from '@inquirer/prompts'\nimport { logger } from '@terai/logger'\nimport { outdent } from 'outdent'\nimport getPackageManager from 'preferred-pm'\n\n// Types\nimport type { Config, Locale } from '@terai/types'\nimport type { CAC } from 'cac'\n\nexport type InitOptions = Pick<Config, 'projectLocale'> & {\n\tcwd: string\n\tforce?: boolean\n}\n\nexport function createInitCommand(cli: CAC, cwd: string) {\n\treturn cli\n\t\t.command('init', 'Initialize config file')\n\t\t.option('-f, --force', 'Force overwrite existing config files')\n\t\t.option('--cwd <cwd>', 'Current working directory', { default: cwd })\n\t\t.action(initCmd)\n}\n\nexport async function initCmd({ cwd, force }: InitOptions) {\n\tlogger.heading('init', 'Initialize config file')\n\tconst configFile = findConfig({ cwd })\n\tconst pmResult = await getPackageManager(cwd)\n\tconst pm = pmResult?.name ?? 'npm'\n\tconst cmd = pm === 'npm' ? 'npm run' : pm\n\n\tif (configFile && !force) {\n\t\treturn logger.log(\n\t\t\toutdent`\n It looks like you already have terai created.\n You can now run ${logger.colors.cyan(`'${cmd} terai extract --watch'`)}\n `\n\t\t)\n\t}\n\n\tconst projectLocale = (await input({\n\t\tmessage: 'What locale do you use for development?',\n\t\tdefault: 'en'\n\t})) as Locale\n\n\tconst outDir = await input({\n\t\tmessage: 'Where do you want to place your generated files?',\n\t\tdefault: './locale-system'\n\t})\n\n\tconst framework = (await select({\n\t\tmessage: 'Would you like to use any of these templates? (recommended)',\n\t\tchoices: [\n\t\t\t{\n\t\t\t\tname: 'No',\n\t\t\t\tvalue: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Next',\n\t\t\t\tvalue: 'next'\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Vite',\n\t\t\t\tvalue: 'vite'\n\t\t\t}\n\t\t]\n\t})) as 'next' | 'vite'\n\n\tconst done = logger.time.success()\n\n\tawait setupConfig({ cwd, projectLocale, outDir })\n\n\tif (framework) {\n\t\tawait setupTemplate({ cwd, outDir, framework })\n\t}\n\n\tdone('Config file created')\n\n\tlogger.log('🚀 You are set up to start using Terai! Thanks for choosing it.')\n}\n","type TODO = any;\n\n// In the absence of a WeakSet or WeakMap implementation, don't break, but don't cache either.\nfunction noop(...args: Array<any>) {}\nfunction createWeakMap<K extends object, V>(): MyWeakMap<K, V> {\n if (typeof WeakMap !== \"undefined\") {\n return new WeakMap<K, V>();\n } else {\n return fakeSetOrMap<K, V>();\n }\n}\n\ntype MyWeakMap<K extends object, V> = Pick<\n WeakMap<K, V>,\n \"delete\" | \"get\" | \"set\" | \"has\"\n>;\ntype MyWeakSetMap<K extends object, V> =\n & Pick<WeakMap<K, V>, \"delete\" | \"get\" | \"set\" | \"has\">\n & Pick<WeakSet<K>, \"add\">;\n\n/**\n * Creates and returns a no-op implementation of a WeakMap / WeakSet that never stores anything.\n */\nfunction fakeSetOrMap<K extends object, V = any>(): MyWeakSetMap<K, V> {\n return {\n add: noop as WeakSet<K>[\"add\"],\n delete: noop as WeakMap<K, V>[\"delete\"],\n get: noop as WeakMap<K, V>[\"get\"],\n set: noop as WeakMap<K, V>[\"set\"],\n has(k: K) {\n return false;\n },\n };\n}\n\n// Safe hasOwnProperty\nconst hop = Object.prototype.hasOwnProperty;\nconst has = function (obj: object, prop: string): boolean {\n return hop.call(obj, prop);\n};\n\n// Copy all own enumerable properties from source to target\nfunction extend<T, S extends object>(target: T, source: S) {\n type Extended = T & S;\n for (const prop in source) {\n if (has(source, prop)) {\n (target as any)[prop] = source[prop];\n }\n }\n return target as Extended;\n}\n\nconst reLeadingNewline = /^[ \\t]*(?:\\r\\n|\\r|\\n)/;\nconst reTrailingNewline = /(?:\\r\\n|\\r|\\n)[ \\t]*$/;\nconst reStartsWithNewlineOrIsEmpty = /^(?:[\\r\\n]|$)/;\nconst reDetectIndentation = /(?:\\r\\n|\\r|\\n)([ \\t]*)(?:[^ \\t\\r\\n]|$)/;\nconst reOnlyWhitespaceWithAtLeastOneNewline = /^[ \\t]*[\\r\\n][ \\t\\r\\n]*$/;\n\nfunction _outdentArray(\n strings: ReadonlyArray<string>,\n firstInterpolatedValueSetsIndentationLevel: boolean,\n options: Options,\n) {\n // If first interpolated value is a reference to outdent,\n // determine indentation level from the indentation of the interpolated value.\n let indentationLevel = 0;\n\n const match = strings[0].match(reDetectIndentation);\n if (match) {\n indentationLevel = match[1].length;\n }\n\n const reSource = `(\\\\r\\\\n|\\\\r|\\\\n).{0,${indentationLevel}}`;\n const reMatchIndent = new RegExp(reSource, \"g\");\n\n if (firstInterpolatedValueSetsIndentationLevel) {\n strings = strings.slice(1);\n }\n\n const { newline, trimLeadingNewline, trimTrailingNewline } = options;\n const normalizeNewlines = typeof newline === \"string\";\n const l = strings.length;\n const outdentedStrings = strings.map((v, i) => {\n // Remove leading indentation from all lines\n v = v.replace(reMatchIndent, \"$1\");\n // Trim a leading newline from the first string\n if (i === 0 && trimLeadingNewline) {\n v = v.replace(reLeadingNewline, \"\");\n }\n // Trim a trailing newline from the last string\n if (i === l - 1 && trimTrailingNewline) {\n v = v.replace(reTrailingNewline, \"\");\n }\n // Normalize newlines\n if (normalizeNewlines) {\n v = v.replace(/\\r\\n|\\n|\\r/g, (_) => newline as string);\n }\n return v;\n });\n return outdentedStrings;\n}\n\nfunction concatStringsAndValues(\n strings: ReadonlyArray<string>,\n values: ReadonlyArray<any>,\n): string {\n let ret = \"\";\n for (let i = 0, l = strings.length; i < l; i++) {\n ret += strings[i];\n if (i < l - 1) {\n ret += values[i];\n }\n }\n return ret;\n}\n\nfunction isTemplateStringsArray(v: any): v is TemplateStringsArray {\n return has(v, \"raw\") && has(v, \"length\");\n}\n\n/**\n * It is assumed that opts will not change. If this is a problem, clone your options object and pass the clone to\n * makeInstance\n * @param options\n * @return {outdent}\n */\nfunction createInstance(options: Options): Outdent {\n /** Cache of pre-processed template literal arrays */\n const arrayAutoIndentCache = createWeakMap<\n TemplateStringsArray,\n Array<string>\n >();\n /**\n * Cache of pre-processed template literal arrays, where first interpolated value is a reference to outdent,\n * before interpolated values are injected.\n */\n const arrayFirstInterpSetsIndentCache = createWeakMap<\n TemplateStringsArray,\n Array<string>\n >();\n\n /* tslint:disable:no-shadowed-variable */\n function outdent(\n stringsOrOptions: TemplateStringsArray,\n ...values: Array<any>\n ): string;\n function outdent(stringsOrOptions: Options): Outdent;\n function outdent(\n stringsOrOptions: TemplateStringsArray | Options,\n ...values: Array<any>\n ): string | Outdent {\n /* tslint:enable:no-shadowed-variable */\n if (isTemplateStringsArray(stringsOrOptions)) {\n const strings = stringsOrOptions;\n\n // Is first interpolated value a reference to outdent, alone on its own line, without any preceding non-whitespace?\n const firstInterpolatedValueSetsIndentationLevel =\n (values[0] === outdent || values[0] === defaultOutdent) &&\n reOnlyWhitespaceWithAtLeastOneNewline.test(strings[0]) &&\n reStartsWithNewlineOrIsEmpty.test(strings[1]);\n\n // Perform outdentation\n const cache = firstInterpolatedValueSetsIndentationLevel\n ? arrayFirstInterpSetsIndentCache\n : arrayAutoIndentCache;\n let renderedArray = cache.get(strings);\n if (!renderedArray) {\n renderedArray = _outdentArray(\n strings,\n firstInterpolatedValueSetsIndentationLevel,\n options,\n );\n cache.set(strings, renderedArray);\n }\n /** If no interpolated values, skip concatenation step */\n if (values.length === 0) {\n return renderedArray[0];\n }\n /** Concatenate string literals with interpolated values */\n const rendered = concatStringsAndValues(\n renderedArray,\n firstInterpolatedValueSetsIndentationLevel ? values.slice(1) : values,\n );\n\n return rendered;\n } else {\n // Create and return a new instance of outdent with the given options\n return createInstance(\n extend(extend({}, options), stringsOrOptions || {}),\n );\n }\n }\n\n const fullOutdent = extend(outdent, {\n string(str: string): string {\n return _outdentArray([str], false, options)[0];\n },\n });\n\n return fullOutdent;\n}\n\nconst defaultOutdent = createInstance({\n trimLeadingNewline: true,\n trimTrailingNewline: true,\n});\n\nexport interface Outdent {\n /**\n * Remove indentation from a template literal.\n */\n (strings: TemplateStringsArray, ...values: Array<any>): string;\n /**\n * Create and return a new Outdent instance with the given options.\n */\n (options: Options): Outdent;\n\n /**\n * Remove indentation from a string\n */\n string(str: string): string;\n\n // /**\n // * Remove indentation from a template literal, but return a tuple of the\n // * outdented TemplateStringsArray and\n // */\n // pass(strings: TemplateStringsArray, ...values: Array<any>): [TemplateStringsArray, ...Array<any>];\n}\nexport interface Options {\n trimLeadingNewline?: boolean;\n trimTrailingNewline?: boolean;\n /**\n * Normalize all newlines in the template literal to this value.\n * \n * If `null`, newlines are left untouched.\n * \n * Newlines that get normalized are '\\r\\n', '\\r', and '\\n'.\n * \n * Newlines within interpolated values are *never* normalized.\n * \n * Although intended for normalizing to '\\n' or '\\r\\n',\n * you can also set to any string; for example ' '.\n */\n newline?: string | null;\n}\n\n// Named exports. Simple and preferred.\n// import outdent from 'outdent';\nexport default defaultOutdent;\n// import {outdent} from 'outdent';\nexport { defaultOutdent as outdent };\n\n// In CommonJS environments, enable `var outdent = require('outdent');` by\n// replacing the exports object.\n// Make sure that our replacement includes the named exports from above.\ndeclare var module: any;\nif (typeof module !== \"undefined\") {\n // In webpack harmony-modules environments, module.exports is read-only,\n // so we fail gracefully.\n try {\n module.exports = defaultOutdent;\n Object.defineProperty(defaultOutdent, \"__esModule\", { value: true });\n (defaultOutdent as any).default = defaultOutdent;\n (defaultOutdent as any).outdent = defaultOutdent;\n } catch (e) {}\n}\n"]}