Skip to content

Commit a45ab43

Browse files
jorgemoyachanceaclarkjamesqquickmatthewvolkjordanarldt
authored
Release: Catalyst CLI 1.0.0 and create-catalyst 2.0.0 (merge alpha → canary) (#3077)
* chore: add initial changeset for @bigcommerce/catalyst * chore: add pre version setup files * fix: optimize catalyst deployments * rename variables to be prefixed with CATALYST_ * feat(cli): run build automatically when deploying Deploy now runs the Catalyst build pipeline before bundling, so users no longer need to manually run `catalyst build && catalyst deploy`. * feat(cli): add --prebuilt flag to deploy command (#2874) skip build step when --prebuilt is passed; fail with actionable error when .bigcommerce/dist/ is missing or empty. * fix(cli): change --secret from variadic to repeatable * feat(cli): map ignition error codes to actionable messages (#2879) * feat(cli): map ignition error codes to actionable messages * write and read access token and store hash from project json file * fix linting * fix linting * added changeset * updated deploy tests to use vitest stubbing for environment variables * check valid options first in deploy command * remove default loading of environment variable files * added changeset * add .bigcommerce directory to core .gitignore file * add changeset * add comment and new line in gitignore * remove changeset * feat(cli): add whoami command (#2881) * feat(cli): add crash reporting with trace ids (#2880) * feat(cli): add crash reporting with trace ids Centralized error handling via withErrorHandler HOF, singleton telemetry with UUID trace ids, X-Correlation-Id headers on all API calls, and global uncaught exception handlers. On any CLI error, a trace ID is displayed for support debugging. * refactor(cli): remove traceId() and trackError() abstractions * fix(cli): update deploy tests to match error handler string output The error handler extracts the message string from Error objects before passing to consola.error, so tests should expect strings, not Error objects. * refactor(cli): move error handling from per-command HOF to top-level try/catch Replace the withErrorHandler() HOF pattern with a single try/catch around program.parseAsync() in the entry point. This makes error handling automatic for all commands instead of requiring each command author to remember to wrap their action. - Add commandName property to Telemetry, set by preAction hook via Commander's actionCommand parameter - Delete error-handler.ts and its spec - Update tests to assert error propagation via rejects.toThrow() * fix(cli): address PR feedback on error handling - Remove redundant closeAndFlush() from try block (postAction hook already handles it) - Only show trace ID when telemetry is enabled; prompt disabled users to enable telemetry without showing an unlookable trace ID * fix(cli): wrap entry point in IIFE for module compatibility * feat(cli): add auth login and auth logout commands (#2887) OAuth device code flow for browser-based authentication. Stores credentials in .bigcommerce/project.json. * feat(cli): centralize credential resolution with resolveCredentials utility (#2888) Add resolveCredentials() that resolves storeHash/accessToken from flags, env vars, or stored config, with unified error message mentioning `catalyst auth login`. Apply to project create/list/link and deploy. * feat(cli): remove --root-dir flag from project create and link commands (#2892) * feat(cli): remove dev command (#2893) users should run next dev directly instead * feat(cli): remove next start proxy from start command (#2894) start command now only runs opennextjs-cloudflare preview. vanilla next.js users should run next start directly. * add --env-file flag allowing user to pass path to environment variable file to load * rebase on alpha * added changeset * rename variable to fix linting issue * fix linting * remove changeset * throw error on failed load of env file * add arg parsing for env path * fix linting * add tests for --env-path flag * fix linting * feat(cli): remove framework config and simplify build command (#2895) * fix: show readable error when project creation errors with 422 (#2938) * CATALYST-1718: feat(cli) - Add catalyst logs command (#2921) * fix(cli): symlink .env.local to .dev.vars before preview (#2944) Wrangler reads secrets from .dev.vars, not .env.local. Create a symlink from .bigcommerce/.dev.vars to .env.local before running opennextjs-cloudflare preview so the local server has access to environment variables. * fix(cli): pin @opennextjs/cloudflare peer dependency to 1.17.3 (#2949) * chore: consolidate changesets for alpha release Remove individual changesets and update the umbrella major changeset with full CLI release notes covering all commands and features. Co-Authored-By: Claude <noreply@anthropic.com> * chore: version @bigcommerce/catalyst@1.0.0-alpha.1 Co-Authored-By: Claude <noreply@anthropic.com> * chore: version @bigcommerce/catalyst@1.0.0-alpha.2 Rebuild dist to fix env var resolution (CATALYST_* instead of BIGCOMMERCE_*) and remove stale makeOptionMandatory on deploy. Co-Authored-By: Claude <noreply@anthropic.com> * fix(cli): clean up deployment url output (#2960) * fix(cli): clean up deployment url output Remove redundant console.log, trailing \n on spinner message, and prepend https:// scheme so the url is clickable in terminal emulators. * fix(cli): fix lint warnings and update test expectations * refactor(cli): rename "trace id" to "correlation id" (#2962) * feat(cli): auto-detect environment variables as deploy secrets (#2965) * chore: add changeset for auto-detect deploy secrets (#2972) * chore: version @bigcommerce/catalyst@1.0.0-alpha.3 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * feat(cli): add Commander.js built-in help text to all commands (#2984) Add .description(), .addHelpText(), and .summary() to all CLI commands so that `catalyst <command> --help` becomes the canonical reference. Hide internal-only options (--api-host, --login-url) from help output. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: update catalyst cli with new client id * feat(cli): LTRAC-612 show global options in subcommand help (#2992) Apply `.configureHelp({ showGlobalOptions: true })` to every Command and subcommand so `catalyst <command> --help` surfaces the root-level `--env-path` option (and other globals) under a "Global Options" section. Previously these were only visible on `catalyst --help`. Refs LTRAC-612 Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-444: fix(cli) - Read store hash and access token from project.json (#2997) * LTRAC-444: fix(cli) - Read store hash and access token from project.json `catalyst logs tail` and `catalyst logs query` now resolve credentials via `resolveCredentials`, falling back to `.bigcommerce/project.json` when `--store-hash` / `--access-token` flags or `CATALYST_STORE_HASH` / `CATALYST_ACCESS_TOKEN` env vars are not provided. This matches the behavior already used by `project`, `deploy`, and `build`, and removes the need to re-pass credentials after running `catalyst project link`. Also migrates the shared `--store-hash` / `--access-token` option helpers from the legacy `BIGCOMMERCE_*` env var names to `CATALYST_*` for consistency with the rest of the CLI. Fixes LTRAC-444 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-444: fix(cli) - Migrate projectUuidOption env var to CATALYST_PROJECT_UUID The shared `projectUuidOption()` helper was still using the legacy `BIGCOMMERCE_PROJECT_UUID` env var name. It was missed in the earlier `CATALYST_*` rename sweep because `logs` was the only consumer at the time. The inline declarations in `build.ts` and `deploy.ts` already use `CATALYST_PROJECT_UUID`, so this aligns the helper with the rest of the CLI and the alpha.2 patch notes. Refs LTRAC-444 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * TRAC-137: Add native hosting option in catalyst CLI (#3003) * TRAC-614: Add project delete command to catalyst CLI (#3004) * build(cli): TRAC-668 bump wrangler to 4.90.0 (#3010) wrangler@4.24.3 produces a broken bundle for Next.js 16.2.x: the app-page-turbo.runtime.prod.js webpack runtime fails to initialize at request time with "Cannot read properties of undefined (reading 'require')". wrangler@4.90.0 bundles it correctly. Refs TRAC-668 Co-authored-by: Claude <noreply@anthropic.com> * chore: version @bigcommerce/catalyst@1.0.0-alpha.4 Move @commander-js/extra-typings from devDependencies to dependencies. It is externalized in the tsup build and must be installed at runtime; previously missing from the published package caused CLI startup to fail with ERR_MODULE_NOT_FOUND. Co-Authored-By: Claude <noreply@anthropic.com> * feat(cli): show deployment hostnames in project list output (#2988) * feat(cli): add `channel update` command to update channel site url (#3001) * fix(cli): remove implicit secret detection from deploy (#3025) The deploy command used to silently scan process.env for an allowlist of keys (BIGCOMMERCE_STORE_HASH, BIGCOMMERCE_CHANNEL_ID, BIGCOMMERCE_STOREFRONT_TOKEN, BIGCOMMERCE_API_HOST, BIGCOMMERCE_GRAPHQL_API_DOMAIN, AUTH_SECRET) and ship any matches as deployment secrets. A developer with .env.local populated for local dev could push those dev values to production without noticing. Require explicit --secret KEY=VALUE declarations instead, matching the explicit-only model other deploy CLIs (Vercel, Netlify, Wrangler) follow. Co-authored-by: Claude <noreply@anthropic.com> * feat(cli): make catalyst auth login and project create onboarding interactive (#3026) * LTRAC-613: feat(cli) - Make auth login and project create onboarding interactive First-time users hit `failed to request device code: 404 Not Found` when running `catalyst auth login` before `catalyst project create`, with no obvious way to recover. Make the login flow self-sufficient by adding a manual-credentials fallback: if the device-code endpoint fails, the CLI warns with the underlying reason, asks whether to fall back to entering a store hash + access token directly, and validates the manual creds against the store profile API before persisting them. `catalyst project create` no longer fails fast when credentials are missing — it kicks off the same interactive login flow inline, so users don't need to know the ordering. `catalyst create` (scaffolding) picks up the manual fallback automatically since it shares the orchestrator. Refs LTRAC-613 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-613: chore(cli) - Drop changeset for interactive auth onboarding Refs LTRAC-613 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-440: fix(cli) - Autoreconnect log stream when API proxy stalls (#3027) When the API proxy half-closes the socket — bytes stop arriving but no FIN or error is surfaced — `reader.read()` blocks forever, so the 1-minute connection TTL check below it never runs and the stream goes silent until the user restarts `catalyst logs tail`. Race `reader.read()` against the remaining TTL so the TTL acts as an absolute deadline. When it fires we cancel the reader, break out of the inner loop, and the outer reconnect loop opens a fresh stream. Warn the user only when no data arrived during the window — healthy rotations stay silent to match existing behavior. Refs LTRAC-440 Co-authored-by: Claude <noreply@anthropic.com> * fix(cli): clean dist directory before each build (#3030) Wrangler's `--outdir` writes the deployment bundle alongside whatever is already in `.bigcommerce/dist` rather than replacing the directory. When Wrangler is upgraded between builds — or any prior artifact lingers — old files end up in the zip uploaded to the server. In one observed case the dist contained both the current Wrangler 4.x plain wasm names and `?module`-suffixed copies from an older Wrangler version. The `?` in the filenames confused the server-side multipart upload to Cloudflare and the deploy failed with: Uncaught Error: No such module "<hash>-resvg.wasm". imported from "worker.js" Wipe the dist directory at the start of `buildCatalystProject` so each build starts from a clean slate. Refs LTRAC-814 Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-440: ref(cli) - Extract pumpUntilRotation from tailLogs (#3029) Split the SSE reader's connection lifecycle from its read pump. The outer loop in `tailLogs` now owns opening streams, retrying transient errors, and emitting user-facing reconnect messages. The inner loop becomes a standalone `pumpUntilRotation` that reads bytes from a single connection and returns a `Rotation` value ('ttl' | 'idle-timeout' | 'stream-done') describing why it stopped, instead of using break + side-effecting warnings. No behavior change — every rotation reason and error path maps to the same user-facing output and retry semantics as before, and the existing test suite passes unmodified. Refs LTRAC-440 Co-authored-by: Claude <noreply@anthropic.com> * fix(cli): strip @vercel/otel hook in Commerce Hosting setup (#3028) * LTRAC-807: fix(cli) - Strip @vercel/otel hook in Commerce Hosting setup `core/instrumentation.ts` registers `@vercel/otel`. OpenNext bundles the storefront as a Node-style worker, so the bundler resolves `@vercel/otel` through its `node` export condition and pulls `@opentelemetry/sdk-node` into the worker chunk. At cold start, workerd evaluates Node-only side effects that `nodejs_compat` doesn't cover and throws — Next.js's instrumentation loader surfaces this as "Failed to prepare server" on every cold start in `catalyst logs tail`. No code in `/core` actually consumes the tracer, so we drop the file (and the `@vercel/otel` dependency) as part of `setupCommerceHosting`, next to the existing `convertProxyToMiddleware` step. The change is scoped to the Commerce Hosting opt-in path; self-hosted / Vercel deploys keep the file. Fixes LTRAC-807 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-807: fix(cli) - Run OTel cleanup on already-transformed projects The first patch only removed `core/instrumentation.ts` and `@vercel/otel` as part of `setupCommerceHosting`, which is gated by `!isTransformed` in both `offerCommerceHostingSetup` and `deploy`. Existing Commerce Hosting users — those already transformed — never hit that code path on re-link or re-deploy, so they kept seeing the cold-start error. Extract the cleanup into `cleanupCloudflareIncompatibilities` and call it from the transformed branches of both flows (and from `setupCommerceHosting` itself, for fresh users). Idempotent and silent unless it actually removed something — in which case it logs a one-line `consola.info` so the user sees what changed. Refs LTRAC-807 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-807: fix(cli) - Prompt before removing instrumentation hook Vercel users who customized `core/instrumentation.ts` would have their work silently wiped when running `catalyst project link` or `catalyst deploy`, because the cleanup helper unconditionally deleted the file and dropped `@vercel/otel`. Make the cleanup interactive instead: in a TTY, prompt before doing anything; in non-TTY (CI), warn and skip so headless deploys preserve customizations. The dep removal is tied to the file decision — if the file stays, the dep stays (the customized file probably imports it). `setupCommerceHosting` is now async (it awaits the cleanup). All callers (`offerCommerceHostingSetup`, `deploy`, `create`, `runCommerceHostingSetup`) are updated to await it. Refs LTRAC-807 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-807: style(cli) - Add blank line after instrumentation prompt The "Removed core/instrumentation.ts ..." (or "Leaving ...") info log landed directly under the user's Yes/No answer with no spacing, making the prompt and the result visually run together. Insert a `consola.log('')` right after the prompt resolves so the answer and the result are separated by a blank line. Refs LTRAC-807 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-808: fix(cli) - Suppress OpenNext IMAGES binding warning in logs tail (#3038) * LTRAC-808: fix(cli) - Suppress OpenNext IMAGES binding warning in logs tail OpenNext's Cloudflare image handler logs `env.IMAGES binding is not defined` on every `/_next/image` request when no IMAGES binding is configured, then falls back to serving the original bytes. Native Hosting intentionally runs without that binding, so the warning is expected noise that flooded testers watching `catalyst logs tail`. Filter the warning out of the human-readable log formats and drop events that contain nothing but suppressed noise. Raw `--format json` output is left untouched so piped consumers still see the full stream. Fixes LTRAC-808 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-808: chore(cli) - Drop changeset (not needed on alpha branch) Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-442: feat(cli) - Persist deployment env vars via `catalyst env` (#3039) Passing `--secret KEY=VALUE` for every env var on every `catalyst deploy` is cumbersome and error-prone, and got worse after implicit secret detection was removed (LTRAC-640): nothing reaches a deployment unless every secret is re-typed. Add a `catalyst env` command group (`add`, `remove`, `list`) that stores deployment secrets in `.bigcommerce/project.json` (gitignored, alongside the already-persisted access token). `catalyst deploy` now sends these automatically, merging them with any inline `--secret` flags — inline flags win on conflict so a stored value can still be overridden per-run. Stored vars are deploy-only (not injected into the local build) and are always sent as `secret`. Values are masked in all command output. A shared `parseEnvAssignment` splits on the first `=`, so values containing `=` (e.g. base64/tokens) survive intact — a fix over deploy's prior `split('=')`. Refs LTRAC-442 Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-441: fix(cli) - Surface clear re-auth error on expired token (#3040) Expired device-code access tokens caused `project list`, `deploy`, `logs tail`, and `auth whoami` to fail with a generic "Unauthorized" message, leaving users unsure they needed to re-authenticate. The CLI stores no expiry/refresh metadata, so silent renewal isn't possible. Add a shared `SessionExpiredError` plus `assertAuthorized(response)` and call it at every authenticated fetch site so a 401 consistently directs the user to run `catalyst auth login`. 403 (e.g. "Infrastructure Projects API not enabled") is intentionally left unchanged since it is overloaded for scope/feature-flag errors. Refs LTRAC-441 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * LTRAC-808: ref(cli) - Remove IMAGES warning suppression (moved to tail-worker) (#3041) The OpenNext `env.IMAGES binding is not defined` warning is a platform fact, not a per-client preference: Commerce Hosting intentionally runs without that binding, so the warning is always noise for every consumer. Filtering it in the CLI (#3038) only helped users on a new enough CLI and did nothing for the copies forwarded into Sentry. The suppression now lives in the ignition-tail-worker, where it applies to all CLI versions and consumers at once and is also dropped from Sentry. Remove the now-redundant CLI-side filter and its tests so there is a single source of truth. Must merge AFTER the tail-worker change is deployed; otherwise newer-CLI users briefly see the warning again until the worker filter is live. Refs LTRAC-808 Co-authored-by: Claude <noreply@anthropic.com> * chore: version @bigcommerce/catalyst@1.0.0-alpha.5 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * LTRAC-873: fix(cli) - Derive Wrangler compatibility_date dynamically (#3045) The build pinned compatibility_date to 2025-09-15 while the deployment service stamps a current date at deploy time, so workers ran under newer Cloudflare runtime semantics than they were built against. Compute the date as current UTC date minus one month, matching the same offset the deployment service applies, so build and deploy semantics stay aligned. Refs LTRAC-873 Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-908: feat(cli) - Add `catalyst channel link` command (#3051) * LTRAC-908: feat(cli) - Add `catalyst channel connect` command Add a `connect` subcommand under `catalyst channel` that connects an existing local checkout to a BigCommerce channel and writes its credentials to .env.local — useful when a teammate clones a Catalyst repo (where .env.local is gitignored) and needs to regenerate it from the channel. Resolves credentials from flags/env, the persisted project config, or an interactive device-code login (persisting the result), then selects a channel (or takes --channel-id), fetches its channel-init data, and writes .env.local in the cwd. Supports repeatable --env KEY=VALUE overrides. Supersedes the dropped plan to port create-catalyst's standalone `init`: the catalyst CLI is native-hosting only and `catalyst create` already connects a channel for new projects, so the only residual need — bootstrapping .env.local for an existing checkout — lives under `channel`. Refs LTRAC-908 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-908: ref(cli) - Clean up `channel connect` success output Drop the per-line info-icon clutter on the next-steps hint: print a single success line (channel + .env.local) followed by a spaced, plain block with the `pnpm run dev` command. Refs LTRAC-908 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-908: ref(cli) - Rename `channel connect` to `channel link` Align with `catalyst project link` — the established CLI verb for linking a local checkout to a remote BigCommerce resource (infrastructure project vs storefront channel). The success line now reads "Linked to channel …". Refs LTRAC-908 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-908: ref(cli) - Extract shared channel sort/label helpers `channel link` had copied `catalyst create`'s channel-platform sort comparator and the Stencil/title-case label. Move both into channels.ts as `sortChannelsByPlatform` (returns a sorted copy) and `channelPlatformLabel`, and use them from both pickers. No behavior change. Refs LTRAC-908 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-911: ref(cli) - Standardize interactive prompts on `@inquirer/prompts` (#3054) * LTRAC-911: ref(cli) - Standardize interactive prompts on @inquirer/prompts Replace all `consola.prompt` usages with `@inquirer/prompts` (confirm/input/select/ checkbox) so the CLI uses one prompt library; consola is retained for logging only. Converts create's locale multiselect to an inquirer `checkbox` with a `validate` (drops the consola cast + recursion hack), and migrates the prompts in login, channel link/update, project, deploy, channel-site-flow, and commerce-hosting. Specs updated to mock `@inquirer/prompts`. Chosen over consola because consola.prompt has no masked input (login's access token uses `password({ mask: true })`), plus inquirer's validate/theming. Stacked on #3051 (channel link). Refs LTRAC-911 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-911: style(cli) - Standardize spacing on prompts and command output Stray blank lines came from leading/trailing newlines and `consola.log('')` calls, which the fancy reporter timestamps as their own log line. Collapse multi-line "Next steps" output into a single `consola.log` call (one timestamp, predictable spacing) and drop the manual blank-line separators after prompts. `project list` now joins its project blocks into one log call so each blank separator isn't timestamped. Refs LTRAC-911 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * chore: version @bigcommerce/catalyst@1.0.0-alpha.6 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * LTRAC-468: feat(cli) - Replace git clone with tarball extraction in create (#3061) Merchants now receive a clean standalone project instead of the full monorepo. `catalyst create` downloads the core/ subdirectory as a tarball from GitHub's codeload endpoint and stream-extracts it to the project root, resolves workspace: dependencies to their published npm versions, detects the invoking package manager (npm/pnpm/yarn/bun) from npm_config_user_agent, and initializes a fresh git repository. Previously create cloned the entire bigcommerce/catalyst monorepo (full history, packages/*, turbo) and built the workspace packages locally. The core/ contents are now flattened to the project root, so deploy/project/ commerce-hosting no longer assume a core/ subdirectory. Refs LTRAC-468 Co-authored-by: Claude Fable 5 <noreply@anthropic.com> * feat: TRAC-924 upgrade: utility helpers and per-file merge engine Adds the foundational layer for `catalyst upgrade`: small fs utilities, ref parsing, base-version similarity scoring, and the per-file 3-way merge engine (`git merge-file`). Refs TRAC-924 Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * feat: TRAC-925 upgrade: whole-tree merge engine and index staging Adds the whole-tree merge engine (`git merge-tree --write-tree`) as the default strategy, plus `applyIndexState` which registers conflicts as real unmerged index entries so editors surface the merge UI. Refs TRAC-925 Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * feat: TRAC-926 upgrade: CLI command, project resolution, download, and tests Completes the `catalyst upgrade` command: project layout detection, tarball download/cache, base ref resolution, the full CLI action, and the integration and action-level test suite. Refs TRAC-926, TRAC-927 Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com> * TRAC-499: feat - implement query logs in catalyst cli (#3068) * TRAC-499: feat - implement query logs in catalyst cli * TRAC-499: test - implement tests for query logs * LTRAC-910: ref(cli) - Reduce create-catalyst to a thin wrapper over `catalyst create` (#3053) * LTRAC-910: ref(cli) - Reduce create-catalyst to a thin wrapper over `catalyst create` create-catalyst now delegates to `@bigcommerce/catalyst`: its entry resolves the catalyst bin from its own dependency tree and spawns `catalyst create`, forwarding all args (stdio inherited, exit code and signals propagated). All scaffolding logic now lives in @bigcommerce/catalyst. - Add @bigcommerce/catalyst as a workspace dependency; drop the ~20 runtime deps the old in-package commands needed. - Delete the duplicated commands/, utils/, prompts/, and hooks/. - Bump the tsup target to node24 so esbuild preserves `import.meta.url`. Package name and `bin` are unchanged, so `pnpm create catalyst` / `npx create-catalyst` keep working. The dropped init/integration/telemetry subcommands are superseded by `catalyst channel link`, (integration dropped), and `catalyst telemetry`. Refs LTRAC-910 Co-Authored-By: Claude <noreply@anthropic.com> * LTRAC-910: chore - Add changeset for create-catalyst thin wrapper Refs LTRAC-910 Co-Authored-By: Claude <noreply@anthropic.com> --------- Co-authored-by: Claude <noreply@anthropic.com> * LTRAC-988: Add custom domain command (#3070) * LTRAC-988: feat(cli) - Add custom domain command Add a domains command group with a create-domain API client and wait support for pending domain verification. Refs LTRAC-988 * LTRAC-988: fix(cli) - Clarify domain API server errors Include the HTTP status and correlation ID when domain API requests fail with a server-side response so 502 Bad Gateway errors are actionable. Refs LTRAC-988 * LTRAC-988: fix(cli) - Avoid duplicate correlation ID Keep domain API server error messages concise because the CLI fatal error handler already prints the correlation ID for support. Refs LTRAC-988 * LTRAC-989: feat(cli) - List custom domains (#3071) Add domain listing support with optional domain and verification-status filters so users can scan configured Native Hosting domains from the CLI. Refs LTRAC-989 * LTRAC-990: feat(cli) - Show custom domain status (#3072) Add a domains status command that fetches one domain, renders its color-coded state, and can wait for pending verification to finish. Refs LTRAC-990 * LTRAC-991: feat(cli) - Remove custom domain (#3073) Add a domains remove command that checks current status, confirms active domain removal, and deletes the domain through the Native Hosting API. Refs LTRAC-991 * chore(cli) - Consolidate CLI changesets into single 1.0.0 release note Collapse the 11 individual @bigcommerce/catalyst changesets accumulated across the alpha prerelease series into one comprehensive major changeset so the stable 1.0.0 changelog reads as a single release announcement. Refresh the command surface to include create, channel, env, domains, and upgrade. No change to the resulting version bump (still major -> 1.0.0). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(cli) - Exit changeset pre mode for stable release Run `changeset pre exit` so the Version Packages step produces stable versions (@bigcommerce/catalyst 1.0.0, @bigcommerce/create-catalyst 2.0.0) instead of continuing the 1.0.0-alpha.* prerelease series. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * fix(cli) - Update program-status copy from alpha to beta The Infrastructure API 403 error messages told users to reach out 'if you are part of the alpha'. The Native Hosting program is now in beta, so update the copy across project, domains, and logs error paths (and the matching test assertions). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * chore(cli) - Collapse subcommands to top-level groups in 1.0.0 changelog Use `catalyst project`, `catalyst auth`, `catalyst logs`, and `catalyst channel` in the release-note command table instead of listing each subcommand row, for a more concise changelog. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Chancellor Clark <chancellor.clark@bigcommerce.com> Co-authored-by: jamesqquick <james.q.quick@gmail.com> Co-authored-by: Matthew Volk <matt.volk@bigcommerce.com> Co-authored-by: Jordan Arldt <jordan.arldt@bigcommerce.com> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Parth Shah <48393781+parthshahp@users.noreply.github.com>
1 parent 81b88df commit a45ab43

120 files changed

Lines changed: 16676 additions & 5670 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.changeset/catalyst-cli-1.0.0.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
---
2+
"@bigcommerce/catalyst": major
3+
---
4+
5+
Introducing the Catalyst CLI (`@bigcommerce/catalyst`) — a single command-line tool for scaffolding, building, and deploying your Catalyst storefront to BigCommerce's Native Hosting infrastructure.
6+
7+
### Highlights
8+
9+
- **Scaffold a storefront**`catalyst create` downloads a clean, standalone project (flattened from `core/`, `workspace:` dependencies resolved to published versions, fresh git repo) via tarball extraction and connects it to your BigCommerce store. The package manager is auto-detected from `npm_config_user_agent`.
10+
- **Browser-based authentication** — Run `catalyst auth login` to authenticate via an OAuth device code flow. Credentials are stored locally in `.bigcommerce/project.json` for use by all subsequent commands. CI/CD environments can use `--store-hash` and `--access-token` flags or environment variables instead.
11+
- **Project & channel management** — Create, link, and list BigCommerce infrastructure projects with `catalyst project`, and connect storefront channels with `catalyst channel`.
12+
- **Build & deploy**`catalyst build` runs the OpenNext Cloudflare build pipeline (deriving the Wrangler `compatibility_date` dynamically) and generates deployment artifacts. `catalyst deploy` bundles, uploads, and deploys your storefront with real-time progress streaming. Pass runtime secrets with `--secret KEY=VALUE`; environment variables are auto-detected as deploy secrets.
13+
- **Persisted deployment env vars** — Manage deployment environment variables across deploys with `catalyst env` (list and remove; values are masked).
14+
- **Custom domains** — Add, list, check the status of, and remove custom domains for a Native Hosting project with `catalyst domains`.
15+
- **Local preview**`catalyst start` launches a local Cloudflare Workers preview of your built storefront via the OpenNext adapter.
16+
- **Live & historical logs**`catalyst logs tail` streams real-time application logs with color-coded levels and auto-reconnect; `catalyst logs query` retrieves historical logs.
17+
- **In-place upgrades**`catalyst upgrade` upgrades a project to a newer version via a resilient 3-way merge (`git merge-tree`, falling back to per-file `git merge-file`), producing resolvable conflict markers instead of ever aborting.
18+
- **Smart credential resolution** — Configuration is resolved in priority order: CLI flags → `--env-file` → process environment variables → `.bigcommerce/project.json`.
19+
- **Telemetry** — Anonymous usage telemetry with session and correlation IDs for support. Opt out anytime with `catalyst telemetry disable`.
20+
21+
### Commands
22+
23+
| Command | Description |
24+
|---------|-------------|
25+
| `catalyst create` | Scaffold and connect a Catalyst storefront to your BigCommerce store |
26+
| `catalyst auth` | Authenticate, sign out, and verify stored credentials |
27+
| `catalyst project` | Create, link, and list infrastructure projects |
28+
| `catalyst channel` | Connect a storefront channel to your project |
29+
| `catalyst build` | Build your Catalyst project for deployment |
30+
| `catalyst deploy` | Build and deploy to BigCommerce Native Hosting |
31+
| `catalyst env` | Manage persisted deployment environment variables |
32+
| `catalyst domains` | Manage custom domains for a Native Hosting project |
33+
| `catalyst start` | Start a local Cloudflare Workers preview |
34+
| `catalyst logs` | Stream live logs and query historical logs |
35+
| `catalyst upgrade` | Upgrade a project to a newer version via 3-way merge |
36+
| `catalyst version` | Display CLI, Node.js, and platform info |
37+
| `catalyst telemetry` | View or change telemetry collection status |
38+
39+
### Getting started
40+
41+
```bash
42+
cd core
43+
pnpm add @bigcommerce/catalyst@latest @opennextjs/cloudflare@1.17.3
44+
pnpm catalyst auth login
45+
pnpm catalyst project create
46+
pnpm catalyst deploy --secret BIGCOMMERCE_STORE_HASH=<hash> --secret BIGCOMMERCE_STOREFRONT_TOKEN=<token>
47+
```
48+
49+
For full documentation, see the [Native Hosting Overview](https://developer.bigcommerce.com/docs/storefront/catalyst/deployment/native-hosting/overview) and [CLI Reference](https://developer.bigcommerce.com/docs/storefront/catalyst/reference/cli).

.changeset/config.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,5 @@
1212
"tag": true
1313
},
1414
"baseBranch": "canary",
15-
"updateInternalDependencies": "patch",
16-
"ignore": ["@bigcommerce/catalyst"]
15+
"updateInternalDependencies": "patch"
1716
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@bigcommerce/create-catalyst": major
3+
---
4+
5+
Reduce `create-catalyst` to a thin wrapper that delegates to `catalyst create`. `pnpm create catalyst` / `npx create-catalyst` still scaffold a project — now by invoking `@bigcommerce/catalyst` under the hood — so the scaffolding UX is unchanged. The standalone `init`, `integration`, and `telemetry` subcommands are removed; use `catalyst channel link` and `catalyst telemetry` from the consolidated CLI instead.

.changeset/pre.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"mode": "exit",
3+
"tag": "alpha",
4+
"initialVersions": {
5+
"@bigcommerce/catalyst": "1.0.0",
6+
"@bigcommerce/catalyst-core": "1.6.2",
7+
"@bigcommerce/catalyst-client": "1.0.1",
8+
"@bigcommerce/create-catalyst": "1.0.2",
9+
"@bigcommerce/eslint-config-catalyst": "1.0.0"
10+
},
11+
"changesets": [
12+
"alpha-release-notes",
13+
"auto-detect-deploy-secrets",
14+
"cli-built-in-help-text",
15+
"cli-dynamic-compat-date",
16+
"cli-show-env-path-in-help",
17+
"cli-strip-instrumentation-hook",
18+
"fix-env-var-names",
19+
"project-list-deployed-url",
20+
"wise-worms-hear"
21+
]
22+
}

core/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,6 @@ build-config.json
5454
# OpenNext
5555
.open-next
5656
.wrangler
57+
58+
# Catalyst CLI config
59+
.bigcommerce

packages/catalyst/AGENTS.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# Catalyst CLI (`@bigcommerce/catalyst`)
2+
3+
CLI tool for Catalyst development and deployment — handles build, dev server, and deployment to Cloudflare Workers.
4+
5+
## Directory Structure
6+
7+
```
8+
src/cli/
9+
├── index.ts # Entry point (#!/usr/bin/env node)
10+
├── program.ts # Commander program setup, registers all commands
11+
├── commands/ # CLI command implementations (auth, build, deploy, logs, project, start, telemetry, version)
12+
├── hooks/ # Pre/post action hooks (telemetry)
13+
└── lib/ # Utilities (auth, logger, project config, credentials, wrangler config, telemetry, deployment errors)
14+
templates/ # OpenNext config and public_headers template
15+
tests/mocks/ # MSW handlers and test mocks
16+
dist/cli.js # Bundled output (single ESM file)
17+
```
18+
19+
## CLI Commands
20+
21+
| Command | Description |
22+
|---------|-------------|
23+
| `auth whoami/login/logout` | Manage authentication (device code OAuth flow, credential storage) |
24+
| `build` | Build Catalyst project using OpenNext/Cloudflare adapter |
25+
| `deploy` | Deploy to Cloudflare with bundle upload |
26+
| `logs` | View logs (`tail` default, `query` planned). Supports `--format` (default/json/pretty/short/request) |
27+
| `project create/list/link` | Manage BigCommerce infrastructure projects |
28+
| `start` | Start local preview using OpenNext Cloudflare adapter |
29+
| `telemetry` | Enable/disable/check telemetry |
30+
| `version` | Display version and platform info |
31+
32+
## Development
33+
34+
```bash
35+
pnpm dev # Watch mode (rebuilds dist/cli.js on changes)
36+
pnpm build # Production build via tsup
37+
pnpm test # Run tests (vitest)
38+
pnpm test:watch # Watch mode tests
39+
pnpm typecheck # tsc --noEmit
40+
pnpm lint # eslint with 0 warnings threshold
41+
```
42+
43+
## Testing Changes
44+
45+
To test CLI changes directly without a full publish cycle, build the CLI package first, then run the compiled output from inside the `core/` directory using its absolute path:
46+
47+
```bash
48+
# From packages/catalyst — rebuild the CLI
49+
pnpm build
50+
51+
# From core/ — run the CLI using the absolute path to the built output
52+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js <command>
53+
```
54+
55+
For example: `pnpm exec <repo-root>/packages/catalyst/dist/cli.js project list`.
56+
57+
## Build
58+
59+
- **Bundler**: tsup (`tsup.config.ts`)
60+
- **Entry**: `src/cli/index.ts``dist/cli.js` (single ESM bundle with source maps)
61+
- **Environment variables** injected at build time: `CLI_SEGMENT_WRITE_KEY`, `CONSOLA_LEVEL`
62+
63+
## Testing
64+
65+
- **Framework**: Vitest (`vitest.config.ts`)
66+
- **Coverage threshold**: 100% (strict)
67+
- **Mocking**: MSW for BigCommerce API calls; telemetry always disabled in tests (`vitest.setup.ts`)
68+
- **Test files**: co-located as `*.spec.ts` next to source files
69+
70+
## Key Dependencies
71+
72+
- `commander` — CLI framework
73+
- `execa` — process execution (next, pnpm, wrangler)
74+
- `consola` — logging
75+
- `zod` — API response validation
76+
- `conf` — persistent config (`.bigcommerce/project.json`)
77+
- `@segment/analytics-node` — telemetry
78+
- `adm-zip` — bundle zipping for deploy
79+
80+
## After Making Changes
81+
82+
Always run `pnpm typecheck` and `pnpm lint` after making code changes, and fix any errors or warnings before considering the work done. The lint config enforces zero warnings (`--max-warnings 0`). Use `pnpm lint --fix` to auto-fix formatting and fixable lint issues before manually editing.
83+
84+
## Code Style Notes
85+
86+
- **No `let` when avoidable** — prefer `const` with `while (true)` + `break` over mutable flags.
87+
- **No iterators/generators** — eslint `no-restricted-syntax` disallows `for...of` and generator functions. Use `.forEach()`, `.map()`, etc.
88+
- **Consola for logging** — use `consola` (from `../lib/logger`) instead of `console`. Use `colorize` from `consola/utils` for colored output.
89+
- **Shared CLI options** — commands that need `--store-hash`, `--access-token`, `--api-host`, and `--project-uuid` should use the shared option factories from `lib/shared-options.ts`. Chain `.makeOptionMandatory()` inline where needed to preserve commander's extra-typings inference.
90+
- **SSE stream pattern** — the fetch API's `ReadableStreamDefaultReader` doesn't support async iteration, so `while (true)` + `reader.read()` + `break` is the standard pattern. For long-lived streams, implement a TTL-based reconnect to free connection pool resources, and distinguish server-side disconnects (`TypeError: terminated`) from actual failures for retry logic.
91+
92+
## Integration Points
93+
94+
- **BigCommerce Infrastructure API**: `https://api.bigcommerce.com/stores/{storeHash}/v3/infrastructure/`
95+
- **Next.js**: dev/build/start
96+
- **OpenNext + Cloudflare**: serverless build and deploy via Wrangler

packages/catalyst/CHANGELOG.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# @bigcommerce/catalyst
2+
3+
## 1.0.0-alpha.6
4+
5+
### Patch Changes
6+
7+
- [#3061](https://github.com/bigcommerce/catalyst/pull/3061) [`eea1355`](https://github.com/bigcommerce/catalyst/commit/eea135543423dc0d50d6bff68d93f1548e54e096) Thanks [@jorgemoya](https://github.com/jorgemoya)! - `catalyst build` now derives the Cloudflare Workers `compatibility_date` dynamically (current date minus one month) instead of using a pinned date, keeping the build-time runtime semantics aligned with what the deployment service applies at deploy time.
8+
9+
## 1.0.0-alpha.5
10+
11+
### Minor Changes
12+
13+
- [#2988](https://github.com/bigcommerce/catalyst/pull/2988) [`24f35a4`](https://github.com/bigcommerce/catalyst/commit/24f35a4cc60d73036c264a896e816b98aa47bfba) Thanks [@jorgemoya](https://github.com/jorgemoya)! - Show every deployed URL for each project in `catalyst project list` output (the canonical hostname plus any vanity hostnames) so users can recover the hosted storefront URLs without having to redeploy.
14+
15+
### Patch Changes
16+
17+
- [#3028](https://github.com/bigcommerce/catalyst/pull/3028) [`bdc6e0b`](https://github.com/bigcommerce/catalyst/commit/bdc6e0bf055262e1440bcc1ebcc55597256b424a) Thanks [@jorgemoya](https://github.com/jorgemoya)! - Remove `core/instrumentation.ts` and the `@vercel/otel` dependency during Commerce Hosting setup. The hook isn't compatible with the OpenNext + Cloudflare Workers bundling path and caused a "Failed to prepare server" error on every cold start in `catalyst logs tail`. Self-hosted (non-Commerce Hosting) deployments are unaffected.
18+
19+
## 1.0.0-alpha.4
20+
21+
### Patch Changes
22+
23+
- [`de04f42`](https://github.com/bigcommerce/catalyst/commit/de04f42696b30b675bec2625eefa1e825b4a97ba) Thanks [@chanceaclark](https://github.com/chanceaclark)! - Add built-in help text to all CLI commands so `catalyst <command> --help` is the canonical reference.
24+
25+
- [`e740158`](https://github.com/bigcommerce/catalyst/commit/e7401583603aae85d4adef23b4b72eeb96e11907) Thanks [@chanceaclark](https://github.com/chanceaclark)! - Show the global `--env-path` option in every subcommand's `--help` output.
26+
27+
- [`e5b4dee`](https://github.com/bigcommerce/catalyst/commit/e5b4dee1fc108d648b6110707b572c1fc9bc2e7c) Thanks [@chanceaclark](https://github.com/chanceaclark)! - Update the CLI with the new client id.
28+
29+
## 1.0.0-alpha.3
30+
31+
### Minor Changes
32+
33+
- [#2972](https://github.com/bigcommerce/catalyst/pull/2972) [`e681933`](https://github.com/bigcommerce/catalyst/commit/e681933ebbe798198e4c1b8f6f20f67dc4ec36ad) Thanks [@jorgemoya](https://github.com/jorgemoya)! - Auto-detect environment variables as deploy secrets.
34+
35+
## 1.0.0-alpha.2
36+
37+
### Patch Changes
38+
39+
- Fix CLI environment variable resolution for `deploy`, `build`, and `project` commands. The published dist was using stale `BIGCOMMERCE_*` env var names instead of the correct `CATALYST_*` names (`CATALYST_STORE_HASH`, `CATALYST_ACCESS_TOKEN`, `CATALYST_PROJECT_UUID`).
40+
41+
## 1.0.0-alpha.1
42+
43+
### Major Changes
44+
45+
- Introducing the Catalyst CLI (`@bigcommerce/catalyst`) — a command-line tool for building and deploying your Catalyst storefront to BigCommerce's Native Hosting infrastructure.
46+
47+
### Highlights
48+
- **Browser-based authentication** — Run `catalyst auth login` to authenticate via an OAuth device code flow. Credentials are stored locally in `.bigcommerce/project.json` for use by all subsequent commands. CI/CD environments can use `--store-hash` and `--access-token` flags or environment variables instead.
49+
- **Project management** — Create, link, and list BigCommerce infrastructure projects with `catalyst project create`, `catalyst project link`, and `catalyst project list`.
50+
- **Build & deploy**`catalyst build` runs the OpenNext Cloudflare build pipeline and generates deployment artifacts. `catalyst deploy` bundles, uploads, and deploys your storefront with real-time progress streaming. Pass runtime secrets with `--secret KEY=VALUE`.
51+
- **Local preview**`catalyst start` launches a local Cloudflare Workers preview of your built storefront via the OpenNext adapter.
52+
- **Live log tailing**`catalyst logs tail` streams real-time application logs from your deployed storefront with color-coded log levels and multiple output formats.
53+
- **Smart credential resolution** — Configuration is resolved in priority order: CLI flags → `--env-file` → process environment variables → `.bigcommerce/project.json`.
54+
- **Telemetry** — Anonymous usage telemetry with session and correlation IDs for support. Opt out anytime with `catalyst telemetry disable`.
55+
56+
### Commands
57+
58+
| Command | Description |
59+
| ------------------------- | ------------------------------------------------- |
60+
| `catalyst auth login` | Authenticate via browser OAuth flow |
61+
| `catalyst auth logout` | Remove stored credentials |
62+
| `catalyst auth whoami` | Verify credentials and display store/project info |
63+
| `catalyst project create` | Create a new infrastructure project |
64+
| `catalyst project link` | Link to an existing infrastructure project |
65+
| `catalyst project list` | List infrastructure projects for your store |
66+
| `catalyst build` | Build your Catalyst project for deployment |
67+
| `catalyst deploy` | Build and deploy to BigCommerce Native Hosting |
68+
| `catalyst start` | Start a local Cloudflare Workers preview |
69+
| `catalyst logs tail` | Stream live logs from your deployment |
70+
| `catalyst version` | Display CLI, Node.js, and platform info |
71+
| `catalyst telemetry` | View or change telemetry collection status |
72+
73+
### Getting started
74+
75+
```bash
76+
cd core
77+
pnpm add @bigcommerce/catalyst@alpha @opennextjs/cloudflare@1.17.3
78+
pnpm catalyst auth login
79+
pnpm catalyst project create
80+
pnpm catalyst deploy --secret BIGCOMMERCE_STORE_HASH=<hash> --secret BIGCOMMERCE_STOREFRONT_TOKEN=<token>
81+
```
82+
83+
For full documentation, see the [Native Hosting Overview](https://developer.bigcommerce.com/docs/storefront/catalyst/deployment/native-hosting/overview) and [CLI Reference](https://developer.bigcommerce.com/docs/storefront/catalyst/reference/cli).
84+
85+
## 1.0.0-alpha.0
86+
87+
### Major Changes
88+
89+
- [`acee114`](https://github.com/bigcommerce/catalyst/commit/acee114ca0ee7428e33b1db28a5b3b18914cde4b) Thanks [@chanceaclark](https://github.com/chanceaclark)! - Alpha version of the CLI

packages/catalyst/README.md

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,36 @@
11
# @bigcommerce/catalyst
22

3-
CLI
3+
CLI tool for Catalyst development and deployment.
4+
5+
## Developing the CLI
6+
7+
You'll need two terminal windows:
8+
9+
### Terminal 1 — Watch mode (rebuilds on changes)
10+
11+
```bash
12+
cd packages/catalyst
13+
pnpm dev
14+
```
15+
16+
This runs `tsup --watch` and rebuilds `dist/cli.js` on every source change.
17+
18+
### Terminal 2 — Run the CLI
19+
20+
From the `core/` directory, run the CLI using the absolute path to the built executable:
21+
22+
```bash
23+
cd core
24+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js <command>
25+
```
26+
27+
For example:
28+
29+
```bash
30+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js project list
31+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js logs tail
32+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js logs query --start 2026-06-01T00:00:00Z --end 2026-06-02T00:00:00Z
33+
pnpm exec <repo-root>/packages/catalyst/dist/cli.js deploy
34+
```
35+
36+
Replace `<repo-root>` with the absolute path to your local clone of the `catalyst` repository.

packages/catalyst/package.json

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@bigcommerce/catalyst",
3-
"version": "0.1.0",
3+
"version": "1.0.0-alpha.6",
44
"type": "module",
55
"bin": {
66
"catalyst": "dist/cli.js"
@@ -9,7 +9,6 @@
99
"dist",
1010
"templates"
1111
],
12-
"private": true,
1312
"scripts": {
1413
"dev": "tsup --watch",
1514
"typecheck": "tsc --noEmit",
@@ -23,21 +22,32 @@
2322
"node": "^20.0.0 || ^22.0.0 || ^24.0.0"
2423
},
2524
"dependencies": {
25+
"@commander-js/extra-typings": "^14.0.0",
26+
"@inquirer/prompts": "^7.5.3",
2627
"@segment/analytics-node": "^2.2.1",
2728
"adm-zip": "^0.5.16",
2829
"commander": "^14.0.0",
2930
"conf": "^13.1.0",
3031
"consola": "^3.4.2",
32+
"cross-spawn": "^7.0.6",
3133
"dotenv": "^16.5.0",
3234
"execa": "^9.6.0",
35+
"fs-extra": "^11.3.0",
36+
"lodash.kebabcase": "^4.1.1",
37+
"nypm": "^0.5.4",
38+
"open": "^10.1.0",
39+
"std-env": "^3.9.0",
40+
"tar": "^7.5.7",
3341
"yocto-spinner": "^1.0.0",
3442
"zod": "^4.0.5"
3543
},
3644
"devDependencies": {
3745
"@bigcommerce/eslint-config": "^2.11.0",
3846
"@bigcommerce/eslint-config-catalyst": "workspace:^",
39-
"@commander-js/extra-typings": "^14.0.0",
4047
"@types/adm-zip": "^0.5.7",
48+
"@types/cross-spawn": "^6.0.6",
49+
"@types/fs-extra": "^11.0.4",
50+
"@types/lodash.kebabcase": "^4.1.9",
4151
"@types/node": "^22.15.30",
4252
"@vitest/coverage-v8": "^3.2.4",
4353
"@vitest/ui": "^3.2.4",
@@ -49,6 +59,6 @@
4959
"vitest": "^3.2.4"
5060
},
5161
"peerDependencies": {
52-
"@opennextjs/cloudflare": "^1.8.0"
62+
"@opennextjs/cloudflare": "1.17.3"
5363
}
5464
}

0 commit comments

Comments
 (0)