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,248 @@
1
+ import * as yaml from "yaml";
2
+ import { fromZodError } from "zod-validation-error";
3
+ import { SkirConfig } from "./config.js";
4
+ import { ModuleSet } from "./module_set.js";
5
+ import { parseModule } from "./parser.js";
6
+ import { tokenizeModule } from "./tokenizer.js";
7
+ export class LanguageServerModuleSet {
8
+ constructor(rootPath) {
9
+ this.rootPath = rootPath;
10
+ this.moduleBundles = new Map(); // key: file URI
11
+ this.workspaces = new Map(); // key: file URI
12
+ }
13
+ setFileContent(uri, content) {
14
+ this.deleteFile(uri);
15
+ const fileType = getFileType(uri);
16
+ switch (fileType) {
17
+ case "skir.yml": {
18
+ const workspace = this.parseSkirConfig(content, uri);
19
+ if (workspace) {
20
+ this.workspaces.set(uri, workspace);
21
+ this.reassignModulesToWorkspaces();
22
+ }
23
+ break;
24
+ }
25
+ case "*.skir": {
26
+ const moduleWorkspace = this.findModuleWorkspace(uri);
27
+ const moduleBundle = this.parseSkirModule(content, uri);
28
+ this.moduleBundles.set(uri, moduleBundle);
29
+ if (moduleWorkspace) {
30
+ Workspace.addModule(moduleBundle, moduleWorkspace);
31
+ }
32
+ break;
33
+ }
34
+ default: {
35
+ const _ = fileType;
36
+ }
37
+ }
38
+ }
39
+ deleteFile(uri) {
40
+ const fileType = getFileType(uri);
41
+ switch (fileType) {
42
+ case "skir.yml": {
43
+ if (this.workspaces.delete(uri)) {
44
+ this.reassignModulesToWorkspaces();
45
+ }
46
+ break;
47
+ }
48
+ case "*.skir": {
49
+ const moduleBundle = this.moduleBundles.get(uri);
50
+ if (moduleBundle) {
51
+ Workspace.removeModule(moduleBundle);
52
+ this.moduleBundles.delete(uri);
53
+ }
54
+ break;
55
+ }
56
+ default: {
57
+ const _ = fileType;
58
+ }
59
+ }
60
+ }
61
+ reassignModulesToWorkspaces() {
62
+ if (this.reassigneModulesTimeout) {
63
+ // Already scheduled, do nothing.
64
+ return;
65
+ }
66
+ this.reassigneModulesTimeout = setTimeout(() => {
67
+ for (const [moduleUri, moduleBundle] of this.moduleBundles.entries()) {
68
+ Workspace.removeModule(moduleBundle);
69
+ const newWorkspace = this.findModuleWorkspace(moduleUri);
70
+ if (newWorkspace) {
71
+ Workspace.addModule(moduleBundle, newWorkspace);
72
+ }
73
+ }
74
+ for (const workspace of this.workspaces.values()) {
75
+ workspace.scheduleResolution();
76
+ }
77
+ this.reassigneModulesTimeout = undefined;
78
+ });
79
+ }
80
+ parseSkirConfig(content, uri) {
81
+ let skirConfig;
82
+ {
83
+ // `yaml.parse` fail with a helpful error message, no need to add context.
84
+ const parseResult = SkirConfig.safeParse(yaml.parse(content));
85
+ if (parseResult.success) {
86
+ skirConfig = parseResult.data;
87
+ }
88
+ else {
89
+ const validationError = fromZodError(parseResult.error);
90
+ console.error(`Error parsing skir.yml at ${uri}:`, validationError.message);
91
+ return null;
92
+ }
93
+ }
94
+ let rootUri = new URL(skirConfig.srcDir || ".", uri).href;
95
+ if (!rootUri.endsWith("/")) {
96
+ rootUri += "/";
97
+ }
98
+ return new Workspace(rootUri);
99
+ }
100
+ parseSkirModule(content, uri) {
101
+ let astTree;
102
+ {
103
+ const tokens = tokenizeModule(content, uri);
104
+ if (tokens.errors.length !== 0) {
105
+ astTree = {
106
+ result: null,
107
+ errors: tokens.errors,
108
+ };
109
+ }
110
+ else {
111
+ astTree = parseModule(tokens.result, uri, content);
112
+ }
113
+ }
114
+ return {
115
+ astTree,
116
+ errors: [],
117
+ };
118
+ }
119
+ /** Finds the workspace which contains the given module URI. */
120
+ findModuleWorkspace(moduleUri) {
121
+ let match;
122
+ const leftIsBetter = (left, right) => {
123
+ if (right === undefined || left.rootUri.length < right.rootUri.length) {
124
+ return true;
125
+ }
126
+ if (left.rootUri.length === right.rootUri.length) {
127
+ // Completely arbitrary, just to have a consistent order.
128
+ return left.rootUri < right.rootUri;
129
+ }
130
+ return false;
131
+ };
132
+ for (const workspace of this.workspaces.values()) {
133
+ const { rootUri } = workspace;
134
+ if (moduleUri.startsWith(rootUri) && leftIsBetter(workspace, match)) {
135
+ match = workspace;
136
+ }
137
+ }
138
+ if (!match) {
139
+ return undefined;
140
+ }
141
+ return {
142
+ workspace: match,
143
+ modulePath: moduleUri.substring(match.rootUri.length),
144
+ };
145
+ }
146
+ }
147
+ function errorToDiagnostic(error) {
148
+ const { token, message, expected } = error;
149
+ return {
150
+ range: {
151
+ start: token.position,
152
+ end: token.position + token.text.length,
153
+ },
154
+ message: message ? message : `expected: ${expected}`,
155
+ };
156
+ }
157
+ function getFileType(uri) {
158
+ if (uri.endsWith("/skir.yml")) {
159
+ return "skir.yml";
160
+ }
161
+ else if (uri.endsWith(".skir")) {
162
+ return "*.skir";
163
+ }
164
+ return null;
165
+ }
166
+ class Workspace {
167
+ constructor(rootUri) {
168
+ this.rootUri = rootUri;
169
+ this.mutableRecordMap = new Map();
170
+ // key: module path
171
+ this.modules = new Map();
172
+ }
173
+ static addModule(moduleBundle, moduleWorkspace) {
174
+ // If the module was already in a workspace, remove it from the old workspace.
175
+ Workspace.removeModule(moduleBundle);
176
+ const { workspace } = moduleWorkspace;
177
+ moduleBundle.moduleWorkspace = moduleWorkspace;
178
+ workspace.modules.set(moduleWorkspace.modulePath, moduleBundle);
179
+ for (const record of moduleBundle.astTree.result?.records || []) {
180
+ workspace.mutableRecordMap.set(record.record.key, record);
181
+ }
182
+ workspace.scheduleResolution();
183
+ }
184
+ static removeModule(moduleBundle) {
185
+ const { moduleWorkspace } = moduleBundle;
186
+ if (!moduleWorkspace) {
187
+ return;
188
+ }
189
+ const { workspace } = moduleWorkspace;
190
+ workspace.modules.delete(moduleWorkspace.modulePath);
191
+ for (const record of moduleBundle.astTree.result?.records || []) {
192
+ workspace.mutableRecordMap.delete(record.record.key);
193
+ }
194
+ moduleBundle.moduleWorkspace = undefined;
195
+ workspace.scheduleResolution();
196
+ }
197
+ parseModule(modulePath) {
198
+ const moduleBundle = this.modules.get(modulePath);
199
+ if (!moduleBundle) {
200
+ return {
201
+ result: null,
202
+ errors: [],
203
+ };
204
+ }
205
+ return moduleBundle.astTree;
206
+ }
207
+ scheduleResolution() {
208
+ if (this.scheduledResolution) {
209
+ clearTimeout(this.scheduledResolution.timeout);
210
+ }
211
+ const delayMilliseconds = 500;
212
+ const timeout = setTimeout(() => {
213
+ this.scheduledResolution = undefined;
214
+ this.resolve();
215
+ }, delayMilliseconds);
216
+ const scheduledResolution = {
217
+ timeout,
218
+ promise: new Promise((resolve) => {
219
+ scheduledResolution.callback = resolve;
220
+ }),
221
+ callback: (() => {
222
+ throw new Error("callback not set");
223
+ }),
224
+ };
225
+ this.scheduledResolution = scheduledResolution;
226
+ }
227
+ get resolutionDone() {
228
+ if (this.scheduledResolution) {
229
+ return this.scheduledResolution.promise;
230
+ }
231
+ return Promise.resolve();
232
+ }
233
+ /**
234
+ * Synchronously performs type resolution (and validation).
235
+ * Stores the errors in every module bundle.
236
+ */
237
+ resolve() {
238
+ const moduleSet = new ModuleSet(this);
239
+ for (const [modulePath, moduleBundle] of this.modules.entries()) {
240
+ const parseResult = moduleSet.parseAndResolve(modulePath);
241
+ moduleBundle.errors = parseResult.errors.map(errorToDiagnostic);
242
+ }
243
+ if (this.scheduledResolution) {
244
+ this.scheduledResolution.callback();
245
+ }
246
+ }
247
+ }
248
+ //# sourceMappingURL=language_server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"language_server.js","sourceRoot":"","sources":["../src/language_server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAgB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAUhD,MAAM,OAAO,uBAAuB;IAClC,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;QAmJ5B,kBAAa,GAAG,IAAI,GAAG,EAAwB,CAAC,CAAC,gBAAgB;QACjE,eAAU,GAAG,IAAI,GAAG,EAAqB,CAAC,CAAC,gBAAgB;IApJ5B,CAAC;IAEjD,cAAc,CAAC,GAAW,EAAE,OAAe;QACzC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACrB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACrD,IAAI,SAAS,EAAE,CAAC;oBACd,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBACpC,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACrC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,eAAe,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;gBACxD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;gBAC1C,IAAI,eAAe,EAAE,CAAC;oBACpB,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;gBACrD,CAAC;gBACD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,CAAC,GAAS,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACrC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACjD,IAAI,YAAY,EAAE,CAAC;oBACjB,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;oBACrC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,CAAC,GAAS,QAAQ,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,2BAA2B;QACjC,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACjC,iCAAiC;YACjC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7C,KAAK,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;gBACrE,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;gBACrC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;gBACzD,IAAI,YAAY,EAAE,CAAC;oBACjB,SAAS,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAClD,CAAC;YACH,CAAC;YACD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,SAAS,CAAC,kBAAkB,EAAE,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,GAAW;QAClD,IAAI,UAAsB,CAAC;QAC3B,CAAC;YACC,0EAA0E;YAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9D,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACxD,OAAO,CAAC,KAAK,CACX,6BAA6B,GAAG,GAAG,EACnC,eAAe,CAAC,OAAO,CACxB,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC;QAC1D,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,GAAG,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,GAAW;QAClD,IAAI,OAA8B,CAAC;QACnC,CAAC;YACC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,GAAG;oBACR,MAAM,EAAE,IAAI;oBACZ,MAAM,EAAE,MAAM,CAAC,MAAM;iBACtB,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QACD,OAAO;YACL,OAAO;YACP,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,+DAA+D;IACvD,mBAAmB,CAAC,SAAiB;QAC3C,IAAI,KAA4B,CAAC;QACjC,MAAM,YAAY,GAAG,CACnB,IAAe,EACf,KAA4B,EACnB,EAAE;YACX,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjD,yDAAyD;gBACzD,OAAO,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACtC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QACF,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;YAC9B,IAAI,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC;gBACpE,KAAK,GAAG,SAAS,CAAC;YACpB,CAAC;QACH,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;SACtD,CAAC;IACJ,CAAC;CAKF;AAED,SAAS,iBAAiB,CAAC,KAAgB;IACzC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAC3C,OAAO;QACL,KAAK,EAAE;YACL,KAAK,EAAE,KAAK,CAAC,QAAQ;YACrB,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;SACxC;QACD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,QAAQ,EAAE;KACrD,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;SAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAqBD,MAAM,SAAS;IACb,YAAqB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAEnB,qBAAgB,GAAG,IAAI,GAAG,EAA6B,CAAC;QACzE,mBAAmB;QACF,YAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IAJpB,CAAC;IAWxC,MAAM,CAAC,SAAS,CACd,YAA0B,EAC1B,eAAgC;QAEhC,8EAA8E;QAC9E,SAAS,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC;QACtC,YAAY,CAAC,eAAe,GAAG,eAAe,CAAC;QAC/C,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAChE,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YAChE,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;QACD,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,YAA0B;QAC5C,MAAM,EAAE,eAAe,EAAE,GAAG,YAAY,CAAC;QACzC,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC;QACtC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACrD,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;YAChE,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;QACD,YAAY,CAAC,eAAe,GAAG,SAAS,CAAC;QACzC,SAAS,CAAC,kBAAkB,EAAE,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,UAAkB;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO;gBACL,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,EAAE;aACX,CAAC;QACJ,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,CAAC;IAC9B,CAAC;IAED,kBAAkB;QAChB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACjD,CAAC;QACD,MAAM,iBAAiB,GAAG,GAAG,CAAC;QAC9B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;YACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACtB,MAAM,mBAAmB,GAAG;YAC1B,OAAO;YACP,OAAO,EAAE,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBACrC,mBAAmB,CAAC,QAAQ,GAAG,OAAO,CAAC;YACzC,CAAC,CAAC;YACF,QAAQ,EAAE,CAAC,GAAG,EAAE;gBACd,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACtC,CAAC,CAAe;SACjB,CAAC;QACF,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;IAED,IAAI,cAAc;QAChB,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAC1C,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACK,OAAO;QACb,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAChE,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC1D,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC;QACtC,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,13 @@
1
+ import type { DenseJson, Primitive } from "./types.js";
2
+ export declare function unquoteAndUnescape(stringLiteral: string): string;
3
+ export declare function valueHasPrimitiveType(token: string, expectedType: Primitive): boolean;
4
+ export declare function isStringLiteral(token: string): boolean;
5
+ export declare function literalValueToDenseJson(token: string, type: Primitive): DenseJson;
6
+ /**
7
+ * Assuming `token` is a literal value of primitive type, returns a string which
8
+ * uniquely identifies the value within the primitive type. The behavior is
9
+ * undefined if `token` does not match `type`.
10
+ * Use this function to check if two literal values are actually equal.
11
+ */
12
+ export declare function literalValueToIdentity(token: string, type: Primitive): string;
13
+ //# sourceMappingURL=literals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.d.ts","sourceRoot":"","sources":["../src/literals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAWhE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,SAAS,GACtB,OAAO,CAiDT;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAUD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,SAAS,GACd,SAAS,CAwBX;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAG7E"}
@@ -0,0 +1,100 @@
1
+ export function unquoteAndUnescape(stringLiteral) {
2
+ const unquoted = stringLiteral.slice(1, -1);
3
+ const parts = unquoted.split("\\\\");
4
+ for (let i = 0; i < parts.length; ++i) {
5
+ const part = parts[i].replace(/\\(\r\n|\n|\r)/g, "\\n")
6
+ // Escape unescaped double quotes which can appear in a single-quoted
7
+ // string literal.
8
+ .replace(/(?<=^|[^\\])"/g, '\\"');
9
+ parts[i] = JSON.parse(`"${part}"`);
10
+ }
11
+ return parts.join("\\");
12
+ }
13
+ export function valueHasPrimitiveType(token, expectedType) {
14
+ switch (expectedType) {
15
+ case "bool":
16
+ return token === "false" || token === "true";
17
+ case "bytes":
18
+ return (isStringLiteral(token) &&
19
+ /^hex:([0-9A-Fa-f]{2})*$/.test(unquoteAndUnescape(token)));
20
+ case "timestamp": {
21
+ if (!isStringLiteral(token)) {
22
+ return false;
23
+ }
24
+ const dateTime = unquoteAndUnescape(token);
25
+ const timestamp = Date.parse(dateTime).valueOf();
26
+ return (
27
+ // A timezone is required.
28
+ /(Z|[+-]\d\d:\d\d)$/.test(dateTime) &&
29
+ -8640000000000000 <= timestamp &&
30
+ timestamp <= 8640000000000000 &&
31
+ timestamp === Math.round(timestamp));
32
+ }
33
+ case "int32":
34
+ return isIntLiteral(token, BigInt(-2147483648), BigInt(2147483647));
35
+ case "int64":
36
+ return isIntLiteral(token, BigInt("-9223372036854775808"), BigInt("9223372036854775807"));
37
+ case "uint64":
38
+ return isIntLiteral(token, BigInt(0), BigInt("18446744073709551615"));
39
+ case "float32":
40
+ case "float64": {
41
+ if (isStringLiteral(token)) {
42
+ const stringLiteral = unquoteAndUnescape(token);
43
+ return (stringLiteral === "NaN" ||
44
+ stringLiteral === "Infinity" ||
45
+ stringLiteral === "-Infinity");
46
+ }
47
+ else {
48
+ return /^[-0-9]/.test(token);
49
+ }
50
+ }
51
+ case "string":
52
+ return isStringLiteral(token);
53
+ }
54
+ }
55
+ export function isStringLiteral(token) {
56
+ return /^['"]/.test(token);
57
+ }
58
+ function isIntLiteral(token, min, max) {
59
+ if (!/^-?[0-9]+$/.test(token)) {
60
+ return false;
61
+ }
62
+ const value = BigInt(token);
63
+ return min <= value && value <= max;
64
+ }
65
+ export function literalValueToDenseJson(token, type) {
66
+ switch (type) {
67
+ case "bool":
68
+ return token === "true" ? 1 : 0;
69
+ case "bytes": {
70
+ const string = unquoteAndUnescape(token);
71
+ const buffer = Buffer.from(string.substring(4), "hex");
72
+ return buffer.toString("base64");
73
+ }
74
+ case "timestamp": {
75
+ const dateTime = unquoteAndUnescape(token);
76
+ return Math.round(new Date(dateTime).valueOf());
77
+ }
78
+ case "int32":
79
+ case "float32":
80
+ case "float64": {
81
+ return isStringLiteral(token) ? unquoteAndUnescape(token) : Number(token);
82
+ }
83
+ case "int64":
84
+ case "uint64":
85
+ return String(BigInt(token));
86
+ case "string":
87
+ return unquoteAndUnescape(token);
88
+ }
89
+ }
90
+ /**
91
+ * Assuming `token` is a literal value of primitive type, returns a string which
92
+ * uniquely identifies the value within the primitive type. The behavior is
93
+ * undefined if `token` does not match `type`.
94
+ * Use this function to check if two literal values are actually equal.
95
+ */
96
+ export function literalValueToIdentity(token, type) {
97
+ const denseJson = literalValueToDenseJson(token, type);
98
+ return typeof denseJson === "string" ? denseJson : JSON.stringify(denseJson);
99
+ }
100
+ //# sourceMappingURL=literals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.js","sourceRoot":"","sources":["../src/literals.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,KAAK,CAAC;YACtD,qEAAqE;YACrE,kBAAkB;aACjB,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACpC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,YAAuB;IAEvB,QAAQ,YAAY,EAAE,CAAC;QACrB,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;QAC/C,KAAK,OAAO;YACV,OAAO,CACL,eAAe,CAAC,KAAK,CAAC;gBACtB,yBAAyB,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAC1D,CAAC;QACJ,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC;YACjD,OAAO;YACL,0BAA0B;YAC1B,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;gBACnC,CAAC,gBAAgB,IAAI,SAAS;gBAC9B,SAAS,IAAI,gBAAgB;gBAC7B,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CACpC,CAAC;QACJ,CAAC;QACD,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;QACtE,KAAK,OAAO;YACV,OAAO,YAAY,CACjB,KAAK,EACL,MAAM,CAAC,sBAAsB,CAAC,EAC9B,MAAM,CAAC,qBAAqB,CAAC,CAC9B,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC;QACxE,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3B,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;gBAChD,OAAO,CACL,aAAa,KAAK,KAAK;oBACvB,aAAa,KAAK,UAAU;oBAC5B,aAAa,KAAK,WAAW,CAC9B,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IAC3D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAa,EACb,IAAe;IAEf,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,MAAM;YACT,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,CAAC;QACD,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,KAAK,QAAQ;YACX,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAa,EAAE,IAAe;IACnE,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACvD,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=literals.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.test.d.ts","sourceRoot":"","sources":["../src/literals.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,149 @@
1
+ import { expect } from "buckwheat";
2
+ import { describe, it } from "mocha";
3
+ import { isStringLiteral, literalValueToDenseJson, literalValueToIdentity, unquoteAndUnescape, valueHasPrimitiveType, } from "./literals.js";
4
+ describe("literals", () => {
5
+ it("#unquoteAndUnescape() works", () => {
6
+ expect(unquoteAndUnescape('"foo\\\r\n\\\n\\\r\\tbar\\\\t"')).toBe(["foo", "", "", "\tbar\\t"].join("\n"));
7
+ });
8
+ it("#isStringLiteral() works", () => {
9
+ expect(isStringLiteral('"foo"')).toBe(true);
10
+ expect(isStringLiteral('""')).toBe(true);
11
+ expect(isStringLiteral("3")).toBe(false);
12
+ });
13
+ describe("#valueHasPrimitiveType()", () => {
14
+ it("works with bool", () => {
15
+ expect(valueHasPrimitiveType("true", "bool")).toBe(true);
16
+ expect(valueHasPrimitiveType("false", "bool")).toBe(true);
17
+ expect(valueHasPrimitiveType("'true'", "bool")).toBe(false);
18
+ });
19
+ it("works with bytes", () => {
20
+ expect(valueHasPrimitiveType("'hex:09afAF'", "bytes")).toBe(true);
21
+ expect(valueHasPrimitiveType('"hex:09afAF"', "bytes")).toBe(true);
22
+ expect(valueHasPrimitiveType("'hex:09afAFa'", "bytes")).toBe(false);
23
+ expect(valueHasPrimitiveType("'hex:09afAG'", "bytes")).toBe(false);
24
+ });
25
+ it("works with timestamp", () => {
26
+ expect(valueHasPrimitiveType("'2023-12-25Z'", "timestamp")).toBe(true);
27
+ expect(valueHasPrimitiveType('"2023-12-25T12:00:00.000+08:30"', "timestamp")).toBe(true);
28
+ // No timezone
29
+ expect(valueHasPrimitiveType('"2023-12-25"', "timestamp")).toBe(false);
30
+ expect(valueHasPrimitiveType('"now"', "timestamp")).toBe(false);
31
+ // Out of bounds
32
+ expect(valueHasPrimitiveType('"-10000-12-25T12:00Z"', "timestamp")).toBe(false);
33
+ expect(valueHasPrimitiveType('"10000-12-25T12:00Z"', "timestamp")).toBe(false);
34
+ });
35
+ it("works with int32", () => {
36
+ expect(valueHasPrimitiveType("-2147483648", "int32")).toBe(true);
37
+ expect(valueHasPrimitiveType("2147483647", "int32")).toBe(true);
38
+ expect(valueHasPrimitiveType("-2147483649", "int32")).toBe(false);
39
+ expect(valueHasPrimitiveType("2147483648", "int32")).toBe(false);
40
+ expect(valueHasPrimitiveType("Infinity", "int32")).toBe(false);
41
+ expect(valueHasPrimitiveType("3.14", "int32")).toBe(false);
42
+ });
43
+ it("works with int64", () => {
44
+ expect(valueHasPrimitiveType("-9223372036854775808", "int64")).toBe(true);
45
+ expect(valueHasPrimitiveType("9223372036854775807", "int64")).toBe(true);
46
+ expect(valueHasPrimitiveType("-9223372036854775809", "int64")).toBe(false);
47
+ expect(valueHasPrimitiveType("9223372036854775808", "int64")).toBe(false);
48
+ expect(valueHasPrimitiveType("3.14", "int64")).toBe(false);
49
+ });
50
+ it("works with uint64", () => {
51
+ expect(valueHasPrimitiveType("0", "uint64")).toBe(true);
52
+ expect(valueHasPrimitiveType("18446744073709551615", "uint64")).toBe(true);
53
+ expect(valueHasPrimitiveType("18446744073709551616", "uint64")).toBe(false);
54
+ expect(valueHasPrimitiveType("3.14", "uint64")).toBe(false);
55
+ });
56
+ it("works with float32", () => {
57
+ expect(valueHasPrimitiveType("0", "float32")).toBe(true);
58
+ expect(valueHasPrimitiveType("-10", "float32")).toBe(true);
59
+ expect(valueHasPrimitiveType("3.14", "float32")).toBe(true);
60
+ expect(valueHasPrimitiveType("-3.14", "float32")).toBe(true);
61
+ expect(valueHasPrimitiveType("'-3.14'", "float32")).toBe(false);
62
+ expect(valueHasPrimitiveType("'-Infinity'", "float32")).toBe(true);
63
+ expect(valueHasPrimitiveType("'Infinity'", "float32")).toBe(true);
64
+ expect(valueHasPrimitiveType("'NaN'", "float32")).toBe(true);
65
+ });
66
+ it("works with float64", () => {
67
+ expect(valueHasPrimitiveType("0", "float64")).toBe(true);
68
+ expect(valueHasPrimitiveType("-10", "float64")).toBe(true);
69
+ expect(valueHasPrimitiveType("3.14", "float64")).toBe(true);
70
+ expect(valueHasPrimitiveType("-3.14", "float64")).toBe(true);
71
+ expect(valueHasPrimitiveType("'-3.14'", "float64")).toBe(false);
72
+ expect(valueHasPrimitiveType("'-Infinity'", "float64")).toBe(true);
73
+ expect(valueHasPrimitiveType("'Infinity'", "float64")).toBe(true);
74
+ expect(valueHasPrimitiveType("'NaN'", "float64")).toBe(true);
75
+ });
76
+ it("works with string", () => {
77
+ expect(valueHasPrimitiveType("''", "string")).toBe(true);
78
+ expect(valueHasPrimitiveType('""', "string")).toBe(true);
79
+ expect(valueHasPrimitiveType("'foo'", "string")).toBe(true);
80
+ expect(valueHasPrimitiveType('"foo"', "string")).toBe(true);
81
+ expect(valueHasPrimitiveType("3", "string")).toBe(false);
82
+ });
83
+ });
84
+ describe("#literalValueToIdentity()", () => {
85
+ it("works with bool", () => {
86
+ expect(literalValueToIdentity("true", "bool")).toBe("1");
87
+ expect(literalValueToIdentity("false", "bool")).toBe("0");
88
+ });
89
+ it("works with bytes", () => {
90
+ expect(literalValueToIdentity("'hex:09afAF'", "bytes")).toBe("Ca+v");
91
+ });
92
+ it("works with timestamp", () => {
93
+ expect(literalValueToIdentity("'2023-12-25Z'", "timestamp")).toBe("1703462400000");
94
+ });
95
+ it("works with int32", () => {
96
+ expect(literalValueToIdentity("-02147483648", "int32")).toBe("-2147483648");
97
+ });
98
+ it("works with int64", () => {
99
+ expect(literalValueToIdentity("-09223372036854775808", "int64")).toBe("-9223372036854775808");
100
+ });
101
+ it("works with uint64", () => {
102
+ expect(literalValueToIdentity("18446744073709551615", "uint64")).toBe("18446744073709551615");
103
+ });
104
+ it("works with float32", () => {
105
+ expect(literalValueToIdentity("3.140", "float32")).toBe("3.14");
106
+ });
107
+ it("works with float64", () => {
108
+ expect(literalValueToIdentity("3.140", "float64")).toBe("3.14");
109
+ });
110
+ it("works with string", () => {
111
+ expect(literalValueToIdentity("'foo'", "string")).toBe("foo");
112
+ });
113
+ });
114
+ describe("#literalValueToDenseJson()", () => {
115
+ it("works with bool", () => {
116
+ expect(literalValueToDenseJson("true", "bool")).toBe(1);
117
+ expect(literalValueToDenseJson("false", "bool")).toBe(0);
118
+ });
119
+ it("works with bytes", () => {
120
+ expect(literalValueToDenseJson("'hex:09afAF'", "bytes")).toBe("Ca+v");
121
+ });
122
+ it("works with timestamp", () => {
123
+ expect(literalValueToDenseJson("'2023-12-25Z'", "timestamp")).toBe(1703462400000);
124
+ });
125
+ it("works with int32", () => {
126
+ expect(literalValueToDenseJson("-02147483648", "int32")).toBe(-2147483648);
127
+ });
128
+ it("works with int64", () => {
129
+ expect(literalValueToDenseJson("-09223372036854775808", "int64")).toBe("-9223372036854775808");
130
+ });
131
+ it("works with uint64", () => {
132
+ expect(literalValueToDenseJson("18446744073709551615", "uint64")).toBe("18446744073709551615");
133
+ });
134
+ it("works with float32", () => {
135
+ expect(literalValueToDenseJson("3.140", "float32")).toBe(3.14);
136
+ expect(literalValueToDenseJson("'Infinity'", "float32")).toBe("Infinity");
137
+ expect(literalValueToDenseJson("'NaN'", "float32")).toBe("NaN");
138
+ });
139
+ it("works with float64", () => {
140
+ expect(literalValueToDenseJson("3.140", "float64")).toBe(3.14);
141
+ expect(literalValueToDenseJson("'-Infinity'", "float64")).toBe("-Infinity");
142
+ expect(literalValueToDenseJson("'NaN'", "float64")).toBe("NaN");
143
+ });
144
+ it("works with string", () => {
145
+ expect(literalValueToDenseJson("'foo'", "string")).toBe("foo");
146
+ });
147
+ });
148
+ });
149
+ //# sourceMappingURL=literals.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"literals.test.js","sourceRoot":"","sources":["../src/literals.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ModuleSet } from "./module_set.js";
2
+ export declare function collectModules(srcDir: string): Promise<ModuleSet>;
3
+ //# sourceMappingURL=module_collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module_collector.d.ts","sourceRoot":"","sources":["../src/module_collector.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAgBvE"}
@@ -0,0 +1,22 @@
1
+ import { glob } from "glob";
2
+ import * as paths from "path";
3
+ import { REAL_FILE_SYSTEM } from "./io.js";
4
+ import { ModuleSet } from "./module_set.js";
5
+ export async function collectModules(srcDir) {
6
+ const modules = ModuleSet.create(REAL_FILE_SYSTEM, srcDir);
7
+ const skirFiles = await glob(paths.join(srcDir, "**/*.skir"), {
8
+ stat: true,
9
+ withFileTypes: true,
10
+ });
11
+ for await (const skirFile of skirFiles) {
12
+ if (!skirFile.isFile) {
13
+ continue;
14
+ }
15
+ const relativePath = paths
16
+ .relative(srcDir, skirFile.fullpath())
17
+ .replace(/\\/g, "/");
18
+ modules.parseAndResolve(relativePath);
19
+ }
20
+ return modules;
21
+ }
22
+ //# sourceMappingURL=module_collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module_collector.js","sourceRoot":"","sources":["../src/module_collector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc;IACjD,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;QAC5D,IAAI,EAAE,IAAI;QACV,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YACrB,SAAS;QACX,CAAC;QACD,MAAM,YAAY,GAAG,KAAK;aACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;aACrC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACvB,OAAO,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,44 @@
1
+ import { FileReader } from "./io.js";
2
+ import type { Method, Module, MutableModule, RecordKey, RecordLocation, Result, SkirError } from "./types.js";
3
+ export declare class ModuleSet {
4
+ private readonly moduleParser;
5
+ static create(fileReader: FileReader, rootPath: string): ModuleSet;
6
+ static fromMap(map: ReadonlyMap<string, string>): ModuleSet;
7
+ constructor(moduleParser: ModuleParser);
8
+ parseAndResolve(modulePath: string, inProgressSet?: Set<string>): Result<Module | null>;
9
+ /** Called by `parseAndResolve` when the module is not in the map already. */
10
+ private doParseAndResolve;
11
+ private storeResolvedFieldTypes;
12
+ private storeFieldRecursivity;
13
+ private collectTypeDeps;
14
+ /**
15
+ * If the record has explicit numbering, register an error if any field has a
16
+ * direct dependency on a record with implicit numbering.
17
+ */
18
+ private verifyNumberingConstraint;
19
+ private referencesImplicitlyNumberedRecord;
20
+ /**
21
+ * Verifies that the `key` field of every array type found in `topLevelType`
22
+ * is valid. Populates the `keyType` field of every field path.
23
+ */
24
+ private validateArrayKeys;
25
+ private valueToDenseJson;
26
+ private structValueToDenseJson;
27
+ private enumValueToDenseJson;
28
+ private getDefaultJson;
29
+ private readonly modules;
30
+ private readonly mutableRecordMap;
31
+ private readonly mutableResolvedModules;
32
+ private readonly numberToRecord;
33
+ private readonly numberToMethod;
34
+ private readonly mutableErrors;
35
+ get recordMap(): ReadonlyMap<RecordKey, RecordLocation>;
36
+ get resolvedModules(): ReadonlyArray<Module>;
37
+ findRecordByNumber(recordNumber: number): RecordLocation | undefined;
38
+ findMethodByNumber(methodNumber: number): Method | undefined;
39
+ get errors(): readonly SkirError[];
40
+ }
41
+ export interface ModuleParser {
42
+ parseModule(modulePath: string): Result<MutableModule | null>;
43
+ }
44
+ //# sourceMappingURL=module_set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module_set.d.ts","sourceRoot":"","sources":["../src/module_set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAUrC,OAAO,KAAK,EAMV,MAAM,EACN,MAAM,EAEN,aAAa,EAMb,SAAS,EACT,cAAc,EAGd,MAAM,EACN,SAAS,EAKV,MAAM,YAAY,CAAC;AAEpB,qBAAa,SAAS;IASR,OAAO,CAAC,QAAQ,CAAC,YAAY;IARzC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAIlE,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS;gBAI9B,YAAY,EAAE,YAAY;IAEvD,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;IAcxB,6EAA6E;IAC7E,OAAO,CAAC,iBAAiB;IAmPzB,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,eAAe;IAkCvB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAmBjC,OAAO,CAAC,kCAAkC;IAiB1C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwFzB,OAAO,CAAC,gBAAgB;IAyExB,OAAO,CAAC,sBAAsB;IA0E9B,OAAO,CAAC,oBAAoB;IAgH5B,OAAO,CAAC,cAAc;IAqCtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4C;IACpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAwC;IACzE,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA6B;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IAEjD,IAAI,SAAS,IAAI,WAAW,CAAC,SAAS,EAAE,cAAc,CAAC,CAEtD;IAED,IAAI,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,CAE3C;IAED,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQpE,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5D,IAAI,MAAM,IAAI,SAAS,SAAS,EAAE,CAEjC;CACF;AAsQD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;CAC/D"}