@actual-app/cli 26.8.0-nightly.20260721 → 26.8.0-nightly.20260723

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.
Files changed (3) hide show
  1. package/dist/cli.js +68 -39
  2. package/dist/stats.json +1250 -1250
  3. package/package.json +5 -5
package/dist/cli.js CHANGED
@@ -33,7 +33,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
33
33
  value: mod,
34
34
  enumerable: true
35
35
  }) : target, mod));
36
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
36
+ var __require = /* #__PURE__ */ (() => createRequire(import.meta.url))();
37
37
  //#endregion
38
38
  //#region ../../node_modules/commander/lib/error.js
39
39
  /**
@@ -1560,10 +1560,12 @@ Expecting one of '${allowedValues.join("', '")}'`);
1560
1560
  this.setOptionValueWithSource(name, val, valueSource);
1561
1561
  };
1562
1562
  this.on("option:" + oname, (val) => {
1563
- handleOptionValue(val, `error: option '${option.flags}' argument '${val}' is invalid.`, "cli");
1563
+ const invalidValueMessage = `error: option '${option.flags}' argument '${val}' is invalid.`;
1564
+ handleOptionValue(val, invalidValueMessage, "cli");
1564
1565
  });
1565
1566
  if (option.envVar) this.on("optionEnv:" + oname, (val) => {
1566
- handleOptionValue(val, `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`, "env");
1567
+ const invalidValueMessage = `error: option '${option.flags}' value '${val}' from env '${option.envVar}' is invalid.`;
1568
+ handleOptionValue(val, invalidValueMessage, "env");
1567
1569
  });
1568
1570
  return this;
1569
1571
  }
@@ -3387,7 +3389,9 @@ var require_build = /* @__PURE__ */ __commonJSMin(((exports) => {
3387
3389
  //#endregion
3388
3390
  //#region ../../node_modules/picocolors/picocolors.js
3389
3391
  var require_picocolors = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3390
- var p = process || {}, argv = p.argv || [], env = p.env || {};
3392
+ var p = process || {};
3393
+ var argv = p.argv || [];
3394
+ var env = p.env || {};
3391
3395
  var isColorSupported = !(!!env.NO_COLOR || argv.includes("--no-color")) && (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || (p.stdout || {}).isTTY && env.TERM !== "dumb" || !!env.CI);
3392
3396
  var formatter = (open, close, replace = open) => (input) => {
3393
3397
  let string = "" + input, index = string.indexOf(close, open.length);
@@ -4649,7 +4653,7 @@ var require_lib = /* @__PURE__ */ __commonJSMin(((exports) => {
4649
4653
  function getDefs(enabled) {
4650
4654
  return enabled ? defsOn : defsOff;
4651
4655
  }
4652
- var sometimesKeywords = new Set([
4656
+ var sometimesKeywords = /* @__PURE__ */ new Set([
4653
4657
  "as",
4654
4658
  "async",
4655
4659
  "from",
@@ -6557,7 +6561,8 @@ var require_dumper = /* @__PURE__ */ __commonJSMin(((exports, module) => {
6557
6561
  } else throw new YAMLException("code point within a string may not be greater than 0xFFFFFFFF");
6558
6562
  return "\\" + handle + common.repeat("0", length - string.length) + string;
6559
6563
  }
6560
- var QUOTING_TYPE_SINGLE = 1, QUOTING_TYPE_DOUBLE = 2;
6564
+ var QUOTING_TYPE_SINGLE = 1;
6565
+ var QUOTING_TYPE_DOUBLE = 2;
6561
6566
  function State(options) {
6562
6567
  this.schema = options["schema"] || DEFAULT_SCHEMA;
6563
6568
  this.indent = Math.max(1, options["indent"] || 2);
@@ -6638,7 +6643,11 @@ var require_dumper = /* @__PURE__ */ __commonJSMin(((exports, module) => {
6638
6643
  function needIndentIndicator(string) {
6639
6644
  return /^\n* /.test(string);
6640
6645
  }
6641
- var STYLE_PLAIN = 1, STYLE_SINGLE = 2, STYLE_LITERAL = 3, STYLE_FOLDED = 4, STYLE_DOUBLE = 5;
6646
+ var STYLE_PLAIN = 1;
6647
+ var STYLE_SINGLE = 2;
6648
+ var STYLE_LITERAL = 3;
6649
+ var STYLE_FOLDED = 4;
6650
+ var STYLE_DOUBLE = 5;
6642
6651
  function chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth, testAmbiguousType, quotingType, forceQuotes, inblock) {
6643
6652
  var i;
6644
6653
  var char = 0;
@@ -50898,7 +50907,8 @@ ${lanes.join("\n")}
50898
50907
  directoryToModuleNameMap.update(options2);
50899
50908
  }
50900
50909
  function getOrCreateCacheForDirectory(directoryName, redirectedReference) {
50901
- return getOrCreateCache(directoryToModuleNameMap, redirectedReference, toPath(directoryName, currentDirectory, getCanonicalFileName), () => createModeAwareCache());
50910
+ const path = toPath(directoryName, currentDirectory, getCanonicalFileName);
50911
+ return getOrCreateCache(directoryToModuleNameMap, redirectedReference, path, () => createModeAwareCache());
50902
50912
  }
50903
50913
  function getFromDirectoryCache(name, mode, directoryName, redirectedReference) {
50904
50914
  var _a, _b;
@@ -59550,10 +59560,11 @@ ${lanes.join("\n")}
59550
59560
  if (!specifier) {
59551
59561
  const isBundle2 = !!compilerOptions.outFile;
59552
59562
  const { moduleResolverHost } = context.tracker;
59553
- specifier = first(getModuleSpecifiers(symbol, checker, isBundle2 ? {
59563
+ const specifierCompilerOptions = isBundle2 ? {
59554
59564
  ...compilerOptions,
59555
59565
  baseUrl: moduleResolverHost.getCommonSourceDirectory()
59556
- } : compilerOptions, contextFile, moduleResolverHost, {
59566
+ } : compilerOptions;
59567
+ specifier = first(getModuleSpecifiers(symbol, checker, specifierCompilerOptions, contextFile, moduleResolverHost, {
59557
59568
  importModuleSpecifierPreference: isBundle2 ? "non-relative" : "project-relative",
59558
59569
  importModuleSpecifierEnding: isBundle2 ? "minimal" : resolutionMode === 99 ? "js" : void 0
59559
59570
  }, { overrideImportMode }));
@@ -60236,7 +60247,8 @@ ${lanes.join("\n")}
60236
60247
  if (some(symbol.declarations, isPartOfParameterDeclaration)) return;
60237
60248
  Debug.assertIsDefined(deferredPrivatesStack[deferredPrivatesStack.length - 1]);
60238
60249
  getUnusedName(unescapeLeadingUnderscores(symbol.escapedName), symbol);
60239
- deferredPrivatesStack[!!(symbol.flags & 2097152) && !some(symbol.declarations, (d) => !!findAncestor(d, isExportDeclaration) || isNamespaceExport(d) || isImportEqualsDeclaration(d) && !isExternalModuleReference(d.moduleReference)) ? 0 : deferredPrivatesStack.length - 1].set(getSymbolId(symbol), symbol);
60250
+ const isExternalImportAlias = !!(symbol.flags & 2097152) && !some(symbol.declarations, (d) => !!findAncestor(d, isExportDeclaration) || isNamespaceExport(d) || isImportEqualsDeclaration(d) && !isExternalModuleReference(d.moduleReference));
60251
+ deferredPrivatesStack[isExternalImportAlias ? 0 : deferredPrivatesStack.length - 1].set(getSymbolId(symbol), symbol);
60240
60252
  }
60241
60253
  function isExportingScope(enclosingDeclaration2) {
60242
60254
  return isSourceFile(enclosingDeclaration2) && (isExternalOrCommonJsModule(enclosingDeclaration2) || isJsonSourceFile(enclosingDeclaration2)) || isAmbientModule(enclosingDeclaration2) && !isGlobalScopeAugmentation(enclosingDeclaration2);
@@ -76085,7 +76097,8 @@ ${lanes.join("\n")}
76085
76097
  const exprType = getRegularTypeOfObjectLiteral(getBaseTypeOfLiteralType(links.assertionExpressionType));
76086
76098
  const targetType = getTypeFromTypeNode(type);
76087
76099
  if (!isErrorType(targetType)) addLazyDiagnostic(() => {
76088
- if (!isTypeComparableTo(targetType, getWidenedType(exprType))) checkTypeComparableTo(exprType, targetType, errNode, Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first);
76100
+ const widenedType = getWidenedType(exprType);
76101
+ if (!isTypeComparableTo(targetType, widenedType)) checkTypeComparableTo(exprType, targetType, errNode, Diagnostics.Conversion_of_type_0_to_type_1_may_be_a_mistake_because_neither_type_sufficiently_overlaps_with_the_other_If_this_was_intentional_convert_the_expression_to_unknown_first);
76089
76102
  });
76090
76103
  }
76091
76104
  function checkNonNullChain(node) {
@@ -87833,7 +87846,8 @@ ${lanes.join("\n")}
87833
87846
  setOriginalNode(getter, node);
87834
87847
  setCommentRange(getter, commentRange);
87835
87848
  setSourceMapRange(getter, sourceMapRange);
87836
- const setter = createAccessorPropertySetRedirector(factory2, node, factory2.createModifiersFromModifierFlags(modifiersToFlags(modifiers)), setterName, receiver);
87849
+ const setterModifiers = factory2.createModifiersFromModifierFlags(modifiersToFlags(modifiers));
87850
+ const setter = createAccessorPropertySetRedirector(factory2, node, setterModifiers, setterName, receiver);
87837
87851
  setOriginalNode(setter, node);
87838
87852
  setEmitFlags(setter, 3072);
87839
87853
  setSourceMapRange(setter, sourceMapRange);
@@ -92276,7 +92290,8 @@ ${lanes.join("\n")}
92276
92290
  const tagName = getTagName(node);
92277
92291
  const attrs = node.attributes.properties;
92278
92292
  const objectProperties = length(attrs) ? transformJsxAttributesToObjectProps(attrs) : factory2.createNull();
92279
- const element = createExpressionForJsxElement(factory2, currentFileState.importSpecifier === void 0 ? createJsxFactoryExpression(factory2, context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, node) : getImplicitImportForName("createElement"), tagName, objectProperties, mapDefined(children, transformJsxChildToExpression), location);
92293
+ const callee = currentFileState.importSpecifier === void 0 ? createJsxFactoryExpression(factory2, context.getEmitResolver().getJsxFactoryEntity(currentSourceFile), compilerOptions.reactNamespace, node) : getImplicitImportForName("createElement");
92294
+ const element = createExpressionForJsxElement(factory2, callee, tagName, objectProperties, mapDefined(children, transformJsxChildToExpression), location);
92280
92295
  if (isChild) startOnNewLine(element);
92281
92296
  return element;
92282
92297
  }
@@ -108880,7 +108895,8 @@ ${lanes.join("\n")}
108880
108895
  }
108881
108896
  function scheduleInvalidateResolutionsOfFailedLookupLocations() {
108882
108897
  if (!host.setTimeout || !host.clearTimeout) return resolutionCache.invalidateResolutionsOfFailedLookupLocations();
108883
- writeLog(`Scheduling invalidateFailedLookup${clearInvalidateResolutionsOfFailedLookupLocations() ? ", Cancelled earlier one" : ""}`);
108898
+ const pending = clearInvalidateResolutionsOfFailedLookupLocations();
108899
+ writeLog(`Scheduling invalidateFailedLookup${pending ? ", Cancelled earlier one" : ""}`);
108884
108900
  timerToInvalidateFailedLookupResolutions = host.setTimeout(invalidateResolutionsOfFailedLookup, 250, "timerToInvalidateFailedLookupResolutions");
108885
108901
  }
108886
108902
  function invalidateResolutionsOfFailedLookup() {
@@ -124586,7 +124602,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
124586
124602
  const { sourceFile } = context;
124587
124603
  const fixedDeclarations = /* @__PURE__ */ new Set();
124588
124604
  return codeFixAll(context, errorCodes2, (t, diagnostic) => {
124589
- const decl = getFixableErrorSpanDeclaration(sourceFile, diagnostic.relatedInformation && find(diagnostic.relatedInformation, (r) => r.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code));
124605
+ const span = diagnostic.relatedInformation && find(diagnostic.relatedInformation, (r) => r.code === Diagnostics.Did_you_mean_to_mark_this_function_as_async.code);
124606
+ const decl = getFixableErrorSpanDeclaration(sourceFile, span);
124590
124607
  if (!decl) return;
124591
124608
  const trackChanges = (cb) => (cb(t), []);
124592
124609
  return getFix(context, decl, trackChanges, fixedDeclarations);
@@ -127171,7 +127188,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
127171
127188
  return createModuleSpecifierResolutionHost(isFromPackageJson ? host.getPackageJsonAutoImportProvider() : program, host);
127172
127189
  });
127173
127190
  function addSymbol(moduleSymbol, toFile, exportedSymbol, exportKind, program2, isFromPackageJson) {
127174
- if (isImportable(program2, fromFile, toFile, moduleSymbol, preferences, packageJsonFilter, getModuleSpecifierResolutionHost(isFromPackageJson), moduleSpecifierCache)) {
127191
+ const moduleSpecifierResolutionHost = getModuleSpecifierResolutionHost(isFromPackageJson);
127192
+ if (isImportable(program2, fromFile, toFile, moduleSymbol, preferences, packageJsonFilter, moduleSpecifierResolutionHost, moduleSpecifierCache)) {
127175
127193
  const checker = program2.getTypeChecker();
127176
127194
  originalSymbolToExportInfos.add(getUniqueSymbolId(exportedSymbol, checker).toString(), {
127177
127195
  symbol: exportedSymbol,
@@ -128148,7 +128166,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
128148
128166
  eachDiagnostic(context, errorCodes28, (diag2) => {
128149
128167
  const info = getInfo10(diag2.file, diag2.start, diag2.code, checker, context.program);
128150
128168
  if (info === void 0) return;
128151
- if (!addToSeen(seen, getNodeId(info.parentDeclaration) + "#" + (info.kind === 3 ? info.identifier || getNodeId(info.token) : info.token.text))) return;
128169
+ const nodeId = getNodeId(info.parentDeclaration) + "#" + (info.kind === 3 ? info.identifier || getNodeId(info.token) : info.token.text);
128170
+ if (!addToSeen(seen, nodeId)) return;
128152
128171
  if (fixId56 === fixMissingFunctionDeclaration && (info.kind === 2 || info.kind === 5)) addFunctionDeclaration(changes, context, info);
128153
128172
  else if (fixId56 === fixMissingProperties && info.kind === 3) addObjectLiteralProperties(changes, context, info);
128154
128173
  else if (fixId56 === fixMissingAttributes && info.kind === 4) addJsxAttributes(changes, context, info);
@@ -129531,7 +129550,8 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
129531
129550
  const info = getInfo15(err.file, err.start, checker);
129532
129551
  if (!info) return;
129533
129552
  const { typeNode, type } = info;
129534
- doChange29(changes, sourceFile, typeNode, typeNode.kind === 315 && fixId56 === fixIdNullable ? checker.getNullableType(type, 4) : type, checker);
129553
+ const fixedType = typeNode.kind === 315 && fixId56 === fixIdNullable ? checker.getNullableType(type, 4) : type;
129554
+ doChange29(changes, sourceFile, typeNode, fixedType, checker);
129535
129555
  });
129536
129556
  }
129537
129557
  });
@@ -133931,15 +133951,18 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
133931
133951
  symbol: firstAccessibleSymbol,
133932
133952
  targetFlags: skipAlias(firstAccessibleSymbol, typeChecker).flags
133933
133953
  }], position, isValidTypeOnlyAliasUseSite(location)) || {};
133934
- if (moduleSpecifier) symbolToOriginInfoMap[index] = {
133935
- kind: getNullableSymbolOriginInfoKind(34),
133936
- moduleSymbol,
133937
- isDefaultExport: false,
133938
- symbolName: firstAccessibleSymbol.name,
133939
- exportName: firstAccessibleSymbol.name,
133940
- fileName,
133941
- moduleSpecifier
133942
- };
133954
+ if (moduleSpecifier) {
133955
+ const origin = {
133956
+ kind: getNullableSymbolOriginInfoKind(34),
133957
+ moduleSymbol,
133958
+ isDefaultExport: false,
133959
+ symbolName: firstAccessibleSymbol.name,
133960
+ exportName: firstAccessibleSymbol.name,
133961
+ fileName,
133962
+ moduleSpecifier
133963
+ };
133964
+ symbolToOriginInfoMap[index] = origin;
133965
+ }
133943
133966
  }
133944
133967
  } else if (preferences.includeCompletionsWithInsertText) {
133945
133968
  if (firstAccessibleSymbolId && seenPropertySymbols.has(firstAccessibleSymbolId)) return;
@@ -134460,10 +134483,13 @@ ${newComment.split("\n").map((c) => ` * ${c}`).join("\n")}
134460
134483
  symbols = concatenate(symbols, filterClassMembersList(baseSymbols, decl.members, classElementModifierFlags));
134461
134484
  forEach(symbols, (symbol, index) => {
134462
134485
  const declaration = symbol == null ? void 0 : symbol.valueDeclaration;
134463
- if (declaration && isClassElement(declaration) && declaration.name && isComputedPropertyName(declaration.name)) symbolToOriginInfoMap[index] = {
134464
- kind: 512,
134465
- symbolName: typeChecker.symbolToString(symbol)
134466
- };
134486
+ if (declaration && isClassElement(declaration) && declaration.name && isComputedPropertyName(declaration.name)) {
134487
+ const origin = {
134488
+ kind: 512,
134489
+ symbolName: typeChecker.symbolToString(symbol)
134490
+ };
134491
+ symbolToOriginInfoMap[index] = origin;
134492
+ }
134467
134493
  });
134468
134494
  }
134469
134495
  return 1;
@@ -141398,7 +141424,7 @@ ${content}
141398
141424
  if (symbolWasExpanded) return true;
141399
141425
  if (canExpandSymbol(symbol2, typeWriterOut)) {
141400
141426
  const symbolMeaning = semanticToSymbolMeaning(meaning);
141401
- addRange(displayParts, mapToDisplayParts((writer) => {
141427
+ const expandedDisplayParts = mapToDisplayParts((writer) => {
141402
141428
  const nodes = typeChecker.getEmitResolver().symbolToDeclarations(symbol2, symbolMeaning, 17408, maximumLength, verbosityLevel !== void 0 ? verbosityLevel - 1 : void 0, typeWriterOut);
141403
141429
  const printer = getPrinter();
141404
141430
  const sourceFile2 = symbol2.valueDeclaration && getSourceFileOfNode(symbol2.valueDeclaration);
@@ -141406,7 +141432,8 @@ ${content}
141406
141432
  if (i > 0) writer.writeLine();
141407
141433
  printer.writeNode(4, node, sourceFile2, writer);
141408
141434
  });
141409
- }, maximumLength));
141435
+ }, maximumLength);
141436
+ addRange(displayParts, expandedDisplayParts);
141410
141437
  symbolWasExpanded = true;
141411
141438
  return true;
141412
141439
  }
@@ -141480,10 +141507,11 @@ ${content}
141480
141507
  }
141481
141508
  }
141482
141509
  function writeTypeParametersOfSymbol(symbol2, enclosingDeclaration2) {
141483
- addRange(displayParts, mapToDisplayParts((writer) => {
141510
+ const typeParameterParts = mapToDisplayParts((writer) => {
141484
141511
  const params = typeChecker.symbolToTypeParameterDeclarations(symbol2, enclosingDeclaration2, symbolDisplayNodeBuilderFlags);
141485
141512
  getPrinter().writeList(53776, params, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration2)), writer);
141486
- }));
141513
+ });
141514
+ addRange(displayParts, typeParameterParts);
141487
141515
  }
141488
141516
  }
141489
141517
  function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, enclosingDeclaration, location, semanticMeaning = getMeaningFromLocation(location), alias, maximumLength, verbosityLevel) {
@@ -147515,12 +147543,13 @@ ${options.prefix}` : "\n" : options.prefix
147515
147543
  if (this.installTypingHost.fileExists(combinePaths(directory, "package.json"))) return directory;
147516
147544
  }) || projectRootPath;
147517
147545
  if (cwd) this.installWorker(-1, [packageName], cwd, (success) => {
147546
+ const message = success ? `Package ${packageName} installed.` : `There was an error installing ${packageName}.`;
147518
147547
  const response = {
147519
147548
  kind: ActionPackageInstalled,
147520
147549
  projectName,
147521
147550
  id,
147522
147551
  success,
147523
- message: success ? `Package ${packageName} installed.` : `There was an error installing ${packageName}.`
147552
+ message
147524
147553
  };
147525
147554
  this.sendResponse(response);
147526
147555
  });
@@ -161387,7 +161416,7 @@ var require_table = /* @__PURE__ */ __commonJSMin(((exports, module) => {
161387
161416
  var import_cli_table3 = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
161388
161417
  module.exports = require_table();
161389
161418
  })))(), 1);
161390
- var AMOUNT_FIELDS = new Set([
161419
+ var AMOUNT_FIELDS = /* @__PURE__ */ new Set([
161391
161420
  "amount",
161392
161421
  "balance",
161393
161422
  "balance_available",
@@ -162297,7 +162326,7 @@ function registerTransactionsCommand(program) {
162297
162326
  //#endregion
162298
162327
  //#region src/index.ts
162299
162328
  var program = new Command();
162300
- program.name("actual").description("CLI for Actual Budget").version("26.8.0-nightly.20260721").option("--server-url <url>", "Actual server URL (env: ACTUAL_SERVER_URL)").option("--password <password>", "Server password (env: ACTUAL_PASSWORD)").option("--session-token <token>", "Session token (env: ACTUAL_SESSION_TOKEN)").option("--sync-id <id>", "Budget sync ID (env: ACTUAL_SYNC_ID)").option("--data-dir <path>", "Data directory (env: ACTUAL_DATA_DIR)").option("--encryption-password <password>", "E2E encryption password (env: ACTUAL_ENCRYPTION_PASSWORD)").option("--cache-ttl <seconds>", "Cache TTL in seconds (env: ACTUAL_CACHE_TTL; default: 60)", (value) => parseNonNegativeIntFlag(value, "--cache-ttl")).option("--refresh", "Force a sync on this call, ignoring the cache", false).option("--no-cache", "Alias for --refresh").option("--lock-timeout <seconds>", "How long to wait for another CLI process to release the lock (env: ACTUAL_LOCK_TIMEOUT; default: 10)", (value) => parseNonNegativeIntFlag(value, "--lock-timeout")).option("--no-lock", "Disable the budget directory lock (use with care, env: ACTUAL_NO_LOCK)").addOption(new Option("--format <format>", "Output format: json, table, csv").choices([
162329
+ program.name("actual").description("CLI for Actual Budget").version("26.8.0-nightly.20260723").option("--server-url <url>", "Actual server URL (env: ACTUAL_SERVER_URL)").option("--password <password>", "Server password (env: ACTUAL_PASSWORD)").option("--session-token <token>", "Session token (env: ACTUAL_SESSION_TOKEN)").option("--sync-id <id>", "Budget sync ID (env: ACTUAL_SYNC_ID)").option("--data-dir <path>", "Data directory (env: ACTUAL_DATA_DIR)").option("--encryption-password <password>", "E2E encryption password (env: ACTUAL_ENCRYPTION_PASSWORD)").option("--cache-ttl <seconds>", "Cache TTL in seconds (env: ACTUAL_CACHE_TTL; default: 60)", (value) => parseNonNegativeIntFlag(value, "--cache-ttl")).option("--refresh", "Force a sync on this call, ignoring the cache", false).option("--no-cache", "Alias for --refresh").option("--lock-timeout <seconds>", "How long to wait for another CLI process to release the lock (env: ACTUAL_LOCK_TIMEOUT; default: 10)", (value) => parseNonNegativeIntFlag(value, "--lock-timeout")).option("--no-lock", "Disable the budget directory lock (use with care, env: ACTUAL_NO_LOCK)").addOption(new Option("--format <format>", "Output format: json, table, csv").choices([
162301
162330
  "json",
162302
162331
  "table",
162303
162332
  "csv"