@anvil-works/anvil-cli 0.8.0-dev.0 → 0.8.0-dev.1
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/README.md +54 -0
- package/dist/WatchSession.d.ts.map +1 -1
- package/dist/api.d.ts +3 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/cli.js +1251 -216
- package/dist/commands/appDetection.d.ts +68 -1
- package/dist/commands/appDetection.d.ts.map +1 -1
- package/dist/commands/checkout.d.ts +1 -0
- package/dist/commands/checkout.d.ts.map +1 -1
- package/dist/commands/create.d.ts +52 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/deps.d.ts.map +1 -1
- package/dist/commands/env.d.ts +3 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/repl.d.ts.map +1 -1
- package/dist/commands/secret.d.ts +3 -0
- package/dist/commands/secret.d.ts.map +1 -0
- package/dist/commands/test.d.ts +26 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/watch.d.ts +1 -25
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/config.d.ts +3 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/formTemplateValidation.d.ts.map +1 -1
- package/dist/index.js +225 -22
- package/dist/program.d.ts.map +1 -1
- package/dist/services/anvil-api.d.ts +20 -0
- package/dist/services/anvil-api.d.ts.map +1 -1
- package/dist/services/db.d.ts +2 -0
- package/dist/services/db.d.ts.map +1 -1
- package/dist/services/deps.d.ts +5 -2
- package/dist/services/deps.d.ts.map +1 -1
- package/dist/services/environment.d.ts +4 -0
- package/dist/services/environment.d.ts.map +1 -1
- package/dist/services/path-open.d.ts +1 -0
- package/dist/services/path-open.d.ts.map +1 -1
- package/dist/services/repl.d.ts +2 -0
- package/dist/services/repl.d.ts.map +1 -1
- package/dist/services/secret.d.ts +43 -0
- package/dist/services/secret.d.ts.map +1 -0
- package/dist/services/server-tests.d.ts +47 -0
- package/dist/services/server-tests.d.ts.map +1 -0
- package/dist/validateFormTemplateHtml.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7373,6 +7373,7 @@ var __webpack_exports__ = {};
|
|
|
7373
7373
|
AppIdWithContext: ()=>anvil_api_namespaceObject.AppIdWithContext,
|
|
7374
7374
|
inspectCredentialHelperCommand: ()=>inspectCredentialHelperCommand,
|
|
7375
7375
|
executeCheckout: ()=>executeCheckout,
|
|
7376
|
+
executeCreate: ()=>executeCreate,
|
|
7376
7377
|
validateCheckoutDestination: ()=>validateCheckoutDestination,
|
|
7377
7378
|
DeviceAuthorizationResponse: ()=>oauth_login_namespaceObject.DeviceAuthorizationResponse,
|
|
7378
7379
|
OAuthTokenResponse: ()=>oauth_login_namespaceObject.OAuthTokenResponse,
|
|
@@ -7446,7 +7447,9 @@ var __webpack_exports__ = {};
|
|
|
7446
7447
|
setInMemoryTokens: ()=>setInMemoryTokens,
|
|
7447
7448
|
validateAppId: ()=>anvil_api_validateAppId,
|
|
7448
7449
|
pollDeviceAuthorization: ()=>pollDeviceAuthorization,
|
|
7450
|
+
createAnvilApp: ()=>createAnvilApp,
|
|
7449
7451
|
getValidAuthToken: ()=>auth_getValidAuthToken,
|
|
7452
|
+
CreatedAnvilApp: ()=>anvil_api_namespaceObject.CreatedAnvilApp,
|
|
7450
7453
|
watch: ()=>src_api_watch,
|
|
7451
7454
|
deleteConfig: ()=>deleteConfig,
|
|
7452
7455
|
installModelTokenHelperScript: ()=>installModelTokenHelperScript,
|
|
@@ -7462,11 +7465,12 @@ var __webpack_exports__ = {};
|
|
|
7462
7465
|
CheckoutResult: ()=>checkout_namespaceObject.CheckoutResult,
|
|
7463
7466
|
ParsedCheckoutInput: ()=>checkout_namespaceObject.ParsedCheckoutInput,
|
|
7464
7467
|
parseCredentialHelperCommand: ()=>parseCredentialHelperCommand,
|
|
7465
|
-
|
|
7468
|
+
CreateCheckoutError: ()=>CreateCheckoutError,
|
|
7466
7469
|
GetValidAuthTokenOptions: ()=>auth_namespaceObject.GetValidAuthTokenOptions,
|
|
7467
|
-
|
|
7470
|
+
MODEL_TOKEN_LOCK_TIMEOUT_MS: ()=>MODEL_TOKEN_LOCK_TIMEOUT_MS,
|
|
7468
7471
|
getDefaultDestinationDirectory: ()=>getDefaultDestinationDirectory,
|
|
7469
7472
|
AUTH_FILE_LOCK_DEFAULTS: ()=>AUTH_FILE_LOCK_DEFAULTS,
|
|
7473
|
+
clearInMemoryTokens: ()=>clearInMemoryTokens,
|
|
7470
7474
|
lookupByCommit: ()=>lookupByCommit,
|
|
7471
7475
|
AppIdCandidate: ()=>anvil_api_namespaceObject.AppIdCandidate,
|
|
7472
7476
|
verifyAuth: ()=>auth_verifyAuth
|
|
@@ -7483,6 +7487,7 @@ var __webpack_exports__ = {};
|
|
|
7483
7487
|
P$: ()=>config_isCommandAvailable,
|
|
7484
7488
|
n: ()=>config_isDevMode,
|
|
7485
7489
|
Wj: ()=>config_isTestMode,
|
|
7490
|
+
Wc: ()=>config_normalizeAnvilOrigin,
|
|
7486
7491
|
Vl: ()=>config_normalizeAnvilUrl,
|
|
7487
7492
|
PW: ()=>parseConfigSetValue,
|
|
7488
7493
|
cx: ()=>preferredEditors,
|
|
@@ -7511,6 +7516,7 @@ var __webpack_exports__ = {};
|
|
|
7511
7516
|
var anvil_api_namespaceObject = {};
|
|
7512
7517
|
__webpack_require__.r(anvil_api_namespaceObject);
|
|
7513
7518
|
__webpack_require__.d(anvil_api_namespaceObject, {
|
|
7519
|
+
gr: ()=>createAnvilApp,
|
|
7514
7520
|
lx: ()=>anvil_api_detectAppIdsByCommitLookup,
|
|
7515
7521
|
NZ: ()=>anvil_api_detectAppIdsFromAllRemotes,
|
|
7516
7522
|
rZ: ()=>anvil_api_filterCandidates,
|
|
@@ -7553,6 +7559,7 @@ var __webpack_exports__ = {};
|
|
|
7553
7559
|
A9: ()=>isDirectoryNonEmpty,
|
|
7554
7560
|
oU: ()=>isPathInsideGitRepo,
|
|
7555
7561
|
Qx: ()=>parseCheckoutInput,
|
|
7562
|
+
B6: ()=>resolveCheckoutUrlForApi,
|
|
7556
7563
|
KV: ()=>sanitizeDirectoryName,
|
|
7557
7564
|
Bc: ()=>validateCheckoutDestination
|
|
7558
7565
|
});
|
|
@@ -13109,12 +13116,25 @@ var __webpack_exports__ = {};
|
|
|
13109
13116
|
if (!urlInput || "string" != typeof urlInput) return urlInput;
|
|
13110
13117
|
let url = urlInput.trim();
|
|
13111
13118
|
url = url.replace(/\/+$/, "");
|
|
13112
|
-
if ("localhost" === url
|
|
13113
|
-
if (
|
|
13114
|
-
if (
|
|
13115
|
-
if (/^https?:\/\//.test(url)) return url;
|
|
13119
|
+
if ("localhost" === url) return "http://localhost:3000";
|
|
13120
|
+
if (url.startsWith("localhost:")) return `http://${url}`;
|
|
13121
|
+
if (/^https?:\/\//i.test(url)) return url;
|
|
13116
13122
|
return `https://${url}`;
|
|
13117
13123
|
}
|
|
13124
|
+
function config_normalizeAnvilOrigin(input) {
|
|
13125
|
+
try {
|
|
13126
|
+
const raw = input.trim();
|
|
13127
|
+
const normalized = config_normalizeAnvilUrl(raw);
|
|
13128
|
+
const url = new URL(raw.includes("://") ? raw : normalized);
|
|
13129
|
+
if (![
|
|
13130
|
+
"http:",
|
|
13131
|
+
"https:"
|
|
13132
|
+
].includes(url.protocol) || url.username || url.password || "/" !== url.pathname || url.search || url.hash) throw new Error("Invalid origin");
|
|
13133
|
+
return normalized;
|
|
13134
|
+
} catch {
|
|
13135
|
+
throw new Error("Server URL must be an HTTP(S) origin without credentials, a path, query, or fragment.");
|
|
13136
|
+
}
|
|
13137
|
+
}
|
|
13118
13138
|
function resolveAnvilUrl() {
|
|
13119
13139
|
const fromConfig = config_getConfig("anvilUrl");
|
|
13120
13140
|
if ("string" == typeof fromConfig && fromConfig.trim()) return fromConfig.trim();
|
|
@@ -14774,6 +14794,39 @@ Promise.resolve()
|
|
|
14774
14794
|
function anvil_api_getDefaultAnvilUrl() {
|
|
14775
14795
|
return resolveAnvilUrl();
|
|
14776
14796
|
}
|
|
14797
|
+
async function createAnvilApp(options) {
|
|
14798
|
+
let response;
|
|
14799
|
+
try {
|
|
14800
|
+
response = await fetch(`${options.anvilUrl}/ide/api/_/apps`, {
|
|
14801
|
+
method: "POST",
|
|
14802
|
+
headers: {
|
|
14803
|
+
Authorization: `Bearer ${options.authToken}`,
|
|
14804
|
+
"Content-Type": "application/json"
|
|
14805
|
+
},
|
|
14806
|
+
body: JSON.stringify({
|
|
14807
|
+
name: options.name,
|
|
14808
|
+
tags: options.tags
|
|
14809
|
+
})
|
|
14810
|
+
});
|
|
14811
|
+
} catch (error) {
|
|
14812
|
+
throw createNetworkError.network(error.message);
|
|
14813
|
+
}
|
|
14814
|
+
const data = await response.json().catch(()=>({}));
|
|
14815
|
+
if (!response.ok) {
|
|
14816
|
+
if (401 === response.status || 403 === response.status) throw createAuthError.invalid(data.error || "Not authorized to create an app");
|
|
14817
|
+
throw new Error(data.error || `Failed to create app: ${response.status} ${response.statusText}`);
|
|
14818
|
+
}
|
|
14819
|
+
if ("string" != typeof data.id || !data.id) throw new Error("App creation response did not contain an app ID.");
|
|
14820
|
+
return {
|
|
14821
|
+
id: data.id,
|
|
14822
|
+
..."string" == typeof data.name ? {
|
|
14823
|
+
name: data.name
|
|
14824
|
+
} : {},
|
|
14825
|
+
...data.tags ? {
|
|
14826
|
+
tags: data.tags
|
|
14827
|
+
} : {}
|
|
14828
|
+
};
|
|
14829
|
+
}
|
|
14777
14830
|
async function anvil_api_validateAppId(appId, anvilUrl = anvil_api_getDefaultAnvilUrl(), username) {
|
|
14778
14831
|
const authToken = await auth_getValidAuthToken(anvilUrl, username);
|
|
14779
14832
|
try {
|
|
@@ -14945,14 +14998,15 @@ Promise.resolve()
|
|
|
14945
14998
|
try {
|
|
14946
14999
|
const remotes = await git.getRemotes(true);
|
|
14947
15000
|
for (const remote of remotes){
|
|
14948
|
-
const httpMatch = remote.refs.fetch?.match(/(
|
|
15001
|
+
const httpMatch = remote.refs.fetch?.match(/(https?):\/\/(?:[^@\/]+@)?([^\/]+)\/git\/([A-Z0-9]+)\.git/);
|
|
14949
15002
|
if (httpMatch) {
|
|
14950
|
-
const [, host, detectedAppId] = httpMatch;
|
|
15003
|
+
const [, scheme, host, detectedAppId] = httpMatch;
|
|
15004
|
+
const origin = new URL(`${scheme}://${host}`).origin;
|
|
14951
15005
|
out.push({
|
|
14952
15006
|
appId: detectedAppId,
|
|
14953
15007
|
source: "remote",
|
|
14954
15008
|
description: `Git remote '${remote.name}'`,
|
|
14955
|
-
detectedUrl: config_normalizeAnvilUrl(
|
|
15009
|
+
detectedUrl: config_normalizeAnvilUrl(origin)
|
|
14956
15010
|
});
|
|
14957
15011
|
continue;
|
|
14958
15012
|
}
|
|
@@ -15060,7 +15114,7 @@ Promise.resolve()
|
|
|
15060
15114
|
html: htmlContent
|
|
15061
15115
|
};
|
|
15062
15116
|
}
|
|
15063
|
-
function
|
|
15117
|
+
function http_formatHttpError(prefix, status, body) {
|
|
15064
15118
|
if (!body) return `${prefix}: ${status}`;
|
|
15065
15119
|
try {
|
|
15066
15120
|
const parsed = JSON.parse(body);
|
|
@@ -15085,11 +15139,11 @@ Promise.resolve()
|
|
|
15085
15139
|
}
|
|
15086
15140
|
const ANVIL_DEPS_DIR = ".anvil/deps";
|
|
15087
15141
|
const ANVIL_DEPS_MANIFEST = "manifest.json";
|
|
15088
|
-
const DEPS_MANIFEST_VERSION =
|
|
15142
|
+
const DEPS_MANIFEST_VERSION = 3;
|
|
15089
15143
|
async function fetchAllDependencies(appId, anvilUrl, options = {}) {
|
|
15090
15144
|
const { commit, includeDocs = true, knownDependencies = [] } = options;
|
|
15091
15145
|
anvilUrl ??= await auth_resolveAuthAnvilUrl();
|
|
15092
|
-
const token = await auth_getValidAuthToken(anvilUrl);
|
|
15146
|
+
const token = await auth_getValidAuthToken(anvilUrl, options.username);
|
|
15093
15147
|
const body = {
|
|
15094
15148
|
include_docs: includeDocs,
|
|
15095
15149
|
known_dependencies: knownDependencies
|
|
@@ -15105,7 +15159,7 @@ Promise.resolve()
|
|
|
15105
15159
|
});
|
|
15106
15160
|
if (!resp.ok) {
|
|
15107
15161
|
const errorBody = await resp.text();
|
|
15108
|
-
throw new Error(
|
|
15162
|
+
throw new Error(http_formatHttpError("Failed to fetch dependencies", resp.status, errorBody));
|
|
15109
15163
|
}
|
|
15110
15164
|
return await resp.json();
|
|
15111
15165
|
}
|
|
@@ -15113,9 +15167,17 @@ Promise.resolve()
|
|
|
15113
15167
|
auth_setRepoContext(projectRoot);
|
|
15114
15168
|
anvilUrl ??= await auth_resolveAuthAnvilUrl();
|
|
15115
15169
|
const includeDocs = options.includeDocs ?? true;
|
|
15170
|
+
const git = new git_GitService(projectRoot);
|
|
15171
|
+
const commit = options.commit ?? await git.getCommitId();
|
|
15172
|
+
const sourceYaml = await git.show(`${commit}:anvil.yaml`).catch((error)=>{
|
|
15173
|
+
if (options.commit) return null;
|
|
15174
|
+
throw error;
|
|
15175
|
+
});
|
|
15176
|
+
const sourceDependencies = null === sourceYaml ? null : normalizeAnvilYamlDependenciesFromContent(sourceYaml);
|
|
15116
15177
|
const knownDependencies = await getKnownDependenciesForCache(projectRoot, includeDocs);
|
|
15117
15178
|
const response = await fetchAllDependencies(appId, anvilUrl, {
|
|
15118
|
-
|
|
15179
|
+
username: options.username,
|
|
15180
|
+
commit,
|
|
15119
15181
|
includeDocs,
|
|
15120
15182
|
knownDependencies
|
|
15121
15183
|
});
|
|
@@ -15128,7 +15190,8 @@ Promise.resolve()
|
|
|
15128
15190
|
}
|
|
15129
15191
|
const addedGitignoreEntry = await ensureProjectGitignoreIgnoresAnvilDir(projectRoot);
|
|
15130
15192
|
await writeAllDepsToCache(projectRoot, response, {
|
|
15131
|
-
includeDocs
|
|
15193
|
+
includeDocs,
|
|
15194
|
+
sourceDependencies
|
|
15132
15195
|
});
|
|
15133
15196
|
return {
|
|
15134
15197
|
response,
|
|
@@ -15154,7 +15217,7 @@ Promise.resolve()
|
|
|
15154
15217
|
function isDepsCacheManifest(value) {
|
|
15155
15218
|
if (!value || "object" != typeof value) return false;
|
|
15156
15219
|
const manifest = value;
|
|
15157
|
-
return manifest.version === DEPS_MANIFEST_VERSION && "boolean" == typeof manifest.includeDocs && Array.isArray(manifest.source_dependencies) && Array.isArray(manifest.resolved_dependencies) && manifest.resolved_dependencies.every(isResolvedDependencyManifestEntry) && Array.isArray(manifest.cached_dependencies) && manifest.cached_dependencies.every(isCachedDependencyManifestEntry);
|
|
15220
|
+
return manifest.version === DEPS_MANIFEST_VERSION && "boolean" == typeof manifest.includeDocs && (null === manifest.source_dependencies || Array.isArray(manifest.source_dependencies)) && Array.isArray(manifest.resolved_dependencies) && manifest.resolved_dependencies.every(isResolvedDependencyManifestEntry) && Array.isArray(manifest.cached_dependencies) && manifest.cached_dependencies.every(isCachedDependencyManifestEntry);
|
|
15158
15221
|
}
|
|
15159
15222
|
async function readDepsCacheManifest(projectRoot) {
|
|
15160
15223
|
try {
|
|
@@ -15346,7 +15409,7 @@ Promise.resolve()
|
|
|
15346
15409
|
const newManifest = {
|
|
15347
15410
|
version: DEPS_MANIFEST_VERSION,
|
|
15348
15411
|
includeDocs,
|
|
15349
|
-
source_dependencies: await readAnvilYamlDependencies(projectRoot),
|
|
15412
|
+
source_dependencies: void 0 === options.sourceDependencies ? await readAnvilYamlDependencies(projectRoot) : options.sourceDependencies,
|
|
15350
15413
|
resolved_dependencies: response.resolved_dependencies,
|
|
15351
15414
|
cached_dependencies: cachedDependencies
|
|
15352
15415
|
};
|
|
@@ -16423,8 +16486,10 @@ Promise.resolve()
|
|
|
16423
16486
|
}
|
|
16424
16487
|
if (void 0 !== value.toolbox_item && !isPlainObject(value.toolbox_item)) formTemplateValidation_pushIssue(issues, path("toolbox_item"), "must be an object");
|
|
16425
16488
|
if (void 0 !== value.layout_metadata && !isPlainObject(value.layout_metadata)) formTemplateValidation_pushIssue(issues, path("layout_metadata"), "must be an object");
|
|
16489
|
+
if (void 0 !== value.help_text && "string" != typeof value.help_text) formTemplateValidation_pushIssue(issues, path("help_text"), "must be a string");
|
|
16426
16490
|
if (void 0 !== value.item_type) if (isPlainObject(value.item_type)) {
|
|
16427
|
-
if (
|
|
16491
|
+
if (void 0 !== value.item_type.table_name) validateNonEmptyString(value.item_type.table_name, path("item_type.table_name"), issues);
|
|
16492
|
+
else if ("number" != typeof value.item_type.table_id) formTemplateValidation_pushIssue(issues, path("item_type.table_id"), "must be a number");
|
|
16428
16493
|
} else formTemplateValidation_pushIssue(issues, path("item_type"), "must be an object");
|
|
16429
16494
|
return issues;
|
|
16430
16495
|
}
|
|
@@ -16497,7 +16562,8 @@ Promise.resolve()
|
|
|
16497
16562
|
"toolbox_item",
|
|
16498
16563
|
"layout_metadata",
|
|
16499
16564
|
"item_type",
|
|
16500
|
-
"slots"
|
|
16565
|
+
"slots",
|
|
16566
|
+
"help_text"
|
|
16501
16567
|
]);
|
|
16502
16568
|
const FRONTMATTER_DISALLOWED_KEYS = new Set([
|
|
16503
16569
|
"container",
|
|
@@ -19577,6 +19643,7 @@ print(json.dumps({"issues": issues}))
|
|
|
19577
19643
|
try {
|
|
19578
19644
|
const previousSubscriptions = this.wsClient?.getDependencySubscriptions() ?? [];
|
|
19579
19645
|
const { response, addedGitignoreEntry } = await refreshDependencyCache(this.repoPath, this.appId, this.anvilUrl, {
|
|
19646
|
+
username: this.username,
|
|
19580
19647
|
includeDocs: true
|
|
19581
19648
|
});
|
|
19582
19649
|
if (addedGitignoreEntry) logger_logger.info("Added /.anvil/ to .gitignore");
|
|
@@ -20154,6 +20221,18 @@ print(json.dumps({"issues": issues}))
|
|
|
20154
20221
|
}
|
|
20155
20222
|
throw new Error("Device login expired before it was approved.");
|
|
20156
20223
|
}
|
|
20224
|
+
function quoteForPosixShell(value) {
|
|
20225
|
+
if ("" === value) return "''";
|
|
20226
|
+
return `'${value.replace(/'/g, "'\"'\"'")}'`;
|
|
20227
|
+
}
|
|
20228
|
+
function quoteForCmdShell(value) {
|
|
20229
|
+
const escaped = value.replace(/[%^&|<>()"!]/g, "^$&");
|
|
20230
|
+
return `"${escaped}"`;
|
|
20231
|
+
}
|
|
20232
|
+
function buildShellCommandLine(tokens) {
|
|
20233
|
+
if ("win32" === process.platform) return tokens.map(quoteForCmdShell).join(" ");
|
|
20234
|
+
return tokens.map(quoteForPosixShell).join(" ");
|
|
20235
|
+
}
|
|
20157
20236
|
const CHECKOUT_ERROR_VALUE = "__ERROR__";
|
|
20158
20237
|
function isAbortLikeError(error) {
|
|
20159
20238
|
if (error instanceof Error && "AbortError" === error.name) return true;
|
|
@@ -20332,6 +20411,122 @@ print(json.dumps({"issues": issues}))
|
|
|
20332
20411
|
}
|
|
20333
20412
|
require("inquirer");
|
|
20334
20413
|
require("ora");
|
|
20414
|
+
class CreateCheckoutError extends Error {
|
|
20415
|
+
created;
|
|
20416
|
+
constructor(message, created, options){
|
|
20417
|
+
super(message, options), this.created = created;
|
|
20418
|
+
this.name = "CreateCheckoutError";
|
|
20419
|
+
}
|
|
20420
|
+
}
|
|
20421
|
+
const create_defaultDeps = {
|
|
20422
|
+
getAccountsForUrl: auth_getAccountsForUrl,
|
|
20423
|
+
getValidAuthToken: auth_getValidAuthToken,
|
|
20424
|
+
createApp: createAnvilApp,
|
|
20425
|
+
checkout: executeCheckout
|
|
20426
|
+
};
|
|
20427
|
+
function validateCheckoutOptions(options) {
|
|
20428
|
+
if (false === options.checkout && (void 0 !== options.directory || void 0 !== options.gitUrl || options.open)) throw new Error("--no-checkout cannot be combined with a destination argument, --directory, --git-url, or --open.");
|
|
20429
|
+
}
|
|
20430
|
+
async function validateCreateInput(options) {
|
|
20431
|
+
validateCheckoutOptions(options);
|
|
20432
|
+
const name = options.name.trim();
|
|
20433
|
+
if (!name) throw new Error("App name is required.");
|
|
20434
|
+
const tags = void 0 === options.tags ? void 0 : [
|
|
20435
|
+
...new Set(options.tags.map((tag)=>tag.trim().toLowerCase()))
|
|
20436
|
+
];
|
|
20437
|
+
if (tags && (tags.length > 20 || tags.some((tag)=>tag.length > 50 || !/^[a-z0-9_-]+$/.test(tag)))) throw new Error("Use at most 20 unique tags, each 1–50 characters: letters, numbers, hyphens, or underscores.");
|
|
20438
|
+
if (false === options.checkout) return {
|
|
20439
|
+
name,
|
|
20440
|
+
tags,
|
|
20441
|
+
destinationPath: void 0
|
|
20442
|
+
};
|
|
20443
|
+
const directory = options.directory ?? sanitizeDirectoryName(name);
|
|
20444
|
+
if (!directory) throw new Error("App name cannot be used as a directory. Pass --directory <PATH>.");
|
|
20445
|
+
const destinationPath = external_path_default().resolve(directory);
|
|
20446
|
+
await validateCheckoutDestination(destinationPath);
|
|
20447
|
+
return {
|
|
20448
|
+
name,
|
|
20449
|
+
tags,
|
|
20450
|
+
destinationPath
|
|
20451
|
+
};
|
|
20452
|
+
}
|
|
20453
|
+
async function executeCreate(options, deps = create_defaultDeps) {
|
|
20454
|
+
const { name, tags, destinationPath } = await validateCreateInput(options);
|
|
20455
|
+
const anvilUrl = config_normalizeAnvilOrigin(options.anvilUrl ?? await resolveCheckoutUrlForApi() ?? "");
|
|
20456
|
+
const gitUrl = void 0 === options.gitUrl ? void 0 : config_normalizeAnvilOrigin(options.gitUrl);
|
|
20457
|
+
const accounts = options.user ? [] : await deps.getAccountsForUrl(anvilUrl);
|
|
20458
|
+
const username = options.user ?? accounts[0];
|
|
20459
|
+
if (!username) throw new Error(`Not logged in to ${anvilUrl}. Run 'anvil login ${anvilUrl}' and retry.`);
|
|
20460
|
+
if (!options.user && accounts.length > 1) throw new Error(`Multiple accounts found for ${anvilUrl}: ${accounts.join(", ")}. Use --user <USERNAME>.`);
|
|
20461
|
+
const authToken = await deps.getValidAuthToken(anvilUrl, username);
|
|
20462
|
+
const created = await deps.createApp({
|
|
20463
|
+
name,
|
|
20464
|
+
anvilUrl,
|
|
20465
|
+
authToken,
|
|
20466
|
+
...tags ? {
|
|
20467
|
+
tags
|
|
20468
|
+
} : {}
|
|
20469
|
+
});
|
|
20470
|
+
if (void 0 === destinationPath) return {
|
|
20471
|
+
appId: created.id,
|
|
20472
|
+
appName: created.name,
|
|
20473
|
+
anvilUrl,
|
|
20474
|
+
username,
|
|
20475
|
+
tags: created.tags ?? tags ?? [],
|
|
20476
|
+
editorUrl: `${anvilUrl}/build/apps/${encodeURIComponent(created.id)}`
|
|
20477
|
+
};
|
|
20478
|
+
try {
|
|
20479
|
+
const checkout = await deps.checkout({
|
|
20480
|
+
input: created.id,
|
|
20481
|
+
directory: destinationPath,
|
|
20482
|
+
anvilUrl,
|
|
20483
|
+
...gitUrl ? {
|
|
20484
|
+
gitUrl
|
|
20485
|
+
} : {},
|
|
20486
|
+
user: username
|
|
20487
|
+
});
|
|
20488
|
+
return {
|
|
20489
|
+
...checkout,
|
|
20490
|
+
tags: created.tags ?? tags ?? []
|
|
20491
|
+
};
|
|
20492
|
+
} catch (error) {
|
|
20493
|
+
const details = {
|
|
20494
|
+
appId: created.id,
|
|
20495
|
+
appName: created.name,
|
|
20496
|
+
anvilUrl,
|
|
20497
|
+
gitUrl,
|
|
20498
|
+
destinationPath,
|
|
20499
|
+
username,
|
|
20500
|
+
tags: created.tags ?? tags ?? []
|
|
20501
|
+
};
|
|
20502
|
+
const retry = buildShellCommandLine([
|
|
20503
|
+
"anvil",
|
|
20504
|
+
"checkout",
|
|
20505
|
+
created.id,
|
|
20506
|
+
destinationPath,
|
|
20507
|
+
"--url",
|
|
20508
|
+
anvilUrl,
|
|
20509
|
+
"--user",
|
|
20510
|
+
username,
|
|
20511
|
+
...gitUrl ? [
|
|
20512
|
+
"--git-url",
|
|
20513
|
+
gitUrl
|
|
20514
|
+
] : []
|
|
20515
|
+
]);
|
|
20516
|
+
const remainingFiles = await isDirectoryNonEmpty(destinationPath).catch(()=>true);
|
|
20517
|
+
const recovery = remainingFiles ? `Inspect the existing checkout at ${destinationPath} before retrying. For Git authentication problems, run ${buildShellCommandLine([
|
|
20518
|
+
"anvil",
|
|
20519
|
+
"git-auth",
|
|
20520
|
+
"doctor",
|
|
20521
|
+
"--repo",
|
|
20522
|
+
destinationPath
|
|
20523
|
+
])}.` : `Retry checkout with: ${retry}`;
|
|
20524
|
+
const message = errors_getErrorMessage(error).replaceAll(authToken, "[REDACTED]").replaceAll(encodeURIComponent(authToken), "[REDACTED]");
|
|
20525
|
+
throw new CreateCheckoutError(`Created app ${created.id} at ${anvilUrl}, but checkout failed: ${message}. Do not rerun create. ${recovery}`, details, {
|
|
20526
|
+
cause: error
|
|
20527
|
+
});
|
|
20528
|
+
}
|
|
20529
|
+
}
|
|
20335
20530
|
const defaultGitAuthDoctorDeps = {
|
|
20336
20531
|
getAppAuthBinding: git_auth_getAppAuthBinding,
|
|
20337
20532
|
getAccountsForUrl: auth_getAccountsForUrl,
|
|
@@ -20787,7 +20982,7 @@ print(json.dumps({"issues": issues}))
|
|
|
20787
20982
|
const token = await getModelToken(options);
|
|
20788
20983
|
process.stdout.write(`${token}\n`);
|
|
20789
20984
|
}
|
|
20790
|
-
async function
|
|
20985
|
+
async function appDetection_decideFallbackUrl(explicitUrl, availableUrls) {
|
|
20791
20986
|
if (explicitUrl) return {
|
|
20792
20987
|
source: "explicit",
|
|
20793
20988
|
url: config_normalizeAnvilUrl(explicitUrl)
|
|
@@ -20873,7 +21068,7 @@ print(json.dumps({"issues": issues}))
|
|
|
20873
21068
|
async function resolveCheckoutUrlForApi(explicitUrl, parsedUrl) {
|
|
20874
21069
|
if (explicitUrl) return config_normalizeAnvilUrl(explicitUrl);
|
|
20875
21070
|
if (parsedUrl) return config_normalizeAnvilUrl(parsedUrl);
|
|
20876
|
-
const decision = await
|
|
21071
|
+
const decision = await appDetection_decideFallbackUrl(void 0);
|
|
20877
21072
|
if ("available-multiple" === decision.source) throw new Error(`Multiple logged-in Anvil URLs found: ${decision.urls.join(", ")}. Use --url <ANVIL_URL> to choose one.`);
|
|
20878
21073
|
return decision.url;
|
|
20879
21074
|
}
|
|
@@ -20933,7 +21128,7 @@ print(json.dumps({"issues": issues}))
|
|
|
20933
21128
|
logger_logger.verbose(external_chalk_default().cyan("Resolved app ID: ") + external_chalk_default().bold(parsed.appId));
|
|
20934
21129
|
const anvilUrl = await resolveCheckoutUrlForApi(options.anvilUrl, parsed.detectedUrl);
|
|
20935
21130
|
if (!anvilUrl) throw new Error("Anvil URL is required. Use --url <ANVIL_URL> or pass an input URL containing the host.");
|
|
20936
|
-
const gitUrl = options.gitUrl
|
|
21131
|
+
const gitUrl = void 0 === options.gitUrl ? anvilUrl : config_normalizeAnvilOrigin(options.gitUrl);
|
|
20937
21132
|
const resolvedUsername = await resolveCheckoutUsernameForApi(anvilUrl, options.user);
|
|
20938
21133
|
if (resolvedUsername) logger_logger.verbose(external_chalk_default().cyan("Using account: ") + external_chalk_default().bold(resolvedUsername));
|
|
20939
21134
|
else logger_logger.verbose(external_chalk_default().cyan("No account preselected; resolving after auth token lookup."));
|
|
@@ -21173,6 +21368,8 @@ exports.CheckoutCloneOptions = __webpack_exports__.CheckoutCloneOptions;
|
|
|
21173
21368
|
exports.CheckoutExecutionDeps = __webpack_exports__.CheckoutExecutionDeps;
|
|
21174
21369
|
exports.CheckoutOptions = __webpack_exports__.CheckoutOptions;
|
|
21175
21370
|
exports.CheckoutResult = __webpack_exports__.CheckoutResult;
|
|
21371
|
+
exports.CreateCheckoutError = __webpack_exports__.CreateCheckoutError;
|
|
21372
|
+
exports.CreatedAnvilApp = __webpack_exports__.CreatedAnvilApp;
|
|
21176
21373
|
exports.DeviceAuthorizationResponse = __webpack_exports__.DeviceAuthorizationResponse;
|
|
21177
21374
|
exports.FormTemplateValidationResult = __webpack_exports__.FormTemplateValidationResult;
|
|
21178
21375
|
exports.GetValidAuthTokenOptions = __webpack_exports__.GetValidAuthTokenOptions;
|
|
@@ -21196,6 +21393,7 @@ exports.branchFromEnvironmentVersion = __webpack_exports__.branchFromEnvironment
|
|
|
21196
21393
|
exports.buildGitAuthDoctorReport = __webpack_exports__.buildGitAuthDoctorReport;
|
|
21197
21394
|
exports.checkUncommittedChanges = __webpack_exports__.checkUncommittedChanges;
|
|
21198
21395
|
exports.clearInMemoryTokens = __webpack_exports__.clearInMemoryTokens;
|
|
21396
|
+
exports.createAnvilApp = __webpack_exports__.createAnvilApp;
|
|
21199
21397
|
exports.createCheckoutPickerSource = __webpack_exports__.createCheckoutPickerSource;
|
|
21200
21398
|
exports.createWatchDiagnostic = __webpack_exports__.createWatchDiagnostic;
|
|
21201
21399
|
exports.createWatchDiagnosticFromMessage = __webpack_exports__.createWatchDiagnosticFromMessage;
|
|
@@ -21203,6 +21401,7 @@ exports.deleteConfig = __webpack_exports__.deleteConfig;
|
|
|
21203
21401
|
exports.detectAppIdsByCommitLookup = __webpack_exports__.detectAppIdsByCommitLookup;
|
|
21204
21402
|
exports.detectAppIdsFromAllRemotes = __webpack_exports__.detectAppIdsFromAllRemotes;
|
|
21205
21403
|
exports.executeCheckout = __webpack_exports__.executeCheckout;
|
|
21404
|
+
exports.executeCreate = __webpack_exports__.executeCreate;
|
|
21206
21405
|
exports.executeGitCredentialOperation = __webpack_exports__.executeGitCredentialOperation;
|
|
21207
21406
|
exports.executeModelTokenOperation = __webpack_exports__.executeModelTokenOperation;
|
|
21208
21407
|
exports.filterCandidates = __webpack_exports__.filterCandidates;
|
|
@@ -21276,6 +21475,8 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
21276
21475
|
"CheckoutExecutionDeps",
|
|
21277
21476
|
"CheckoutOptions",
|
|
21278
21477
|
"CheckoutResult",
|
|
21478
|
+
"CreateCheckoutError",
|
|
21479
|
+
"CreatedAnvilApp",
|
|
21279
21480
|
"DeviceAuthorizationResponse",
|
|
21280
21481
|
"FormTemplateValidationResult",
|
|
21281
21482
|
"GetValidAuthTokenOptions",
|
|
@@ -21299,6 +21500,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
21299
21500
|
"buildGitAuthDoctorReport",
|
|
21300
21501
|
"checkUncommittedChanges",
|
|
21301
21502
|
"clearInMemoryTokens",
|
|
21503
|
+
"createAnvilApp",
|
|
21302
21504
|
"createCheckoutPickerSource",
|
|
21303
21505
|
"createWatchDiagnostic",
|
|
21304
21506
|
"createWatchDiagnosticFromMessage",
|
|
@@ -21306,6 +21508,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
21306
21508
|
"detectAppIdsByCommitLookup",
|
|
21307
21509
|
"detectAppIdsFromAllRemotes",
|
|
21308
21510
|
"executeCheckout",
|
|
21511
|
+
"executeCreate",
|
|
21309
21512
|
"executeGitCredentialOperation",
|
|
21310
21513
|
"executeModelTokenOperation",
|
|
21311
21514
|
"filterCandidates",
|
package/dist/program.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,OAAO,EAAyD,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAiC3G,KAAK,sBAAsB,GAAG,eAAe,GAAG;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAoKF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAO7F;AAmLD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,GAAG,MAAM,EAAE,CAezE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwFzD;AAiBD,wBAAgB,YAAY,IAAI,OAAO,CAuGtC"}
|
|
@@ -21,6 +21,17 @@ export interface ListAppsResponse {
|
|
|
21
21
|
apps: CheckoutAppListItem[];
|
|
22
22
|
next_cursor: string | null;
|
|
23
23
|
}
|
|
24
|
+
export interface CreatedAnvilApp {
|
|
25
|
+
id: string;
|
|
26
|
+
name?: string;
|
|
27
|
+
tags?: string[];
|
|
28
|
+
}
|
|
29
|
+
export declare function createAnvilApp(options: {
|
|
30
|
+
name: string;
|
|
31
|
+
anvilUrl: string;
|
|
32
|
+
authToken: string;
|
|
33
|
+
tags?: string[];
|
|
34
|
+
}): Promise<CreatedAnvilApp>;
|
|
24
35
|
export interface SaveRequestPayload {
|
|
25
36
|
edit_session: string;
|
|
26
37
|
save_sequence: number;
|
|
@@ -73,6 +84,15 @@ export declare function getWebSocketUrl(appId: string, authToken: string, anvilU
|
|
|
73
84
|
* Check for CLI updates from npm registry.
|
|
74
85
|
*/
|
|
75
86
|
export declare function getLatestVersion(): Promise<string | null>;
|
|
87
|
+
export interface GetTestRunSnapshotOptions {
|
|
88
|
+
anvilUrl?: string;
|
|
89
|
+
/** The account to use, when there are several for the URL. */
|
|
90
|
+
username?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get a server test run's snapshot: its `run_id`, `state`, `discovered_tests` and per-test `results`.
|
|
94
|
+
*/
|
|
95
|
+
export declare function getTestRunSnapshot(appId: string, runId: string, options?: GetTestRunSnapshotOptions): Promise<unknown>;
|
|
76
96
|
export interface AppIdCandidate {
|
|
77
97
|
appId: string;
|
|
78
98
|
source: "remote" | "config";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"anvil-api.d.ts","sourceRoot":"","sources":["../../src/services/anvil-api.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAuD,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"anvil-api.d.ts","sourceRoot":"","sources":["../../src/services/anvil-api.ts"],"names":[],"mappings":"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"}
|
package/dist/services/db.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/services/db.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,0BAA0B;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,wBAAsB,mBAAmB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0BAA+B,GACzC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAyBhC"}
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/services/db.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,0BAA0B;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,wBAAsB,mBAAmB,CACrC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,0BAA+B,GACzC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAyBhC"}
|
package/dist/services/deps.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const DEPS_MANIFEST_VERSION =
|
|
1
|
+
declare const DEPS_MANIFEST_VERSION = 3;
|
|
2
2
|
export interface DependencyDocFile {
|
|
3
3
|
path: string;
|
|
4
4
|
content: string;
|
|
@@ -8,11 +8,13 @@ export interface DependencyAssetFile {
|
|
|
8
8
|
content: string;
|
|
9
9
|
}
|
|
10
10
|
export interface FetchAllDependenciesOptions {
|
|
11
|
+
username?: string;
|
|
11
12
|
commit?: string;
|
|
12
13
|
includeDocs?: boolean;
|
|
13
14
|
knownDependencies?: ResolvedDependencyManifestEntry[];
|
|
14
15
|
}
|
|
15
16
|
export interface RefreshDependencyCacheOptions {
|
|
17
|
+
username?: string;
|
|
16
18
|
commit?: string;
|
|
17
19
|
includeDocs?: boolean;
|
|
18
20
|
}
|
|
@@ -68,7 +70,7 @@ interface CachedDependencyManifestEntry extends ResolvedDependencyManifestEntry
|
|
|
68
70
|
export interface DepsCacheManifest {
|
|
69
71
|
version: typeof DEPS_MANIFEST_VERSION;
|
|
70
72
|
includeDocs: boolean;
|
|
71
|
-
source_dependencies: unknown[];
|
|
73
|
+
source_dependencies: unknown[] | null;
|
|
72
74
|
resolved_dependencies: ResolvedDependencyManifestEntry[];
|
|
73
75
|
cached_dependencies: CachedDependencyManifestEntry[];
|
|
74
76
|
}
|
|
@@ -95,6 +97,7 @@ export declare function anvilYamlDependenciesEqual(left: unknown, right: unknown
|
|
|
95
97
|
*/
|
|
96
98
|
export declare function writeAllDepsToCache(projectRoot: string, response: ResolvedDepsResponse, options?: {
|
|
97
99
|
includeDocs?: boolean;
|
|
100
|
+
sourceDependencies?: unknown[] | null;
|
|
98
101
|
}): Promise<void>;
|
|
99
102
|
/**
|
|
100
103
|
* Clear .anvil/deps/ directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"deps.d.ts","sourceRoot":"","sources":["../../src/services/deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface EnsureEnvironmentUrlOptions {
|
|
2
2
|
anvilUrl?: string;
|
|
3
|
+
/** The account to use, when there are several for the URL. */
|
|
4
|
+
username?: string;
|
|
3
5
|
}
|
|
4
6
|
export declare function ensureEnvironmentUrl(appId: string, envPid: string, options?: EnsureEnvironmentUrlOptions): Promise<{
|
|
5
7
|
url: string;
|
|
@@ -7,6 +9,8 @@ export declare function ensureEnvironmentUrl(appId: string, envPid: string, opti
|
|
|
7
9
|
}>;
|
|
8
10
|
export interface GetTemporaryUplinkKeyOptions {
|
|
9
11
|
anvilUrl?: string;
|
|
12
|
+
/** The account to use, when there are several for the URL. */
|
|
13
|
+
username?: string;
|
|
10
14
|
}
|
|
11
15
|
export declare function getTemporaryUplinkKey(appId: string, envPid: string, options?: GetTemporaryUplinkKeyOptions): Promise<{
|
|
12
16
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/services/environment.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,2BAAgC,GAC1C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB9C;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,qBAAqB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,4BAAiC,GAC3C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3D"}
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/services/environment.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,2BAA2B;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,oBAAoB,CACtC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,2BAAgC,GAC1C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB9C;AAED,MAAM,WAAW,4BAA4B;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,qBAAqB,CACvC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,4BAAiC,GAC3C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAiB3D"}
|
|
@@ -4,5 +4,6 @@ export interface OpenPathDeps {
|
|
|
4
4
|
spawnShellCommand: (commandLine: string) => Promise<void>;
|
|
5
5
|
}
|
|
6
6
|
export declare function parseCommandTokens(command: string): string[];
|
|
7
|
+
export declare function buildShellCommandLine(tokens: string[]): string;
|
|
7
8
|
export declare function openPathInEditorOrDefault(targetPath: string, preferredEditorCommand?: string, deps?: OpenPathDeps): Promise<void>;
|
|
8
9
|
//# sourceMappingURL=path-open.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-open.d.ts","sourceRoot":"","sources":["../../src/services/path-open.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAuBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6D5D;
|
|
1
|
+
{"version":3,"file":"path-open.d.ts","sourceRoot":"","sources":["../../src/services/path-open.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,YAAY;IACzB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;IACjD,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAuBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA6D5D;AAcD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAK9D;AAUD,wBAAsB,yBAAyB,CAC3C,UAAU,EAAE,MAAM,EAClB,sBAAsB,CAAC,EAAE,MAAM,EAC/B,IAAI,GAAE,YAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAoBf"}
|
package/dist/services/repl.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export interface RunReplOptions {
|
|
2
2
|
code: string;
|
|
3
3
|
anvilUrl?: string;
|
|
4
|
+
/** The account to use, when there are several for the URL. */
|
|
5
|
+
username?: string;
|
|
4
6
|
/** Receives each output chunk immediately; the result also contains the full transcript. */
|
|
5
7
|
onOutput?: (output: string) => void;
|
|
6
8
|
signal?: AbortSignal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/services/repl.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KACnC,CAAC;CACL;AAwBD,uEAAuE;AACvE,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA2IzG"}
|
|
1
|
+
{"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/services/repl.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;KACnC,CAAC;CACL;AAwBD,uEAAuE;AACvE,wBAAsB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CA2IzG"}
|