intent-core 0.1.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 (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +34 -0
  3. package/dist/compiler/index.d.ts +53 -0
  4. package/dist/compiler/index.d.ts.map +1 -0
  5. package/dist/compiler/index.js +147 -0
  6. package/dist/compiler/index.js.map +1 -0
  7. package/dist/compiler/parser.d.ts +25 -0
  8. package/dist/compiler/parser.d.ts.map +1 -0
  9. package/dist/compiler/parser.js +198 -0
  10. package/dist/compiler/parser.js.map +1 -0
  11. package/dist/generator/ai-manifest.d.ts +14 -0
  12. package/dist/generator/ai-manifest.d.ts.map +1 -0
  13. package/dist/generator/ai-manifest.js +276 -0
  14. package/dist/generator/ai-manifest.js.map +1 -0
  15. package/dist/generator/css.d.ts +16 -0
  16. package/dist/generator/css.d.ts.map +1 -0
  17. package/dist/generator/css.js +230 -0
  18. package/dist/generator/css.js.map +1 -0
  19. package/dist/generator/types.d.ts +11 -0
  20. package/dist/generator/types.d.ts.map +1 -0
  21. package/dist/generator/types.js +229 -0
  22. package/dist/generator/types.js.map +1 -0
  23. package/dist/index.d.ts +47 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +51 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/schema/define.d.ts +60 -0
  28. package/dist/schema/define.d.ts.map +1 -0
  29. package/dist/schema/define.js +167 -0
  30. package/dist/schema/define.js.map +1 -0
  31. package/dist/types/index.d.ts +156 -0
  32. package/dist/types/index.d.ts.map +1 -0
  33. package/dist/types/index.js +5 -0
  34. package/dist/types/index.js.map +1 -0
  35. package/dist/validator/constraints.d.ts +16 -0
  36. package/dist/validator/constraints.d.ts.map +1 -0
  37. package/dist/validator/constraints.js +168 -0
  38. package/dist/validator/constraints.js.map +1 -0
  39. package/dist/validator/index.d.ts +22 -0
  40. package/dist/validator/index.d.ts.map +1 -0
  41. package/dist/validator/index.js +321 -0
  42. package/dist/validator/index.js.map +1 -0
  43. package/package.json +61 -0
@@ -0,0 +1,156 @@
1
+ export type TokenValue = string | number;
2
+ export type TokenCategory = 'color' | 'space' | 'elevation' | 'typography' | 'radius' | 'border' | 'zIndex' | 'opacity' | 'transition';
3
+ export type TokenRegistry = {
4
+ [K in TokenCategory]?: Record<string, TokenValue>;
5
+ };
6
+ export type PropertyType = 'enum' | 'boolean' | 'string' | 'number';
7
+ export interface EnumProperty {
8
+ type: 'enum';
9
+ values: string[];
10
+ required?: boolean;
11
+ default?: string;
12
+ }
13
+ export interface BooleanProperty {
14
+ type: 'boolean';
15
+ required?: boolean;
16
+ default?: boolean;
17
+ }
18
+ export interface StringProperty {
19
+ type: 'string';
20
+ required?: boolean;
21
+ default?: string;
22
+ }
23
+ export interface NumberProperty {
24
+ type: 'number';
25
+ required?: boolean;
26
+ default?: number;
27
+ min?: number;
28
+ max?: number;
29
+ }
30
+ export type PropertyDefinition = EnumProperty | BooleanProperty | StringProperty | NumberProperty;
31
+ export interface PropertySet {
32
+ [key: string]: PropertyDefinition;
33
+ }
34
+ export type ConstraintOperator = 'eq' | 'neq' | 'in' | 'nin' | 'gt' | 'lt' | 'gte' | 'lte';
35
+ export interface ConstraintCondition {
36
+ [property: string]: string | string[] | number | boolean | {
37
+ op: ConstraintOperator;
38
+ value: unknown;
39
+ };
40
+ }
41
+ export interface ConstraintAction {
42
+ forbid?: string[];
43
+ require?: Record<string, string[]>;
44
+ suggest?: Record<string, string>;
45
+ }
46
+ export interface Constraint {
47
+ when: ConstraintCondition;
48
+ forbid?: string[];
49
+ require?: Record<string, string[]>;
50
+ message?: string;
51
+ }
52
+ export type CSSProperty = string;
53
+ export type TokenReference = string;
54
+ export type StyleValue = TokenReference | {
55
+ [key: string]: TokenReference;
56
+ } | string;
57
+ export interface VisualMapping {
58
+ [cssProperty: CSSProperty]: StyleValue;
59
+ }
60
+ export interface ConditionalMapping {
61
+ condition: Record<string, string>;
62
+ styles: VisualMapping;
63
+ }
64
+ export interface ComponentSchema {
65
+ name: string;
66
+ description?: string;
67
+ properties: PropertySet;
68
+ constraints: Constraint[];
69
+ mappings: Record<string, VisualMapping | ConditionalMapping[]>;
70
+ baseStyles?: VisualMapping;
71
+ }
72
+ export interface DesignSystemConfig {
73
+ name: string;
74
+ version?: string;
75
+ tokens: TokenRegistry;
76
+ darkTokens?: Partial<TokenRegistry>;
77
+ components: Record<string, ComponentSchema>;
78
+ settings?: {
79
+ cssPrefix?: string;
80
+ generateCSSVariables?: boolean;
81
+ strictMode?: boolean;
82
+ };
83
+ }
84
+ export interface DesignSystem {
85
+ config: DesignSystemConfig;
86
+ validate(): ValidationResult;
87
+ getComponent(name: string): ComponentSchema | undefined;
88
+ getToken(category: TokenCategory, name: string): TokenValue | undefined;
89
+ }
90
+ export type ValidationSeverity = 'error' | 'warning' | 'info';
91
+ export interface ValidationIssue {
92
+ severity: ValidationSeverity;
93
+ code: string;
94
+ message: string;
95
+ path: string;
96
+ suggestion?: string;
97
+ }
98
+ export interface ValidationResult {
99
+ valid: boolean;
100
+ issues: ValidationIssue[];
101
+ }
102
+ export interface ComponentUsage {
103
+ component: string;
104
+ props: Record<string, unknown>;
105
+ location?: {
106
+ file: string;
107
+ line: number;
108
+ column: number;
109
+ };
110
+ }
111
+ export interface CompiledStyles {
112
+ css: string;
113
+ classes: string[];
114
+ sourceMap?: Record<string, string>;
115
+ }
116
+ export interface ComponentCompilation {
117
+ component: string;
118
+ styles: CompiledStyles;
119
+ typeDefinition: string;
120
+ propCombinations: string[][];
121
+ }
122
+ export interface CompilationOutput {
123
+ css: string;
124
+ metadata: {
125
+ tokens: TokenRegistry;
126
+ components: string[];
127
+ usedCombinations: Record<string, string[][]>;
128
+ };
129
+ types: string;
130
+ }
131
+ export interface ComponentSchemaForAI {
132
+ name: string;
133
+ description: string;
134
+ properties: Array<{
135
+ name: string;
136
+ type: string;
137
+ values?: string[];
138
+ required: boolean;
139
+ default?: unknown;
140
+ description?: string;
141
+ valueDescriptions?: Record<string, string>;
142
+ }>;
143
+ constraints: string[];
144
+ examples: {
145
+ valid: string[];
146
+ invalid: string[];
147
+ };
148
+ }
149
+ export interface AIManifest {
150
+ version: string;
151
+ designSystem: string;
152
+ tokens: TokenRegistry;
153
+ components: ComponentSchemaForAI[];
154
+ semanticDescriptions: Record<string, string>;
155
+ }
156
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvI,MAAM,MAAM,aAAa,GAAG;KACzB,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC;AAElG,MAAM,WAAW,WAAW;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,kBAAkB,CAAC;CACnC;AAMD,MAAM,MAAM,kBAAkB,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAE3F,MAAM,WAAW,mBAAmB;IAClC,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,GAAG,OAAO,GAAG;QAAE,EAAE,EAAE,kBAAkB,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC;CACvG;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,UAAU,GAClB,cAAc,GACd;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAAE,GACjC,MAAM,CAAC;AAEX,MAAM,WAAW,aAAa;IAC5B,CAAC,WAAW,EAAE,WAAW,GAAG,UAAU,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,aAAa,CAAC;CACvB;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,kBAAkB,EAAE,CAAC,CAAC;IAC/D,UAAU,CAAC,EAAE,aAAa,CAAC;CAC5B;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC5C,QAAQ,CAAC,EAAE;QACT,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,IAAI,gBAAgB,CAAC;IAC7B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;CACzE;AAMD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3D;AAMD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,EAAE,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE;QACR,MAAM,EAAE,aAAa,CAAC;QACtB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;KAC9C,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC5C,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE;QACR,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,UAAU,EAAE,oBAAoB,EAAE,CAAC;IACnC,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C"}
@@ -0,0 +1,5 @@
1
+ // ============================================================================
2
+ // Intent Core Types
3
+ // ============================================================================
4
+ export {};
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Constraint Engine
3
+ *
4
+ * Validates component prop combinations against defined constraints.
5
+ */
6
+ import type { ComponentSchema, ValidationIssue, ComponentUsage } from '../types/index.js';
7
+ export interface ValidationContext {
8
+ component?: string;
9
+ file?: string;
10
+ line?: number;
11
+ column?: number;
12
+ }
13
+ export declare function validateConstraints(schema: ComponentSchema, usage: ComponentUsage, context?: ValidationContext): ValidationIssue[];
14
+ export declare function generateValidCombinations(schema: ComponentSchema): Array<Record<string, string>>;
15
+ export declare function suggestValidAlternatives(schema: ComponentSchema, invalidProps: Record<string, unknown>): Array<Record<string, string>>;
16
+ //# sourceMappingURL=constraints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../src/validator/constraints.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,eAAe,EAGf,eAAe,EACf,cAAc,EACf,MAAM,mBAAmB,CAAC;AA4D3B,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,eAAe,EAAE,CA6DnB;AAgBD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,eAAe,GACtB,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoC/B;AAMD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,eAAe,EACvB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAiB/B"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Constraint Engine
3
+ *
4
+ * Validates component prop combinations against defined constraints.
5
+ */
6
+ // ============================================================================
7
+ // Condition Evaluation
8
+ // ============================================================================
9
+ function evaluateCondition(condition, props) {
10
+ for (const [key, expectedValue] of Object.entries(condition)) {
11
+ const actualValue = props[key];
12
+ // Handle array of allowed values
13
+ if (Array.isArray(expectedValue)) {
14
+ if (!expectedValue.includes(String(actualValue))) {
15
+ return false;
16
+ }
17
+ continue;
18
+ }
19
+ // Handle operator objects
20
+ if (typeof expectedValue === 'object' && expectedValue !== null && 'op' in expectedValue) {
21
+ const { op, value } = expectedValue;
22
+ const result = evaluateOperator(op, actualValue, value);
23
+ if (!result)
24
+ return false;
25
+ continue;
26
+ }
27
+ // Simple equality check
28
+ if (String(actualValue) !== String(expectedValue)) {
29
+ return false;
30
+ }
31
+ }
32
+ return true;
33
+ }
34
+ function evaluateOperator(op, actual, expected) {
35
+ switch (op) {
36
+ case 'eq': return actual === expected;
37
+ case 'neq': return actual !== expected;
38
+ case 'in': return Array.isArray(expected) && expected.includes(String(actual));
39
+ case 'nin': return Array.isArray(expected) && !expected.includes(String(actual));
40
+ case 'gt': return typeof actual === 'number' && typeof expected === 'number' && actual > expected;
41
+ case 'lt': return typeof actual === 'number' && typeof expected === 'number' && actual < expected;
42
+ case 'gte': return typeof actual === 'number' && typeof expected === 'number' && actual >= expected;
43
+ case 'lte': return typeof actual === 'number' && typeof expected === 'number' && actual <= expected;
44
+ default: return false;
45
+ }
46
+ }
47
+ export function validateConstraints(schema, usage, context) {
48
+ const issues = [];
49
+ const props = usage.props;
50
+ for (const constraint of schema.constraints) {
51
+ // Check if the condition applies
52
+ if (!evaluateCondition(constraint.when, props)) {
53
+ continue;
54
+ }
55
+ // Check forbidden props
56
+ if (constraint.forbid) {
57
+ for (const forbiddenProp of constraint.forbid) {
58
+ if (forbiddenProp in props && props[forbiddenProp] !== undefined) {
59
+ issues.push({
60
+ severity: 'error',
61
+ code: 'CONSTRAINT_FORBIDDEN_PROP',
62
+ message: constraint.message ||
63
+ `Property "${forbiddenProp}" is not allowed when ${formatCondition(constraint.when)}`,
64
+ path: context
65
+ ? `${context.file}:${context.line}:${context.column}`
66
+ : `${usage.component}`,
67
+ suggestion: `Remove "${forbiddenProp}" or change ${formatCondition(constraint.when)}`,
68
+ });
69
+ }
70
+ }
71
+ }
72
+ // Check required props
73
+ if (constraint.require) {
74
+ for (const [propName, allowedValues] of Object.entries(constraint.require)) {
75
+ const actualValue = props[propName];
76
+ if (actualValue === undefined) {
77
+ issues.push({
78
+ severity: 'error',
79
+ code: 'CONSTRAINT_MISSING_REQUIRED',
80
+ message: constraint.message ||
81
+ `Property "${propName}" is required when ${formatCondition(constraint.when)}`,
82
+ path: context
83
+ ? `${context.file}:${context.line}:${context.column}`
84
+ : `${usage.component}`,
85
+ suggestion: `Add ${propName}="${allowedValues[0]}"`,
86
+ });
87
+ }
88
+ else if (!allowedValues.includes(String(actualValue))) {
89
+ issues.push({
90
+ severity: 'error',
91
+ code: 'CONSTRAINT_INVALID_VALUE',
92
+ message: constraint.message ||
93
+ `Property "${propName}" must be one of [${allowedValues.join(', ')}] when ${formatCondition(constraint.when)}, got "${actualValue}"`,
94
+ path: context
95
+ ? `${context.file}:${context.line}:${context.column}`
96
+ : `${usage.component}`,
97
+ suggestion: `Change to ${propName}="${allowedValues[0]}"`,
98
+ });
99
+ }
100
+ }
101
+ }
102
+ }
103
+ return issues;
104
+ }
105
+ function formatCondition(condition) {
106
+ const parts = Object.entries(condition).map(([key, value]) => {
107
+ if (Array.isArray(value)) {
108
+ return `${key} is [${value.join(', ')}]`;
109
+ }
110
+ return `${key}="${value}"`;
111
+ });
112
+ return parts.join(' and ');
113
+ }
114
+ // ============================================================================
115
+ // Generate All Valid Combinations
116
+ // ============================================================================
117
+ export function generateValidCombinations(schema) {
118
+ const combinations = [];
119
+ // Get all enum properties
120
+ const enumProps = Object.entries(schema.properties)
121
+ .filter(([, def]) => def.type === 'enum')
122
+ .map(([name, def]) => ({
123
+ name,
124
+ values: def.values,
125
+ }));
126
+ // Generate cartesian product of all enum values
127
+ function generate(index, current) {
128
+ if (index >= enumProps.length) {
129
+ // Validate this combination against constraints
130
+ const mockUsage = {
131
+ component: schema.name,
132
+ props: current,
133
+ };
134
+ const issues = validateConstraints(schema, mockUsage);
135
+ if (issues.length === 0) {
136
+ combinations.push({ ...current });
137
+ }
138
+ return;
139
+ }
140
+ const { name, values } = enumProps[index];
141
+ for (const value of values) {
142
+ current[name] = value;
143
+ generate(index + 1, current);
144
+ }
145
+ }
146
+ generate(0, {});
147
+ return combinations;
148
+ }
149
+ // ============================================================================
150
+ // Suggest Valid Alternatives
151
+ // ============================================================================
152
+ export function suggestValidAlternatives(schema, invalidProps) {
153
+ const validCombos = generateValidCombinations(schema);
154
+ // Score combinations by similarity to invalid props
155
+ const scored = validCombos.map(combo => {
156
+ let score = 0;
157
+ for (const [key, value] of Object.entries(invalidProps)) {
158
+ if (combo[key] === String(value)) {
159
+ score += 1;
160
+ }
161
+ }
162
+ return { combo, score };
163
+ });
164
+ // Sort by score descending and return top matches
165
+ scored.sort((a, b) => b.score - a.score);
166
+ return scored.slice(0, 3).map(s => s.combo);
167
+ }
168
+ //# sourceMappingURL=constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.js","sourceRoot":"","sources":["../../src/validator/constraints.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Validator
3
+ *
4
+ * Validates component usage against design system schemas.
5
+ */
6
+ import type { DesignSystemConfig, ComponentSchema, ValidationResult, ComponentUsage } from '../types/index.js';
7
+ export interface ValidatorOptions {
8
+ strict?: boolean;
9
+ }
10
+ export declare function validateSchema(config: DesignSystemConfig): ValidationResult;
11
+ export interface UsageValidationContext {
12
+ file: string;
13
+ line?: number;
14
+ column?: number;
15
+ }
16
+ export declare function validateUsage(schema: ComponentSchema, usage: ComponentUsage, context?: UsageValidationContext): ValidationResult;
17
+ export interface BatchUsage {
18
+ file: string;
19
+ usages: ComponentUsage[];
20
+ }
21
+ export declare function validateAllUsages(config: DesignSystemConfig, batch: BatchUsage[], options?: ValidatorOptions): ValidationResult;
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validator/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EAEf,gBAAgB,EAChB,cAAc,EAEf,MAAM,mBAAmB,CAAC;AAO3B,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,gBAAgB,CA0G3E;AAuED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,cAAc,EACrB,OAAO,CAAC,EAAE,sBAAsB,GAC/B,gBAAgB,CAsDlB;AAmGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,EAAE,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,UAAU,EAAE,EACnB,OAAO,CAAC,EAAE,gBAAgB,GACzB,gBAAgB,CA4BlB"}