skir 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +447 -0
  2. package/dist/casing.d.ts +8 -0
  3. package/dist/casing.d.ts.map +1 -0
  4. package/dist/casing.js +49 -0
  5. package/dist/casing.js.map +1 -0
  6. package/dist/casing.test.d.ts +2 -0
  7. package/dist/casing.test.d.ts.map +1 -0
  8. package/dist/casing.test.js +134 -0
  9. package/dist/casing.test.js.map +1 -0
  10. package/dist/command_line_parser.d.ts +33 -0
  11. package/dist/command_line_parser.d.ts.map +1 -0
  12. package/dist/command_line_parser.js +171 -0
  13. package/dist/command_line_parser.js.map +1 -0
  14. package/dist/command_line_parser.test.d.ts +2 -0
  15. package/dist/command_line_parser.test.d.ts.map +1 -0
  16. package/dist/command_line_parser.test.js +302 -0
  17. package/dist/command_line_parser.test.js.map +1 -0
  18. package/dist/compatibility_checker.d.ts +68 -0
  19. package/dist/compatibility_checker.d.ts.map +1 -0
  20. package/dist/compatibility_checker.js +328 -0
  21. package/dist/compatibility_checker.js.map +1 -0
  22. package/dist/compatibility_checker.test.d.ts +2 -0
  23. package/dist/compatibility_checker.test.d.ts.map +1 -0
  24. package/dist/compatibility_checker.test.js +528 -0
  25. package/dist/compatibility_checker.test.js.map +1 -0
  26. package/dist/compiler.d.ts +3 -0
  27. package/dist/compiler.d.ts.map +1 -0
  28. package/dist/compiler.js +358 -0
  29. package/dist/compiler.js.map +1 -0
  30. package/dist/config.d.ts +47 -0
  31. package/dist/config.d.ts.map +1 -0
  32. package/dist/config.js +23 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/definition_finder.d.ts +12 -0
  35. package/dist/definition_finder.d.ts.map +1 -0
  36. package/dist/definition_finder.js +180 -0
  37. package/dist/definition_finder.js.map +1 -0
  38. package/dist/definition_finder.test.d.ts +2 -0
  39. package/dist/definition_finder.test.d.ts.map +1 -0
  40. package/dist/definition_finder.test.js +164 -0
  41. package/dist/definition_finder.test.js.map +1 -0
  42. package/dist/encoding.d.ts +2 -0
  43. package/dist/encoding.d.ts.map +1 -0
  44. package/dist/encoding.js +38 -0
  45. package/dist/encoding.js.map +1 -0
  46. package/dist/encoding.test.d.ts +2 -0
  47. package/dist/encoding.test.d.ts.map +1 -0
  48. package/dist/encoding.test.js +23 -0
  49. package/dist/encoding.test.js.map +1 -0
  50. package/dist/error_renderer.d.ts +10 -0
  51. package/dist/error_renderer.d.ts.map +1 -0
  52. package/dist/error_renderer.js +247 -0
  53. package/dist/error_renderer.js.map +1 -0
  54. package/dist/formatter.d.ts +3 -0
  55. package/dist/formatter.d.ts.map +1 -0
  56. package/dist/formatter.js +263 -0
  57. package/dist/formatter.js.map +1 -0
  58. package/dist/formatter.test.d.ts +2 -0
  59. package/dist/formatter.test.d.ts.map +1 -0
  60. package/dist/formatter.test.js +156 -0
  61. package/dist/formatter.test.js.map +1 -0
  62. package/dist/index.d.ts +6 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +5 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/index.test.d.ts +2 -0
  67. package/dist/index.test.d.ts.map +1 -0
  68. package/dist/index.test.js +14 -0
  69. package/dist/index.test.js.map +1 -0
  70. package/dist/io.d.ts +13 -0
  71. package/dist/io.d.ts.map +1 -0
  72. package/dist/io.js +22 -0
  73. package/dist/io.js.map +1 -0
  74. package/dist/language_server.d.ts +15 -0
  75. package/dist/language_server.d.ts.map +1 -0
  76. package/dist/language_server.js +248 -0
  77. package/dist/language_server.js.map +1 -0
  78. package/dist/literals.d.ts +13 -0
  79. package/dist/literals.d.ts.map +1 -0
  80. package/dist/literals.js +100 -0
  81. package/dist/literals.js.map +1 -0
  82. package/dist/literals.test.d.ts +2 -0
  83. package/dist/literals.test.d.ts.map +1 -0
  84. package/dist/literals.test.js +149 -0
  85. package/dist/literals.test.js.map +1 -0
  86. package/dist/module_collector.d.ts +3 -0
  87. package/dist/module_collector.d.ts.map +1 -0
  88. package/dist/module_collector.js +22 -0
  89. package/dist/module_collector.js.map +1 -0
  90. package/dist/module_set.d.ts +44 -0
  91. package/dist/module_set.d.ts.map +1 -0
  92. package/dist/module_set.js +1025 -0
  93. package/dist/module_set.js.map +1 -0
  94. package/dist/module_set.test.d.ts +2 -0
  95. package/dist/module_set.test.d.ts.map +1 -0
  96. package/dist/module_set.test.js +1330 -0
  97. package/dist/module_set.test.js.map +1 -0
  98. package/dist/parser.d.ts +6 -0
  99. package/dist/parser.d.ts.map +1 -0
  100. package/dist/parser.js +971 -0
  101. package/dist/parser.js.map +1 -0
  102. package/dist/parser.test.d.ts +2 -0
  103. package/dist/parser.test.d.ts.map +1 -0
  104. package/dist/parser.test.js +1366 -0
  105. package/dist/parser.test.js.map +1 -0
  106. package/dist/snapshotter.d.ts +6 -0
  107. package/dist/snapshotter.d.ts.map +1 -0
  108. package/dist/snapshotter.js +107 -0
  109. package/dist/snapshotter.js.map +1 -0
  110. package/dist/tokenizer.d.ts +4 -0
  111. package/dist/tokenizer.d.ts.map +1 -0
  112. package/dist/tokenizer.js +192 -0
  113. package/dist/tokenizer.js.map +1 -0
  114. package/dist/tokenizer.test.d.ts +2 -0
  115. package/dist/tokenizer.test.d.ts.map +1 -0
  116. package/dist/tokenizer.test.js +425 -0
  117. package/dist/tokenizer.test.js.map +1 -0
  118. package/dist/types.d.ts +375 -0
  119. package/dist/types.d.ts.map +1 -0
  120. package/dist/types.js +2 -0
  121. package/dist/types.js.map +1 -0
  122. package/package.json +63 -0
  123. package/src/casing.ts +64 -0
  124. package/src/command_line_parser.ts +249 -0
  125. package/src/compatibility_checker.ts +470 -0
  126. package/src/compiler.ts +435 -0
  127. package/src/config.ts +28 -0
  128. package/src/definition_finder.ts +221 -0
  129. package/src/encoding.ts +32 -0
  130. package/src/error_renderer.ts +278 -0
  131. package/src/formatter.ts +274 -0
  132. package/src/index.ts +6 -0
  133. package/src/io.ts +33 -0
  134. package/src/language_server.ts +301 -0
  135. package/src/literals.ts +120 -0
  136. package/src/module_collector.ts +22 -0
  137. package/src/module_set.ts +1175 -0
  138. package/src/parser.ts +1122 -0
  139. package/src/snapshotter.ts +136 -0
  140. package/src/tokenizer.ts +216 -0
  141. package/src/types.ts +518 -0
@@ -0,0 +1,33 @@
1
+ export type ParsedArgs = {
2
+ kind: "gen";
3
+ root?: string;
4
+ watch?: true;
5
+ } | {
6
+ kind: "format";
7
+ root?: string;
8
+ check?: true;
9
+ } | {
10
+ kind: "snapshot";
11
+ root?: string;
12
+ check?: true;
13
+ } | {
14
+ kind: "init";
15
+ root?: string;
16
+ } | {
17
+ kind: "help";
18
+ root?: undefined;
19
+ } | {
20
+ kind: "error";
21
+ root?: undefined;
22
+ };
23
+ /**
24
+ * Parse command-line arguments and return a structured representation.
25
+ *
26
+ * @param args - Array of command-line arguments (typically process.argv.slice(2))
27
+ * @returns ParsedCommandLine object representing the command and its options
28
+ */
29
+ export declare function parseCommandLine(args: string[]): ParsedArgs;
30
+ export declare class CommandLineParseError extends Error {
31
+ constructor(message: string);
32
+ }
33
+ //# sourceMappingURL=command_line_parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_line_parser.d.ts","sourceRoot":"","sources":["../src/command_line_parser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,KAAK,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,CAAC;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,CAAC;AAEN;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA0C3D;AA2BD,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Parse command-line arguments and return a structured representation.
3
+ *
4
+ * @param args - Array of command-line arguments (typically process.argv.slice(2))
5
+ * @returns ParsedCommandLine object representing the command and its options
6
+ */
7
+ export function parseCommandLine(args) {
8
+ if (args.length === 0) {
9
+ printHelp();
10
+ return { kind: "help" };
11
+ }
12
+ const command = args[0];
13
+ if (command === "help" || command === "--help" || command === "-h") {
14
+ printHelp();
15
+ return { kind: "help" };
16
+ }
17
+ const validCommands = ["gen", "format", "snapshot", "init"];
18
+ if (!command || !validCommands.includes(command)) {
19
+ printError(`Unknown command: ${command}`);
20
+ printHelp();
21
+ return { kind: "error" };
22
+ }
23
+ try {
24
+ const options = parseOptions(args.slice(1));
25
+ switch (command) {
26
+ case "gen":
27
+ return buildGenCommand(options);
28
+ case "format":
29
+ return buildFormatCommand(options);
30
+ case "snapshot":
31
+ return buildSnapshotCommand(options);
32
+ case "init":
33
+ return buildInitCommand(options);
34
+ default:
35
+ throw new CommandLineParseError(`Unexpected command: ${command}`);
36
+ }
37
+ }
38
+ catch (error) {
39
+ if (error instanceof CommandLineParseError) {
40
+ printError(error.message);
41
+ return { kind: "error" };
42
+ }
43
+ throw error;
44
+ }
45
+ }
46
+ const COMMAND_BASE = "npx skir";
47
+ const HELP_TEXT = `
48
+ Usage: ${COMMAND_BASE} <command> [options]
49
+
50
+ Commands:
51
+ gen Generate code from Skir source files to target languages
52
+ format Format all .skir files in the specified directory
53
+ snapshot Verify compatibility by comparing current .skir files against the last snapshot
54
+ init Initialize a new Skir project with a minimal skir.yml file
55
+ help Display this help message
56
+
57
+ Options:
58
+ --root, -r <path> Path to the directory containing the skir.yml configuration file
59
+ --watch, -w Enable watch mode to automatically regenerate code when .skir files change (gen only)
60
+ --check, -c Check mode: fail if code is not properly formatted (format) or if there are breaking changes (snapshot)
61
+
62
+ Examples:
63
+ ${COMMAND_BASE} gen
64
+ ${COMMAND_BASE} format --root path/to/root/dir
65
+ ${COMMAND_BASE} format -r path/to/root/dir
66
+ ${COMMAND_BASE} gen -r path/to/root/dir --watch
67
+ ${COMMAND_BASE} snapshot --root path/to/root/dir
68
+ `;
69
+ export class CommandLineParseError extends Error {
70
+ constructor(message) {
71
+ super(message);
72
+ this.name = "CommandLineParseError";
73
+ }
74
+ }
75
+ function parseOptions(args) {
76
+ const options = {
77
+ unknown: [],
78
+ };
79
+ for (let i = 0; i < args.length; i++) {
80
+ const arg = args[i];
81
+ if (!arg)
82
+ continue;
83
+ if (arg === "--root" || arg === "-r") {
84
+ if (i + 1 >= args.length) {
85
+ throw new CommandLineParseError(`Option ${arg} requires a value`);
86
+ }
87
+ if (options.root !== undefined) {
88
+ throw new CommandLineParseError(`Option ${arg} specified multiple times`);
89
+ }
90
+ options.root = args[i + 1];
91
+ i++; // Skip the next argument as it's the value
92
+ }
93
+ else if (arg === "--watch" || arg === "-w") {
94
+ if (options.watch) {
95
+ throw new CommandLineParseError(`Option ${arg} specified multiple times`);
96
+ }
97
+ options.watch = true;
98
+ }
99
+ else if (arg === "--check" || arg === "-c") {
100
+ if (options.check) {
101
+ throw new CommandLineParseError(`Option ${arg} specified multiple times`);
102
+ }
103
+ options.check = true;
104
+ }
105
+ else if (arg.startsWith("-")) {
106
+ options.unknown.push(arg);
107
+ }
108
+ else {
109
+ throw new CommandLineParseError(`Unexpected argument: ${arg}`);
110
+ }
111
+ }
112
+ return options;
113
+ }
114
+ function buildGenCommand(options) {
115
+ validateNoUnknownOptions(options, "gen");
116
+ if (options.check) {
117
+ throw new CommandLineParseError("Option --check is not valid for the 'gen' command");
118
+ }
119
+ return {
120
+ kind: "gen",
121
+ root: options.root,
122
+ watch: options.watch ? true : undefined,
123
+ };
124
+ }
125
+ function buildFormatCommand(options) {
126
+ validateNoUnknownOptions(options, "format");
127
+ if (options.watch) {
128
+ throw new CommandLineParseError("Option --watch is not valid for the 'format' command");
129
+ }
130
+ return {
131
+ kind: "format",
132
+ root: options.root,
133
+ check: options.check ? true : undefined,
134
+ };
135
+ }
136
+ function buildSnapshotCommand(options) {
137
+ validateNoUnknownOptions(options, "snapshot");
138
+ if (options.watch) {
139
+ throw new CommandLineParseError("Option --watch is not valid for the 'snapshot' command");
140
+ }
141
+ return {
142
+ kind: "snapshot",
143
+ root: options.root,
144
+ check: options.check ? true : undefined,
145
+ };
146
+ }
147
+ function buildInitCommand(options) {
148
+ validateNoUnknownOptions(options, "init");
149
+ if (options.watch) {
150
+ throw new CommandLineParseError("Option --watch is not valid for the 'init' command");
151
+ }
152
+ if (options.check) {
153
+ throw new CommandLineParseError("Option --check is not valid for the 'init' command");
154
+ }
155
+ return {
156
+ kind: "init",
157
+ root: options.root,
158
+ };
159
+ }
160
+ function validateNoUnknownOptions(options, command) {
161
+ if (options.unknown.length > 0) {
162
+ throw new CommandLineParseError(`Unknown option${options.unknown.length > 1 ? "s" : ""} for '${command}': ${options.unknown.join(", ")}`);
163
+ }
164
+ }
165
+ function printHelp() {
166
+ console.log(HELP_TEXT);
167
+ }
168
+ function printError(message) {
169
+ console.error(`Error: ${message}\n`);
170
+ }
171
+ //# sourceMappingURL=command_line_parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_line_parser.js","sourceRoot":"","sources":["../src/command_line_parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=command_line_parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_line_parser.test.d.ts","sourceRoot":"","sources":["../src/command_line_parser.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,302 @@
1
+ import { expect } from "buckwheat";
2
+ import { describe, it } from "mocha";
3
+ import { parseCommandLine } from "./command_line_parser.js";
4
+ describe("command_line_parser", () => {
5
+ describe("parseCommandLine", () => {
6
+ describe("gen command", () => {
7
+ it("should parse basic gen command", () => {
8
+ const result = parseCommandLine(["gen"]);
9
+ expect(result).toMatch({ kind: "gen" });
10
+ });
11
+ it("should parse gen with --root option", () => {
12
+ const result = parseCommandLine(["gen", "--root", "path/to/dir"]);
13
+ expect(result).toMatch({
14
+ kind: "gen",
15
+ root: "path/to/dir",
16
+ });
17
+ });
18
+ it("should parse gen with -r option", () => {
19
+ const result = parseCommandLine(["gen", "-r", "path/to/dir"]);
20
+ expect(result).toMatch({
21
+ kind: "gen",
22
+ root: "path/to/dir",
23
+ });
24
+ });
25
+ it("should parse gen with --watch option", () => {
26
+ const result = parseCommandLine(["gen", "--watch"]);
27
+ expect(result).toMatch({
28
+ kind: "gen",
29
+ watch: true,
30
+ });
31
+ });
32
+ it("should parse gen with -w option", () => {
33
+ const result = parseCommandLine(["gen", "-w"]);
34
+ expect(result).toMatch({
35
+ kind: "gen",
36
+ watch: true,
37
+ });
38
+ });
39
+ it("should parse gen with both --root and --watch", () => {
40
+ const result = parseCommandLine([
41
+ "gen",
42
+ "--root",
43
+ "path/to/dir",
44
+ "--watch",
45
+ ]);
46
+ expect(result).toMatch({
47
+ kind: "gen",
48
+ root: "path/to/dir",
49
+ watch: true,
50
+ });
51
+ });
52
+ it("should parse gen with -r and -w", () => {
53
+ const result = parseCommandLine(["gen", "-r", "path/to/dir", "-w"]);
54
+ expect(result).toMatch({
55
+ kind: "gen",
56
+ root: "path/to/dir",
57
+ watch: true,
58
+ });
59
+ });
60
+ it("should return error if --check is used with gen", () => {
61
+ const result = parseCommandLine(["gen", "--check"]);
62
+ expect(result).toMatch({ kind: "error" });
63
+ });
64
+ it("should return error if unknown option is used", () => {
65
+ const result = parseCommandLine(["gen", "--unknown"]);
66
+ expect(result).toMatch({ kind: "error" });
67
+ });
68
+ it("should return error if --root is missing value", () => {
69
+ const result = parseCommandLine(["gen", "--root"]);
70
+ expect(result).toMatch({ kind: "error" });
71
+ });
72
+ it("should return error if --root is specified multiple times", () => {
73
+ const result = parseCommandLine([
74
+ "gen",
75
+ "--root",
76
+ "path1",
77
+ "--root",
78
+ "path2",
79
+ ]);
80
+ expect(result).toMatch({ kind: "error" });
81
+ });
82
+ });
83
+ describe("format command", () => {
84
+ it("should parse basic format command", () => {
85
+ const result = parseCommandLine(["format"]);
86
+ expect(result).toMatch({ kind: "format" });
87
+ });
88
+ it("should parse format with --root option", () => {
89
+ const result = parseCommandLine(["format", "--root", "path/to/dir"]);
90
+ expect(result).toMatch({
91
+ kind: "format",
92
+ root: "path/to/dir",
93
+ });
94
+ });
95
+ it("should parse format with -r option", () => {
96
+ const result = parseCommandLine(["format", "-r", "path/to/dir"]);
97
+ expect(result).toMatch({
98
+ kind: "format",
99
+ root: "path/to/dir",
100
+ });
101
+ });
102
+ it("should parse format with --check option", () => {
103
+ const result = parseCommandLine(["format", "--check"]);
104
+ expect(result).toMatch({
105
+ kind: "format",
106
+ check: true,
107
+ });
108
+ });
109
+ it("should parse format with -c option", () => {
110
+ const result = parseCommandLine(["format", "-c"]);
111
+ expect(result).toMatch({
112
+ kind: "format",
113
+ check: true,
114
+ });
115
+ });
116
+ it("should parse format with both --root and --check", () => {
117
+ const result = parseCommandLine([
118
+ "format",
119
+ "--root",
120
+ "path/to/dir",
121
+ "--check",
122
+ ]);
123
+ expect(result).toMatch({
124
+ kind: "format",
125
+ root: "path/to/dir",
126
+ check: true,
127
+ });
128
+ });
129
+ it("should parse format with -r and -c", () => {
130
+ const result = parseCommandLine(["format", "-r", "path/to/dir", "-c"]);
131
+ expect(result).toMatch({
132
+ kind: "format",
133
+ root: "path/to/dir",
134
+ check: true,
135
+ });
136
+ });
137
+ it("should return error if --watch is used with format", () => {
138
+ const result = parseCommandLine(["format", "--watch"]);
139
+ expect(result).toMatch({ kind: "error" });
140
+ });
141
+ it("should return error if unknown option is used", () => {
142
+ const result = parseCommandLine(["format", "--verbose"]);
143
+ expect(result).toMatch({ kind: "error" });
144
+ });
145
+ });
146
+ describe("snapshot command", () => {
147
+ it("should parse basic snapshot command", () => {
148
+ const result = parseCommandLine(["snapshot"]);
149
+ expect(result).toMatch({ kind: "snapshot" });
150
+ });
151
+ it("should parse snapshot with --root option", () => {
152
+ const result = parseCommandLine(["snapshot", "--root", "path/to/dir"]);
153
+ expect(result).toMatch({
154
+ kind: "snapshot",
155
+ root: "path/to/dir",
156
+ });
157
+ });
158
+ it("should parse snapshot with -r option", () => {
159
+ const result = parseCommandLine(["snapshot", "-r", "path/to/dir"]);
160
+ expect(result).toMatch({
161
+ kind: "snapshot",
162
+ root: "path/to/dir",
163
+ });
164
+ });
165
+ it("should return error if --watch is used with snapshot", () => {
166
+ const result = parseCommandLine(["snapshot", "--watch"]);
167
+ expect(result).toMatch({ kind: "error" });
168
+ });
169
+ it("should parse snapshot with --check option", () => {
170
+ const result = parseCommandLine(["snapshot", "--check"]);
171
+ expect(result).toMatch({
172
+ kind: "snapshot",
173
+ check: true,
174
+ });
175
+ });
176
+ it("should parse snapshot with -c option", () => {
177
+ const result = parseCommandLine(["snapshot", "-c"]);
178
+ expect(result).toMatch({
179
+ kind: "snapshot",
180
+ check: true,
181
+ });
182
+ });
183
+ it("should return error if unknown option is used", () => {
184
+ const result = parseCommandLine(["snapshot", "--force"]);
185
+ expect(result).toMatch({ kind: "error" });
186
+ });
187
+ });
188
+ describe("init command", () => {
189
+ it("should parse basic init command", () => {
190
+ const result = parseCommandLine(["init"]);
191
+ expect(result).toMatch({ kind: "init" });
192
+ });
193
+ it("should parse init with --root option", () => {
194
+ const result = parseCommandLine(["init", "--root", "path/to/dir"]);
195
+ expect(result).toMatch({
196
+ kind: "init",
197
+ root: "path/to/dir",
198
+ });
199
+ });
200
+ it("should parse init with -r option", () => {
201
+ const result = parseCommandLine(["init", "-r", "path/to/dir"]);
202
+ expect(result).toMatch({
203
+ kind: "init",
204
+ root: "path/to/dir",
205
+ });
206
+ });
207
+ it("should return error if --watch is used with init", () => {
208
+ const result = parseCommandLine(["init", "--watch"]);
209
+ expect(result).toMatch({ kind: "error" });
210
+ });
211
+ it("should return error if --check is used with init", () => {
212
+ const result = parseCommandLine(["init", "--check"]);
213
+ expect(result).toMatch({ kind: "error" });
214
+ });
215
+ it("should return error if unknown option is used", () => {
216
+ const result = parseCommandLine(["init", "--template"]);
217
+ expect(result).toMatch({ kind: "error" });
218
+ });
219
+ });
220
+ describe("help command", () => {
221
+ it("should return help for help command", () => {
222
+ const result = parseCommandLine(["help"]);
223
+ expect(result).toMatch({ kind: "help" });
224
+ });
225
+ it("should return help for --help flag", () => {
226
+ const result = parseCommandLine(["--help"]);
227
+ expect(result).toMatch({ kind: "help" });
228
+ });
229
+ it("should return help for -h flag", () => {
230
+ const result = parseCommandLine(["-h"]);
231
+ expect(result).toMatch({ kind: "help" });
232
+ });
233
+ });
234
+ describe("error cases", () => {
235
+ it("should return help for empty args", () => {
236
+ const result = parseCommandLine([]);
237
+ expect(result).toMatch({ kind: "help" });
238
+ });
239
+ it("should return error for unknown command", () => {
240
+ const result = parseCommandLine(["unknown"]);
241
+ expect(result).toMatch({ kind: "error" });
242
+ });
243
+ it("should return error for unexpected positional argument", () => {
244
+ const result = parseCommandLine(["gen", "extra-arg"]);
245
+ expect(result).toMatch({ kind: "error" });
246
+ });
247
+ it("should return error for option with missing value at end", () => {
248
+ const result = parseCommandLine(["format", "-r"]);
249
+ expect(result).toMatch({ kind: "error" });
250
+ });
251
+ it("should return error if --watch specified multiple times", () => {
252
+ const result = parseCommandLine(["gen", "--watch", "-w"]);
253
+ expect(result).toMatch({ kind: "error" });
254
+ });
255
+ it("should return error if --check specified multiple times", () => {
256
+ const result = parseCommandLine(["format", "--check", "-c"]);
257
+ expect(result).toMatch({ kind: "error" });
258
+ });
259
+ });
260
+ describe("option order", () => {
261
+ it("should parse options in any order for gen", () => {
262
+ const result1 = parseCommandLine(["gen", "--watch", "--root", "dir"]);
263
+ const result2 = parseCommandLine(["gen", "--root", "dir", "--watch"]);
264
+ expect(result1).toMatch({
265
+ kind: "gen",
266
+ root: "dir",
267
+ watch: true,
268
+ });
269
+ expect(result2).toMatch({
270
+ kind: "gen",
271
+ root: "dir",
272
+ watch: true,
273
+ });
274
+ });
275
+ it("should parse options in any order for format", () => {
276
+ const result1 = parseCommandLine([
277
+ "format",
278
+ "--check",
279
+ "--root",
280
+ "dir",
281
+ ]);
282
+ const result2 = parseCommandLine([
283
+ "format",
284
+ "--root",
285
+ "dir",
286
+ "--check",
287
+ ]);
288
+ expect(result1).toMatch({
289
+ kind: "format",
290
+ root: "dir",
291
+ check: true,
292
+ });
293
+ expect(result2).toMatch({
294
+ kind: "format",
295
+ root: "dir",
296
+ check: true,
297
+ });
298
+ });
299
+ });
300
+ });
301
+ });
302
+ //# sourceMappingURL=command_line_parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command_line_parser.test.js","sourceRoot":"","sources":["../src/command_line_parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import { ModuleSet } from "./module_set.js";
2
+ import type { Method, RecordLocation, ResolvedType, Token } from "./types.js";
3
+ export interface BeforeAfter<T> {
4
+ before: T;
5
+ after: T;
6
+ }
7
+ export type BreakingChange = {
8
+ kind: "illegal-type-change";
9
+ expression: BeforeAfter<Expression>;
10
+ type: BeforeAfter<ResolvedType>;
11
+ } | {
12
+ kind: "missing-slots";
13
+ record: BeforeAfter<RecordLocation>;
14
+ recordExpression: BeforeAfter<Expression>;
15
+ missingRangeStart: number;
16
+ missingRangeEnd: number;
17
+ } | {
18
+ kind: "missing-record";
19
+ record: RecordLocation;
20
+ recordNumber: number;
21
+ } | {
22
+ kind: "missing-method";
23
+ method: Method;
24
+ } | {
25
+ kind: "record-kind-change";
26
+ record: BeforeAfter<RecordLocation>;
27
+ recordExpression: BeforeAfter<Expression>;
28
+ recordType: BeforeAfter<"struct" | "enum">;
29
+ } | {
30
+ kind: "removed-number-reintroduced";
31
+ record: BeforeAfter<RecordLocation>;
32
+ recordExpression: BeforeAfter<Expression>;
33
+ removedNumber: number;
34
+ reintroducedAs: Token;
35
+ } | {
36
+ kind: "enum-variant-kind-change";
37
+ record: BeforeAfter<RecordLocation>;
38
+ enumEpression: BeforeAfter<Expression>;
39
+ variantName: BeforeAfter<Token>;
40
+ number: number;
41
+ };
42
+ export type Expression = {
43
+ kind: "request-type";
44
+ methodName: Token;
45
+ } | {
46
+ kind: "response-type";
47
+ methodName: Token;
48
+ } | {
49
+ kind: "record";
50
+ recordName: Token;
51
+ } | {
52
+ kind: "item";
53
+ arrayExpression: Expression;
54
+ } | {
55
+ kind: "optional-value";
56
+ optionalExpression: Expression;
57
+ } | {
58
+ kind: "property";
59
+ structExpression: Expression;
60
+ fieldName: Token;
61
+ } | {
62
+ kind: "as-variant";
63
+ enumExpression: Expression;
64
+ variantName: Token;
65
+ };
66
+ export declare function checkBackwardCompatibility(moduleSet: BeforeAfter<ModuleSet>): readonly BreakingChange[];
67
+ export declare function getTokenForExpression(expression: Expression): Token;
68
+ //# sourceMappingURL=compatibility_checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compatibility_checker.d.ts","sourceRoot":"","sources":["../src/compatibility_checker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAEV,MAAM,EAGN,cAAc,EACd,YAAY,EACZ,KAAK,EACN,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC;IACV,KAAK,EAAE,CAAC,CAAC;CACV;AAED,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;CACjC,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1C,UAAU,EAAE,WAAW,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;CAC5C,GACD;IACE,IAAI,EAAE,6BAA6B,CAAC;IACpC,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,gBAAgB,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAC1C,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,KAAK,CAAC;CACvB,GACD;IACE,IAAI,EAAE,0BAA0B,CAAC;IACjC,MAAM,EAAE,WAAW,CAAC,cAAc,CAAC,CAAC;IACpC,aAAa,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IACvC,WAAW,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEN,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC;CACnB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,KAAK,CAAC;CACnB,GACD;IACE,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,KAAK,CAAC;CACnB,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,UAAU,CAAC;CAC7B,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,kBAAkB,EAAE,UAAU,CAAC;CAChC,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,gBAAgB,EAAE,UAAU,CAAC;IAC7B,SAAS,EAAE,KAAK,CAAC;CAClB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,WAAW,EAAE,KAAK,CAAC;CACpB,CAAC;AAEN,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,WAAW,CAAC,SAAS,CAAC,GAChC,SAAS,cAAc,EAAE,CAE3B;AAmSD,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,KAAK,CAwBnE"}