Skip to content

Commit 0605c7b

Browse files
google-labs-jules[bot]synthable
authored andcommitted
refactor(types): Improve type safety of STANDARD_SHAPES
Centralized the definition of `STANDARD_SHAPE_SPECS` in the `ums-lib` package and improved its type definition by using `as const`. This change eliminates an unsafe `as unknown as string[]` type assertion by providing more specific, readonly types for the shape specifications. It also removes the duplicated `STANDARD_SHAPES` constant from the `copilot-instructions-cli` package, which now relies on the single source of truth from `ums-lib`.
1 parent 558f46f commit 0605c7b

3 files changed

Lines changed: 18 additions & 51 deletions

File tree

packages/copilot-instructions-cli/src/constants.ts

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,39 +40,6 @@ export const RENDER_ORDER: DirectiveKey[] = [
4040
'examples',
4141
];
4242

43-
// Standard shapes as defined in UMS v1.0 Section 2.5
44-
export const STANDARD_SHAPES = {
45-
specification: {
46-
required: ['goal', 'constraints'],
47-
optional: ['principles', 'examples'],
48-
},
49-
procedure: {
50-
required: ['goal', 'process'],
51-
optional: ['constraints', 'examples'],
52-
},
53-
pattern: {
54-
required: ['goal', 'principles'],
55-
optional: ['constraints', 'examples'],
56-
},
57-
checklist: {
58-
required: ['goal', 'criteria'],
59-
optional: ['examples'],
60-
},
61-
data: {
62-
required: ['goal', 'data'],
63-
optional: ['examples'],
64-
},
65-
'procedural-specification': {
66-
required: ['goal', 'process', 'constraints'],
67-
optional: ['criteria', 'examples'],
68-
},
69-
playbook: {
70-
required: ['goal', 'process', 'constraints', 'criteria'],
71-
optional: ['principles', 'examples', 'data'],
72-
},
73-
} as const;
74-
75-
export type StandardShape = keyof typeof STANDARD_SHAPES;
7643

7744
// Schema version for UMS v1.0
7845
export const UMS_SCHEMA_VERSION = '1.0';

packages/ums-lib/src/constants.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -50,35 +50,35 @@ export const MODULE_ID_REGEX =
5050
// Standard shape directive specifications (UMS v1.0 compliant)
5151
export const STANDARD_SHAPE_SPECS = {
5252
procedure: {
53-
required: ['goal', 'process'] as string[],
54-
optional: ['examples', 'data'] as string[],
53+
required: ['goal', 'process'],
54+
optional: ['examples', 'data'],
5555
},
5656
specification: {
57-
required: ['goal', 'constraints'] as string[],
58-
optional: ['examples', 'data'] as string[],
57+
required: ['goal', 'constraints'],
58+
optional: ['examples', 'data'],
5959
},
6060
pattern: {
61-
required: ['goal', 'principles'] as string[],
62-
optional: ['constraints', 'examples', 'data'] as string[],
61+
required: ['goal', 'principles'],
62+
optional: ['constraints', 'examples', 'data'],
6363
},
6464
checklist: {
65-
required: ['goal', 'criteria'] as string[],
66-
optional: ['examples', 'data'] as string[],
65+
required: ['goal', 'criteria'],
66+
optional: ['examples', 'data'],
6767
},
6868
data: {
69-
required: ['goal', 'data'] as string[],
70-
optional: ['examples'] as string[],
69+
required: ['goal', 'data'],
70+
optional: ['examples'],
7171
},
7272
'procedural-specification': {
73-
required: ['goal', 'process', 'constraints'] as string[],
74-
optional: ['examples', 'data'] as string[],
73+
required: ['goal', 'process', 'constraints'],
74+
optional: ['examples', 'data'],
7575
},
7676
'pattern-specification': {
77-
required: ['goal', 'principles', 'constraints'] as string[],
78-
optional: ['examples', 'data'] as string[],
77+
required: ['goal', 'principles', 'constraints'],
78+
optional: ['examples', 'data'],
7979
},
8080
playbook: {
81-
required: ['goal', 'process', 'constraints', 'criteria'] as string[],
82-
optional: ['principles', 'examples', 'data'] as string[],
81+
required: ['goal', 'process', 'constraints', 'criteria'],
82+
optional: ['principles', 'examples', 'data'],
8383
},
84-
};
84+
} as const;

packages/ums-lib/src/core/module-loader.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -550,7 +550,7 @@ function validateBodyForShape(body: unknown, shape: unknown): ValidationResult {
550550
STANDARD_SHAPE_SPECS[shape as keyof typeof STANDARD_SHAPE_SPECS];
551551

552552
const bodyObj = body as Record<string, unknown>;
553-
const allowedDirectives = new Set([
553+
const allowedDirectives = new Set<string>([
554554
...shapeSpec.required,
555555
...shapeSpec.optional,
556556
]);

0 commit comments

Comments
 (0)