vscode-apollo 2.5.5 → 2.6.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 (183) hide show
  1. package/.circleci/config.yml +17 -0
  2. package/.github/workflows/E2E.yml +25 -5
  3. package/.github/workflows/build-prs.yml +2 -1
  4. package/.prettierignore +3 -0
  5. package/.semgrepignore +2 -0
  6. package/.vscode/settings.json +7 -2
  7. package/CHANGELOG.md +14 -0
  8. package/apollo.connectors.mapping.configuration.json +10 -0
  9. package/package.json +39 -5
  10. package/sampleWorkspace/connectors-community/.github/ISSUE_TEMPLATE/connector-bug-report.md +36 -0
  11. package/sampleWorkspace/connectors-community/.github/ISSUE_TEMPLATE/new-connector.md +10 -0
  12. package/sampleWorkspace/connectors-community/.github/renovate.json5 +3 -0
  13. package/sampleWorkspace/connectors-community/.vscode/extensions.json +3 -0
  14. package/sampleWorkspace/connectors-community/.vscode/settings.json +13 -0
  15. package/sampleWorkspace/connectors-community/.vscode/tasks.json +10 -0
  16. package/sampleWorkspace/connectors-community/README.md +108 -0
  17. package/sampleWorkspace/connectors-community/apollo.config.json +5 -0
  18. package/sampleWorkspace/connectors-community/connectors/.template/Dockerfile +5 -0
  19. package/sampleWorkspace/connectors-community/connectors/.template/README +46 -0
  20. package/sampleWorkspace/connectors-community/connectors/.template/connector.graphql +31 -0
  21. package/sampleWorkspace/connectors-community/connectors/.template/router.yaml +18 -0
  22. package/sampleWorkspace/connectors-community/connectors/.template/supergraph.yaml +6 -0
  23. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/README +12 -0
  24. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/albums.graphql +48 -0
  25. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/comments.graphql +54 -0
  26. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/photos.graphql +54 -0
  27. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/posts.graphql +51 -0
  28. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/supergraph.yaml +26 -0
  29. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/todos.graphql +51 -0
  30. package/sampleWorkspace/connectors-community/connectors/JSONPlaceholder/users.graphql +80 -0
  31. package/sampleWorkspace/connectors-community/connectors/TM-Forum/README.md +9 -0
  32. package/sampleWorkspace/connectors-community/connectors/TM-Forum/router.yaml +18 -0
  33. package/sampleWorkspace/connectors-community/connectors/TM-Forum/supergraph.yaml +6 -0
  34. package/sampleWorkspace/connectors-community/connectors/TM-Forum/tmf622-ProductOrdering.graphql +296 -0
  35. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/README.md +7 -0
  36. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/addresses.graphql +30 -0
  37. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/customer.graphql +77 -0
  38. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/products.graphql +70 -0
  39. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/router.yaml +24 -0
  40. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/supergraph.yaml +14 -0
  41. package/sampleWorkspace/connectors-community/connectors/adobe-commerce-cloud/swagger.json +69226 -0
  42. package/sampleWorkspace/connectors-community/connectors/anthropic/Dockerfile +5 -0
  43. package/sampleWorkspace/connectors-community/connectors/anthropic/README +61 -0
  44. package/sampleWorkspace/connectors-community/connectors/anthropic/messages.graphql +258 -0
  45. package/sampleWorkspace/connectors-community/connectors/anthropic/router.yaml +18 -0
  46. package/sampleWorkspace/connectors-community/connectors/anthropic/supergraph.yaml +6 -0
  47. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/README +3 -0
  48. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/connector.graphql +38 -0
  49. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/router.yaml +18 -0
  50. package/sampleWorkspace/connectors-community/connectors/apollo-ecomm-simple/supergraph.yaml +6 -0
  51. package/sampleWorkspace/connectors-community/connectors/apple/README +36 -0
  52. package/sampleWorkspace/connectors-community/connectors/apple/app-store-connect.graphql +100 -0
  53. package/sampleWorkspace/connectors-community/connectors/apple/router.yaml +18 -0
  54. package/sampleWorkspace/connectors-community/connectors/apple/supergraph.yaml +6 -0
  55. package/sampleWorkspace/connectors-community/connectors/aws/README +125 -0
  56. package/sampleWorkspace/connectors-community/connectors/aws/dynamodb.graphql +130 -0
  57. package/sampleWorkspace/connectors-community/connectors/aws/json-responses/product-price.json +10 -0
  58. package/sampleWorkspace/connectors-community/connectors/aws/json-responses/products.json +53 -0
  59. package/sampleWorkspace/connectors-community/connectors/aws/lambda.graphql +179 -0
  60. package/sampleWorkspace/connectors-community/connectors/aws/router.yaml +54 -0
  61. package/sampleWorkspace/connectors-community/connectors/aws/supergraph.yaml +10 -0
  62. package/sampleWorkspace/connectors-community/connectors/bored/README.md +35 -0
  63. package/sampleWorkspace/connectors-community/connectors/bored/bored.graphql +87 -0
  64. package/sampleWorkspace/connectors-community/connectors/bored/supergraph.yaml +6 -0
  65. package/sampleWorkspace/connectors-community/connectors/common-room/README.md +23 -0
  66. package/sampleWorkspace/connectors-community/connectors/common-room/contacts.graphql +141 -0
  67. package/sampleWorkspace/connectors-community/connectors/common-room/json-responses/members_email_.json +61 -0
  68. package/sampleWorkspace/connectors-community/connectors/common-room/router.yaml +18 -0
  69. package/sampleWorkspace/connectors-community/connectors/common-room/supergraph.yaml +6 -0
  70. package/sampleWorkspace/connectors-community/connectors/googlemaps/README.md +58 -0
  71. package/sampleWorkspace/connectors-community/connectors/googlemaps/distancematrix.graphql +155 -0
  72. package/sampleWorkspace/connectors-community/connectors/googlemaps/places-legacy.graphql +117 -0
  73. package/sampleWorkspace/connectors-community/connectors/googlemaps/places.graphql +399 -0
  74. package/sampleWorkspace/connectors-community/connectors/googlemaps/router.yaml +18 -0
  75. package/sampleWorkspace/connectors-community/connectors/googlemaps/supergraph.yaml +18 -0
  76. package/sampleWorkspace/connectors-community/connectors/googlemaps/timezone.graphql +64 -0
  77. package/sampleWorkspace/connectors-community/connectors/heygen/README +105 -0
  78. package/sampleWorkspace/connectors-community/connectors/heygen/avatars.graphql +79 -0
  79. package/sampleWorkspace/connectors-community/connectors/heygen/photo-avatars.graphql +454 -0
  80. package/sampleWorkspace/connectors-community/connectors/heygen/router.yaml +21 -0
  81. package/sampleWorkspace/connectors-community/connectors/heygen/supergraph.yaml +10 -0
  82. package/sampleWorkspace/connectors-community/connectors/jira/README +36 -0
  83. package/sampleWorkspace/connectors-community/connectors/jira/connector.graphql +197 -0
  84. package/sampleWorkspace/connectors-community/connectors/jira/router.yaml +18 -0
  85. package/sampleWorkspace/connectors-community/connectors/jira/supergraph.yaml +6 -0
  86. package/sampleWorkspace/connectors-community/connectors/museums/README.md +40 -0
  87. package/sampleWorkspace/connectors-community/connectors/museums/chicagoArt.graphql +150 -0
  88. package/sampleWorkspace/connectors-community/connectors/museums/met.graphql +119 -0
  89. package/sampleWorkspace/connectors-community/connectors/museums/supergraph.yaml +10 -0
  90. package/sampleWorkspace/connectors-community/connectors/nws/README.md +45 -0
  91. package/sampleWorkspace/connectors-community/connectors/nws/alerts.graphql +598 -0
  92. package/sampleWorkspace/connectors-community/connectors/nws/supergraph.yaml +6 -0
  93. package/sampleWorkspace/connectors-community/connectors/odata/README +18 -0
  94. package/sampleWorkspace/connectors-community/connectors/odata/connector.graphql +171 -0
  95. package/sampleWorkspace/connectors-community/connectors/odata/router.yaml +18 -0
  96. package/sampleWorkspace/connectors-community/connectors/odata/supergraph.yaml +6 -0
  97. package/sampleWorkspace/connectors-community/connectors/openai/README.md +61 -0
  98. package/sampleWorkspace/connectors-community/connectors/openai/assistants.graphql +285 -0
  99. package/sampleWorkspace/connectors-community/connectors/openai/chat-completions.graphql +169 -0
  100. package/sampleWorkspace/connectors-community/connectors/openai/models.graphql +47 -0
  101. package/sampleWorkspace/connectors-community/connectors/openai/router.yaml +24 -0
  102. package/sampleWorkspace/connectors-community/connectors/openai/supergraph.yaml +14 -0
  103. package/sampleWorkspace/connectors-community/connectors/pokeapi/README +45 -0
  104. package/sampleWorkspace/connectors-community/connectors/pokeapi/games.graphql +70 -0
  105. package/sampleWorkspace/connectors-community/connectors/pokeapi/locations.graphql +127 -0
  106. package/sampleWorkspace/connectors-community/connectors/pokeapi/moves.graphql +107 -0
  107. package/sampleWorkspace/connectors-community/connectors/pokeapi/pokemon.graphql +539 -0
  108. package/sampleWorkspace/connectors-community/connectors/pokeapi/router.yaml +18 -0
  109. package/sampleWorkspace/connectors-community/connectors/pokeapi/supergraph.yaml +18 -0
  110. package/sampleWorkspace/connectors-community/connectors/strapi/README.md +75 -0
  111. package/sampleWorkspace/connectors-community/connectors/strapi/router.yaml +19 -0
  112. package/sampleWorkspace/connectors-community/connectors/strapi/supergraph.yaml +6 -0
  113. package/sampleWorkspace/connectors-community/connectors/strapi/users.graphql +227 -0
  114. package/sampleWorkspace/connectors-community/connectors/stripe/README.md +83 -0
  115. package/sampleWorkspace/connectors-community/connectors/stripe/checkout.graphql +112 -0
  116. package/sampleWorkspace/connectors-community/connectors/stripe/core-resources.graphql +868 -0
  117. package/sampleWorkspace/connectors-community/connectors/stripe/payment-methods.graphql +526 -0
  118. package/sampleWorkspace/connectors-community/connectors/stripe/products.graphql +162 -0
  119. package/sampleWorkspace/connectors-community/connectors/stripe/router.yaml +26 -0
  120. package/sampleWorkspace/connectors-community/connectors/stripe/supergraph.yaml +18 -0
  121. package/sampleWorkspace/connectors-community/connectors/supabase/README.md +80 -0
  122. package/sampleWorkspace/connectors-community/connectors/supabase/router.yaml +5 -0
  123. package/sampleWorkspace/connectors-community/connectors/supabase/supabase.graphql +143 -0
  124. package/sampleWorkspace/connectors-community/connectors/supabase/supergraph.yaml +6 -0
  125. package/sampleWorkspace/connectors-community/connectors/thespacedevs/README +46 -0
  126. package/sampleWorkspace/connectors-community/connectors/thespacedevs/agencies.graphql +193 -0
  127. package/sampleWorkspace/connectors-community/connectors/thespacedevs/api-throttle.graphql +33 -0
  128. package/sampleWorkspace/connectors-community/connectors/thespacedevs/astronauts.graphql +237 -0
  129. package/sampleWorkspace/connectors-community/connectors/thespacedevs/celestial-bodies.graphql +131 -0
  130. package/sampleWorkspace/connectors-community/connectors/thespacedevs/docking-events.graphql +3460 -0
  131. package/sampleWorkspace/connectors-community/connectors/thespacedevs/launches.graphql +1156 -0
  132. package/sampleWorkspace/connectors-community/connectors/thespacedevs/supergraph.yaml +77 -0
  133. package/sampleWorkspace/connectors-community/connectors/tint/README +35 -0
  134. package/sampleWorkspace/connectors-community/connectors/tint/accounts.graphql +69 -0
  135. package/sampleWorkspace/connectors-community/connectors/tint/router.yaml +21 -0
  136. package/sampleWorkspace/connectors-community/connectors/tint/social-feeds.graphql +62 -0
  137. package/sampleWorkspace/connectors-community/connectors/tint/supergraph.yaml +10 -0
  138. package/sampleWorkspace/connectors-community/connectors/todoist/README.md +48 -0
  139. package/sampleWorkspace/connectors-community/connectors/todoist/supergraph.yaml +6 -0
  140. package/sampleWorkspace/connectors-community/connectors/todoist/todoist.graphql +381 -0
  141. package/sampleWorkspace/connectors-community/connectors/trimblemaps/README +99 -0
  142. package/sampleWorkspace/connectors-community/connectors/trimblemaps/connector.graphql +66 -0
  143. package/sampleWorkspace/connectors-community/connectors/trimblemaps/router.yaml +18 -0
  144. package/sampleWorkspace/connectors-community/connectors/trimblemaps/supergraph.yaml +6 -0
  145. package/sampleWorkspace/connectors-community/connectors/twilio/README.md +44 -0
  146. package/sampleWorkspace/connectors-community/connectors/twilio/messages.graphql +107 -0
  147. package/sampleWorkspace/connectors-community/connectors/twilio/router.yaml +6 -0
  148. package/sampleWorkspace/connectors-community/connectors/twilio/supergraph.yaml +6 -0
  149. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/README.md +44 -0
  150. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/earthquakes.graphql +235 -0
  151. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes/supergraph.yaml +6 -0
  152. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/README.md +44 -0
  153. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/earthquake-simple.graphql +87 -0
  154. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/router.yaml +3 -0
  155. package/sampleWorkspace/connectors-community/connectors/usgs/earthquakes-nominatum/supergraph.yaml +6 -0
  156. package/sampleWorkspace/connectors-community/connectors/usps/README +36 -0
  157. package/sampleWorkspace/connectors-community/connectors/usps/router.yaml +18 -0
  158. package/sampleWorkspace/connectors-community/connectors/usps/supergraph.yaml +6 -0
  159. package/sampleWorkspace/connectors-community/connectors/usps/tracking.graphql +118 -0
  160. package/sampleWorkspace/connectors-community/connectors/zendesk/README +36 -0
  161. package/sampleWorkspace/connectors-community/connectors/zendesk/connector.graphql +98 -0
  162. package/sampleWorkspace/connectors-community/connectors/zendesk/router.yaml +18 -0
  163. package/sampleWorkspace/connectors-community/connectors/zendesk/supergraph.yaml +6 -0
  164. package/sampleWorkspace/connectors-community/file-new/index.js +520 -0
  165. package/sampleWorkspace/connectors-community/package-lock.json +119 -0
  166. package/sampleWorkspace/connectors-community/package.json +20 -0
  167. package/sampleWorkspace/connectors-community/supergraph.yaml +6 -0
  168. package/sampleWorkspace/rover/apollo.config.yaml +1 -1
  169. package/sampleWorkspace/rover/supergraph.yaml +4 -0
  170. package/sampleWorkspace/sampleWorkspace.code-workspace +29 -8
  171. package/src/__tests__/fixtures/textmate/test.apollo.connectors.mapping +213 -0
  172. package/src/__tests__/fixtures/textmate/test.connect.graphql +104 -0
  173. package/src/language-server/__e2e__/configFileTypes.e2e.ts +2 -2
  174. package/src/language-server/__e2e__/rover.e2e.ts +37 -49
  175. package/src/language-server/__tests__/fixtures/documents/functionCall.ts.snap +3 -3
  176. package/src/language-server/config/config.ts +4 -2
  177. package/syntaxes/build.ts +266 -0
  178. package/syntaxes/connectors.mapping.json +532 -0
  179. package/syntaxes/connectors.mapping.yaml +440 -0
  180. package/syntaxes/graphql.connectors.json +426 -0
  181. package/syntaxes/graphql.connectors.yaml +254 -0
  182. package/syntaxes/graphql.json +22 -1
  183. package/syntaxes/tsconfig.json +6 -0
@@ -0,0 +1,266 @@
1
+ #!/usr/bin/env node
2
+ import { parseArgs, styleText } from "node:util";
3
+ import {
4
+ watch as nodeWatch,
5
+ readdir,
6
+ readFile,
7
+ writeFile,
8
+ } from "node:fs/promises";
9
+ import yaml from "js-yaml";
10
+ import { format, parse } from "node:path";
11
+ import { optimize } from "oniguruma-parser/optimizer";
12
+
13
+ const dir = import.meta.dirname;
14
+ const {
15
+ values: { watch, debug, snapshot },
16
+ positionals,
17
+ } = parseArgs({
18
+ options: {
19
+ watch: { type: "boolean", default: false },
20
+ debug: {
21
+ type: "boolean",
22
+ default: false,
23
+ description: "pattern names will be concatenated with the pattern path",
24
+ },
25
+ snapshot: {
26
+ type: "boolean",
27
+ default: false,
28
+ description: "pattern names will be replaced with the pattern path",
29
+ },
30
+ },
31
+ allowPositionals: true,
32
+ });
33
+
34
+ const colors = {
35
+ variable: "red",
36
+ availableVariable: "green",
37
+ style: "red",
38
+ availableStyle: "green",
39
+ regex: "magenta",
40
+ reference: "yellow",
41
+ path: "blue",
42
+ filename: ["blue", "underline"],
43
+ } satisfies Record<string, Parameters<typeof styleText>[0]>;
44
+
45
+ const files = new Set<string>();
46
+
47
+ for (const filename of await readdir(dir)) {
48
+ if (positionals.length > 0) {
49
+ if (positionals.includes(parse(filename).base)) {
50
+ files.add(filename);
51
+ }
52
+ } else if (filename.endsWith(".yaml")) {
53
+ files.add(filename);
54
+ }
55
+ }
56
+
57
+ for (const filename of files) {
58
+ await build(filename);
59
+ }
60
+
61
+ if (watch) {
62
+ (async () => {
63
+ try {
64
+ const watcher = nodeWatch(dir);
65
+ for await (const event of watcher) {
66
+ if (event.eventType === "rename" || event.eventType === "change") {
67
+ const filename = event.filename;
68
+ if (files.has(filename)) {
69
+ await build(filename);
70
+ }
71
+ }
72
+ }
73
+ } catch (err) {
74
+ throw err;
75
+ }
76
+ })();
77
+ }
78
+
79
+ async function build(filename: string) {
80
+ const pathOverrides = new WeakMap<object, string[]>();
81
+ console.log(`Building ${filename}...`);
82
+ const { name, ext } = parse(filename);
83
+
84
+ try {
85
+ const content = await readFile(format({ dir, name, ext }), "utf8");
86
+ const parsed = yaml.load(content, {
87
+ filename,
88
+ }) as Record<string, any>;
89
+ const { variables = {}, styles = {} } = parsed;
90
+ delete parsed.variables;
91
+ delete parsed.styles;
92
+ const paths = new Map<object, string[]>();
93
+ const knownPatterns = new Map<string, object>();
94
+ const output =
95
+ JSON.stringify(
96
+ parsed,
97
+ function replacer(key, value) {
98
+ const currentPath = (paths.get(this) || []).concat(key);
99
+ if (value && typeof value === "object" && key !== "") {
100
+ paths.set(value, currentPath);
101
+ }
102
+ const isPattern =
103
+ currentPath.length == 2 && currentPath[0] === "repository";
104
+ if (isPattern) {
105
+ knownPatterns.set("#" + key, value);
106
+ }
107
+ if (debug || snapshot) {
108
+ // attach the respository pattern name for debugging
109
+ if (
110
+ typeof value === "object" &&
111
+ value !== null &&
112
+ currentPath[0] === "repository" &&
113
+ // top-level patterns
114
+ (currentPath.length == 2 ||
115
+ // nested inline patterns
116
+ (currentPath.length > 2 &&
117
+ currentPath.at(-2) === "patterns" &&
118
+ typeof value === "object" &&
119
+ !("include" in value)) ||
120
+ // anything with a `debugName` property
121
+ "debugName" in value)
122
+ ) {
123
+ let debugPath = currentPath;
124
+ if ("debugName" in value) {
125
+ debugPath = currentPath.slice(0, -1).concat(value.debugName);
126
+ pathOverrides.set(value, debugPath);
127
+ delete value.debugName;
128
+ }
129
+
130
+ if (snapshot) {
131
+ // in snapshot mode we only are interested in the pattern names, not colorization details
132
+ delete value.name;
133
+ }
134
+ value.name =
135
+ (value.name ?? "meta") + "." + pathToString(debugPath, false);
136
+ }
137
+ if (snapshot && currentPath[0] === "repository" && key === "name") {
138
+ return pathToString(
139
+ pathOverrides.get(this) || currentPath.slice(0, -1),
140
+ false,
141
+ );
142
+ }
143
+ }
144
+ if (typeof value === "string") {
145
+ if (key === "begin" || key === "end" || key === "match") {
146
+ let regexString = value.replace(
147
+ /\{\{([\w#.]+)\}\}/g,
148
+ function replacer(_, reference: string) {
149
+ let replaced: string;
150
+ const patternMatch = /^(#\w+)\.(\w+)/.exec(reference);
151
+ if (patternMatch) {
152
+ const [, pattern, key] = patternMatch;
153
+ const patternObject = knownPatterns.get(pattern);
154
+ if (!patternObject) {
155
+ throw new Error(
156
+ `Pattern not found: ${styleText(colors.reference, pattern)}` +
157
+ ` accessed from ${pathToString(currentPath)}`,
158
+ );
159
+ }
160
+ replaced = patternObject[key];
161
+ } else {
162
+ if (!(reference in variables)) {
163
+ throw new Error(
164
+ `Variable not found: ${styleText(colors.variable, reference)}` +
165
+ ` accessed from ${pathToString(currentPath)}` +
166
+ ` with available variables: ${Object.keys(variables)
167
+ .map((v) => styleText(colors.availableVariable, v))
168
+ .join(", ")}`,
169
+ );
170
+ }
171
+ replaced = variables[reference];
172
+ }
173
+ return `(?:${verify(
174
+ replaced.replace(/\{\{(\w+)\}\}/g, replacer),
175
+ `reference ${styleText(colors.variable, reference)} accessed from ` +
176
+ pathToString(currentPath),
177
+ )})`;
178
+ },
179
+ );
180
+
181
+ return verify(regexString, pathToString(currentPath));
182
+ } else if (key === "include" && value.startsWith("#")) {
183
+ if (!(value.slice(1) in parsed.repository)) {
184
+ console.warn(
185
+ `Include pattern not found: ${styleText(colors.reference, value)} at path ${pathToString(currentPath)}`,
186
+ );
187
+ }
188
+ } else if (key === "name" || key === "contentName") {
189
+ return value.replace(
190
+ /\{\{\.([\w]+)\}\}/g,
191
+ function replacer(_, reference: string) {
192
+ if (!(reference in styles)) {
193
+ throw new Error(
194
+ `Style not found: ${styleText(colors.style, reference)}` +
195
+ ` accessed from ${pathToString(currentPath)}` +
196
+ ` with available styles: ${Object.keys(styles)
197
+ .map((v) => styleText(colors.availableStyle, v))
198
+ .join(", ")}`,
199
+ );
200
+ }
201
+ return styles[reference].replace(
202
+ /\{\{\.([\w]+)\}\}/g,
203
+ replacer,
204
+ );
205
+ },
206
+ );
207
+ }
208
+ } else if (typeof value === "object" && value !== null) {
209
+ if (isPattern) {
210
+ if (typeof value.inherit === "string") {
211
+ const { inherit, ...rest } = value;
212
+ const inheritedPattern = knownPatterns.get(inherit);
213
+ if (!inheritedPattern) {
214
+ throw new Error(
215
+ `Pattern to inherit from not found: ${styleText(
216
+ colors.reference,
217
+ value.inherit,
218
+ )} at path ${pathToString(currentPath)}`,
219
+ );
220
+ }
221
+ if (inheritedPattern) {
222
+ value = { ...inheritedPattern, ...rest };
223
+ }
224
+ }
225
+ }
226
+ }
227
+ return value;
228
+ },
229
+ 2,
230
+ ) + "\n";
231
+
232
+ await writeFile(format({ dir, name, ext: ".json" }), output, "utf8");
233
+ } catch (err) {
234
+ console.log(
235
+ `Error building ${styleText(colors.filename, filename)}:\n`,
236
+ err instanceof Error ? err.message : err.toString(),
237
+ );
238
+ }
239
+ }
240
+ function verify(regexString: string, context: string) {
241
+ try {
242
+ return optimize(regexString, {
243
+ rules: {
244
+ // end rules might reference begin rules, so we allow orphan backreferences
245
+ allowOrphanBackrefs: true,
246
+ // Follow `vscode-oniguruma` which enables this Oniguruma option by default (see https://github.com/RedCMD/TmLanguage-Syntax-Highlighter/blob/973552cf6ea41646d0f8b1c1eb2430408e36b25e/src/Providers/CodeActionsProvider.ts#L230)
247
+ captureGroup: true,
248
+ },
249
+ }).pattern;
250
+ } catch (err) {
251
+ throw new Error(
252
+ `Invalid regex: ${styleText(colors.regex, regexString)} in context: ${context}\n${err}`,
253
+ );
254
+ }
255
+ }
256
+ function pathToString(path: string[], colorize = true) {
257
+ const text = path.reduce(
258
+ (acc, part) =>
259
+ acc +
260
+ (colorize && isFinite(+part)
261
+ ? "[" + part + "]"
262
+ : (acc ? "." : "") + part),
263
+ "",
264
+ );
265
+ return colorize ? styleText(colors.path, text) : text;
266
+ }