@meilisearch/cli 0.0.0-stage → 0.1.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 (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -2
  3. package/bin/run.js +15 -0
  4. package/dist/commands/add/documents.js +54 -0
  5. package/dist/commands/add/documents.js.map +1 -0
  6. package/dist/commands/add/indexes.js +39 -0
  7. package/dist/commands/add/indexes.js.map +1 -0
  8. package/dist/commands/add/keys.js +63 -0
  9. package/dist/commands/add/keys.js.map +1 -0
  10. package/dist/commands/add/projects.js +96 -0
  11. package/dist/commands/add/projects.js.map +1 -0
  12. package/dist/commands/auth/login.js +26 -0
  13. package/dist/commands/auth/login.js.map +1 -0
  14. package/dist/commands/auth/logout.js +33 -0
  15. package/dist/commands/auth/logout.js.map +1 -0
  16. package/dist/commands/auth/refresh.js +22 -0
  17. package/dist/commands/auth/refresh.js.map +1 -0
  18. package/dist/commands/auth/status.js +34 -0
  19. package/dist/commands/auth/status.js.map +1 -0
  20. package/dist/commands/cancel/tasks.js +24 -0
  21. package/dist/commands/cancel/tasks.js.map +1 -0
  22. package/dist/commands/config/list.js +18 -0
  23. package/dist/commands/config/list.js.map +1 -0
  24. package/dist/commands/config/set.js +48 -0
  25. package/dist/commands/config/set.js.map +1 -0
  26. package/dist/commands/config/sync-with-cloud.js +144 -0
  27. package/dist/commands/config/sync-with-cloud.js.map +1 -0
  28. package/dist/commands/config/unset.js +28 -0
  29. package/dist/commands/config/unset.js.map +1 -0
  30. package/dist/commands/config/update.js +53 -0
  31. package/dist/commands/config/update.js.map +1 -0
  32. package/dist/commands/delete/documents.js +81 -0
  33. package/dist/commands/delete/documents.js.map +1 -0
  34. package/dist/commands/delete/indexes.js +28 -0
  35. package/dist/commands/delete/indexes.js.map +1 -0
  36. package/dist/commands/delete/keys.js +28 -0
  37. package/dist/commands/delete/keys.js.map +1 -0
  38. package/dist/commands/delete/projects.js +40 -0
  39. package/dist/commands/delete/projects.js.map +1 -0
  40. package/dist/commands/delete/settings.js +28 -0
  41. package/dist/commands/delete/settings.js.map +1 -0
  42. package/dist/commands/delete/tasks.js +34 -0
  43. package/dist/commands/delete/tasks.js.map +1 -0
  44. package/dist/commands/export.js +67 -0
  45. package/dist/commands/export.js.map +1 -0
  46. package/dist/commands/facet-search.js +87 -0
  47. package/dist/commands/facet-search.js.map +1 -0
  48. package/dist/commands/get/batches.js +35 -0
  49. package/dist/commands/get/batches.js.map +1 -0
  50. package/dist/commands/get/documents.js +74 -0
  51. package/dist/commands/get/documents.js.map +1 -0
  52. package/dist/commands/get/health.js +17 -0
  53. package/dist/commands/get/health.js.map +1 -0
  54. package/dist/commands/get/indexes.js +33 -0
  55. package/dist/commands/get/indexes.js.map +1 -0
  56. package/dist/commands/get/keys.js +36 -0
  57. package/dist/commands/get/keys.js.map +1 -0
  58. package/dist/commands/get/projects.js +40 -0
  59. package/dist/commands/get/projects.js.map +1 -0
  60. package/dist/commands/get/settings.js +25 -0
  61. package/dist/commands/get/settings.js.map +1 -0
  62. package/dist/commands/get/stats.js +37 -0
  63. package/dist/commands/get/stats.js.map +1 -0
  64. package/dist/commands/get/tasks.js +35 -0
  65. package/dist/commands/get/tasks.js.map +1 -0
  66. package/dist/commands/get/version.js +16 -0
  67. package/dist/commands/get/version.js.map +1 -0
  68. package/dist/commands/multi-search.js +39 -0
  69. package/dist/commands/multi-search.js.map +1 -0
  70. package/dist/commands/schema.js +95 -0
  71. package/dist/commands/schema.js.map +1 -0
  72. package/dist/commands/search.js +164 -0
  73. package/dist/commands/search.js.map +1 -0
  74. package/dist/commands/similar.js +86 -0
  75. package/dist/commands/similar.js.map +1 -0
  76. package/dist/commands/teleport.js +472 -0
  77. package/dist/commands/teleport.js.map +1 -0
  78. package/dist/commands/update/documents.js +56 -0
  79. package/dist/commands/update/documents.js.map +1 -0
  80. package/dist/commands/update/indexes.js +44 -0
  81. package/dist/commands/update/indexes.js.map +1 -0
  82. package/dist/commands/update/keys.js +42 -0
  83. package/dist/commands/update/keys.js.map +1 -0
  84. package/dist/commands/update/projects.js +62 -0
  85. package/dist/commands/update/projects.js.map +1 -0
  86. package/dist/commands/update/settings.js +145 -0
  87. package/dist/commands/update/settings.js.map +1 -0
  88. package/dist/lib/analytics.js +135 -0
  89. package/dist/lib/analytics.js.map +1 -0
  90. package/dist/lib/api-naming.js +435 -0
  91. package/dist/lib/api-naming.js.map +1 -0
  92. package/dist/lib/base-command.js +318 -0
  93. package/dist/lib/base-command.js.map +1 -0
  94. package/dist/lib/clients/analytics.js +24 -0
  95. package/dist/lib/clients/analytics.js.map +1 -0
  96. package/dist/lib/clients/management/generated/client/client.gen.js +217 -0
  97. package/dist/lib/clients/management/generated/client/client.gen.js.map +1 -0
  98. package/dist/lib/clients/management/generated/client/index.js +7 -0
  99. package/dist/lib/clients/management/generated/client/index.js.map +1 -0
  100. package/dist/lib/clients/management/generated/client/types.gen.js +3 -0
  101. package/dist/lib/clients/management/generated/client/types.gen.js.map +1 -0
  102. package/dist/lib/clients/management/generated/client/utils.gen.js +229 -0
  103. package/dist/lib/clients/management/generated/client/utils.gen.js.map +1 -0
  104. package/dist/lib/clients/management/generated/client.gen.js +4 -0
  105. package/dist/lib/clients/management/generated/client.gen.js.map +1 -0
  106. package/dist/lib/clients/management/generated/core/auth.gen.js +15 -0
  107. package/dist/lib/clients/management/generated/core/auth.gen.js.map +1 -0
  108. package/dist/lib/clients/management/generated/core/bodySerializer.gen.js +58 -0
  109. package/dist/lib/clients/management/generated/core/bodySerializer.gen.js.map +1 -0
  110. package/dist/lib/clients/management/generated/core/params.gen.js +110 -0
  111. package/dist/lib/clients/management/generated/core/params.gen.js.map +1 -0
  112. package/dist/lib/clients/management/generated/core/pathSerializer.gen.js +107 -0
  113. package/dist/lib/clients/management/generated/core/pathSerializer.gen.js.map +1 -0
  114. package/dist/lib/clients/management/generated/core/queryKeySerializer.gen.js +93 -0
  115. package/dist/lib/clients/management/generated/core/queryKeySerializer.gen.js.map +1 -0
  116. package/dist/lib/clients/management/generated/core/serverSentEvents.gen.js +133 -0
  117. package/dist/lib/clients/management/generated/core/serverSentEvents.gen.js.map +1 -0
  118. package/dist/lib/clients/management/generated/core/types.gen.js +3 -0
  119. package/dist/lib/clients/management/generated/core/types.gen.js.map +1 -0
  120. package/dist/lib/clients/management/generated/core/utils.gen.js +88 -0
  121. package/dist/lib/clients/management/generated/core/utils.gen.js.map +1 -0
  122. package/dist/lib/clients/management/generated/index.js +3 -0
  123. package/dist/lib/clients/management/generated/index.js.map +1 -0
  124. package/dist/lib/clients/management/generated/sdk.gen.js +398 -0
  125. package/dist/lib/clients/management/generated/sdk.gen.js.map +1 -0
  126. package/dist/lib/clients/management/generated/types.gen.js +3 -0
  127. package/dist/lib/clients/management/generated/types.gen.js.map +1 -0
  128. package/dist/lib/clients/management.js +21 -0
  129. package/dist/lib/clients/management.js.map +1 -0
  130. package/dist/lib/clients/meilisearch.js +69 -0
  131. package/dist/lib/clients/meilisearch.js.map +1 -0
  132. package/dist/lib/clients/oauth.js +225 -0
  133. package/dist/lib/clients/oauth.js.map +1 -0
  134. package/dist/lib/clients/ping.js +26 -0
  135. package/dist/lib/clients/ping.js.map +1 -0
  136. package/dist/lib/clients/trace.js +69 -0
  137. package/dist/lib/clients/trace.js.map +1 -0
  138. package/dist/lib/cloud-sync.js +113 -0
  139. package/dist/lib/cloud-sync.js.map +1 -0
  140. package/dist/lib/config.js +322 -0
  141. package/dist/lib/config.js.map +1 -0
  142. package/dist/lib/errors.js +302 -0
  143. package/dist/lib/errors.js.map +1 -0
  144. package/dist/lib/help.js +37 -0
  145. package/dist/lib/help.js.map +1 -0
  146. package/dist/lib/input.js +76 -0
  147. package/dist/lib/input.js.map +1 -0
  148. package/dist/lib/login.js +57 -0
  149. package/dist/lib/login.js.map +1 -0
  150. package/dist/lib/output.js +39 -0
  151. package/dist/lib/output.js.map +1 -0
  152. package/dist/lib/pagination.js +52 -0
  153. package/dist/lib/pagination.js.map +1 -0
  154. package/dist/lib/session.js +149 -0
  155. package/dist/lib/session.js.map +1 -0
  156. package/dist/lib/task-filters.js +118 -0
  157. package/dist/lib/task-filters.js.map +1 -0
  158. package/dist/lib/tasks.js +64 -0
  159. package/dist/lib/tasks.js.map +1 -0
  160. package/dist/lib/terminal.js +168 -0
  161. package/dist/lib/terminal.js.map +1 -0
  162. package/dist/lib/values.js +48 -0
  163. package/dist/lib/values.js.map +1 -0
  164. package/oclif.manifest.json +10470 -0
  165. package/package.json +81 -3
@@ -0,0 +1,168 @@
1
+ /**
2
+ * The terminal of the interactive commands, such as `meili teleport` (ADR 0015):
3
+ * questions answered with the arrow keys, lines for the human, and a status
4
+ * block that animates while the command waits. Everything goes to stderr:
5
+ * stdout stays for data. Colors follow `NO_COLOR` and `FORCE_COLOR`.
6
+ *
7
+ * Every question has a `prompt` id, and every option may have an `id`: the
8
+ * analytics record them (ADR 0016), never the text of a free answer. A renamed
9
+ * id breaks the funnels that use it.
10
+ */
11
+ import { stripVTControlCharacters, styleText } from "node:util";
12
+ import { input, password, Separator, select } from "@inquirer/prompts";
13
+ import { track } from "./analytics.js";
14
+ /** Where the questions are drawn. A function: tests replace `process.stderr.write`. The answer becomes a `step` line. */
15
+ const context = () => ({ output: process.stderr, clearPromptOnDone: true });
16
+ /** True for the error of a question the human left with Ctrl-C. */
17
+ export function isPromptExit(error) {
18
+ return error instanceof Error && error.name === "ExitPromptError";
19
+ }
20
+ /** The answer to the question `prompt`, recorded as answered or as left. */
21
+ async function answer(prompt, question, choice) {
22
+ try {
23
+ const value = await question;
24
+ track("cli_prompt_answered", { prompt, choice: choice(value) });
25
+ return value;
26
+ }
27
+ catch (error) {
28
+ if (isPromptExit(error))
29
+ track("cli_prompt_aborted", { prompt });
30
+ throw error;
31
+ }
32
+ }
33
+ /** The left margin of every line, questions included. */
34
+ const MARGIN = " ";
35
+ /** The look of the questions: inquirer's, in the margin. */
36
+ const theme = () => ({
37
+ prefix: `${MARGIN}${paint("blue", "?")}`,
38
+ icon: { cursor: "❯" },
39
+ style: {
40
+ error: (text) => `${MARGIN}${paint("red", `> ${text}`)}`,
41
+ // A choice is drawn `❯ <name>`, and `choose` starts every name with the margin: the cursor moves into it.
42
+ highlight: (text) => paint("cyan", `${MARGIN}${text.slice(0, 2)}${text.slice(2 + MARGIN.length)}`),
43
+ keysHelpTip: (keys) => MARGIN +
44
+ keys
45
+ .map(([key, action]) => `${paint("bold", key)} ${paint("dim", action)}`)
46
+ .join(paint("dim", " • ")),
47
+ },
48
+ });
49
+ /** One answer out of a list, picked with the arrow keys. A `heading` starts a group of answers. */
50
+ export function choose(prompt, message, choices) {
51
+ clearStatus();
52
+ return answer(prompt, select({
53
+ message,
54
+ choices: choices.map((choice) => Separator.isSeparator(choice) ? choice : { ...choice, name: `${MARGIN}${choice.name}` }),
55
+ pageSize: 15,
56
+ theme: theme(),
57
+ }, context()), (value) => choices.find((each) => !Separator.isSeparator(each) && each.value === value)?.id);
58
+ }
59
+ /** The title of a group of answers of `choose`, which the arrow keys skip. Its answers are indented. */
60
+ export function heading(title) {
61
+ return new Separator(`${MARGIN} ${paint("bold", title)}`);
62
+ }
63
+ /** A line of text, `default` when the human presses Enter. */
64
+ export function ask(prompt, message, options = {}) {
65
+ clearStatus();
66
+ return answer(prompt, input({ message, ...options, theme: theme() }, context()), (value) => value === options.default ? "default" : "custom");
67
+ }
68
+ /** A line of text that is never echoed. */
69
+ export function askSecret(prompt, message) {
70
+ clearStatus();
71
+ return answer(prompt, password({ message, mask: true, theme: theme() }, context()), (value) => value === "" ? "empty" : "custom");
72
+ }
73
+ /** `text` in `style`, when stderr shows colors. */
74
+ export function paint(style, text) {
75
+ return styleText(style, text, { stream: process.stderr });
76
+ }
77
+ const LABEL_WIDTH = 12;
78
+ /** One line for the human, in the margin. Ends the status block first, and leaves it on screen. */
79
+ export function say(line = "") {
80
+ endStatus();
81
+ process.stderr.write(line === "" ? "\n" : `${MARGIN}${line}\n`);
82
+ }
83
+ /** A line under the text of a `✔` or `✖` line. */
84
+ export function detail(line) {
85
+ say(` ${line}`);
86
+ }
87
+ /** ` ✔ Region Frankfurt 2s`: a step done, with how long it took since `since`. */
88
+ export function step(label, text, since) {
89
+ clearStatus();
90
+ const took = since === undefined ? "" : ` ${paint("dim", elapsed(since))}`;
91
+ say(`${paint("green", "✔")} ${paint("bold", label.padEnd(LABEL_WIDTH))}${text}${took}`);
92
+ }
93
+ /** ` ✖ text`, for what went wrong. */
94
+ export function problem(text) {
95
+ say(`${paint("red", "✖")} ${text}`);
96
+ }
97
+ /** ` Project settings https://…`: a label and a value to copy or open. */
98
+ export function field(label, value) {
99
+ detail(`${label.padEnd(18)}${paint("cyan", value)}`);
100
+ }
101
+ const FRAMES = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏";
102
+ /** What the status block shows, the rows it covers on screen, and the timer that animates it. */
103
+ let render;
104
+ let drawn = 0;
105
+ let frame = 0;
106
+ let timer;
107
+ /**
108
+ * Shows `text()` after a spinner, and draws it again every 80 ms, so a wait
109
+ * moves even between two polls. `text()` may return several lines.
110
+ */
111
+ export function status(text) {
112
+ render = text;
113
+ timer ??= setInterval(() => {
114
+ frame = (frame + 1) % FRAMES.length;
115
+ draw();
116
+ }, 80).unref();
117
+ draw();
118
+ }
119
+ function draw() {
120
+ if (render === undefined)
121
+ return;
122
+ const [first, ...rest] = render().split("\n");
123
+ const lines = [
124
+ `${MARGIN}${paint("cyan", FRAMES[frame])} ${first}`,
125
+ ...rest.map((line) => `${MARGIN} ${line}`),
126
+ ];
127
+ process.stderr.write(`${cursorToBlock()}${lines.join("\n")}`);
128
+ // A line wider than the terminal takes several rows.
129
+ const columns = process.stderr.columns || 80;
130
+ drawn = lines.reduce((rows, line) => rows + Math.max(1, Math.ceil(stripVTControlCharacters(line).length / columns)), 0);
131
+ }
132
+ /** Moves to the first line of the status block, and erases it. */
133
+ function cursorToBlock() {
134
+ return `${drawn > 1 ? `\x1b[${drawn - 1}A` : ""}\r\x1b[J`;
135
+ }
136
+ /** Stops the status block, and writes `tail` when it is on screen. */
137
+ function closeStatus(tail) {
138
+ clearInterval(timer);
139
+ timer = undefined;
140
+ render = undefined;
141
+ if (drawn === 0)
142
+ return;
143
+ process.stderr.write(tail);
144
+ drawn = 0;
145
+ }
146
+ /** Draws the status block a last time, leaves it on screen, and moves to the next line. */
147
+ export function endStatus() {
148
+ draw();
149
+ closeStatus("\n");
150
+ }
151
+ /** Erases the status block. */
152
+ function clearStatus() {
153
+ closeStatus(cursorToBlock());
154
+ }
155
+ const BAR_WIDTH = 30;
156
+ /** `━━━━━━━━────────────────────── 27%`, for a fraction between 0 and 1. */
157
+ export function bar(fraction) {
158
+ const filled = Math.round(fraction * BAR_WIDTH);
159
+ return `${paint("cyan", "━".repeat(filled))}${paint("dim", "─".repeat(BAR_WIDTH - filled))} ${String(Math.floor(fraction * 100)).padStart(3)}%`;
160
+ }
161
+ /** `1m02s`, `45s`: how long a wait has lasted. */
162
+ export function elapsed(since) {
163
+ const seconds = Math.floor((Date.now() - since) / 1000);
164
+ return seconds < 60
165
+ ? `${seconds}s`
166
+ : `${Math.floor(seconds / 60)}m${String(seconds % 60).padStart(2, "0")}s`;
167
+ }
168
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/lib/terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * The conversions rule 7 of docs/contract/commands.md asks of a flag before it
3
+ * can become a body field: the text of a number, the JSON text of an object,
4
+ * the comma-separated text of an array of scalars, and `null`, which sends a
5
+ * JSON null. Text that does not convert is sent as it is, so that the API
6
+ * names the value it refused, with its own code, rather than the CLI judging a
7
+ * value the API owns. The CLI only refuses what it cannot send at all, as
8
+ * `--data` and `--file`, which it has to parse before it can merge them.
9
+ */
10
+ /** The text that sends a JSON null: `--stop-words null` resets that setting. */
11
+ const NULL = "null";
12
+ /** An object or a nested array, as JSON text: `--typo-tolerance '{"enabled":false}'`. */
13
+ export function asJson(value) {
14
+ if (value === undefined)
15
+ return undefined;
16
+ try {
17
+ return JSON.parse(value);
18
+ }
19
+ catch {
20
+ return value;
21
+ }
22
+ }
23
+ /** A number: `--search-cutoff-ms 1500`. */
24
+ export function asNumber(value) {
25
+ if (value === undefined)
26
+ return undefined;
27
+ if (value === NULL)
28
+ return null;
29
+ const text = value.trim();
30
+ // `Number` alone would not do: it reads `0x1` as 1 and `1e999` as Infinity,
31
+ // which JSON writes as null. Both turn what the agent typed into another
32
+ // value, silently. Only text that spells a decimal number becomes one.
33
+ return DECIMAL.test(text) && Number.isFinite(Number(text)) ? Number(text) : value;
34
+ }
35
+ const DECIMAL = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/;
36
+ /** An array of scalars, comma-separated: `--stop-words the,a`. */
37
+ export function asList(value) {
38
+ if (value === undefined)
39
+ return undefined;
40
+ return value === NULL ? null : value.split(",");
41
+ }
42
+ /** A string, passed as it is: `--distinct-attribute sku`. */
43
+ export function asText(value) {
44
+ if (value === undefined)
45
+ return undefined;
46
+ return value === NULL ? null : value;
47
+ }
48
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../../src/lib/values.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gFAAgF;AAChF,MAAM,IAAI,GAAG,MAAM,CAAC;AAEpB,yFAAyF;AACzF,MAAM,UAAU,MAAM,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,QAAQ,CAAC,KAAyB;IAChD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,yEAAyE;IACzE,uEAAuE;IACvE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AACpF,CAAC;AAED,MAAM,OAAO,GAAG,iDAAiD,CAAC;AAElE,kEAAkE;AAClE,MAAM,UAAU,MAAM,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,MAAM,CAAC,KAAyB;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACvC,CAAC"}