@ecomweb/cli 0.3.1 → 0.4.0

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.
@@ -6,6 +6,7 @@ export default class Deploy extends BaseCommand {
6
6
  dir: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
7
  prebuilt: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
8
8
  "skip-build": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
+ debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
10
  prod: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
10
11
  "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
12
  "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -39,8 +39,12 @@ class Deploy extends base_command_1.BaseCommand {
39
39
  process.stderr.write(text);
40
40
  },
41
41
  liveLogs: !quiet && Boolean(process.stderr.isTTY),
42
+ debug: this.getFlag("debug") ?? false,
43
+ tty: !quiet && Boolean(process.stderr.isTTY),
42
44
  prod: this.getFlag("prod") ?? false,
43
45
  }), () => {
46
+ if (!quiet && process.stderr.isTTY)
47
+ process.stderr.write("\r\x1b[2K");
44
48
  process.stderr.write("Stopped following the deployment before it finished. It carries on: check it with ecomweb deployments, follow its log with ecomweb logs <id>.\n");
45
49
  process.exitCode = errors_1.ExitCode.ERROR;
46
50
  });
@@ -53,6 +57,7 @@ Deploy.examples = [
53
57
  "ecomweb deploy --prod",
54
58
  "ecomweb deploy --prebuilt",
55
59
  "ecomweb deploy --dir ./my-storefront --quiet",
60
+ "ecomweb deploy --debug",
56
61
  ];
57
62
  Deploy.flags = {
58
63
  ...base_command_1.BaseCommand.baseFlags,
@@ -68,6 +73,10 @@ Deploy.flags = {
68
73
  description: "With --prebuilt: use the existing .next/standalone instead of running pnpm build",
69
74
  default: false,
70
75
  }),
76
+ debug: core_1.Flags.boolean({
77
+ description: "Show the raw build log (Docker, BuildKit and Cloud Build output) instead of the build view",
78
+ default: false,
79
+ }),
71
80
  prod: core_1.Flags.boolean({
72
81
  description: "Promote to production once built (the store keeps its current version if the new one never gets ready: exit 6)",
73
82
  default: false,
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/commands/deploy.ts"],"names":[],"mappings":"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"}
@@ -6,6 +6,7 @@ export default class Logs extends BaseCommand {
6
6
  id: import("@oclif/core/lib/interfaces").Arg<string, Record<string, unknown>>;
7
7
  };
8
8
  static flags: {
9
+ debug: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
9
10
  "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
11
  "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
12
  "api-url": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
@@ -9,7 +9,10 @@ class Logs extends base_command_1.BaseCommand {
9
9
  async run() {
10
10
  this.requireStore();
11
11
  const { args } = await this.parse(Logs);
12
- const status = await (0, exit_guard_1.untilSettled)((0, deployments_1.followLogs)(this.apiClient, args.id, (text) => process.stdout.write(text)), () => {
12
+ const raw = this.getFlag("debug") ?? false;
13
+ const view = raw ? null : (0, deployments_1.buildView)((t) => process.stdout.write(t), Boolean(process.stdout.isTTY));
14
+ const status = await (0, exit_guard_1.untilSettled)((0, deployments_1.followLogs)(this.apiClient, args.id, view ? view.onText : (text) => process.stdout.write(text)).finally(() => view?.finish()), () => {
15
+ view?.finish();
13
16
  process.stderr.write(`Stopped following ${args.id} before the build finished. Run ecomweb logs ${args.id} again.\n`);
14
17
  process.exitCode = errors_1.ExitCode.ERROR;
15
18
  });
@@ -17,12 +20,16 @@ class Logs extends base_command_1.BaseCommand {
17
20
  }
18
21
  }
19
22
  Logs.description = "Print a deployment's build log, following it until the build ends (storefront hosting). Exits 5 if the build failed";
20
- Logs.examples = ["ecomweb logs d_7f3k2abc"];
23
+ Logs.examples = ["ecomweb logs d_7f3k2abc", "ecomweb logs d_7f3k2abc --debug"];
21
24
  Logs.args = {
22
25
  id: core_1.Args.string({ description: "Deployment id (from ecomweb deploy)", required: true }),
23
26
  };
24
27
  Logs.flags = {
25
28
  ...base_command_1.BaseCommand.baseFlags,
29
+ debug: core_1.Flags.boolean({
30
+ description: "Show the raw build log (Docker, BuildKit and Cloud Build output) instead of the build view",
31
+ default: false,
32
+ }),
26
33
  };
27
34
  exports.default = Logs;
28
35
  //# sourceMappingURL=logs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";;AAAA,sCAAmC;AACnC,kDAA8C;AAC9C,oDAAgD;AAChD,0CAAyC;AACzC,kDAAiD;AAEjD,MAAqB,IAAK,SAAQ,0BAAW;IAc3C,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAY,EAAC,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE;YAChH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,EAAE,gDAAgD,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;YACrH,OAAO,CAAC,QAAQ,GAAG,iBAAQ,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC;IAC7D,CAAC;;AArBM,gBAAW,GAChB,qHAAqH,CAAC;AAEjH,aAAQ,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAEvC,SAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACxF,CAAC;AAEK,UAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;CACzB,CAAC;kBAZiB,IAAI"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":";;AAAA,sCAA0C;AAC1C,kDAA8C;AAC9C,oDAA2D;AAC3D,0CAAyC;AACzC,kDAAiD;AAEjD,MAAqB,IAAK,SAAQ,0BAAW;IAkB3C,KAAK,CAAC,GAAG;QACP,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAU,OAAO,CAAC,IAAI,KAAK,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAA,uBAAS,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACnG,MAAM,MAAM,GAAG,MAAM,IAAA,yBAAY,EAC/B,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC1G,IAAI,EAAE,MAAM,EAAE,CACf,EACD,GAAG,EAAE;YACH,IAAI,EAAE,MAAM,EAAE,CAAC;YACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,IAAI,CAAC,EAAE,gDAAgD,IAAI,CAAC,EAAE,WAAW,CAAC,CAAC;YACrH,OAAO,CAAC,QAAQ,GAAG,iBAAQ,CAAC,KAAK,CAAC;QACpC,CAAC,CACF,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,CAAC;IAC7D,CAAC;;AAjCM,gBAAW,GAChB,qHAAqH,CAAC;AAEjH,aAAQ,GAAG,CAAC,yBAAyB,EAAE,iCAAiC,CAAC,CAAC;AAE1E,SAAI,GAAG;IACZ,EAAE,EAAE,WAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qCAAqC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;CACxF,CAAC;AAEK,UAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,KAAK,EAAE,YAAK,CAAC,OAAO,CAAC;QACnB,WAAW,EAAE,4FAA4F;QACzG,OAAO,EAAE,KAAK;KACf,CAAC;CACH,CAAC;kBAhBiB,IAAI"}
@@ -0,0 +1,26 @@
1
+ import { type ViewEvent } from "./build-log-view";
2
+ export declare function formatDuration(seconds: number): string;
3
+ export declare class BuildLogRenderer {
4
+ private readonly opts;
5
+ private liveLabel;
6
+ private readonly phaseStart;
7
+ private liveSince;
8
+ private timer;
9
+ private readonly now;
10
+ private readonly c;
11
+ constructor(opts: {
12
+ write: (text: string) => void;
13
+ tty: boolean;
14
+ now?: () => number;
15
+ color?: boolean;
16
+ });
17
+ elapsed(): number;
18
+ live(label: string): void;
19
+ done(label: string, detail: string): void;
20
+ line(text: string): void;
21
+ events(events: ViewEvent[]): void;
22
+ stop(): void;
23
+ private stopTicker;
24
+ private print;
25
+ private draw;
26
+ }
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BuildLogRenderer = void 0;
7
+ exports.formatDuration = formatDuration;
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const build_log_view_1 = require("./build-log-view");
10
+ const WITH_OUTPUT = new Set(["install", "app"]);
11
+ function formatDuration(seconds) {
12
+ if (seconds < 10)
13
+ return `${(Math.floor(seconds * 10) / 10).toFixed(1)}s`;
14
+ if (seconds < 60)
15
+ return `${Math.round(seconds)}s`;
16
+ const s = Math.round(seconds);
17
+ return `${Math.floor(s / 60)}m ${s % 60}s`;
18
+ }
19
+ const WIDTH = 34;
20
+ const leader = (label) => `${label} ${".".repeat(Math.max(3, WIDTH - label.length - 1))}`;
21
+ class BuildLogRenderer {
22
+ constructor(opts) {
23
+ this.opts = opts;
24
+ this.liveLabel = null;
25
+ this.phaseStart = new Map();
26
+ this.liveSince = 0;
27
+ this.timer = null;
28
+ this.now = opts.now ?? Date.now;
29
+ this.c = opts.color === false ? new chalk_1.default.Instance({ level: 0 }) : chalk_1.default;
30
+ }
31
+ elapsed() {
32
+ return (this.now() - this.liveSince) / 1000;
33
+ }
34
+ live(label) {
35
+ this.liveLabel = label;
36
+ this.liveSince = this.now();
37
+ if (!this.opts.tty)
38
+ return;
39
+ this.draw();
40
+ if (!this.timer) {
41
+ this.timer = setInterval(() => this.draw(), 1000);
42
+ this.timer.unref?.();
43
+ }
44
+ }
45
+ done(label, detail) {
46
+ this.stopTicker();
47
+ this.print(`${leader(label)} ${this.c.dim(detail)}`);
48
+ }
49
+ line(text) {
50
+ this.print(text);
51
+ }
52
+ events(events) {
53
+ for (const e of events) {
54
+ if (e.kind === "machine")
55
+ this.print(`Building on ${e.label}`);
56
+ else if (e.kind === "start") {
57
+ this.phaseStart.set(e.phase, this.now());
58
+ if (WITH_OUTPUT.has(e.phase))
59
+ this.print(` ${build_log_view_1.PHASE_LABEL[e.phase]}`);
60
+ this.live(` ${build_log_view_1.PHASE_LABEL[e.phase]}`);
61
+ }
62
+ else if (e.kind === "output")
63
+ this.print(` ${e.line}`);
64
+ else if (e.kind === "end") {
65
+ this.stopTicker();
66
+ const since = this.phaseStart.has(e.phase) ? (this.now() - this.phaseStart.get(e.phase)) / 1000 : 0;
67
+ const seconds = e.seconds ?? (since >= 0.5 ? since : undefined);
68
+ const detail = e.cached ? "cached" : seconds !== undefined ? formatDuration(seconds) : "";
69
+ this.print(` ${this.c.green("✓")} ${leader(build_log_view_1.PHASE_LABEL[e.phase])}${detail ? ` ${this.c.dim(detail)}` : ""}`.trimEnd());
70
+ }
71
+ else if (e.kind === "failed") {
72
+ this.stopTicker();
73
+ const what = e.phase ? `${build_log_view_1.PHASE_LABEL[e.phase]} failed` : "Build failed";
74
+ this.print(` ${this.c.red("✗")} ${what}: ${e.line}`);
75
+ }
76
+ }
77
+ }
78
+ stop() {
79
+ this.stopTicker();
80
+ if (this.opts.tty)
81
+ this.opts.write("\r\x1b[2K");
82
+ }
83
+ stopTicker() {
84
+ if (this.timer)
85
+ clearInterval(this.timer);
86
+ this.timer = null;
87
+ this.liveLabel = null;
88
+ }
89
+ print(text) {
90
+ this.opts.write(`${this.opts.tty ? "\r\x1b[2K" : ""}${text}\n`);
91
+ if (this.opts.tty && this.liveLabel)
92
+ this.draw();
93
+ }
94
+ draw() {
95
+ if (!this.liveLabel)
96
+ return;
97
+ const s = Math.floor(this.elapsed());
98
+ const clock = `${Math.floor(s / 60)}:${String(s % 60).padStart(2, "0")}`;
99
+ this.opts.write(`\r\x1b[2K${this.liveLabel} ${this.c.dim(clock)}`);
100
+ }
101
+ }
102
+ exports.BuildLogRenderer = BuildLogRenderer;
103
+ //# sourceMappingURL=build-log-render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log-render.js","sourceRoot":"","sources":["../../src/lib/build-log-render.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export type Phase = "install" | "app" | "package" | "upload";
2
+ export declare const PHASE_LABEL: Record<Phase, string>;
3
+ export type ViewEvent = {
4
+ kind: "machine";
5
+ label: string;
6
+ } | {
7
+ kind: "start";
8
+ phase: Phase;
9
+ } | {
10
+ kind: "end";
11
+ phase: Phase;
12
+ seconds?: number;
13
+ cached?: boolean;
14
+ } | {
15
+ kind: "output";
16
+ phase: Phase;
17
+ line: string;
18
+ } | {
19
+ kind: "failed";
20
+ phase?: Phase;
21
+ line: string;
22
+ };
23
+ export declare function machineLabel(name: string): string;
24
+ export declare class BuildLogView {
25
+ private partial;
26
+ private readonly steps;
27
+ private readonly started;
28
+ private readonly ended;
29
+ private onceSeen;
30
+ private failedOnce;
31
+ feed(chunk: string): ViewEvent[];
32
+ end(): ViewEvent[];
33
+ private start;
34
+ private finish;
35
+ private fail;
36
+ private line;
37
+ }
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BuildLogView = exports.PHASE_LABEL = void 0;
4
+ exports.machineLabel = machineLabel;
5
+ exports.PHASE_LABEL = {
6
+ install: "Installing dependencies",
7
+ app: "Building app",
8
+ package: "Packaging image",
9
+ upload: "Uploading image",
10
+ };
11
+ const VCPU = { default: 2, E2_MEDIUM: 1, E2_HIGHCPU_8: 8, E2_HIGHCPU_32: 32, N1_HIGHCPU_8: 8, N1_HIGHCPU_32: 32 };
12
+ function machineLabel(name) {
13
+ if (name === "cluster")
14
+ return "the build server";
15
+ const type = name.startsWith("cloudbuild:") ? name.slice("cloudbuild:".length) : name;
16
+ return VCPU[type] ? `Cloud Build (${VCPU[type]} vCPU)` : `Cloud Build (${type})`;
17
+ }
18
+ const CLOUD_STEP = /^Step #\d+ - "([\w-]+)": ?(.*)$/;
19
+ const CLOUD_MARK = /^(Starting|Finished) Step #\d+ - "([\w-]+)"$/;
20
+ const BUILDKIT = /^#(\d+) (.*)$/;
21
+ const HEADER = /^\[[\w-]+(?: \d+\/\d+)?\] (.*)$/;
22
+ const ELAPSED = /^\d+(?:\.\d+)? ?(.*)$/;
23
+ const NOISE = [
24
+ /^Progress: /,
25
+ /^\+{3,}/,
26
+ /^\+ \S+ \S+$/,
27
+ /^(dev)?[dD]ependencies:$/,
28
+ /[╭╮╰╯│]/,
29
+ /^\.\.\.\/.* (install|postinstall)(\$ |: Done)/,
30
+ /^\? Verifying lockfile/,
31
+ /^\s*$/,
32
+ ];
33
+ const ONCE = /\[baseline-browser-mapping\]/;
34
+ class BuildLogView {
35
+ constructor() {
36
+ this.partial = "";
37
+ this.steps = new Map();
38
+ this.started = new Set();
39
+ this.ended = new Set();
40
+ this.onceSeen = false;
41
+ this.failedOnce = false;
42
+ }
43
+ feed(chunk) {
44
+ const text = this.partial + chunk;
45
+ const lines = text.split("\n");
46
+ this.partial = lines.pop() ?? "";
47
+ return lines.flatMap((l) => this.line(l.replace(/\r$/, "")));
48
+ }
49
+ end() {
50
+ const rest = this.partial;
51
+ this.partial = "";
52
+ return rest ? this.line(rest) : [];
53
+ }
54
+ start(phase) {
55
+ if (this.started.has(phase))
56
+ return [];
57
+ this.started.add(phase);
58
+ return [{ kind: "start", phase }];
59
+ }
60
+ finish(phase, extra = {}) {
61
+ if (this.ended.has(phase))
62
+ return [];
63
+ this.ended.add(phase);
64
+ return [...this.start(phase), { kind: "end", phase, ...extra }];
65
+ }
66
+ fail(phase, line) {
67
+ if (this.failedOnce)
68
+ return [];
69
+ this.failedOnce = true;
70
+ return [{ kind: "failed", ...(phase && { phase }), line }];
71
+ }
72
+ line(raw) {
73
+ const mark = CLOUD_MARK.exec(raw);
74
+ if (mark) {
75
+ if (mark[2] !== "upload")
76
+ return [];
77
+ return mark[1] === "Starting" ? this.start("upload") : this.finish("upload");
78
+ }
79
+ const step = CLOUD_STEP.exec(raw);
80
+ const text = step ? step[2] : raw;
81
+ const machine = /^ecomweb: building on (\S+)$/.exec(text);
82
+ if (machine)
83
+ return [{ kind: "machine", label: machineLabel(machine[1]) }];
84
+ if (text === "image uploaded")
85
+ return this.finish("upload");
86
+ const ours = /^(unpack|upload) failed: .+$/.exec(text);
87
+ if (ours)
88
+ return this.fail(ours[1] === "upload" ? "upload" : undefined, text);
89
+ const solve = /^(?:ERROR|error): (failed to solve: .*)$/.exec(text);
90
+ if (solve)
91
+ return this.fail(undefined, solve[1]);
92
+ const bk = BUILDKIT.exec(text);
93
+ if (!bk)
94
+ return [];
95
+ const [, n, rest] = bk;
96
+ const header = HEADER.exec(rest);
97
+ if (header) {
98
+ const phase = /^RUN pnpm install\b/.test(header[1]) ? "install" : /^RUN pnpm build\b/.test(header[1]) ? "app" : null;
99
+ if (!this.steps.has(n))
100
+ this.steps.set(n, phase);
101
+ return phase ? this.start(phase) : [];
102
+ }
103
+ if (/^exporting to /.test(rest)) {
104
+ this.steps.set(n, "package");
105
+ return this.start("package");
106
+ }
107
+ const phase = this.steps.get(n) ?? null;
108
+ const error = /^ERROR: (.*)$/.exec(rest);
109
+ if (error)
110
+ return this.fail(phase ?? undefined, error[1]);
111
+ if (!phase)
112
+ return [];
113
+ const done = /^DONE (\d+(?:\.\d+)?)s$/.exec(rest);
114
+ if (done)
115
+ return this.finish(phase, { seconds: Number(done[1]) });
116
+ if (rest === "CACHED")
117
+ return this.finish(phase, { cached: true });
118
+ if (phase === "package")
119
+ return [];
120
+ const out = ELAPSED.exec(rest);
121
+ if (!out)
122
+ return [];
123
+ const line = out[1];
124
+ if (NOISE.some((r) => r.test(line)))
125
+ return [];
126
+ if (ONCE.test(line)) {
127
+ if (this.onceSeen)
128
+ return [];
129
+ this.onceSeen = true;
130
+ }
131
+ return [{ kind: "output", phase, line }];
132
+ }
133
+ }
134
+ exports.BuildLogView = BuildLogView;
135
+ //# sourceMappingURL=build-log-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-log-view.js","sourceRoot":"","sources":["../../src/lib/build-log-view.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { PackedSource } from "./pack-source";
2
+ import { BuildLogRenderer } from "./build-log-render";
2
3
  export type DeploymentStatus = "uploading" | "queued" | "building" | "built" | "running" | "stopped" | "failed";
3
4
  export interface DeploymentView {
4
5
  id: string;
@@ -38,6 +39,8 @@ export interface DeployDeps {
38
39
  previewTimeoutMs?: number;
39
40
  prod?: boolean;
40
41
  artifact?: "source" | "prebuilt";
42
+ debug?: boolean;
43
+ tty?: boolean;
41
44
  }
42
45
  export declare function hostingError(error: unknown): unknown;
43
46
  export declare function uploadSource(url: string, packed: PackedSource): Promise<void>;
@@ -50,6 +53,13 @@ export declare function followLogs(client: HostingClient, id: string, onText: (t
50
53
  sleep?: (ms: number) => Promise<void>;
51
54
  maxRetries?: number;
52
55
  }): Promise<DeploymentStatus>;
56
+ export declare function buildView(write: (t: string) => void, tty: boolean, now?: () => number): {
57
+ renderer: BuildLogRenderer;
58
+ onText: (text: string) => void;
59
+ finish: () => void;
60
+ shown: () => boolean;
61
+ failed: () => boolean;
62
+ };
53
63
  export declare function deploy(dir: string, deps: DeployDeps): Promise<DeployResult>;
54
64
  export declare function promote(client: HostingClient, id: string, opts: {
55
65
  wait: boolean;
@@ -7,6 +7,7 @@ exports.hostingError = hostingError;
7
7
  exports.uploadSource = uploadSource;
8
8
  exports.streamLogs = streamLogs;
9
9
  exports.followLogs = followLogs;
10
+ exports.buildView = buildView;
10
11
  exports.deploy = deploy;
11
12
  exports.promote = promote;
12
13
  exports.listDeployments = listDeployments;
@@ -15,6 +16,8 @@ const node_fs_1 = require("node:fs");
15
16
  const axios_1 = __importDefault(require("axios"));
16
17
  const errors_1 = require("./errors");
17
18
  const sse_1 = require("./sse");
19
+ const build_log_view_1 = require("./build-log-view");
20
+ const build_log_render_1 = require("./build-log-render");
18
21
  const TAIL_LINES = 100;
19
22
  const defaultSleep = (ms) => new Promise((r) => setTimeout(r, ms));
20
23
  const unwrap = (res) => (res && typeof res === "object" && "data" in res && !("id" in res) ? res.data : res);
@@ -137,53 +140,147 @@ function tail(text, lines) {
137
140
  all.pop();
138
141
  return all.slice(-lines).map((l) => `${l}\n`).join("");
139
142
  }
143
+ function buildView(write, tty, now) {
144
+ const view = new build_log_view_1.BuildLogView();
145
+ const renderer = new build_log_render_1.BuildLogRenderer({ write, tty, now, color: tty });
146
+ let shown = false;
147
+ let failed = false;
148
+ let unread = "";
149
+ const show = (events) => {
150
+ if (events.length)
151
+ shown = true;
152
+ if (events.some((e) => e.kind === "failed"))
153
+ failed = true;
154
+ renderer.events(events);
155
+ };
156
+ return {
157
+ renderer,
158
+ onText: (text) => {
159
+ if (!shown)
160
+ unread += text;
161
+ show(view.feed(text));
162
+ if (shown)
163
+ unread = "";
164
+ },
165
+ finish: () => {
166
+ show(view.end());
167
+ renderer.stop();
168
+ if (!shown && unread)
169
+ write(unread.endsWith("\n") ? unread : `${unread}\n`);
170
+ unread = "";
171
+ },
172
+ shown: () => shown,
173
+ failed: () => failed,
174
+ };
175
+ }
140
176
  async function deploy(dir, deps) {
141
177
  const { client, stderr } = deps;
142
178
  const sleep = deps.sleep ?? defaultSleep;
143
179
  const now = deps.now ?? Date.now;
144
180
  const packed = await deps.pack(dir);
145
- stderr(`Packed ${(packed.bytes / 1024 / 1024).toFixed(1)} MB of source\n`);
181
+ const raw = deps.debug === true;
182
+ const v = buildView(stderr, !raw && deps.tty === true, now);
183
+ const { renderer, onText, finish } = v;
184
+ const size = `${(packed.bytes / 1024 / 1024).toFixed(1)} MB`;
185
+ if (raw)
186
+ stderr(`Packed ${size} of source\n`);
146
187
  const created = await call(() => client.storePost("/hosting/deployments", {
147
188
  sha256: packed.sha256,
148
189
  bytes: packed.bytes,
149
190
  ...(deps.artifact === "prebuilt" && { artifact: "prebuilt" }),
150
191
  }));
151
192
  const id = created.id;
152
- await deps.upload(created.upload_url, packed);
153
- await call(() => client.storePost(`${base(id)}/build`));
154
- stderr(`Deployment ${id}: building\n`);
155
- let log = "";
156
- const status = await streamLogs(client, id, (text) => {
157
- log += text;
158
- if (deps.liveLogs)
159
- stderr(text);
160
- }, { sleep });
161
- if (status === "failed") {
162
- const view = await call(() => client.storeGet(base(id)));
163
- if (!deps.liveLogs && log)
164
- stderr(`--- last ${TAIL_LINES} lines of the build log ---\n${tail(log, TAIL_LINES)}`);
165
- throw new errors_1.CliError("BUILD_FAILED", `Build failed: ${view.error ?? "see the build log"}`, errors_1.ExitCode.BUILD_FAILED, {
166
- hint: `Fix the build and run ecomweb deploy again. Full log: ecomweb logs ${id}`,
167
- details: { id },
168
- });
169
- }
170
- if (deps.prod) {
171
- stderr(`Deployment ${id}: built, rolling out to production\n`);
172
- const production = await promote(client, id, { wait: true, sleep, now, stderr });
173
- return { id, status: "running", preview_url: null, production_urls: production.urls };
174
- }
175
- stderr(`Deployment ${id}: built, starting the preview\n`);
176
- const deadline = now() + (deps.previewTimeoutMs ?? 5 * 60_000);
177
- for (;;) {
178
- const view = await call(() => client.storeGet(base(id)));
179
- if (view.status === "running") {
180
- stderr(`Preview: ${view.preview_url}\n`);
181
- return { id, status: view.status, preview_url: view.preview_url };
193
+ let streamOver = false;
194
+ try {
195
+ if (!raw)
196
+ renderer.live(`Uploading ${size}`);
197
+ await deps.upload(created.upload_url, packed);
198
+ if (!raw)
199
+ renderer.done(`Uploading ${size}`, `done ${(0, build_log_render_1.formatDuration)(renderer.elapsed())}`);
200
+ await call(() => client.storePost(`${base(id)}/build`));
201
+ if (raw)
202
+ stderr(`Deployment ${id}: building\n`);
203
+ let firstLogAt = null;
204
+ let waiting = "";
205
+ const watch = raw
206
+ ? Promise.resolve()
207
+ : (async () => {
208
+ while (firstLogAt === null && !streamOver) {
209
+ const d = await call(() => client.storeGet(base(id))).catch(() => null);
210
+ if (d && d.status !== "queued" && d.status !== "building")
211
+ break;
212
+ const label = d?.status === "queued" ? "Waiting in line" : d?.status === "building" ? "Waiting for a build machine" : "";
213
+ if (label && label !== waiting && firstLogAt === null && !streamOver) {
214
+ if (waiting)
215
+ renderer.done(waiting, (0, build_log_render_1.formatDuration)(renderer.elapsed()));
216
+ waiting = label;
217
+ renderer.live(label);
218
+ }
219
+ await sleep(5000);
220
+ }
221
+ })();
222
+ let log = "";
223
+ const status = await streamLogs(client, id, (text) => {
224
+ log += text;
225
+ if (raw) {
226
+ if (deps.liveLogs)
227
+ stderr(text);
228
+ return;
229
+ }
230
+ if (firstLogAt === null) {
231
+ firstLogAt = now();
232
+ if (waiting)
233
+ renderer.done(waiting, (0, build_log_render_1.formatDuration)(renderer.elapsed()));
234
+ }
235
+ onText(text);
236
+ }, { sleep });
237
+ streamOver = true;
238
+ await watch;
239
+ if (!raw)
240
+ finish();
241
+ if (status === "failed") {
242
+ const view = await call(() => client.storeGet(base(id)));
243
+ if ((raw ? !deps.liveLogs : v.shown() && !v.failed()) && log) {
244
+ stderr(`--- last ${TAIL_LINES} lines of the build log ---\n${tail(log, TAIL_LINES)}`);
245
+ }
246
+ throw new errors_1.CliError("BUILD_FAILED", `Build failed: ${view.error ?? "see the build log"}`, errors_1.ExitCode.BUILD_FAILED, {
247
+ hint: `Fix the build and run ecomweb deploy again. Full log: ecomweb logs ${id}${raw ? "" : " (add --debug for the raw log)"}`,
248
+ details: { id },
249
+ });
182
250
  }
183
- if (view.status === "failed" || view.status === "stopped" || now() > deadline) {
184
- throw new errors_1.CliError("ROLLOUT_FAILED", view.status === "built" ? "The preview did not start in time" : `The preview is ${view.status}`, errors_1.ExitCode.ROLLOUT_FAILED, { details: { id, status: view.status } });
251
+ if (!raw && firstLogAt !== null)
252
+ renderer.line(`Built in ${(0, build_log_render_1.formatDuration)((now() - firstLogAt) / 1000)}`);
253
+ if (deps.prod) {
254
+ stderr(`Deployment ${id}: built, rolling out to production\n`);
255
+ const production = await promote(client, id, { wait: true, sleep, now, stderr });
256
+ return { id, status: "running", preview_url: null, production_urls: production.urls };
185
257
  }
186
- await sleep(2000);
258
+ if (raw)
259
+ stderr(`Deployment ${id}: built, starting the preview\n`);
260
+ else
261
+ renderer.live("Starting preview");
262
+ const deadline = now() + (deps.previewTimeoutMs ?? 5 * 60_000);
263
+ for (;;) {
264
+ const view = await call(() => client.storeGet(base(id)));
265
+ if (view.status === "running") {
266
+ if (raw)
267
+ stderr(`Preview: ${view.preview_url}\n`);
268
+ else {
269
+ renderer.done("Starting preview", (0, build_log_render_1.formatDuration)(renderer.elapsed()));
270
+ renderer.line(`✓ Preview: ${view.preview_url}`);
271
+ }
272
+ return { id, status: view.status, preview_url: view.preview_url };
273
+ }
274
+ if (view.status === "failed" || view.status === "stopped" || now() > deadline) {
275
+ renderer.stop();
276
+ throw new errors_1.CliError("ROLLOUT_FAILED", view.status === "built" ? "The preview did not start in time" : `The preview is ${view.status}`, errors_1.ExitCode.ROLLOUT_FAILED, { details: { id, status: view.status } });
277
+ }
278
+ await sleep(2000);
279
+ }
280
+ }
281
+ finally {
282
+ streamOver = true;
283
+ renderer.stop();
187
284
  }
188
285
  }
189
286
  async function promote(client, id, opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/lib/deployments.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployments.js","sourceRoot":"","sources":["../../src/lib/deployments.ts"],"names":[],"mappings":"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"}
@@ -8,7 +8,8 @@
8
8
  "ecomweb deploy",
9
9
  "ecomweb deploy --prod",
10
10
  "ecomweb deploy --prebuilt",
11
- "ecomweb deploy --dir ./my-storefront --quiet"
11
+ "ecomweb deploy --dir ./my-storefront --quiet",
12
+ "ecomweb deploy --debug"
12
13
  ],
13
14
  "flags": {
14
15
  "store-ref": {
@@ -107,6 +108,12 @@
107
108
  "allowNo": false,
108
109
  "type": "boolean"
109
110
  },
111
+ "debug": {
112
+ "description": "Show the raw build log (Docker, BuildKit and Cloud Build output) instead of the build view",
113
+ "name": "debug",
114
+ "allowNo": false,
115
+ "type": "boolean"
116
+ },
110
117
  "prod": {
111
118
  "description": "Promote to production once built (the store keeps its current version if the new one never gets ready: exit 6)",
112
119
  "name": "prod",
@@ -385,7 +392,8 @@
385
392
  },
386
393
  "description": "Print a deployment's build log, following it until the build ends (storefront hosting). Exits 5 if the build failed",
387
394
  "examples": [
388
- "ecomweb logs d_7f3k2abc"
395
+ "ecomweb logs d_7f3k2abc",
396
+ "ecomweb logs d_7f3k2abc --debug"
389
397
  ],
390
398
  "flags": {
391
399
  "store-ref": {
@@ -463,6 +471,12 @@
463
471
  "hasDynamicHelp": false,
464
472
  "multiple": false,
465
473
  "type": "option"
474
+ },
475
+ "debug": {
476
+ "description": "Show the raw build log (Docker, BuildKit and Cloud Build output) instead of the build view",
477
+ "name": "debug",
478
+ "allowNo": false,
479
+ "type": "boolean"
466
480
  }
467
481
  },
468
482
  "hasDynamicHelp": false,
@@ -22065,19 +22079,12 @@
22065
22079
  "update.js"
22066
22080
  ]
22067
22081
  },
22068
- "storefront:init": {
22082
+ "stores:current": {
22069
22083
  "aliases": [],
22070
- "args": {
22071
- "dir": {
22072
- "description": "Target directory (default: ./<store-ref>-storefront); must be empty",
22073
- "name": "dir",
22074
- "required": false
22075
- }
22076
- },
22077
- "description": "Get the current store's storefront as code you own: a Next.js project, configured for the store",
22084
+ "args": {},
22085
+ "description": "Show the currently active store (its live name, or the cached one offline)",
22078
22086
  "examples": [
22079
- "ecomweb storefront init",
22080
- "ecomweb storefront init ./my-shop"
22087
+ "ecomweb stores current"
22081
22088
  ],
22082
22089
  "flags": {
22083
22090
  "store-ref": {
@@ -22155,42 +22162,11 @@
22155
22162
  "hasDynamicHelp": false,
22156
22163
  "multiple": false,
22157
22164
  "type": "option"
22158
- },
22159
- "github": {
22160
- "description": "Create the repository in your GitHub account through the ecomweb GitHub App",
22161
- "name": "github",
22162
- "allowNo": false,
22163
- "type": "boolean"
22164
- },
22165
- "repo-name": {
22166
- "description": "Repository name for --github",
22167
- "name": "repo-name",
22168
- "hasDynamicHelp": false,
22169
- "multiple": false,
22170
- "type": "option"
22171
- },
22172
- "public": {
22173
- "description": "Make the --github repository public",
22174
- "name": "public",
22175
- "allowNo": false,
22176
- "type": "boolean"
22177
- },
22178
- "install": {
22179
- "description": "Install dependencies (pnpm install) after creating the project",
22180
- "name": "install",
22181
- "allowNo": true,
22182
- "type": "boolean"
22183
- },
22184
- "dev": {
22185
- "description": "Start the dev server (pnpm dev) when done, without asking",
22186
- "name": "dev",
22187
- "allowNo": false,
22188
- "type": "boolean"
22189
22165
  }
22190
22166
  },
22191
22167
  "hasDynamicHelp": false,
22192
22168
  "hiddenAliases": [],
22193
- "id": "storefront:init",
22169
+ "id": "stores:current",
22194
22170
  "pluginAlias": "@ecomweb/cli",
22195
22171
  "pluginName": "@ecomweb/cli",
22196
22172
  "pluginType": "core",
@@ -22200,17 +22176,22 @@
22200
22176
  "relativePath": [
22201
22177
  "dist",
22202
22178
  "commands",
22203
- "storefront",
22204
- "init.js"
22179
+ "stores",
22180
+ "current.js"
22205
22181
  ]
22206
22182
  },
22207
- "storefront:key": {
22183
+ "stores:info": {
22208
22184
  "aliases": [],
22209
- "args": {},
22210
- "description": "Show the current store's storefront publishable key (safe to expose in storefront code)",
22185
+ "args": {
22186
+ "ref": {
22187
+ "description": "Store ref",
22188
+ "name": "ref",
22189
+ "required": true
22190
+ }
22191
+ },
22192
+ "description": "Show details for a specific store",
22211
22193
  "examples": [
22212
- "ecomweb storefront key",
22213
- "ecomweb storefront key --roll --yes"
22194
+ "ecomweb stores info abc123def456"
22214
22195
  ],
22215
22196
  "flags": {
22216
22197
  "store-ref": {
@@ -22288,23 +22269,11 @@
22288
22269
  "hasDynamicHelp": false,
22289
22270
  "multiple": false,
22290
22271
  "type": "option"
22291
- },
22292
- "roll": {
22293
- "description": "Replace the key; the old one keeps working for 7 days",
22294
- "name": "roll",
22295
- "allowNo": false,
22296
- "type": "boolean"
22297
- },
22298
- "yes": {
22299
- "description": "Skip the confirmation for --roll",
22300
- "name": "yes",
22301
- "allowNo": false,
22302
- "type": "boolean"
22303
22272
  }
22304
22273
  },
22305
22274
  "hasDynamicHelp": false,
22306
22275
  "hiddenAliases": [],
22307
- "id": "storefront:key",
22276
+ "id": "stores:info",
22308
22277
  "pluginAlias": "@ecomweb/cli",
22309
22278
  "pluginName": "@ecomweb/cli",
22310
22279
  "pluginType": "core",
@@ -22314,18 +22283,16 @@
22314
22283
  "relativePath": [
22315
22284
  "dist",
22316
22285
  "commands",
22317
- "storefront",
22318
- "key.js"
22286
+ "stores",
22287
+ "info.js"
22319
22288
  ]
22320
22289
  },
22321
- "storefront:skill": {
22290
+ "stores:list": {
22322
22291
  "aliases": [],
22323
22292
  "args": {},
22324
- "description": "Show or update the ecomweb-storefront skill that teaches Claude Code and Codex this storefront",
22293
+ "description": "List all stores accessible with current API key",
22325
22294
  "examples": [
22326
- "ecomweb storefront skill",
22327
- "ecomweb storefront skill --update",
22328
- "ecomweb storefront skill --update --dry-run"
22295
+ "ecomweb stores list"
22329
22296
  ],
22330
22297
  "flags": {
22331
22298
  "store-ref": {
@@ -22403,25 +22370,11 @@
22403
22370
  "hasDynamicHelp": false,
22404
22371
  "multiple": false,
22405
22372
  "type": "option"
22406
- },
22407
- "update": {
22408
- "description": "Replace the project's skill with the one in the store's current template (nothing else is touched)",
22409
- "name": "update",
22410
- "allowNo": false,
22411
- "type": "boolean"
22412
- },
22413
- "dir": {
22414
- "description": "The storefront project",
22415
- "name": "dir",
22416
- "default": ".",
22417
- "hasDynamicHelp": false,
22418
- "multiple": false,
22419
- "type": "option"
22420
22373
  }
22421
22374
  },
22422
22375
  "hasDynamicHelp": false,
22423
22376
  "hiddenAliases": [],
22424
- "id": "storefront:skill",
22377
+ "id": "stores:list",
22425
22378
  "pluginAlias": "@ecomweb/cli",
22426
22379
  "pluginName": "@ecomweb/cli",
22427
22380
  "pluginType": "core",
@@ -22431,16 +22384,23 @@
22431
22384
  "relativePath": [
22432
22385
  "dist",
22433
22386
  "commands",
22434
- "storefront",
22435
- "skill.js"
22387
+ "stores",
22388
+ "list.js"
22436
22389
  ]
22437
22390
  },
22438
- "stores:current": {
22391
+ "stores:switch": {
22439
22392
  "aliases": [],
22440
- "args": {},
22441
- "description": "Show the currently active store (its live name, or the cached one offline)",
22393
+ "args": {
22394
+ "ref": {
22395
+ "description": "Store ref to switch to",
22396
+ "name": "ref",
22397
+ "required": true
22398
+ }
22399
+ },
22400
+ "description": "Switch the active store (persists to profile)",
22442
22401
  "examples": [
22443
- "ecomweb stores current"
22402
+ "ecomweb stores switch abc123def456",
22403
+ "ecomweb stores switch abc123def456 --profile production"
22444
22404
  ],
22445
22405
  "flags": {
22446
22406
  "store-ref": {
@@ -22522,7 +22482,7 @@
22522
22482
  },
22523
22483
  "hasDynamicHelp": false,
22524
22484
  "hiddenAliases": [],
22525
- "id": "stores:current",
22485
+ "id": "stores:switch",
22526
22486
  "pluginAlias": "@ecomweb/cli",
22527
22487
  "pluginName": "@ecomweb/cli",
22528
22488
  "pluginType": "core",
@@ -22533,21 +22493,17 @@
22533
22493
  "dist",
22534
22494
  "commands",
22535
22495
  "stores",
22536
- "current.js"
22496
+ "switch.js"
22537
22497
  ]
22538
22498
  },
22539
- "stores:info": {
22499
+ "stores:update": {
22540
22500
  "aliases": [],
22541
- "args": {
22542
- "ref": {
22543
- "description": "Store ref",
22544
- "name": "ref",
22545
- "required": true
22546
- }
22547
- },
22548
- "description": "Show details for a specific store",
22501
+ "args": {},
22502
+ "description": "Update the current store's name or description",
22549
22503
  "examples": [
22550
- "ecomweb stores info abc123def456"
22504
+ "ecomweb stores update --name \"Mai Phú Hưng\"",
22505
+ "ecomweb stores update --stdin <<< '{\"name\":\"Mai Phú Hưng\",\"description\":\"Đồ gia dụng\"}'",
22506
+ "ecomweb stores update --file store.json"
22551
22507
  ],
22552
22508
  "flags": {
22553
22509
  "store-ref": {
@@ -22625,11 +22581,38 @@
22625
22581
  "hasDynamicHelp": false,
22626
22582
  "multiple": false,
22627
22583
  "type": "option"
22584
+ },
22585
+ "stdin": {
22586
+ "description": "Read JSON body from stdin",
22587
+ "name": "stdin",
22588
+ "allowNo": false,
22589
+ "type": "boolean"
22590
+ },
22591
+ "file": {
22592
+ "description": "Read JSON body from file",
22593
+ "name": "file",
22594
+ "hasDynamicHelp": false,
22595
+ "multiple": false,
22596
+ "type": "option"
22597
+ },
22598
+ "name": {
22599
+ "description": "Store name (2-100 characters)",
22600
+ "name": "name",
22601
+ "hasDynamicHelp": false,
22602
+ "multiple": false,
22603
+ "type": "option"
22604
+ },
22605
+ "description": {
22606
+ "description": "Store description",
22607
+ "name": "description",
22608
+ "hasDynamicHelp": false,
22609
+ "multiple": false,
22610
+ "type": "option"
22628
22611
  }
22629
22612
  },
22630
22613
  "hasDynamicHelp": false,
22631
22614
  "hiddenAliases": [],
22632
- "id": "stores:info",
22615
+ "id": "stores:update",
22633
22616
  "pluginAlias": "@ecomweb/cli",
22634
22617
  "pluginName": "@ecomweb/cli",
22635
22618
  "pluginType": "core",
@@ -22640,15 +22623,22 @@
22640
22623
  "dist",
22641
22624
  "commands",
22642
22625
  "stores",
22643
- "info.js"
22626
+ "update.js"
22644
22627
  ]
22645
22628
  },
22646
- "stores:list": {
22629
+ "storefront:init": {
22647
22630
  "aliases": [],
22648
- "args": {},
22649
- "description": "List all stores accessible with current API key",
22631
+ "args": {
22632
+ "dir": {
22633
+ "description": "Target directory (default: ./<store-ref>-storefront); must be empty",
22634
+ "name": "dir",
22635
+ "required": false
22636
+ }
22637
+ },
22638
+ "description": "Get the current store's storefront as code you own: a Next.js project, configured for the store",
22650
22639
  "examples": [
22651
- "ecomweb stores list"
22640
+ "ecomweb storefront init",
22641
+ "ecomweb storefront init ./my-shop"
22652
22642
  ],
22653
22643
  "flags": {
22654
22644
  "store-ref": {
@@ -22726,11 +22716,42 @@
22726
22716
  "hasDynamicHelp": false,
22727
22717
  "multiple": false,
22728
22718
  "type": "option"
22719
+ },
22720
+ "github": {
22721
+ "description": "Create the repository in your GitHub account through the ecomweb GitHub App",
22722
+ "name": "github",
22723
+ "allowNo": false,
22724
+ "type": "boolean"
22725
+ },
22726
+ "repo-name": {
22727
+ "description": "Repository name for --github",
22728
+ "name": "repo-name",
22729
+ "hasDynamicHelp": false,
22730
+ "multiple": false,
22731
+ "type": "option"
22732
+ },
22733
+ "public": {
22734
+ "description": "Make the --github repository public",
22735
+ "name": "public",
22736
+ "allowNo": false,
22737
+ "type": "boolean"
22738
+ },
22739
+ "install": {
22740
+ "description": "Install dependencies (pnpm install) after creating the project",
22741
+ "name": "install",
22742
+ "allowNo": true,
22743
+ "type": "boolean"
22744
+ },
22745
+ "dev": {
22746
+ "description": "Start the dev server (pnpm dev) when done, without asking",
22747
+ "name": "dev",
22748
+ "allowNo": false,
22749
+ "type": "boolean"
22729
22750
  }
22730
22751
  },
22731
22752
  "hasDynamicHelp": false,
22732
22753
  "hiddenAliases": [],
22733
- "id": "stores:list",
22754
+ "id": "storefront:init",
22734
22755
  "pluginAlias": "@ecomweb/cli",
22735
22756
  "pluginName": "@ecomweb/cli",
22736
22757
  "pluginType": "core",
@@ -22740,23 +22761,17 @@
22740
22761
  "relativePath": [
22741
22762
  "dist",
22742
22763
  "commands",
22743
- "stores",
22744
- "list.js"
22764
+ "storefront",
22765
+ "init.js"
22745
22766
  ]
22746
22767
  },
22747
- "stores:switch": {
22768
+ "storefront:key": {
22748
22769
  "aliases": [],
22749
- "args": {
22750
- "ref": {
22751
- "description": "Store ref to switch to",
22752
- "name": "ref",
22753
- "required": true
22754
- }
22755
- },
22756
- "description": "Switch the active store (persists to profile)",
22770
+ "args": {},
22771
+ "description": "Show the current store's storefront publishable key (safe to expose in storefront code)",
22757
22772
  "examples": [
22758
- "ecomweb stores switch abc123def456",
22759
- "ecomweb stores switch abc123def456 --profile production"
22773
+ "ecomweb storefront key",
22774
+ "ecomweb storefront key --roll --yes"
22760
22775
  ],
22761
22776
  "flags": {
22762
22777
  "store-ref": {
@@ -22834,11 +22849,23 @@
22834
22849
  "hasDynamicHelp": false,
22835
22850
  "multiple": false,
22836
22851
  "type": "option"
22852
+ },
22853
+ "roll": {
22854
+ "description": "Replace the key; the old one keeps working for 7 days",
22855
+ "name": "roll",
22856
+ "allowNo": false,
22857
+ "type": "boolean"
22858
+ },
22859
+ "yes": {
22860
+ "description": "Skip the confirmation for --roll",
22861
+ "name": "yes",
22862
+ "allowNo": false,
22863
+ "type": "boolean"
22837
22864
  }
22838
22865
  },
22839
22866
  "hasDynamicHelp": false,
22840
22867
  "hiddenAliases": [],
22841
- "id": "stores:switch",
22868
+ "id": "storefront:key",
22842
22869
  "pluginAlias": "@ecomweb/cli",
22843
22870
  "pluginName": "@ecomweb/cli",
22844
22871
  "pluginType": "core",
@@ -22848,18 +22875,18 @@
22848
22875
  "relativePath": [
22849
22876
  "dist",
22850
22877
  "commands",
22851
- "stores",
22852
- "switch.js"
22878
+ "storefront",
22879
+ "key.js"
22853
22880
  ]
22854
22881
  },
22855
- "stores:update": {
22882
+ "storefront:skill": {
22856
22883
  "aliases": [],
22857
22884
  "args": {},
22858
- "description": "Update the current store's name or description",
22885
+ "description": "Show or update the ecomweb-storefront skill that teaches Claude Code and Codex this storefront",
22859
22886
  "examples": [
22860
- "ecomweb stores update --name \"Mai Phú Hưng\"",
22861
- "ecomweb stores update --stdin <<< '{\"name\":\"Mai Phú Hưng\",\"description\":\"Đồ gia dụng\"}'",
22862
- "ecomweb stores update --file store.json"
22887
+ "ecomweb storefront skill",
22888
+ "ecomweb storefront skill --update",
22889
+ "ecomweb storefront skill --update --dry-run"
22863
22890
  ],
22864
22891
  "flags": {
22865
22892
  "store-ref": {
@@ -22938,29 +22965,16 @@
22938
22965
  "multiple": false,
22939
22966
  "type": "option"
22940
22967
  },
22941
- "stdin": {
22942
- "description": "Read JSON body from stdin",
22943
- "name": "stdin",
22968
+ "update": {
22969
+ "description": "Replace the project's skill with the one in the store's current template (nothing else is touched)",
22970
+ "name": "update",
22944
22971
  "allowNo": false,
22945
22972
  "type": "boolean"
22946
22973
  },
22947
- "file": {
22948
- "description": "Read JSON body from file",
22949
- "name": "file",
22950
- "hasDynamicHelp": false,
22951
- "multiple": false,
22952
- "type": "option"
22953
- },
22954
- "name": {
22955
- "description": "Store name (2-100 characters)",
22956
- "name": "name",
22957
- "hasDynamicHelp": false,
22958
- "multiple": false,
22959
- "type": "option"
22960
- },
22961
- "description": {
22962
- "description": "Store description",
22963
- "name": "description",
22974
+ "dir": {
22975
+ "description": "The storefront project",
22976
+ "name": "dir",
22977
+ "default": ".",
22964
22978
  "hasDynamicHelp": false,
22965
22979
  "multiple": false,
22966
22980
  "type": "option"
@@ -22968,7 +22982,7 @@
22968
22982
  },
22969
22983
  "hasDynamicHelp": false,
22970
22984
  "hiddenAliases": [],
22971
- "id": "stores:update",
22985
+ "id": "storefront:skill",
22972
22986
  "pluginAlias": "@ecomweb/cli",
22973
22987
  "pluginName": "@ecomweb/cli",
22974
22988
  "pluginType": "core",
@@ -22978,8 +22992,8 @@
22978
22992
  "relativePath": [
22979
22993
  "dist",
22980
22994
  "commands",
22981
- "stores",
22982
- "update.js"
22995
+ "storefront",
22996
+ "skill.js"
22983
22997
  ]
22984
22998
  },
22985
22999
  "analytics:ga4:all": {
@@ -25489,5 +25503,5 @@
25489
25503
  ]
25490
25504
  }
25491
25505
  },
25492
- "version": "0.3.1"
25506
+ "version": "0.4.0"
25493
25507
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecomweb/cli",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "Agent-friendly CLI for the ecomweb platform",
5
5
  "author": "travistech20",
6
6
  "license": "MIT",