@rose42/feedback-capture 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.
- package/LICENSE +21 -0
- package/README.md +107 -0
- package/dist/clipboard.d.ts +7 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +33 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/context.d.ts +10 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +7 -0
- package/dist/context.js.map +1 -0
- package/dist/crop.d.ts +61 -0
- package/dist/crop.d.ts.map +1 -0
- package/dist/crop.js +112 -0
- package/dist/crop.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/comment.d.ts +11 -0
- package/dist/plugins/comment.d.ts.map +1 -0
- package/dist/plugins/comment.js +14 -0
- package/dist/plugins/comment.js.map +1 -0
- package/dist/plugins/consoleLogs.d.ts +14 -0
- package/dist/plugins/consoleLogs.d.ts.map +1 -0
- package/dist/plugins/consoleLogs.js +98 -0
- package/dist/plugins/consoleLogs.js.map +1 -0
- package/dist/plugins/core.d.ts +24 -0
- package/dist/plugins/core.d.ts.map +1 -0
- package/dist/plugins/core.js +62 -0
- package/dist/plugins/core.js.map +1 -0
- package/dist/plugins/elementTarget.d.ts +156 -0
- package/dist/plugins/elementTarget.d.ts.map +1 -0
- package/dist/plugins/elementTarget.js +537 -0
- package/dist/plugins/elementTarget.js.map +1 -0
- package/dist/plugins/frameBurst.d.ts +60 -0
- package/dist/plugins/frameBurst.d.ts.map +1 -0
- package/dist/plugins/frameBurst.js +260 -0
- package/dist/plugins/frameBurst.js.map +1 -0
- package/dist/plugins/index.d.ts +17 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +9 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/pageContext.d.ts +13 -0
- package/dist/plugins/pageContext.d.ts.map +1 -0
- package/dist/plugins/pageContext.js +23 -0
- package/dist/plugins/pageContext.js.map +1 -0
- package/dist/plugins/screenshot.d.ts +34 -0
- package/dist/plugins/screenshot.d.ts.map +1 -0
- package/dist/plugins/screenshot.js +183 -0
- package/dist/plugins/screenshot.js.map +1 -0
- package/dist/plugins/version.d.ts +16 -0
- package/dist/plugins/version.d.ts.map +1 -0
- package/dist/plugins/version.js +21 -0
- package/dist/plugins/version.js.map +1 -0
- package/dist/session.d.ts +19 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +18 -0
- package/dist/session.js.map +1 -0
- package/dist/source/adapters/compose.d.ts +7 -0
- package/dist/source/adapters/compose.d.ts.map +1 -0
- package/dist/source/adapters/compose.js +21 -0
- package/dist/source/adapters/compose.js.map +1 -0
- package/dist/source/adapters/createSourceResolver.d.ts +28 -0
- package/dist/source/adapters/createSourceResolver.d.ts.map +1 -0
- package/dist/source/adapters/createSourceResolver.js +59 -0
- package/dist/source/adapters/createSourceResolver.js.map +1 -0
- package/dist/source/adapters/detect.d.ts +22 -0
- package/dist/source/adapters/detect.d.ts.map +1 -0
- package/dist/source/adapters/detect.js +133 -0
- package/dist/source/adapters/detect.js.map +1 -0
- package/dist/source/adapters/index.d.ts +18 -0
- package/dist/source/adapters/index.d.ts.map +1 -0
- package/dist/source/adapters/index.js +10 -0
- package/dist/source/adapters/index.js.map +1 -0
- package/dist/source/adapters/locator.d.ts +14 -0
- package/dist/source/adapters/locator.d.ts.map +1 -0
- package/dist/source/adapters/locator.js +69 -0
- package/dist/source/adapters/locator.js.map +1 -0
- package/dist/source/adapters/next.d.ts +46 -0
- package/dist/source/adapters/next.d.ts.map +1 -0
- package/dist/source/adapters/next.js +124 -0
- package/dist/source/adapters/next.js.map +1 -0
- package/dist/source/adapters/nextFlight.d.ts +19 -0
- package/dist/source/adapters/nextFlight.d.ts.map +1 -0
- package/dist/source/adapters/nextFlight.js +80 -0
- package/dist/source/adapters/nextFlight.js.map +1 -0
- package/dist/source/adapters/qwik.d.ts +16 -0
- package/dist/source/adapters/qwik.d.ts.map +1 -0
- package/dist/source/adapters/qwik.js +49 -0
- package/dist/source/adapters/qwik.js.map +1 -0
- package/dist/source/adapters/react.d.ts +46 -0
- package/dist/source/adapters/react.d.ts.map +1 -0
- package/dist/source/adapters/react.js +201 -0
- package/dist/source/adapters/react.js.map +1 -0
- package/dist/source/adapters/svelte.d.ts +23 -0
- package/dist/source/adapters/svelte.d.ts.map +1 -0
- package/dist/source/adapters/svelte.js +64 -0
- package/dist/source/adapters/svelte.js.map +1 -0
- package/dist/source/adapters/vue.d.ts +27 -0
- package/dist/source/adapters/vue.d.ts.map +1 -0
- package/dist/source/adapters/vue.js +76 -0
- package/dist/source/adapters/vue.js.map +1 -0
- package/dist/source/locateJsx.d.ts +25 -0
- package/dist/source/locateJsx.d.ts.map +1 -0
- package/dist/source/locateJsx.js +67 -0
- package/dist/source/locateJsx.js.map +1 -0
- package/dist/source/rankSourceHierarchy.d.ts +25 -0
- package/dist/source/rankSourceHierarchy.d.ts.map +1 -0
- package/dist/source/rankSourceHierarchy.js +60 -0
- package/dist/source/rankSourceHierarchy.js.map +1 -0
- package/dist/source/reactSourceResolver.d.ts +3 -0
- package/dist/source/reactSourceResolver.d.ts.map +1 -0
- package/dist/source/reactSourceResolver.js +3 -0
- package/dist/source/reactSourceResolver.js.map +1 -0
- package/dist/source/sourceMap.d.ts +41 -0
- package/dist/source/sourceMap.d.ts.map +1 -0
- package/dist/source/sourceMap.js +235 -0
- package/dist/source/sourceMap.js.map +1 -0
- package/dist/transport.d.ts +13 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +37 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { normalizeSourcePath } from "../sourceMap.js";
|
|
2
|
+
function readMeta(el) {
|
|
3
|
+
const record = el;
|
|
4
|
+
const meta = record.__svelte_meta;
|
|
5
|
+
if (meta && typeof meta === "object")
|
|
6
|
+
return meta;
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
function findMetaChain(el, getMeta, maxOwners) {
|
|
10
|
+
const chain = [];
|
|
11
|
+
let current = el;
|
|
12
|
+
const seen = new Set();
|
|
13
|
+
while (current && chain.length < maxOwners + 1) {
|
|
14
|
+
if (seen.has(current))
|
|
15
|
+
break;
|
|
16
|
+
seen.add(current);
|
|
17
|
+
const meta = getMeta(current);
|
|
18
|
+
if (meta?.loc?.file)
|
|
19
|
+
chain.push(meta);
|
|
20
|
+
current = current.parentElement;
|
|
21
|
+
}
|
|
22
|
+
return chain;
|
|
23
|
+
}
|
|
24
|
+
function locationFromMeta(meta) {
|
|
25
|
+
const file = meta.loc?.file?.trim();
|
|
26
|
+
if (!file)
|
|
27
|
+
return undefined;
|
|
28
|
+
const line = meta.loc?.line && meta.loc.line > 0 ? meta.loc.line : 1;
|
|
29
|
+
const column = meta.loc?.column;
|
|
30
|
+
const name = meta.component?.name;
|
|
31
|
+
return {
|
|
32
|
+
fileName: normalizeSourcePath(file),
|
|
33
|
+
line,
|
|
34
|
+
...(column != null && column >= 0 ? { column } : {}),
|
|
35
|
+
...(name ? { name } : {}),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Svelte DEV enrichment via `__svelte_meta` (present when compiled with `dev: true`).
|
|
40
|
+
* File/line often already point at the `.svelte` source — maps are optional.
|
|
41
|
+
*/
|
|
42
|
+
export function createSvelteSourceResolver(options = {}) {
|
|
43
|
+
const maxOwners = options.maxOwners ?? 5;
|
|
44
|
+
const getMeta = options.getMeta ?? readMeta;
|
|
45
|
+
return async (el) => {
|
|
46
|
+
const chain = findMetaChain(el, getMeta, maxOwners);
|
|
47
|
+
if (chain.length === 0)
|
|
48
|
+
return undefined;
|
|
49
|
+
const component = locationFromMeta(chain[0]);
|
|
50
|
+
const owners = [];
|
|
51
|
+
for (const meta of chain.slice(1, maxOwners + 1)) {
|
|
52
|
+
const loc = locationFromMeta(meta);
|
|
53
|
+
if (loc)
|
|
54
|
+
owners.push(loc);
|
|
55
|
+
}
|
|
56
|
+
if (!component && owners.length === 0)
|
|
57
|
+
return undefined;
|
|
58
|
+
return {
|
|
59
|
+
...(component ? { component } : {}),
|
|
60
|
+
...(owners.length > 0 ? { owners } : {}),
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=svelte.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"svelte.js","sourceRoot":"","sources":["../../../src/source/adapters/svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ResolveElementSource } from "../../plugins/elementTarget.js";
|
|
2
|
+
type VueComponentInstance = {
|
|
3
|
+
type?: {
|
|
4
|
+
name?: string;
|
|
5
|
+
__name?: string;
|
|
6
|
+
__file?: string;
|
|
7
|
+
displayName?: string;
|
|
8
|
+
};
|
|
9
|
+
parent?: VueComponentInstance | null;
|
|
10
|
+
vnode?: {
|
|
11
|
+
type?: unknown;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type VueSourceResolverOptions = {
|
|
15
|
+
/** Max parent components to attach as owners (default: 5). */
|
|
16
|
+
maxOwners?: number;
|
|
17
|
+
/** Override instance lookup (tests). */
|
|
18
|
+
getInstance?: (el: Element) => VueComponentInstance | null;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Vue 3 (and Vue 2 `__vue__`) source enrichment via `__vueParentComponent` + `__file`.
|
|
22
|
+
* File paths usually come from `@vitejs/plugin-vue` without needing sourcemaps;
|
|
23
|
+
* line stays `1` unless a future stack/map refine is added.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createVueSourceResolver(options?: VueSourceResolverOptions): ResolveElementSource;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/vue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAGxC,KAAK,oBAAoB,GAAG;IAC1B,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,oBAAoB,GAAG,IAAI,CAAC;CAC5D,CAAC;AA+CF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,GAAE,wBAA6B,GACrC,oBAAoB,CAsBtB"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { normalizeSourcePath } from "../sourceMap.js";
|
|
2
|
+
function readVueInstance(el) {
|
|
3
|
+
let current = el;
|
|
4
|
+
while (current) {
|
|
5
|
+
const record = current;
|
|
6
|
+
const inst = record.__vueParentComponent;
|
|
7
|
+
if (inst && typeof inst === "object")
|
|
8
|
+
return inst;
|
|
9
|
+
// Vue 2
|
|
10
|
+
const vue2 = record.__vue__;
|
|
11
|
+
if (vue2 && typeof vue2 === "object")
|
|
12
|
+
return vue2;
|
|
13
|
+
current = current.parentElement;
|
|
14
|
+
}
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
function componentName(inst) {
|
|
18
|
+
const t = inst.type;
|
|
19
|
+
if (!t)
|
|
20
|
+
return undefined;
|
|
21
|
+
return t.displayName || t.name || t.__name || undefined;
|
|
22
|
+
}
|
|
23
|
+
function locationFromInstance(inst) {
|
|
24
|
+
const file = inst.type?.__file?.trim();
|
|
25
|
+
if (!file)
|
|
26
|
+
return undefined;
|
|
27
|
+
const name = componentName(inst);
|
|
28
|
+
return {
|
|
29
|
+
fileName: normalizeSourcePath(file),
|
|
30
|
+
// Vite Vue SFC `__file` is the module path; exact JSX/template line is rarely present.
|
|
31
|
+
line: 1,
|
|
32
|
+
...(name ? { name } : {}),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function ownerChain(inst, maxOwners) {
|
|
36
|
+
const chain = [];
|
|
37
|
+
let current = inst.parent ?? null;
|
|
38
|
+
const seen = new Set();
|
|
39
|
+
while (current && chain.length < maxOwners) {
|
|
40
|
+
if (seen.has(current))
|
|
41
|
+
break;
|
|
42
|
+
seen.add(current);
|
|
43
|
+
if (current.type?.__file || componentName(current))
|
|
44
|
+
chain.push(current);
|
|
45
|
+
current = current.parent ?? null;
|
|
46
|
+
}
|
|
47
|
+
return chain;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Vue 3 (and Vue 2 `__vue__`) source enrichment via `__vueParentComponent` + `__file`.
|
|
51
|
+
* File paths usually come from `@vitejs/plugin-vue` without needing sourcemaps;
|
|
52
|
+
* line stays `1` unless a future stack/map refine is added.
|
|
53
|
+
*/
|
|
54
|
+
export function createVueSourceResolver(options = {}) {
|
|
55
|
+
const maxOwners = options.maxOwners ?? 5;
|
|
56
|
+
const getInstance = options.getInstance ?? readVueInstance;
|
|
57
|
+
return async (el) => {
|
|
58
|
+
const inst = getInstance(el);
|
|
59
|
+
if (!inst)
|
|
60
|
+
return undefined;
|
|
61
|
+
const component = locationFromInstance(inst);
|
|
62
|
+
const owners = [];
|
|
63
|
+
for (const owner of ownerChain(inst, maxOwners)) {
|
|
64
|
+
const loc = locationFromInstance(owner);
|
|
65
|
+
if (loc)
|
|
66
|
+
owners.push(loc);
|
|
67
|
+
}
|
|
68
|
+
if (!component && owners.length === 0)
|
|
69
|
+
return undefined;
|
|
70
|
+
return {
|
|
71
|
+
...(component ? { component } : {}),
|
|
72
|
+
...(owners.length > 0 ? { owners } : {}),
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vue.js","sourceRoot":"","sources":["../../../src/source/adapters/vue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-effort line number for a DOM node inside a JSX/TSX source file.
|
|
3
|
+
* Used when Flight only gives a page file (no fiber / sourcemap for RSC HTML).
|
|
4
|
+
*/
|
|
5
|
+
export type LocateJsxHints = {
|
|
6
|
+
tagName: string;
|
|
7
|
+
/** Space-separated class names from the element. */
|
|
8
|
+
className?: string;
|
|
9
|
+
/** Optional text / attribute hints (href, etc.). */
|
|
10
|
+
textSnippet?: string;
|
|
11
|
+
href?: string;
|
|
12
|
+
};
|
|
13
|
+
export type LocateJsxResult = {
|
|
14
|
+
line: number;
|
|
15
|
+
column: number;
|
|
16
|
+
score: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Find the best JSX opening-tag line for `hints` inside `source`.
|
|
20
|
+
* Scores class-name overlap and optional href/text presence in a small window.
|
|
21
|
+
*/
|
|
22
|
+
export declare function locateJsxInSource(source: string, hints: LocateJsxHints): LocateJsxResult | undefined;
|
|
23
|
+
/** Read `class` from an Element as a space-separated string. */
|
|
24
|
+
export declare function classNameOf(el: Element): string | undefined;
|
|
25
|
+
//# sourceMappingURL=locateJsx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locateJsx.d.ts","sourceRoot":"","sources":["../../src/source/locateJsx.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAUF;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GACpB,eAAe,GAAG,SAAS,CA6C7B;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAG3D"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Best-effort line number for a DOM node inside a JSX/TSX source file.
|
|
3
|
+
* Used when Flight only gives a page file (no fiber / sourcemap for RSC HTML).
|
|
4
|
+
*/
|
|
5
|
+
function tokenizeClasses(className) {
|
|
6
|
+
if (!className)
|
|
7
|
+
return [];
|
|
8
|
+
return className
|
|
9
|
+
.split(/\s+/)
|
|
10
|
+
.map((c) => c.trim())
|
|
11
|
+
.filter((c) => c.length > 0 && c.length < 80);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Find the best JSX opening-tag line for `hints` inside `source`.
|
|
15
|
+
* Scores class-name overlap and optional href/text presence in a small window.
|
|
16
|
+
*/
|
|
17
|
+
export function locateJsxInSource(source, hints) {
|
|
18
|
+
const tag = hints.tagName.trim().toLowerCase();
|
|
19
|
+
if (!tag || !/^[a-z][a-z0-9-]*$/.test(tag))
|
|
20
|
+
return undefined;
|
|
21
|
+
const classes = tokenizeClasses(hints.className);
|
|
22
|
+
const lines = source.split(/\r?\n/);
|
|
23
|
+
const tagRe = new RegExp(`<${tag}(?:\\s|>|/)`, "i");
|
|
24
|
+
let best;
|
|
25
|
+
for (let i = 0; i < lines.length; i += 1) {
|
|
26
|
+
const line = lines[i] ?? "";
|
|
27
|
+
if (!tagRe.test(line))
|
|
28
|
+
continue;
|
|
29
|
+
// Window covering multi-line JSX opening tags.
|
|
30
|
+
const windowText = lines.slice(i, Math.min(lines.length, i + 8)).join("\n");
|
|
31
|
+
let score = 1;
|
|
32
|
+
for (const cls of classes) {
|
|
33
|
+
if (windowText.includes(cls))
|
|
34
|
+
score += 3;
|
|
35
|
+
}
|
|
36
|
+
if (hints.href) {
|
|
37
|
+
const href = hints.href.trim();
|
|
38
|
+
if (href && windowText.includes(href))
|
|
39
|
+
score += 5;
|
|
40
|
+
}
|
|
41
|
+
// Text only as a weak signal (RSC often interpolates `{expr}`).
|
|
42
|
+
const snippet = hints.textSnippet?.trim();
|
|
43
|
+
if (snippet && snippet.length >= 12) {
|
|
44
|
+
const needle = snippet.slice(0, 40);
|
|
45
|
+
if (windowText.includes(needle))
|
|
46
|
+
score += 2;
|
|
47
|
+
}
|
|
48
|
+
const colMatch = /</.exec(line);
|
|
49
|
+
const column = colMatch ? colMatch.index + 1 : 1;
|
|
50
|
+
const candidate = { line: i + 1, column, score };
|
|
51
|
+
if (!best || candidate.score > best.score)
|
|
52
|
+
best = candidate;
|
|
53
|
+
}
|
|
54
|
+
// Require at least one class/href hit when classes were available — otherwise
|
|
55
|
+
// the first `<div` in the file wins and every child collapses to the same line.
|
|
56
|
+
if (!best)
|
|
57
|
+
return undefined;
|
|
58
|
+
if (classes.length > 0 && best.score < 4)
|
|
59
|
+
return undefined;
|
|
60
|
+
return best;
|
|
61
|
+
}
|
|
62
|
+
/** Read `class` from an Element as a space-separated string. */
|
|
63
|
+
export function classNameOf(el) {
|
|
64
|
+
const value = el.getAttribute("class")?.trim();
|
|
65
|
+
return value || undefined;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=locateJsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locateJsx.js","sourceRoot":"","sources":["../../src/source/locateJsx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ComponentSourceLocation, ElementSourceEnrichment } from "../plugins/elementTarget.js";
|
|
2
|
+
/** Enrichment after ranking usage vs leaf (UI primitives). */
|
|
3
|
+
export type RankedSourceEnrichment = ElementSourceEnrichment & {
|
|
4
|
+
/**
|
|
5
|
+
* Innermost definition when it differs from {@link ElementSourceEnrichment.component}
|
|
6
|
+
* (e.g. `Link` while `component` is `Header`).
|
|
7
|
+
*/
|
|
8
|
+
leaf?: ComponentSourceLocation;
|
|
9
|
+
};
|
|
10
|
+
export declare function sameSourceLocation(a: ComponentSourceLocation, b: ComponentSourceLocation): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Design-system / shadcn-style primitives — prefer a parent usage site as primary.
|
|
13
|
+
* Matches `components/ui/…`, `packages/ui/…`, and bare `ui/button.tsx`-style paths.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isUiPrimitiveSource(loc: ComponentSourceLocation): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Rank a leaf + owner chain for feedback:
|
|
18
|
+
* - `component` = primary (nearest non-primitive when leaf is a UI primitive)
|
|
19
|
+
* - `leaf` = innermost when different from primary
|
|
20
|
+
* - `owners` = remaining outer ancestors
|
|
21
|
+
*
|
|
22
|
+
* If `leaf` is already set (post-merge), the enrichment is returned as-is.
|
|
23
|
+
*/
|
|
24
|
+
export declare function rankSourceHierarchy(enrichment: ElementSourceEnrichment | undefined): RankedSourceEnrichment | undefined;
|
|
25
|
+
//# sourceMappingURL=rankSourceHierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rankSourceHierarchy.d.ts","sourceRoot":"","sources":["../../src/source/rankSourceHierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAEpG,8DAA8D;AAC9D,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,GAAG;IAC7D;;;OAGG;IACH,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAChC,CAAC;AAEF,wBAAgB,kBAAkB,CAChC,CAAC,EAAE,uBAAuB,EAC1B,CAAC,EAAE,uBAAuB,GACzB,OAAO,CAOT;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAKzE;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,uBAAuB,GAAG,SAAS,GAC9C,sBAAsB,GAAG,SAAS,CAiCpC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export function sameSourceLocation(a, b) {
|
|
2
|
+
return (a.fileName === b.fileName &&
|
|
3
|
+
a.line === b.line &&
|
|
4
|
+
(a.column ?? 0) === (b.column ?? 0) &&
|
|
5
|
+
(a.name ?? "") === (b.name ?? ""));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Design-system / shadcn-style primitives — prefer a parent usage site as primary.
|
|
9
|
+
* Matches `components/ui/…`, `packages/ui/…`, and bare `ui/button.tsx`-style paths.
|
|
10
|
+
*/
|
|
11
|
+
export function isUiPrimitiveSource(loc) {
|
|
12
|
+
const file = loc.fileName.replace(/\\/g, "/");
|
|
13
|
+
if (/(^|\/)(components\/ui|packages\/ui)\//.test(file))
|
|
14
|
+
return true;
|
|
15
|
+
if (/(^|\/)ui\/[A-Za-z][\w-]*\.[cm]?[tj]sx?$/.test(file))
|
|
16
|
+
return true;
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Rank a leaf + owner chain for feedback:
|
|
21
|
+
* - `component` = primary (nearest non-primitive when leaf is a UI primitive)
|
|
22
|
+
* - `leaf` = innermost when different from primary
|
|
23
|
+
* - `owners` = remaining outer ancestors
|
|
24
|
+
*
|
|
25
|
+
* If `leaf` is already set (post-merge), the enrichment is returned as-is.
|
|
26
|
+
*/
|
|
27
|
+
export function rankSourceHierarchy(enrichment) {
|
|
28
|
+
if (!enrichment)
|
|
29
|
+
return undefined;
|
|
30
|
+
// Already ranked by mergeSourceEnrichment (or a prior pass).
|
|
31
|
+
if (enrichment.leaf && enrichment.component) {
|
|
32
|
+
return enrichment;
|
|
33
|
+
}
|
|
34
|
+
const chain = [];
|
|
35
|
+
if (enrichment.component)
|
|
36
|
+
chain.push(enrichment.component);
|
|
37
|
+
for (const owner of enrichment.owners ?? []) {
|
|
38
|
+
if (!chain.some((loc) => sameSourceLocation(loc, owner)))
|
|
39
|
+
chain.push(owner);
|
|
40
|
+
}
|
|
41
|
+
if (chain.length === 0) {
|
|
42
|
+
return enrichment.component || enrichment.owners ? enrichment : undefined;
|
|
43
|
+
}
|
|
44
|
+
const leaf = chain[0];
|
|
45
|
+
let primaryIdx = 0;
|
|
46
|
+
if (isUiPrimitiveSource(leaf)) {
|
|
47
|
+
const usageIdx = chain.findIndex((loc, i) => i > 0 && !isUiPrimitiveSource(loc));
|
|
48
|
+
if (usageIdx >= 0)
|
|
49
|
+
primaryIdx = usageIdx;
|
|
50
|
+
}
|
|
51
|
+
const primary = chain[primaryIdx];
|
|
52
|
+
const owners = chain.filter((_, i) => i !== 0 && i !== primaryIdx);
|
|
53
|
+
const leafDistinct = !sameSourceLocation(primary, leaf);
|
|
54
|
+
return {
|
|
55
|
+
component: primary,
|
|
56
|
+
...(leafDistinct ? { leaf } : {}),
|
|
57
|
+
...(owners.length > 0 ? { owners } : {}),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=rankSourceHierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rankSourceHierarchy.js","sourceRoot":"","sources":["../../src/source/rankSourceHierarchy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactSourceResolver.d.ts","sourceRoot":"","sources":["../../src/source/reactSourceResolver.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,0BAA0B,GAChC,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactSourceResolver.js","sourceRoot":"","sources":["../../src/source/reactSourceResolver.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EACL,yBAAyB,EACzB,kBAAkB,GAEnB,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type GeneratedPosition = {
|
|
2
|
+
/** Absolute URL of the generated (served) script. */
|
|
3
|
+
url: string;
|
|
4
|
+
line: number;
|
|
5
|
+
column: number;
|
|
6
|
+
/** Function / component name from the stack frame, when present. */
|
|
7
|
+
name?: string;
|
|
8
|
+
};
|
|
9
|
+
export type OriginalPosition = {
|
|
10
|
+
fileName: string;
|
|
11
|
+
line: number;
|
|
12
|
+
column: number;
|
|
13
|
+
name?: string;
|
|
14
|
+
};
|
|
15
|
+
/** Clear fetch / consumer caches (tests). */
|
|
16
|
+
export declare function clearSourceMapCaches(): void;
|
|
17
|
+
/**
|
|
18
|
+
* Strip Vite/query noise and leading `/@fs/` / protocol so agents see a
|
|
19
|
+
* repo-friendly path when possible.
|
|
20
|
+
*/
|
|
21
|
+
export declare function normalizeSourcePath(fileName: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Map a generated stack position to original source via Source Map V3.
|
|
24
|
+
* Falls back to a normalized URL path when no map is available.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveOriginalPosition(position: GeneratedPosition, options?: {
|
|
27
|
+
fetchFn?: typeof fetch;
|
|
28
|
+
}): Promise<OriginalPosition>;
|
|
29
|
+
/**
|
|
30
|
+
* Parse V8-style stack frames into generated positions.
|
|
31
|
+
* Supports `at name (url:line:col)` and `at url:line:col`.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseStackFrames(stack: string): GeneratedPosition[];
|
|
34
|
+
/** Prefer app frames over React / bundler internals. */
|
|
35
|
+
export declare function isAppFrame(frame: GeneratedPosition): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* After Source Map V3, reject React / Next / package internals so callers can
|
|
38
|
+
* walk to the next stack frame (Next `_debugStack` often maps to jsx-runtime).
|
|
39
|
+
*/
|
|
40
|
+
export declare function isAppSourcePath(fileName: string): boolean;
|
|
41
|
+
//# sourceMappingURL=sourceMap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourceMap.d.ts","sourceRoot":"","sources":["../../src/source/sourceMap.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qDAAqD;IACrD,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAaF,6CAA6C;AAC7C,wBAAgB,oBAAoB,IAAI,IAAI,CAG3C;AAiDD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB5D;AAyCD;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,iBAAiB,EAC3B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GACvC,OAAO,CAAC,gBAAgB,CAAC,CA0B3B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,EAAE,CA6BnE;AAWD,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAS5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAUzD"}
|