@schemyx/mcp 0.1.3 → 0.1.4
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/dist/codebase-scanner/bundle.js +182 -0
- package/dist/codebase-scanner/bundle.js.map +1 -1
- package/dist/codebase-scanner/extractors.d.ts +1 -0
- package/dist/codebase-scanner/extractors.js +52 -0
- package/dist/codebase-scanner/extractors.js.map +1 -1
- package/dist/codebase-scanner/types.d.ts +2 -1
- package/package.json +1 -1
|
@@ -183,6 +183,8 @@ function createBundle(rootPath, projectType, files) {
|
|
|
183
183
|
const nodes = [];
|
|
184
184
|
const edges = [];
|
|
185
185
|
const reviewItems = [];
|
|
186
|
+
const componentStyleContext = createComponentStyleContext(files);
|
|
187
|
+
enrichUiElementsWithComponentStyles(files, componentStyleContext);
|
|
186
188
|
const styleResolutionContext = createStyleResolutionContext(files);
|
|
187
189
|
for (const file of files) {
|
|
188
190
|
const fileSource = sourceInfo('core.files', 'high', [`path:${file.relPath}`], file);
|
|
@@ -722,6 +724,186 @@ function createBundle(rootPath, projectType, files) {
|
|
|
722
724
|
detected: detectProjectFacts(files),
|
|
723
725
|
};
|
|
724
726
|
}
|
|
727
|
+
function createComponentStyleContext(files) {
|
|
728
|
+
const byName = new Map();
|
|
729
|
+
const byHelper = new Map();
|
|
730
|
+
for (const file of files) {
|
|
731
|
+
for (const definition of file.componentStyleDefinitions) {
|
|
732
|
+
if (!byName.has(definition.name)) {
|
|
733
|
+
byName.set(definition.name, definition);
|
|
734
|
+
}
|
|
735
|
+
if (definition.styleHelper && !byHelper.has(definition.styleHelper)) {
|
|
736
|
+
byHelper.set(definition.styleHelper, definition);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
return { byName, byHelper };
|
|
741
|
+
}
|
|
742
|
+
function enrichUiElementsWithComponentStyles(files, context) {
|
|
743
|
+
for (const file of files) {
|
|
744
|
+
file.uiElements = file.uiElements.map((element) => enrichUiElementWithComponentStyles(element, context));
|
|
745
|
+
file.uiElements = file.uiElements.map((element) => ({
|
|
746
|
+
...element,
|
|
747
|
+
childSummary: element.childSummary?.map((child) => enrichUiChildWithComponentStyles(child, context)),
|
|
748
|
+
}));
|
|
749
|
+
file.classReferences = (0, utils_1.unique)([
|
|
750
|
+
...file.classReferences,
|
|
751
|
+
...file.uiElements.flatMap((element) => element.classes),
|
|
752
|
+
...file.uiElements.flatMap((element) => element.defaultClasses ?? []),
|
|
753
|
+
]).slice(0, 500);
|
|
754
|
+
file.tailwindUtilities = (0, utils_1.unique)([
|
|
755
|
+
...file.tailwindUtilities,
|
|
756
|
+
...file.uiElements.flatMap((element) => element.classes),
|
|
757
|
+
...file.uiElements.flatMap((element) => element.defaultClasses ?? []),
|
|
758
|
+
]).slice(0, 160);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
function enrichUiElementWithComponentStyles(element, context) {
|
|
762
|
+
const resolved = resolveComponentStyleClasses(element.originalTag, element.styleHelper, element.variants ?? element.styleHelperVariants, context);
|
|
763
|
+
if (!resolved.classes.length) {
|
|
764
|
+
return element;
|
|
765
|
+
}
|
|
766
|
+
const defaultClasses = mergeTailwindConflictClasses([
|
|
767
|
+
...resolved.defaultClasses,
|
|
768
|
+
...(element.defaultClasses ?? []),
|
|
769
|
+
]);
|
|
770
|
+
const classes = mergeTailwindConflictClasses([
|
|
771
|
+
...resolved.classes,
|
|
772
|
+
...element.classes,
|
|
773
|
+
...defaultClasses,
|
|
774
|
+
]);
|
|
775
|
+
return {
|
|
776
|
+
...element,
|
|
777
|
+
classes,
|
|
778
|
+
defaultClasses,
|
|
779
|
+
classGroups: (0, extractors_1.groupTailwindClasses)(classes),
|
|
780
|
+
styleHelper: element.styleHelper ?? resolved.styleHelper,
|
|
781
|
+
...(element.styleHelperVariants ?? resolved.styleHelperVariants
|
|
782
|
+
? {
|
|
783
|
+
styleHelperVariants: {
|
|
784
|
+
...(resolved.styleHelperVariants ?? {}),
|
|
785
|
+
...(element.styleHelperVariants ?? {}),
|
|
786
|
+
},
|
|
787
|
+
}
|
|
788
|
+
: {}),
|
|
789
|
+
};
|
|
790
|
+
}
|
|
791
|
+
function enrichUiChildWithComponentStyles(child, context) {
|
|
792
|
+
const resolved = resolveComponentStyleClasses(child.originalTag, child.styleHelper, child.variants ?? child.styleHelperVariants, context);
|
|
793
|
+
if (!resolved.classes.length) {
|
|
794
|
+
return child;
|
|
795
|
+
}
|
|
796
|
+
const defaultClasses = mergeTailwindConflictClasses([
|
|
797
|
+
...resolved.defaultClasses,
|
|
798
|
+
...(child.defaultClasses ?? []),
|
|
799
|
+
]);
|
|
800
|
+
const classes = mergeTailwindConflictClasses([
|
|
801
|
+
...resolved.classes,
|
|
802
|
+
...child.classes,
|
|
803
|
+
...defaultClasses,
|
|
804
|
+
]);
|
|
805
|
+
return {
|
|
806
|
+
...child,
|
|
807
|
+
classes,
|
|
808
|
+
defaultClasses,
|
|
809
|
+
styleHelper: child.styleHelper ?? resolved.styleHelper,
|
|
810
|
+
...(child.styleHelperVariants ?? resolved.styleHelperVariants
|
|
811
|
+
? {
|
|
812
|
+
styleHelperVariants: {
|
|
813
|
+
...(resolved.styleHelperVariants ?? {}),
|
|
814
|
+
...(child.styleHelperVariants ?? {}),
|
|
815
|
+
},
|
|
816
|
+
}
|
|
817
|
+
: {}),
|
|
818
|
+
};
|
|
819
|
+
}
|
|
820
|
+
function resolveComponentStyleClasses(componentName, styleHelperName, variants, context) {
|
|
821
|
+
const wrapper = componentName ? context.byName.get(componentName) : undefined;
|
|
822
|
+
const helperName = styleHelperName ?? wrapper?.styleHelper;
|
|
823
|
+
const helper = helperName ? context.byName.get(helperName) : undefined;
|
|
824
|
+
const helperClasses = helper
|
|
825
|
+
? resolveComponentDefinitionClasses(helper, variants)
|
|
826
|
+
: { classes: [], defaultClasses: [] };
|
|
827
|
+
const wrapperClasses = wrapper
|
|
828
|
+
? resolveComponentDefinitionClasses(wrapper, variants)
|
|
829
|
+
: { classes: [], defaultClasses: [] };
|
|
830
|
+
const normalizedVariants = normalizeVariantRecord(variants);
|
|
831
|
+
return {
|
|
832
|
+
classes: (0, utils_1.unique)([...wrapperClasses.classes, ...helperClasses.classes]),
|
|
833
|
+
defaultClasses: (0, utils_1.unique)([...wrapperClasses.defaultClasses, ...helperClasses.defaultClasses]),
|
|
834
|
+
...(helperName ? { styleHelper: helperName } : {}),
|
|
835
|
+
...(Object.keys(normalizedVariants).length ? { styleHelperVariants: normalizedVariants } : {}),
|
|
836
|
+
};
|
|
837
|
+
}
|
|
838
|
+
function resolveComponentDefinitionClasses(definition, variants) {
|
|
839
|
+
const normalizedVariants = normalizeVariantRecord(variants);
|
|
840
|
+
const defaultClasses = new Set(definition.baseClasses);
|
|
841
|
+
const classes = new Set(definition.classes);
|
|
842
|
+
for (const [variantName, variantMap] of Object.entries(definition.variants)) {
|
|
843
|
+
const requestedVariant = normalizedVariants[variantName] ?? definition.defaultVariants[variantName];
|
|
844
|
+
if (requestedVariant && variantMap[requestedVariant]) {
|
|
845
|
+
for (const className of variantMap[requestedVariant]) {
|
|
846
|
+
defaultClasses.add(className);
|
|
847
|
+
classes.add(className);
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
return {
|
|
852
|
+
classes: Array.from(classes),
|
|
853
|
+
defaultClasses: Array.from(defaultClasses),
|
|
854
|
+
};
|
|
855
|
+
}
|
|
856
|
+
function normalizeVariantRecord(variants) {
|
|
857
|
+
const normalized = {};
|
|
858
|
+
for (const [key, value] of Object.entries(variants ?? {})) {
|
|
859
|
+
if (typeof value === 'string' && /^[A-Za-z0-9_-]+$/.test(value)) {
|
|
860
|
+
normalized[key] = value;
|
|
861
|
+
}
|
|
862
|
+
}
|
|
863
|
+
return normalized;
|
|
864
|
+
}
|
|
865
|
+
function mergeTailwindConflictClasses(classes) {
|
|
866
|
+
const result = [];
|
|
867
|
+
const keyIndexes = new Map();
|
|
868
|
+
for (const className of classes) {
|
|
869
|
+
const key = tailwindConflictKey(className);
|
|
870
|
+
if (key && keyIndexes.has(key)) {
|
|
871
|
+
result[keyIndexes.get(key)] = className;
|
|
872
|
+
continue;
|
|
873
|
+
}
|
|
874
|
+
if (key) {
|
|
875
|
+
keyIndexes.set(key, result.length);
|
|
876
|
+
}
|
|
877
|
+
result.push(className);
|
|
878
|
+
}
|
|
879
|
+
return (0, utils_1.unique)(result);
|
|
880
|
+
}
|
|
881
|
+
function tailwindConflictKey(className) {
|
|
882
|
+
const segments = className.split(':');
|
|
883
|
+
const base = segments.pop() ?? className;
|
|
884
|
+
const prefix = segments.join(':');
|
|
885
|
+
const keyPrefix = prefix ? `${prefix}|` : '';
|
|
886
|
+
if (/^-?bg-/.test(base)) {
|
|
887
|
+
return `${keyPrefix}bg`;
|
|
888
|
+
}
|
|
889
|
+
if (/^rounded(?:-|$|\[)/.test(base)) {
|
|
890
|
+
const side = base.match(/^rounded(?:-([trbl]|tl|tr|br|bl|s|e|ss|se|ee|es))?(?:-|$|\[)/)?.[1];
|
|
891
|
+
return `${keyPrefix}rounded:${side ?? 'all'}`;
|
|
892
|
+
}
|
|
893
|
+
if (/^border-(?:\[[^\]]+\]|transparent|current|black|white|[a-z]+-\d{2,3}|[a-z][a-z0-9-]*)$/.test(base)) {
|
|
894
|
+
return `${keyPrefix}border-color`;
|
|
895
|
+
}
|
|
896
|
+
if (/^text-(?:\[[^\]]+\]|transparent|current|black|white|foreground|muted-foreground|card-foreground|primary-foreground|secondary-foreground|[a-z]+-\d{2,3})$/.test(base)) {
|
|
897
|
+
return `${keyPrefix}text-color`;
|
|
898
|
+
}
|
|
899
|
+
if (/^text-(?:xs|sm|base|lg|xl|[2-9]xl|\[[^\]]+\])$/.test(base)) {
|
|
900
|
+
return `${keyPrefix}text-size`;
|
|
901
|
+
}
|
|
902
|
+
if (/^shadow(?:-|$|\[)/.test(base)) {
|
|
903
|
+
return `${keyPrefix}shadow`;
|
|
904
|
+
}
|
|
905
|
+
return undefined;
|
|
906
|
+
}
|
|
725
907
|
function addEntry(entries, usedKeys, entry) {
|
|
726
908
|
let key = entry.key;
|
|
727
909
|
if (usedKeys.has(key)) {
|