@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,19 @@
|
|
|
1
|
+
import { type FeedbackCapturePlugin } from "./plugins/core.js";
|
|
2
|
+
import type { FeedbackEnvelope } from "./types.js";
|
|
3
|
+
export type FeedbackCaptureSession<Ps extends readonly FeedbackCapturePlugin[]> = {
|
|
4
|
+
/**
|
|
5
|
+
* Collect an envelope from the session plugins.
|
|
6
|
+
* Pass `extraPlugins` for submit-only collectors (e.g. comment / screenshot in mount).
|
|
7
|
+
*/
|
|
8
|
+
build: <const Extra extends readonly FeedbackCapturePlugin[] = []>(extraPlugins?: Extra) => Promise<FeedbackEnvelope<[...Ps, ...Extra]>>;
|
|
9
|
+
/** Tear down plugin setup (idempotent). */
|
|
10
|
+
dispose: () => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Init feedback capture with a plugin list: runs `setup` immediately,
|
|
14
|
+
* then use `build()` later to collect a typed envelope.
|
|
15
|
+
*/
|
|
16
|
+
export declare function initFeedbackCapture<const Ps extends readonly FeedbackCapturePlugin[]>(options: {
|
|
17
|
+
plugins: Ps;
|
|
18
|
+
}): FeedbackCaptureSession<Ps>;
|
|
19
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,sBAAsB,CAAC,EAAE,SAAS,SAAS,qBAAqB,EAAE,IAAI;IAChF;;;OAGG;IACH,KAAK,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS,SAAS,qBAAqB,EAAE,GAAG,EAAE,EAC/D,YAAY,CAAC,EAAE,KAAK,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD,2CAA2C;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,SAAS,SAAS,qBAAqB,EAAE,EAAE,OAAO,EAAE;IAC9F,OAAO,EAAE,EAAE,CAAC;CACb,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAc7B"}
|
package/dist/session.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { collectPluginExtras, installCapturePlugins, } from "./plugins/core.js";
|
|
2
|
+
/**
|
|
3
|
+
* Init feedback capture with a plugin list: runs `setup` immediately,
|
|
4
|
+
* then use `build()` later to collect a typed envelope.
|
|
5
|
+
*/
|
|
6
|
+
export function initFeedbackCapture(options) {
|
|
7
|
+
const plugins = options.plugins;
|
|
8
|
+
const dispose = installCapturePlugins(plugins);
|
|
9
|
+
return {
|
|
10
|
+
async build(extraPlugins) {
|
|
11
|
+
const extra = (extraPlugins ?? []);
|
|
12
|
+
const all = [...plugins, ...extra];
|
|
13
|
+
return collectPluginExtras(all);
|
|
14
|
+
},
|
|
15
|
+
dispose,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,mBAAmB,CAAC;AAe3B;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAoD,OAEtF;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/C,OAAO;QACL,KAAK,CAAC,KAAK,CACT,YAAoB;YAEpB,MAAM,KAAK,GAAG,CAAC,YAAY,IAAI,EAAE,CAAU,CAAC;YAC5C,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAsB,CAAC;YACxD,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,OAAO;KACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ResolveElementSource } from "../../plugins/elementTarget.js";
|
|
2
|
+
/**
|
|
3
|
+
* Try resolvers in order; first non-empty enrichment wins.
|
|
4
|
+
* Errors in one resolver are swallowed so later adapters still run.
|
|
5
|
+
*/
|
|
6
|
+
export declare function composeSourceResolvers(resolvers: readonly ResolveElementSource[]): ResolveElementSource;
|
|
7
|
+
//# sourceMappingURL=compose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/compose.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA2B,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAEpG;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,oBAAoB,EAAE,GACzC,oBAAoB,CActB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Try resolvers in order; first non-empty enrichment wins.
|
|
3
|
+
* Errors in one resolver are swallowed so later adapters still run.
|
|
4
|
+
*/
|
|
5
|
+
export function composeSourceResolvers(resolvers) {
|
|
6
|
+
return async (el) => {
|
|
7
|
+
for (const resolve of resolvers) {
|
|
8
|
+
try {
|
|
9
|
+
const enrichment = await resolve(el);
|
|
10
|
+
if (enrichment?.component || (enrichment?.owners && enrichment.owners.length > 0)) {
|
|
11
|
+
return enrichment;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
// try next adapter
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return undefined;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=compose.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compose.js","sourceRoot":"","sources":["../../../src/source/adapters/compose.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,SAA0C;IAE1C,OAAO,KAAK,EAAE,EAAW,EAAgD,EAAE;QACzE,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;gBACrC,IAAI,UAAU,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;oBAClF,OAAO,UAAU,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,mBAAmB;YACrB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ResolveElementSource } from "../../plugins/elementTarget.js";
|
|
2
|
+
import { type SourceFrameworkChoice, type SourceFrameworkId } from "./detect.js";
|
|
3
|
+
export type CreateSourceResolverOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* Which adapter(s) to use.
|
|
6
|
+
* - `"auto"` (default): try adapters in detected order
|
|
7
|
+
* - `"react"` | `"next"` | `"vue"` | `"svelte"` | `"qwik"` | `"locator"`: single adapter
|
|
8
|
+
* - `"none"`: disable enrichment
|
|
9
|
+
*/
|
|
10
|
+
framework?: SourceFrameworkChoice;
|
|
11
|
+
/**
|
|
12
|
+
* Full custom resolver. When set, wins over `framework` (config inject escape hatch).
|
|
13
|
+
*/
|
|
14
|
+
resolveSource?: ResolveElementSource;
|
|
15
|
+
/** Override auto try-order (ignored when `framework` is a single id). */
|
|
16
|
+
order?: readonly SourceFrameworkId[];
|
|
17
|
+
/**
|
|
18
|
+
* Feedback bridge base path for Next Flight source fetches
|
|
19
|
+
* (e.g. `/api/t3-feedback`). Forwarded to {@link createNextSourceResolver}.
|
|
20
|
+
*/
|
|
21
|
+
sourceEndpoint?: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Build a {@link ResolveElementSource} from serializable config and/or a custom inject.
|
|
25
|
+
* Returns `undefined` when enrichment is disabled (`framework: "none"`).
|
|
26
|
+
*/
|
|
27
|
+
export declare function createSourceResolver(options?: CreateSourceResolverOptions): ResolveElementSource | undefined;
|
|
28
|
+
//# sourceMappingURL=createSourceResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSourceResolver.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/createSourceResolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EAGL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAQrB,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC;;OAEG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAC;IACrC,yEAAyE;IACzE,KAAK,CAAC,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAwBF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,GAAG,SAAS,CA2BlC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { composeSourceResolvers } from "./compose.js";
|
|
2
|
+
import { detectFrameworkOnElement, detectFrameworkOrder, } from "./detect.js";
|
|
3
|
+
import { createLocatorSourceResolver } from "./locator.js";
|
|
4
|
+
import { createNextSourceResolver } from "./next.js";
|
|
5
|
+
import { createQwikSourceResolver } from "./qwik.js";
|
|
6
|
+
import { createReactSourceResolver } from "./react.js";
|
|
7
|
+
import { createSvelteSourceResolver } from "./svelte.js";
|
|
8
|
+
import { createVueSourceResolver } from "./vue.js";
|
|
9
|
+
function adapterFor(id, options = {}) {
|
|
10
|
+
switch (id) {
|
|
11
|
+
case "react":
|
|
12
|
+
return createReactSourceResolver();
|
|
13
|
+
case "next":
|
|
14
|
+
return createNextSourceResolver({
|
|
15
|
+
...(options.sourceEndpoint ? { sourceEndpoint: options.sourceEndpoint } : {}),
|
|
16
|
+
});
|
|
17
|
+
case "vue":
|
|
18
|
+
return createVueSourceResolver();
|
|
19
|
+
case "svelte":
|
|
20
|
+
return createSvelteSourceResolver();
|
|
21
|
+
case "qwik":
|
|
22
|
+
return createQwikSourceResolver();
|
|
23
|
+
case "locator":
|
|
24
|
+
return createLocatorSourceResolver();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Build a {@link ResolveElementSource} from serializable config and/or a custom inject.
|
|
29
|
+
* Returns `undefined` when enrichment is disabled (`framework: "none"`).
|
|
30
|
+
*/
|
|
31
|
+
export function createSourceResolver(options = {}) {
|
|
32
|
+
if (options.resolveSource)
|
|
33
|
+
return options.resolveSource;
|
|
34
|
+
const framework = options.framework ?? "auto";
|
|
35
|
+
if (framework === "none")
|
|
36
|
+
return undefined;
|
|
37
|
+
if (framework !== "auto") {
|
|
38
|
+
return adapterFor(framework, options);
|
|
39
|
+
}
|
|
40
|
+
const order = options.order?.length ? options.order : detectFrameworkOrder();
|
|
41
|
+
const resolvers = order.map((id) => adapterFor(id, options));
|
|
42
|
+
// Prefer the adapter that matches the clicked element when auto-ordering is ambiguous.
|
|
43
|
+
return async (el) => {
|
|
44
|
+
const onEl = detectFrameworkOnElement(el);
|
|
45
|
+
if (onEl) {
|
|
46
|
+
const preferred = adapterFor(onEl, options);
|
|
47
|
+
try {
|
|
48
|
+
const hit = await preferred(el);
|
|
49
|
+
if (hit?.component || (hit?.owners && hit.owners.length > 0))
|
|
50
|
+
return hit;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
/* fall through to compose */
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return composeSourceResolvers(resolvers)(el);
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=createSourceResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createSourceResolver.js","sourceRoot":"","sources":["../../../src/source/adapters/createSourceResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,GAGrB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAuBnD,SAAS,UAAU,CACjB,EAAqB,EACrB,UAAuC,EAAE;IAEzC,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,OAAO;YACV,OAAO,yBAAyB,EAAE,CAAC;QACrC,KAAK,MAAM;YACT,OAAO,wBAAwB,CAAC;gBAC9B,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9E,CAAC,CAAC;QACL,KAAK,KAAK;YACR,OAAO,uBAAuB,EAAE,CAAC;QACnC,KAAK,QAAQ;YACX,OAAO,0BAA0B,EAAE,CAAC;QACtC,KAAK,MAAM;YACT,OAAO,wBAAwB,EAAE,CAAC;QACpC,KAAK,SAAS;YACZ,OAAO,2BAA2B,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,UAAuC,EAAE;IAEzC,IAAI,OAAO,CAAC,aAAa;QAAE,OAAO,OAAO,CAAC,aAAa,CAAC;IAExD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,IAAI,SAAS,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAE3C,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC;IAC7E,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IAE7D,uFAAuF;IACvF,OAAO,KAAK,EAAE,EAAE,EAAE,EAAE;QAClB,MAAM,IAAI,GAAG,wBAAwB,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBAChC,IAAI,GAAG,EAAE,SAAS,IAAI,CAAC,GAAG,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;oBAAE,OAAO,GAAG,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QACD,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heuristic framework detection for ordering / diagnostics.
|
|
3
|
+
* Prefer explicit config when the app is multi-framework or detection is ambiguous.
|
|
4
|
+
*/
|
|
5
|
+
export type SourceFrameworkId = "react" | "next" | "vue" | "svelte" | "qwik" | "locator";
|
|
6
|
+
export type SourceFrameworkChoice = SourceFrameworkId | "auto" | "none";
|
|
7
|
+
/** Page-level Next.js markers (App Router / Pages Router / Turbopack chunks). */
|
|
8
|
+
export declare function pageLooksLikeNext(doc?: Document | null): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Probe a single element (and a few ancestors) for framework ownership markers.
|
|
11
|
+
* React fibers on a Next page resolve to `"next"` so the Turbopack-aware adapter runs.
|
|
12
|
+
*/
|
|
13
|
+
export declare function detectFrameworkOnElement(el: Element): SourceFrameworkId | null;
|
|
14
|
+
/**
|
|
15
|
+
* App-level hints from globals + a light DOM scan.
|
|
16
|
+
* Returns preferred try-order (may list multiple when islands coexist).
|
|
17
|
+
*/
|
|
18
|
+
export declare function detectFrameworkOrder(doc?: Document | null): SourceFrameworkId[];
|
|
19
|
+
export declare function isSourceFrameworkChoice(value: unknown): value is SourceFrameworkChoice;
|
|
20
|
+
/** @internal used by tests */
|
|
21
|
+
export declare function defaultFrameworkOrder(): readonly SourceFrameworkId[];
|
|
22
|
+
//# sourceMappingURL=detect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/detect.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAEzF,MAAM,MAAM,qBAAqB,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAAC;AAsCxE,iFAAiF;AACjF,wBAAgB,iBAAiB,CAC/B,GAAG,GAAE,QAAQ,GAAG,IAAwD,GACvE,OAAO,CAST;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,OAAO,GAAG,iBAAiB,GAAG,IAAI,CAc9E;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,GAAE,QAAQ,GAAG,IAAwD,GACvE,iBAAiB,EAAE,CAgCrB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAWtF;AAED,8BAA8B;AAC9B,wBAAgB,qBAAqB,IAAI,SAAS,iBAAiB,EAAE,CAEpE"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heuristic framework detection for ordering / diagnostics.
|
|
3
|
+
* Prefer explicit config when the app is multi-framework or detection is ambiguous.
|
|
4
|
+
*/
|
|
5
|
+
const DEFAULT_ORDER = [
|
|
6
|
+
"qwik",
|
|
7
|
+
"locator",
|
|
8
|
+
"next",
|
|
9
|
+
"react",
|
|
10
|
+
"vue",
|
|
11
|
+
"svelte",
|
|
12
|
+
];
|
|
13
|
+
function elementLooksLikeReact(el) {
|
|
14
|
+
for (const key of Object.keys(el)) {
|
|
15
|
+
if (key.startsWith("__reactFiber$") || key.startsWith("__reactInternalInstance$")) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
function elementLooksLikeVue(el) {
|
|
22
|
+
const record = el;
|
|
23
|
+
return Boolean(record.__vueParentComponent || record.__vue__);
|
|
24
|
+
}
|
|
25
|
+
function elementLooksLikeSvelte(el) {
|
|
26
|
+
const record = el;
|
|
27
|
+
return Boolean(record.__svelte_meta);
|
|
28
|
+
}
|
|
29
|
+
function elementLooksLikeQwik(el) {
|
|
30
|
+
return el.hasAttribute("data-qwik-inspector");
|
|
31
|
+
}
|
|
32
|
+
function elementLooksLikeLocator(el) {
|
|
33
|
+
return el.hasAttribute("data-locatorjs") || el.hasAttribute("data-locator-id");
|
|
34
|
+
}
|
|
35
|
+
/** Page-level Next.js markers (App Router / Pages Router / Turbopack chunks). */
|
|
36
|
+
export function pageLooksLikeNext(doc = typeof document !== "undefined" ? document : null) {
|
|
37
|
+
if (typeof window !== "undefined") {
|
|
38
|
+
const w = window;
|
|
39
|
+
if (w.__NEXT_DATA__ || w.__NEXT_P || w.next)
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
if (!doc)
|
|
43
|
+
return false;
|
|
44
|
+
if (doc.getElementById("__NEXT_DATA__"))
|
|
45
|
+
return true;
|
|
46
|
+
if (doc.querySelector('script[src*="/_next/"]'))
|
|
47
|
+
return true;
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Probe a single element (and a few ancestors) for framework ownership markers.
|
|
52
|
+
* React fibers on a Next page resolve to `"next"` so the Turbopack-aware adapter runs.
|
|
53
|
+
*/
|
|
54
|
+
export function detectFrameworkOnElement(el) {
|
|
55
|
+
let current = el;
|
|
56
|
+
for (let i = 0; i < 8 && current; i += 1) {
|
|
57
|
+
// Attribute-based adapters first — cheap and unambiguous.
|
|
58
|
+
if (elementLooksLikeQwik(current))
|
|
59
|
+
return "qwik";
|
|
60
|
+
if (elementLooksLikeLocator(current))
|
|
61
|
+
return "locator";
|
|
62
|
+
if (elementLooksLikeReact(current)) {
|
|
63
|
+
return pageLooksLikeNext(current.ownerDocument) ? "next" : "react";
|
|
64
|
+
}
|
|
65
|
+
if (elementLooksLikeVue(current))
|
|
66
|
+
return "vue";
|
|
67
|
+
if (elementLooksLikeSvelte(current))
|
|
68
|
+
return "svelte";
|
|
69
|
+
current = current.parentElement;
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* App-level hints from globals + a light DOM scan.
|
|
75
|
+
* Returns preferred try-order (may list multiple when islands coexist).
|
|
76
|
+
*/
|
|
77
|
+
export function detectFrameworkOrder(doc = typeof document !== "undefined" ? document : null) {
|
|
78
|
+
const found = new Set();
|
|
79
|
+
if (pageLooksLikeNext(doc))
|
|
80
|
+
found.add("next");
|
|
81
|
+
if (typeof window !== "undefined") {
|
|
82
|
+
const w = window;
|
|
83
|
+
if (w.__REACT_DEVTOOLS_GLOBAL_HOOK__ || w.React)
|
|
84
|
+
found.add("react");
|
|
85
|
+
if (w.__VUE__ || w.Vue)
|
|
86
|
+
found.add("vue");
|
|
87
|
+
if (w.__SVELTE_HMR || w.__SAPPER__)
|
|
88
|
+
found.add("svelte");
|
|
89
|
+
if (w.qwik || w.__qwik_inspector)
|
|
90
|
+
found.add("qwik");
|
|
91
|
+
}
|
|
92
|
+
if (doc?.body) {
|
|
93
|
+
const sample = doc.body.querySelectorAll("*");
|
|
94
|
+
const limit = Math.min(sample.length, 80);
|
|
95
|
+
for (let i = 0; i < limit; i += 1) {
|
|
96
|
+
const el = sample[i];
|
|
97
|
+
if (elementLooksLikeQwik(el))
|
|
98
|
+
found.add("qwik");
|
|
99
|
+
if (elementLooksLikeLocator(el))
|
|
100
|
+
found.add("locator");
|
|
101
|
+
if (elementLooksLikeReact(el)) {
|
|
102
|
+
if (pageLooksLikeNext(doc))
|
|
103
|
+
found.add("next");
|
|
104
|
+
else
|
|
105
|
+
found.add("react");
|
|
106
|
+
}
|
|
107
|
+
if (elementLooksLikeVue(el))
|
|
108
|
+
found.add("vue");
|
|
109
|
+
if (elementLooksLikeSvelte(el))
|
|
110
|
+
found.add("svelte");
|
|
111
|
+
if (found.size >= DEFAULT_ORDER.length)
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
if (found.size === 0)
|
|
116
|
+
return [...DEFAULT_ORDER];
|
|
117
|
+
return DEFAULT_ORDER.filter((id) => found.has(id));
|
|
118
|
+
}
|
|
119
|
+
export function isSourceFrameworkChoice(value) {
|
|
120
|
+
return (value === "react" ||
|
|
121
|
+
value === "next" ||
|
|
122
|
+
value === "vue" ||
|
|
123
|
+
value === "svelte" ||
|
|
124
|
+
value === "qwik" ||
|
|
125
|
+
value === "locator" ||
|
|
126
|
+
value === "auto" ||
|
|
127
|
+
value === "none");
|
|
128
|
+
}
|
|
129
|
+
/** @internal used by tests */
|
|
130
|
+
export function defaultFrameworkOrder() {
|
|
131
|
+
return DEFAULT_ORDER;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=detect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect.js","sourceRoot":"","sources":["../../../src/source/adapters/detect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type { SourceFrameworkChoice, SourceFrameworkId } from "./detect.js";
|
|
2
|
+
export { defaultFrameworkOrder, detectFrameworkOnElement, detectFrameworkOrder, isSourceFrameworkChoice, pageLooksLikeNext, } from "./detect.js";
|
|
3
|
+
export { composeSourceResolvers } from "./compose.js";
|
|
4
|
+
export type { CreateSourceResolverOptions } from "./createSourceResolver.js";
|
|
5
|
+
export { createSourceResolver } from "./createSourceResolver.js";
|
|
6
|
+
export type { ReactSourceResolverOptions } from "./react.js";
|
|
7
|
+
export { createFiberStackSourceResolver, createReactSourceResolver, findCompositeFiber, } from "./react.js";
|
|
8
|
+
export type { NextSourceResolverOptions } from "./next.js";
|
|
9
|
+
export { createNextSourceResolver, flightPagePathMatchesUrl, flightPagePathToAppFile, normalizeNextSourcePath, parseNextFlightPagePaths, pickNextFlightPagePath, } from "./next.js";
|
|
10
|
+
export type { VueSourceResolverOptions } from "./vue.js";
|
|
11
|
+
export { createVueSourceResolver } from "./vue.js";
|
|
12
|
+
export type { SvelteSourceResolverOptions } from "./svelte.js";
|
|
13
|
+
export { createSvelteSourceResolver } from "./svelte.js";
|
|
14
|
+
export type { QwikSourceResolverOptions } from "./qwik.js";
|
|
15
|
+
export { createQwikSourceResolver, parseQwikInspectorValue } from "./qwik.js";
|
|
16
|
+
export type { LocatorSourceResolverOptions } from "./locator.js";
|
|
17
|
+
export { createLocatorSourceResolver, parseLocatorValue } from "./locator.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,YAAY,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,YAAY,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,wBAAwB,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,YAAY,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAE9E,YAAY,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { defaultFrameworkOrder, detectFrameworkOnElement, detectFrameworkOrder, isSourceFrameworkChoice, pageLooksLikeNext, } from "./detect.js";
|
|
2
|
+
export { composeSourceResolvers } from "./compose.js";
|
|
3
|
+
export { createSourceResolver } from "./createSourceResolver.js";
|
|
4
|
+
export { createFiberStackSourceResolver, createReactSourceResolver, findCompositeFiber, } from "./react.js";
|
|
5
|
+
export { createNextSourceResolver, flightPagePathMatchesUrl, flightPagePathToAppFile, normalizeNextSourcePath, parseNextFlightPagePaths, pickNextFlightPagePath, } from "./next.js";
|
|
6
|
+
export { createVueSourceResolver } from "./vue.js";
|
|
7
|
+
export { createSvelteSourceResolver } from "./svelte.js";
|
|
8
|
+
export { createQwikSourceResolver, parseQwikInspectorValue } from "./qwik.js";
|
|
9
|
+
export { createLocatorSourceResolver, parseLocatorValue } from "./locator.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/source/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAGtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAGjE,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAGzD,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAG9E,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ComponentSourceLocation, ResolveElementSource } from "../../plugins/elementTarget.js";
|
|
2
|
+
export type LocatorSourceResolverOptions = {
|
|
3
|
+
getLocatorValue?: (el: Element) => string | null;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Parse LocatorJS-style `path/to/File.tsx:line:col` (or `…:line`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseLocatorValue(raw: string): ComponentSourceLocation | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* LocatorJS / `@locator/babel-jsx` enrichment (React, Solid, … when the Babel plugin is on).
|
|
11
|
+
* Reads `data-locatorjs` / `data-locator-id` — no runtime framework bridge needed.
|
|
12
|
+
*/
|
|
13
|
+
export declare function createLocatorSourceResolver(options?: LocatorSourceResolverOptions): ResolveElementSource;
|
|
14
|
+
//# sourceMappingURL=locator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/locator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EAEvB,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAMxC,MAAM,MAAM,4BAA4B,GAAG;IACzC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAoClF;AAUD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,GAAE,4BAAiC,GACzC,oBAAoB,CAetB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { normalizeSourcePath } from "../sourceMap.js";
|
|
2
|
+
/** Common LocatorJS / babel-jsx attribute names. */
|
|
3
|
+
const ATTRS = ["data-locatorjs", "data-locator-id"];
|
|
4
|
+
/**
|
|
5
|
+
* Parse LocatorJS-style `path/to/File.tsx:line:col` (or `…:line`).
|
|
6
|
+
*/
|
|
7
|
+
export function parseLocatorValue(raw) {
|
|
8
|
+
const trimmed = raw.trim();
|
|
9
|
+
if (!trimmed)
|
|
10
|
+
return undefined;
|
|
11
|
+
// Sometimes Locator stores JSON; prefer plain path:line:col.
|
|
12
|
+
if (trimmed.startsWith("{")) {
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(trimmed);
|
|
15
|
+
if (parsed.fileName && parsed.lineNumber) {
|
|
16
|
+
return {
|
|
17
|
+
fileName: normalizeSourcePath(parsed.fileName),
|
|
18
|
+
line: parsed.lineNumber,
|
|
19
|
+
...(parsed.columnNumber != null ? { column: parsed.columnNumber } : {}),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const match = /^(.*?):(\d+)(?::(\d+))?$/.exec(trimmed);
|
|
28
|
+
if (!match)
|
|
29
|
+
return undefined;
|
|
30
|
+
const file = match[1]?.trim();
|
|
31
|
+
const line = Number(match[2]);
|
|
32
|
+
const column = match[3] != null ? Number(match[3]) : undefined;
|
|
33
|
+
if (!file || !Number.isFinite(line) || line < 1)
|
|
34
|
+
return undefined;
|
|
35
|
+
return {
|
|
36
|
+
fileName: normalizeSourcePath(file),
|
|
37
|
+
line,
|
|
38
|
+
...(column != null && Number.isFinite(column) ? { column } : {}),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function readAttr(el) {
|
|
42
|
+
for (const name of ATTRS) {
|
|
43
|
+
const v = el.getAttribute(name);
|
|
44
|
+
if (v)
|
|
45
|
+
return v;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* LocatorJS / `@locator/babel-jsx` enrichment (React, Solid, … when the Babel plugin is on).
|
|
51
|
+
* Reads `data-locatorjs` / `data-locator-id` — no runtime framework bridge needed.
|
|
52
|
+
*/
|
|
53
|
+
export function createLocatorSourceResolver(options = {}) {
|
|
54
|
+
const getValue = options.getLocatorValue ?? readAttr;
|
|
55
|
+
return async (el) => {
|
|
56
|
+
let current = el;
|
|
57
|
+
for (let i = 0; i < 12 && current; i += 1) {
|
|
58
|
+
const raw = getValue(current);
|
|
59
|
+
if (raw) {
|
|
60
|
+
const component = parseLocatorValue(raw);
|
|
61
|
+
if (component)
|
|
62
|
+
return { component };
|
|
63
|
+
}
|
|
64
|
+
current = current.parentElement;
|
|
65
|
+
}
|
|
66
|
+
return undefined;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=locator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locator.js","sourceRoot":"","sources":["../../../src/source/adapters/locator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ResolveElementSource } from "../../plugins/elementTarget.js";
|
|
2
|
+
import { type ReactSourceResolverOptions } from "./react.js";
|
|
3
|
+
export type NextSourceResolverOptions = ReactSourceResolverOptions & {
|
|
4
|
+
/**
|
|
5
|
+
* When fiber enrichment finds nothing (typical for pure RSC HTML), fall back
|
|
6
|
+
* to the Flight `pagePath` embedded in `__next_f` scripts. Default: true.
|
|
7
|
+
*/
|
|
8
|
+
flightPageFallback?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Load app-relative source (e.g. `app/[locale]/page.tsx`) for JSX line
|
|
11
|
+
* matching after a Flight file hit. Defaults to GET `{endpoint}/source?file=`.
|
|
12
|
+
*/
|
|
13
|
+
fetchSourceFile?: (appRelativeFile: string) => Promise<string | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Feedback bridge base path used by the default `fetchSourceFile`
|
|
16
|
+
* (e.g. `/api/t3-feedback` or `/__t3-feedback`).
|
|
17
|
+
*/
|
|
18
|
+
sourceEndpoint?: string;
|
|
19
|
+
};
|
|
20
|
+
export { flightPagePathMatchesUrl, flightPagePathToAppFile, parseNextFlightPagePaths, pickNextFlightPagePath, } from "./nextFlight.js";
|
|
21
|
+
/**
|
|
22
|
+
* Strip Turbopack `[project]/` and leading `apps/<pkg>/` so paths line up with
|
|
23
|
+
* an open-in-editor root pointed at the Next app (e.g. `apps/b2b`).
|
|
24
|
+
* Workspace packages (`packages/…`) stay monorepo-relative — pair with a
|
|
25
|
+
* workspace-rooted editor template when opening those files.
|
|
26
|
+
*/
|
|
27
|
+
export declare function normalizeNextSourcePath(fileName: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Next.js (Turbopack / webpack) source enrichment.
|
|
30
|
+
*
|
|
31
|
+
* Same fiber + `_debugStack` bridge as React, but:
|
|
32
|
+
* - walks stack frames until the mapped source is an app file (skips
|
|
33
|
+
* `react-jsx-runtime` / `node_modules` — React 19's `react-stack-top-frame`
|
|
34
|
+
* is created inside the JSX runtime, and Next serves it as a compiled chunk
|
|
35
|
+
* URL that passes a naive "first app frame" filter);
|
|
36
|
+
* - prefers the DOM node's host-fiber `_debugStack` (JSX call site) before the
|
|
37
|
+
* composite — Next client roots hydrated from RSC often lack a useful stack
|
|
38
|
+
* on the component fiber itself;
|
|
39
|
+
* - when there is no client fiber (pure Server Component HTML), falls back to
|
|
40
|
+
* the Flight `pagePath` and matches the element's tag/classes to a JSX line
|
|
41
|
+
* in that file (via optional `/source` bridge);
|
|
42
|
+
* - normalizes Turbopack `file:///…/apps/<pkg>/…` paths to app-relative paths
|
|
43
|
+
* for `cursor://` / open-in-editor templates rooted at the Next app.
|
|
44
|
+
*/
|
|
45
|
+
export declare function createNextSourceResolver(options?: NextSourceResolverOptions): ResolveElementSource;
|
|
46
|
+
//# sourceMappingURL=next.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../../src/source/adapters/next.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,oBAAoB,EACrB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAkC,KAAK,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAO7F,MAAM,MAAM,yBAAyB,GAAG,0BAA0B,GAAG;IACnE;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMhE;AA8ED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,GAAE,yBAA8B,GACtC,oBAAoB,CAmBtB"}
|