@anvil-works/anvil-cli 0.6.2 → 0.6.4

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/api.d.ts CHANGED
@@ -5,7 +5,7 @@ export { AppIdCandidate, AppIdWithContext, CheckoutAppListItem, detectAppIdsByCo
5
5
  export { getAccountsForUrl, getAvailableAnvilUrls, getTokensForUrl, getValidAuthToken, hasTokensForUrl, login, LoginResult, LogoutResult, logout, StoredTokens, TokenData, verifyAuth, } from "./services/auth";
6
6
  export { DeviceAuthorizationResponse, OAuthTokenResponse, pollDeviceAuthorization, requestDeviceAuthorization, runInteractiveLoginFlow, } from "./services/oauth-login";
7
7
  export { CheckoutCloneOptions, CheckoutExecutionDeps, CheckoutOptions, ensureCheckoutAuthToken, executeCheckout, getDefaultDestinationDirectory, isDirectoryNonEmpty, isPathInsideGitRepo, openPathInEditorOrDefault, parseCheckoutInput, ParsedCheckoutInput, resolveCheckoutUrl, resolveCheckoutUsername, sanitizeDirectoryName, validateCheckoutDestination, } from "./commands/checkout";
8
- export { deleteConfig, getAllConfig, getConfig, getInstalledPreferredEditors, getPreferredEditorCommand, getSettableConfigKeys, isCommandAvailable, normalizeAnvilUrl, parseConfigSetValue, preferredEditors, PreferredEditor, resetConfig, resolveAnvilUrl, setConfig, SettableConfigKey, } from "./config";
8
+ export { deleteConfig, getAllConfig, getConfig, getInstalledPreferredEditors, getPreferredEditorCommand, getSettableConfigKeys, isCommandAvailable, normalizeAnvilUrl, parseConfigSetValue, preferredEditors, PreferredEditor, resetConfig, resolveAnvilUrl, setAuthTokensForAccount, setConfig, SettableConfigKey, } from "./config";
9
9
  export { BranchSyncStatus, validateAnvilApp, validateBranchSyncStatus } from "./services/validation";
10
10
  export { AnvilYamlValidationResult, FormTemplateValidationResult, ValidatePathResult, ValidationTarget, ValidationIssue, formatValidationPath, validatePath, validateAnvilYaml, validateFormTemplate, } from "./validators";
11
11
  export interface UncommittedChanges {
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAkB,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAG7E,OAAO,EAA4B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzF,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,aAAa,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,KAAK,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,SAAS,EACT,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,SAAS,EACT,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EACH,yBAAyB,EACzB,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,sBAAsB,CAAC;AAMvE;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB3F;AAMD;;;;GAIG;AACH,wBAAsB,YAAY,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAMD;;;GAGG;AACH,wBAAsB,KAAK,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,SAAoB,EAC5B,UAAU,UAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAmGvB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAkB,QAAQ,EAAgB,MAAM,UAAU,CAAC;AAG7E,OAAO,EAA4B,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAGzF,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,0BAA0B,EAC1B,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,cAAc,EACd,WAAW,EACX,qBAAqB,EACrB,aAAa,GAChB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,KAAK,EACL,WAAW,EACX,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,SAAS,EACT,UAAU,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,2BAA2B,EAC3B,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,uBAAuB,GAC1B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACH,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,uBAAuB,EACvB,eAAe,EACf,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EACvB,qBAAqB,EACrB,2BAA2B,GAC9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,4BAA4B,EAC5B,yBAAyB,EACzB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,eAAe,EACf,uBAAuB,EACvB,SAAS,EACT,iBAAiB,GACpB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACrG,OAAO,EACH,yBAAyB,EACzB,4BAA4B,EAC5B,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,GACvB,MAAM,cAAc,CAAC;AAQtB,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,sBAAsB,CAAC;AAMvE;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsB3F;AAMD;;;;GAIG;AACH,wBAAsB,YAAY,CAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAwBjB;AAMD;;;GAGG;AACH,wBAAsB,KAAK,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,SAAoB,EAC5B,UAAU,UAAQ,EAClB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,CAAC,CAmGvB"}
package/dist/index.js CHANGED
@@ -31355,6 +31355,7 @@ var __webpack_exports__ = {};
31355
31355
  requestDeviceAuthorization: ()=>requestDeviceAuthorization,
31356
31356
  validateAnvilApp: ()=>validation_validateAnvilApp,
31357
31357
  getGitPushUrl: ()=>anvil_api_getGitPushUrl,
31358
+ setAuthTokensForAccount: ()=>setAccountTokens,
31358
31359
  ValidateAppIdResponse: ()=>anvil_api_namespaceObject.ValidateAppIdResponse,
31359
31360
  formatValidationPath: ()=>formatValidationPath,
31360
31361
  resolveAnvilUrl: ()=>resolveAnvilUrl,
@@ -31441,6 +31442,7 @@ var __webpack_exports__ = {};
31441
31442
  cx: ()=>preferredEditors,
31442
31443
  E6: ()=>resetConfig,
31443
31444
  mk: ()=>resolveAnvilUrl,
31445
+ Px: ()=>setAccountTokens,
31444
31446
  Nk: ()=>setConfig
31445
31447
  });
31446
31448
  var auth_namespaceObject = {};
@@ -50418,6 +50420,7 @@ exports.resolveCheckoutUsername = __webpack_exports__.resolveCheckoutUsername;
50418
50420
  exports.runInteractiveLoginFlow = __webpack_exports__.runInteractiveLoginFlow;
50419
50421
  exports.sanitizeDirectoryName = __webpack_exports__.sanitizeDirectoryName;
50420
50422
  exports.saveUpdates = __webpack_exports__.saveUpdates;
50423
+ exports.setAuthTokensForAccount = __webpack_exports__.setAuthTokensForAccount;
50421
50424
  exports.setConfig = __webpack_exports__.setConfig;
50422
50425
  exports.syncToLatest = __webpack_exports__.syncToLatest;
50423
50426
  exports.validateAnvilApp = __webpack_exports__.validateAnvilApp;
@@ -50498,6 +50501,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
50498
50501
  "runInteractiveLoginFlow",
50499
50502
  "sanitizeDirectoryName",
50500
50503
  "saveUpdates",
50504
+ "setAuthTokensForAccount",
50501
50505
  "setConfig",
50502
50506
  "syncToLatest",
50503
50507
  "validateAnvilApp",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anvil-works/anvil-cli",
3
- "version": "0.6.2",
3
+ "version": "0.6.4",
4
4
  "description": "CLI tool for developing Anvil apps locally",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/api.d.ts",
@@ -21,6 +21,27 @@ need_cmd() {
21
21
  command -v "$1" >/dev/null 2>&1 || fail "Required command not found: $1"
22
22
  }
23
23
 
24
+ is_windows_posix() {
25
+ case "$(uname -s 2>/dev/null || true)" in
26
+ MINGW*|MSYS*|CYGWIN*) return 0 ;;
27
+ *) return 1 ;;
28
+ esac
29
+ }
30
+
31
+ windows_posix_node_error() {
32
+ fail "Windows Git Bash installs require existing Node.js v20+ and npm. Use PowerShell instead: irm https://anvil.works/install-cli.ps1 | iex"
33
+ }
34
+
35
+ normalize_npm_prefix() {
36
+ prefix="$1"
37
+ if is_windows_posix && command -v cygpath >/dev/null 2>&1; then
38
+ cygpath -u "$prefix" 2>/dev/null || printf '%s\n' "$prefix"
39
+ return
40
+ fi
41
+
42
+ printf '%s\n' "$prefix"
43
+ }
44
+
24
45
  warn_if_missing_git() {
25
46
  if ! command -v git >/dev/null 2>&1; then
26
47
  log "Warning: git was not found on PATH."
@@ -30,11 +51,13 @@ warn_if_missing_git() {
30
51
  }
31
52
 
32
53
  cleanup_legacy_npm_prefix() {
33
- current_prefix="$(npm config get prefix 2>/dev/null || true)"
54
+ current_prefix="$(npm config get prefix 2>/dev/null | tr -d '\r' || true)"
34
55
  [ -n "$current_prefix" ] || return 0
35
56
 
36
57
  legacy_prefix="$NPM_PREFIX"
37
- if [ "$current_prefix" = "$legacy_prefix" ]; then
58
+ normalized_current_prefix="$(normalize_npm_prefix "$current_prefix")"
59
+ normalized_legacy_prefix="$(normalize_npm_prefix "$legacy_prefix")"
60
+ if [ "$current_prefix" = "$legacy_prefix" ] || [ "$normalized_current_prefix" = "$normalized_legacy_prefix" ]; then
38
61
  log "Detected legacy anvil npm prefix in user config; restoring npm default prefix behavior."
39
62
  npm config delete prefix --location=user >/dev/null 2>&1 || true
40
63
  fi
@@ -42,7 +65,11 @@ cleanup_legacy_npm_prefix() {
42
65
 
43
66
  append_path_export() {
44
67
  profile_file="$1"
45
- line='export PATH="$HOME/.anvil-cli/npm-global/bin:$HOME/.anvil-cli/node-v20/bin:$PATH"'
68
+ if is_windows_posix; then
69
+ line='export PATH="$HOME/.anvil-cli/npm-global:$HOME/.anvil-cli/npm-global/bin:$HOME/.anvil-cli/node-v20/bin:$PATH"'
70
+ else
71
+ line='export PATH="$HOME/.anvil-cli/npm-global/bin:$HOME/.anvil-cli/node-v20/bin:$PATH"'
72
+ fi
46
73
 
47
74
  [ -f "$profile_file" ] || touch "$profile_file"
48
75
  grep -F "$line" "$profile_file" >/dev/null 2>&1 || {
@@ -131,23 +158,54 @@ ensure_node() {
131
158
  log "Using existing Node.js $(node -v)"
132
159
  return
133
160
  fi
161
+ if is_windows_posix; then
162
+ windows_posix_node_error
163
+ fi
134
164
  log "Existing Node.js $(node -v) is too old; installing Node.js v20 user-local"
135
165
  install_node_v20
136
166
  return
137
167
  fi
138
168
 
169
+ if is_windows_posix; then
170
+ windows_posix_node_error
171
+ fi
139
172
  install_node_v20
140
173
  }
141
174
 
142
- main() {
143
- need_cmd curl
144
- need_cmd tar
175
+ configure_current_path() {
176
+ if is_windows_posix; then
177
+ export PATH="$NPM_PREFIX:$NPM_PREFIX/bin:$NODE_DIR/bin:$PATH"
178
+ else
179
+ export PATH="$NPM_PREFIX/bin:$NODE_DIR/bin:$PATH"
180
+ fi
181
+ }
182
+
183
+ anvil_version() {
184
+ if command -v anvil >/dev/null 2>&1 && anvil --version 2>/dev/null; then
185
+ return 0
186
+ fi
187
+
188
+ if [ -f "$NPM_PREFIX/anvil" ] && "$NPM_PREFIX/anvil" --version 2>/dev/null; then
189
+ return 0
190
+ fi
145
191
 
192
+ if [ -f "$NPM_PREFIX/anvil.cmd" ] && "$NPM_PREFIX/anvil.cmd" --version 2>/dev/null; then
193
+ return 0
194
+ fi
195
+
196
+ if [ -x "$NPM_PREFIX/bin/anvil" ] && "$NPM_PREFIX/bin/anvil" --version 2>/dev/null; then
197
+ return 0
198
+ fi
199
+
200
+ return 1
201
+ }
202
+
203
+ main() {
146
204
  mkdir -p "$ANVIL_HOME" "$NPM_PREFIX"
147
205
 
148
206
  ensure_node
149
207
 
150
- export PATH="$NPM_PREFIX/bin:$NODE_DIR/bin:$PATH"
208
+ configure_current_path
151
209
  persist_path_hint
152
210
 
153
211
  need_cmd npm
@@ -157,11 +215,7 @@ main() {
157
215
  log "Installing anvil-cli..."
158
216
  NPM_CONFIG_PREFIX="$NPM_PREFIX" npm install -g @anvil-works/anvil-cli@latest
159
217
 
160
- if command -v anvil >/dev/null 2>&1; then
161
- version="$(anvil --version 2>/dev/null || true)"
162
- elif [ -x "$NPM_PREFIX/bin/anvil" ]; then
163
- version="$($NPM_PREFIX/bin/anvil --version 2>/dev/null || true)"
164
- else
218
+ if ! version="$(anvil_version)"; then
165
219
  fail "anvil installed but command not found on PATH"
166
220
  fi
167
221