@qodalis/cli-server-abstractions 1.0.0-beta.12

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 (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/cli-command-author.d.ts +16 -0
  4. package/dist/cli-command-author.d.ts.map +1 -0
  5. package/dist/cli-command-author.js +16 -0
  6. package/dist/cli-command-author.js.map +1 -0
  7. package/dist/cli-command-parameter-descriptor.d.ts +34 -0
  8. package/dist/cli-command-parameter-descriptor.d.ts.map +1 -0
  9. package/dist/cli-command-parameter-descriptor.js +30 -0
  10. package/dist/cli-command-parameter-descriptor.js.map +1 -0
  11. package/dist/cli-command-processor.d.ts +67 -0
  12. package/dist/cli-command-processor.d.ts.map +1 -0
  13. package/dist/cli-command-processor.js +20 -0
  14. package/dist/cli-command-processor.js.map +1 -0
  15. package/dist/cli-module.d.ts +28 -0
  16. package/dist/cli-module.d.ts.map +1 -0
  17. package/dist/cli-module.js +12 -0
  18. package/dist/cli-module.js.map +1 -0
  19. package/dist/cli-paging.d.ts +35 -0
  20. package/dist/cli-paging.d.ts.map +1 -0
  21. package/dist/cli-paging.js +47 -0
  22. package/dist/cli-paging.js.map +1 -0
  23. package/dist/cli-process-command.d.ts +23 -0
  24. package/dist/cli-process-command.d.ts.map +1 -0
  25. package/dist/cli-process-command.js +3 -0
  26. package/dist/cli-process-command.js.map +1 -0
  27. package/dist/cli-processor-filter.d.ts +14 -0
  28. package/dist/cli-processor-filter.d.ts.map +1 -0
  29. package/dist/cli-processor-filter.js +3 -0
  30. package/dist/cli-processor-filter.js.map +1 -0
  31. package/dist/cli-stream-command-processor.d.ts +27 -0
  32. package/dist/cli-stream-command-processor.d.ts.map +1 -0
  33. package/dist/cli-stream-command-processor.js +13 -0
  34. package/dist/cli-stream-command-processor.js.map +1 -0
  35. package/dist/cli-structured-response.d.ts +56 -0
  36. package/dist/cli-structured-response.d.ts.map +1 -0
  37. package/dist/cli-structured-response.js +3 -0
  38. package/dist/cli-structured-response.js.map +1 -0
  39. package/dist/data-explorer-provider.d.ts +17 -0
  40. package/dist/data-explorer-provider.d.ts.map +1 -0
  41. package/dist/data-explorer-provider.js +3 -0
  42. package/dist/data-explorer-provider.js.map +1 -0
  43. package/dist/data-explorer-types.d.ts +143 -0
  44. package/dist/data-explorer-types.d.ts.map +1 -0
  45. package/dist/data-explorer-types.js +22 -0
  46. package/dist/data-explorer-types.js.map +1 -0
  47. package/dist/index.d.ts +14 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +28 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/jobs/cli-job-execution-context.d.ts +7 -0
  52. package/dist/jobs/cli-job-execution-context.d.ts.map +1 -0
  53. package/dist/jobs/cli-job-execution-context.js +3 -0
  54. package/dist/jobs/cli-job-execution-context.js.map +1 -0
  55. package/dist/jobs/cli-job-logger.d.ts +12 -0
  56. package/dist/jobs/cli-job-logger.d.ts.map +1 -0
  57. package/dist/jobs/cli-job-logger.js +3 -0
  58. package/dist/jobs/cli-job-logger.js.map +1 -0
  59. package/dist/jobs/cli-job-options.d.ts +30 -0
  60. package/dist/jobs/cli-job-options.d.ts.map +1 -0
  61. package/dist/jobs/cli-job-options.js +3 -0
  62. package/dist/jobs/cli-job-options.js.map +1 -0
  63. package/dist/jobs/cli-job-storage-provider.d.ts +30 -0
  64. package/dist/jobs/cli-job-storage-provider.d.ts.map +1 -0
  65. package/dist/jobs/cli-job-storage-provider.js +3 -0
  66. package/dist/jobs/cli-job-storage-provider.js.map +1 -0
  67. package/dist/jobs/cli-job.d.ts +11 -0
  68. package/dist/jobs/cli-job.d.ts.map +1 -0
  69. package/dist/jobs/cli-job.js +3 -0
  70. package/dist/jobs/cli-job.js.map +1 -0
  71. package/dist/jobs/index.d.ts +9 -0
  72. package/dist/jobs/index.d.ts.map +1 -0
  73. package/dist/jobs/index.js +3 -0
  74. package/dist/jobs/index.js.map +1 -0
  75. package/dist/jobs/job-execution.d.ts +27 -0
  76. package/dist/jobs/job-execution.d.ts.map +1 -0
  77. package/dist/jobs/job-execution.js +3 -0
  78. package/dist/jobs/job-execution.js.map +1 -0
  79. package/dist/jobs/job-state.d.ts +12 -0
  80. package/dist/jobs/job-state.d.ts.map +1 -0
  81. package/dist/jobs/job-state.js +3 -0
  82. package/dist/jobs/job-state.js.map +1 -0
  83. package/dist/jobs/log-entry.d.ts +12 -0
  84. package/dist/jobs/log-entry.d.ts.map +1 -0
  85. package/dist/jobs/log-entry.js +3 -0
  86. package/dist/jobs/log-entry.js.map +1 -0
  87. package/dist/shell-words.d.ts +31 -0
  88. package/dist/shell-words.d.ts.map +1 -0
  89. package/dist/shell-words.js +98 -0
  90. package/dist/shell-words.js.map +1 -0
  91. package/package.json +35 -0
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.splitShellWords = splitShellWords;
4
+ exports.joinShellWords = joinShellWords;
5
+ exports.getPositionals = getPositionals;
6
+ exports.getPositionalText = getPositionalText;
7
+ exports.quoteShellWord = quoteShellWord;
8
+ /** Index of the quote closing the one at `start`, or -1. In double quotes `\"` and `\\` are escapes. */
9
+ function closingQuote(text, start) {
10
+ const quote = text[start];
11
+ for (let i = start + 1; i < text.length; i++) {
12
+ if (quote === '"' && text[i] === '\\' && (text[i + 1] === '"' || text[i + 1] === '\\')) {
13
+ i++;
14
+ }
15
+ else if (text[i] === quote) {
16
+ return i;
17
+ }
18
+ }
19
+ return -1;
20
+ }
21
+ /**
22
+ * Splits text into words like a shell, as the browser CLI does: whitespace
23
+ * separates words, quotes are removed (`"a b"` is one word `a b`), a backslash
24
+ * outside quotes escapes the next character (`my\ file` -> `my file`), and
25
+ * inside double quotes `\"` and `\\` are escapes. Single quotes keep their
26
+ * content as is. A quote without a closing one is text.
27
+ */
28
+ function splitShellWords(text) {
29
+ const words = [];
30
+ let current = '';
31
+ let inWord = false;
32
+ for (let i = 0; i < text.length; i++) {
33
+ const ch = text[i];
34
+ if (ch === '\\' && i + 1 < text.length) {
35
+ current += text[++i];
36
+ inWord = true;
37
+ continue;
38
+ }
39
+ const end = ch === '"' || ch === "'" ? closingQuote(text, i) : -1;
40
+ if (end !== -1) {
41
+ const inner = text.slice(i + 1, end);
42
+ current += ch === '"' ? inner.replace(/\\(["\\])/g, '$1') : inner;
43
+ inWord = true;
44
+ i = end;
45
+ }
46
+ else if (/\s/.test(ch)) {
47
+ if (inWord)
48
+ words.push(current);
49
+ current = '';
50
+ inWord = false;
51
+ }
52
+ else {
53
+ current += ch;
54
+ inWord = true;
55
+ }
56
+ }
57
+ if (inWord)
58
+ words.push(current);
59
+ return words;
60
+ }
61
+ /**
62
+ * The arguments as a shell's echo prints them, as the browser CLI's own
63
+ * `echo` does: quotes removed, the words joined by one space, spacing inside
64
+ * quotes kept (`"a" "b"` -> `a b`). A quote without a closing one is text.
65
+ */
66
+ function joinShellWords(text) {
67
+ return splitShellWords(text).join(' ');
68
+ }
69
+ /**
70
+ * The positional arguments of a command, unquoted: `command.positionals` as the
71
+ * browser sends it, or, from clients that do not send it, `command.value`
72
+ * split with the same shell rules.
73
+ */
74
+ function getPositionals(command) {
75
+ if (Array.isArray(command.positionals))
76
+ return command.positionals.map((p) => String(p));
77
+ return splitShellWords(command.value ?? '');
78
+ }
79
+ /** The positional arguments joined by one space (`base64 encode "a b"` -> `a b`); empty when there are none. */
80
+ function getPositionalText(command) {
81
+ return getPositionals(command).join(' ');
82
+ }
83
+ /**
84
+ * Quotes a word for a command line so `splitShellWords` (and the browser CLI's
85
+ * parser) reads it back unchanged: as is when it has no spaces, quotes or
86
+ * special characters; in double quotes when it has no `"`; in single quotes
87
+ * when it has no `'`; otherwise in double quotes with `\"` and `\\` escapes.
88
+ */
89
+ function quoteShellWord(value) {
90
+ if (/^[^\s"'\\=|&;<>()$`*?#~-][^\s"'\\=|&;<>()$`*?#~]*$/.test(value))
91
+ return value;
92
+ if (!value.includes('"'))
93
+ return `"${value.replace(/\\/g, '\\\\')}"`;
94
+ if (!value.includes("'"))
95
+ return `'${value}'`;
96
+ return `"${value.replace(/[\\"]/g, '\\$&')}"`;
97
+ }
98
+ //# sourceMappingURL=shell-words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-words.js","sourceRoot":"","sources":["../src/shell-words.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "@qodalis/cli-server-abstractions",
3
+ "version": "1.0.0-beta.12",
4
+ "description": "Shared interfaces and base classes for Qodalis CLI command processors — zero framework dependencies",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "LICENSE",
10
+ "README.md"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc"
14
+ },
15
+ "keywords": [
16
+ "cli",
17
+ "qodalis",
18
+ "terminal",
19
+ "commands",
20
+ "cli-server",
21
+ "command-processor",
22
+ "abstractions"
23
+ ],
24
+ "author": "Nicolae Lupei <nicolae.lupei@qodalis.com>",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "https://github.com/qodalis-solutions/cli-server-node",
29
+ "directory": "packages/abstractions"
30
+ },
31
+ "homepage": "https://qodalis.com/",
32
+ "devDependencies": {
33
+ "typescript": "^5.6.0"
34
+ }
35
+ }