@anvil-works/anvil-cli 0.8.0-canary.13 → 0.8.0-canary.14
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/cli.js +57 -24
- package/dist/index.js +4 -4
- package/dist/validatePython.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/cli.js
CHANGED
|
@@ -16585,6 +16585,45 @@ Promise.resolve(executeGitCredentialOperation(process.argv[2] || "get", {
|
|
|
16585
16585
|
};
|
|
16586
16586
|
}
|
|
16587
16587
|
const validatePython_requireFromHere = (0, external_module_namespaceObject.createRequire)(__filename);
|
|
16588
|
+
const DEFAULT_PYRIGHT_MAX_OLD_SPACE_MB = 768;
|
|
16589
|
+
const DEFAULT_PYRIGHT_TIMEOUT_MS = 300000;
|
|
16590
|
+
function parsePositiveIntegerEnv(env, name, defaultValue) {
|
|
16591
|
+
const rawValue = env[name];
|
|
16592
|
+
if (void 0 === rawValue || "" === rawValue) return {
|
|
16593
|
+
value: defaultValue
|
|
16594
|
+
};
|
|
16595
|
+
if (!/^\d+$/.test(rawValue) || Number(rawValue) <= 0 || !Number.isSafeInteger(Number(rawValue))) return {
|
|
16596
|
+
error: `${name} must be a positive integer`
|
|
16597
|
+
};
|
|
16598
|
+
return {
|
|
16599
|
+
value: Number(rawValue)
|
|
16600
|
+
};
|
|
16601
|
+
}
|
|
16602
|
+
function pyrightChildNodeOptions(nodeOptions, maxOldSpaceMb) {
|
|
16603
|
+
const maxOldSpaceFlag = "--max[-_]old[-_]space[-_]size";
|
|
16604
|
+
const withoutEqualsForm = (nodeOptions ?? "").replace(new RegExp(`(^|\\s)${maxOldSpaceFlag}=\\S+`, "g"), "$1");
|
|
16605
|
+
const withoutSeparateForm = withoutEqualsForm.replace(new RegExp(`(^|\\s)${maxOldSpaceFlag}\\s+\\S+`, "g"), "$1");
|
|
16606
|
+
return [
|
|
16607
|
+
withoutSeparateForm.trim(),
|
|
16608
|
+
`--max-old-space-size=${maxOldSpaceMb}`
|
|
16609
|
+
].filter(Boolean).join(" ");
|
|
16610
|
+
}
|
|
16611
|
+
function semanticProcessFailure(message) {
|
|
16612
|
+
return {
|
|
16613
|
+
ok: false,
|
|
16614
|
+
message: "Python semantic validation could not be run",
|
|
16615
|
+
issues: [
|
|
16616
|
+
{
|
|
16617
|
+
path: "root",
|
|
16618
|
+
message,
|
|
16619
|
+
severity: "error"
|
|
16620
|
+
}
|
|
16621
|
+
]
|
|
16622
|
+
};
|
|
16623
|
+
}
|
|
16624
|
+
function isV8HeapOutOfMemory(stderr) {
|
|
16625
|
+
return /(?:JavaScript heap out of memory|Reached heap limit|Ineffective mark-compacts near heap limit)/i.test(stderr);
|
|
16626
|
+
}
|
|
16588
16627
|
function resolveBundledAnvilPyright() {
|
|
16589
16628
|
try {
|
|
16590
16629
|
return {
|
|
@@ -16852,8 +16891,13 @@ print(json.dumps({"issues": issues}))
|
|
|
16852
16891
|
};
|
|
16853
16892
|
}
|
|
16854
16893
|
function validatePythonWithPyright(appRoot, options = {}) {
|
|
16894
|
+
const env = options.env ?? process.env;
|
|
16895
|
+
const maxOldSpace = parsePositiveIntegerEnv(env, "ANVIL_PYRIGHT_MAX_OLD_SPACE_MB", DEFAULT_PYRIGHT_MAX_OLD_SPACE_MB);
|
|
16896
|
+
if ("error" in maxOldSpace) return semanticProcessFailure(maxOldSpace.error);
|
|
16897
|
+
const timeout = parsePositiveIntegerEnv(env, "ANVIL_PYRIGHT_TIMEOUT_MS", DEFAULT_PYRIGHT_TIMEOUT_MS);
|
|
16898
|
+
if ("error" in timeout) return semanticProcessFailure(timeout.error);
|
|
16855
16899
|
const pyright = void 0 === options.pyright ? findAnvilPyright({
|
|
16856
|
-
env
|
|
16900
|
+
env
|
|
16857
16901
|
}) : options.pyright;
|
|
16858
16902
|
if (!pyright) return {
|
|
16859
16903
|
ok: false,
|
|
@@ -16876,30 +16920,19 @@ print(json.dumps({"issues": issues}))
|
|
|
16876
16920
|
...options.files ?? []
|
|
16877
16921
|
], {
|
|
16878
16922
|
encoding: "utf8",
|
|
16879
|
-
|
|
16923
|
+
env: {
|
|
16924
|
+
...env,
|
|
16925
|
+
NODE_OPTIONS: pyrightChildNodeOptions(env.NODE_OPTIONS, maxOldSpace.value)
|
|
16926
|
+
},
|
|
16927
|
+
maxBuffer: 10485760,
|
|
16928
|
+
timeout: timeout.value
|
|
16880
16929
|
});
|
|
16881
|
-
if (result.error)
|
|
16882
|
-
|
|
16883
|
-
message
|
|
16884
|
-
|
|
16885
|
-
|
|
16886
|
-
|
|
16887
|
-
message: result.error.message,
|
|
16888
|
-
severity: "error"
|
|
16889
|
-
}
|
|
16890
|
-
]
|
|
16891
|
-
};
|
|
16892
|
-
if (0 !== result.status && 1 !== result.status) return {
|
|
16893
|
-
ok: false,
|
|
16894
|
-
message: "Python semantic validation could not be run",
|
|
16895
|
-
issues: [
|
|
16896
|
-
{
|
|
16897
|
-
path: "root",
|
|
16898
|
-
message: result.stderr.trim() || `anvil-pyright exited with status ${result.status}`,
|
|
16899
|
-
severity: "error"
|
|
16900
|
-
}
|
|
16901
|
-
]
|
|
16902
|
-
};
|
|
16930
|
+
if (result.error) {
|
|
16931
|
+
if ("ETIMEDOUT" === result.error.code) return semanticProcessFailure(`anvil-pyright exceeded the ${timeout.value} ms timeout. Increase ANVIL_PYRIGHT_TIMEOUT_MS or validate a smaller target.`);
|
|
16932
|
+
return semanticProcessFailure(result.error.message);
|
|
16933
|
+
}
|
|
16934
|
+
if (isV8HeapOutOfMemory(result.stderr)) return semanticProcessFailure(`anvil-pyright ran out of memory with a ${maxOldSpace.value} MB heap. Increase ANVIL_PYRIGHT_MAX_OLD_SPACE_MB or validate a smaller target.`);
|
|
16935
|
+
if (0 !== result.status && 1 !== result.status) return semanticProcessFailure(result.stderr.trim() || `anvil-pyright exited with status ${result.status}`);
|
|
16903
16936
|
let parsed;
|
|
16904
16937
|
try {
|
|
16905
16938
|
parsed = JSON.parse(result.stdout.trim());
|
package/dist/index.js
CHANGED
|
@@ -7391,16 +7391,14 @@ var __webpack_exports__ = {};
|
|
|
7391
7391
|
buildGitAuthDoctorReport: ()=>buildGitAuthDoctorReport,
|
|
7392
7392
|
parseCheckoutInput: ()=>parseCheckoutInput,
|
|
7393
7393
|
formatGitAuthDoctorReport: ()=>formatGitAuthDoctorReport,
|
|
7394
|
-
validateAnvilApp: ()=>validation_validateAnvilApp,
|
|
7395
7394
|
resetConfig: ()=>resetConfig,
|
|
7396
7395
|
MODEL_TOKEN_HELPER_FILENAME: ()=>MODEL_TOKEN_HELPER_FILENAME,
|
|
7397
|
-
verifyAndStoreTokens: ()=>auth_verifyAndStoreTokens,
|
|
7398
7396
|
FormTemplateValidationResult: ()=>validators_namespaceObject.FormTemplateValidationResult,
|
|
7399
7397
|
createWatchDiagnostic: ()=>createWatchDiagnostic,
|
|
7400
7398
|
ValidationTarget: ()=>validators_namespaceObject.ValidationTarget,
|
|
7401
7399
|
detectAppIdsByCommitLookup: ()=>anvil_api_detectAppIdsByCommitLookup,
|
|
7402
7400
|
sanitizeDirectoryName: ()=>sanitizeDirectoryName,
|
|
7403
|
-
|
|
7401
|
+
validateAnvilApp: ()=>validation_validateAnvilApp,
|
|
7404
7402
|
LoginResult: ()=>auth_namespaceObject.LoginResult,
|
|
7405
7403
|
listAppsForCheckout: ()=>listAppsForCheckout,
|
|
7406
7404
|
getInstalledPreferredEditors: ()=>getInstalledPreferredEditors,
|
|
@@ -7409,6 +7407,7 @@ var __webpack_exports__ = {};
|
|
|
7409
7407
|
CheckoutExecutionDeps: ()=>checkout_namespaceObject.CheckoutExecutionDeps,
|
|
7410
7408
|
validateFormTemplateHtml: ()=>validateFormTemplateHtml,
|
|
7411
7409
|
ValidateBranchSyncStatusOptions: ()=>validation_namespaceObject.ValidateBranchSyncStatusOptions,
|
|
7410
|
+
validatePath: ()=>validatePath,
|
|
7412
7411
|
withRepoAuthFileLock: ()=>withRepoAuthFileLock,
|
|
7413
7412
|
BranchSyncStatus: ()=>validation_namespaceObject.BranchSyncStatus,
|
|
7414
7413
|
getLatestVersion: ()=>getLatestVersion,
|
|
@@ -7421,7 +7420,7 @@ var __webpack_exports__ = {};
|
|
|
7421
7420
|
isPathInsideGitRepo: ()=>isPathInsideGitRepo,
|
|
7422
7421
|
normalizeAnvilUrl: ()=>config_normalizeAnvilUrl,
|
|
7423
7422
|
ValidationIssue: ()=>validators_namespaceObject.ValidationIssue,
|
|
7424
|
-
|
|
7423
|
+
verifyAndStoreTokens: ()=>auth_verifyAndStoreTokens,
|
|
7425
7424
|
readEnvironmentPid: ()=>environment_readEnvironmentPid,
|
|
7426
7425
|
validateFormTemplate: ()=>validateFormTemplate,
|
|
7427
7426
|
preferredEditors: ()=>preferredEditors,
|
|
@@ -7433,6 +7432,7 @@ var __webpack_exports__ = {};
|
|
|
7433
7432
|
validateBranchSyncStatus: ()=>validation_validateBranchSyncStatus,
|
|
7434
7433
|
checkUncommittedChanges: ()=>api_checkUncommittedChanges,
|
|
7435
7434
|
hasTokensForUrl: ()=>auth_hasTokensForUrl,
|
|
7435
|
+
writeEnvironmentPid: ()=>writeEnvironmentPid,
|
|
7436
7436
|
AnvilYamlValidationResult: ()=>validators_namespaceObject.AnvilYamlValidationResult,
|
|
7437
7437
|
ValidatePathResult: ()=>validators_namespaceObject.ValidatePathResult,
|
|
7438
7438
|
getSettableConfigKeys: ()=>getSettableConfigKeys,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePython.d.ts","sourceRoot":"","sources":["../src/validatePython.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,MAAM,sBAAsB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GAC1C;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAER,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,eAAe,GAAG;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,6BAA6B,EAAE,CAAA;CAAE,GACpE;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,6BAA6B,EAAE,CAAC;IACxC,QAAQ,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAC9C,CAAC;AAER,KAAK,YAAY,GAAG,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,KACpC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"validatePython.d.ts","sourceRoot":"","sources":["../src/validatePython.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,MAAM,sBAAsB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAA;CAAE,GAC1C;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAChC,CAAC;AAER,MAAM,MAAM,iBAAiB,GAAG;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,eAAe,GAAG;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,8BAA8B,GACpC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,6BAA6B,EAAE,CAAA;CAAE,GACpE;IACI,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,6BAA6B,EAAE,CAAC;IACxC,QAAQ,CAAC,EAAE,6BAA6B,EAAE,CAAC;CAC9C,CAAC;AAER,KAAK,YAAY,GAAG,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,EAAE;IAAE,QAAQ,EAAE,cAAc,CAAA;CAAE,KACpC;IAAE,KAAK,CAAC,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AA+I9C,wBAAgB,qBAAqB,CACjC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,KAAK,GAAE,YAAwB,GAChC,iBAAiB,GAAG,IAAI,CAkB1B;AAED,KAAK,uBAAuB,GAAG;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,YAAY,CAAC;CACxB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,iBAAiB,GAAG,IAAI,CAoBhG;AAiCD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,sBAAsB,CAsEpH;AA2CD,MAAM,MAAM,gCAAgC,GAAG;IAC3C,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,wBAAgB,yBAAyB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gCAAqC,GAC/C,8BAA8B,CAmGhC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anvil-works/anvil-cli",
|
|
3
|
-
"version": "0.8.0-canary.
|
|
3
|
+
"version": "0.8.0-canary.14",
|
|
4
4
|
"description": "CLI tool for developing Anvil apps locally",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/api.d.ts",
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"typescript": "^5.9.3"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
|
-
"@anvil-works/anvil-pyright": "0.0.4-canary.
|
|
67
|
+
"@anvil-works/anvil-pyright": "0.0.4-canary.3",
|
|
68
68
|
"@anvil-works/form-template-parser": "0.0.5",
|
|
69
69
|
"@napi-rs/keyring": "^1.2.0",
|
|
70
70
|
"@types/inquirer": "^9.0.9",
|