@elench/next-analysis 0.1.109
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/api-routes.d.ts +7 -0
- package/dist/api-routes.d.ts.map +1 -0
- package/dist/api-routes.js +66 -0
- package/dist/api-routes.js.map +1 -0
- package/dist/app-root.d.ts +2 -0
- package/dist/app-root.d.ts.map +1 -0
- package/dist/app-root.js +7 -0
- package/dist/app-root.js.map +1 -0
- package/dist/backend-links.d.ts +8 -0
- package/dist/backend-links.d.ts.map +1 -0
- package/dist/backend-links.js +30 -0
- package/dist/backend-links.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pages.d.ts +7 -0
- package/dist/pages.d.ts.map +1 -0
- package/dist/pages.js +47 -0
- package/dist/pages.js.map +1 -0
- package/dist/project.d.ts +4 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +188 -0
- package/dist/project.js.map +1 -0
- package/dist/route-tree.d.ts +7 -0
- package/dist/route-tree.d.ts.map +1 -0
- package/dist/route-tree.js +575 -0
- package/dist/route-tree.js.map +1 -0
- package/dist/routes.d.ts +6 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +41 -0
- package/dist/routes.js.map +1 -0
- package/dist/server-actions.d.ts +7 -0
- package/dist/server-actions.d.ts.map +1 -0
- package/dist/server-actions.js +37 -0
- package/dist/server-actions.js.map +1 -0
- package/dist/shared.d.ts +57 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +229 -0
- package/dist/shared.js.map +1 -0
- package/dist/swc.d.ts +53 -0
- package/dist/swc.d.ts.map +1 -0
- package/dist/swc.js +387 -0
- package/dist/swc.js.map +1 -0
- package/dist/types.d.ts +132 -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 +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAEpE,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACf,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAe,EAAE,QAAgB;IAChE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC5C,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,OAAe;IAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChD,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,mBAAmB,GAAG,YAAY;SACrC,OAAO,CAAC,eAAe,EAAE,MAAM,CAAC;SAChC,OAAO,CAAC,+BAA+B,EAAE,MAAM,CAAC,CAAC;IACpD,OAAO,mBAAmB,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,aAAqB;IAC7E,MAAM,aAAa,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7E,MAAM,iBAAiB,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClF,IAAI,aAAa,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACpE,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QAC5C,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClE,OAAO,OAAO,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,KAAa;IACzD,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,EAAE,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NextServerActionEntry } from "./types.js";
|
|
2
|
+
export declare function discoverServerActions({ rootDir, appRoot, exclude, }: {
|
|
3
|
+
rootDir: string;
|
|
4
|
+
appRoot: string;
|
|
5
|
+
exclude?: string[];
|
|
6
|
+
}): NextServerActionEntry[];
|
|
7
|
+
//# sourceMappingURL=server-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-actions.d.ts","sourceRoot":"","sources":["../src/server-actions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAWxD,wBAAgB,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EACP,OAAY,GACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,qBAAqB,EAAE,CA6B1B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as path from "node:path";
|
|
2
|
+
import { extractBackendRefs } from "./backend-links.js";
|
|
3
|
+
import { isServerActionFile, isSourceModuleFile, normalizePath, readFileIfExists, walkFiles, } from "./shared.js";
|
|
4
|
+
import { collectExportedCallables, collectTopLevelFunctions, parseModule } from "./swc.js";
|
|
5
|
+
export function discoverServerActions({ rootDir, appRoot, exclude = [], }) {
|
|
6
|
+
const actionEntries = [];
|
|
7
|
+
for (const absolutePath of walkFiles(appRoot, { baseDir: rootDir, exclude })) {
|
|
8
|
+
if (!isSourceModuleFile(absolutePath))
|
|
9
|
+
continue;
|
|
10
|
+
const content = readFileIfExists(absolutePath);
|
|
11
|
+
if (!content)
|
|
12
|
+
continue;
|
|
13
|
+
if (!isServerActionFile(content))
|
|
14
|
+
continue;
|
|
15
|
+
const filePath = normalizePath(path.relative(rootDir, absolutePath));
|
|
16
|
+
const ast = parseModule(content, filePath);
|
|
17
|
+
const topLevelFunctions = collectTopLevelFunctions(ast);
|
|
18
|
+
const { exports } = collectExportedCallables(ast, topLevelFunctions);
|
|
19
|
+
const backendRefs = extractBackendRefs({
|
|
20
|
+
ast,
|
|
21
|
+
rootDir,
|
|
22
|
+
filePath,
|
|
23
|
+
readSourceFile: (targetPath) => readFileIfExists(targetPath),
|
|
24
|
+
});
|
|
25
|
+
for (const [exportName] of exports.entries()) {
|
|
26
|
+
actionEntries.push({
|
|
27
|
+
id: `server-action:${filePath}#${exportName}`,
|
|
28
|
+
kind: "server_action",
|
|
29
|
+
filePath,
|
|
30
|
+
exportName,
|
|
31
|
+
backendRefs,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return actionEntries.sort((left, right) => left.filePath.localeCompare(right.filePath) || left.exportName.localeCompare(right.exportName));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=server-actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-actions.js","sourceRoot":"","sources":["../src/server-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE3F,MAAM,UAAU,qBAAqB,CAAC,EACpC,OAAO,EACP,OAAO,EACP,OAAO,GAAG,EAAE,GAKb;IACC,MAAM,aAAa,GAA4B,EAAE,CAAC;IAClD,KAAK,MAAM,YAAY,IAAI,SAAS,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC;YAAE,SAAS;QAChD,MAAM,OAAO,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAAE,SAAS;QAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QACrE,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC3C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QACxD,MAAM,EAAE,OAAO,EAAE,GAAG,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACrE,MAAM,WAAW,GAAG,kBAAkB,CAAC;YACrC,GAAG;YACH,OAAO;YACP,QAAQ;YACR,cAAc,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,gBAAgB,CAAC,UAAU,CAAC;SAC7D,CAAC,CAAC;QAEH,KAAK,MAAM,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,aAAa,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,iBAAiB,QAAQ,IAAI,UAAU,EAAE;gBAC7C,IAAI,EAAE,eAAe;gBACrB,QAAQ;gBACR,UAAU;gBACV,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7I,CAAC"}
|
package/dist/shared.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { NextDiagnostic, NextRequestEntry, NextServerActionRef } from "./types.js";
|
|
2
|
+
export declare const HTTP_METHODS: readonly ["GET", "POST", "PUT", "PATCH", "DELETE"];
|
|
3
|
+
export declare const HTTP_WRAPPER_METHODS: Record<string, string>;
|
|
4
|
+
export declare const DYNAMIC_SEGMENT_TOKEN = "__TESTKIT_DYNAMIC_SEGMENT__";
|
|
5
|
+
export declare const SURFACE_COMPONENT_NAMES: Set<string>;
|
|
6
|
+
export declare function normalizePath(filePath: string): string;
|
|
7
|
+
export declare function normalizeExcludePaths(exclude?: string[]): string[];
|
|
8
|
+
export declare function normalizeRoute(value: string): string;
|
|
9
|
+
export declare function normalizeRouteSegments(segments: Array<string | null | undefined>): string;
|
|
10
|
+
export declare function toApiRequestPath(route: string): string;
|
|
11
|
+
export declare function pageLabelFromRoute(route: string): string;
|
|
12
|
+
export declare function humanizeTagName(tagName: string): string;
|
|
13
|
+
export declare function dedupeById<T extends {
|
|
14
|
+
id: string;
|
|
15
|
+
}>(entries: T[]): T[];
|
|
16
|
+
export declare function dedupeRequests(requests: NextRequestEntry[]): NextRequestEntry[];
|
|
17
|
+
export declare function dedupeRefs(refs: NextServerActionRef[]): NextServerActionRef[];
|
|
18
|
+
export declare function modulePathKey(filePath: string): string;
|
|
19
|
+
export declare function isServerActionFile(content: string): boolean;
|
|
20
|
+
export declare function isBackendSpecifier(specifier: string): boolean;
|
|
21
|
+
export declare function isDataSpecifier(specifier: string): boolean;
|
|
22
|
+
export declare function isSourceModuleFile(filePath: string): boolean;
|
|
23
|
+
export declare function isPageFile(filePath: string): boolean;
|
|
24
|
+
export declare function isLayoutFile(filePath: string): boolean;
|
|
25
|
+
export declare function isRouteHandlerFile(filePath: string): boolean;
|
|
26
|
+
export declare function fileExists(filePath: string): boolean;
|
|
27
|
+
export declare function shouldExcludePath(relativePath: string, exclude?: string[]): boolean;
|
|
28
|
+
export declare function walkFiles(rootDir: string, options?: {
|
|
29
|
+
baseDir?: string;
|
|
30
|
+
exclude?: string[];
|
|
31
|
+
}): string[];
|
|
32
|
+
export declare function directoryExists(filePath: string): boolean;
|
|
33
|
+
export declare function readFileIfExists(filePath: string): string | null;
|
|
34
|
+
export declare function resolveSourceCandidate(basePath: string): string | null;
|
|
35
|
+
export declare function findLineNumber(content: string, spanStart: number | undefined): number;
|
|
36
|
+
export declare function ensureArray<T>(value: T[] | null | undefined): T[];
|
|
37
|
+
export declare function createDiagnostic({ level, code, message, filePath, line, relatedIds, }: {
|
|
38
|
+
level?: "info" | "warn";
|
|
39
|
+
code: string;
|
|
40
|
+
message: string;
|
|
41
|
+
filePath?: string | null;
|
|
42
|
+
line?: number | null;
|
|
43
|
+
relatedIds?: string[];
|
|
44
|
+
}): NextDiagnostic;
|
|
45
|
+
export declare function compareByRoute(left: {
|
|
46
|
+
route: string;
|
|
47
|
+
filePath: string;
|
|
48
|
+
}, right: {
|
|
49
|
+
route: string;
|
|
50
|
+
filePath: string;
|
|
51
|
+
}): number;
|
|
52
|
+
export declare function compareByPath(left: {
|
|
53
|
+
filePath: string;
|
|
54
|
+
}, right: {
|
|
55
|
+
filePath: string;
|
|
56
|
+
}): number;
|
|
57
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAExF,eAAO,MAAM,YAAY,oDAAqD,CAAC;AAC/E,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMvD,CAAC;AACF,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AACnE,eAAO,MAAM,uBAAuB,aAAsE,CAAC;AAE3G,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAEtE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,MAAM,CAQzF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAYxD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAOtE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAQ/E;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAQ7E;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAU1D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMpD;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,GAAE,MAAM,EAAO,GAAG,OAAO,CAIvF;AAED,wBAAgB,SAAS,CACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GACrD,MAAM,EAAE,CA4BV;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBtE;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAQrF;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,EAAE,CAEjE;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAc,EACd,IAAI,EACJ,OAAO,EACP,QAAe,EACf,IAAW,EACX,UAAe,GAChB,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GAAG,cAAc,CASjB;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE5H;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE7F"}
|
package/dist/shared.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
export const HTTP_METHODS = ["GET", "POST", "PUT", "PATCH", "DELETE"];
|
|
4
|
+
export const HTTP_WRAPPER_METHODS = {
|
|
5
|
+
getJson: "GET",
|
|
6
|
+
postJson: "POST",
|
|
7
|
+
putJson: "PUT",
|
|
8
|
+
patchJson: "PATCH",
|
|
9
|
+
deleteJson: "DELETE",
|
|
10
|
+
};
|
|
11
|
+
export const DYNAMIC_SEGMENT_TOKEN = "__TESTKIT_DYNAMIC_SEGMENT__";
|
|
12
|
+
export const SURFACE_COMPONENT_NAMES = new Set(["button", "Button", "form", "Form", "a", "Link", "input"]);
|
|
13
|
+
export function normalizePath(filePath) {
|
|
14
|
+
return String(filePath || "").split(path.sep).join("/");
|
|
15
|
+
}
|
|
16
|
+
export function normalizeExcludePaths(exclude = []) {
|
|
17
|
+
return [...new Set((exclude || []).map((entry) => normalizePath(entry).replace(/^\.\/+/u, "")))].filter(Boolean);
|
|
18
|
+
}
|
|
19
|
+
export function normalizeRoute(value) {
|
|
20
|
+
const trimmed = String(value || "/").trim();
|
|
21
|
+
if (!trimmed || trimmed === "/")
|
|
22
|
+
return "/";
|
|
23
|
+
const withLeadingSlash = trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
|
|
24
|
+
return withLeadingSlash.length > 1 ? withLeadingSlash.replace(/\/+$/u, "") : withLeadingSlash;
|
|
25
|
+
}
|
|
26
|
+
export function normalizeRouteSegments(segments) {
|
|
27
|
+
const normalizedSegments = [...segments]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.map(String)
|
|
30
|
+
.filter((segment) => !segment.startsWith("(") || !segment.endsWith(")"))
|
|
31
|
+
.filter((segment) => !segment.startsWith("@"))
|
|
32
|
+
.filter((segment) => segment !== "page" && segment !== "route" && segment !== "layout");
|
|
33
|
+
return normalizeRoute(`/${normalizedSegments.join("/")}`);
|
|
34
|
+
}
|
|
35
|
+
export function toApiRequestPath(route) {
|
|
36
|
+
return normalizeRoute(`/api${route === "/" ? "" : route}`);
|
|
37
|
+
}
|
|
38
|
+
export function pageLabelFromRoute(route) {
|
|
39
|
+
if (route === "/")
|
|
40
|
+
return "Home";
|
|
41
|
+
return route
|
|
42
|
+
.split("/")
|
|
43
|
+
.filter(Boolean)
|
|
44
|
+
.map((segment) => {
|
|
45
|
+
if (segment.startsWith("[") && segment.endsWith("]"))
|
|
46
|
+
return segment.slice(1, -1);
|
|
47
|
+
return segment;
|
|
48
|
+
})
|
|
49
|
+
.map((segment) => segment.replace(/[-_]+/gu, " "))
|
|
50
|
+
.map((segment) => segment.replace(/^\w/u, (char) => char.toUpperCase()))
|
|
51
|
+
.join(" ");
|
|
52
|
+
}
|
|
53
|
+
export function humanizeTagName(tagName) {
|
|
54
|
+
return String(tagName).replace(/([a-z])([A-Z])/gu, "$1 $2").replace(/^\w/u, (char) => char.toUpperCase());
|
|
55
|
+
}
|
|
56
|
+
export function dedupeById(entries) {
|
|
57
|
+
const seen = new Set();
|
|
58
|
+
return entries.filter((entry) => {
|
|
59
|
+
if (seen.has(entry.id))
|
|
60
|
+
return false;
|
|
61
|
+
seen.add(entry.id);
|
|
62
|
+
return true;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
export function dedupeRequests(requests) {
|
|
66
|
+
const seen = new Set();
|
|
67
|
+
return requests.filter((request) => {
|
|
68
|
+
const key = `${request.ownerId}:${request.method}:${request.path}`;
|
|
69
|
+
if (seen.has(key))
|
|
70
|
+
return false;
|
|
71
|
+
seen.add(key);
|
|
72
|
+
return true;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export function dedupeRefs(refs) {
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
return refs.filter((ref) => {
|
|
78
|
+
const key = `${ref.ownerId || ""}:${ref.exportKey || ""}`;
|
|
79
|
+
if (seen.has(key))
|
|
80
|
+
return false;
|
|
81
|
+
seen.add(key);
|
|
82
|
+
return true;
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
export function modulePathKey(filePath) {
|
|
86
|
+
const normalized = normalizePath(filePath);
|
|
87
|
+
const ext = path.extname(normalized);
|
|
88
|
+
if (path.basename(normalized, ext) === "index") {
|
|
89
|
+
return normalizePath(path.dirname(normalized));
|
|
90
|
+
}
|
|
91
|
+
return normalized.slice(0, normalized.length - ext.length);
|
|
92
|
+
}
|
|
93
|
+
export function isServerActionFile(content) {
|
|
94
|
+
const trimmed = String(content || "").trimStart();
|
|
95
|
+
return trimmed.startsWith('"use server"') || trimmed.startsWith("'use server'");
|
|
96
|
+
}
|
|
97
|
+
export function isBackendSpecifier(specifier) {
|
|
98
|
+
return (specifier.startsWith("@/backend/server/") ||
|
|
99
|
+
specifier.includes("/backend/server/") ||
|
|
100
|
+
specifier.startsWith("./backend/server/") ||
|
|
101
|
+
specifier.startsWith("../backend/server/"));
|
|
102
|
+
}
|
|
103
|
+
export function isDataSpecifier(specifier) {
|
|
104
|
+
return (specifier.startsWith("@/backend/data/") ||
|
|
105
|
+
specifier.startsWith("@/backend/dal/") ||
|
|
106
|
+
specifier.includes("/backend/data/") ||
|
|
107
|
+
specifier.includes("/backend/dal/") ||
|
|
108
|
+
specifier.includes("/db/") ||
|
|
109
|
+
specifier.includes("/repository/") ||
|
|
110
|
+
specifier.includes("/repositories/"));
|
|
111
|
+
}
|
|
112
|
+
export function isSourceModuleFile(filePath) {
|
|
113
|
+
return /\.(?:ts|tsx|js|jsx|mjs)$/u.test(filePath);
|
|
114
|
+
}
|
|
115
|
+
export function isPageFile(filePath) {
|
|
116
|
+
return /\/page\.(?:ts|tsx|js|jsx)$/u.test(normalizePath(filePath));
|
|
117
|
+
}
|
|
118
|
+
export function isLayoutFile(filePath) {
|
|
119
|
+
return /\/layout\.(?:ts|tsx|js|jsx)$/u.test(normalizePath(filePath));
|
|
120
|
+
}
|
|
121
|
+
export function isRouteHandlerFile(filePath) {
|
|
122
|
+
return /\/route\.(?:ts|tsx|js|jsx)$/u.test(normalizePath(filePath));
|
|
123
|
+
}
|
|
124
|
+
export function fileExists(filePath) {
|
|
125
|
+
try {
|
|
126
|
+
return fs.existsSync(filePath) && fs.statSync(filePath).isFile();
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
export function shouldExcludePath(relativePath, exclude = []) {
|
|
133
|
+
const normalizedPath = normalizePath(relativePath).replace(/^\.\/+/u, "");
|
|
134
|
+
if (!normalizedPath || normalizedPath === ".")
|
|
135
|
+
return false;
|
|
136
|
+
return exclude.some((pattern) => normalizedPath === pattern || normalizedPath.startsWith(`${pattern}/`));
|
|
137
|
+
}
|
|
138
|
+
export function walkFiles(rootDir, options = {}) {
|
|
139
|
+
if (!directoryExists(rootDir))
|
|
140
|
+
return [];
|
|
141
|
+
const baseDir = options.baseDir || rootDir;
|
|
142
|
+
const exclude = normalizeExcludePaths(options.exclude || []);
|
|
143
|
+
const results = [];
|
|
144
|
+
const queue = [rootDir];
|
|
145
|
+
while (queue.length > 0) {
|
|
146
|
+
const current = queue.pop();
|
|
147
|
+
if (!current)
|
|
148
|
+
continue;
|
|
149
|
+
for (const entry of fs.readdirSync(current, { withFileTypes: true })) {
|
|
150
|
+
if (entry.isSymbolicLink())
|
|
151
|
+
continue;
|
|
152
|
+
const absolutePath = path.join(current, entry.name);
|
|
153
|
+
if (entry.isDirectory()) {
|
|
154
|
+
const relativeDirPath = normalizePath(path.relative(baseDir, absolutePath));
|
|
155
|
+
if (shouldExcludePath(relativeDirPath, exclude))
|
|
156
|
+
continue;
|
|
157
|
+
queue.push(absolutePath);
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
if (entry.isFile()) {
|
|
161
|
+
const relativeFilePath = normalizePath(path.relative(baseDir, absolutePath));
|
|
162
|
+
if (shouldExcludePath(relativeFilePath, exclude))
|
|
163
|
+
continue;
|
|
164
|
+
results.push(absolutePath);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return results.sort((left, right) => left.localeCompare(right));
|
|
169
|
+
}
|
|
170
|
+
export function directoryExists(filePath) {
|
|
171
|
+
try {
|
|
172
|
+
return fs.existsSync(filePath) && fs.statSync(filePath).isDirectory();
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
export function readFileIfExists(filePath) {
|
|
179
|
+
return fileExists(filePath) ? fs.readFileSync(filePath, "utf8") : null;
|
|
180
|
+
}
|
|
181
|
+
export function resolveSourceCandidate(basePath) {
|
|
182
|
+
const direct = [basePath, `${basePath}.ts`, `${basePath}.tsx`, `${basePath}.js`, `${basePath}.jsx`, `${basePath}.mjs`];
|
|
183
|
+
for (const candidate of direct) {
|
|
184
|
+
if (fileExists(candidate))
|
|
185
|
+
return candidate;
|
|
186
|
+
}
|
|
187
|
+
const indexed = [
|
|
188
|
+
path.join(basePath, "index.ts"),
|
|
189
|
+
path.join(basePath, "index.tsx"),
|
|
190
|
+
path.join(basePath, "index.js"),
|
|
191
|
+
path.join(basePath, "index.jsx"),
|
|
192
|
+
path.join(basePath, "index.mjs"),
|
|
193
|
+
];
|
|
194
|
+
for (const candidate of indexed) {
|
|
195
|
+
if (fileExists(candidate))
|
|
196
|
+
return candidate;
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
export function findLineNumber(content, spanStart) {
|
|
201
|
+
const source = String(content || "");
|
|
202
|
+
const target = Math.max(0, Number(spanStart || 0) - 1);
|
|
203
|
+
let line = 1;
|
|
204
|
+
for (let index = 0; index < source.length && index < target; index += 1) {
|
|
205
|
+
if (source[index] === "\n")
|
|
206
|
+
line += 1;
|
|
207
|
+
}
|
|
208
|
+
return line;
|
|
209
|
+
}
|
|
210
|
+
export function ensureArray(value) {
|
|
211
|
+
return Array.isArray(value) ? value : [];
|
|
212
|
+
}
|
|
213
|
+
export function createDiagnostic({ level = "info", code, message, filePath = null, line = null, relatedIds = [], }) {
|
|
214
|
+
return {
|
|
215
|
+
level,
|
|
216
|
+
code,
|
|
217
|
+
message,
|
|
218
|
+
...(filePath ? { filePath } : {}),
|
|
219
|
+
...(line ? { line } : {}),
|
|
220
|
+
...(relatedIds.length > 0 ? { relatedIds } : {}),
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
export function compareByRoute(left, right) {
|
|
224
|
+
return left.route.localeCompare(right.route) || left.filePath.localeCompare(right.filePath);
|
|
225
|
+
}
|
|
226
|
+
export function compareByPath(left, right) {
|
|
227
|
+
return left.filePath.localeCompare(right.filePath);
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
|
package/dist/swc.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { JSImportRecord } from "@elench/ts-analysis";
|
|
2
|
+
type SwcNode = {
|
|
3
|
+
type?: string;
|
|
4
|
+
span?: {
|
|
5
|
+
start?: number;
|
|
6
|
+
};
|
|
7
|
+
[key: string]: any;
|
|
8
|
+
};
|
|
9
|
+
type SwcModule = {
|
|
10
|
+
body?: SwcNode[];
|
|
11
|
+
[key: string]: any;
|
|
12
|
+
};
|
|
13
|
+
export declare function parseModule(content: string, filePath: string): SwcModule;
|
|
14
|
+
export declare function resolveImportToSourceFile(rootDir: string, fromFilePath: string, specifier: string): string | null;
|
|
15
|
+
export declare function collectImports(ast: SwcModule, { rootDir, filePath, readSourceFile }?: {
|
|
16
|
+
rootDir?: string;
|
|
17
|
+
filePath?: string;
|
|
18
|
+
readSourceFile?: (filePath: string) => string | null;
|
|
19
|
+
}): Map<string, JSImportRecord>;
|
|
20
|
+
export declare function collectTopLevelFunctions(ast: SwcModule): Map<string, SwcNode>;
|
|
21
|
+
export declare function collectExportedCallables(ast: SwcModule, topLevelFunctions: Map<string, SwcNode>): {
|
|
22
|
+
exports: Map<string, SwcNode>;
|
|
23
|
+
defaultExport: SwcNode | null;
|
|
24
|
+
};
|
|
25
|
+
export declare function collectScopeLocalFunctions(node: SwcNode): Map<string, SwcNode>;
|
|
26
|
+
export declare function collectJsxAttributes(opening: SwcNode): Record<string, {
|
|
27
|
+
stringValue: string | null;
|
|
28
|
+
expression: SwcNode | null;
|
|
29
|
+
}>;
|
|
30
|
+
export declare function flattenJsxText(children?: SwcNode[]): string;
|
|
31
|
+
export declare function extractJsxLabel(node: SwcNode, attributes: Record<string, {
|
|
32
|
+
stringValue: string | null;
|
|
33
|
+
}>): string | null;
|
|
34
|
+
export declare function walkJsx(node: SwcNode, visitor: (node: SwcNode, formContext: unknown) => unknown): void;
|
|
35
|
+
export declare function forEachChild(node: SwcNode, visitor: (child: SwcNode) => void): void;
|
|
36
|
+
export declare function extractStringLiteral(node: SwcNode | undefined | null): string | null;
|
|
37
|
+
export declare function extractRouteLiteral(node: SwcNode | undefined | null): string | null;
|
|
38
|
+
export declare function extractFetchMethod(node: SwcNode | undefined | null): string | null;
|
|
39
|
+
export declare function extractHttpRequests(rootNode: SwcNode): Array<{
|
|
40
|
+
method: string;
|
|
41
|
+
path: string;
|
|
42
|
+
confidence: "high";
|
|
43
|
+
}>;
|
|
44
|
+
export declare function resolveHttpRequestCall(callExpression: SwcNode): {
|
|
45
|
+
method: string;
|
|
46
|
+
path: string;
|
|
47
|
+
confidence: "high";
|
|
48
|
+
} | null;
|
|
49
|
+
export declare function extractPlaywrightVisitedRoutes(rootNode: SwcNode): string[];
|
|
50
|
+
export declare function walkNode(node: SwcNode, visitor: (node: SwcNode) => void): void;
|
|
51
|
+
export declare function extractLineNumber(content: string, node: SwcNode): number;
|
|
52
|
+
export {};
|
|
53
|
+
//# sourceMappingURL=swc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swc.d.ts","sourceRoot":"","sources":["../src/swc.ts"],"names":[],"mappings":"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"}
|