veryfront 0.1.83 → 0.1.85
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/esm/cli/commands/knowledge/command.d.ts +10 -13
- package/esm/cli/commands/knowledge/command.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/command.js +294 -110
- package/esm/cli/commands/knowledge/parser-source.d.ts.map +1 -1
- package/esm/cli/commands/knowledge/parser-source.js +52 -0
- package/esm/cli/commands/knowledge/result.d.ts +54 -0
- package/esm/cli/commands/knowledge/result.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/result.js +22 -0
- package/esm/cli/commands/knowledge/source-policy.d.ts +11 -0
- package/esm/cli/commands/knowledge/source-policy.d.ts.map +1 -0
- package/esm/cli/commands/knowledge/source-policy.js +135 -0
- package/esm/deno.js +1 -1
- package/esm/src/jobs/index.d.ts +1 -1
- package/esm/src/jobs/index.d.ts.map +1 -1
- package/esm/src/jobs/index.js +1 -1
- package/esm/src/jobs/schemas.d.ts +1104 -185
- package/esm/src/jobs/schemas.d.ts.map +1 -1
- package/esm/src/jobs/schemas.js +81 -8
- package/esm/src/proxy/error-response.d.ts +7 -0
- package/esm/src/proxy/error-response.d.ts.map +1 -0
- package/esm/src/proxy/error-response.js +26 -0
- package/esm/src/proxy/handler.d.ts.map +1 -1
- package/esm/src/proxy/handler.js +25 -0
- package/esm/src/proxy/main.js +2 -23
- package/esm/src/rendering/orchestrator/css-candidate-manifest.d.ts +11 -0
- package/esm/src/rendering/orchestrator/css-candidate-manifest.d.ts.map +1 -1
- package/esm/src/rendering/orchestrator/css-candidate-manifest.js +23 -12
- package/esm/src/server/handlers/dev/styles-candidate-scanner.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/styles-candidate-scanner.js +25 -8
- package/esm/src/server/handlers/dev/styles-css.handler.d.ts +1 -0
- package/esm/src/server/handlers/dev/styles-css.handler.d.ts.map +1 -1
- package/esm/src/server/handlers/dev/styles-css.handler.js +15 -5
- package/esm/src/transforms/esm/http-cache-helpers.d.ts.map +1 -1
- package/esm/src/transforms/esm/http-cache-helpers.js +7 -1
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.d.ts.map +1 -1
- package/esm/src/transforms/import-rewriter/strategies/bare-strategy.js +11 -8
- package/esm/src/transforms/shared/package-specifier.d.ts +7 -0
- package/esm/src/transforms/shared/package-specifier.d.ts.map +1 -0
- package/esm/src/transforms/shared/package-specifier.js +19 -0
- package/package.json +1 -1
- package/src/cli/commands/knowledge/command.ts +375 -139
- package/src/cli/commands/knowledge/parser-source.ts +52 -0
- package/src/cli/commands/knowledge/result.ts +88 -0
- package/src/cli/commands/knowledge/source-policy.ts +164 -0
- package/src/deno.js +1 -1
- package/src/src/jobs/index.ts +16 -0
- package/src/src/jobs/schemas.ts +105 -8
- package/src/src/proxy/error-response.ts +33 -0
- package/src/src/proxy/handler.ts +43 -0
- package/src/src/proxy/main.ts +2 -27
- package/src/src/rendering/orchestrator/css-candidate-manifest.ts +40 -14
- package/src/src/server/handlers/dev/styles-candidate-scanner.ts +37 -11
- package/src/src/server/handlers/dev/styles-css.handler.ts +25 -4
- package/src/src/transforms/esm/http-cache-helpers.ts +12 -1
- package/src/src/transforms/import-rewriter/strategies/bare-strategy.ts +11 -12
- package/src/src/transforms/shared/package-specifier.ts +29 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/src/jobs/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe,wEAM1B,CAAC;AAEH,eAAO,MAAM,mBAAmB,6CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../../src/src/jobs/schemas.ts"],"names":[],"mappings":"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"}
|
package/esm/src/jobs/schemas.js
CHANGED
|
@@ -7,6 +7,7 @@ export const JobStatusSchema = z.enum([
|
|
|
7
7
|
"canceled",
|
|
8
8
|
]);
|
|
9
9
|
export const CronJobStatusSchema = z.enum(["active", "paused", "deleting"]);
|
|
10
|
+
export const JobKindSchema = z.enum(["knowledge_ingest"]).nullable();
|
|
10
11
|
export const ReservedJobTargetFamilySchema = z.enum(["task:*", "workflow:*", "deploy:*"]);
|
|
11
12
|
export const PageInfoSchema = z.object({
|
|
12
13
|
self: z.string().nullable(),
|
|
@@ -15,6 +16,12 @@ export const PageInfoSchema = z.object({
|
|
|
15
16
|
prev: z.string().nullable(),
|
|
16
17
|
});
|
|
17
18
|
const JsonObjectSchema = z.record(z.unknown());
|
|
19
|
+
const KnowledgeIngestSkipReasonSchema = z.enum([
|
|
20
|
+
"hidden_path",
|
|
21
|
+
"ignored_directory",
|
|
22
|
+
"unsupported_file_type",
|
|
23
|
+
]);
|
|
24
|
+
const KnowledgeIngestFailureReasonSchema = z.enum(["parser_error", "upload_error"]);
|
|
18
25
|
export const KnowledgeIngestFileResultSchema = z.object({
|
|
19
26
|
source: z.string(),
|
|
20
27
|
localSourcePath: z.string(),
|
|
@@ -26,26 +33,75 @@ export const KnowledgeIngestFileResultSchema = z.object({
|
|
|
26
33
|
stats: JsonObjectSchema,
|
|
27
34
|
warnings: z.array(z.string()),
|
|
28
35
|
});
|
|
36
|
+
export const KnowledgeIngestSkippedFileResultSchema = z.object({
|
|
37
|
+
source: z.string(),
|
|
38
|
+
localSourcePath: z.string().nullable(),
|
|
39
|
+
reason: KnowledgeIngestSkipReasonSchema,
|
|
40
|
+
message: z.string(),
|
|
41
|
+
});
|
|
42
|
+
export const KnowledgeIngestFailedFileResultSchema = z.object({
|
|
43
|
+
source: z.string(),
|
|
44
|
+
localSourcePath: z.string(),
|
|
45
|
+
reason: KnowledgeIngestFailureReasonSchema,
|
|
46
|
+
message: z.string(),
|
|
47
|
+
});
|
|
48
|
+
export const KnowledgeIngestJobResultMetadataSchema = z.object({
|
|
49
|
+
requested_count: z.number().int().nonnegative(),
|
|
50
|
+
source_mode: z.enum(["explicit_sources", "path_prefix"]),
|
|
51
|
+
knowledge_path: z.string(),
|
|
52
|
+
});
|
|
53
|
+
export const KnowledgeIngestJobResultCountsSchema = z.object({
|
|
54
|
+
requested_count: z.number().int().nonnegative(),
|
|
55
|
+
ingested_count: z.number().int().nonnegative(),
|
|
56
|
+
skipped_count: z.number().int().nonnegative(),
|
|
57
|
+
failed_count: z.number().int().nonnegative(),
|
|
58
|
+
});
|
|
59
|
+
export const KnowledgeIngestJobResultSchema = z.object({
|
|
60
|
+
kind: z.literal("knowledge_ingest"),
|
|
61
|
+
version: z.literal(1),
|
|
62
|
+
metadata: KnowledgeIngestJobResultMetadataSchema,
|
|
63
|
+
summary: KnowledgeIngestJobResultCountsSchema,
|
|
64
|
+
ingested: z.array(KnowledgeIngestFileResultSchema),
|
|
65
|
+
skipped: z.array(KnowledgeIngestSkippedFileResultSchema),
|
|
66
|
+
failed: z.array(KnowledgeIngestFailedFileResultSchema),
|
|
67
|
+
});
|
|
29
68
|
export const JobResultSchema = z
|
|
69
|
+
.discriminatedUnion("kind", [
|
|
70
|
+
KnowledgeIngestJobResultSchema,
|
|
71
|
+
z.object({
|
|
72
|
+
kind: z.literal("value"),
|
|
73
|
+
value: z.unknown(),
|
|
74
|
+
}),
|
|
75
|
+
z.object({
|
|
76
|
+
kind: z.literal("artifacts"),
|
|
77
|
+
artifacts: z.array(z.unknown()),
|
|
78
|
+
}),
|
|
79
|
+
])
|
|
80
|
+
.nullable();
|
|
81
|
+
export const JobResultSummarySchema = z
|
|
30
82
|
.discriminatedUnion("kind", [
|
|
31
83
|
z.object({
|
|
32
84
|
kind: z.literal("knowledge_ingest"),
|
|
33
|
-
|
|
85
|
+
state: z.enum(["success", "partial_success", "failed"]),
|
|
86
|
+
requested_count: z.number().int().nonnegative(),
|
|
87
|
+
ingested_count: z.number().int().nonnegative(),
|
|
88
|
+
skipped_count: z.number().int().nonnegative(),
|
|
89
|
+
failed_count: z.number().int().nonnegative(),
|
|
34
90
|
}),
|
|
35
91
|
z.object({
|
|
36
92
|
kind: z.literal("value"),
|
|
37
|
-
value: z.unknown(),
|
|
38
93
|
}),
|
|
39
94
|
z.object({
|
|
40
95
|
kind: z.literal("artifacts"),
|
|
41
|
-
|
|
96
|
+
artifact_count: z.number().int().nonnegative(),
|
|
42
97
|
}),
|
|
43
98
|
])
|
|
44
99
|
.nullable();
|
|
45
|
-
|
|
100
|
+
const BaseJobSchema = z.object({
|
|
46
101
|
id: z.string().uuid(),
|
|
47
102
|
project_id: z.string().uuid(),
|
|
48
103
|
environment_id: z.string().uuid().nullable(),
|
|
104
|
+
branch_id: z.string().nullable().optional().default(null),
|
|
49
105
|
cron_job_id: z.string().uuid().nullable(),
|
|
50
106
|
batch_id: z.string().uuid().nullable(),
|
|
51
107
|
name: z.string(),
|
|
@@ -56,17 +112,26 @@ export const JobSchema = z.object({
|
|
|
56
112
|
timeout_seconds: z.number(),
|
|
57
113
|
backoff_limit: z.number(),
|
|
58
114
|
exit_code: z.number().nullable(),
|
|
59
|
-
failed_reason: z.string().nullable(),
|
|
60
|
-
failure_detail: z.string().nullable(),
|
|
61
|
-
result: JobResultSchema,
|
|
62
115
|
started_at: z.string().nullable(),
|
|
63
116
|
completed_at: z.string().nullable(),
|
|
64
117
|
created_by: z.string().uuid().nullable(),
|
|
65
118
|
created_at: z.string(),
|
|
66
119
|
updated_at: z.string(),
|
|
67
120
|
});
|
|
121
|
+
export const JobSchema = BaseJobSchema.extend({
|
|
122
|
+
failed_reason: z.string().nullable().optional().default(null),
|
|
123
|
+
kind: JobKindSchema.optional().default(null),
|
|
124
|
+
failure_detail: z.string().nullable().optional().default(null),
|
|
125
|
+
result_summary: JobResultSummarySchema.optional().default(null),
|
|
126
|
+
result: JobResultSchema.optional().default(null),
|
|
127
|
+
});
|
|
128
|
+
export const JobListItemSchema = BaseJobSchema.extend({
|
|
129
|
+
kind: JobKindSchema.optional().default(null),
|
|
130
|
+
failure_detail: z.string().nullable().optional().default(null),
|
|
131
|
+
result_summary: JobResultSummarySchema.optional().default(null),
|
|
132
|
+
});
|
|
68
133
|
export const PaginatedJobsResponseSchema = z.object({
|
|
69
|
-
data: z.array(
|
|
134
|
+
data: z.array(JobListItemSchema),
|
|
70
135
|
page_info: PageInfoSchema,
|
|
71
136
|
});
|
|
72
137
|
export const JobEventSchema = z.object({
|
|
@@ -97,6 +162,9 @@ export const KnowledgeIngestBatchSourceSchema = z.object({
|
|
|
97
162
|
remote_path: z.string().nullable(),
|
|
98
163
|
warning_count: z.number().int().nonnegative(),
|
|
99
164
|
});
|
|
165
|
+
export const KnowledgeIngestBatchSourceWithMessageSchema = KnowledgeIngestBatchSourceSchema.extend({
|
|
166
|
+
message: z.string(),
|
|
167
|
+
});
|
|
100
168
|
export const JobBatchStatusCountsSchema = z.object({
|
|
101
169
|
submitted: z.number().int().nonnegative(),
|
|
102
170
|
working: z.number().int().nonnegative(),
|
|
@@ -110,8 +178,12 @@ export const JobBatchResultSchema = z
|
|
|
110
178
|
kind: z.literal("knowledge_ingest"),
|
|
111
179
|
total_count: z.number().int().nonnegative(),
|
|
112
180
|
completed_count: z.number().int().nonnegative(),
|
|
181
|
+
skipped_count: z.number().int().nonnegative(),
|
|
182
|
+
failed_count: z.number().int().nonnegative(),
|
|
113
183
|
processing: z.array(KnowledgeIngestBatchSourceSchema),
|
|
114
184
|
completed: z.array(KnowledgeIngestBatchSourceSchema),
|
|
185
|
+
skipped: z.array(KnowledgeIngestBatchSourceWithMessageSchema),
|
|
186
|
+
failed: z.array(KnowledgeIngestBatchSourceWithMessageSchema),
|
|
115
187
|
remaining: z.array(KnowledgeIngestBatchSourceSchema),
|
|
116
188
|
remaining_label: z.enum(["Remaining Files", "Not Ingested Files"]),
|
|
117
189
|
}),
|
|
@@ -142,6 +214,7 @@ export const CronJobSchema = z.object({
|
|
|
142
214
|
id: z.string().uuid(),
|
|
143
215
|
project_id: z.string().uuid(),
|
|
144
216
|
environment_id: z.string().uuid().nullable(),
|
|
217
|
+
branch_id: z.string().nullable().optional().default(null),
|
|
145
218
|
name: z.string(),
|
|
146
219
|
status: CronJobStatusSchema,
|
|
147
220
|
target: z.string(),
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import type { ProxyContext } from "./handler.js";
|
|
3
|
+
type ProxyError = NonNullable<ProxyContext["error"]>;
|
|
4
|
+
export declare function jsonErrorResponse(status: number, body: Record<string, unknown>): dntShim.Response;
|
|
5
|
+
export declare function createProxyErrorResponse(error: ProxyError): dntShim.Response;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=error-response.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-response.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/error-response.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAKjG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAmB5E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as dntShim from "../../_dnt.shims.js";
|
|
2
|
+
import { ErrorPages } from "../server/utils/error-html.js";
|
|
3
|
+
export function jsonErrorResponse(status, body) {
|
|
4
|
+
return new dntShim.Response(JSON.stringify(body), {
|
|
5
|
+
status,
|
|
6
|
+
headers: { "Content-Type": "application/json" },
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
export function createProxyErrorResponse(error) {
|
|
10
|
+
if (error.redirectUrl) {
|
|
11
|
+
return new dntShim.Response(null, {
|
|
12
|
+
status: 302,
|
|
13
|
+
headers: { Location: error.redirectUrl },
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
if (error.slug === "release-not-found" || error.slug === "project-not-found") {
|
|
17
|
+
return new dntShim.Response(ErrorPages.notFound(), {
|
|
18
|
+
status: 404,
|
|
19
|
+
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return jsonErrorResponse(error.status, {
|
|
23
|
+
error: error.message,
|
|
24
|
+
status: error.status,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAoGX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/src/proxy/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,kCAAkC,CAAC;AACzF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAQnD,eAAO,MAAM,sBAAsB,0MAYzB,CAAC;AAoGX,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,SAAS,GAAG,YAAY,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC9D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9E;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;IACpB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAoFD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB;0BAiL1B,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,YAAY,CAAC;0BAoQvC,OAAO,CAAC,OAAO,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;;;;;;;;0BA1XrD,MAAM,EAAE;;EAwapC;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEjE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAwB7F"}
|
package/esm/src/proxy/handler.js
CHANGED
|
@@ -90,6 +90,11 @@ function extractUserToken(cookieHeader) {
|
|
|
90
90
|
const match = cookieHeader.match(/(?:^|;\s*)authToken=([^;]+)/);
|
|
91
91
|
return match?.[1] ? decodeURIComponent(match[1]) : undefined;
|
|
92
92
|
}
|
|
93
|
+
function getStatusFromError(error) {
|
|
94
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
95
|
+
const match = message.match(/failed: (\d+)/);
|
|
96
|
+
return match ? Number(match[1]) : null;
|
|
97
|
+
}
|
|
93
98
|
async function extractUserIdFromToken(token, apiBaseUrl, log) {
|
|
94
99
|
let algorithm;
|
|
95
100
|
try {
|
|
@@ -304,6 +309,7 @@ export function createProxyHandler(options) {
|
|
|
304
309
|
const cookieHeader = req.headers.get("cookie") ?? "";
|
|
305
310
|
const userToken = extractUserToken(cookieHeader);
|
|
306
311
|
let token;
|
|
312
|
+
let tokenFetchError;
|
|
307
313
|
if (isLocalProject) {
|
|
308
314
|
logger?.debug("Local project, skipping token fetch", { localPath });
|
|
309
315
|
}
|
|
@@ -319,6 +325,7 @@ export function createProxyHandler(options) {
|
|
|
319
325
|
token = await tokenManager.getToken(scope, projectSlug, customDomain);
|
|
320
326
|
}
|
|
321
327
|
catch (error) {
|
|
328
|
+
tokenFetchError = error;
|
|
322
329
|
logger?.error("Token fetch failed", error, { projectSlug, customDomain });
|
|
323
330
|
}
|
|
324
331
|
}
|
|
@@ -328,6 +335,20 @@ export function createProxyHandler(options) {
|
|
|
328
335
|
logger?.debug("Using static API token fallback");
|
|
329
336
|
}
|
|
330
337
|
const base = { scope, host, parsedDomain };
|
|
338
|
+
if (projectSlug && scope === "preview" && !token) {
|
|
339
|
+
const status = getStatusFromError(tokenFetchError);
|
|
340
|
+
if (status === 404) {
|
|
341
|
+
logger?.info("Preview project not found", { projectSlug, host });
|
|
342
|
+
return makeErrorContext(base, 404, "Preview project not found", undefined, undefined, "project-not-found");
|
|
343
|
+
}
|
|
344
|
+
logger?.warn("Preview request has no usable token", {
|
|
345
|
+
projectSlug,
|
|
346
|
+
host,
|
|
347
|
+
hadUserToken: !!userToken,
|
|
348
|
+
hadTokenFetchError: !!tokenFetchError,
|
|
349
|
+
});
|
|
350
|
+
return makeErrorContext(base, 502, "Failed to authenticate preview request");
|
|
351
|
+
}
|
|
331
352
|
if (isCustomDomain && !projectSlug) {
|
|
332
353
|
if (!token) {
|
|
333
354
|
logger?.error("Cannot process custom domain without token", undefined, { domain: host });
|
|
@@ -380,6 +401,10 @@ export function createProxyHandler(options) {
|
|
|
380
401
|
if ("error" in resolved) {
|
|
381
402
|
return makeErrorContext(base, resolved.error.status, resolved.error.message, token, resolved.error.redirectUrl);
|
|
382
403
|
}
|
|
404
|
+
if (!resolved.projectId) {
|
|
405
|
+
logger?.info("Preview project not found after lookup", { projectSlug, host });
|
|
406
|
+
return makeErrorContext(base, 404, "Preview project not found", token, undefined, "project-not-found");
|
|
407
|
+
}
|
|
383
408
|
projectId = resolved.projectId;
|
|
384
409
|
environmentId = resolved.environmentId;
|
|
385
410
|
if (projectId) {
|
package/esm/src/proxy/main.js
CHANGED
|
@@ -25,12 +25,12 @@ import { createCacheFromEnv } from "./cache/index.js";
|
|
|
25
25
|
import { isRetryableConnectionError } from "./retry.js";
|
|
26
26
|
import { endSpan, extractContext, initializeOTLPWithApis, injectContext, ProxySpanNames, shutdownOTLP, startServerSpan, withContext, withSpan, } from "./tracing.js";
|
|
27
27
|
import { proxyLogger, runWithProxyRequestContext } from "./logger.js";
|
|
28
|
-
import { ErrorPages } from "../server/utils/error-html.js";
|
|
29
28
|
import { RendererRouter } from "./renderer-router.js";
|
|
30
29
|
import { ServerResolver } from "./server-resolver.js";
|
|
31
30
|
import { parseProjectDomain } from "../server/utils/domain-parser.js";
|
|
32
31
|
import { exit, getEnv, onSignal } from "../platform/compat/process.js";
|
|
33
32
|
import { createHttpServer, upgradeWebSocket } from "../platform/compat/http/index.js";
|
|
33
|
+
import { createProxyErrorResponse, jsonErrorResponse } from "./error-response.js";
|
|
34
34
|
function getLocalProjects() {
|
|
35
35
|
const raw = getEnv("LOCAL_PROJECTS");
|
|
36
36
|
return raw ? JSON.parse(raw) : {};
|
|
@@ -223,12 +223,6 @@ function handleWebSocketUpgrade(req) {
|
|
|
223
223
|
};
|
|
224
224
|
return response;
|
|
225
225
|
}
|
|
226
|
-
function jsonErrorResponse(status, body) {
|
|
227
|
-
return new dntShim.Response(JSON.stringify(body), {
|
|
228
|
-
status,
|
|
229
|
-
headers: { "Content-Type": "application/json" },
|
|
230
|
-
});
|
|
231
|
-
}
|
|
232
226
|
function forwardToServer(req) {
|
|
233
227
|
const startTime = performance.now();
|
|
234
228
|
const url = new URL(req.url);
|
|
@@ -254,22 +248,7 @@ function forwardToServer(req) {
|
|
|
254
248
|
const logLevel = ctx.error.status < 500 ? "warn" : "error";
|
|
255
249
|
proxyLogger[logLevel](`${ctx.error.status} ${req.method} ${url.pathname}`, { ms });
|
|
256
250
|
endSpan(spanInfo?.span, ctx.error.status);
|
|
257
|
-
|
|
258
|
-
return new dntShim.Response(null, {
|
|
259
|
-
status: 302,
|
|
260
|
-
headers: { Location: ctx.error.redirectUrl },
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
if (ctx.error.slug === "release-not-found") {
|
|
264
|
-
return new dntShim.Response(ErrorPages.notFound(), {
|
|
265
|
-
status: 404,
|
|
266
|
-
headers: { "Content-Type": "text/html; charset=utf-8" },
|
|
267
|
-
});
|
|
268
|
-
}
|
|
269
|
-
return jsonErrorResponse(ctx.error.status, {
|
|
270
|
-
error: ctx.error.message,
|
|
271
|
-
status: ctx.error.status,
|
|
272
|
-
});
|
|
251
|
+
return createProxyErrorResponse(ctx.error);
|
|
273
252
|
}
|
|
274
253
|
const reqLogger = proxyLogger.child({
|
|
275
254
|
...(ctx.projectSlug && { project: ctx.projectSlug }),
|
|
@@ -11,10 +11,21 @@ interface RouteCandidateOptions {
|
|
|
11
11
|
files: SourceFileLike[];
|
|
12
12
|
developmentMode: boolean;
|
|
13
13
|
}
|
|
14
|
+
interface ProjectCandidateOptions {
|
|
15
|
+
projectScope: string;
|
|
16
|
+
projectVersion: string;
|
|
17
|
+
projectDir: string;
|
|
18
|
+
files: SourceFileLike[];
|
|
19
|
+
developmentMode: boolean;
|
|
20
|
+
}
|
|
14
21
|
/**
|
|
15
22
|
* Resolve route-scoped Tailwind candidates from a precomputed per-project manifest.
|
|
16
23
|
*/
|
|
17
24
|
export declare function getRouteCandidates(options: RouteCandidateOptions): Set<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve full-project Tailwind candidates from a precomputed per-project manifest.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getProjectCandidates(options: ProjectCandidateOptions): Set<string>;
|
|
18
29
|
/**
|
|
19
30
|
* Invalidate cached candidate manifests for one project scope (or all scopes).
|
|
20
31
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-candidate-manifest.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/css-candidate-manifest.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,UAAU,qBAAqB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"css-candidate-manifest.d.ts","sourceRoot":"","sources":["../../../../src/src/rendering/orchestrator/css-candidate-manifest.ts"],"names":[],"mappings":"AAIA,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAQD,UAAU,qBAAqB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,UAAU,uBAAuB;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AA0GD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,GAAG,CAAC,MAAM,CAAC,CAkC9E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,uBAAuB,GAAG,GAAG,CAAC,MAAM,CAAC,CAGlF;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAc/E"}
|
|
@@ -58,6 +58,21 @@ function buildCandidateManifest(files, projectDir) {
|
|
|
58
58
|
}
|
|
59
59
|
return { fileCandidates, allCandidates, builtAt: Date.now() };
|
|
60
60
|
}
|
|
61
|
+
function getOrBuildManifest(options) {
|
|
62
|
+
const manifestKey = buildManifestCacheKey(options.projectScope, options.projectVersion);
|
|
63
|
+
const existingManifest = manifestCache.get(manifestKey);
|
|
64
|
+
const manifest = shouldRebuildManifest(existingManifest, options.developmentMode)
|
|
65
|
+
? buildCandidateManifest(options.files, options.projectDir)
|
|
66
|
+
: existingManifest;
|
|
67
|
+
if (manifest !== existingManifest) {
|
|
68
|
+
manifestCache.set(manifestKey, manifest);
|
|
69
|
+
for (const key of routeCandidateCache.keys()) {
|
|
70
|
+
if (key.startsWith(`${manifestKey}:`))
|
|
71
|
+
routeCandidateCache.delete(key);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return manifest;
|
|
75
|
+
}
|
|
61
76
|
function addCandidatesForPath(target, manifest, path, projectDir) {
|
|
62
77
|
const absolutePath = normalizePath(path);
|
|
63
78
|
const relativePath = toRelativeProjectPath(path, projectDir);
|
|
@@ -73,18 +88,7 @@ function addCandidatesForPath(target, manifest, path, projectDir) {
|
|
|
73
88
|
*/
|
|
74
89
|
export function getRouteCandidates(options) {
|
|
75
90
|
const manifestKey = buildManifestCacheKey(options.projectScope, options.projectVersion);
|
|
76
|
-
const
|
|
77
|
-
const manifest = shouldRebuildManifest(existingManifest, options.developmentMode)
|
|
78
|
-
? buildCandidateManifest(options.files, options.projectDir)
|
|
79
|
-
: existingManifest;
|
|
80
|
-
if (manifest !== existingManifest) {
|
|
81
|
-
manifestCache.set(manifestKey, manifest);
|
|
82
|
-
// Clear route subsets when project-level file manifest is rebuilt.
|
|
83
|
-
for (const key of routeCandidateCache.keys()) {
|
|
84
|
-
if (key.startsWith(`${manifestKey}:`))
|
|
85
|
-
routeCandidateCache.delete(key);
|
|
86
|
-
}
|
|
87
|
-
}
|
|
91
|
+
const manifest = getOrBuildManifest(options);
|
|
88
92
|
const routeCacheKey = `${manifestKey}:${options.routeKey}`;
|
|
89
93
|
const cachedRoute = routeCandidateCache.get(routeCacheKey);
|
|
90
94
|
if (cachedRoute)
|
|
@@ -112,6 +116,13 @@ export function getRouteCandidates(options) {
|
|
|
112
116
|
});
|
|
113
117
|
return new Set(routeCandidates);
|
|
114
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Resolve full-project Tailwind candidates from a precomputed per-project manifest.
|
|
121
|
+
*/
|
|
122
|
+
export function getProjectCandidates(options) {
|
|
123
|
+
const manifest = getOrBuildManifest(options);
|
|
124
|
+
return new Set(manifest.allCandidates);
|
|
125
|
+
}
|
|
115
126
|
/**
|
|
116
127
|
* Invalidate cached candidate manifests for one project scope (or all scopes).
|
|
117
128
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles-candidate-scanner.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/styles-candidate-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"styles-candidate-scanner.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/styles-candidate-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAQH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA8BlD;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CA0CxF"}
|
|
@@ -11,12 +11,26 @@ import { extractCandidates } from "../../../html/styles-builder/tailwind-compile
|
|
|
11
11
|
import { serverLogger } from "../../../utils/index.js";
|
|
12
12
|
import { createFileSystem } from "../../../platform/compat/fs.js";
|
|
13
13
|
import { join } from "../../../platform/compat/path/index.js";
|
|
14
|
+
import { getProjectCandidates } from "../../../rendering/orchestrator/css-candidate-manifest.js";
|
|
14
15
|
import { FRAMEWORK_CANDIDATES } from "./framework-candidates.generated.js";
|
|
15
16
|
const logger = serverLogger.component("styles-candidate-scanner");
|
|
16
17
|
const SOURCE_EXTENSIONS = [".tsx", ".jsx", ".mdx", ".ts", ".js"];
|
|
17
18
|
const SKIP_DIRS = new Set(["node_modules", ".cache", ".git", "dist", "build", ".vscode"]);
|
|
18
19
|
/** De-duplicated set of framework candidates, computed once at import time. */
|
|
19
20
|
const frameworkCandidates = new Set(FRAMEWORK_CANDIDATES);
|
|
21
|
+
function resolveProjectVersion(ctx, contentContext) {
|
|
22
|
+
if (contentContext?.releaseId)
|
|
23
|
+
return `release:${contentContext.releaseId}`;
|
|
24
|
+
if (contentContext?.branch)
|
|
25
|
+
return `branch:${contentContext.branch}`;
|
|
26
|
+
if (contentContext?.environmentName)
|
|
27
|
+
return `environment:${contentContext.environmentName}`;
|
|
28
|
+
if (ctx.releaseId)
|
|
29
|
+
return `release:${ctx.releaseId}`;
|
|
30
|
+
if (ctx.parsedDomain?.branch)
|
|
31
|
+
return `branch:${ctx.parsedDomain.branch}`;
|
|
32
|
+
return "live";
|
|
33
|
+
}
|
|
20
34
|
/**
|
|
21
35
|
* Extract Tailwind CSS candidate class names from all project source files.
|
|
22
36
|
*
|
|
@@ -38,14 +52,17 @@ export async function extractProjectCandidates(ctx) {
|
|
|
38
52
|
}
|
|
39
53
|
const candidates = new Set(frameworkCandidates);
|
|
40
54
|
const files = await fsAdapter.getAllSourceFiles();
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
55
|
+
const contentContext = typeof fsAdapter.getContentContext === "function"
|
|
56
|
+
? fsAdapter.getContentContext()
|
|
57
|
+
: null;
|
|
58
|
+
for (const cls of getProjectCandidates({
|
|
59
|
+
projectScope: ctx.projectSlug ?? contentContext?.projectSlug ?? ctx.projectDir,
|
|
60
|
+
projectVersion: resolveProjectVersion(ctx, contentContext),
|
|
61
|
+
projectDir: ctx.projectDir,
|
|
62
|
+
files,
|
|
63
|
+
developmentMode: contentContext?.sourceType === "branch",
|
|
64
|
+
})) {
|
|
65
|
+
candidates.add(cls);
|
|
49
66
|
}
|
|
50
67
|
return candidates;
|
|
51
68
|
}
|
|
@@ -11,5 +11,6 @@ export declare class StylesCSSHandler extends BaseHandler {
|
|
|
11
11
|
metadata: HandlerMetadata;
|
|
12
12
|
handle(req: dntShim.Request, ctx: HandlerContext): Promise<HandlerResult>;
|
|
13
13
|
private loadStylesheet;
|
|
14
|
+
private generateStylesheet;
|
|
14
15
|
}
|
|
15
16
|
//# sourceMappingURL=styles-css.handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles-css.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/styles-css.handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"styles-css.handler.d.ts","sourceRoot":"","sources":["../../../../../src/src/server/handlers/dev/styles-css.handler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,OAAO,MAAM,2BAA2B,CAAC;AAGrD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAkBnG,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,EAAE,eAAe,CAKvB;IAEI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;YAkGjE,cAAc;IAkB5B,OAAO,CAAC,kBAAkB;CAe3B"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseHandler } from "../response/base.js";
|
|
2
2
|
import { HTTP_OK, PRIORITY_HIGH_DEV } from "../../../utils/constants/index.js";
|
|
3
3
|
import { joinPath } from "../../../utils/path-utils.js";
|
|
4
|
-
import { formatCSSError, generateTailwindCSS, } from "../../../html/styles-builder/tailwind-compiler.js";
|
|
4
|
+
import { formatCSSError, generateTailwindCSS, getProjectCSS, } from "../../../html/styles-builder/tailwind-compiler.js";
|
|
5
5
|
import { DEFAULT_STYLESHEET } from "../../../html/styles-builder/css-hash-cache.js";
|
|
6
6
|
import { serverLogger } from "../../../utils/index.js";
|
|
7
7
|
import { extractProjectCandidates } from "./styles-candidate-scanner.js";
|
|
@@ -39,10 +39,8 @@ export class StylesCSSHandler extends BaseHandler {
|
|
|
39
39
|
});
|
|
40
40
|
candidates = new Set();
|
|
41
41
|
}
|
|
42
|
-
const result = await
|
|
43
|
-
|
|
44
|
-
});
|
|
45
|
-
if (result.error) {
|
|
42
|
+
const result = await this.generateStylesheet(ctx, rawCss, candidates);
|
|
43
|
+
if ("error" in result && result.error) {
|
|
46
44
|
const formatted = formatCSSError(result.error);
|
|
47
45
|
logger.error("Tailwind error", {
|
|
48
46
|
error: formatted.message,
|
|
@@ -82,6 +80,8 @@ body::before {
|
|
|
82
80
|
logger.debug("CSS generated", {
|
|
83
81
|
candidates: candidates.size,
|
|
84
82
|
cssLength: result.css.length,
|
|
83
|
+
fromCache: "fromCache" in result ? result.fromCache : false,
|
|
84
|
+
cssHash: "hash" in result ? result.hash : undefined,
|
|
85
85
|
});
|
|
86
86
|
return this.respond(responseBuilder.withContentType("text/css; charset=utf-8", result.css, HTTP_OK));
|
|
87
87
|
});
|
|
@@ -114,4 +114,14 @@ body::before {
|
|
|
114
114
|
return DEFAULT_STYLESHEET;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
generateStylesheet(ctx, rawCss, candidates) {
|
|
118
|
+
if (!ctx.projectSlug) {
|
|
119
|
+
return generateTailwindCSS(rawCss, candidates);
|
|
120
|
+
}
|
|
121
|
+
return getProjectCSS(ctx.projectSlug, rawCss, candidates, {
|
|
122
|
+
minify: true,
|
|
123
|
+
environment: "preview",
|
|
124
|
+
buildMode: "production",
|
|
125
|
+
});
|
|
126
|
+
}
|
|
117
127
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-cache-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-cache-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"http-cache-helpers.d.ts","sourceRoot":"","sources":["../../../../src/src/transforms/esm/http-cache-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAOzE;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,EAAE,CAAC;IACjC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAC5B,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACvB,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,eAAe,CAAC;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAK3D;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEvE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAqBhD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA2BpD;AAED,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,eAAe,EAC1B,YAAY,GAAE,MAA8B,GAC3C,MAAM,CA4BR;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAkBrF"}
|
|
@@ -7,6 +7,8 @@ import { isAbsolute, join } from "../../platform/compat/path/index.js";
|
|
|
7
7
|
import { cwd } from "../../platform/compat/process.js";
|
|
8
8
|
import { rendererLogger } from "../../utils/index.js";
|
|
9
9
|
import { resolveImport } from "../../modules/import-map/resolver.js";
|
|
10
|
+
import { buildEsmShUrl } from "../import-rewriter/url-builder.js";
|
|
11
|
+
import { parseBarePackageSpecifier } from "../shared/package-specifier.js";
|
|
10
12
|
import { DEFAULT_REACT_VERSION, getReactImportMap } from "./package-registry.js";
|
|
11
13
|
const logger = rendererLogger.component("http-cache");
|
|
12
14
|
export function ensureAbsoluteDir(path) {
|
|
@@ -100,7 +102,11 @@ export function resolveBareSpecifier(specifier, importMap, reactVersion = DEFAUL
|
|
|
100
102
|
const mapped = resolveImport(specifier, importMap);
|
|
101
103
|
if (mapped !== specifier)
|
|
102
104
|
return mapped;
|
|
103
|
-
|
|
105
|
+
const parsed = parseBarePackageSpecifier(specifier);
|
|
106
|
+
if (parsed == null) {
|
|
107
|
+
return `https://esm.sh/${specifier}?target=es2022`;
|
|
108
|
+
}
|
|
109
|
+
return buildEsmShUrl(parsed.packageName, parsed.version ?? undefined, parsed.subpath ?? undefined);
|
|
104
110
|
}
|
|
105
111
|
/**
|
|
106
112
|
* Check if cached HTTP bundle code has file:// paths from a different environment.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bare-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/bare-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"bare-strategy.d.ts","sourceRoot":"","sources":["../../../../../src/src/transforms/import-rewriter/strategies/bare-strategy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,aAAa,EACd,MAAM,aAAa,CAAC;AA8BrB,qBAAa,YAAa,YAAW,qBAAqB;IACxD,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,QAAQ,KAAK;IAEtB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO;IAsBzD,OAAO,CAAC,IAAI,EAAE,mBAAmB,EAAE,GAAG,EAAE,cAAc,GAAG,aAAa;CAwBvE;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -6,14 +6,12 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { rendererLogger } from "../../../utils/index.js";
|
|
8
8
|
import { buildEsmShUrl, TAILWIND_VERSION } from "../url-builder.js";
|
|
9
|
+
import { parseBarePackageSpecifier } from "../../shared/package-specifier.js";
|
|
9
10
|
const logger = rendererLogger.component("esm");
|
|
10
11
|
const unversionedImportsWarned = new Set();
|
|
11
12
|
function hasVersionSpecifier(specifier) {
|
|
12
13
|
return /@[\d^~x][\d.x^~-]*(?=\/|$)/.test(specifier);
|
|
13
14
|
}
|
|
14
|
-
function normalizeVersionedSpecifier(specifier) {
|
|
15
|
-
return specifier.replace(/@[\d^~x][\d.x^~-]*(?=\/|$)/, "");
|
|
16
|
-
}
|
|
17
15
|
function warnUnversionedImport(specifier, projectId) {
|
|
18
16
|
const key = `${projectId}:${specifier}`;
|
|
19
17
|
if (unversionedImportsWarned.has(key))
|
|
@@ -53,15 +51,20 @@ export class BareStrategy {
|
|
|
53
51
|
rewrite(info, ctx) {
|
|
54
52
|
if (ctx.target === "ssr")
|
|
55
53
|
return { specifier: null };
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
54
|
+
const parsed = parseBarePackageSpecifier(info.specifier);
|
|
55
|
+
if (parsed == null) {
|
|
56
|
+
return { specifier: null };
|
|
57
|
+
}
|
|
58
|
+
const packageName = parsed.packageName;
|
|
59
|
+
let version = parsed.version ?? undefined;
|
|
60
|
+
const subpath = parsed.subpath ?? undefined;
|
|
61
|
+
if (packageName === "tailwindcss") {
|
|
62
|
+
version = TAILWIND_VERSION;
|
|
60
63
|
}
|
|
61
64
|
else if (!hasVersionSpecifier(info.specifier)) {
|
|
62
65
|
warnUnversionedImport(info.specifier, ctx.projectId);
|
|
63
66
|
}
|
|
64
|
-
const url = buildEsmShUrl(
|
|
67
|
+
const url = buildEsmShUrl(packageName, version, subpath, {
|
|
65
68
|
external: ["react"],
|
|
66
69
|
});
|
|
67
70
|
return { specifier: url };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ParsedBarePackageSpecifier {
|
|
2
|
+
packageName: string;
|
|
3
|
+
version: string | null;
|
|
4
|
+
subpath: string | null;
|
|
5
|
+
}
|
|
6
|
+
export declare function parseBarePackageSpecifier(specifier: string): ParsedBarePackageSpecifier | null;
|
|
7
|
+
//# sourceMappingURL=package-specifier.d.ts.map
|