typebulb 0.12.0 → 0.13.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/README.md +19 -17
- package/description.md +1 -1
- package/dist/agents/claude/client.js +343 -206
- package/dist/agents/claude/styles.css +3 -21
- package/dist/ai/aiProvider.d.ts +59 -0
- package/dist/ai/aiProvider.d.ts.map +1 -0
- package/dist/ai/aiProvider.js +109 -0
- package/dist/ai/aiProvider.js.map +1 -0
- package/dist/ai/aiProviders.d.ts +28 -0
- package/dist/ai/aiProviders.d.ts.map +1 -0
- package/dist/ai/aiProviders.js +47 -0
- package/dist/ai/aiProviders.js.map +1 -0
- package/dist/ai/chat.d.ts +32 -0
- package/dist/ai/chat.d.ts.map +1 -0
- package/dist/ai/chat.js +5 -0
- package/dist/ai/chat.js.map +1 -0
- package/dist/ai/index.d.ts +9 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +11 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/protocol.d.ts +18 -0
- package/dist/ai/protocol.d.ts.map +1 -0
- package/dist/ai/protocol.js +3 -0
- package/dist/ai/protocol.js.map +1 -0
- package/dist/ai/providers/anthropic.d.ts +123 -0
- package/dist/ai/providers/anthropic.d.ts.map +1 -0
- package/dist/ai/providers/anthropic.js +130 -0
- package/dist/ai/providers/anthropic.js.map +1 -0
- package/dist/ai/providers/gemini.d.ts +62 -0
- package/dist/ai/providers/gemini.d.ts.map +1 -0
- package/dist/ai/providers/gemini.js +136 -0
- package/dist/ai/providers/gemini.js.map +1 -0
- package/dist/ai/providers/openAI.d.ts +146 -0
- package/dist/ai/providers/openAI.d.ts.map +1 -0
- package/dist/ai/providers/openAI.js +127 -0
- package/dist/ai/providers/openAI.js.map +1 -0
- package/dist/ai/providers/openRouter.d.ts +65 -0
- package/dist/ai/providers/openRouter.d.ts.map +1 -0
- package/dist/ai/providers/openRouter.js +82 -0
- package/dist/ai/providers/openRouter.js.map +1 -0
- package/dist/ai/sseParser.d.ts +32 -0
- package/dist/ai/sseParser.d.ts.map +1 -0
- package/dist/ai/sseParser.js +121 -0
- package/dist/ai/sseParser.js.map +1 -0
- package/dist/ai/stream.d.ts +20 -0
- package/dist/ai/stream.d.ts.map +1 -0
- package/dist/ai/stream.js +6 -0
- package/dist/ai/stream.js.map +1 -0
- package/dist/dts/cache.d.ts +30 -0
- package/dist/dts/cache.d.ts.map +1 -0
- package/dist/dts/cache.js +2 -0
- package/dist/dts/cache.js.map +1 -0
- package/dist/dts/definitelyTypedProvider.d.ts +20 -0
- package/dist/dts/definitelyTypedProvider.d.ts.map +1 -0
- package/dist/dts/definitelyTypedProvider.js +93 -0
- package/dist/dts/definitelyTypedProvider.js.map +1 -0
- package/dist/dts/dtsConfig.d.ts +12 -0
- package/dist/dts/dtsConfig.d.ts.map +1 -0
- package/dist/dts/dtsConfig.js +24 -0
- package/dist/dts/dtsConfig.js.map +1 -0
- package/dist/dts/dtsResolver.d.ts +63 -0
- package/dist/dts/dtsResolver.d.ts.map +1 -0
- package/dist/dts/dtsResolver.js +272 -0
- package/dist/dts/dtsResolver.js.map +1 -0
- package/dist/dts/fetchDts.d.ts +13 -0
- package/dist/dts/fetchDts.d.ts.map +1 -0
- package/dist/dts/fetchDts.js +46 -0
- package/dist/dts/fetchDts.js.map +1 -0
- package/dist/dts/httpFetch.d.ts +17 -0
- package/dist/dts/httpFetch.d.ts.map +1 -0
- package/dist/dts/httpFetch.js +35 -0
- package/dist/dts/httpFetch.js.map +1 -0
- package/dist/dts/index.d.ts +14 -0
- package/dist/dts/index.d.ts.map +1 -0
- package/dist/dts/index.js +14 -0
- package/dist/dts/index.js.map +1 -0
- package/dist/dts/libManifest.d.ts +41 -0
- package/dist/dts/libManifest.d.ts.map +1 -0
- package/dist/dts/libManifest.js +109 -0
- package/dist/dts/libManifest.js.map +1 -0
- package/dist/dts/negativeCacheHelper.d.ts +29 -0
- package/dist/dts/negativeCacheHelper.d.ts.map +1 -0
- package/dist/dts/negativeCacheHelper.js +44 -0
- package/dist/dts/negativeCacheHelper.js.map +1 -0
- package/dist/dts/tarballFetcher.d.ts +13 -0
- package/dist/dts/tarballFetcher.d.ts.map +1 -0
- package/dist/dts/tarballFetcher.js +58 -0
- package/dist/dts/tarballFetcher.js.map +1 -0
- package/dist/dts/tbTypings.d.ts +15 -0
- package/dist/dts/tbTypings.d.ts.map +1 -0
- package/dist/dts/tbTypings.js +210 -0
- package/dist/dts/tbTypings.js.map +1 -0
- package/dist/dts/typeProvider.d.ts +37 -0
- package/dist/dts/typeProvider.d.ts.map +1 -0
- package/dist/dts/typeProvider.js +30 -0
- package/dist/dts/typeProvider.js.map +1 -0
- package/dist/dts/typeRefScanner.d.ts +8 -0
- package/dist/dts/typeRefScanner.d.ts.map +1 -0
- package/dist/dts/typeRefScanner.js +33 -0
- package/dist/dts/typeRefScanner.js.map +1 -0
- package/dist/dts/typescriptProvider.d.ts +21 -0
- package/dist/dts/typescriptProvider.d.ts.map +1 -0
- package/dist/dts/typescriptProvider.js +140 -0
- package/dist/dts/typescriptProvider.js.map +1 -0
- package/dist/dts/virtualFs.d.ts +20 -0
- package/dist/dts/virtualFs.d.ts.map +1 -0
- package/dist/dts/virtualFs.js +48 -0
- package/dist/dts/virtualFs.js.map +1 -0
- package/dist/format/chunks.d.ts +20 -0
- package/dist/format/chunks.d.ts.map +1 -0
- package/dist/format/chunks.js +51 -0
- package/dist/format/chunks.js.map +1 -0
- package/dist/format/config.d.ts +17 -0
- package/dist/format/config.d.ts.map +1 -0
- package/dist/format/config.js +13 -0
- package/dist/format/config.js.map +1 -0
- package/dist/format/detection.d.ts +11 -0
- package/dist/format/detection.d.ts.map +1 -0
- package/dist/format/detection.js +43 -0
- package/dist/format/detection.js.map +1 -0
- package/dist/format/index.d.ts +8 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +8 -0
- package/dist/format/index.js.map +1 -0
- package/dist/format/parse.d.ts +20 -0
- package/dist/format/parse.d.ts.map +1 -0
- package/dist/format/parse.js +88 -0
- package/dist/format/parse.js.map +1 -0
- package/dist/format/registry.d.ts +24 -0
- package/dist/format/registry.d.ts.map +1 -0
- package/dist/format/registry.js +31 -0
- package/dist/format/registry.js.map +1 -0
- package/dist/format/serialize.d.ts +8 -0
- package/dist/format/serialize.d.ts.map +1 -0
- package/dist/format/serialize.js +30 -0
- package/dist/format/serialize.js.map +1 -0
- package/dist/format/yaml.d.ts +4 -0
- package/dist/format/yaml.d.ts.map +1 -0
- package/dist/format/yaml.js +17 -0
- package/dist/format/yaml.js.map +1 -0
- package/dist/index.js +401 -89
- package/dist/lint/index.d.ts +29 -0
- package/dist/lint/index.d.ts.map +1 -0
- package/dist/lint/index.js +257 -0
- package/dist/lint/index.js.map +1 -0
- package/dist/render.js +176 -39
- package/dist/resolver/attempt.d.ts +2 -0
- package/dist/resolver/attempt.d.ts.map +1 -0
- package/dist/resolver/attempt.js +9 -0
- package/dist/resolver/attempt.js.map +1 -0
- package/dist/resolver/cdnClient.d.ts +46 -0
- package/dist/resolver/cdnClient.d.ts.map +1 -0
- package/dist/resolver/cdnClient.js +107 -0
- package/dist/resolver/cdnClient.js.map +1 -0
- package/dist/resolver/cdnConstants.d.ts +10 -0
- package/dist/resolver/cdnConstants.d.ts.map +1 -0
- package/dist/resolver/cdnConstants.js +10 -0
- package/dist/resolver/cdnConstants.js.map +1 -0
- package/dist/resolver/index.d.ts +20 -0
- package/dist/resolver/index.d.ts.map +1 -0
- package/dist/resolver/index.js +20 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/packageRef.d.ts +21 -0
- package/dist/resolver/packageRef.d.ts.map +1 -0
- package/dist/resolver/packageRef.js +89 -0
- package/dist/resolver/packageRef.js.map +1 -0
- package/dist/resolver/packageService.d.ts +40 -0
- package/dist/resolver/packageService.d.ts.map +1 -0
- package/dist/resolver/packageService.js +156 -0
- package/dist/resolver/packageService.js.map +1 -0
- package/dist/resolver/peerResolver.d.ts +33 -0
- package/dist/resolver/peerResolver.d.ts.map +1 -0
- package/dist/resolver/peerResolver.js +66 -0
- package/dist/resolver/peerResolver.js.map +1 -0
- package/dist/resolver/semver.d.ts +17 -0
- package/dist/resolver/semver.d.ts.map +1 -0
- package/dist/resolver/semver.js +56 -0
- package/dist/resolver/semver.js.map +1 -0
- package/dist/resolver/types.d.ts +33 -0
- package/dist/resolver/types.d.ts.map +1 -0
- package/dist/resolver/types.js +2 -0
- package/dist/resolver/types.js.map +1 -0
- package/dist/resolver/versionResolver.d.ts +29 -0
- package/dist/resolver/versionResolver.d.ts.map +1 -0
- package/dist/resolver/versionResolver.js +79 -0
- package/dist/resolver/versionResolver.js.map +1 -0
- package/dist/servers.js +142 -3
- package/dist/transpile/index.d.ts +19 -0
- package/dist/transpile/index.d.ts.map +1 -0
- package/dist/transpile/index.js +23 -0
- package/dist/transpile/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +99 -68
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenRouter API (Chat Completions style with choices[]) — wire types and provider implementation.
|
|
3
|
+
*/
|
|
4
|
+
import type { ChatMessageDto, UpstreamErrorDto, ChatStreamPieceDto, ChatResponseDto, ProviderResponseDto, ProviderStreamEventDto } from '../protocol.js';
|
|
5
|
+
import { AIProvider, type ChatRequestOpts } from '../aiProvider.js';
|
|
6
|
+
export interface OpenRouterMessageDto {
|
|
7
|
+
content: string;
|
|
8
|
+
reasoning?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface OpenRouterChoiceDto {
|
|
11
|
+
message?: OpenRouterMessageDto;
|
|
12
|
+
text?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface OpenRouterResponseDto extends ProviderResponseDto {
|
|
15
|
+
choices: OpenRouterChoiceDto[];
|
|
16
|
+
reasoning?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface OpenRouterDeltaDto {
|
|
19
|
+
content?: string;
|
|
20
|
+
reasoning?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface OpenRouterStreamChoiceDto {
|
|
23
|
+
delta?: OpenRouterDeltaDto;
|
|
24
|
+
message?: OpenRouterDeltaDto;
|
|
25
|
+
}
|
|
26
|
+
export interface OpenRouterStreamEventDto extends ProviderStreamEventDto {
|
|
27
|
+
choices: OpenRouterStreamChoiceDto[];
|
|
28
|
+
}
|
|
29
|
+
export interface OpenRouterErrorResponseDto {
|
|
30
|
+
error: {
|
|
31
|
+
message: string;
|
|
32
|
+
type?: string;
|
|
33
|
+
code?: string;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export type OpenRouterSseEventDto = OpenRouterStreamEventDto | OpenRouterErrorResponseDto;
|
|
37
|
+
/** OpenRouter web search plugin */
|
|
38
|
+
interface OpenRouterWebPlugin {
|
|
39
|
+
id: 'web';
|
|
40
|
+
max_results?: number;
|
|
41
|
+
}
|
|
42
|
+
/** OpenRouter request payload */
|
|
43
|
+
export type OpenRouterRequestPayload = {
|
|
44
|
+
model: string;
|
|
45
|
+
messages: ChatMessageDto[];
|
|
46
|
+
stream: boolean;
|
|
47
|
+
reasoning?: {
|
|
48
|
+
effort: 'low' | 'medium' | 'high';
|
|
49
|
+
};
|
|
50
|
+
plugins?: OpenRouterWebPlugin[];
|
|
51
|
+
};
|
|
52
|
+
export declare class OpenRouterProvider extends AIProvider {
|
|
53
|
+
protected readonly providerName = "OpenRouter";
|
|
54
|
+
readonly defaultBaseUrl = "https://openrouter.ai/api";
|
|
55
|
+
readonly path: string;
|
|
56
|
+
private readonly effortMap;
|
|
57
|
+
buildHeaders(apiKey: string, origin?: string): Record<string, string>;
|
|
58
|
+
buildPayload(messages: ChatMessageDto[], model: string, opts: ChatRequestOpts, stream: boolean): OpenRouterRequestPayload;
|
|
59
|
+
parseError(errorText: string, status: number): UpstreamErrorDto;
|
|
60
|
+
parseNonStreamingResponse(json: ProviderResponseDto): ChatResponseDto;
|
|
61
|
+
protected parseProviderStreamChunk(json: ProviderStreamEventDto): ChatStreamPieceDto | null;
|
|
62
|
+
private hasChoices;
|
|
63
|
+
}
|
|
64
|
+
export {};
|
|
65
|
+
//# sourceMappingURL=openRouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openRouter.d.ts","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAEhB,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAKnE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,oBAAoB,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE,OAAO,EAAE,mBAAmB,EAAE,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAGD,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,kBAAkB,CAAA;IAC1B,OAAO,CAAC,EAAE,kBAAkB,CAAA;CAC7B;AAED,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,OAAO,EAAE,yBAAyB,EAAE,CAAA;CACrC;AAGD,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE;QACL,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAGD,MAAM,MAAM,qBAAqB,GAC7B,wBAAwB,GACxB,0BAA0B,CAAA;AAI9B,mCAAmC;AACnC,UAAU,mBAAmB;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,iCAAiC;AACjC,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,cAAc,EAAE,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAA;CAChC,CAAA;AAED,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,SAAS,CAAC,QAAQ,CAAC,YAAY,gBAAe;IAC9C,QAAQ,CAAC,cAAc,+BAA8B;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAA6B;IAElD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAKzB;IAID,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAkBrE,YAAY,CACV,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,eAAe,EACrB,MAAM,EAAE,OAAO,GACd,wBAAwB;IAqB3B,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,gBAAgB;IAM/D,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,eAAe;IAarE,SAAS,CAAC,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,GAAG,IAAI;IAmB3F,OAAO,CAAC,UAAU;CAGnB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { AIProvider } from '../aiProvider.js';
|
|
2
|
+
export class OpenRouterProvider extends AIProvider {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(...arguments);
|
|
5
|
+
this.providerName = 'OpenRouter';
|
|
6
|
+
this.defaultBaseUrl = 'https://openrouter.ai/api';
|
|
7
|
+
this.path = '/api/v1/chat/completions';
|
|
8
|
+
this.effortMap = {
|
|
9
|
+
0: 'low',
|
|
10
|
+
1: 'low',
|
|
11
|
+
2: 'medium',
|
|
12
|
+
3: 'high'
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
// ── Request building ─────────────────────────────────────────────
|
|
16
|
+
buildHeaders(apiKey, origin) {
|
|
17
|
+
const headers = {
|
|
18
|
+
'Authorization': `Bearer ${apiKey}`,
|
|
19
|
+
'x-api-key': apiKey,
|
|
20
|
+
'Content-Type': 'application/json',
|
|
21
|
+
'Accept': 'application/json',
|
|
22
|
+
'X-Title': 'Typebulb'
|
|
23
|
+
};
|
|
24
|
+
if (origin) {
|
|
25
|
+
headers['HTTP-Referer'] = origin;
|
|
26
|
+
headers['Referer'] = origin;
|
|
27
|
+
headers['Origin'] = origin;
|
|
28
|
+
}
|
|
29
|
+
return headers;
|
|
30
|
+
}
|
|
31
|
+
buildPayload(messages, model, opts, stream) {
|
|
32
|
+
const payload = {
|
|
33
|
+
model,
|
|
34
|
+
messages,
|
|
35
|
+
stream
|
|
36
|
+
};
|
|
37
|
+
// Web search disabled for OpenRouter - $0.02/request via Exa.ai is expensive
|
|
38
|
+
if (opts?.webSearch === true) {
|
|
39
|
+
payload.plugins = [{ id: 'web' }];
|
|
40
|
+
}
|
|
41
|
+
if (this.isReasoningEnabled(opts)) {
|
|
42
|
+
payload.reasoning = {
|
|
43
|
+
effort: this.effortMap[opts.reasoning]
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
return payload;
|
|
47
|
+
}
|
|
48
|
+
parseError(errorText, status) {
|
|
49
|
+
return this.parseJsonError(errorText, status, true);
|
|
50
|
+
}
|
|
51
|
+
// ── Response parsing ─────────────────────────────────────────────
|
|
52
|
+
parseNonStreamingResponse(json) {
|
|
53
|
+
if (!this.hasChoices(json)) {
|
|
54
|
+
return { text: '' };
|
|
55
|
+
}
|
|
56
|
+
const resp = json;
|
|
57
|
+
const choice = resp.choices[0];
|
|
58
|
+
const text = choice?.message?.content ?? choice?.text ?? '';
|
|
59
|
+
const reasoning = choice?.message?.reasoning ?? resp.reasoning;
|
|
60
|
+
return { text, reasoning };
|
|
61
|
+
}
|
|
62
|
+
parseProviderStreamChunk(json) {
|
|
63
|
+
if (!this.hasChoices(json))
|
|
64
|
+
return null;
|
|
65
|
+
const choice = json.choices[0];
|
|
66
|
+
if (!choice)
|
|
67
|
+
return null;
|
|
68
|
+
const delta = choice.delta || choice.message;
|
|
69
|
+
if (!delta)
|
|
70
|
+
return null;
|
|
71
|
+
const text = delta.content || undefined;
|
|
72
|
+
const reasoning = delta.reasoning || undefined;
|
|
73
|
+
if (!text && !reasoning)
|
|
74
|
+
return null;
|
|
75
|
+
return { text, reasoning };
|
|
76
|
+
}
|
|
77
|
+
// ── Private helpers ──────────────────────────────────────────────
|
|
78
|
+
hasChoices(json) {
|
|
79
|
+
return typeof json === 'object' && json !== null && 'choices' in json && Array.isArray(json.choices);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=openRouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openRouter.js","sourceRoot":"","sources":["../../../ai/src/providers/openRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic utilities for parsing Server-Sent Events (SSE) streams.
|
|
3
|
+
* Shared between client, CLI, and any other consumer of provider SSE streams.
|
|
4
|
+
*/
|
|
5
|
+
import type { ProviderProtocol } from './protocol.js';
|
|
6
|
+
/**
|
|
7
|
+
* Parses an SSE block (text between \n\n delimiters) into a data payload.
|
|
8
|
+
* Handles multiple data: lines and the [DONE] sentinel.
|
|
9
|
+
*/
|
|
10
|
+
export declare function parseSseBlock<T = any>(block: string): T | 'done' | null;
|
|
11
|
+
/**
|
|
12
|
+
* Reads an SSE stream and emits parsed chunks via callback.
|
|
13
|
+
* Handles buffering, block splitting, and error recovery.
|
|
14
|
+
*
|
|
15
|
+
* @param reader - ReadableStream reader to consume
|
|
16
|
+
* @param onChunk - Callback invoked for each parsed non-null chunk
|
|
17
|
+
* @param signal - Optional abort signal for cancellation
|
|
18
|
+
* @returns Object with whether any data was received
|
|
19
|
+
*/
|
|
20
|
+
export declare function consumeSseStream<T = any>(reader: ReadableStreamDefaultReader<Uint8Array>, onChunk: (chunk: T) => void, signal?: AbortSignal): Promise<{
|
|
21
|
+
receivedAnyData: boolean;
|
|
22
|
+
}>;
|
|
23
|
+
/**
|
|
24
|
+
* Consume a provider SSE stream into a single text string.
|
|
25
|
+
* Handles protocol detection, chunk parsing, and reasoning token filtering.
|
|
26
|
+
*
|
|
27
|
+
* @param response - Fetch Response with SSE body (from server or provider directly)
|
|
28
|
+
* @param protocol - Provider protocol. If omitted, read from X-Provider-Protocol header.
|
|
29
|
+
* @returns Accumulated text content (reasoning tokens discarded)
|
|
30
|
+
*/
|
|
31
|
+
export declare function consumeStreamText(response: Response, protocol?: ProviderProtocol): Promise<string>;
|
|
32
|
+
//# sourceMappingURL=sseParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseParser.d.ts","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAYrD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAmBvE;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAC5C,MAAM,EAAE,2BAA2B,CAAC,UAAU,CAAC,EAC/C,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,EAC3B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,eAAe,EAAE,OAAO,CAAA;CAAE,CAAC,CAmDvC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAgBjB"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic utilities for parsing Server-Sent Events (SSE) streams.
|
|
3
|
+
* Shared between client, CLI, and any other consumer of provider SSE streams.
|
|
4
|
+
*/
|
|
5
|
+
import { getProvider } from './aiProviders.js';
|
|
6
|
+
/** Find next SSE block separator (\n\n or \r\n\r\n), returning position and length */
|
|
7
|
+
function findSeparator(buffer) {
|
|
8
|
+
const rnrn = buffer.indexOf('\r\n\r\n');
|
|
9
|
+
const nn = buffer.indexOf('\n\n');
|
|
10
|
+
if (rnrn !== -1 && (nn === -1 || rnrn < nn))
|
|
11
|
+
return { pos: rnrn, len: 4 };
|
|
12
|
+
if (nn !== -1)
|
|
13
|
+
return { pos: nn, len: 2 };
|
|
14
|
+
return { pos: -1, len: 0 };
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parses an SSE block (text between \n\n delimiters) into a data payload.
|
|
18
|
+
* Handles multiple data: lines and the [DONE] sentinel.
|
|
19
|
+
*/
|
|
20
|
+
export function parseSseBlock(block) {
|
|
21
|
+
const lines = block.split(/\r?\n/);
|
|
22
|
+
const dataLines = lines.filter(l => l.startsWith('data:'));
|
|
23
|
+
if (!dataLines.length)
|
|
24
|
+
return null;
|
|
25
|
+
const payloadStr = dataLines
|
|
26
|
+
.map(l => l.replace(/^data:\s?/, ''))
|
|
27
|
+
.join('\n')
|
|
28
|
+
.trim();
|
|
29
|
+
if (!payloadStr)
|
|
30
|
+
return null;
|
|
31
|
+
if (payloadStr === '[DONE]')
|
|
32
|
+
return 'done';
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(payloadStr);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Reads an SSE stream and emits parsed chunks via callback.
|
|
42
|
+
* Handles buffering, block splitting, and error recovery.
|
|
43
|
+
*
|
|
44
|
+
* @param reader - ReadableStream reader to consume
|
|
45
|
+
* @param onChunk - Callback invoked for each parsed non-null chunk
|
|
46
|
+
* @param signal - Optional abort signal for cancellation
|
|
47
|
+
* @returns Object with whether any data was received
|
|
48
|
+
*/
|
|
49
|
+
export async function consumeSseStream(reader, onChunk, signal) {
|
|
50
|
+
const decoder = new TextDecoder();
|
|
51
|
+
let buffer = '';
|
|
52
|
+
let receivedAnyData = false;
|
|
53
|
+
// reader.read() can block for seconds after cancel; race against abort for immediate exit
|
|
54
|
+
const abortPromise = signal
|
|
55
|
+
? new Promise((_, reject) => {
|
|
56
|
+
if (signal.aborted)
|
|
57
|
+
reject(new Error('Aborted'));
|
|
58
|
+
signal.addEventListener('abort', () => reject(new Error('Aborted')), { once: true });
|
|
59
|
+
})
|
|
60
|
+
: null;
|
|
61
|
+
while (true) {
|
|
62
|
+
const readResult = abortPromise
|
|
63
|
+
? await Promise.race([reader.read(), abortPromise])
|
|
64
|
+
: await reader.read();
|
|
65
|
+
const { done, value } = readResult;
|
|
66
|
+
if (done) {
|
|
67
|
+
// Process any remaining buffer content
|
|
68
|
+
if (buffer.trim()) {
|
|
69
|
+
const parsed = parseSseBlock(buffer);
|
|
70
|
+
if (parsed !== null && parsed !== 'done') {
|
|
71
|
+
onChunk(parsed);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
receivedAnyData = true;
|
|
77
|
+
buffer += decoder.decode(value, { stream: true });
|
|
78
|
+
let { pos: sep, len: sepLen } = findSeparator(buffer);
|
|
79
|
+
while (sep !== -1) {
|
|
80
|
+
const block = buffer.slice(0, sep);
|
|
81
|
+
buffer = buffer.slice(sep + sepLen);
|
|
82
|
+
const parsed = parseSseBlock(block);
|
|
83
|
+
if (parsed === 'done') {
|
|
84
|
+
buffer = '';
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
if (parsed !== null) {
|
|
88
|
+
onChunk(parsed);
|
|
89
|
+
}
|
|
90
|
+
;
|
|
91
|
+
({ pos: sep, len: sepLen } = findSeparator(buffer));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return { receivedAnyData };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Consume a provider SSE stream into a single text string.
|
|
98
|
+
* Handles protocol detection, chunk parsing, and reasoning token filtering.
|
|
99
|
+
*
|
|
100
|
+
* @param response - Fetch Response with SSE body (from server or provider directly)
|
|
101
|
+
* @param protocol - Provider protocol. If omitted, read from X-Provider-Protocol header.
|
|
102
|
+
* @returns Accumulated text content (reasoning tokens discarded)
|
|
103
|
+
*/
|
|
104
|
+
export async function consumeStreamText(response, protocol) {
|
|
105
|
+
const p = protocol
|
|
106
|
+
// Header set by server on success. Missing = server-generated error SSE;
|
|
107
|
+
// any provider parser handles it via checkAndThrowError's unified format.
|
|
108
|
+
?? (response.headers.get('X-Provider-Protocol') || 'openai');
|
|
109
|
+
const spec = getProvider(p);
|
|
110
|
+
if (!response.body)
|
|
111
|
+
throw new Error('Response body is missing');
|
|
112
|
+
const reader = response.body.getReader();
|
|
113
|
+
let fullText = '';
|
|
114
|
+
await consumeSseStream(reader, (json) => {
|
|
115
|
+
const piece = spec.parseStreamChunk(json);
|
|
116
|
+
if (piece?.text)
|
|
117
|
+
fullText += piece.text;
|
|
118
|
+
});
|
|
119
|
+
return fullText;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=sseParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseParser.js","sourceRoot":"","sources":["../../ai/src/sseParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for SSE streaming across chat and inference endpoints.
|
|
3
|
+
* Both features use the same error format.
|
|
4
|
+
*/
|
|
5
|
+
/** Error codes for streaming API failures */
|
|
6
|
+
export type StreamErrorCode = 'rate_limit' | 'context_exceeded' | 'parse_error' | 'network' | 'unknown';
|
|
7
|
+
/** Base error payload (shared between SSE responses and postMessage) */
|
|
8
|
+
export interface StreamErrorPayload {
|
|
9
|
+
code?: StreamErrorCode;
|
|
10
|
+
message: string;
|
|
11
|
+
retryable?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* SSE error event format (adds type discriminator).
|
|
15
|
+
* Used by both /api/chat/stream and /api/infer endpoints.
|
|
16
|
+
*/
|
|
17
|
+
export interface StreamErrorDto extends Required<StreamErrorPayload> {
|
|
18
|
+
type: 'error';
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../ai/src/stream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,6CAA6C;AAC7C,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,kBAAkB,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,CAAA;AAEvG,wEAAwE;AACxE,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,eAAe,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,kBAAkB,CAAC;IAClE,IAAI,EAAE,OAAO,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../ai/src/stream.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage interface for cached DTS files and negative URL lookups.
|
|
3
|
+
*
|
|
4
|
+
* Implemented by:
|
|
5
|
+
* - TypesDB (web client) — wraps Dexie/IndexedDB
|
|
6
|
+
* - FsDtsCache (CLI) — wraps the filesystem under ~/.typebulb/cache/dts/
|
|
7
|
+
*
|
|
8
|
+
* The DTS resolver consumes this interface; consumers inject their own
|
|
9
|
+
* implementation.
|
|
10
|
+
*/
|
|
11
|
+
export interface DtsCache {
|
|
12
|
+
/** Get cached DTS content + source URL for a package. */
|
|
13
|
+
getCachedDts(pkg: string): Promise<{
|
|
14
|
+
content: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
} | undefined>;
|
|
17
|
+
/** Cache DTS content for a package. */
|
|
18
|
+
setCachedDts(pkg: string, content: string, url?: string): Promise<void>;
|
|
19
|
+
/** Get cached .d.ts file content by URL. */
|
|
20
|
+
getCachedFile(url: string): Promise<string | undefined>;
|
|
21
|
+
/** Cache .d.ts file content by URL. */
|
|
22
|
+
setCachedFile(url: string, content: string): Promise<void>;
|
|
23
|
+
/** Check whether a URL is currently in the negative cache. */
|
|
24
|
+
isNegative(url: string): Promise<boolean>;
|
|
25
|
+
/** Record a negative lookup for a URL (with exponential backoff TTL). */
|
|
26
|
+
recordNegative(url: string): Promise<void>;
|
|
27
|
+
/** Clear a negative lookup for a URL. */
|
|
28
|
+
clearNegative(url: string): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../dts/src/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,yDAAyD;IACzD,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;IACjF,uCAAuC;IACvC,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvE,4CAA4C;IAC5C,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IACvD,uCAAuC;IACvC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1D,8DAA8D;IAC9D,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,yEAAyE;IACzE,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,yCAAyC;IACzC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../dts/src/cache.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type CdnClient } from 'typebulb/resolver';
|
|
2
|
+
import { TypeProvider } from './typeProvider.js';
|
|
3
|
+
import { TarballFetcher } from './tarballFetcher.js';
|
|
4
|
+
import type { DtsCache } from './cache.js';
|
|
5
|
+
import type { FetchDtsWithCache } from './fetchDts.js';
|
|
6
|
+
export declare class DefinitelyTypedProvider extends TypeProvider {
|
|
7
|
+
private cdnClient;
|
|
8
|
+
private cache;
|
|
9
|
+
private tarballFetcher;
|
|
10
|
+
constructor(fetchDts: FetchDtsWithCache, cdnClient: CdnClient, cache: DtsCache, tarballFetcher?: TarballFetcher);
|
|
11
|
+
private typesNameCandidates;
|
|
12
|
+
private selectTypesVersion;
|
|
13
|
+
private fetchFromVersionedRoot;
|
|
14
|
+
resolve(pkg: string): Promise<{
|
|
15
|
+
dts: string;
|
|
16
|
+
url: string;
|
|
17
|
+
resolvedPkg: string;
|
|
18
|
+
} | undefined>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=definitelyTypedProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitelyTypedProvider.d.ts","sourceRoot":"","sources":["../../dts/src/definitelyTypedProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEtD,qBAAa,uBAAwB,SAAQ,YAAY;IAGrD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,cAAc;gBAHtB,QAAQ,EAAE,iBAAiB,EACnB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,cAAc,iBAAuB;IAK/C,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,kBAAkB;YAeZ,sBAAsB;IAgC9B,OAAO,CAAC,GAAG,EAAE,MAAM;;;;;CAiB1B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { PackageRef, semverService } from 'typebulb/resolver';
|
|
2
|
+
import { TypeProvider } from './typeProvider.js';
|
|
3
|
+
import { TarballFetcher } from './tarballFetcher.js';
|
|
4
|
+
export class DefinitelyTypedProvider extends TypeProvider {
|
|
5
|
+
constructor(fetchDts, cdnClient, cache, tarballFetcher = new TarballFetcher()) {
|
|
6
|
+
super(fetchDts);
|
|
7
|
+
this.cdnClient = cdnClient;
|
|
8
|
+
this.cache = cache;
|
|
9
|
+
this.tarballFetcher = tarballFetcher;
|
|
10
|
+
}
|
|
11
|
+
typesNameCandidates(name) {
|
|
12
|
+
const base = name.startsWith('@') ? name.slice(1).replace('/', '__') : name;
|
|
13
|
+
if (!base.includes('.'))
|
|
14
|
+
return [base];
|
|
15
|
+
return [base, base.split('.').join('-'), base.split('.').join('')];
|
|
16
|
+
}
|
|
17
|
+
selectTypesVersion(versions, distTags, runtime) {
|
|
18
|
+
try {
|
|
19
|
+
if (runtime) {
|
|
20
|
+
const mj = semverService.majorOf(runtime);
|
|
21
|
+
const sameMajor = versions.filter(v => semverService.majorOf(v) === mj);
|
|
22
|
+
if (sameMajor.length)
|
|
23
|
+
return sameMajor.sort((a, b) => semverService.cmp(b, a))[0];
|
|
24
|
+
}
|
|
25
|
+
const latest = distTags?.latest;
|
|
26
|
+
if (latest && versions.includes(latest))
|
|
27
|
+
return latest;
|
|
28
|
+
return versions[0];
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return versions[0];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async fetchFromVersionedRoot(versionedRoot, parsed) {
|
|
35
|
+
const ref = new PackageRef(versionedRoot);
|
|
36
|
+
const version = ref.version;
|
|
37
|
+
if (!version)
|
|
38
|
+
return undefined;
|
|
39
|
+
let allFiles;
|
|
40
|
+
try {
|
|
41
|
+
allFiles = await this.tarballFetcher.fetchAndExtract(ref.name, version);
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
if (!allFiles || allFiles.size === 0)
|
|
47
|
+
return undefined;
|
|
48
|
+
for (const [p, content] of allFiles.entries()) {
|
|
49
|
+
const fileUrl = this.cdnClient.file(versionedRoot, p);
|
|
50
|
+
try {
|
|
51
|
+
await this.cache.setCachedFile(fileUrl, content);
|
|
52
|
+
}
|
|
53
|
+
catch { }
|
|
54
|
+
}
|
|
55
|
+
const candidates = parsed.subpath
|
|
56
|
+
? [parsed.subpath + '.d.ts', parsed.subpath + '/index.d.ts']
|
|
57
|
+
: ['index.d.ts'];
|
|
58
|
+
for (const p of candidates) {
|
|
59
|
+
const content = allFiles.get(p);
|
|
60
|
+
if (content) {
|
|
61
|
+
return {
|
|
62
|
+
dts: content,
|
|
63
|
+
url: this.cdnClient.file(versionedRoot, p),
|
|
64
|
+
resolvedPkg: parsed.subpath ? new PackageRef(parsed).format() : parsed.name,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
async resolve(pkg) {
|
|
71
|
+
const parsed = PackageRef.parse(pkg);
|
|
72
|
+
if (!parsed.name)
|
|
73
|
+
return undefined;
|
|
74
|
+
for (const cand of this.typesNameCandidates(parsed.name)) {
|
|
75
|
+
const typesRoot = `@types/${cand}`;
|
|
76
|
+
let idx;
|
|
77
|
+
try {
|
|
78
|
+
idx = await this.cdnClient.fetchVersionsIndex(typesRoot);
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (!idx?.versions?.length)
|
|
84
|
+
continue;
|
|
85
|
+
const selected = this.selectTypesVersion(idx.versions, idx.distTags, parsed.version);
|
|
86
|
+
const res = await this.fetchFromVersionedRoot(`${typesRoot}@${selected}`, parsed);
|
|
87
|
+
if (res)
|
|
88
|
+
return res;
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=definitelyTypedProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitelyTypedProvider.js","sourceRoot":"","sources":["../../dts/src/definitelyTypedProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const DtsConfig: {
|
|
2
|
+
readonly maxRelativeTypeRefs: 500;
|
|
3
|
+
readonly maxBareDeps: 8;
|
|
4
|
+
readonly maxBareDepth: 3;
|
|
5
|
+
readonly prefetchConcurrency: 4;
|
|
6
|
+
readonly negativeTtlMs: 10000;
|
|
7
|
+
};
|
|
8
|
+
export declare const DECLARATION_EXTENSIONS: readonly ["index.d.ts", "index.d.mts"];
|
|
9
|
+
export declare const DTS_REGEX: RegExp;
|
|
10
|
+
export declare function isDtsFile(p: string): boolean;
|
|
11
|
+
export declare function makeDeclarationCandidates(base: string): string[];
|
|
12
|
+
//# sourceMappingURL=dtsConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtsConfig.d.ts","sourceRoot":"","sources":["../../dts/src/dtsConfig.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;CAMZ,CAAA;AAEV,eAAO,MAAM,sBAAsB,wCAAyC,CAAA;AAC5E,eAAO,MAAM,SAAS,QAAoB,CAAA;AAE1C,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAQ5C;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export const DtsConfig = {
|
|
2
|
+
maxRelativeTypeRefs: 500,
|
|
3
|
+
maxBareDeps: 8,
|
|
4
|
+
maxBareDepth: 3,
|
|
5
|
+
prefetchConcurrency: 4,
|
|
6
|
+
negativeTtlMs: 10000,
|
|
7
|
+
};
|
|
8
|
+
export const DECLARATION_EXTENSIONS = ['index.d.ts', 'index.d.mts'];
|
|
9
|
+
export const DTS_REGEX = /\.d\.(ts|mts)$/i;
|
|
10
|
+
export function isDtsFile(p) {
|
|
11
|
+
if (DTS_REGEX.test(p))
|
|
12
|
+
return true;
|
|
13
|
+
try {
|
|
14
|
+
const url = new URL(p, 'file://');
|
|
15
|
+
return url.search.includes('dts');
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return p.includes('?') && p.includes('dts');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function makeDeclarationCandidates(base) {
|
|
22
|
+
return [`${base}.d.ts`, `${base}.d.mts`];
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=dtsConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtsConfig.js","sourceRoot":"","sources":["../../dts/src/dtsConfig.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,mBAAmB,EAAE,GAAG;IACxB,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,mBAAmB,EAAE,CAAC;IACtB,aAAa,EAAE,KAAM;CACb,CAAA;AAEV,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,YAAY,EAAE,aAAa,CAAU,CAAA;AAC5E,MAAM,CAAC,MAAM,SAAS,GAAG,iBAAiB,CAAA;AAE1C,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;QACjC,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,IAAY;IACpD,OAAO,CAAC,GAAG,IAAI,OAAO,EAAE,GAAG,IAAI,QAAQ,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type CdnClient, type PackageRanges, type PackageService, type VersionResolver } from 'typebulb/resolver';
|
|
2
|
+
import { VirtualFs } from './virtualFs.js';
|
|
3
|
+
import type { DtsCache } from './cache.js';
|
|
4
|
+
import type { ResolvedTypeDef } from './typeProvider.js';
|
|
5
|
+
export type { TypeFetchResult, ModuleShim, ResolvedTypeFile, ResolvedTypeDef } from './typeProvider.js';
|
|
6
|
+
export interface DtsResolverDeps {
|
|
7
|
+
cache: DtsCache;
|
|
8
|
+
cdnClient: CdnClient;
|
|
9
|
+
versionResolver: VersionResolver;
|
|
10
|
+
packageService: PackageService;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Resolves .d.ts files for a bulb's import set. Constructed via
|
|
14
|
+
* `createDtsResolver(deps)`; each instance owns its own providers, in-flight
|
|
15
|
+
* map, virtual filesystem, and fetch closure.
|
|
16
|
+
*
|
|
17
|
+
* Web client wires Dexie-backed cache + typebulb/resolver web bits.
|
|
18
|
+
* CLI wires FS-backed cache + typebulb/resolver Node bits.
|
|
19
|
+
*/
|
|
20
|
+
export declare class DtsResolver {
|
|
21
|
+
private readonly inFlight;
|
|
22
|
+
private readonly scanner;
|
|
23
|
+
private readonly cache;
|
|
24
|
+
private readonly cdnClient;
|
|
25
|
+
private readonly versionResolver;
|
|
26
|
+
private readonly packageService;
|
|
27
|
+
private readonly fetchDts;
|
|
28
|
+
private readonly typescriptProvider;
|
|
29
|
+
private readonly definitelyTypedProvider;
|
|
30
|
+
readonly virtualFs: VirtualFs;
|
|
31
|
+
constructor(deps: DtsResolverDeps);
|
|
32
|
+
private withInFlight;
|
|
33
|
+
/** Reset in-flight requests, e.g. when ranges change reactively in the web client. */
|
|
34
|
+
invalidate(): void;
|
|
35
|
+
private capArray;
|
|
36
|
+
private pushFileIfNew;
|
|
37
|
+
private createStubDef;
|
|
38
|
+
private trySubpathWithRootFallback;
|
|
39
|
+
private fetchViaProviders;
|
|
40
|
+
private subpathsMatch;
|
|
41
|
+
private fetchRootDts;
|
|
42
|
+
private extractPackageRootUrl;
|
|
43
|
+
private toVirtualPath;
|
|
44
|
+
private computeEntryPath;
|
|
45
|
+
private expandRelativeRefs;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve one relative ref by trying each declaration-candidate URL in turn.
|
|
48
|
+
* Exits as soon as one candidate succeeds, but the caller continues to the
|
|
49
|
+
* next ref. (Subtle: this MUST be a separate function — folding it into the
|
|
50
|
+
* caller's loop body lets `return` short-circuit all remaining refs.)
|
|
51
|
+
*/
|
|
52
|
+
private tryRelativeRef;
|
|
53
|
+
private isDifferentPackage;
|
|
54
|
+
private ambientlyDeclares;
|
|
55
|
+
private markFileAmbient;
|
|
56
|
+
private prefetchBareDeps;
|
|
57
|
+
private prefetchBareDepsRecursive;
|
|
58
|
+
resolve(code: string, ranges: PackageRanges, additionalPackages?: string[]): Promise<ResolvedTypeDef[]>;
|
|
59
|
+
private resolveOne;
|
|
60
|
+
private buildDefFromContent;
|
|
61
|
+
}
|
|
62
|
+
export declare function createDtsResolver(deps: DtsResolverDeps): DtsResolver;
|
|
63
|
+
//# sourceMappingURL=dtsResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dtsResolver.d.ts","sourceRoot":"","sources":["../../dts/src/dtsResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAI1B,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAG1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,KAAK,EAIV,eAAe,EAChB,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEvG,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,CAAA;IACf,SAAS,EAAE,SAAS,CAAA;IACpB,eAAe,EAAE,eAAe,CAAA;IAChC,cAAc,EAAE,cAAc,CAAA;CAC/B;AAED;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA0D;IACnF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAU;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAyB;IACjE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;gBAEjB,IAAI,EAAE,eAAe;IAWjC,OAAO,CAAC,YAAY;IAQpB,sFAAsF;IACtF,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,aAAa;YAMP,0BAA0B;YAK1B,iBAAiB;IAU/B,OAAO,CAAC,aAAa;YAIP,YAAY;IAuB1B,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,gBAAgB;YAUV,kBAAkB;IA0BhC;;;;;OAKG;YACW,cAAc;IAgC5B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,eAAe;YAKT,gBAAgB;YAoBhB,yBAAyB;IA8BjC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;YAO/F,UAAU;YAUV,mBAAmB;CA0BlC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAEpE"}
|