@celsian/vura-compiler 0.5.6 → 0.5.9
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 +2 -2
- package/dist/index.d.ts +55 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +604 -51
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# @celsian/vura-compiler
|
|
2
2
|
|
|
3
|
-
Pure-JS compiler for [Vura](https://vura.io) —
|
|
3
|
+
Pure-JS compiler for [Vura](https://vura.io) — safe static route scanning and JSX transforms.
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@celsian/vura-compiler)
|
|
6
6
|
|
|
7
7
|
## What it does
|
|
8
8
|
|
|
9
|
-
`@celsian/vura-compiler` scans route and page source files to extract HTTP methods, route config (`
|
|
9
|
+
`@celsian/vura-compiler` scans route and page source files to extract HTTP methods, nested route config, and page modes without importing or executing application code. Its restricted route-literal parser supports strings, finite numbers (including numeric separators), booleans, null, arrays, nested objects, and TypeScript `as const`; calls, identifiers, spreads, computed properties, and templates fail with a source-located error. Deployment-affecting page values such as `mode`, `revalidate`, and `tags` must be static literals; page modes must be quoted strings. Explicit presentation references such as `styles: [baseStyles]` are omitted from the manifest and evaluated only when the renderer loads the page module. This package is the pure-JS path used by `@celsian/vura-core` — you do not need to install it directly unless building custom tooling.
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,31 +1,75 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @celsian/vura-compiler —
|
|
2
|
+
* @celsian/vura-compiler — dependency-free JavaScript fallback compiler.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Route metadata is intentionally parsed as a restricted static literal. The
|
|
5
|
+
* scanner never imports or evaluates an application module, which keeps build
|
|
6
|
+
* discovery deterministic and prevents config files from executing code.
|
|
7
7
|
*/
|
|
8
|
+
export type StaticConfigPrimitive = string | number | boolean | null;
|
|
9
|
+
export type StaticConfigValue = StaticConfigPrimitive | StaticConfigValue[] | StaticConfigObject;
|
|
10
|
+
export interface StaticConfigObject {
|
|
11
|
+
[key: string]: StaticConfigValue;
|
|
12
|
+
}
|
|
13
|
+
export type LegacyRouteKind = 'serverless' | 'hot' | 'task';
|
|
14
|
+
export type ComputeClass = 'edge' | 'function' | 'dedicated';
|
|
15
|
+
export type FunctionMemory = '1gb' | '4gb' | '6gb' | '8gb' | '12gb';
|
|
16
|
+
export type EdgeEligibility = 'pending';
|
|
17
|
+
export interface RouteComputeRequest {
|
|
18
|
+
class?: ComputeClass;
|
|
19
|
+
memory?: FunctionMemory | '128mb' | string;
|
|
20
|
+
cpu?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface NormalizedRouteCompute {
|
|
23
|
+
/** Requested runtime class. Edge remains gated by `edgeEligibility`. */
|
|
24
|
+
class: ComputeClass;
|
|
25
|
+
memory?: FunctionMemory | '128mb' | string | number;
|
|
26
|
+
cpu?: number;
|
|
27
|
+
/** Effective fallback while a requested Edge endpoint is not eligible. */
|
|
28
|
+
effectiveClass?: 'function' | 'dedicated';
|
|
29
|
+
effectiveMemory?: FunctionMemory | string | number;
|
|
30
|
+
requestedClass?: 'edge';
|
|
31
|
+
requestedMemory?: '128mb';
|
|
32
|
+
edgeEligibility?: EdgeEligibility;
|
|
33
|
+
}
|
|
8
34
|
export interface ScanResult {
|
|
9
35
|
methods: string[];
|
|
10
|
-
kind:
|
|
36
|
+
kind: LegacyRouteKind;
|
|
11
37
|
hasDefaultExport: boolean;
|
|
12
38
|
hasGetServerData: boolean;
|
|
13
39
|
pageMode: string | null;
|
|
14
|
-
config:
|
|
40
|
+
config: StaticConfigObject;
|
|
15
41
|
}
|
|
16
42
|
export interface TransformResult {
|
|
17
43
|
code: string;
|
|
18
44
|
map: string | null;
|
|
19
45
|
}
|
|
46
|
+
export declare class StaticConfigParseError extends SyntaxError {
|
|
47
|
+
readonly line: number;
|
|
48
|
+
readonly column: number;
|
|
49
|
+
constructor(source: string, index: number, context: string, message: string);
|
|
50
|
+
}
|
|
20
51
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
52
|
+
* Replace strings, templates, and comments with spaces while preserving source
|
|
53
|
+
* offsets and newlines. Regex checks can then find export syntax without being
|
|
54
|
+
* fooled by examples inside comments or string literals.
|
|
23
55
|
*/
|
|
24
|
-
export declare function
|
|
56
|
+
export declare function maskNonCode(source: string): string;
|
|
57
|
+
export declare function parseStaticObjectExport(source: string, exportName: string, context?: string): StaticConfigObject | null;
|
|
25
58
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
59
|
+
* Normalize the source contract while retaining legacy keys in `config` for
|
|
60
|
+
* one compatibility window. `kind` remains the adapter-facing legacy route
|
|
61
|
+
* kind; `config.compute` is the canonical platform contract.
|
|
28
62
|
*/
|
|
63
|
+
export declare function normalizeRouteConfig(input: StaticConfigObject, source?: string): {
|
|
64
|
+
kind: LegacyRouteKind;
|
|
65
|
+
config: StaticConfigObject;
|
|
66
|
+
};
|
|
67
|
+
export declare function readRouteConfig(source: string): {
|
|
68
|
+
kind: LegacyRouteKind;
|
|
69
|
+
config: StaticConfigObject;
|
|
70
|
+
};
|
|
71
|
+
export declare function readPageConfig(source: string): StaticConfigObject;
|
|
72
|
+
export declare function scanRoute(source: string, _fileType: string): ScanResult;
|
|
29
73
|
export declare function transformJsx(source: string, options?: {
|
|
30
74
|
jsxImportSource?: string;
|
|
31
75
|
production?: boolean;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,61 +1,624 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @celsian/vura-compiler —
|
|
2
|
+
* @celsian/vura-compiler — dependency-free JavaScript fallback compiler.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Route metadata is intentionally parsed as a restricted static literal. The
|
|
5
|
+
* scanner never imports or evaluates an application module, which keeps build
|
|
6
|
+
* discovery deterministic and prevents config files from executing code.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
export class StaticConfigParseError extends SyntaxError {
|
|
9
|
+
line;
|
|
10
|
+
column;
|
|
11
|
+
constructor(source, index, context, message) {
|
|
12
|
+
const before = source.slice(0, Math.max(0, index));
|
|
13
|
+
const lines = before.split(/\r?\n/);
|
|
14
|
+
const line = lines.length;
|
|
15
|
+
const column = (lines.at(-1)?.length ?? 0) + 1;
|
|
16
|
+
super(`[VURA_CONFIG] ${context} config at ${line}:${column}: ${message}`);
|
|
17
|
+
this.name = 'StaticConfigParseError';
|
|
18
|
+
this.line = line;
|
|
19
|
+
this.column = column;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
9
22
|
const HTTP_METHODS = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];
|
|
23
|
+
const FUNCTION_MEMORY = new Set(['1gb', '4gb', '6gb', '8gb', '12gb']);
|
|
24
|
+
const ROUTE_KINDS = new Set(['serverless', 'hot', 'task']);
|
|
25
|
+
const PAGE_PRESENTATION_KEYS = new Set(['styles']);
|
|
26
|
+
const OMIT_DYNAMIC_VALUE = Symbol('omit-dynamic-static-config-value');
|
|
10
27
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
28
|
+
* Replace strings, templates, and comments with spaces while preserving source
|
|
29
|
+
* offsets and newlines. Regex checks can then find export syntax without being
|
|
30
|
+
* fooled by examples inside comments or string literals.
|
|
13
31
|
*/
|
|
14
|
-
export function
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
32
|
+
export function maskNonCode(source) {
|
|
33
|
+
const chars = source.split('');
|
|
34
|
+
let state = 'code';
|
|
35
|
+
let escaped = false;
|
|
36
|
+
let regexCharacterClass = false;
|
|
37
|
+
for (let i = 0; i < chars.length; i++) {
|
|
38
|
+
const char = source[i];
|
|
39
|
+
const next = source[i + 1];
|
|
40
|
+
if (state === 'code') {
|
|
41
|
+
if (char === '/' && next === '/') {
|
|
42
|
+
chars[i] = chars[i + 1] = ' ';
|
|
43
|
+
state = 'line-comment';
|
|
44
|
+
i++;
|
|
45
|
+
}
|
|
46
|
+
else if (char === '/' && next === '*') {
|
|
47
|
+
chars[i] = chars[i + 1] = ' ';
|
|
48
|
+
state = 'block-comment';
|
|
49
|
+
i++;
|
|
50
|
+
}
|
|
51
|
+
else if (char === "'") {
|
|
52
|
+
chars[i] = ' ';
|
|
53
|
+
state = 'single';
|
|
54
|
+
}
|
|
55
|
+
else if (char === '"') {
|
|
56
|
+
chars[i] = ' ';
|
|
57
|
+
state = 'double';
|
|
58
|
+
}
|
|
59
|
+
else if (char === '`') {
|
|
60
|
+
chars[i] = ' ';
|
|
61
|
+
state = 'template';
|
|
62
|
+
}
|
|
63
|
+
else if (char === '/' && canStartRegexLiteral(source, i)) {
|
|
64
|
+
chars[i] = ' ';
|
|
65
|
+
state = 'regex';
|
|
66
|
+
regexCharacterClass = false;
|
|
67
|
+
}
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if (char !== '\n' && char !== '\r')
|
|
71
|
+
chars[i] = ' ';
|
|
72
|
+
if (state === 'line-comment') {
|
|
73
|
+
if (char === '\n')
|
|
74
|
+
state = 'code';
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
if (state === 'block-comment') {
|
|
78
|
+
if (char === '*' && next === '/') {
|
|
79
|
+
chars[i + 1] = ' ';
|
|
80
|
+
state = 'code';
|
|
81
|
+
i++;
|
|
82
|
+
}
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (state === 'regex') {
|
|
86
|
+
if (char === '\n' || char === '\r') {
|
|
87
|
+
state = 'code';
|
|
88
|
+
regexCharacterClass = false;
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
if (escaped) {
|
|
92
|
+
escaped = false;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (char === '\\') {
|
|
96
|
+
escaped = true;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (char === '[')
|
|
100
|
+
regexCharacterClass = true;
|
|
101
|
+
else if (char === ']')
|
|
102
|
+
regexCharacterClass = false;
|
|
103
|
+
else if (char === '/' && !regexCharacterClass)
|
|
104
|
+
state = 'code';
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (escaped) {
|
|
108
|
+
escaped = false;
|
|
109
|
+
continue;
|
|
21
110
|
}
|
|
111
|
+
if (char === '\\') {
|
|
112
|
+
escaped = true;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if ((state === 'single' && char === "'") ||
|
|
116
|
+
(state === 'double' && char === '"') ||
|
|
117
|
+
(state === 'template' && char === '`')) {
|
|
118
|
+
state = 'code';
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return chars.join('');
|
|
122
|
+
}
|
|
123
|
+
function canStartRegexLiteral(source, slashIndex) {
|
|
124
|
+
let index = slashIndex - 1;
|
|
125
|
+
while (index >= 0 && /\s/.test(source[index]))
|
|
126
|
+
index--;
|
|
127
|
+
if (index < 0)
|
|
128
|
+
return true;
|
|
129
|
+
const previous = source[index];
|
|
130
|
+
if ('([{,:;=!?&|+-*%^~<>'.includes(previous))
|
|
131
|
+
return true;
|
|
132
|
+
if (/[\w$]/.test(previous)) {
|
|
133
|
+
const end = index + 1;
|
|
134
|
+
while (index >= 0 && /[\w$]/.test(source[index]))
|
|
135
|
+
index--;
|
|
136
|
+
return new Set([
|
|
137
|
+
'return', 'throw', 'case', 'delete', 'void', 'typeof', 'instanceof',
|
|
138
|
+
'in', 'of', 'yield', 'await', 'else', 'do',
|
|
139
|
+
]).has(source.slice(index + 1, end));
|
|
140
|
+
}
|
|
141
|
+
return false;
|
|
142
|
+
}
|
|
143
|
+
class StaticLiteralParser {
|
|
144
|
+
source;
|
|
145
|
+
index;
|
|
146
|
+
context;
|
|
147
|
+
omitIdentifierReferences;
|
|
148
|
+
constructor(source, index, context, omitIdentifierReferences = false) {
|
|
149
|
+
this.source = source;
|
|
150
|
+
this.index = index;
|
|
151
|
+
this.context = context;
|
|
152
|
+
this.omitIdentifierReferences = omitIdentifierReferences;
|
|
22
153
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
154
|
+
parseValue(omitIdentifierReferences = this.omitIdentifierReferences) {
|
|
155
|
+
this.skipTrivia();
|
|
156
|
+
const char = this.source[this.index];
|
|
157
|
+
if (char === '{')
|
|
158
|
+
return this.parseObject(omitIdentifierReferences);
|
|
159
|
+
if (char === '[')
|
|
160
|
+
return this.parseArray(omitIdentifierReferences);
|
|
161
|
+
if (char === "'" || char === '"')
|
|
162
|
+
return this.parseString();
|
|
163
|
+
if (char === '`')
|
|
164
|
+
this.fail('template literals are not allowed');
|
|
165
|
+
if (char === '-' || char === '.' || (char !== undefined && /\d/.test(char))) {
|
|
166
|
+
return this.parseNumber();
|
|
31
167
|
}
|
|
168
|
+
if (char !== undefined && /[A-Za-z_$]/.test(char)) {
|
|
169
|
+
const start = this.index;
|
|
170
|
+
const identifier = this.parseIdentifier();
|
|
171
|
+
if (identifier === 'true')
|
|
172
|
+
return true;
|
|
173
|
+
if (identifier === 'false')
|
|
174
|
+
return false;
|
|
175
|
+
if (identifier === 'null')
|
|
176
|
+
return null;
|
|
177
|
+
if (omitIdentifierReferences)
|
|
178
|
+
return OMIT_DYNAMIC_VALUE;
|
|
179
|
+
this.fail('identifiers are not allowed as values', start);
|
|
180
|
+
}
|
|
181
|
+
this.fail(`expected a static literal, found ${JSON.stringify(char ?? 'end of input')}`);
|
|
32
182
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
183
|
+
parseObject(omitIdentifierReferences) {
|
|
184
|
+
const result = {};
|
|
185
|
+
this.index++;
|
|
186
|
+
this.skipTrivia();
|
|
187
|
+
if (this.source[this.index] === '}') {
|
|
188
|
+
this.index++;
|
|
189
|
+
return result;
|
|
190
|
+
}
|
|
191
|
+
while (this.index < this.source.length) {
|
|
192
|
+
this.skipTrivia();
|
|
193
|
+
if (this.source.startsWith('...', this.index)) {
|
|
194
|
+
this.fail('spread properties are not allowed');
|
|
195
|
+
}
|
|
196
|
+
if (this.source[this.index] === '[') {
|
|
197
|
+
this.fail('computed properties are not allowed');
|
|
198
|
+
}
|
|
199
|
+
const key = this.source[this.index] === "'" || this.source[this.index] === '"'
|
|
200
|
+
? this.parseString()
|
|
201
|
+
: this.parseIdentifier();
|
|
202
|
+
if (typeof key !== 'string' || key.length === 0) {
|
|
203
|
+
this.fail('object keys must be identifiers or string literals');
|
|
204
|
+
}
|
|
205
|
+
this.skipTrivia();
|
|
206
|
+
if (this.source[this.index] !== ':') {
|
|
207
|
+
this.fail('object properties must use key: literal syntax');
|
|
208
|
+
}
|
|
209
|
+
this.index++;
|
|
210
|
+
const omitPropertyReference = omitIdentifierReferences ||
|
|
211
|
+
(this.context === 'page' && PAGE_PRESENTATION_KEYS.has(key));
|
|
212
|
+
const value = this.parseValue(omitPropertyReference);
|
|
213
|
+
this.skipConstAssertion();
|
|
214
|
+
if (value !== OMIT_DYNAMIC_VALUE)
|
|
215
|
+
result[key] = value;
|
|
216
|
+
this.skipTrivia();
|
|
217
|
+
const separator = this.source[this.index];
|
|
218
|
+
if (separator === '}') {
|
|
219
|
+
this.index++;
|
|
220
|
+
return result;
|
|
221
|
+
}
|
|
222
|
+
if (separator !== ',') {
|
|
223
|
+
this.fail('expected a comma or closing brace');
|
|
224
|
+
}
|
|
225
|
+
this.index++;
|
|
226
|
+
this.skipTrivia();
|
|
227
|
+
if (this.source[this.index] === '}') {
|
|
228
|
+
this.index++;
|
|
229
|
+
return result;
|
|
230
|
+
}
|
|
40
231
|
}
|
|
232
|
+
this.fail('unterminated object literal');
|
|
41
233
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
234
|
+
parseArray(omitIdentifierReferences) {
|
|
235
|
+
const result = [];
|
|
236
|
+
let hasDynamicValue = false;
|
|
237
|
+
this.index++;
|
|
238
|
+
this.skipTrivia();
|
|
239
|
+
if (this.source[this.index] === ']') {
|
|
240
|
+
this.index++;
|
|
241
|
+
return result;
|
|
242
|
+
}
|
|
243
|
+
while (this.index < this.source.length) {
|
|
244
|
+
if (this.source.startsWith('...', this.index)) {
|
|
245
|
+
this.fail('array spreads are not allowed');
|
|
246
|
+
}
|
|
247
|
+
const value = this.parseValue(omitIdentifierReferences);
|
|
248
|
+
if (value === OMIT_DYNAMIC_VALUE)
|
|
249
|
+
hasDynamicValue = true;
|
|
250
|
+
else
|
|
251
|
+
result.push(value);
|
|
252
|
+
this.skipConstAssertion();
|
|
253
|
+
this.skipTrivia();
|
|
254
|
+
const separator = this.source[this.index];
|
|
255
|
+
if (separator === ']') {
|
|
256
|
+
this.index++;
|
|
257
|
+
return hasDynamicValue ? OMIT_DYNAMIC_VALUE : result;
|
|
258
|
+
}
|
|
259
|
+
if (separator !== ',')
|
|
260
|
+
this.fail('expected a comma or closing bracket');
|
|
261
|
+
this.index++;
|
|
262
|
+
this.skipTrivia();
|
|
263
|
+
if (this.source[this.index] === ']') {
|
|
264
|
+
this.index++;
|
|
265
|
+
return hasDynamicValue ? OMIT_DYNAMIC_VALUE : result;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
this.fail('unterminated array literal');
|
|
49
269
|
}
|
|
50
|
-
|
|
51
|
-
|
|
270
|
+
parseIdentifier() {
|
|
271
|
+
const start = this.index;
|
|
272
|
+
const first = this.source[this.index];
|
|
273
|
+
if (first === undefined || !/[A-Za-z_$]/.test(first)) {
|
|
274
|
+
this.fail('object keys must be identifiers or string literals');
|
|
275
|
+
}
|
|
276
|
+
this.index++;
|
|
277
|
+
while (this.index < this.source.length && /[\w$]/.test(this.source[this.index])) {
|
|
278
|
+
this.index++;
|
|
279
|
+
}
|
|
280
|
+
return this.source.slice(start, this.index);
|
|
281
|
+
}
|
|
282
|
+
parseString() {
|
|
283
|
+
const quote = this.source[this.index];
|
|
284
|
+
const start = this.index;
|
|
285
|
+
this.index++;
|
|
286
|
+
let value = '';
|
|
287
|
+
while (this.index < this.source.length) {
|
|
288
|
+
const char = this.source[this.index++];
|
|
289
|
+
if (char === quote)
|
|
290
|
+
return value;
|
|
291
|
+
if (char === '\n' || char === '\r')
|
|
292
|
+
this.fail('unterminated string literal', start);
|
|
293
|
+
if (char !== '\\') {
|
|
294
|
+
value += char;
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
const escaped = this.source[this.index++];
|
|
298
|
+
if (escaped === undefined)
|
|
299
|
+
this.fail('unterminated string escape', start);
|
|
300
|
+
const simpleEscapes = {
|
|
301
|
+
n: '\n', r: '\r', t: '\t', b: '\b', f: '\f', v: '\v',
|
|
302
|
+
'0': '\0', '\\': '\\', "'": "'", '"': '"',
|
|
303
|
+
};
|
|
304
|
+
if (escaped in simpleEscapes) {
|
|
305
|
+
value += simpleEscapes[escaped];
|
|
306
|
+
}
|
|
307
|
+
else if (escaped === '\n') {
|
|
308
|
+
// JavaScript line continuation contributes no character.
|
|
309
|
+
}
|
|
310
|
+
else if (escaped === '\r') {
|
|
311
|
+
if (this.source[this.index] === '\n')
|
|
312
|
+
this.index++;
|
|
313
|
+
}
|
|
314
|
+
else if (escaped === 'x') {
|
|
315
|
+
value += String.fromCharCode(this.parseHexDigits(2));
|
|
316
|
+
}
|
|
317
|
+
else if (escaped === 'u') {
|
|
318
|
+
if (this.source[this.index] === '{') {
|
|
319
|
+
this.index++;
|
|
320
|
+
const hexStart = this.index;
|
|
321
|
+
while (/[0-9A-Fa-f]/.test(this.source[this.index] ?? ''))
|
|
322
|
+
this.index++;
|
|
323
|
+
const raw = this.source.slice(hexStart, this.index);
|
|
324
|
+
if (!raw || this.source[this.index] !== '}')
|
|
325
|
+
this.fail('invalid Unicode escape', hexStart);
|
|
326
|
+
this.index++;
|
|
327
|
+
value += String.fromCodePoint(Number.parseInt(raw, 16));
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
value += String.fromCharCode(this.parseHexDigits(4));
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
value += escaped;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
this.fail('unterminated string literal', start);
|
|
338
|
+
}
|
|
339
|
+
parseHexDigits(length) {
|
|
340
|
+
const start = this.index;
|
|
341
|
+
const raw = this.source.slice(start, start + length);
|
|
342
|
+
if (!new RegExp(`^[0-9A-Fa-f]{${length}}$`).test(raw)) {
|
|
343
|
+
this.fail('invalid hexadecimal escape', start);
|
|
344
|
+
}
|
|
345
|
+
this.index += length;
|
|
346
|
+
return Number.parseInt(raw, 16);
|
|
347
|
+
}
|
|
348
|
+
parseNumber() {
|
|
349
|
+
const start = this.index;
|
|
350
|
+
const raw = this.source.slice(start);
|
|
351
|
+
const match = raw.match(/^-?(?:(?:\d(?:_?\d)*)(?:\.(?:\d(?:_?\d)*)?)?|\.(?:\d(?:_?\d)*))(?:[eE][+-]?\d(?:_?\d)*)?/);
|
|
352
|
+
if (!match)
|
|
353
|
+
this.fail('invalid numeric literal', start);
|
|
354
|
+
const literal = match[0];
|
|
355
|
+
const next = this.source[start + literal.length];
|
|
356
|
+
if (next !== undefined && !/[\s,}\]]/.test(next) && next !== '/') {
|
|
357
|
+
this.fail('invalid numeric literal', start);
|
|
358
|
+
}
|
|
359
|
+
this.index += literal.length;
|
|
360
|
+
const value = Number(literal.replaceAll('_', ''));
|
|
361
|
+
if (!Number.isFinite(value))
|
|
362
|
+
this.fail('numeric literal must be finite', start);
|
|
363
|
+
return value;
|
|
364
|
+
}
|
|
365
|
+
skipTrivia() {
|
|
366
|
+
while (this.index < this.source.length) {
|
|
367
|
+
if (/\s/.test(this.source[this.index])) {
|
|
368
|
+
this.index++;
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
if (this.source.startsWith('//', this.index)) {
|
|
372
|
+
this.index += 2;
|
|
373
|
+
while (this.index < this.source.length && this.source[this.index] !== '\n')
|
|
374
|
+
this.index++;
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
if (this.source.startsWith('/*', this.index)) {
|
|
378
|
+
const commentStart = this.index;
|
|
379
|
+
const end = this.source.indexOf('*/', this.index + 2);
|
|
380
|
+
if (end === -1)
|
|
381
|
+
this.fail('unterminated block comment', commentStart);
|
|
382
|
+
this.index = end + 2;
|
|
383
|
+
continue;
|
|
384
|
+
}
|
|
385
|
+
break;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
/** Preserve the common TypeScript `value as const` static-literal form. */
|
|
389
|
+
skipConstAssertion() {
|
|
390
|
+
this.skipTrivia();
|
|
391
|
+
const assertion = /^as\s+const\b/.exec(this.source.slice(this.index));
|
|
392
|
+
if (assertion) {
|
|
393
|
+
this.index += assertion[0].length;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
fail(message, index = this.index) {
|
|
397
|
+
throw new StaticConfigParseError(this.source, index, this.context, message);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
function exportAssignmentIndex(source, exportName) {
|
|
401
|
+
const masked = maskNonCode(source);
|
|
402
|
+
const pattern = new RegExp(`\\bexport\\s+const\\s+${exportName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*=`);
|
|
403
|
+
const match = pattern.exec(masked);
|
|
404
|
+
return match ? match.index + match[0].length : null;
|
|
405
|
+
}
|
|
406
|
+
function parseStaticExport(source, exportName, context, omitIdentifierReferences = false) {
|
|
407
|
+
const index = exportAssignmentIndex(source, exportName);
|
|
408
|
+
if (index === null)
|
|
409
|
+
return { found: false };
|
|
410
|
+
const parser = new StaticLiteralParser(source, index, context, omitIdentifierReferences);
|
|
411
|
+
return { found: true, value: parser.parseValue() };
|
|
412
|
+
}
|
|
413
|
+
export function parseStaticObjectExport(source, exportName, context = exportName) {
|
|
414
|
+
const parsed = parseStaticExport(source, exportName, context);
|
|
415
|
+
if (!parsed.found)
|
|
416
|
+
return null;
|
|
417
|
+
if (!isStaticObject(parsed.value)) {
|
|
418
|
+
const index = exportAssignmentIndex(source, exportName) ?? 0;
|
|
419
|
+
throw new StaticConfigParseError(source, index, context, 'expected a plain object literal');
|
|
420
|
+
}
|
|
421
|
+
return parsed.value;
|
|
422
|
+
}
|
|
423
|
+
function validationError(source, key, message) {
|
|
424
|
+
if (source) {
|
|
425
|
+
const masked = maskNonCode(source);
|
|
426
|
+
const index = Math.max(0, masked.indexOf(key));
|
|
427
|
+
throw new StaticConfigParseError(source, index, 'route', message);
|
|
428
|
+
}
|
|
429
|
+
throw new TypeError(`[VURA_CONFIG] route config: ${message}`);
|
|
430
|
+
}
|
|
431
|
+
function isStaticObject(value) {
|
|
432
|
+
return value !== OMIT_DYNAMIC_VALUE && value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
433
|
+
}
|
|
434
|
+
function optionalString(value) {
|
|
435
|
+
return typeof value === 'string' ? value : undefined;
|
|
436
|
+
}
|
|
437
|
+
function assertCpu(value, source) {
|
|
438
|
+
if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || !Number.isInteger(value) || value <= 0)) {
|
|
439
|
+
validationError(source, 'cpu', 'route.compute.cpu must be a positive integer');
|
|
52
440
|
}
|
|
53
|
-
|
|
441
|
+
}
|
|
442
|
+
function memoryToMb(value) {
|
|
443
|
+
if (typeof value === 'number') {
|
|
444
|
+
return Number.isFinite(value) && value > 0 ? Math.floor(value) : undefined;
|
|
445
|
+
}
|
|
446
|
+
if (typeof value !== 'string')
|
|
447
|
+
return undefined;
|
|
448
|
+
const match = /^(\d+(?:\.\d+)?)\s*(gb|gib|mb|mib)$/i.exec(value.trim());
|
|
449
|
+
if (!match)
|
|
450
|
+
return undefined;
|
|
451
|
+
const amount = Number(match[1]);
|
|
452
|
+
if (!Number.isFinite(amount) || amount <= 0)
|
|
453
|
+
return undefined;
|
|
454
|
+
return Math.floor(amount * (/^g/i.test(match[2]) ? 1024 : 1));
|
|
455
|
+
}
|
|
456
|
+
function dedicatedMachineCompatibility(machine, compute) {
|
|
457
|
+
const compatible = { ...machine };
|
|
458
|
+
const memoryMb = memoryToMb(compute.memory ?? compute.memoryMb);
|
|
459
|
+
if (memoryMb !== undefined)
|
|
460
|
+
compatible.memoryMb = memoryMb;
|
|
461
|
+
const cpu = compute.cpu ?? compute.cpus;
|
|
462
|
+
if (typeof cpu === 'number' && Number.isFinite(cpu) && cpu > 0) {
|
|
463
|
+
compatible.cpus = cpu;
|
|
464
|
+
}
|
|
465
|
+
return compatible;
|
|
54
466
|
}
|
|
55
467
|
/**
|
|
56
|
-
*
|
|
57
|
-
*
|
|
468
|
+
* Normalize the source contract while retaining legacy keys in `config` for
|
|
469
|
+
* one compatibility window. `kind` remains the adapter-facing legacy route
|
|
470
|
+
* kind; `config.compute` is the canonical platform contract.
|
|
58
471
|
*/
|
|
472
|
+
export function normalizeRouteConfig(input, source) {
|
|
473
|
+
const config = { ...input };
|
|
474
|
+
if (config.kind !== undefined && typeof config.kind !== 'string') {
|
|
475
|
+
validationError(source, 'kind', "route.kind must be 'serverless', 'hot', or 'task'");
|
|
476
|
+
}
|
|
477
|
+
const sourceKind = optionalString(config.kind);
|
|
478
|
+
if (sourceKind !== undefined && !ROUTE_KINDS.has(sourceKind)) {
|
|
479
|
+
validationError(source, 'kind', "route.kind must be 'serverless', 'hot', or 'task'");
|
|
480
|
+
}
|
|
481
|
+
const kind = sourceKind ?? 'serverless';
|
|
482
|
+
if (config.compute !== undefined && !isStaticObject(config.compute)) {
|
|
483
|
+
validationError(source, 'compute', 'route.compute must be a plain object literal');
|
|
484
|
+
}
|
|
485
|
+
if (config.machine !== undefined && !isStaticObject(config.machine)) {
|
|
486
|
+
validationError(source, 'machine', 'legacy route.machine must be a plain object literal');
|
|
487
|
+
}
|
|
488
|
+
const rawCompute = isStaticObject(config.compute) ? config.compute : {};
|
|
489
|
+
const machine = isStaticObject(config.machine) ? config.machine : {};
|
|
490
|
+
const explicitClass = optionalString(rawCompute.class);
|
|
491
|
+
if (rawCompute.class !== undefined && explicitClass === undefined) {
|
|
492
|
+
validationError(source, 'class', "route.compute.class must be 'edge', 'function', or 'dedicated'");
|
|
493
|
+
}
|
|
494
|
+
if (explicitClass !== undefined && !['edge', 'function', 'dedicated'].includes(explicitClass)) {
|
|
495
|
+
validationError(source, 'class', "route.compute.class must be 'edge', 'function', or 'dedicated'");
|
|
496
|
+
}
|
|
497
|
+
const legacyDedicated = kind === 'hot' || config.hot === true ||
|
|
498
|
+
['runtime', 'placement', 'target'].some((key) => config[key] === 'hot') ||
|
|
499
|
+
Object.keys(machine).length > 0;
|
|
500
|
+
const requestedClass = (explicitClass ?? (legacyDedicated ? 'dedicated' : 'function'));
|
|
501
|
+
if (kind === 'hot' && explicitClass && explicitClass !== 'dedicated') {
|
|
502
|
+
validationError(source, 'class', "kind: 'hot' conflicts with a non-dedicated compute.class");
|
|
503
|
+
}
|
|
504
|
+
let compute;
|
|
505
|
+
if (requestedClass === 'edge') {
|
|
506
|
+
const requestedMemory = rawCompute.memory ?? '128mb';
|
|
507
|
+
if (requestedMemory !== '128mb') {
|
|
508
|
+
validationError(source, 'memory', "Edge requests have fixed memory '128mb'; Function supports 1gb/4gb/6gb/8gb/12gb");
|
|
509
|
+
}
|
|
510
|
+
if (rawCompute.cpu !== undefined) {
|
|
511
|
+
validationError(source, 'cpu', 'Edge requests cannot select CPU; request Function or Dedicated compute instead');
|
|
512
|
+
}
|
|
513
|
+
compute = {
|
|
514
|
+
...rawCompute,
|
|
515
|
+
class: 'edge',
|
|
516
|
+
memory: '128mb',
|
|
517
|
+
effectiveClass: 'function',
|
|
518
|
+
effectiveMemory: '1gb',
|
|
519
|
+
requestedClass: 'edge',
|
|
520
|
+
requestedMemory: '128mb',
|
|
521
|
+
edgeEligibility: 'pending',
|
|
522
|
+
};
|
|
523
|
+
}
|
|
524
|
+
else if (requestedClass === 'function') {
|
|
525
|
+
const memory = rawCompute.memory ?? '1gb';
|
|
526
|
+
if (typeof memory !== 'string' || !FUNCTION_MEMORY.has(memory)) {
|
|
527
|
+
validationError(source, 'memory', "Function memory must be one of '1gb', '4gb', '6gb', '8gb', or '12gb'");
|
|
528
|
+
}
|
|
529
|
+
assertCpu(rawCompute.cpu, source);
|
|
530
|
+
compute = { ...rawCompute, class: 'function', memory };
|
|
531
|
+
}
|
|
532
|
+
else {
|
|
533
|
+
assertCpu(rawCompute.cpu ?? rawCompute.cpus ?? machine.cpu ?? machine.cpus, source);
|
|
534
|
+
compute = { ...machine, ...rawCompute, class: 'dedicated' };
|
|
535
|
+
}
|
|
536
|
+
config.compute = compute;
|
|
537
|
+
if (requestedClass === 'dedicated') {
|
|
538
|
+
const compatibleMachine = dedicatedMachineCompatibility(machine, compute);
|
|
539
|
+
if (Object.keys(compatibleMachine).length > 0)
|
|
540
|
+
config.machine = compatibleMachine;
|
|
541
|
+
const hasLegacyHotMarker = config.hot === true ||
|
|
542
|
+
['runtime', 'placement', 'target'].some((key) => config[key] === 'hot');
|
|
543
|
+
if (kind === 'task' && !hasLegacyHotMarker)
|
|
544
|
+
config.hot = true;
|
|
545
|
+
}
|
|
546
|
+
const effectiveKind = kind === 'task'
|
|
547
|
+
? 'task'
|
|
548
|
+
: requestedClass === 'dedicated'
|
|
549
|
+
? 'hot'
|
|
550
|
+
: 'serverless';
|
|
551
|
+
return { kind: effectiveKind, config };
|
|
552
|
+
}
|
|
553
|
+
export function readRouteConfig(source) {
|
|
554
|
+
const route = parseStaticObjectExport(source, 'route', 'route');
|
|
555
|
+
const config = route ? { ...route } : {};
|
|
556
|
+
if (!route) {
|
|
557
|
+
const shorthand = parseStaticExport(source, 'kind', 'route kind');
|
|
558
|
+
if (shorthand.found) {
|
|
559
|
+
if (typeof shorthand.value !== 'string') {
|
|
560
|
+
validationError(source, 'kind', 'exported route kind must be a string literal');
|
|
561
|
+
}
|
|
562
|
+
config.kind = shorthand.value;
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
if (config.schedule === undefined) {
|
|
566
|
+
const schedule = parseStaticExport(source, 'schedule', 'route schedule');
|
|
567
|
+
if (schedule.found) {
|
|
568
|
+
if (typeof schedule.value !== 'string') {
|
|
569
|
+
validationError(source, 'schedule', 'exported task schedule must be a string literal');
|
|
570
|
+
}
|
|
571
|
+
config.schedule = schedule.value;
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
return normalizeRouteConfig(config, source);
|
|
575
|
+
}
|
|
576
|
+
export function readPageConfig(source) {
|
|
577
|
+
// Page modules may reference presentation values such as `styles:
|
|
578
|
+
// [baseStyles]`. Those values are evaluated only when the renderer imports
|
|
579
|
+
// the page; the manifest scanner omits them while keeping deployment-relevant
|
|
580
|
+
// literals (mode, revalidate, tags, title) static and deterministic.
|
|
581
|
+
const parsed = parseStaticExport(source, 'page', 'page');
|
|
582
|
+
if (!parsed.found)
|
|
583
|
+
return {};
|
|
584
|
+
if (!isStaticObject(parsed.value)) {
|
|
585
|
+
const index = exportAssignmentIndex(source, 'page') ?? 0;
|
|
586
|
+
throw new StaticConfigParseError(source, index, 'page', 'expected a plain object literal');
|
|
587
|
+
}
|
|
588
|
+
return parsed.value;
|
|
589
|
+
}
|
|
590
|
+
export function scanRoute(source, _fileType) {
|
|
591
|
+
const code = maskNonCode(source);
|
|
592
|
+
const methods = [];
|
|
593
|
+
for (const method of HTTP_METHODS) {
|
|
594
|
+
const pattern = new RegExp(`export\\s+(?:async\\s+)?(?:function\\s+${method}|const\\s+${method}\\s*=)`);
|
|
595
|
+
if (pattern.test(code))
|
|
596
|
+
methods.push(method);
|
|
597
|
+
}
|
|
598
|
+
const hasWebsocket = /export\s+(?:async\s+)?(?:function\s+websocket\b|const\s+websocket\s*=)/.test(code);
|
|
599
|
+
const hasRouteConfig = exportAssignmentIndex(source, 'route') !== null || exportAssignmentIndex(source, 'kind') !== null;
|
|
600
|
+
const route = methods.length > 0 || hasWebsocket || hasRouteConfig
|
|
601
|
+
? readRouteConfig(source)
|
|
602
|
+
: { kind: 'serverless', config: {} };
|
|
603
|
+
const pageConfig = readPageConfig(source);
|
|
604
|
+
const config = { ...route.config, ...pageConfig };
|
|
605
|
+
let pageMode = optionalString(pageConfig.mode) ?? null;
|
|
606
|
+
const hasDefaultExport = /export\s+default\s+/.test(code);
|
|
607
|
+
const hasGetServerData = /export\s+(?:async\s+)?function\s+getServerData|export\s+(?:const|let)\s+getServerData/.test(code);
|
|
608
|
+
if (!pageMode && hasGetServerData)
|
|
609
|
+
pageMode = 'server';
|
|
610
|
+
if (!pageMode && (/import\s+.*from\s+['"]then\/server['"]/.test(source) || /useSWR|useQuery|useServerData/.test(code))) {
|
|
611
|
+
pageMode = 'server';
|
|
612
|
+
}
|
|
613
|
+
return {
|
|
614
|
+
methods,
|
|
615
|
+
kind: route.kind,
|
|
616
|
+
hasDefaultExport,
|
|
617
|
+
hasGetServerData,
|
|
618
|
+
pageMode,
|
|
619
|
+
config,
|
|
620
|
+
};
|
|
621
|
+
}
|
|
59
622
|
export function transformJsx(source, options = {}) {
|
|
60
623
|
const importSource = options.jsxImportSource ?? 'what-framework';
|
|
61
624
|
const importLine = options.production
|
|
@@ -66,14 +629,4 @@ export function transformJsx(source, options = {}) {
|
|
|
66
629
|
map: null,
|
|
67
630
|
};
|
|
68
631
|
}
|
|
69
|
-
// ─── Helpers ───
|
|
70
|
-
function extractKVPairs(body, config) {
|
|
71
|
-
const kvPattern = /(\w+)\s*:\s*(?:'([^']*)'|"([^"]*)"|(\d+(?:\.\d+)?)|(\btrue\b|\bfalse\b))/g;
|
|
72
|
-
let match;
|
|
73
|
-
while ((match = kvPattern.exec(body)) !== null) {
|
|
74
|
-
const key = match[1];
|
|
75
|
-
const value = match[2] ?? match[3] ?? (match[4] ? Number(match[4]) : match[5] === 'true');
|
|
76
|
-
config[key] = value;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
632
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|