@uicontract/parser-react 0.1.0 → 0.2.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.
- package/README.md +2 -2
- package/dist/context-extractor.d.ts +1 -1
- package/dist/context-extractor.d.ts.map +1 -1
- package/dist/context-extractor.js +52 -13
- package/dist/context-extractor.js.map +1 -1
- package/dist/element-visitor.d.ts +2 -2
- package/dist/element-visitor.d.ts.map +1 -1
- package/dist/element-visitor.js +28 -7
- package/dist/element-visitor.js.map +1 -1
- package/dist/file-discovery.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -39,9 +39,9 @@ Supported patterns: JSX, TSX, `forwardRef`, `memo`, HOCs, dynamic imports, condi
|
|
|
39
39
|
|
|
40
40
|
Unexpected syntax produces a `warning` entry rather than throwing, so partial results are always returned.
|
|
41
41
|
|
|
42
|
-
## Part of
|
|
42
|
+
## Part of UI Contracts
|
|
43
43
|
|
|
44
|
-
This package is part of [
|
|
44
|
+
This package is part of [UI Contracts](https://github.com/sherifkozman/uicontract) - making web app UIs machine-readable.
|
|
45
45
|
|
|
46
46
|
## License
|
|
47
47
|
|
|
@@ -21,7 +21,7 @@ export declare function extractRoute(filePath: string, projectRoot: string): str
|
|
|
21
21
|
* Priority: aria-label > children text > placeholder
|
|
22
22
|
*/
|
|
23
23
|
export declare function extractLabel(openingPath: NodePath<t.JSXOpeningElement>): string | null;
|
|
24
|
-
/** Extract the event handler name from event props like onClick, onSubmit, etc. */
|
|
24
|
+
/** Extract the event handler name from event props like onClick, onSubmit, action, etc. */
|
|
25
25
|
export declare function extractHandler(openingPath: NodePath<t.JSXOpeningElement>): string | null;
|
|
26
26
|
/** Collect all data-* attributes from a JSX opening element. */
|
|
27
27
|
export declare function extractDataAttributes(openingPath: NodePath<t.JSXOpeningElement>): Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-extractor.d.ts","sourceRoot":"","sources":["../src/context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAMlC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CA4DtE;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"context-extractor.d.ts","sourceRoot":"","sources":["../src/context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAMlC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CA4DtE;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA0BjF;AAwDD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,MAAM,GAAG,IAAI,CAyBtF;AAgCD,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,MAAM,GAAG,IAAI,CAgCxF;AAMD,gEAAgE;AAChE,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAYxG;AAMD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAkBzD;AAID;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAgBrD"}
|
|
@@ -83,7 +83,13 @@ export function extractRoute(filePath, projectRoot) {
|
|
|
83
83
|
if (dirPart === '.') {
|
|
84
84
|
return '/';
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
// Strip Next.js App Router route groups: (groupName) segments are layout
|
|
87
|
+
// groups that don't appear in the URL.
|
|
88
|
+
const segments = dirPart.split('/').filter((s) => !/^\(.*\)$/.test(s));
|
|
89
|
+
if (segments.length === 0) {
|
|
90
|
+
return '/';
|
|
91
|
+
}
|
|
92
|
+
return '/' + segments.join('/');
|
|
87
93
|
}
|
|
88
94
|
// ---------------------------------------------------------------------------
|
|
89
95
|
// Label extraction
|
|
@@ -121,7 +127,7 @@ function findAttr(node, name) {
|
|
|
121
127
|
}
|
|
122
128
|
return undefined;
|
|
123
129
|
}
|
|
124
|
-
/** Extract visible text from JSX children (shallow
|
|
130
|
+
/** Extract visible text from JSX children (shallow - only literals). */
|
|
125
131
|
function childrenText(jsxElement) {
|
|
126
132
|
const texts = [];
|
|
127
133
|
for (const child of jsxElement.children) {
|
|
@@ -149,7 +155,7 @@ export function extractLabel(openingPath) {
|
|
|
149
155
|
if (val)
|
|
150
156
|
return val;
|
|
151
157
|
}
|
|
152
|
-
// 2. children text
|
|
158
|
+
// 2. children text - need access to the parent JSXElement
|
|
153
159
|
const parent = openingPath.parent;
|
|
154
160
|
if (t.isJSXElement(parent)) {
|
|
155
161
|
const text = childrenText(parent);
|
|
@@ -168,9 +174,34 @@ export function extractLabel(openingPath) {
|
|
|
168
174
|
// ---------------------------------------------------------------------------
|
|
169
175
|
// Handler extraction
|
|
170
176
|
// ---------------------------------------------------------------------------
|
|
171
|
-
/**
|
|
177
|
+
/**
|
|
178
|
+
* Extract a handler name from a JSX expression value.
|
|
179
|
+
* Handles identifiers, member expressions, and simple inline arrows.
|
|
180
|
+
*/
|
|
181
|
+
function extractHandlerName(expr) {
|
|
182
|
+
// onClick={handleFoo}
|
|
183
|
+
if (t.isIdentifier(expr)) {
|
|
184
|
+
return expr.name;
|
|
185
|
+
}
|
|
186
|
+
// onClick={this.handleFoo} or onClick={obj.method}
|
|
187
|
+
if (t.isMemberExpression(expr) && t.isIdentifier(expr.property)) {
|
|
188
|
+
return expr.property.name;
|
|
189
|
+
}
|
|
190
|
+
// onClick={() => doThing()} or onClick={() => obj.method())
|
|
191
|
+
if (t.isArrowFunctionExpression(expr) && !t.isBlockStatement(expr.body)) {
|
|
192
|
+
// Expression-body arrow: extract the called function name
|
|
193
|
+
if (t.isCallExpression(expr.body)) {
|
|
194
|
+
return extractHandlerName(expr.body.callee);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
/** Extract the event handler name from event props like onClick, onSubmit, action, etc. */
|
|
172
200
|
export function extractHandler(openingPath) {
|
|
173
201
|
const eventProps = ['onClick', 'onSubmit', 'onChange', 'onInput', 'onFocus', 'onBlur', 'onKeyDown', 'onKeyUp', 'onKeyPress'];
|
|
202
|
+
// Server Actions: <form action={serverAction}> is a valid form interaction pattern
|
|
203
|
+
const actionProps = ['action'];
|
|
204
|
+
// First pass: event handler props (higher priority)
|
|
174
205
|
for (const attr of openingPath.node.attributes) {
|
|
175
206
|
if (!t.isJSXAttribute(attr))
|
|
176
207
|
continue;
|
|
@@ -180,15 +211,23 @@ export function extractHandler(openingPath) {
|
|
|
180
211
|
if (!t.isJSXExpressionContainer(attr.value))
|
|
181
212
|
continue;
|
|
182
213
|
const expr = attr.value.expression;
|
|
183
|
-
|
|
184
|
-
if (
|
|
185
|
-
return
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
214
|
+
const handlerName = extractHandlerName(expr);
|
|
215
|
+
if (handlerName)
|
|
216
|
+
return handlerName;
|
|
217
|
+
}
|
|
218
|
+
// Second pass: action prop (lower priority, only if no event handler found)
|
|
219
|
+
for (const attr of openingPath.node.attributes) {
|
|
220
|
+
if (!t.isJSXAttribute(attr))
|
|
221
|
+
continue;
|
|
222
|
+
const name = attrName(attr);
|
|
223
|
+
if (!name || !actionProps.includes(name))
|
|
224
|
+
continue;
|
|
225
|
+
if (!t.isJSXExpressionContainer(attr.value))
|
|
226
|
+
continue;
|
|
227
|
+
const expr = attr.value.expression;
|
|
228
|
+
const handlerName = extractHandlerName(expr);
|
|
229
|
+
if (handlerName)
|
|
230
|
+
return handlerName;
|
|
192
231
|
}
|
|
193
232
|
return null;
|
|
194
233
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-extractor.js","sourceRoot":"","sources":["../src/context-extractor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"context-extractor.js","sourceRoot":"","sources":["../src/context-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,8EAA8E;AAC9E,iBAAiB;AACjB,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAkB;IACrD,IAAI,OAAO,GAAoB,QAAQ,CAAC,UAAU,CAAC;IAEnD,OAAO,OAAO,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QAE1B,+DAA+D;QAC/D,IAAI,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,8DAA8D;QAC9D,kCAAkC;QAClC,IACE,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;YACtC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,EACjC,CAAC;YACD,OAAO,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;QAChC,CAAC;QAED,6EAA6E;QAC7E,+CAA+C;QAC/C,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC5C,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,2EAA2E;QAC3E,+CAA+C;QAC/C,iDAAiD;QACjD,IACE,CAAC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACnE,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,EAClC,CAAC;YACD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;YACpC,IAAI,QAAQ,IAAI,CAAC,CAAC,oBAAoB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC9F,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;YACjC,CAAC;YACD,0DAA0D;YAC1D,IAAI,QAAQ,EAAE,UAAU,IAAI,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzE,MAAM,aAAa,GAAG,QAAQ,CAAC,UAAU,CAAC;gBAC1C,IAAI,aAAa,IAAI,CAAC,CAAC,oBAAoB,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC7G,OAAO,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,uEAAuE;QACvE,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;QACtB,CAAC;QAED,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,WAAmB;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAErE,sCAAsC;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;QACjH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;QACpB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,yEAAyE;IACzE,uCAAuC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,sEAAsE;AACtE,SAAS,kBAAkB,CAAC,IAAoB;IAC9C,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,IAAI,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QACD,IAAI,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,KAAK,EAAE,KAAK,CAAC,MAAM,IAAI,KAAK,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8CAA8C;AAC9C,SAAS,QAAQ,CAAC,IAA2C;IAC3D,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAC1D,SAAS,QAAQ,CAAC,IAAyB,EAAE,IAAY;IACvD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACtF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,wEAAwE;AACxE,SAAS,YAAY,CAAC,UAAwB;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;aAAM,IAAI,CAAC,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;YACpF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAA0C;IACrE,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;IAE9B,gBAAgB;IAChB,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/C,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IAED,0DAA0D;IAC1D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAClC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IAED,iBAAiB;IACjB,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAClD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,kBAAkB,CAAC,IAAyC;IACnE,sBAAsB;IACtB,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,mDAAmD;IACnD,IAAI,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;IAC5B,CAAC;IAED,4DAA4D;IAC5D,IAAI,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,0DAA0D;QAC1D,IAAI,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAsB,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,WAA0C;IACvE,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;IAC7H,mFAAmF;IACnF,MAAM,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/B,oDAAoD;IACpD,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAElD,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAEnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;IACtC,CAAC;IAED,4EAA4E;IAC5E,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAS;QAEnD,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS;QACtD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QAEnC,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC;IACtC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,8EAA8E;AAC9E,4BAA4B;AAC5B,8EAA8E;AAE9E,gEAAgE;AAChE,MAAM,UAAU,qBAAqB,CAAC,WAA0C;IAC9E,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS;QACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,SAAS;QACjD,MAAM,GAAG,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,QAAkB;IAC9C,IAAI,OAAO,GAAoB,QAAQ,CAAC,UAAU,CAAC;IACnD,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;YAC9G,OAAO,IAAI,CAAC;QACd,CAAC;QACD,8BAA8B;QAC9B,IACE,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC;YACpC,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,EACzC,CAAC;YACD,MAAM;QACR,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAExG;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAkB;IAC1C,IAAI,OAAO,GAAoB,QAAQ,CAAC,UAAU,CAAC;IACnD,OAAO,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;YACnC,IAAI,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpE,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAAE,OAAO,IAAI,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,IAAI,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM;QACR,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AST visitor that discovers interactive JSX elements in a parsed file.
|
|
3
3
|
*/
|
|
4
|
-
import type { RawElement } from '@uicontract/core';
|
|
4
|
+
import type { RawElement, InteractiveElementType } from '@uicontract/core';
|
|
5
5
|
/** Parse a React/JSX/TS source file and return discovered interactive elements. */
|
|
6
|
-
export declare function parseFile(source: string, absoluteFilePath: string, projectRoot: string): RawElement[];
|
|
6
|
+
export declare function parseFile(source: string, absoluteFilePath: string, projectRoot: string, componentMap?: Record<string, InteractiveElementType>): RawElement[];
|
|
7
7
|
//# sourceMappingURL=element-visitor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-visitor.d.ts","sourceRoot":"","sources":["../src/element-visitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"element-visitor.d.ts","sourceRoot":"","sources":["../src/element-visitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,sBAAsB,EAAgB,MAAM,kBAAkB,CAAC;AA+DzF,mFAAmF;AACnF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,GACpD,UAAU,EAAE,CAwFd"}
|
package/dist/element-visitor.js
CHANGED
|
@@ -52,7 +52,7 @@ function hasEventHandlerProp(node) {
|
|
|
52
52
|
return false;
|
|
53
53
|
}
|
|
54
54
|
/** Parse a React/JSX/TS source file and return discovered interactive elements. */
|
|
55
|
-
export function parseFile(source, absoluteFilePath, projectRoot) {
|
|
55
|
+
export function parseFile(source, absoluteFilePath, projectRoot, componentMap) {
|
|
56
56
|
const ast = parse(source, {
|
|
57
57
|
sourceType: 'module',
|
|
58
58
|
plugins: [
|
|
@@ -64,19 +64,39 @@ export function parseFile(source, absoluteFilePath, projectRoot) {
|
|
|
64
64
|
'nullishCoalescingOperator',
|
|
65
65
|
],
|
|
66
66
|
});
|
|
67
|
+
// Detect 'use client' / 'use server' directive at file top.
|
|
68
|
+
// Babel parses these as Directive nodes (like 'use strict'), not ExpressionStatements.
|
|
69
|
+
let directive = null;
|
|
70
|
+
for (const dir of ast.program.directives) {
|
|
71
|
+
const val = dir.value.value;
|
|
72
|
+
if (val === 'use client' || val === 'use server') {
|
|
73
|
+
directive = val;
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
67
77
|
const elements = [];
|
|
68
78
|
traverse(ast, {
|
|
69
79
|
JSXOpeningElement(nodePath) {
|
|
70
80
|
const nameNode = nodePath.node.name;
|
|
71
|
-
// Only handle plain
|
|
81
|
+
// Only handle plain JSX identifiers (not member expressions like Foo.Bar)
|
|
72
82
|
if (!t.isJSXIdentifier(nameNode))
|
|
73
83
|
return;
|
|
74
84
|
const tagName = nameNode.name;
|
|
75
|
-
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
// Check componentMap for uppercase (custom component) tags
|
|
86
|
+
const mappedType = componentMap?.[tagName];
|
|
87
|
+
let elementType;
|
|
88
|
+
if (mappedType) {
|
|
89
|
+
// Custom component mapped to a native element type
|
|
90
|
+
elementType = mappedType;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Standard native element handling
|
|
94
|
+
const isAlwaysInteractive = ALWAYS_INTERACTIVE.has(tagName);
|
|
95
|
+
const isGenericWithHandler = GENERIC_INTERACTIVE_TYPES.has(tagName) && hasEventHandlerProp(nodePath.node);
|
|
96
|
+
if (!isAlwaysInteractive && !isGenericWithHandler)
|
|
97
|
+
return;
|
|
98
|
+
elementType = toInteractiveType(tagName);
|
|
99
|
+
}
|
|
80
100
|
if (!elementType)
|
|
81
101
|
return;
|
|
82
102
|
const loc = nodePath.node.loc;
|
|
@@ -104,6 +124,7 @@ export function parseFile(source, absoluteFilePath, projectRoot) {
|
|
|
104
124
|
attributes,
|
|
105
125
|
conditional,
|
|
106
126
|
dynamic,
|
|
127
|
+
directive,
|
|
107
128
|
});
|
|
108
129
|
},
|
|
109
130
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"element-visitor.js","sourceRoot":"","sources":["../src/element-visitor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,SAAS,MAAM,iBAAiB,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,SAAS,GACV,MAAM,wBAAwB,CAAC;AAEhC,sEAAsE;AACtE,MAAM,QAAQ,GAAG,CAAC,SAAS,CAAC,OAAO,IAAI,SAAS,CAA6B,CAAC;AAE9E,mEAAmE;AACnE,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAS;IACzC,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,UAAU;IACV,GAAG;IACH,MAAM;CACP,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS;IAC1C,SAAS;IACT,UAAU;IACV,UAAU;IACV,SAAS;IACT,SAAS;IACT,QAAQ;IACR,WAAW;IACX,SAAS;IACT,YAAY;CACb,CAAC,CAAC;AAEH,wFAAwF;AACxF,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAEnF,+CAA+C;AAC/C,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAS;IAC1C,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM;IACpD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO;CAC9B,CAAC,CAAC;AAEH,SAAS,iBAAiB,CAAC,OAAe;IACxC,IAAI,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,OAAiC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uEAAuE;AACvE,SAAS,mBAAmB,CAAC,IAAyB;IACpD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,gBAAwB,EACxB,WAAmB;
|
|
1
|
+
{"version":3,"file":"element-visitor.js","sourceRoot":"","sources":["../src/element-visitor.ts"],"names":[],"mappings":"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"}
|
package/dist/file-discovery.js
CHANGED
|
@@ -71,7 +71,7 @@ async function walkDir(dir, rootDir, include, exclude, maxDepth, currentDepth, r
|
|
|
71
71
|
entries = await fs.readdir(dir, { withFileTypes: true });
|
|
72
72
|
}
|
|
73
73
|
catch {
|
|
74
|
-
// Unreadable directory
|
|
74
|
+
// Unreadable directory - skip silently
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
for (const entry of entries) {
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @uicontract/parser-react
|
|
2
|
+
* @uicontract/parser-react - React/JSX parser for UIC.
|
|
3
3
|
* Implements the Parser interface from @uicontract/core.
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'node:fs/promises';
|
|
@@ -23,7 +23,7 @@ async function detectReact(dir) {
|
|
|
23
23
|
return true;
|
|
24
24
|
}
|
|
25
25
|
catch {
|
|
26
|
-
// No package.json or unreadable
|
|
26
|
+
// No package.json or unreadable - fall through to file check
|
|
27
27
|
}
|
|
28
28
|
// Fallback: any .tsx or .jsx file present
|
|
29
29
|
try {
|
|
@@ -49,7 +49,7 @@ export class ReactParser {
|
|
|
49
49
|
for (const file of files) {
|
|
50
50
|
try {
|
|
51
51
|
const source = await fs.readFile(file, 'utf-8');
|
|
52
|
-
const fileElements = parseFile(source, file, dir);
|
|
52
|
+
const fileElements = parseFile(source, file, dir, options.componentMap);
|
|
53
53
|
elements.push(...fileElements);
|
|
54
54
|
}
|
|
55
55
|
catch (error) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,kEAAkE;AAClE,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;QAC/C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;QACvD,MAAM,IAAI,GAAG;YACX,GAAG,CAAC,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvG,GAAG,CAAC,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChH,GAAG,CAAC,OAAO,GAAG,CAAC,kBAAkB,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACpH,CAAC;QACF,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC3F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,+CAA+C;AAC/C,MAAM,OAAO,WAAW;IACb,SAAS,GAAG,OAAO,CAAC;IAE7B,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,OAAsB;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAiB,EAAE,CAAC;QAClC,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEhD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uicontract/parser-react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "React and Next.js parser for discovering interactive UI elements",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@babel/parser": "^7.29.0",
|
|
46
46
|
"@babel/traverse": "^7.29.0",
|
|
47
47
|
"@babel/types": "^7.29.0",
|
|
48
|
-
"@uicontract/core": "0.
|
|
48
|
+
"@uicontract/core": "0.2.0"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
51
|
"@types/babel__traverse": "^7.28.0"
|