@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 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: options.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
- maxBuffer: 10485760
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) return {
16882
- ok: false,
16883
- message: "Python semantic validation could not be run",
16884
- issues: [
16885
- {
16886
- path: "root",
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
- validatePath: ()=>validatePath,
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
- writeEnvironmentPid: ()=>writeEnvironmentPid,
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;AAuG9C,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,CAyFhC"}
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.13",
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.2",
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",