veryfront 0.1.1174 → 0.1.1176
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/esm/cli/commands/deploy/command-help.js +2 -2
- package/esm/cli/commands/deploy/command.d.ts +2 -3
- package/esm/cli/commands/deploy/command.d.ts.map +1 -1
- package/esm/cli/commands/deploy/command.js +4 -5
- package/esm/cli/commands/init/config-generator.d.ts +1 -0
- package/esm/cli/commands/init/config-generator.d.ts.map +1 -1
- package/esm/cli/commands/init/config-generator.js +19 -0
- package/esm/cli/commands/init/init-command.d.ts.map +1 -1
- package/esm/cli/commands/init/init-command.js +4 -2
- package/esm/cli/commands/pull/command-help.d.ts.map +1 -1
- package/esm/cli/commands/pull/command-help.js +3 -0
- package/esm/cli/commands/pull/command.d.ts.map +1 -1
- package/esm/cli/commands/pull/command.js +88 -28
- package/esm/cli/commands/pull/project-bootstrap.d.ts +26 -0
- package/esm/cli/commands/pull/project-bootstrap.d.ts.map +1 -0
- package/esm/cli/commands/pull/project-bootstrap.js +155 -0
- package/esm/cli/commands/push/command-help.d.ts.map +1 -1
- package/esm/cli/commands/push/command-help.js +9 -1
- package/esm/cli/commands/push/command.d.ts +7 -1
- package/esm/cli/commands/push/command.d.ts.map +1 -1
- package/esm/cli/commands/push/command.js +21 -5
- package/esm/cli/commands/up/command.d.ts.map +1 -1
- package/esm/cli/commands/up/command.js +14 -15
- package/esm/cli/shared/server-startup.d.ts +1 -0
- package/esm/cli/shared/server-startup.d.ts.map +1 -1
- package/esm/cli/shared/server-startup.js +13 -8
- package/esm/cli/templates/manifest.js +6 -6
- package/esm/deno.js +2 -2
- package/esm/extensions/ext-observability-sentry/src/node.d.ts +9 -0
- package/esm/extensions/ext-observability-sentry/src/node.d.ts.map +1 -0
- package/esm/extensions/ext-observability-sentry/src/node.js +32 -0
- package/esm/extensions/ext-observability-sentry/src/policy.d.ts +43 -0
- package/esm/extensions/ext-observability-sentry/src/policy.d.ts.map +1 -0
- package/esm/extensions/ext-observability-sentry/src/policy.js +108 -0
- package/esm/src/agent/factory.d.ts.map +1 -1
- package/esm/src/agent/factory.js +44 -15
- package/esm/src/agent/hosted/chat-preparation.d.ts.map +1 -1
- package/esm/src/agent/hosted/chat-preparation.js +13 -19
- package/esm/src/agent/hosted/chat-runtime-contract.d.ts +3 -0
- package/esm/src/agent/hosted/chat-runtime-contract.d.ts.map +1 -1
- package/esm/src/agent/hosted/cloud-agent-child-tools.d.ts +9 -2
- package/esm/src/agent/hosted/cloud-agent-child-tools.d.ts.map +1 -1
- package/esm/src/agent/hosted/cloud-agent-child-tools.js +43 -30
- package/esm/src/agent/hosted/default-chat-runtime.d.ts +1 -0
- package/esm/src/agent/hosted/default-chat-runtime.d.ts.map +1 -1
- package/esm/src/agent/hosted/default-chat-runtime.js +1 -0
- package/esm/src/agent/hosted/default-invoke-agent-tool.d.ts +1 -0
- package/esm/src/agent/hosted/default-invoke-agent-tool.d.ts.map +1 -1
- package/esm/src/agent/hosted/default-project-steering-refresh.d.ts.map +1 -1
- package/esm/src/agent/hosted/default-project-steering-refresh.js +41 -3
- package/esm/src/agent/hosted/project-steering-adapter.d.ts +2 -0
- package/esm/src/agent/hosted/project-steering-adapter.d.ts.map +1 -1
- package/esm/src/agent/hosted/project-steering-adapter.js +26 -11
- package/esm/src/agent/hosted/runtime-essential-tools.d.ts.map +1 -1
- package/esm/src/agent/hosted/runtime-essential-tools.js +27 -5
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts +5 -1
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.d.ts.map +1 -1
- package/esm/src/agent/hosted/veryfront-cloud-agent-service.js +67 -7
- package/esm/src/agent/index.d.ts +1 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/project/context.d.ts +1 -0
- package/esm/src/agent/project/context.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-runtime-step.d.ts.map +1 -1
- package/esm/src/agent/runtime/agent-runtime-step.js +17 -2
- package/esm/src/agent/runtime/index.js +14 -14
- package/esm/src/agent/runtime/load-skill-tool.d.ts +2 -0
- package/esm/src/agent/runtime/load-skill-tool.d.ts.map +1 -1
- package/esm/src/agent/runtime/load-skill-tool.js +14 -11
- package/esm/src/agent/runtime/skill-metadata.d.ts +13 -0
- package/esm/src/agent/runtime/skill-metadata.d.ts.map +1 -1
- package/esm/src/agent/runtime/skill-metadata.js +19 -0
- package/esm/src/agent/service/bootstrap.d.ts +2 -0
- package/esm/src/agent/service/bootstrap.d.ts.map +1 -1
- package/esm/src/agent/service/bootstrap.js +9 -1
- package/esm/src/agent/service/node-runtime-infrastructure.d.ts +3 -1
- package/esm/src/agent/service/node-runtime-infrastructure.d.ts.map +1 -1
- package/esm/src/agent/service/node-runtime-infrastructure.js +13 -0
- package/esm/src/agent/service/node-sentry.d.ts +35 -0
- package/esm/src/agent/service/node-sentry.d.ts.map +1 -0
- package/esm/src/agent/service/node-sentry.js +242 -0
- package/esm/src/agent/service/runtime.d.ts +1 -0
- package/esm/src/agent/service/runtime.d.ts.map +1 -1
- package/esm/src/agent/service/runtime.js +33 -5
- package/esm/src/agent/types.d.ts +22 -8
- package/esm/src/agent/types.d.ts.map +1 -1
- package/esm/src/channels/control-plane.d.ts.map +1 -1
- package/esm/src/channels/control-plane.js +34 -1
- package/esm/src/discovery/discovery-engine.d.ts.map +1 -1
- package/esm/src/discovery/discovery-engine.js +1 -0
- package/esm/src/discovery/project-discovery-config.d.ts +1 -0
- package/esm/src/discovery/project-discovery-config.d.ts.map +1 -1
- package/esm/src/discovery/project-discovery-config.js +1 -0
- package/esm/src/discovery/transpiler.d.ts.map +1 -1
- package/esm/src/discovery/transpiler.js +7 -8
- package/esm/src/discovery/types.d.ts +4 -0
- package/esm/src/discovery/types.d.ts.map +1 -1
- package/esm/src/observability/application-errors.d.ts +1 -0
- package/esm/src/observability/application-errors.d.ts.map +1 -1
- package/esm/src/observability/application-errors.js +12 -2
- package/esm/src/server/bootstrap.d.ts +1 -0
- package/esm/src/server/bootstrap.d.ts.map +1 -1
- package/esm/src/server/bootstrap.js +18 -9
- package/esm/src/server/handlers/request/api/project-discovery.d.ts.map +1 -1
- package/esm/src/server/handlers/request/api/project-discovery.js +7 -2
- package/esm/src/server/service-server.d.ts.map +1 -1
- package/esm/src/server/service-server.js +21 -2
- package/esm/src/skill/registry.d.ts +9 -0
- package/esm/src/skill/registry.d.ts.map +1 -1
- package/esm/src/skill/registry.js +21 -0
- package/esm/src/skill/selector.d.ts +41 -0
- package/esm/src/skill/selector.d.ts.map +1 -0
- package/esm/src/skill/selector.js +76 -0
- package/esm/src/skill/tools.d.ts +8 -4
- package/esm/src/skill/tools.d.ts.map +1 -1
- package/esm/src/skill/tools.js +34 -6
- package/esm/src/utils/logger/index.d.ts +1 -1
- package/esm/src/utils/logger/index.d.ts.map +1 -1
- package/esm/src/utils/logger/index.js +1 -1
- package/esm/src/utils/logger/logger.d.ts +3 -1
- package/esm/src/utils/logger/logger.d.ts.map +1 -1
- package/esm/src/utils/logger/logger.js +25 -5
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +5 -5
|
@@ -6,7 +6,7 @@ export const deployHelp = {
|
|
|
6
6
|
options: [
|
|
7
7
|
{
|
|
8
8
|
flag: "-b, --branch <name>",
|
|
9
|
-
description: "Branch to release from (default:
|
|
9
|
+
description: "Branch to release from (default: main)",
|
|
10
10
|
},
|
|
11
11
|
{
|
|
12
12
|
flag: "-e, --env, --environment <name>",
|
|
@@ -35,7 +35,7 @@ export const deployHelp = {
|
|
|
35
35
|
notes: [
|
|
36
36
|
"Requires VERYFRONT_API_TOKEN or an authenticated Veryfront login",
|
|
37
37
|
"Creates or links a project when veryfront.json is not present",
|
|
38
|
-
"Promotes
|
|
38
|
+
"Promotes main when --branch is omitted",
|
|
39
39
|
"Pushes main before the first deploy when no verified push exists",
|
|
40
40
|
"Creates a new release from the resolved branch",
|
|
41
41
|
"Verifies the target environment points to the created deployment before succeeding",
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deploy command - Create a release and deploy to an environment
|
|
3
3
|
*
|
|
4
|
-
* Creates a new release from the specified branch,
|
|
5
|
-
*
|
|
6
|
-
* target environment (default: production).
|
|
4
|
+
* Creates a new release from the specified branch, or main when no branch is
|
|
5
|
+
* specified, then deploys it to the target environment (default: production).
|
|
7
6
|
*
|
|
8
7
|
* @module cli/commands/deploy
|
|
9
8
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/command.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/deploy/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deploy command - Create a release and deploy to an environment
|
|
3
3
|
*
|
|
4
|
-
* Creates a new release from the specified branch,
|
|
5
|
-
*
|
|
6
|
-
* target environment (default: production).
|
|
4
|
+
* Creates a new release from the specified branch, or main when no branch is
|
|
5
|
+
* specified, then deploys it to the target environment (default: production).
|
|
7
6
|
*
|
|
8
7
|
* @module cli/commands/deploy
|
|
9
8
|
*/
|
|
@@ -738,7 +737,7 @@ export async function deployCommand(options) {
|
|
|
738
737
|
};
|
|
739
738
|
const environmentConfig = await runWithProgress(getEnvironmentConfig);
|
|
740
739
|
const receipt = await runWithProgress(() => readPushReceipt(projectDir));
|
|
741
|
-
const branch = requestedBranch ??
|
|
740
|
+
const branch = requestedBranch ?? "main";
|
|
742
741
|
const setup = await runWithProgress(() => ensureProjectLinkedForDeploy(projectDir, environmentConfig, receipt, dryRun, quiet));
|
|
743
742
|
let { config, client, project } = setup;
|
|
744
743
|
const bootstrapPush = needsBootstrapPush(receipt, skipSourcePush);
|
|
@@ -920,7 +919,7 @@ async function deployCommandJson(options) {
|
|
|
920
919
|
streamJsonLine({ type: "step", name: "resolve-config", status: "started" });
|
|
921
920
|
const environmentConfig = getEnvironmentConfig();
|
|
922
921
|
const receipt = await readPushReceipt(projectDir);
|
|
923
|
-
const branch = requestedBranch ??
|
|
922
|
+
const branch = requestedBranch ?? "main";
|
|
924
923
|
const setup = await ensureProjectLinkedForDeploy(projectDir, environmentConfig, receipt, dryRun, true);
|
|
925
924
|
let { config, client, project } = setup;
|
|
926
925
|
const bootstrapPush = needsBootstrapPush(receipt, skipSourcePush);
|
|
@@ -15,4 +15,5 @@ export interface CreatePackageJsonOptions {
|
|
|
15
15
|
}>;
|
|
16
16
|
}
|
|
17
17
|
export declare function createPackageJson(projectDir: string, projectName?: string, options?: CreatePackageJsonOptions): Promise<void>;
|
|
18
|
+
export declare function createTypeScriptConfig(projectDir: string): Promise<void>;
|
|
18
19
|
//# sourceMappingURL=config-generator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/config-generator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/config-generator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,wBAAwB;IACvC,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,sFAAsF;IACtF,oBAAoB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzC;;;;;OAKG;IACH,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC1C,CAAC,CAAC;CACJ;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAoEf;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB9E"}
|
|
@@ -41,6 +41,7 @@ export async function createPackageJson(projectDir, projectName, options = {}) {
|
|
|
41
41
|
build: "veryfront build",
|
|
42
42
|
start: "veryfront serve",
|
|
43
43
|
eval: "veryfront eval",
|
|
44
|
+
deploy: "veryfront deploy",
|
|
44
45
|
},
|
|
45
46
|
pnpm: {
|
|
46
47
|
onlyBuiltDependencies: ["esbuild"],
|
|
@@ -57,3 +58,21 @@ export async function createPackageJson(projectDir, projectName, options = {}) {
|
|
|
57
58
|
await fs.writeTextFile(join(projectDir, "package.json"), JSON.stringify(packageJson, null, 2));
|
|
58
59
|
logger.debug('Created package.json with "type": "module"');
|
|
59
60
|
}
|
|
61
|
+
export async function createTypeScriptConfig(projectDir) {
|
|
62
|
+
const fs = createFileSystem();
|
|
63
|
+
const tsConfig = {
|
|
64
|
+
compilerOptions: {
|
|
65
|
+
target: "ES2022",
|
|
66
|
+
module: "ESNext",
|
|
67
|
+
moduleResolution: "bundler",
|
|
68
|
+
strict: true,
|
|
69
|
+
jsx: "react-jsx",
|
|
70
|
+
skipLibCheck: true,
|
|
71
|
+
esModuleInterop: true,
|
|
72
|
+
paths: { "@/*": ["./*"] },
|
|
73
|
+
},
|
|
74
|
+
include: ["**/*.ts", "**/*.tsx"],
|
|
75
|
+
exclude: ["node_modules"],
|
|
76
|
+
};
|
|
77
|
+
await fs.writeTextFile(join(projectDir, "tsconfig.json"), `${JSON.stringify(tsConfig, null, 2)}\n`);
|
|
78
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/init-command.ts"],"names":[],"mappings":"AAAA;;;iCAGiC;AAUjC,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,YAAY,CAAC;AAwKzE,UAAU,uBAAuB;IAC/B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAyFD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,YAAY,GAAE,uBAA4B,GACzC,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"init-command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init/init-command.ts"],"names":[],"mappings":"AAAA;;;iCAGiC;AAUjC,OAAO,KAAK,EAAE,WAAW,EAA6B,MAAM,YAAY,CAAC;AAwKzE,UAAU,uBAAuB;IAC/B,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAyFD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,WAAW,EACpB,YAAY,GAAE,uBAA4B,GACzC,OAAO,CAAC,IAAI,CAAC,CA8Yf"}
|
|
@@ -439,7 +439,9 @@ export async function initCommand(options, dependencies = {}) {
|
|
|
439
439
|
}
|
|
440
440
|
// Deploy to cloud if --deploy flag is set
|
|
441
441
|
let deployedUrl;
|
|
442
|
-
const manualDeployCommand =
|
|
442
|
+
const manualDeployCommand = quiet
|
|
443
|
+
? `${getDlxCommand(pmPreference)} veryfront deploy`
|
|
444
|
+
: getRunCommand(pmPreference, "deploy");
|
|
443
445
|
if (options.deploy) {
|
|
444
446
|
const manualDeployHint = `Run ${brand(manualDeployCommand)} to deploy later.`;
|
|
445
447
|
if (dependencies.deployProject) {
|
|
@@ -518,7 +520,7 @@ export async function initCommand(options, dependencies = {}) {
|
|
|
518
520
|
const displayName = projectName ?? "Project";
|
|
519
521
|
const structureRoot = projectName ?? ".";
|
|
520
522
|
const structureLines = renderProjectStructure(structureRoot, createdPaths);
|
|
521
|
-
const deployCommandHint =
|
|
523
|
+
const deployCommandHint = getRunCommand(pm, "deploy");
|
|
522
524
|
if (!quiet) {
|
|
523
525
|
console.log();
|
|
524
526
|
console.log(` ✓ ${displayName} ready`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pull/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pull/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,WA+EtB,CAAC"}
|
|
@@ -71,6 +71,9 @@ export const pullHelp = {
|
|
|
71
71
|
"--prune --dry-run can preview anywhere and never writes or deletes local files",
|
|
72
72
|
"Only supported text files are managed; ignored, unsupported, and binary files remain unchanged",
|
|
73
73
|
"Pull preserves remote bytes exactly, including line endings and a missing final newline",
|
|
74
|
+
"A successful pull stores the canonical project link and creates missing package.json and tsconfig.json files",
|
|
75
|
+
"Pull confirms before writing managed files, pruning files, or creating bootstrap files; use --yes to skip",
|
|
76
|
+
"Pull never overwrites downloaded or existing bootstrap files; --dry-run reports planned bootstrap writes",
|
|
74
77
|
"Invalid, duplicate, reserved, or symlink-traversing remote paths fail before local writes",
|
|
75
78
|
"A fetch failure causes no writes or pruning; a local write or delete failure exits with an error",
|
|
76
79
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pull/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAM3E,OAAO,EACL,eAAe,EAIhB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pull/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAM3E,OAAO,EACL,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAwBhC;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;GAa7B,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;GAAgC,CAAC;AAE5D,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;AAEzE;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;GAWxB,CAAC;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oDAAoD;IACpD,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAKlE;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAsCD,sEAAsE;AACtE,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmB/D;AAkDD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAcjF;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAC1C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC,CAoBxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAoBjG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,EAC1C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,GACjB,OAAO,CAAC,MAAM,CAAC,CAKjB;AA2eD;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2LpE"}
|
|
@@ -21,6 +21,8 @@ import { ERROR_REGISTRY, getErrorBySlug, INVALID_ARGUMENT, RESOURCE_NOT_FOUND, V
|
|
|
21
21
|
import { withSpan } from "../../../src/observability/tracing/otlp-setup.js";
|
|
22
22
|
import { CommonArgs, createArgParser } from "../../shared/args.js";
|
|
23
23
|
import { createIgnoreChecker, loadIgnorePatterns } from "../../sync/ignore.js";
|
|
24
|
+
import { getProjectTarget } from "../../shared/deployment-provenance.js";
|
|
25
|
+
import { ensurePulledProjectBootstrap, isPulledProjectBootstrapPath, planPulledProjectBootstrap, preflightPulledProjectBootstrap, } from "./project-bootstrap.js";
|
|
24
26
|
/**
|
|
25
27
|
* Schema factory for pull command arguments
|
|
26
28
|
*/
|
|
@@ -378,6 +380,9 @@ function errorSlug(error) {
|
|
|
378
380
|
const slug = error?.slug;
|
|
379
381
|
return typeof slug === "string" ? slug : undefined;
|
|
380
382
|
}
|
|
383
|
+
function isProjectLinkResolutionError(error) {
|
|
384
|
+
return describeError(error).includes(".veryfront/project.json");
|
|
385
|
+
}
|
|
381
386
|
function pullProjectListError(projectSlug, sourceLabel, error) {
|
|
382
387
|
const message = [
|
|
383
388
|
`Failed to list files for project "${projectSlug}" from ${sourceLabel}: ${describeError(error)}.`,
|
|
@@ -393,7 +398,7 @@ function pullProjectListError(projectSlug, sourceLabel, error) {
|
|
|
393
398
|
}
|
|
394
399
|
return wrapped;
|
|
395
400
|
}
|
|
396
|
-
async function confirmPullWrite(projectDir, writeCount, deleteCount) {
|
|
401
|
+
async function confirmPullWrite(projectDir, writeCount, deleteCount, bootstrapWriteCount) {
|
|
397
402
|
if (isInteractive() && !isTTY()) {
|
|
398
403
|
throw INVALID_ARGUMENT.create({
|
|
399
404
|
detail: `Pull requires confirmation before writing files, but no interactive prompt is available. ` +
|
|
@@ -402,9 +407,12 @@ async function confirmPullWrite(projectDir, writeCount, deleteCount) {
|
|
|
402
407
|
}
|
|
403
408
|
const actions = [];
|
|
404
409
|
if (writeCount > 0)
|
|
405
|
-
actions.push(`
|
|
410
|
+
actions.push(`write ${writeCount} managed local files`);
|
|
406
411
|
if (deleteCount > 0)
|
|
407
412
|
actions.push(`delete ${deleteCount} managed local files`);
|
|
413
|
+
if (bootstrapWriteCount > 0) {
|
|
414
|
+
actions.push(`create or update ${bootstrapWriteCount} local project files`);
|
|
415
|
+
}
|
|
408
416
|
const action = actions.join(" and ");
|
|
409
417
|
return await confirmPrompt(`This will ${action} in ${projectDir}. Continue?`, false);
|
|
410
418
|
}
|
|
@@ -424,9 +432,7 @@ async function pullSingleProject(projectSlug, projectDir, source, force, dryRun,
|
|
|
424
432
|
finally {
|
|
425
433
|
spinner.stop();
|
|
426
434
|
}
|
|
427
|
-
const
|
|
428
|
-
? createIgnoreChecker(await loadIgnorePatterns(projectDir))
|
|
429
|
-
: null;
|
|
435
|
+
const ignoreChecker = createIgnoreChecker(await loadIgnorePatterns(projectDir));
|
|
430
436
|
const writeOps = [];
|
|
431
437
|
const remotePaths = new Set();
|
|
432
438
|
for (const file of files) {
|
|
@@ -444,9 +450,8 @@ async function pullSingleProject(projectSlug, projectDir, source, force, dryRun,
|
|
|
444
450
|
cause: error,
|
|
445
451
|
});
|
|
446
452
|
}
|
|
447
|
-
if (
|
|
448
|
-
|
|
449
|
-
!pruneIgnoreChecker.isSupportedExtension(op.relativePath))) {
|
|
453
|
+
if (ignoreChecker.isIgnored(op.relativePath) ||
|
|
454
|
+
!ignoreChecker.isSupportedExtension(op.relativePath)) {
|
|
450
455
|
continue;
|
|
451
456
|
}
|
|
452
457
|
if (typeof file.content !== "string") {
|
|
@@ -457,27 +462,56 @@ async function pullSingleProject(projectSlug, projectDir, source, force, dryRun,
|
|
|
457
462
|
writeOps.push({ ...op, content: file.content });
|
|
458
463
|
}
|
|
459
464
|
let deleteOps = [];
|
|
460
|
-
if (
|
|
465
|
+
if (prune) {
|
|
461
466
|
const managedRemotePaths = new Set(writeOps.map((op) => op.relativePath));
|
|
462
|
-
const localFiles = await listManagedLocalFiles(projectDir,
|
|
463
|
-
deleteOps = localFiles.filter((file) => !managedRemotePaths.has(file.relativePath)
|
|
464
|
-
|
|
465
|
-
|
|
467
|
+
const localFiles = await listManagedLocalFiles(projectDir, ignoreChecker);
|
|
468
|
+
deleteOps = localFiles.filter((file) => !managedRemotePaths.has(file.relativePath) &&
|
|
469
|
+
!isPulledProjectBootstrapPath(file.relativePath));
|
|
470
|
+
}
|
|
471
|
+
const project = await getProjectTarget(client, projectSlug);
|
|
472
|
+
const pulledPaths = new Set(writeOps.map((op) => op.relativePath));
|
|
473
|
+
const deletedPaths = new Set(deleteOps.map((op) => op.relativePath));
|
|
474
|
+
await preflightPulledProjectBootstrap({ projectDir });
|
|
475
|
+
const bootstrapPlan = await planPulledProjectBootstrap({
|
|
476
|
+
projectDir,
|
|
477
|
+
config,
|
|
478
|
+
project,
|
|
479
|
+
pulledPaths,
|
|
480
|
+
deletedPaths,
|
|
481
|
+
dryRun,
|
|
482
|
+
quiet,
|
|
483
|
+
});
|
|
484
|
+
const hasFileOperations = writeOps.length > 0 || deleteOps.length > 0;
|
|
485
|
+
if (!hasFileOperations && bootstrapPlan.writeCount === 0) {
|
|
466
486
|
if (!quiet)
|
|
467
487
|
logInfo(`No files to pull from ${projectSlug}.`);
|
|
468
|
-
return { written: 0, deleted: 0, cancelled: false };
|
|
469
488
|
}
|
|
470
|
-
if (!quiet) {
|
|
489
|
+
if (!quiet && hasFileOperations) {
|
|
471
490
|
const deleteSummary = deleteOps.length > 0 ? ` and ${deleteOps.length} to delete` : "";
|
|
472
491
|
cliLogger.info(`\nFound ${writeOps.length} files to ${dryRun ? "pull" : "write"}${deleteSummary} from ${projectSlug}.`);
|
|
473
492
|
}
|
|
474
|
-
if (!force &&
|
|
475
|
-
|
|
493
|
+
if (!force &&
|
|
494
|
+
!dryRun &&
|
|
495
|
+
(hasFileOperations || bootstrapPlan.writeCount > 0)) {
|
|
496
|
+
const confirmed = await confirmPullWrite(projectDir, writeOps.length, deleteOps.length, bootstrapPlan.writeCount);
|
|
476
497
|
if (!confirmed) {
|
|
477
498
|
cliLogger.info("Pull cancelled.");
|
|
478
499
|
return { written: 0, deleted: 0, cancelled: true };
|
|
479
500
|
}
|
|
480
501
|
}
|
|
502
|
+
if (!hasFileOperations) {
|
|
503
|
+
await ensurePulledProjectBootstrap({
|
|
504
|
+
projectDir,
|
|
505
|
+
config,
|
|
506
|
+
project,
|
|
507
|
+
pulledPaths,
|
|
508
|
+
deletedPaths,
|
|
509
|
+
dryRun,
|
|
510
|
+
quiet,
|
|
511
|
+
plan: bootstrapPlan,
|
|
512
|
+
});
|
|
513
|
+
return { written: 0, deleted: 0, cancelled: false };
|
|
514
|
+
}
|
|
481
515
|
spinner = quiet ? createNoopSpinner() : createSpinner(`Writing files to ${projectDir}...`);
|
|
482
516
|
const writeResult = await writeFiles(writeOps, dryRun);
|
|
483
517
|
if (writeResult.failed > 0) {
|
|
@@ -489,6 +523,16 @@ async function pullSingleProject(projectSlug, projectDir, source, force, dryRun,
|
|
|
489
523
|
if (deleteResult.failed > 0) {
|
|
490
524
|
throw new Error(`Failed to prune ${deleteResult.failed} local file${deleteResult.failed === 1 ? "" : "s"}. Some files may have changed. Review git status and restore a clean worktree before retrying.`);
|
|
491
525
|
}
|
|
526
|
+
await ensurePulledProjectBootstrap({
|
|
527
|
+
projectDir,
|
|
528
|
+
config,
|
|
529
|
+
project,
|
|
530
|
+
pulledPaths,
|
|
531
|
+
deletedPaths,
|
|
532
|
+
dryRun,
|
|
533
|
+
quiet,
|
|
534
|
+
plan: bootstrapPlan,
|
|
535
|
+
});
|
|
492
536
|
if (!quiet) {
|
|
493
537
|
if (dryRun) {
|
|
494
538
|
logInfo(`Dry run complete for ${projectSlug}. Would write ${writeResult.written} and delete ${deleteResult.deleted} files.`);
|
|
@@ -543,18 +587,34 @@ export function pullCommand(options = {}) {
|
|
|
543
587
|
}
|
|
544
588
|
catch (error) {
|
|
545
589
|
spinner.stop();
|
|
546
|
-
if (
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
590
|
+
if (slugOverride && isProjectLinkResolutionError(error)) {
|
|
591
|
+
const env = getEnvironmentConfig();
|
|
592
|
+
const token = getApiTokenEnv(env) ?? configFile?.apiToken;
|
|
593
|
+
if (token) {
|
|
594
|
+
config = {
|
|
595
|
+
apiUrl: resolveCliApiUrl(env, configFile?.apiUrl),
|
|
596
|
+
apiToken: token,
|
|
597
|
+
projectSlug: slugOverride,
|
|
598
|
+
};
|
|
599
|
+
}
|
|
600
|
+
else {
|
|
601
|
+
throw error;
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
else {
|
|
605
|
+
if (!projects?.length)
|
|
606
|
+
throw error;
|
|
607
|
+
const env = getEnvironmentConfig();
|
|
608
|
+
const token = getApiTokenEnv(env) ?? configFile?.apiToken;
|
|
609
|
+
if (!token) {
|
|
610
|
+
throw new Error("VERYFRONT_API_TOKEN environment variable or apiToken in veryfront.json is required when using --projects");
|
|
611
|
+
}
|
|
612
|
+
config = {
|
|
613
|
+
apiUrl: resolveCliApiUrl(env, configFile?.apiUrl),
|
|
614
|
+
apiToken: token,
|
|
615
|
+
projectSlug: "",
|
|
616
|
+
};
|
|
552
617
|
}
|
|
553
|
-
config = {
|
|
554
|
-
apiUrl: resolveCliApiUrl(env, configFile?.apiUrl),
|
|
555
|
-
apiToken: token,
|
|
556
|
-
projectSlug: "",
|
|
557
|
-
};
|
|
558
618
|
}
|
|
559
619
|
if (prune && !dryRun) {
|
|
560
620
|
spinner.update("Checking Git worktree...");
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../../shared/config.js";
|
|
2
|
+
import { type ProjectTarget } from "../../shared/deployment-provenance.js";
|
|
3
|
+
export interface PulledProjectBootstrapPlan {
|
|
4
|
+
projectLinkAction: "create" | "update" | null;
|
|
5
|
+
createPackageJson: boolean;
|
|
6
|
+
createTsconfig: boolean;
|
|
7
|
+
writeCount: number;
|
|
8
|
+
}
|
|
9
|
+
export interface PulledProjectBootstrapOptions {
|
|
10
|
+
projectDir: string;
|
|
11
|
+
config: ResolvedConfig;
|
|
12
|
+
project: ProjectTarget;
|
|
13
|
+
pulledPaths: ReadonlySet<string>;
|
|
14
|
+
deletedPaths: ReadonlySet<string>;
|
|
15
|
+
dryRun: boolean;
|
|
16
|
+
quiet: boolean;
|
|
17
|
+
plan?: PulledProjectBootstrapPlan;
|
|
18
|
+
}
|
|
19
|
+
export interface PulledProjectBootstrapPreflightOptions {
|
|
20
|
+
projectDir: string;
|
|
21
|
+
}
|
|
22
|
+
export declare function isPulledProjectBootstrapPath(relativePath: string): boolean;
|
|
23
|
+
export declare function preflightPulledProjectBootstrap(options: PulledProjectBootstrapPreflightOptions): Promise<void>;
|
|
24
|
+
export declare function planPulledProjectBootstrap(options: PulledProjectBootstrapOptions): Promise<PulledProjectBootstrapPlan>;
|
|
25
|
+
export declare function ensurePulledProjectBootstrap(options: PulledProjectBootstrapOptions): Promise<void>;
|
|
26
|
+
//# sourceMappingURL=project-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-bootstrap.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/pull/project-bootstrap.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAYlG,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC9C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,0BAA0B,CAAC;CACnC;AAED,MAAM,WAAW,sCAAsC;IACrD,UAAU,EAAE,MAAM,CAAC;CACpB;AA8CD,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAE1E;AAED,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,sCAAsC,GAC9C,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,0BAA0B,CAAC,CAkCrC;AAED,wBAAsB,4BAA4B,CAChD,OAAO,EAAE,6BAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Ef"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import * as dntShim from "../../../_dnt.shims.js";
|
|
2
|
+
import { createFileSystem } from "../../../src/platform/index.js";
|
|
3
|
+
import { join } from "../../../src/platform/compat/path/index.js";
|
|
4
|
+
import { isNotFoundError } from "../../../src/fs/index.js";
|
|
5
|
+
import { cliLogger } from "../../utils/index.js";
|
|
6
|
+
import { clearProjectLink, readProjectLink, writeProjectLink } from "../../shared/project-link.js";
|
|
7
|
+
import { normalizeControlPlane } from "../../shared/deployment-provenance.js";
|
|
8
|
+
import { createPackageJson, createTypeScriptConfig } from "../init/config-generator.js";
|
|
9
|
+
const PACKAGE_JSON_PATH = "package.json";
|
|
10
|
+
const TSCONFIG_PATH = "tsconfig.json";
|
|
11
|
+
const PROJECT_LINK_PATH = ".veryfront/project.json";
|
|
12
|
+
const LOCAL_BOOTSTRAP_PATHS = new Set([
|
|
13
|
+
PACKAGE_JSON_PATH,
|
|
14
|
+
TSCONFIG_PATH,
|
|
15
|
+
PROJECT_LINK_PATH,
|
|
16
|
+
]);
|
|
17
|
+
async function pathExistsInFinalState(projectDir, relativePath, pulledPaths, deletedPaths) {
|
|
18
|
+
if (pulledPaths.has(relativePath))
|
|
19
|
+
return true;
|
|
20
|
+
if (deletedPaths.has(relativePath))
|
|
21
|
+
return false;
|
|
22
|
+
const fs = createFileSystem();
|
|
23
|
+
return await fs.exists(join(projectDir, relativePath));
|
|
24
|
+
}
|
|
25
|
+
async function removeIfPresent(path) {
|
|
26
|
+
try {
|
|
27
|
+
await dntShim.Deno.remove(path);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
if (!isNotFoundError(error))
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function describeError(error) {
|
|
35
|
+
return error instanceof Error ? error.message : String(error);
|
|
36
|
+
}
|
|
37
|
+
async function assertRegularBootstrapFile(projectDir, relativePath) {
|
|
38
|
+
try {
|
|
39
|
+
const info = await dntShim.Deno.lstat(join(projectDir, relativePath));
|
|
40
|
+
if (info.isSymlink) {
|
|
41
|
+
throw new Error(`Veryfront pull does not support a symbolic link at "${relativePath}". Replace the link with a regular file and run veryfront pull again.`);
|
|
42
|
+
}
|
|
43
|
+
if (!info.isFile) {
|
|
44
|
+
throw new Error(`Veryfront pull requires "${relativePath}" to be a regular file.`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (isNotFoundError(error))
|
|
49
|
+
return;
|
|
50
|
+
throw error;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function isPulledProjectBootstrapPath(relativePath) {
|
|
54
|
+
return LOCAL_BOOTSTRAP_PATHS.has(relativePath);
|
|
55
|
+
}
|
|
56
|
+
export async function preflightPulledProjectBootstrap(options) {
|
|
57
|
+
await readProjectLink(options.projectDir);
|
|
58
|
+
await assertRegularBootstrapFile(options.projectDir, PACKAGE_JSON_PATH);
|
|
59
|
+
await assertRegularBootstrapFile(options.projectDir, TSCONFIG_PATH);
|
|
60
|
+
}
|
|
61
|
+
export async function planPulledProjectBootstrap(options) {
|
|
62
|
+
const projectLink = await readProjectLink(options.projectDir);
|
|
63
|
+
const plannedProjectLink = {
|
|
64
|
+
controlPlane: options.config.apiUrl,
|
|
65
|
+
projectId: options.project.id,
|
|
66
|
+
projectSlug: options.project.slug,
|
|
67
|
+
};
|
|
68
|
+
const projectLinkMatches = projectLink &&
|
|
69
|
+
normalizeControlPlane(projectLink.controlPlane) ===
|
|
70
|
+
normalizeControlPlane(plannedProjectLink.controlPlane) &&
|
|
71
|
+
projectLink.projectId === plannedProjectLink.projectId &&
|
|
72
|
+
projectLink.projectSlug === plannedProjectLink.projectSlug;
|
|
73
|
+
const projectLinkAction = projectLinkMatches ? null : projectLink ? "update" : "create";
|
|
74
|
+
const createPackageJson = !(await pathExistsInFinalState(options.projectDir, PACKAGE_JSON_PATH, options.pulledPaths, options.deletedPaths));
|
|
75
|
+
const createTsconfig = !(await pathExistsInFinalState(options.projectDir, TSCONFIG_PATH, options.pulledPaths, options.deletedPaths));
|
|
76
|
+
return {
|
|
77
|
+
projectLinkAction,
|
|
78
|
+
createPackageJson,
|
|
79
|
+
createTsconfig,
|
|
80
|
+
writeCount: Number(projectLinkAction !== null) +
|
|
81
|
+
Number(createPackageJson) +
|
|
82
|
+
Number(createTsconfig),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
export async function ensurePulledProjectBootstrap(options) {
|
|
86
|
+
const plan = options.plan ?? await planPulledProjectBootstrap(options);
|
|
87
|
+
if (options.dryRun) {
|
|
88
|
+
if (!options.quiet) {
|
|
89
|
+
if (plan.projectLinkAction) {
|
|
90
|
+
cliLogger.info(` Would ${plan.projectLinkAction}: ${PROJECT_LINK_PATH}`);
|
|
91
|
+
}
|
|
92
|
+
if (plan.createPackageJson)
|
|
93
|
+
cliLogger.info(` Would create: ${PACKAGE_JSON_PATH}`);
|
|
94
|
+
if (plan.createTsconfig)
|
|
95
|
+
cliLogger.info(` Would create: ${TSCONFIG_PATH}`);
|
|
96
|
+
}
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const previousLink = plan.projectLinkAction ? await readProjectLink(options.projectDir) : null;
|
|
100
|
+
const previousLinkText = previousLink
|
|
101
|
+
? await dntShim.Deno.readTextFile(join(options.projectDir, PROJECT_LINK_PATH))
|
|
102
|
+
: null;
|
|
103
|
+
const veryfrontDirectory = join(options.projectDir, ".veryfront");
|
|
104
|
+
const hadVeryfrontDirectory = await createFileSystem().exists(veryfrontDirectory);
|
|
105
|
+
const createdFiles = [];
|
|
106
|
+
let projectLinkMutationAttempted = false;
|
|
107
|
+
try {
|
|
108
|
+
if (plan.projectLinkAction) {
|
|
109
|
+
projectLinkMutationAttempted = true;
|
|
110
|
+
await writeProjectLink(options.projectDir, {
|
|
111
|
+
controlPlane: options.config.apiUrl,
|
|
112
|
+
projectId: options.project.id,
|
|
113
|
+
projectSlug: options.project.slug,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (plan.createPackageJson) {
|
|
117
|
+
createdFiles.push(join(options.projectDir, PACKAGE_JSON_PATH));
|
|
118
|
+
await createPackageJson(options.projectDir, options.project.slug);
|
|
119
|
+
}
|
|
120
|
+
if (plan.createTsconfig) {
|
|
121
|
+
createdFiles.push(join(options.projectDir, TSCONFIG_PATH));
|
|
122
|
+
await createTypeScriptConfig(options.projectDir);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
catch (error) {
|
|
126
|
+
const rollbackErrors = [];
|
|
127
|
+
for (const file of createdFiles.reverse()) {
|
|
128
|
+
try {
|
|
129
|
+
await removeIfPresent(file);
|
|
130
|
+
}
|
|
131
|
+
catch (rollbackError) {
|
|
132
|
+
rollbackErrors.push(rollbackError);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (projectLinkMutationAttempted) {
|
|
136
|
+
try {
|
|
137
|
+
if (previousLinkText !== null) {
|
|
138
|
+
await dntShim.Deno.writeTextFile(join(options.projectDir, PROJECT_LINK_PATH), previousLinkText);
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
await clearProjectLink(options.projectDir);
|
|
142
|
+
if (!hadVeryfrontDirectory)
|
|
143
|
+
await removeIfPresent(veryfrontDirectory);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (rollbackError) {
|
|
147
|
+
rollbackErrors.push(rollbackError);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (rollbackErrors.length > 0) {
|
|
151
|
+
throw new Error(`Bootstrap failed: ${describeError(error)}. Rollback also failed: ${rollbackErrors.map(describeError).join("; ")}`, { cause: error });
|
|
152
|
+
}
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/push/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"command-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/push/command-help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,QAAQ,EAAE,WAgDtB,CAAC"}
|
|
@@ -18,7 +18,11 @@ export const pushHelp = {
|
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
flag: "--dry-run",
|
|
21
|
-
description: "Show
|
|
21
|
+
description: "Show planned uploads and deletions without changing remote files",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
flag: "--prune",
|
|
25
|
+
description: "Delete managed remote files that are missing locally",
|
|
22
26
|
},
|
|
23
27
|
{
|
|
24
28
|
flag: "-q, --quiet",
|
|
@@ -29,13 +33,17 @@ export const pushHelp = {
|
|
|
29
33
|
"veryfront push",
|
|
30
34
|
"veryfront push --branch feature-header",
|
|
31
35
|
"veryfront push --dry-run",
|
|
36
|
+
"veryfront push --prune --dry-run",
|
|
32
37
|
],
|
|
33
38
|
notes: [
|
|
34
39
|
"Pushes main by default and prints its stable cloud preview URL",
|
|
35
40
|
"Use --branch to create or update an isolated branch preview",
|
|
36
41
|
"Preview branch names use lowercase letters, numbers, and hyphens",
|
|
42
|
+
"By default, push uploads local files and preserves remote-only files",
|
|
43
|
+
"Use --prune to remove managed remote files that are missing locally",
|
|
37
44
|
"Run veryfront deploy when the preview is ready for an environment",
|
|
38
45
|
".vfignore excludes matching local files and preserves matching remote files",
|
|
46
|
+
"--dry-run previews deletions only when --prune is present",
|
|
39
47
|
"--dry-run never creates a project or branch, changes remote files, or writes a Push receipt",
|
|
40
48
|
],
|
|
41
49
|
};
|