@workbench-kit/workbench-config 0.0.2-prototype.0.2.25 → 0.0.2-prototype.0.2.27

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@workbench-kit/workbench-config",
3
- "version": "0.0.2-prototype.0.2.25",
3
+ "version": "0.0.2-prototype.0.2.27",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "exports": {
package/src/index.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { assertKnownKeys, assertRecord } from './parse-helpers.js';
1
+ import { assertKnownKeys, assertRecord, parseConfigJson } from './parse-helpers.js';
2
2
  import { WorkbenchConfigValidationError } from './validation-error.js';
3
3
 
4
4
  export const WORKBENCH_KIT_WORKBENCH_CONFIG_VERSION = '0.0.0' as const;
@@ -85,15 +85,7 @@ export function parseWorkbenchExtensionsConfig(input: unknown): WorkbenchExtensi
85
85
  }
86
86
 
87
87
  export function parseWorkbenchExtensionsConfigJson(jsonText: string): WorkbenchExtensionsConfig {
88
- try {
89
- return parseWorkbenchExtensionsConfig(JSON.parse(jsonText) as unknown);
90
- } catch (error) {
91
- if (error instanceof WorkbenchConfigValidationError) {
92
- throw error;
93
- }
94
-
95
- throw new WorkbenchConfigValidationError('Expected extensions config to be valid JSON.');
96
- }
88
+ return parseConfigJson(jsonText, parseWorkbenchExtensionsConfig, 'extensions config');
97
89
  }
98
90
 
99
91
  export function parseWorkbenchExtensionsLock(input: unknown): WorkbenchExtensionsLock {
@@ -136,15 +128,7 @@ export function parseWorkbenchExtensionsLock(input: unknown): WorkbenchExtension
136
128
  }
137
129
 
138
130
  export function parseWorkbenchExtensionsLockJson(jsonText: string): WorkbenchExtensionsLock {
139
- try {
140
- return parseWorkbenchExtensionsLock(JSON.parse(jsonText) as unknown);
141
- } catch (error) {
142
- if (error instanceof WorkbenchConfigValidationError) {
143
- throw error;
144
- }
145
-
146
- throw new WorkbenchConfigValidationError('Expected extensions lock to be valid JSON.');
147
- }
131
+ return parseConfigJson(jsonText, parseWorkbenchExtensionsLock, 'extensions lock');
148
132
  }
149
133
 
150
134
  export function parseWorkbenchLayoutConfig(input: unknown): WorkbenchLayoutConfig {
@@ -204,15 +188,7 @@ export function parseWorkbenchLayoutConfig(input: unknown): WorkbenchLayoutConfi
204
188
  }
205
189
 
206
190
  export function parseWorkbenchLayoutConfigJson(jsonText: string): WorkbenchLayoutConfig {
207
- try {
208
- return parseWorkbenchLayoutConfig(JSON.parse(jsonText) as unknown);
209
- } catch (error) {
210
- if (error instanceof WorkbenchConfigValidationError) {
211
- throw error;
212
- }
213
-
214
- throw new WorkbenchConfigValidationError('Expected layout config to be valid JSON.');
215
- }
191
+ return parseConfigJson(jsonText, parseWorkbenchLayoutConfig, 'layout config');
216
192
  }
217
193
 
218
194
  export {
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  assertKnownKeys,
3
3
  assertRecord,
4
+ parseConfigJson,
4
5
  readOptionalString,
5
6
  readRequiredString,
6
7
  } from './parse-helpers.js';
@@ -26,15 +27,7 @@ export function parseWorkbenchKeybindingsConfig(
26
27
  export function parseWorkbenchKeybindingsConfigJson(
27
28
  jsonText: string,
28
29
  ): readonly WorkbenchKeybindingDefinition[] {
29
- try {
30
- return parseWorkbenchKeybindingsConfig(JSON.parse(jsonText) as unknown);
31
- } catch (error) {
32
- if (error instanceof WorkbenchConfigValidationError) {
33
- throw error;
34
- }
35
-
36
- throw new WorkbenchConfigValidationError('Expected keybindings config to be valid JSON.');
37
- }
30
+ return parseConfigJson(jsonText, parseWorkbenchKeybindingsConfig, 'keybindings config');
38
31
  }
39
32
 
40
33
  function parseWorkbenchKeybindingDefinition(
@@ -8,6 +8,21 @@ export function assertRecord(value: unknown, label: string): Record<string, unkn
8
8
  return value as Record<string, unknown>;
9
9
  }
10
10
 
11
+ export function parseConfigJson<T>(
12
+ jsonText: string,
13
+ parseConfig: (input: unknown) => T,
14
+ configLabel: string,
15
+ ): T {
16
+ try {
17
+ return parseConfig(JSON.parse(jsonText) as unknown);
18
+ } catch (error) {
19
+ if (error instanceof WorkbenchConfigValidationError) {
20
+ throw error;
21
+ }
22
+ throw new WorkbenchConfigValidationError(`Expected ${configLabel} to be valid JSON.`);
23
+ }
24
+ }
25
+
11
26
  export function readRequiredString(record: Record<string, unknown>, key: string): string {
12
27
  const value = record[key];
13
28
  if (typeof value !== 'string' || value.trim().length === 0) {
@@ -1,3 +1,4 @@
1
+ import { parseConfigJson } from './parse-helpers.js';
1
2
  import { WorkbenchConfigValidationError } from './validation-error.js';
2
3
 
3
4
  export type WorkbenchSettingsConfig = Readonly<Record<string, unknown>>;
@@ -7,17 +8,23 @@ export function parseWorkbenchSettingsConfig(input: unknown): WorkbenchSettingsC
7
8
  throw new WorkbenchConfigValidationError('Expected settings config to be an object.');
8
9
  }
9
10
 
10
- return { ...(input as Record<string, unknown>) };
11
+ const settings = { ...(input as Record<string, unknown>) };
12
+ const colorTheme = settings['workbench.colorTheme'];
13
+ if (colorTheme !== undefined && typeof colorTheme !== 'string') {
14
+ throw new WorkbenchConfigValidationError('Expected workbench.colorTheme to be a string.');
15
+ }
16
+
17
+ const editorFontSize = settings['editor.fontSize'];
18
+ if (
19
+ editorFontSize !== undefined &&
20
+ (typeof editorFontSize !== 'number' || !Number.isFinite(editorFontSize) || editorFontSize < 1)
21
+ ) {
22
+ throw new WorkbenchConfigValidationError('Expected editor.fontSize to be a number >= 1.');
23
+ }
24
+
25
+ return settings;
11
26
  }
12
27
 
13
28
  export function parseWorkbenchSettingsConfigJson(jsonText: string): WorkbenchSettingsConfig {
14
- try {
15
- return parseWorkbenchSettingsConfig(JSON.parse(jsonText) as unknown);
16
- } catch (error) {
17
- if (error instanceof WorkbenchConfigValidationError) {
18
- throw error;
19
- }
20
-
21
- throw new WorkbenchConfigValidationError('Expected settings config to be valid JSON.');
22
- }
29
+ return parseConfigJson(jsonText, parseWorkbenchSettingsConfig, 'settings config');
23
30
  }
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  assertKnownKeys,
3
3
  assertRecord,
4
+ parseConfigJson,
4
5
  readOptionalString,
5
6
  readRequiredString,
6
7
  } from './parse-helpers.js';
@@ -52,15 +53,7 @@ export function parseWorkbenchUserCommandsConfig(input: unknown): WorkbenchUserC
52
53
  export function parseWorkbenchUserCommandsConfigJson(
53
54
  jsonText: string,
54
55
  ): WorkbenchUserCommandsConfig {
55
- try {
56
- return parseWorkbenchUserCommandsConfig(JSON.parse(jsonText) as unknown);
57
- } catch (error) {
58
- if (error instanceof WorkbenchConfigValidationError) {
59
- throw error;
60
- }
61
-
62
- throw new WorkbenchConfigValidationError('Expected user commands config to be valid JSON.');
63
- }
56
+ return parseConfigJson(jsonText, parseWorkbenchUserCommandsConfig, 'user commands config');
64
57
  }
65
58
 
66
59
  function parseUserCommandDefinition(input: unknown, index: number): WorkbenchUserCommandDefinition {