@vercel/python-analysis 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +16 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +14 -0
- package/dist/semantic/entrypoints.d.ts +20 -0
- package/dist/wasm/vercel_python_analysis.core.wasm +0 -0
- package/dist/wasm/vercel_python_analysis.d.ts +2 -0
- package/dist/wasm/vercel_python_analysis.js +107 -9
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -66,8 +66,10 @@ __export(src_exports, {
|
|
|
66
66
|
containsAppOrHandler: () => containsAppOrHandler,
|
|
67
67
|
createMinimalManifest: () => createMinimalManifest,
|
|
68
68
|
discoverPythonPackage: () => discoverPythonPackage,
|
|
69
|
+
getStringConstant: () => getStringConstant,
|
|
69
70
|
isPrivatePackageSource: () => isPrivatePackageSource,
|
|
70
71
|
normalizePackageName: () => normalizePackageName,
|
|
72
|
+
parseDjangoSettingsModule: () => parseDjangoSettingsModule,
|
|
71
73
|
parseUvLock: () => parseUvLock,
|
|
72
74
|
scanDistributions: () => scanDistributions,
|
|
73
75
|
selectPython: () => selectPython,
|
|
@@ -123,6 +125,18 @@ async function containsAppOrHandler(source) {
|
|
|
123
125
|
const mod = await importWasmModule();
|
|
124
126
|
return mod.containsAppOrHandler(source);
|
|
125
127
|
}
|
|
128
|
+
async function getStringConstant(source, name) {
|
|
129
|
+
const mod = await importWasmModule();
|
|
130
|
+
return mod.getStringConstant(source, name) ?? null;
|
|
131
|
+
}
|
|
132
|
+
var DJANGO_SETTINGS_MODULE_PATTERN_RE = /DJANGO_SETTINGS_MODULE/;
|
|
133
|
+
async function parseDjangoSettingsModule(content) {
|
|
134
|
+
if (!DJANGO_SETTINGS_MODULE_PATTERN_RE.test(content)) {
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
const mod = await importWasmModule();
|
|
138
|
+
return mod.parseDjangoSettingsModule(content) ?? null;
|
|
139
|
+
}
|
|
126
140
|
|
|
127
141
|
// src/manifest/dist-metadata.ts
|
|
128
142
|
var import_promises2 = require("fs/promises");
|
|
@@ -2476,8 +2490,10 @@ var HashDigestSchema = hashDigestSchema;
|
|
|
2476
2490
|
containsAppOrHandler,
|
|
2477
2491
|
createMinimalManifest,
|
|
2478
2492
|
discoverPythonPackage,
|
|
2493
|
+
getStringConstant,
|
|
2479
2494
|
isPrivatePackageSource,
|
|
2480
2495
|
normalizePackageName,
|
|
2496
|
+
parseDjangoSettingsModule,
|
|
2481
2497
|
parseUvLock,
|
|
2482
2498
|
scanDistributions,
|
|
2483
2499
|
selectPython,
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @module @vercel/python-analysis
|
|
8
8
|
*/
|
|
9
|
-
export { containsAppOrHandler } from './semantic/entrypoints';
|
|
9
|
+
export { containsAppOrHandler, getStringConstant, parseDjangoSettingsModule, } from './semantic/entrypoints';
|
|
10
10
|
export type { Distribution, DistributionIndex, PackagePath, DirectUrlInfo, } from './manifest/dist-metadata';
|
|
11
11
|
export { scanDistributions } from './manifest/dist-metadata';
|
|
12
12
|
export type { PythonConfig, PythonConfigs, PythonLockFile, PythonManifest, PythonManifestOrigin, PythonPackage, PythonVersionConfig, } from './manifest/package';
|
package/dist/index.js
CHANGED
|
@@ -46,6 +46,18 @@ async function containsAppOrHandler(source) {
|
|
|
46
46
|
const mod = await importWasmModule();
|
|
47
47
|
return mod.containsAppOrHandler(source);
|
|
48
48
|
}
|
|
49
|
+
async function getStringConstant(source, name) {
|
|
50
|
+
const mod = await importWasmModule();
|
|
51
|
+
return mod.getStringConstant(source, name) ?? null;
|
|
52
|
+
}
|
|
53
|
+
var DJANGO_SETTINGS_MODULE_PATTERN_RE = /DJANGO_SETTINGS_MODULE/;
|
|
54
|
+
async function parseDjangoSettingsModule(content) {
|
|
55
|
+
if (!DJANGO_SETTINGS_MODULE_PATTERN_RE.test(content)) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const mod = await importWasmModule();
|
|
59
|
+
return mod.parseDjangoSettingsModule(content) ?? null;
|
|
60
|
+
}
|
|
49
61
|
|
|
50
62
|
// src/manifest/dist-metadata.ts
|
|
51
63
|
import { readdir, readFile as readFile2 } from "fs/promises";
|
|
@@ -2401,8 +2413,10 @@ export {
|
|
|
2401
2413
|
containsAppOrHandler,
|
|
2402
2414
|
createMinimalManifest,
|
|
2403
2415
|
discoverPythonPackage,
|
|
2416
|
+
getStringConstant,
|
|
2404
2417
|
isPrivatePackageSource,
|
|
2405
2418
|
normalizePackageName,
|
|
2419
|
+
parseDjangoSettingsModule,
|
|
2406
2420
|
parseUvLock,
|
|
2407
2421
|
scanDistributions,
|
|
2408
2422
|
selectPython,
|
|
@@ -27,3 +27,23 @@
|
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
29
|
export declare function containsAppOrHandler(source: string): Promise<boolean>;
|
|
30
|
+
/**
|
|
31
|
+
* Extract the string value of a top-level constant with the given name.
|
|
32
|
+
* Only considers simple assignments (NAME = "string") and annotated assignments
|
|
33
|
+
* (NAME: str = "string") at module level. Returns the first matching string
|
|
34
|
+
* value, or null if not found or the value is not a string literal.
|
|
35
|
+
*
|
|
36
|
+
* @param source - Python source code
|
|
37
|
+
* @param name - Constant name (e.g. "VERSION", "APP_NAME")
|
|
38
|
+
* @returns The string value or null
|
|
39
|
+
*/
|
|
40
|
+
export declare function getStringConstant(source: string, name: string): Promise<string | null>;
|
|
41
|
+
/**
|
|
42
|
+
* Parse manage.py content for DJANGO_SETTINGS_MODULE (e.g. from
|
|
43
|
+
* os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.settings')).
|
|
44
|
+
* Uses the WASM Python parser to extract the value from the AST.
|
|
45
|
+
*
|
|
46
|
+
* @param content - Raw content of manage.py
|
|
47
|
+
* @returns The settings module string (e.g. 'app.settings') or null if not found
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseDjangoSettingsModule(content: string): Promise<string | null>;
|
|
Binary file
|
|
@@ -69,6 +69,8 @@ export interface ImportObject {
|
|
|
69
69
|
}
|
|
70
70
|
export interface Root {
|
|
71
71
|
containsAppOrHandler(source: string): boolean,
|
|
72
|
+
getStringConstant(source: string, name: string): string | undefined,
|
|
73
|
+
parseDjangoSettingsModule(source: string): string | undefined,
|
|
72
74
|
parseDistMetadata(content: Uint8Array): DistMetadata,
|
|
73
75
|
parseRecord(content: string): Array<RecordEntry>,
|
|
74
76
|
parseDirectUrl(content: string): DirectUrlInfo,
|
|
@@ -1036,6 +1036,7 @@ let gen = (function* _initGenerator () {
|
|
|
1036
1036
|
let postReturn1;
|
|
1037
1037
|
let postReturn2;
|
|
1038
1038
|
let postReturn3;
|
|
1039
|
+
let postReturn4;
|
|
1039
1040
|
function trampoline0(handle) {
|
|
1040
1041
|
const handleEntry = rscTableRemove(handleTable1, handle);
|
|
1041
1042
|
if (handleEntry.own) {
|
|
@@ -1125,10 +1126,11 @@ let gen = (function* _initGenerator () {
|
|
|
1125
1126
|
'7': trampoline5,
|
|
1126
1127
|
},
|
|
1127
1128
|
}));
|
|
1128
|
-
postReturn0 = exports1['
|
|
1129
|
-
postReturn1 = exports1['cabi_post_parse-
|
|
1130
|
-
postReturn2 = exports1['cabi_post_parse-
|
|
1131
|
-
postReturn3 = exports1['
|
|
1129
|
+
postReturn0 = exports1['cabi_post_get-string-constant'];
|
|
1130
|
+
postReturn1 = exports1['cabi_post_parse-dist-metadata'];
|
|
1131
|
+
postReturn2 = exports1['cabi_post_parse-record'];
|
|
1132
|
+
postReturn3 = exports1['cabi_post_parse-direct-url'];
|
|
1133
|
+
postReturn4 = exports1['cabi_post_normalize-package-name'];
|
|
1132
1134
|
let exports1ContainsAppOrHandler;
|
|
1133
1135
|
|
|
1134
1136
|
function containsAppOrHandler(arg0) {
|
|
@@ -1152,6 +1154,100 @@ let gen = (function* _initGenerator () {
|
|
|
1152
1154
|
});
|
|
1153
1155
|
return bool1 == 0 ? false : (bool1 == 1 ? true : throwInvalidBool());
|
|
1154
1156
|
}
|
|
1157
|
+
let exports1GetStringConstant;
|
|
1158
|
+
|
|
1159
|
+
function getStringConstant(arg0, arg1) {
|
|
1160
|
+
var ptr0 = utf8Encode(arg0, realloc0, memory0);
|
|
1161
|
+
var len0 = utf8EncodedLen;
|
|
1162
|
+
var ptr1 = utf8Encode(arg1, realloc0, memory0);
|
|
1163
|
+
var len1 = utf8EncodedLen;
|
|
1164
|
+
_debugLog('[iface="get-string-constant", function="get-string-constant"][Instruction::CallWasm] enter', {
|
|
1165
|
+
funcName: 'get-string-constant',
|
|
1166
|
+
paramCount: 4,
|
|
1167
|
+
async: false,
|
|
1168
|
+
postReturn: true,
|
|
1169
|
+
});
|
|
1170
|
+
const _wasm_call_currentTaskID = startCurrentTask(0, false, 'exports1GetStringConstant');
|
|
1171
|
+
const ret = exports1GetStringConstant(ptr0, len0, ptr1, len1);
|
|
1172
|
+
endCurrentTask(0);
|
|
1173
|
+
let variant3;
|
|
1174
|
+
switch (dataView(memory0).getUint8(ret + 0, true)) {
|
|
1175
|
+
case 0: {
|
|
1176
|
+
variant3 = undefined;
|
|
1177
|
+
break;
|
|
1178
|
+
}
|
|
1179
|
+
case 1: {
|
|
1180
|
+
var ptr2 = dataView(memory0).getUint32(ret + 4, true);
|
|
1181
|
+
var len2 = dataView(memory0).getUint32(ret + 8, true);
|
|
1182
|
+
var result2 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr2, len2));
|
|
1183
|
+
variant3 = result2;
|
|
1184
|
+
break;
|
|
1185
|
+
}
|
|
1186
|
+
default: {
|
|
1187
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
1188
|
+
}
|
|
1189
|
+
}
|
|
1190
|
+
_debugLog('[iface="get-string-constant", function="get-string-constant"][Instruction::Return]', {
|
|
1191
|
+
funcName: 'get-string-constant',
|
|
1192
|
+
paramCount: 1,
|
|
1193
|
+
async: false,
|
|
1194
|
+
postReturn: true
|
|
1195
|
+
});
|
|
1196
|
+
const retCopy = variant3;
|
|
1197
|
+
|
|
1198
|
+
let cstate = getOrCreateAsyncState(0);
|
|
1199
|
+
cstate.mayLeave = false;
|
|
1200
|
+
postReturn0(ret);
|
|
1201
|
+
cstate.mayLeave = true;
|
|
1202
|
+
return retCopy;
|
|
1203
|
+
|
|
1204
|
+
}
|
|
1205
|
+
let exports1ParseDjangoSettingsModule;
|
|
1206
|
+
|
|
1207
|
+
function parseDjangoSettingsModule(arg0) {
|
|
1208
|
+
var ptr0 = utf8Encode(arg0, realloc0, memory0);
|
|
1209
|
+
var len0 = utf8EncodedLen;
|
|
1210
|
+
_debugLog('[iface="parse-django-settings-module", function="parse-django-settings-module"][Instruction::CallWasm] enter', {
|
|
1211
|
+
funcName: 'parse-django-settings-module',
|
|
1212
|
+
paramCount: 2,
|
|
1213
|
+
async: false,
|
|
1214
|
+
postReturn: true,
|
|
1215
|
+
});
|
|
1216
|
+
const _wasm_call_currentTaskID = startCurrentTask(0, false, 'exports1ParseDjangoSettingsModule');
|
|
1217
|
+
const ret = exports1ParseDjangoSettingsModule(ptr0, len0);
|
|
1218
|
+
endCurrentTask(0);
|
|
1219
|
+
let variant2;
|
|
1220
|
+
switch (dataView(memory0).getUint8(ret + 0, true)) {
|
|
1221
|
+
case 0: {
|
|
1222
|
+
variant2 = undefined;
|
|
1223
|
+
break;
|
|
1224
|
+
}
|
|
1225
|
+
case 1: {
|
|
1226
|
+
var ptr1 = dataView(memory0).getUint32(ret + 4, true);
|
|
1227
|
+
var len1 = dataView(memory0).getUint32(ret + 8, true);
|
|
1228
|
+
var result1 = utf8Decoder.decode(new Uint8Array(memory0.buffer, ptr1, len1));
|
|
1229
|
+
variant2 = result1;
|
|
1230
|
+
break;
|
|
1231
|
+
}
|
|
1232
|
+
default: {
|
|
1233
|
+
throw new TypeError('invalid variant discriminant for option');
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
_debugLog('[iface="parse-django-settings-module", function="parse-django-settings-module"][Instruction::Return]', {
|
|
1237
|
+
funcName: 'parse-django-settings-module',
|
|
1238
|
+
paramCount: 1,
|
|
1239
|
+
async: false,
|
|
1240
|
+
postReturn: true
|
|
1241
|
+
});
|
|
1242
|
+
const retCopy = variant2;
|
|
1243
|
+
|
|
1244
|
+
let cstate = getOrCreateAsyncState(0);
|
|
1245
|
+
cstate.mayLeave = false;
|
|
1246
|
+
postReturn0(ret);
|
|
1247
|
+
cstate.mayLeave = true;
|
|
1248
|
+
return retCopy;
|
|
1249
|
+
|
|
1250
|
+
}
|
|
1155
1251
|
let exports1ParseDistMetadata;
|
|
1156
1252
|
|
|
1157
1253
|
function parseDistMetadata(arg0) {
|
|
@@ -1482,7 +1578,7 @@ let gen = (function* _initGenerator () {
|
|
|
1482
1578
|
|
|
1483
1579
|
let cstate = getOrCreateAsyncState(0);
|
|
1484
1580
|
cstate.mayLeave = false;
|
|
1485
|
-
|
|
1581
|
+
postReturn1(ret);
|
|
1486
1582
|
cstate.mayLeave = true;
|
|
1487
1583
|
|
|
1488
1584
|
|
|
@@ -1585,7 +1681,7 @@ let gen = (function* _initGenerator () {
|
|
|
1585
1681
|
|
|
1586
1682
|
let cstate = getOrCreateAsyncState(0);
|
|
1587
1683
|
cstate.mayLeave = false;
|
|
1588
|
-
|
|
1684
|
+
postReturn2(ret);
|
|
1589
1685
|
cstate.mayLeave = true;
|
|
1590
1686
|
|
|
1591
1687
|
|
|
@@ -1745,7 +1841,7 @@ let gen = (function* _initGenerator () {
|
|
|
1745
1841
|
|
|
1746
1842
|
let cstate = getOrCreateAsyncState(0);
|
|
1747
1843
|
cstate.mayLeave = false;
|
|
1748
|
-
|
|
1844
|
+
postReturn3(ret);
|
|
1749
1845
|
cstate.mayLeave = true;
|
|
1750
1846
|
|
|
1751
1847
|
|
|
@@ -1783,18 +1879,20 @@ let gen = (function* _initGenerator () {
|
|
|
1783
1879
|
|
|
1784
1880
|
let cstate = getOrCreateAsyncState(0);
|
|
1785
1881
|
cstate.mayLeave = false;
|
|
1786
|
-
|
|
1882
|
+
postReturn4(ret);
|
|
1787
1883
|
cstate.mayLeave = true;
|
|
1788
1884
|
return retCopy;
|
|
1789
1885
|
|
|
1790
1886
|
}
|
|
1791
1887
|
exports1ContainsAppOrHandler = exports1['contains-app-or-handler'];
|
|
1888
|
+
exports1GetStringConstant = exports1['get-string-constant'];
|
|
1889
|
+
exports1ParseDjangoSettingsModule = exports1['parse-django-settings-module'];
|
|
1792
1890
|
exports1ParseDistMetadata = exports1['parse-dist-metadata'];
|
|
1793
1891
|
exports1ParseRecord = exports1['parse-record'];
|
|
1794
1892
|
exports1ParseDirectUrl = exports1['parse-direct-url'];
|
|
1795
1893
|
exports1NormalizePackageName = exports1['normalize-package-name'];
|
|
1796
1894
|
|
|
1797
|
-
return { containsAppOrHandler, normalizePackageName, parseDirectUrl, parseDistMetadata, parseRecord, };
|
|
1895
|
+
return { containsAppOrHandler, getStringConstant, normalizePackageName, parseDirectUrl, parseDistMetadata, parseDjangoSettingsModule, parseRecord, };
|
|
1798
1896
|
})();
|
|
1799
1897
|
let promise, resolve, reject;
|
|
1800
1898
|
function runNext (value) {
|