@gloocan/cat-inspector 0.1.1
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/artifact-helpers.d.ts +4 -0
- package/dist/artifact-helpers.d.ts.map +1 -0
- package/dist/artifact-helpers.js +21 -0
- package/dist/artifact-helpers.js.map +1 -0
- package/dist/ast/get-all-ts-files.d.ts +5 -0
- package/dist/ast/get-all-ts-files.d.ts.map +1 -0
- package/dist/ast/get-all-ts-files.js +36 -0
- package/dist/ast/get-all-ts-files.js.map +1 -0
- package/dist/ast/merge-ast.d.ts +3 -0
- package/dist/ast/merge-ast.d.ts.map +1 -0
- package/dist/ast/merge-ast.js +40 -0
- package/dist/ast/merge-ast.js.map +1 -0
- package/dist/ast/run-ast-scanner.d.ts +15 -0
- package/dist/ast/run-ast-scanner.d.ts.map +1 -0
- package/dist/ast/run-ast-scanner.js +44 -0
- package/dist/ast/run-ast-scanner.js.map +1 -0
- package/dist/ast/scan-for-labels.d.ts +20 -0
- package/dist/ast/scan-for-labels.d.ts.map +1 -0
- package/dist/ast/scan-for-labels.js +88 -0
- package/dist/ast/scan-for-labels.js.map +1 -0
- package/dist/ast/scan-for-returns.d.ts +13 -0
- package/dist/ast/scan-for-returns.d.ts.map +1 -0
- package/dist/ast/scan-for-returns.js +48 -0
- package/dist/ast/scan-for-returns.js.map +1 -0
- package/dist/ast/type-expand.d.ts +16 -0
- package/dist/ast/type-expand.d.ts.map +1 -0
- package/dist/ast/type-expand.js +118 -0
- package/dist/ast/type-expand.js.map +1 -0
- package/dist/ast/visit-node.d.ts +31 -0
- package/dist/ast/visit-node.d.ts.map +1 -0
- package/dist/ast/visit-node.js +298 -0
- package/dist/ast/visit-node.js.map +1 -0
- package/dist/bootstrap.d.ts +105 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/bootstrap.js +121 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/catalog-bootstrap-cache.d.ts +23 -0
- package/dist/catalog-bootstrap-cache.d.ts.map +1 -0
- package/dist/catalog-bootstrap-cache.js +54 -0
- package/dist/catalog-bootstrap-cache.js.map +1 -0
- package/dist/catalog-fingerprint.d.ts +20 -0
- package/dist/catalog-fingerprint.d.ts.map +1 -0
- package/dist/catalog-fingerprint.js +57 -0
- package/dist/catalog-fingerprint.js.map +1 -0
- package/dist/coverage/compute-coverage.d.ts +41 -0
- package/dist/coverage/compute-coverage.d.ts.map +1 -0
- package/dist/coverage/compute-coverage.js +229 -0
- package/dist/coverage/compute-coverage.js.map +1 -0
- package/dist/coverage/scan-all-service-candidates.d.ts +15 -0
- package/dist/coverage/scan-all-service-candidates.d.ts.map +1 -0
- package/dist/coverage/scan-all-service-candidates.js +73 -0
- package/dist/coverage/scan-all-service-candidates.js.map +1 -0
- package/dist/coverage/scan-express-candidates.d.ts +17 -0
- package/dist/coverage/scan-express-candidates.d.ts.map +1 -0
- package/dist/coverage/scan-express-candidates.js +300 -0
- package/dist/coverage/scan-express-candidates.js.map +1 -0
- package/dist/coverage/scan-reachable-services.d.ts +13 -0
- package/dist/coverage/scan-reachable-services.d.ts.map +1 -0
- package/dist/coverage/scan-reachable-services.js +469 -0
- package/dist/coverage/scan-reachable-services.js.map +1 -0
- package/dist/coverage/types.d.ts +32 -0
- package/dist/coverage/types.d.ts.map +1 -0
- package/dist/coverage/types.js +2 -0
- package/dist/coverage/types.js.map +1 -0
- package/dist/decorators/cat-class.d.ts +11 -0
- package/dist/decorators/cat-class.d.ts.map +1 -0
- package/dist/decorators/cat-class.js +20 -0
- package/dist/decorators/cat-class.js.map +1 -0
- package/dist/decorators/cat.d.ts +3 -0
- package/dist/decorators/cat.d.ts.map +1 -0
- package/dist/decorators/cat.js +102 -0
- package/dist/decorators/cat.js.map +1 -0
- package/dist/express-inspector-correlation.d.ts +23 -0
- package/dist/express-inspector-correlation.d.ts.map +1 -0
- package/dist/express-inspector-correlation.js +50 -0
- package/dist/express-inspector-correlation.js.map +1 -0
- package/dist/express-playground-mocks.d.ts +28 -0
- package/dist/express-playground-mocks.d.ts.map +1 -0
- package/dist/express-playground-mocks.js +55 -0
- package/dist/express-playground-mocks.js.map +1 -0
- package/dist/express-qa-host-minio-upload.d.ts +16 -0
- package/dist/express-qa-host-minio-upload.d.ts.map +1 -0
- package/dist/express-qa-host-minio-upload.js +56 -0
- package/dist/express-qa-host-minio-upload.js.map +1 -0
- package/dist/express.d.ts +21 -0
- package/dist/express.d.ts.map +1 -0
- package/dist/express.js +167 -0
- package/dist/express.js.map +1 -0
- package/dist/functional.d.ts +15 -0
- package/dist/functional.d.ts.map +1 -0
- package/dist/functional.js +165 -0
- package/dist/functional.js.map +1 -0
- package/dist/graph/relationships.d.ts +9 -0
- package/dist/graph/relationships.d.ts.map +1 -0
- package/dist/graph/relationships.js +92 -0
- package/dist/graph/relationships.js.map +1 -0
- package/dist/http-bridge-registry.d.ts +26 -0
- package/dist/http-bridge-registry.d.ts.map +1 -0
- package/dist/http-bridge-registry.js +39 -0
- package/dist/http-bridge-registry.js.map +1 -0
- package/dist/index.d.ts +36 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +35 -0
- package/dist/index.js.map +1 -0
- package/dist/invoke-policy.d.ts +34 -0
- package/dist/invoke-policy.d.ts.map +1 -0
- package/dist/invoke-policy.js +72 -0
- package/dist/invoke-policy.js.map +1 -0
- package/dist/invoke-runtime-config.d.ts +4 -0
- package/dist/invoke-runtime-config.d.ts.map +1 -0
- package/dist/invoke-runtime-config.js +15 -0
- package/dist/invoke-runtime-config.js.map +1 -0
- package/dist/jobs/in-memory-job-registry.d.ts +21 -0
- package/dist/jobs/in-memory-job-registry.d.ts.map +1 -0
- package/dist/jobs/in-memory-job-registry.js +44 -0
- package/dist/jobs/in-memory-job-registry.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +17 -0
- package/dist/logger.js.map +1 -0
- package/dist/openapi/registry-to-openapi.d.ts +11 -0
- package/dist/openapi/registry-to-openapi.d.ts.map +1 -0
- package/dist/openapi/registry-to-openapi.js +61 -0
- package/dist/openapi/registry-to-openapi.js.map +1 -0
- package/dist/registry-state.d.ts +107 -0
- package/dist/registry-state.d.ts.map +1 -0
- package/dist/registry-state.js +302 -0
- package/dist/registry-state.js.map +1 -0
- package/dist/return.d.ts +14 -0
- package/dist/return.d.ts.map +1 -0
- package/dist/return.js +107 -0
- package/dist/return.js.map +1 -0
- package/dist/rpc.d.ts +7 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +287 -0
- package/dist/rpc.js.map +1 -0
- package/dist/serialize-rpc-result.d.ts +38 -0
- package/dist/serialize-rpc-result.d.ts.map +1 -0
- package/dist/serialize-rpc-result.js +132 -0
- package/dist/serialize-rpc-result.js.map +1 -0
- package/dist/session-store.d.ts +9 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-store.js +19 -0
- package/dist/session-store.js.map +1 -0
- package/dist/source-utils.d.ts +19 -0
- package/dist/source-utils.d.ts.map +1 -0
- package/dist/source-utils.js +65 -0
- package/dist/source-utils.js.map +1 -0
- package/dist/transport/remote-bridge-cli.d.ts +2 -0
- package/dist/transport/remote-bridge-cli.d.ts.map +1 -0
- package/dist/transport/remote-bridge-cli.js +12 -0
- package/dist/transport/remote-bridge-cli.js.map +1 -0
- package/dist/transport/remote-inspector-bridge.d.ts +18 -0
- package/dist/transport/remote-inspector-bridge.d.ts.map +1 -0
- package/dist/transport/remote-inspector-bridge.js +71 -0
- package/dist/transport/remote-inspector-bridge.js.map +1 -0
- package/dist/transport/socket-io-playground.d.ts +78 -0
- package/dist/transport/socket-io-playground.d.ts.map +1 -0
- package/dist/transport/socket-io-playground.js +875 -0
- package/dist/transport/socket-io-playground.js.map +1 -0
- package/dist/transport/socket-io.d.ts +4 -0
- package/dist/transport/socket-io.d.ts.map +1 -0
- package/dist/transport/socket-io.js +4 -0
- package/dist/transport/socket-io.js.map +1 -0
- package/dist/transport/ws-server.d.ts +42 -0
- package/dist/transport/ws-server.d.ts.map +1 -0
- package/dist/transport/ws-server.js +429 -0
- package/dist/transport/ws-server.js.map +1 -0
- package/dist/type-string-normalize.d.ts +24 -0
- package/dist/type-string-normalize.d.ts.map +1 -0
- package/dist/type-string-normalize.js +178 -0
- package/dist/type-string-normalize.js.map +1 -0
- package/dist/types.d.ts +218 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/upload/fetch-file-url.d.ts +24 -0
- package/dist/upload/fetch-file-url.d.ts.map +1 -0
- package/dist/upload/fetch-file-url.js +130 -0
- package/dist/upload/fetch-file-url.js.map +1 -0
- package/dist/upload/host-minio-client.d.ts +30 -0
- package/dist/upload/host-minio-client.d.ts.map +1 -0
- package/dist/upload/host-minio-client.js +56 -0
- package/dist/upload/host-minio-client.js.map +1 -0
- package/dist/upload/materialize.d.ts +110 -0
- package/dist/upload/materialize.d.ts.map +1 -0
- package/dist/upload/materialize.js +466 -0
- package/dist/upload/materialize.js.map +1 -0
- package/dist/upload/upload-store.d.ts +44 -0
- package/dist/upload/upload-store.d.ts.map +1 -0
- package/dist/upload/upload-store.js +86 -0
- package/dist/upload/upload-store.js.map +1 -0
- package/dist/validate-params-json-schema.d.ts +13 -0
- package/dist/validate-params-json-schema.d.ts.map +1 -0
- package/dist/validate-params-json-schema.js +37 -0
- package/dist/validate-params-json-schema.js.map +1 -0
- package/dist/validate-return-json-schema.d.ts +9 -0
- package/dist/validate-return-json-schema.d.ts.map +1 -0
- package/dist/validate-return-json-schema.js +33 -0
- package/dist/validate-return-json-schema.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { RpcArtifactRef } from './types.js';
|
|
2
|
+
/** Normalize artifact-like objects nested under `result` into `RpcResponse.artifacts` (optional UX helper). */
|
|
3
|
+
export declare function extractArtifactsFromResult(result: unknown): RpcArtifactRef[] | undefined;
|
|
4
|
+
//# sourceMappingURL=artifact-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-helpers.d.ts","sourceRoot":"","sources":["../src/artifact-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAEhD,+GAA+G;AAC/G,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,EAAE,GAAG,SAAS,CAgBxF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Normalize artifact-like objects nested under `result` into `RpcResponse.artifacts` (optional UX helper). */
|
|
2
|
+
export function extractArtifactsFromResult(result) {
|
|
3
|
+
if (!result || typeof result !== 'object')
|
|
4
|
+
return undefined;
|
|
5
|
+
const r = result;
|
|
6
|
+
const ex = r.express;
|
|
7
|
+
if (ex && typeof ex === 'object' && 'handlerReturn' in ex) {
|
|
8
|
+
return extractArtifactsFromResult(ex.handlerReturn);
|
|
9
|
+
}
|
|
10
|
+
const raw = r.artifacts;
|
|
11
|
+
if (!Array.isArray(raw))
|
|
12
|
+
return undefined;
|
|
13
|
+
const out = [];
|
|
14
|
+
for (const item of raw) {
|
|
15
|
+
if (item && typeof item === 'object' && typeof item.kind === 'string') {
|
|
16
|
+
out.push(item);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return out.length > 0 ? out : undefined;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=artifact-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-helpers.js","sourceRoot":"","sources":["../src/artifact-helpers.ts"],"names":[],"mappings":"AAEA,+GAA+G;AAC/G,MAAM,UAAU,0BAA0B,CAAC,MAAe;IACzD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC3D,MAAM,CAAC,GAAG,MAAiC,CAAA;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAA;IACpB,IAAI,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,eAAe,IAAI,EAAE,EAAE,CAAC;QAC3D,OAAO,0BAA0B,CAAE,EAAkC,CAAC,aAAa,CAAC,CAAA;IACrF,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,CAAC,SAAS,CAAA;IACvB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAA;IACzC,MAAM,GAAG,GAAqB,EAAE,CAAA;IAChC,KAAK,MAAM,IAAI,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAQ,IAAuB,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3F,GAAG,CAAC,IAAI,CAAC,IAAsB,CAAC,CAAA;QACjC,CAAC;IACF,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;AACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-all-ts-files.d.ts","sourceRoot":"","sources":["../../src/ast/get-all-ts-files.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,oBAAoB;IACpC,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAC1B;AAED,wBAAgB,aAAa,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,oBAAyB,GAChC,MAAM,EAAE,CAwBV"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
const DEFAULT_SKIP = new Set([
|
|
4
|
+
'node_modules',
|
|
5
|
+
'dist',
|
|
6
|
+
'.git',
|
|
7
|
+
'coverage',
|
|
8
|
+
'.vite',
|
|
9
|
+
]);
|
|
10
|
+
export function getAllTsFiles(dir, options = {}) {
|
|
11
|
+
const skip = options.skipDirNames ?? DEFAULT_SKIP;
|
|
12
|
+
const results = [];
|
|
13
|
+
function walk(current) {
|
|
14
|
+
let entries;
|
|
15
|
+
try {
|
|
16
|
+
entries = fs.readdirSync(current, { withFileTypes: true });
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
for (const ent of entries) {
|
|
22
|
+
const full = path.join(current, ent.name);
|
|
23
|
+
if (ent.isDirectory()) {
|
|
24
|
+
if (skip.has(ent.name))
|
|
25
|
+
continue;
|
|
26
|
+
walk(full);
|
|
27
|
+
}
|
|
28
|
+
else if (ent.isFile() && ent.name.endsWith('.ts') && !ent.name.endsWith('.d.ts')) {
|
|
29
|
+
results.push(full);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
walk(dir);
|
|
34
|
+
return results;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=get-all-ts-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-all-ts-files.js","sourceRoot":"","sources":["../../src/ast/get-all-ts-files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC5B,cAAc;IACd,MAAM;IACN,MAAM;IACN,UAAU;IACV,OAAO;CACP,CAAC,CAAA;AAMF,MAAM,UAAU,aAAa,CAC5B,GAAW,EACX,UAAgC,EAAE;IAElC,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAA;IACjD,MAAM,OAAO,GAAa,EAAE,CAAA;IAE5B,SAAS,IAAI,CAAC,OAAe;QAC5B,IAAI,OAAoB,CAAA;QACxB,IAAI,CAAC;YACJ,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3D,CAAC;QAAC,MAAM,CAAC;YACR,OAAM;QACP,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;YACzC,IAAI,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAQ;gBAChC,IAAI,CAAC,IAAI,CAAC,CAAA;YACX,CAAC;iBAAM,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpF,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnB,CAAC;QACF,CAAC;IACF,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,OAAO,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ast.d.ts","sourceRoot":"","sources":["../../src/ast/merge-ast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,IAAI,CAuCxE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Registry } from '../registry-state.js';
|
|
2
|
+
export function mergeASTIntoRegistry(astResults) {
|
|
3
|
+
for (const row of astResults) {
|
|
4
|
+
const { fnName, className, returns, throws, apiReturns } = row;
|
|
5
|
+
const fnKey = `${className}.${fnName}`;
|
|
6
|
+
if (!Registry.has(fnKey))
|
|
7
|
+
continue;
|
|
8
|
+
const meta = Registry.get(fnKey);
|
|
9
|
+
if (row.paramsFromAst && row.paramsFromAst.length > 0) {
|
|
10
|
+
meta.params = row.paramsFromAst;
|
|
11
|
+
}
|
|
12
|
+
if (row.declaredReturnFromAst !== undefined) {
|
|
13
|
+
meta.declaredReturn = row.declaredReturnFromAst;
|
|
14
|
+
}
|
|
15
|
+
for (const { label, type } of returns) {
|
|
16
|
+
const entry = meta.returns.find((r) => r.label === label);
|
|
17
|
+
if (entry) {
|
|
18
|
+
entry.type = type;
|
|
19
|
+
entry.status = 'resolved';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
for (const { label, type } of throws) {
|
|
23
|
+
const entry = meta.errors.find((e) => e.label === label);
|
|
24
|
+
if (entry) {
|
|
25
|
+
entry.type = type;
|
|
26
|
+
entry.status = 'resolved';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
for (const { label, statusCode, bodyType } of apiReturns) {
|
|
30
|
+
const entry = meta.apiResponses.find((r) => r.label === label);
|
|
31
|
+
if (entry) {
|
|
32
|
+
if (statusCode !== null)
|
|
33
|
+
entry.statusCode = statusCode;
|
|
34
|
+
entry.bodyShape = bodyType;
|
|
35
|
+
entry.status = 'resolved';
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=merge-ast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-ast.js","sourceRoot":"","sources":["../../src/ast/merge-ast.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAE/C,MAAM,UAAU,oBAAoB,CAAC,UAA6B;IACjE,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,GAAG,CAAA;QAC9D,MAAM,KAAK,GAAG,GAAG,SAAS,IAAI,MAAM,EAAE,CAAA;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,SAAQ;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAE,CAAA;QAEjC,IAAI,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,aAAa,CAAA;QAChC,CAAC;QACD,IAAI,GAAG,CAAC,qBAAqB,KAAK,SAAS,EAAE,CAAC;YAC7C,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC,qBAAqB,CAAA;QAChD,CAAC;QAED,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YACzD,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;gBACjB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAA;YAC1B,CAAC;QACF,CAAC;QAED,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YACxD,IAAI,KAAK,EAAE,CAAC;gBACX,KAAK,CAAC,IAAI,GAAG,IAAI,CAAA;gBACjB,KAAK,CAAC,MAAM,GAAG,UAAU,CAAA;YAC1B,CAAC;QACF,CAAC;QAED,KAAK,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;YAC9D,IAAI,KAAK,EAAE,CAAC;gBACX,IAAI,UAAU,KAAK,IAAI;oBAAE,KAAK,CAAC,UAAU,GAAG,UAAU,CAAA;gBACtD,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAA;gBAC1B,KAAK,CAAC,MAAM,GAAG,UAAU,CAAA;YAC1B,CAAC;QACF,CAAC;IACF,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type GetAllTsFilesOptions } from './get-all-ts-files.js';
|
|
3
|
+
import type { ExpandTypeOptions } from './type-expand.js';
|
|
4
|
+
import type { AstMethodResult } from './visit-node.js';
|
|
5
|
+
export interface RunAstScannerOptions {
|
|
6
|
+
getAllTsFilesOptions?: GetAllTsFilesOptions;
|
|
7
|
+
/** Extra compiler options merged over parsed config */
|
|
8
|
+
compilerOptions?: ts.CompilerOptions;
|
|
9
|
+
/** If set, only these files are in the program (for tests / narrow scans) */
|
|
10
|
+
files?: string[];
|
|
11
|
+
expandParamTypes?: boolean;
|
|
12
|
+
expandParamTypesOptions?: ExpandTypeOptions;
|
|
13
|
+
}
|
|
14
|
+
export declare function runASTScanner(rootDir: string, options?: RunAstScannerOptions): AstMethodResult[];
|
|
15
|
+
//# sourceMappingURL=run-ast-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-ast-scanner.d.ts","sourceRoot":"","sources":["../../src/ast/run-ast-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGtD,MAAM,WAAW,oBAAoB;IACpC,oBAAoB,CAAC,EAAE,oBAAoB,CAAA;IAC3C,uDAAuD;IACvD,eAAe,CAAC,EAAE,EAAE,CAAC,eAAe,CAAA;IACpC,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,uBAAuB,CAAC,EAAE,iBAAiB,CAAA;CAC3C;AAgCD,wBAAgB,aAAa,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAyB,GAChC,eAAe,EAAE,CAsBnB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import ts from 'typescript';
|
|
4
|
+
import { getAllTsFiles } from './get-all-ts-files.js';
|
|
5
|
+
import { visitNode } from './visit-node.js';
|
|
6
|
+
function loadCompilerOptions(rootDir, extra) {
|
|
7
|
+
const configPath = ts.findConfigFile(rootDir, ts.sys.fileExists, 'tsconfig.json');
|
|
8
|
+
if (!configPath) {
|
|
9
|
+
return {
|
|
10
|
+
...(extra ?? {}),
|
|
11
|
+
target: ts.ScriptTarget.ES2022,
|
|
12
|
+
module: ts.ModuleKind.NodeNext,
|
|
13
|
+
moduleResolution: ts.ModuleResolutionKind.NodeNext,
|
|
14
|
+
experimentalDecorators: true,
|
|
15
|
+
emitDecoratorMetadata: true,
|
|
16
|
+
strict: true,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const read = ts.readConfigFile(configPath, (p) => fs.readFileSync(p, 'utf8'));
|
|
20
|
+
if (read.error) {
|
|
21
|
+
throw new Error(ts.formatDiagnostic(read.error, ts.createCompilerHost({})));
|
|
22
|
+
}
|
|
23
|
+
const parsed = ts.parseJsonConfigFileContent(read.config, ts.sys, path.dirname(configPath), undefined, configPath);
|
|
24
|
+
return { ...parsed.options, ...extra };
|
|
25
|
+
}
|
|
26
|
+
export function runASTScanner(rootDir, options = {}) {
|
|
27
|
+
const files = options.files ?? getAllTsFiles(rootDir, options.getAllTsFilesOptions);
|
|
28
|
+
const results = [];
|
|
29
|
+
const compilerOptions = loadCompilerOptions(rootDir, options.compilerOptions);
|
|
30
|
+
const program = ts.createProgram(files, compilerOptions);
|
|
31
|
+
const checker = program.getTypeChecker();
|
|
32
|
+
for (const filePath of files) {
|
|
33
|
+
const source = program.getSourceFile(filePath);
|
|
34
|
+
if (!source)
|
|
35
|
+
continue;
|
|
36
|
+
ts.forEachChild(source, (node) => visitNode(node, source, checker, results, {
|
|
37
|
+
expandParamTypes: options.expandParamTypes ?? true,
|
|
38
|
+
expandParamTypesOptions: options.expandParamTypesOptions,
|
|
39
|
+
program,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
return results;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=run-ast-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-ast-scanner.js","sourceRoot":"","sources":["../../src/ast/run-ast-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,aAAa,EAA6B,MAAM,uBAAuB,CAAA;AAGhF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAY3C,SAAS,mBAAmB,CAC3B,OAAe,EACf,KAA0B;IAE1B,MAAM,UAAU,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;IACjF,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO;YACN,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAChB,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM;YAC9B,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ;YAC9B,gBAAgB,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ;YAClD,sBAAsB,EAAE,IAAI;YAC5B,qBAAqB,EAAE,IAAI;YAC3B,MAAM,EAAE,IAAI;SACZ,CAAA;IACF,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC7E,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,EAAE,CAAC,0BAA0B,CAC3C,IAAI,CAAC,MAAM,EACX,EAAE,CAAC,GAAG,EACN,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EACxB,SAAS,EACT,UAAU,CACV,CAAA;IACD,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,KAAK,EAAE,CAAA;AACvC,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,OAAe,EACf,UAAgC,EAAE;IAElC,MAAM,KAAK,GACV,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAA;IACtE,MAAM,OAAO,GAAsB,EAAE,CAAA;IACrC,MAAM,eAAe,GAAG,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IAE7E,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAA;IACxD,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,EAAE,CAAA;IAExC,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC9C,IAAI,CAAC,MAAM;YAAE,SAAQ;QACrB,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAChC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE;YACzC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI;YAClD,uBAAuB,EAAE,OAAO,CAAC,uBAAuB;YACxD,OAAO;SACP,CAAC,CACF,CAAA;IACF,CAAC;IAED,OAAO,OAAO,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export declare function parseThrowCall(node: ts.CallExpression): {
|
|
3
|
+
label: string;
|
|
4
|
+
errorExpr: ts.Expression;
|
|
5
|
+
} | null;
|
|
6
|
+
export declare function parseApiReturnCall(node: ts.CallExpression): {
|
|
7
|
+
label: string;
|
|
8
|
+
statusCodeExpr: ts.Expression;
|
|
9
|
+
bodyExpr: ts.Expression;
|
|
10
|
+
} | null;
|
|
11
|
+
export declare function scanForThrows(node: ts.Node, checker: ts.TypeChecker, results: {
|
|
12
|
+
label: string;
|
|
13
|
+
type: string;
|
|
14
|
+
}[]): void;
|
|
15
|
+
export declare function scanForApiReturns(node: ts.Node, checker: ts.TypeChecker, results: {
|
|
16
|
+
label: string;
|
|
17
|
+
statusCode: number | null;
|
|
18
|
+
bodyType: string;
|
|
19
|
+
}[]): void;
|
|
20
|
+
//# sourceMappingURL=scan-for-labels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-for-labels.d.ts","sourceRoot":"","sources":["../../src/ast/scan-for-labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAkB3B,wBAAgB,cAAc,CAC7B,IAAI,EAAE,EAAE,CAAC,cAAc,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAA;CAAE,GAAG,IAAI,CAmBpD;AAED,wBAAgB,kBAAkB,CACjC,IAAI,EAAE,EAAE,CAAC,cAAc,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,EAAE,CAAC,UAAU,CAAC;IAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,CAAA;CAAE,GAAG,IAAI,CAmBlF;AAED,wBAAgB,aAAa,CAC5B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACxC,IAAI,CAYN;AAED,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAAE,GACvE,IAAI,CAiBN"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
function stringLiteralText(n) {
|
|
3
|
+
if (ts.isStringLiteral(n) || ts.isNoSubstitutionTemplateLiteral(n))
|
|
4
|
+
return n.text;
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
function unwrapCallee(expr) {
|
|
8
|
+
if (ts.isParenthesizedExpression(expr))
|
|
9
|
+
return unwrapCallee(expr.expression);
|
|
10
|
+
return expr;
|
|
11
|
+
}
|
|
12
|
+
function isCommaCallee(expr, name) {
|
|
13
|
+
if (!ts.isBinaryExpression(expr))
|
|
14
|
+
return false;
|
|
15
|
+
if (expr.operatorToken.kind !== ts.SyntaxKind.CommaToken)
|
|
16
|
+
return false;
|
|
17
|
+
return ts.isIdentifier(expr.right) && expr.right.text === name;
|
|
18
|
+
}
|
|
19
|
+
export function parseThrowCall(node) {
|
|
20
|
+
const args = node.arguments;
|
|
21
|
+
if (args.length < 2)
|
|
22
|
+
return null;
|
|
23
|
+
const cal = unwrapCallee(node.expression);
|
|
24
|
+
if (ts.isIdentifier(cal) && cal.text === 'Throw') {
|
|
25
|
+
const label = stringLiteralText(args[0]);
|
|
26
|
+
if (label === null)
|
|
27
|
+
return null;
|
|
28
|
+
return { label, errorExpr: args[1] };
|
|
29
|
+
}
|
|
30
|
+
if (isCommaCallee(cal, 'Throw')) {
|
|
31
|
+
const label = stringLiteralText(args[0]);
|
|
32
|
+
if (label === null)
|
|
33
|
+
return null;
|
|
34
|
+
return { label, errorExpr: args[1] };
|
|
35
|
+
}
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
export function parseApiReturnCall(node) {
|
|
39
|
+
const args = node.arguments;
|
|
40
|
+
if (args.length < 3)
|
|
41
|
+
return null;
|
|
42
|
+
const cal = unwrapCallee(node.expression);
|
|
43
|
+
if (ts.isIdentifier(cal) && cal.text === 'ApiReturn') {
|
|
44
|
+
const label = stringLiteralText(args[0]);
|
|
45
|
+
if (label === null)
|
|
46
|
+
return null;
|
|
47
|
+
return { label, statusCodeExpr: args[1], bodyExpr: args[2] };
|
|
48
|
+
}
|
|
49
|
+
if (isCommaCallee(cal, 'ApiReturn')) {
|
|
50
|
+
const label = stringLiteralText(args[0]);
|
|
51
|
+
if (label === null)
|
|
52
|
+
return null;
|
|
53
|
+
return { label, statusCodeExpr: args[1], bodyExpr: args[2] };
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
export function scanForThrows(node, checker, results) {
|
|
58
|
+
if (ts.isCallExpression(node)) {
|
|
59
|
+
const parsed = parseThrowCall(node);
|
|
60
|
+
if (parsed) {
|
|
61
|
+
const type = checker.getTypeAtLocation(parsed.errorExpr);
|
|
62
|
+
results.push({
|
|
63
|
+
label: parsed.label,
|
|
64
|
+
type: checker.typeToString(type),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
ts.forEachChild(node, (child) => scanForThrows(child, checker, results));
|
|
69
|
+
}
|
|
70
|
+
export function scanForApiReturns(node, checker, results) {
|
|
71
|
+
if (ts.isCallExpression(node)) {
|
|
72
|
+
const parsed = parseApiReturnCall(node);
|
|
73
|
+
if (parsed) {
|
|
74
|
+
let statusCode = null;
|
|
75
|
+
if (ts.isNumericLiteral(parsed.statusCodeExpr)) {
|
|
76
|
+
statusCode = Number(parsed.statusCodeExpr.text);
|
|
77
|
+
}
|
|
78
|
+
const body = checker.getTypeAtLocation(parsed.bodyExpr);
|
|
79
|
+
results.push({
|
|
80
|
+
label: parsed.label,
|
|
81
|
+
statusCode,
|
|
82
|
+
bodyType: checker.typeToString(body),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
ts.forEachChild(node, (child) => scanForApiReturns(child, checker, results));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=scan-for-labels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-for-labels.js","sourceRoot":"","sources":["../../src/ast/scan-for-labels.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,SAAS,iBAAiB,CAAC,CAAgB;IAC1C,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAA;IACjF,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,SAAS,YAAY,CAAC,IAAmB;IACxC,IAAI,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC;QAAE,OAAO,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAC5E,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,IAAmB,EAAE,IAAY;IACvD,IAAI,CAAC,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAA;IAC9C,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IACtE,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,IAAuB;IAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAEhC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEzC,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;IACtC,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;IACtC,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,IAAuB;IAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAEhC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAEzC,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;IAC/D,CAAC;IAED,IAAI,aAAa,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;IAC/D,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,aAAa,CAC5B,IAAa,EACb,OAAuB,EACvB,OAA0C;IAE1C,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACxD,OAAO,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;aAChC,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAChC,IAAa,EACb,OAAuB,EACvB,OAAyE;IAEzE,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,MAAM,EAAE,CAAC;YACZ,IAAI,UAAU,GAAkB,IAAI,CAAA;YACpC,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAChD,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAChD,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YACvD,OAAO,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,UAAU;gBACV,QAAQ,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;aACpC,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AAC7E,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
/**
|
|
3
|
+
* Recognizes `Return("L", v)` and `(0,Return)("L", v)`-style calls.
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseReturnCall(node: ts.CallExpression): {
|
|
6
|
+
label: string;
|
|
7
|
+
valueExpr: ts.Expression;
|
|
8
|
+
} | null;
|
|
9
|
+
export declare function scanForReturns(node: ts.Node, checker: ts.TypeChecker, results: {
|
|
10
|
+
label: string;
|
|
11
|
+
type: string;
|
|
12
|
+
}[]): void;
|
|
13
|
+
//# sourceMappingURL=scan-for-returns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-for-returns.d.ts","sourceRoot":"","sources":["../../src/ast/scan-for-returns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAO3B;;GAEG;AACH,wBAAgB,eAAe,CAC9B,IAAI,EAAE,EAAE,CAAC,cAAc,GACrB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,EAAE,CAAC,UAAU,CAAA;CAAE,GAAG,IAAI,CAyBpD;AAED,wBAAgB,cAAc,CAC7B,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,GACxC,IAAI,CAYN"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
function stringLiteralText(n) {
|
|
3
|
+
if (ts.isStringLiteral(n) || ts.isNoSubstitutionTemplateLiteral(n))
|
|
4
|
+
return n.text;
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Recognizes `Return("L", v)` and `(0,Return)("L", v)`-style calls.
|
|
9
|
+
*/
|
|
10
|
+
export function parseReturnCall(node) {
|
|
11
|
+
const args = node.arguments;
|
|
12
|
+
if (args.length < 2)
|
|
13
|
+
return null;
|
|
14
|
+
let cal = node.expression;
|
|
15
|
+
if (ts.isParenthesizedExpression(cal)) {
|
|
16
|
+
cal = cal.expression;
|
|
17
|
+
}
|
|
18
|
+
if (ts.isIdentifier(cal) && cal.text === 'Return') {
|
|
19
|
+
const label = stringLiteralText(args[0]);
|
|
20
|
+
if (label === null)
|
|
21
|
+
return null;
|
|
22
|
+
return { label, valueExpr: args[1] };
|
|
23
|
+
}
|
|
24
|
+
if (ts.isBinaryExpression(cal) && cal.operatorToken.kind === ts.SyntaxKind.CommaToken) {
|
|
25
|
+
const right = cal.right;
|
|
26
|
+
if (ts.isIdentifier(right) && right.text === 'Return') {
|
|
27
|
+
const label = stringLiteralText(args[0]);
|
|
28
|
+
if (label === null)
|
|
29
|
+
return null;
|
|
30
|
+
return { label, valueExpr: args[1] };
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
export function scanForReturns(node, checker, results) {
|
|
36
|
+
if (ts.isCallExpression(node)) {
|
|
37
|
+
const parsed = parseReturnCall(node);
|
|
38
|
+
if (parsed) {
|
|
39
|
+
const type = checker.getTypeAtLocation(parsed.valueExpr);
|
|
40
|
+
results.push({
|
|
41
|
+
label: parsed.label,
|
|
42
|
+
type: checker.typeToString(type),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
ts.forEachChild(node, (child) => scanForReturns(child, checker, results));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=scan-for-returns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-for-returns.js","sourceRoot":"","sources":["../../src/ast/scan-for-returns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,SAAS,iBAAiB,CAAC,CAAgB;IAC1C,IAAI,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,IAAI,CAAA;IACjF,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAC9B,IAAuB;IAEvB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAEhC,IAAI,GAAG,GAAkB,IAAI,CAAC,UAAU,CAAA;IACxC,IAAI,EAAE,CAAC,yBAAyB,CAAC,GAAG,CAAC,EAAE,CAAC;QACvC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAA;IACrB,CAAC;IAED,IAAI,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;QACzC,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;IACtC,CAAC;IAED,IAAI,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,aAAa,CAAC,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QACvF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAA;QACvB,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,CAAA;YACzC,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAA;YAC/B,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAE,EAAE,CAAA;QACtC,CAAC;IACF,CAAC;IAED,OAAO,IAAI,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,cAAc,CAC7B,IAAa,EACb,OAAuB,EACvB,OAA0C;IAE1C,IAAI,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YACxD,OAAO,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;aAChC,CAAC,CAAA;QACH,CAAC;IACF,CAAC;IACD,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAA;AAC1E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
export interface ExpandTypeOptions {
|
|
3
|
+
maxDepth?: number;
|
|
4
|
+
maxProps?: number;
|
|
5
|
+
maxUnion?: number;
|
|
6
|
+
maxLen?: number;
|
|
7
|
+
/** When set (e.g. from runASTScanner), lib/external object types collapse to `typeToString` (e.g. `File`). */
|
|
8
|
+
program?: ts.Program;
|
|
9
|
+
/**
|
|
10
|
+
* When true, object/interface types declared only in default or external library sources use short names.
|
|
11
|
+
* Default: `true` when `program` is set, otherwise `false`.
|
|
12
|
+
*/
|
|
13
|
+
collapseLibOrExternalObjectShapes?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function expandTypeToShapeString(type: ts.Type, checker: ts.TypeChecker, contextNode: ts.Node, opts?: ExpandTypeOptions): string;
|
|
16
|
+
//# sourceMappingURL=type-expand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-expand.d.ts","sourceRoot":"","sources":["../../src/ast/type-expand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,8GAA8G;IAC9G,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAA;IACpB;;;OAGG;IACH,iCAAiC,CAAC,EAAE,OAAO,CAAA;CAC3C;AAyKD,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,WAAW,EAAE,EAAE,CAAC,IAAI,EACpB,IAAI,GAAE,iBAAsB,GAC1B,MAAM,CAQR"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
const DEFAULT_EXPAND_TYPE_OPTIONS = {
|
|
3
|
+
maxDepth: 3,
|
|
4
|
+
maxProps: 30,
|
|
5
|
+
maxUnion: 5,
|
|
6
|
+
maxLen: 2000,
|
|
7
|
+
};
|
|
8
|
+
function resolveExpandOptions(opts = {}) {
|
|
9
|
+
const collapseLibOrExternalObjectShapes = opts.collapseLibOrExternalObjectShapes ?? Boolean(opts.program);
|
|
10
|
+
return {
|
|
11
|
+
maxDepth: opts.maxDepth ?? DEFAULT_EXPAND_TYPE_OPTIONS.maxDepth,
|
|
12
|
+
maxProps: opts.maxProps ?? DEFAULT_EXPAND_TYPE_OPTIONS.maxProps,
|
|
13
|
+
maxUnion: opts.maxUnion ?? DEFAULT_EXPAND_TYPE_OPTIONS.maxUnion,
|
|
14
|
+
maxLen: opts.maxLen ?? DEFAULT_EXPAND_TYPE_OPTIONS.maxLen,
|
|
15
|
+
program: opts.program,
|
|
16
|
+
collapseLibOrExternalObjectShapes,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function resolveNonAliasSymbol(type, checker) {
|
|
20
|
+
let sym = type.aliasSymbol ?? type.getSymbol();
|
|
21
|
+
if (!sym)
|
|
22
|
+
return undefined;
|
|
23
|
+
while (sym.flags & ts.SymbolFlags.Alias) {
|
|
24
|
+
sym = checker.getAliasedSymbol(sym);
|
|
25
|
+
}
|
|
26
|
+
return sym;
|
|
27
|
+
}
|
|
28
|
+
/** True when every declaration lives in TS default libs or node_modules / external typings. */
|
|
29
|
+
function shouldCollapseObjectTypeToName(program, collapse, checker, type) {
|
|
30
|
+
if (!collapse || !program)
|
|
31
|
+
return false;
|
|
32
|
+
const sym = resolveNonAliasSymbol(type, checker);
|
|
33
|
+
if (!sym?.declarations?.length)
|
|
34
|
+
return false;
|
|
35
|
+
return sym.declarations.every((decl) => {
|
|
36
|
+
const sf = decl.getSourceFile();
|
|
37
|
+
return program.isSourceFileDefaultLibrary(sf) || program.isSourceFileFromExternalLibrary(sf);
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
function withFallback(type, checker, value, options) {
|
|
41
|
+
if (value.length > options.maxLen)
|
|
42
|
+
return checker.typeToString(type);
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
function isOptionalProperty(symbol) {
|
|
46
|
+
if ((symbol.flags & ts.SymbolFlags.Optional) !== 0)
|
|
47
|
+
return true;
|
|
48
|
+
return symbol.declarations?.some((decl) => {
|
|
49
|
+
return ((ts.isPropertySignature(decl) || ts.isPropertyDeclaration(decl) || ts.isParameter(decl)) &&
|
|
50
|
+
decl.questionToken !== undefined);
|
|
51
|
+
}) ?? false;
|
|
52
|
+
}
|
|
53
|
+
function expandTypeInternal(type, checker, contextNode, options, depth, state) {
|
|
54
|
+
if (depth >= options.maxDepth)
|
|
55
|
+
return checker.typeToString(type);
|
|
56
|
+
if (state.seen.has(type))
|
|
57
|
+
return checker.typeToString(type);
|
|
58
|
+
if (checker.isArrayType(type)) {
|
|
59
|
+
const [elementType] = checker.getTypeArguments(type);
|
|
60
|
+
if (!elementType)
|
|
61
|
+
return checker.typeToString(type);
|
|
62
|
+
const expanded = expandTypeInternal(elementType, checker, contextNode, options, depth + 1, state);
|
|
63
|
+
return withFallback(type, checker, `Array<${expanded}>`, options);
|
|
64
|
+
}
|
|
65
|
+
if (checker.isTupleType(type)) {
|
|
66
|
+
const tupleArgs = checker
|
|
67
|
+
.getTypeArguments(type)
|
|
68
|
+
.map((arg) => expandTypeInternal(arg, checker, contextNode, options, depth + 1, state));
|
|
69
|
+
return withFallback(type, checker, `[${tupleArgs.join(', ')}]`, options);
|
|
70
|
+
}
|
|
71
|
+
if (type.isUnion()) {
|
|
72
|
+
const booleanLike = new Set(type.types.map((part) => checker.typeToString(part)));
|
|
73
|
+
if (booleanLike.size === 2 && booleanLike.has('false') && booleanLike.has('true')) {
|
|
74
|
+
return 'boolean';
|
|
75
|
+
}
|
|
76
|
+
if (type.types.length > options.maxUnion)
|
|
77
|
+
return checker.typeToString(type);
|
|
78
|
+
const parts = type.types.map((part) => expandTypeInternal(part, checker, contextNode, options, depth + 1, state));
|
|
79
|
+
return withFallback(type, checker, parts.join(' | '), options);
|
|
80
|
+
}
|
|
81
|
+
if (type.isIntersection()) {
|
|
82
|
+
if (type.types.length > options.maxUnion)
|
|
83
|
+
return checker.typeToString(type);
|
|
84
|
+
const parts = type.types.map((part) => expandTypeInternal(part, checker, contextNode, options, depth + 1, state));
|
|
85
|
+
return withFallback(type, checker, parts.join(' & '), options);
|
|
86
|
+
}
|
|
87
|
+
const primitiveString = checker.typeToString(type);
|
|
88
|
+
if ((type.flags & ts.TypeFlags.Object) === 0)
|
|
89
|
+
return primitiveString;
|
|
90
|
+
const properties = checker.getPropertiesOfType(type);
|
|
91
|
+
if (properties.length === 0)
|
|
92
|
+
return primitiveString;
|
|
93
|
+
if (properties.length > options.maxProps)
|
|
94
|
+
return primitiveString;
|
|
95
|
+
if (shouldCollapseObjectTypeToName(options.program, options.collapseLibOrExternalObjectShapes, checker, type)) {
|
|
96
|
+
return primitiveString;
|
|
97
|
+
}
|
|
98
|
+
state.seen.add(type);
|
|
99
|
+
try {
|
|
100
|
+
const fields = properties.map((symbol) => {
|
|
101
|
+
const propertyType = checker.getTypeOfSymbolAtLocation(symbol, contextNode);
|
|
102
|
+
const propText = expandTypeInternal(propertyType, checker, contextNode, options, depth + 1, state);
|
|
103
|
+
return `${symbol.getName()}${isOptionalProperty(symbol) ? '?' : ''}: ${propText}`;
|
|
104
|
+
});
|
|
105
|
+
return withFallback(type, checker, `{ ${fields.join('; ')} }`, options);
|
|
106
|
+
}
|
|
107
|
+
finally {
|
|
108
|
+
state.seen.delete(type);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
export function expandTypeToShapeString(type, checker, contextNode, opts = {}) {
|
|
112
|
+
const options = resolveExpandOptions(opts);
|
|
113
|
+
if (options.maxDepth <= 0 || options.maxProps <= 0 || options.maxUnion <= 0 || options.maxLen <= 0) {
|
|
114
|
+
return checker.typeToString(type);
|
|
115
|
+
}
|
|
116
|
+
return expandTypeInternal(type, checker, contextNode, options, 0, { seen: new Set() });
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=type-expand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-expand.js","sourceRoot":"","sources":["../../src/ast/type-expand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import ts from 'typescript';
|
|
2
|
+
import { type ExpandTypeOptions } from './type-expand.js';
|
|
3
|
+
import type { RegistryParam } from '../types.js';
|
|
4
|
+
export interface AstMethodResult {
|
|
5
|
+
fnName: string;
|
|
6
|
+
className: string;
|
|
7
|
+
returns: {
|
|
8
|
+
label: string;
|
|
9
|
+
type: string;
|
|
10
|
+
}[];
|
|
11
|
+
throws: {
|
|
12
|
+
label: string;
|
|
13
|
+
type: string;
|
|
14
|
+
}[];
|
|
15
|
+
apiReturns: {
|
|
16
|
+
label: string;
|
|
17
|
+
statusCode: number | null;
|
|
18
|
+
bodyType: string;
|
|
19
|
+
}[];
|
|
20
|
+
/** From TypeChecker — fills registry when reflect-metadata is missing (e.g. Vitest/esbuild) */
|
|
21
|
+
paramsFromAst?: RegistryParam[];
|
|
22
|
+
declaredReturnFromAst?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface VisitNodeOptions {
|
|
25
|
+
expandParamTypes: boolean;
|
|
26
|
+
expandParamTypesOptions?: ExpandTypeOptions;
|
|
27
|
+
/** Passed from runASTScanner into param type expansion (lib/external collapse). */
|
|
28
|
+
program?: ts.Program;
|
|
29
|
+
}
|
|
30
|
+
export declare function visitNode(node: ts.Node, _source: ts.SourceFile, checker: ts.TypeChecker, results: AstMethodResult[], options: VisitNodeOptions): void;
|
|
31
|
+
//# sourceMappingURL=visit-node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visit-node.d.ts","sourceRoot":"","sources":["../../src/ast/visit-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAI3B,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC1C,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACzC,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5E,+FAA+F;IAC/F,aAAa,CAAC,EAAE,aAAa,EAAE,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAChC,gBAAgB,EAAE,OAAO,CAAA;IACzB,uBAAuB,CAAC,EAAE,iBAAiB,CAAA;IAC3C,mFAAmF;IACnF,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAA;CACpB;AAmSD,wBAAgB,SAAS,CACxB,IAAI,EAAE,EAAE,CAAC,IAAI,EACb,OAAO,EAAE,EAAE,CAAC,UAAU,EACtB,OAAO,EAAE,EAAE,CAAC,WAAW,EACvB,OAAO,EAAE,eAAe,EAAE,EAC1B,OAAO,EAAE,gBAAgB,GACvB,IAAI,CA+BN"}
|