@bigcommerce/create-catalyst 0.11.0 → 0.13.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.
- package/bin/index.cjs +3 -3
- package/dist/index.js +285 -417
- package/dist/index.js.map +1 -1
- package/package.json +13 -15
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../package.json","../src/commands/create.ts","../src/utils/apply-integration.ts","../src/commands/integration.ts","../src/utils/spinner.ts","../src/utils/check-storefront-limit.ts","../src/utils/clone-catalyst.ts","../src/utils/get-latest-core-tag.ts","../src/utils/https.ts","../src/utils/parse.ts","../src/utils/install-dependencies.ts","../src/utils/login.ts","../src/utils/pm.ts","../src/utils/write-env.ts","../src/commands/init.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\n\nimport PACKAGE_INFO from '../package.json';\n\nimport { create } from './commands/create';\nimport { init } from './commands/init';\nimport { integration } from './commands/integration';\n\nconsole.log(chalk.cyanBright(`\\n◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('A command line tool to create a new Catalyst project.')\n .addCommand(create, { isDefault: true })\n .addCommand(init)\n .addCommand(integration);\n\nprogram.parse(process.argv);\n","{\n \"name\": \"@bigcommerce/create-catalyst\",\n \"version\": \"0.11.0\",\n \"type\": \"module\",\n \"bin\": \"bin/index.cjs\",\n \"files\": [\n \"bin\",\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"jest\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"dependencies\": {\n \"@commander-js/extra-typings\": \"^12.1.0\",\n \"@inquirer/prompts\": \"^5.3.8\",\n \"chalk\": \"^5.3.0\",\n \"commander\": \"^12.1.0\",\n \"dotenv\": \"^16.4.5\",\n \"fs-extra\": \"^11.2.0\",\n \"giget\": \"^1.2.3\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"lodash.merge\": \"^4.6.2\",\n \"nypm\": \"^0.3.9\",\n \"ora\": \"^8.0.1\",\n \"semver\": \"^7.6.3\",\n \"zod\": \"^3.23.8\",\n \"zod-validation-error\": \"^3.3.1\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.9.0\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@swc/core\": \"^1.7.3\",\n \"@swc/jest\": \"^0.2.36\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^29.5.12\",\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@types/lodash.merge\": \"^4.6.9\",\n \"@types/node\": \"^20.14.15\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.5.8\",\n \"eslint\": \"^8.57.0\",\n \"jest\": \"^29.7.0\",\n \"msw\": \"^2.3.5\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.2.4\",\n \"typescript\": \"^5.5.4\"\n }\n}\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { exec as execCallback } from 'child_process';\nimport { pathExistsSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { join } from 'path';\nimport { promisify } from 'util';\nimport { z } from 'zod';\n\nimport { applyIntegration } from '../utils/apply-integration';\nimport { checkStorefrontLimit } from '../utils/check-storefront-limit';\nimport { cloneCatalyst } from '../utils/clone-catalyst';\nimport { getLatestCoreTag } from '../utils/get-latest-core-tag';\nimport { Https } from '../utils/https';\nimport { installDependencies } from '../utils/install-dependencies';\nimport { login } from '../utils/login';\nimport { parse } from '../utils/parse';\nimport { getPackageManager, packageManagerChoices } from '../utils/pm';\nimport { spinner } from '../utils/spinner';\nimport { writeEnv } from '../utils/write-env';\n\nconst exec = promisify(execCallback);\n\nexport const create = new Command('create')\n .description('Command to scaffold and connect a Catalyst storefront to your BigCommerce store')\n .option('--project-name <name>', 'Name of your Catalyst project')\n .option('--project-dir <dir>', 'Directory in which to create your project', process.cwd())\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--channel-id <id>', 'BigCommerce channel ID')\n .option('--customer-impersonation-token <token>', 'BigCommerce customer impersonation token')\n .option('--integration <provider>', 'Integration to apply to your new storefront')\n .addOption(\n new Option(\n '--gh-ref <ref>',\n 'Clone a specific ref from the bigcommerce/catalyst repository',\n ).default(getLatestCoreTag),\n )\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\n .hideHelp(),\n )\n .addOption(\n new Option('--sample-data-api-url <url>', 'BigCommerce sample data API URL')\n .default('https://api.bc-sample.store')\n .hideHelp(),\n )\n .addOption(\n new Option('--package-manager <pm>', 'Override detected package manager')\n .choices(packageManagerChoices)\n .default(getPackageManager())\n .hideHelp(),\n )\n .addOption(\n new Option('--code-editor <editor>', 'Your preferred code editor')\n .choices(['vscode'])\n .default('vscode')\n .hideHelp(),\n )\n .addOption(\n new Option('--include-functional-tests', 'Include the functional test suite')\n .default(false)\n .hideHelp(),\n )\n .action(async (options) => {\n const { packageManager, codeEditor, includeFunctionalTests } = options;\n\n const URLSchema = z.string().url();\n const sampleDataApiUrl = parse(options.sampleDataApiUrl, URLSchema);\n const bigcommerceApiUrl = parse(`https://api.${options.bigcommerceHostname}`, URLSchema);\n const bigcommerceAuthUrl = parse(`https://login.${options.bigcommerceHostname}`, URLSchema);\n\n let ghRef: string;\n\n if (options.ghRef instanceof Function) {\n ghRef = await options.ghRef();\n } else {\n ghRef = options.ghRef;\n }\n\n let projectName;\n let projectDir;\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n let channelId;\n let customerImpersonationToken = options.customerImpersonationToken;\n\n if (options.channelId) {\n channelId = parseInt(options.channelId, 10);\n }\n\n if (!pathExistsSync(options.projectDir)) {\n console.error(chalk.red(`Error: --projectDir ${options.projectDir} is not a valid path\\n`));\n process.exit(1);\n }\n\n if (options.projectName) {\n projectName = kebabCase(options.projectName);\n projectDir = join(options.projectDir, projectName);\n\n if (pathExistsSync(projectDir)) {\n console.error(chalk.red(`Error: ${projectDir} already exists\\n`));\n process.exit(1);\n }\n }\n\n if (!options.projectName) {\n const validateProjectName = (i: string) => {\n const formatted = kebabCase(i);\n\n if (!formatted) return 'Project name is required';\n\n const targetDir = join(options.projectDir, formatted);\n\n if (pathExistsSync(targetDir)) return `Destination '${targetDir}' already exists`;\n\n projectName = formatted;\n projectDir = targetDir;\n\n return true;\n };\n\n await input({\n message: 'What is the name of your project?',\n default: 'my-catalyst-app',\n validate: validateProjectName,\n });\n }\n\n if (!options.storeHash || !options.accessToken) {\n const credentials = await login(bigcommerceAuthUrl);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n if (!projectName) throw new Error('Something went wrong, projectName is not defined');\n if (!projectDir) throw new Error('Something went wrong, projectDir is not defined');\n\n if (!storeHash || !accessToken) {\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n\n await cloneCatalyst({ projectDir, projectName, ghRef, codeEditor, includeFunctionalTests });\n\n console.log(`\\nUsing ${chalk.bold(packageManager)}\\n`);\n\n await installDependencies(projectDir, packageManager);\n\n await applyIntegration(options.integration, { projectDir, packageManager });\n\n console.log(\n [\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n `Next steps:`,\n chalk.yellow(`\\n- cd ${projectName} && cp .env.example .env.local`),\n chalk.yellow(`\\n- Populate .env.local with your BigCommerce API credentials\\n`),\n ].join('\\n'),\n );\n\n process.exit(0);\n }\n\n if (!channelId || !customerImpersonationToken) {\n const bc = new Https({ bigCommerceApiUrl: bigcommerceApiUrl, storeHash, accessToken });\n const availableChannels = await bc.channels('?available=true&type=storefront');\n const storeInfo = await bc.storeInformation();\n\n const canCreateChannel = checkStorefrontLimit(availableChannels, storeInfo);\n\n let shouldCreateChannel;\n\n if (canCreateChannel) {\n shouldCreateChannel = await select({\n message: 'Would you like to create a new channel?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n }\n\n if (shouldCreateChannel) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n const sampleDataApi = new Https({\n sampleDataApiUrl,\n storeHash,\n accessToken,\n });\n\n const {\n data: { id: createdChannelId, storefront_api_token: storefrontApiToken },\n } = await sampleDataApi.createChannel(newChannelName);\n\n await bc.createChannelMenus(createdChannelId);\n\n channelId = createdChannelId;\n customerImpersonationToken = storefrontApiToken;\n\n /**\n * @todo prompt sample data API\n */\n }\n\n if (!shouldCreateChannel) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a, b) => channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch) => ({\n name: ch.name,\n value: ch,\n description: `Channel Platform: ${\n ch.platform === 'bigcommerce'\n ? 'Stencil'\n : ch.platform.charAt(0).toUpperCase() + ch.platform.slice(1)\n }`,\n })),\n });\n\n channelId = existingChannel.id;\n\n const {\n data: { token },\n } = await bc.customerImpersonationToken();\n\n customerImpersonationToken = token;\n }\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!customerImpersonationToken)\n throw new Error('Something went wrong, customerImpersonationToken is not defined');\n\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n\n await cloneCatalyst({ projectDir, projectName, ghRef, codeEditor, includeFunctionalTests });\n\n writeEnv(projectDir, {\n channelId: channelId.toString(),\n storeHash,\n accessToken,\n customerImpersonationToken,\n });\n\n console.log(`\\nUsing ${chalk.bold(packageManager)}\\n`);\n\n await installDependencies(projectDir, packageManager);\n\n await spinner(exec(`${packageManager} run --prefix ${projectDir} generate`), {\n text: 'Creating GraphQL schema...',\n successText: 'Created GraphQL schema',\n failText: (err) => chalk.red(`Failed to create GraphQL schema: ${err.message}`),\n });\n\n await applyIntegration(options.integration, { projectDir, packageManager });\n\n console.log(\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n '\\nNext steps:\\n',\n chalk.yellow(`\\ncd ${projectName} && ${packageManager} run dev\\n`),\n );\n });\n","import { exec as execCallback } from 'child_process';\nimport { readJsonSync } from 'fs-extra/esm';\nimport { downloadTemplate } from 'giget';\nimport { addDependency, addDevDependency } from 'nypm';\nimport { join } from 'path';\nimport { promisify } from 'util';\n\nimport { ManifestSchema } from '../commands/integration';\n\nimport { PackageManager } from './pm';\nimport { spinner } from './spinner';\n\nconst exec = promisify(execCallback);\n\nexport async function applyIntegration(\n integration: string | undefined,\n { projectDir, packageManager }: { projectDir: string; packageManager: PackageManager },\n) {\n if (!integration) {\n return;\n }\n\n const integrationDir = join(projectDir, 'integrations', integration);\n\n await spinner(\n downloadTemplate(`github:bigcommerce/catalyst/integrations/${integration}#main`, {\n dir: integrationDir,\n offline: false,\n }),\n {\n text: `Cloning ${integration} integration...`,\n successText: `${integration} integration cloned successfully`,\n failText: (err) => `Failed to clone ${integration} integration: ${err.message}`,\n },\n );\n\n try {\n readJsonSync(join(integrationDir, 'manifest.json'));\n } catch (err) {\n console.error(\n `\\nNo manifest.json found in the ${integration} integration folder. Please check that the integration exists in the Catalyst monorepo: https://github.com/bigcommerce/catalyst`,\n );\n\n return;\n }\n\n const manifest = ManifestSchema.parse(readJsonSync(join(integrationDir, 'manifest.json')));\n\n if (manifest.dependencies.add.length) {\n await spinner(\n addDependency(manifest.dependencies.add, {\n cwd: projectDir,\n silent: true,\n packageManager,\n }),\n {\n text: 'Installing integration dependencies...',\n successText: 'Integration dependencies installed successfully',\n failText: (err) => `Failed to install dependencies: ${err.message}`,\n },\n );\n }\n\n if (manifest.devDependencies.add.length) {\n await spinner(\n addDevDependency(manifest.devDependencies.add, {\n cwd: projectDir,\n silent: true,\n packageManager,\n }),\n {\n text: 'Installing integration development dependencies...',\n successText: 'Integration development dependencies installed successfully',\n failText: (err) => `Failed to install integration development dependencies: ${err.message}`,\n },\n );\n }\n\n await spinner(\n exec(`git apply -p2 ${join(integrationDir, 'integration.patch')}`, { cwd: projectDir }),\n {\n text: 'Applying integration patch...',\n successText: 'Integration patch applied successfully',\n failText: (err) => `Failed to apply integration patch: ${err.message}`,\n },\n );\n\n console.log('\\nIntegration applied successfully! Feel free to delete the `integrations` folder.');\n}\n","import { Command } from '@commander-js/extra-typings';\nimport { exec as execCb } from 'child_process';\nimport { parse } from 'dotenv';\nimport { outputFileSync, writeJsonSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { coerce, compare } from 'semver';\nimport { promisify } from 'util';\nimport { z } from 'zod';\n\nconst exec = promisify(execCb);\n\nexport const ManifestSchema = z.object({\n name: z.string(),\n dependencies: z.object({ add: z.array(z.string()) }),\n devDependencies: z.object({ add: z.array(z.string()) }),\n environmentVariables: z.array(z.string()),\n});\n\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport const integration = new Command('integration')\n .argument('<integration-name>', 'Formatted name of the integration')\n .option('--commit-hash <hash>', 'Override integration source branch with a specific commit hash')\n .action(async (integrationNameRaw, options) => {\n // @todo check for integration name conflicts\n const integrationName = z.string().transform(kebabCase).parse(integrationNameRaw);\n\n const manifest: Manifest = {\n name: integrationName,\n dependencies: { add: [] },\n devDependencies: { add: [] },\n environmentVariables: [],\n };\n\n await exec('git fetch --tags');\n\n const { stdout: headRefStdOut } = await exec('git rev-parse --abbrev-ref HEAD');\n let [sourceRef] = headRefStdOut.split('\\n');\n\n if (options.commitHash) {\n sourceRef = options.commitHash;\n }\n\n const { stdout: catalystTags } = await exec('git tag --list @bigcommerce/catalyst-core@\\\\*');\n const [latestCoreTag] = catalystTags\n .split('\\n')\n .filter(Boolean)\n .sort((a, b) => {\n const versionA = coerce(a.replace('@bigcommerce/catalyst-core@', ''));\n const versionB = coerce(b.replace('@bigcommerce/catalyst-core@', ''));\n\n if (versionA && versionB) {\n return compare(versionA, versionB);\n }\n\n return 0;\n })\n .reverse();\n\n const PackageDependenciesSchema = z.object({\n dependencies: z.object({}).passthrough(),\n devDependencies: z.object({}).passthrough(),\n });\n\n const getPackageDeps = async (ref: string) => {\n const { stdout } = await exec(`git show ${ref}:core/package.json`);\n\n return PackageDependenciesSchema.parse(JSON.parse(stdout));\n };\n\n const integrationJson = await getPackageDeps(sourceRef);\n const latestCoreTagJson = await getPackageDeps(latestCoreTag);\n\n const diffObjectKeys = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n return Object.keys(a).filter((key) => !Object.keys(b).includes(key));\n };\n\n manifest.dependencies.add = diffObjectKeys(\n integrationJson.dependencies,\n latestCoreTagJson.dependencies,\n );\n manifest.devDependencies.add = diffObjectKeys(\n integrationJson.devDependencies,\n latestCoreTagJson.devDependencies,\n );\n\n const { stdout: latestCoreEnv } = await exec(`git show ${latestCoreTag}:core/.env.example`);\n const { stdout: integrationEnv } = await exec(`git show ${sourceRef}:core/.env.example`);\n\n manifest.environmentVariables = diffObjectKeys(parse(integrationEnv), parse(latestCoreEnv));\n\n const { stdout: integrationDiff } = await exec(\n `git diff ${latestCoreTag}...${sourceRef} -- ':(exclude)core/package.json' ':(exclude)pnpm-lock.yaml'`,\n );\n\n outputFileSync(`integrations/${integrationName}/integration.patch`, integrationDiff);\n writeJsonSync(`integrations/${integrationName}/manifest.json`, manifest, {\n spaces: 2,\n });\n\n console.log('Integration created successfully.');\n });\n","import { type Ora, oraPromise, type PromiseOptions } from 'ora';\n\nexport const spinner = async <T>(\n action: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),\n oraOpts: PromiseOptions<T>,\n) => {\n return oraPromise(action, {\n spinner: 'triangle',\n ...oraOpts,\n }).catch(() => process.exit(1));\n};\n","import chalk from 'chalk';\n\nimport { type BigCommerceChannelsV3Response, type BigCommerceStoreInfo } from './https';\n\nexport const checkStorefrontLimit = (\n channels: BigCommerceChannelsV3Response,\n storeInfo: BigCommerceStoreInfo,\n) => {\n const { data: availableChannels } = channels;\n const { features } = storeInfo;\n\n if (availableChannels.length >= features.storefront_limits.total_including_inactive) {\n console.error(\n chalk.yellow(\n `You have reached the maximum number of storefronts allowed for your plan. Please select an existing channel below, purchase additional storefront seats in your BigCommerce Control Panel, or contact BigCommerce Support: ${chalk.cyan(\n 'https://support.bigcommerce.com',\n )}\\n`,\n ),\n );\n\n return false;\n }\n\n const activeChannels = availableChannels.filter((channel) => channel.status === 'active');\n\n if (activeChannels.length >= features.storefront_limits.active) {\n console.error(\n chalk.yellow(\n 'You have reached the maximum number of active storefronts allowed for your plan. Please select an existing channel below, de-activate an active channel, or purchase additional storefront seats in your BigCommerce Control Panel.\\n',\n ),\n );\n\n return false;\n }\n\n return true;\n};\n","import chalk from 'chalk';\nimport { readFile, writeFile } from 'fs/promises';\nimport { ensureDir, readJsonSync, removeSync, writeJsonSync } from 'fs-extra/esm';\nimport { downloadTemplate } from 'giget';\nimport merge from 'lodash.merge';\nimport { join } from 'path';\nimport * as z from 'zod';\n\nimport { spinner } from './spinner';\n\nexport const cloneCatalyst = async ({\n codeEditor,\n includeFunctionalTests,\n projectDir,\n projectName,\n ghRef = 'main',\n}: {\n codeEditor: string;\n includeFunctionalTests: boolean;\n projectDir: string;\n projectName: string;\n ghRef?: string;\n}) => {\n await spinner(\n downloadTemplate(`github:bigcommerce/catalyst/core#${ghRef}`, {\n dir: projectDir,\n offline: false,\n }),\n {\n text: 'Cloning Catalyst template...',\n successText: 'Catalyst template cloned successfully',\n failText: (err) => chalk.red(`Failed to clone Catalyst template: ${err.message}`),\n },\n );\n\n switch (codeEditor) {\n case 'vscode':\n await ensureDir(join(projectDir, '.vscode'));\n\n writeJsonSync(\n join(projectDir, '.vscode/settings.json'),\n { 'typescript.tsdk': 'node_modules/typescript/lib' },\n { spaces: 2 },\n );\n break;\n\n default:\n break;\n }\n\n const packageJson = z\n .object({\n name: z.string(),\n description: z.string(),\n version: z.string(),\n scripts: z.object({}).passthrough().optional(),\n dependencies: z.object({}).passthrough(),\n devDependencies: z.object({}).passthrough(),\n })\n .passthrough()\n .parse(\n merge({}, readJsonSync(join(projectDir, 'package.json')), {\n name: projectName,\n description: '',\n }),\n );\n\n delete packageJson.dependencies['@bigcommerce/catalyst-client'];\n delete packageJson.devDependencies['@bigcommerce/eslint-config-catalyst'];\n\n if (!includeFunctionalTests) {\n delete packageJson.devDependencies['@faker-js/faker'];\n delete packageJson.devDependencies['@playwright/test'];\n }\n\n writeJsonSync(join(projectDir, 'package.json'), packageJson, { spaces: 2 });\n\n if (!includeFunctionalTests) {\n const tsConfigJson = z\n .object({\n include: z.array(z.string()).optional(),\n })\n .passthrough()\n .parse(readJsonSync(join(projectDir, 'tsconfig.json')));\n\n tsConfigJson.include = tsConfigJson.include?.filter(\n (include) => !['tests/**/*', 'playwright.config.ts'].includes(include),\n );\n\n writeJsonSync(join(projectDir, 'tsconfig.json'), tsConfigJson, { spaces: 2 });\n }\n\n if (!includeFunctionalTests) {\n const eslint = (await readFile(join(projectDir, '.eslintrc.cjs'), { encoding: 'utf-8' }))\n .replace(/['\"]playwright-report\\/\\*\\*['\"],?/, '')\n .replace(/['\"]test-results\\/\\*\\*['\"],?/, '');\n\n await writeFile(join(projectDir, '.eslintrc.cjs'), eslint);\n\n removeSync(join(projectDir, 'tests'));\n removeSync(join(projectDir, 'playwright.config.ts'));\n }\n};\n","import * as z from 'zod';\n\nexport const getLatestCoreTag = async () => {\n const rawPackageJsonUrl =\n 'https://raw.githubusercontent.com/bigcommerce/catalyst/main/core/package.json';\n\n const response = await fetch(rawPackageJsonUrl);\n\n try {\n const { version } = z.object({ version: z.string() }).parse(await response.json());\n\n return `@bigcommerce/catalyst-core@${version}`;\n } catch (err) {\n throw new Error('Unable to determine the latest valid Catalyst release');\n }\n};\n","/* eslint-disable @typescript-eslint/unified-signatures */\n\nimport chalk from 'chalk';\nimport { z } from 'zod';\n\nimport { parse } from './parse';\n\ninterface BigCommerceRestApiConfig {\n bigCommerceApiUrl: string;\n storeHash: string;\n accessToken: string;\n}\n\ninterface SampleDataApiConfig {\n sampleDataApiUrl: string;\n storeHash: string;\n accessToken: string;\n}\n\ninterface DeviceOAuthConfig {\n bigCommerceAuthUrl: string;\n}\n\ninterface HttpsConfig {\n bigCommerceApiUrl?: string;\n bigCommerceAuthUrl?: string;\n sampleDataApiUrl?: string;\n storeHash?: string;\n accessToken?: string;\n}\n\nconst BigCommerceStoreInfo = z.object({\n features: z.object({\n storefront_limits: z.object({\n active: z.number(),\n total_including_inactive: z.number(),\n }),\n }),\n});\n\nexport type BigCommerceStoreInfo = z.infer<typeof BigCommerceStoreInfo>;\n\nconst BigCommerceV3ApiResponseSchema = <T>(schema: z.ZodType<T>) =>\n z.object({\n data: schema,\n meta: z.object({}),\n });\n\nconst BigCommerceChannelsV3ResponseSchema = BigCommerceV3ApiResponseSchema(\n z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n status: z.string(),\n platform: z.string(),\n }),\n ),\n);\n\nexport type BigCommerceChannelsV3Response = z.infer<typeof BigCommerceChannelsV3ResponseSchema>;\n\nexport class Https {\n DEVICE_OAUTH_CLIENT_ID = 'acse0vvawm9r1n0evag4b8e1ea1fo90';\n\n bigCommerceApiUrl: string;\n bigCommerceAuthUrl: string;\n sampleDataApiUrl: string;\n storeHash: string;\n accessToken: string;\n\n constructor({ bigCommerceApiUrl, storeHash, accessToken }: BigCommerceRestApiConfig);\n constructor({ sampleDataApiUrl, storeHash, accessToken }: SampleDataApiConfig);\n constructor({ bigCommerceAuthUrl }: DeviceOAuthConfig);\n constructor({\n bigCommerceApiUrl,\n bigCommerceAuthUrl,\n sampleDataApiUrl,\n storeHash,\n accessToken,\n }: HttpsConfig) {\n this.bigCommerceApiUrl = bigCommerceApiUrl ?? '';\n this.bigCommerceAuthUrl = bigCommerceAuthUrl ?? '';\n this.sampleDataApiUrl = sampleDataApiUrl ?? '';\n this.storeHash = storeHash ?? '';\n this.accessToken = accessToken ?? '';\n }\n\n auth(path: string, opts: RequestInit = {}) {\n if (!this.bigCommerceAuthUrl) {\n throw new Error('bigCommerceAuthUrl is required to make API requests');\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n method: 'POST',\n headers: {\n ...headers,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n ...rest,\n };\n\n return fetch(`${this.bigCommerceAuthUrl}${path}`, options);\n }\n\n async getDeviceCode() {\n const response = await this.auth('/device/token', {\n body: JSON.stringify({\n scopes: [\n 'store_v2_content',\n 'store_v2_information',\n 'store_v2_products',\n 'store_cart',\n 'store_sites',\n 'store_channel_settings',\n 'store_storefront_api_customer_impersonation',\n ].join(' '),\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (!response.ok) {\n console.error(\n chalk.red(`\\nPOST /device/token failed: ${response.status} ${response.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const DeviceCodeSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n });\n\n return parse(await response.json(), DeviceCodeSchema);\n }\n\n async checkDeviceCode(deviceCode: string) {\n const response = await this.auth('/device/token', {\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n throw new Error('Device code not yet verified');\n }\n\n const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string().url(),\n });\n\n return parse(await response.json(), DeviceCodeSuccessSchema);\n }\n\n api(path: string, opts: RequestInit = {}) {\n if (!this.bigCommerceApiUrl || !this.storeHash || !this.accessToken) {\n throw new Error(\n 'bigCommerceApiUrl, storeHash, and accessToken are required to make API requests',\n );\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n headers: {\n ...headers,\n Accept: 'application/json',\n 'X-Auth-Token': this.accessToken,\n },\n ...rest,\n };\n\n return fetch(`${this.bigCommerceApiUrl}/stores/${this.storeHash}${path}`, options);\n }\n\n async storeInformation() {\n const res = await this.api('/v2/store');\n\n if (!res.ok) {\n console.error(chalk.red(`\\nGET /v2/store failed: ${res.status} ${res.statusText}\\n`));\n process.exit(1);\n }\n\n return parse(await res.json(), BigCommerceStoreInfo);\n }\n\n async channels(query = '') {\n const res = await this.api(`/v3/channels${query}`);\n\n if (!res.ok) {\n console.error(chalk.red(`\\nGET /v3/channels failed: ${res.status} ${res.statusText}\\n`));\n process.exit(1);\n }\n\n return parse(await res.json(), BigCommerceChannelsV3ResponseSchema);\n }\n\n async createChannelMenus(channelId: number) {\n const res = await this.api(`/v3/channels/${channelId}/channel-menus`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n bigcommerce_protected_app_sections: [\n 'storefront_settings',\n 'currencies',\n 'domains',\n 'notifications',\n 'social',\n ],\n }),\n });\n\n if (!res.ok) {\n console.warn(\n chalk.yellow(\n `\\nFailed to create channel menus: ${res.status} ${res.statusText}. You may want to create these later: https://developer.bigcommerce.com/docs/rest-management/channels/menus#create-channel-menus\\n`,\n ),\n );\n }\n }\n\n async customerImpersonationToken() {\n const res = await this.api('/v3/storefront/api-token-customer-impersonation', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ expires_at: 2147483647, channel_ids: [] }),\n });\n\n if (!res.ok) {\n console.error(\n chalk.red(\n `\\nPOST /v3/storefront/api-token-customer-impersonation failed: ${res.status} ${res.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const BigCommerceCustomerImpersonationTokenSchema = z.object({\n data: z.object({\n token: z.string(),\n }),\n });\n\n return parse(await res.json(), BigCommerceCustomerImpersonationTokenSchema);\n }\n\n sampleDataApi(path: string, opts: RequestInit = {}) {\n if (!this.sampleDataApiUrl || !this.storeHash || !this.accessToken) {\n throw new Error(\n 'sampleDataApiUrl, storeHash, and accessToken are required to make API requests',\n );\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n method: 'POST',\n headers: {\n ...headers,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Auth-Token': this.accessToken,\n },\n ...rest,\n };\n\n return fetch(`${this.sampleDataApiUrl}/stores/${this.storeHash}${path}`, options);\n }\n\n async createChannel(channelName: string) {\n const res = await this.sampleDataApi('/v3/channels/catalyst', {\n body: JSON.stringify({ name: channelName }),\n });\n\n if (!res.ok) {\n console.error(\n chalk.red(`\\nPOST /v3/channels/catalyst failed: ${res.status} ${res.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const SampleDataChannelCreateSchema = z.object({\n data: z.object({\n id: z.number(),\n name: z.string().min(1),\n storefront_api_token: z.string(),\n }),\n });\n\n return parse(await res.json(), SampleDataChannelCreateSchema);\n }\n}\n","import * as z from 'zod';\nimport { fromZodError } from 'zod-validation-error';\n\nexport const parse = <T>(data: unknown, schema: z.Schema<T>): T => {\n try {\n return schema.parse(data);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(fromZodError(error).toString());\n }\n\n process.exit(1);\n }\n};\n","import chalk from 'chalk';\nimport { addDependency, addDevDependency, installDependencies as installDeps } from 'nypm';\n\nimport { type PackageManager } from './pm';\nimport { spinner } from './spinner';\n\nconst installAllDeps = async (projectDir: string, packageManager: PackageManager) => {\n await installDeps({ cwd: projectDir, silent: true, packageManager });\n await addDependency('@bigcommerce/catalyst-client', {\n cwd: projectDir,\n silent: true,\n packageManager,\n });\n await addDevDependency('@bigcommerce/eslint-config-catalyst', {\n cwd: projectDir,\n silent: true,\n packageManager,\n });\n};\n\nexport const installDependencies = async (projectDir: string, packageManager: PackageManager) =>\n spinner(installAllDeps(projectDir, packageManager), {\n text: `Installing dependencies. This could take a minute...`,\n successText: `Dependencies installed successfully`,\n failText: (err) => chalk.red(`Failed to install dependencies: ${err.message}`),\n });\n","/* eslint-disable no-await-in-loop */\n\nimport { select } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport { Https } from './https';\nimport { spinner } from './spinner';\n\nconst poll = async (auth: Https, deviceCode: string, interval: number, expiresIn: number) => {\n const intervalMs = interval * 1000;\n const expiresAtMs = expiresIn * 1000;\n const retries = expiresAtMs / intervalMs;\n\n for (let i = 0; i < retries; i += 1) {\n try {\n return await auth.checkDeviceCode(deviceCode);\n } catch (err) {\n // noop\n }\n\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n console.error(chalk.red('\\nDevice code expired. Please try again.\\n'));\n process.exit(1);\n};\n\nexport const login = async (\n bigCommerceAuthUrl: string,\n storeHash?: string,\n accessToken?: string,\n) => {\n if (storeHash && accessToken) {\n return { storeHash, accessToken };\n }\n\n const shouldLogin = await select({\n message: 'Would you like to connect to a BigCommerce store?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n\n if (!shouldLogin) {\n return { storeHash, accessToken };\n }\n\n const auth = new Https({ bigCommerceAuthUrl });\n\n const deviceCode = await auth.getDeviceCode();\n\n console.log(\n [\n `\\nPlease visit ${chalk.cyan(deviceCode.verification_uri)} and enter the code: ${chalk.yellow(\n deviceCode.user_code,\n )}\\n`,\n `The code will expire in ${chalk.yellow(`${deviceCode.expires_in / 60} minutes`)}\\n`,\n ].join('\\n'),\n );\n\n const { store_hash, access_token } = await spinner(\n poll(auth, deviceCode.device_code, deviceCode.interval, deviceCode.expires_in),\n {\n text: 'Waiting for device code to be authorized',\n successText: 'Device code authorized\\n',\n failText: 'Device code expired\\n',\n },\n );\n\n return {\n storeHash: store_hash,\n accessToken: access_token,\n };\n};\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2024 Vercel, Inc.\n *\n * Sourced and modified from:\n * https://github.com/vercel/next.js/blob/771e29cb719b382e92d89cac11fbfcb818f5f628/packages/create-next-app/helpers/get-pkg-manager.ts\n *\n * License:\n * https://github.com/vercel/next.js/blob/771e29cb719b382e92d89cac11fbfcb818f5f628/license.md\n */\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn';\n\nexport const packageManagerChoices: PackageManager[] = ['npm', 'pnpm', 'yarn'];\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent ?? '';\n\n if (userAgent.startsWith('yarn')) {\n return 'yarn';\n }\n\n if (userAgent.startsWith('pnpm')) {\n return 'pnpm';\n }\n\n return 'npm';\n}\n","import { randomBytes } from 'crypto';\nimport { outputFileSync } from 'fs-extra/esm';\nimport { join } from 'path';\n\nexport const writeEnv = (\n projectDir: string,\n {\n channelId,\n storeHash,\n accessToken,\n customerImpersonationToken,\n }: {\n channelId: string;\n storeHash: string;\n accessToken: string;\n customerImpersonationToken: string;\n },\n) => {\n outputFileSync(\n join(projectDir, '.env.local'),\n [\n `AUTH_SECRET=${randomBytes(32).toString('hex')}`,\n `BIGCOMMERCE_STORE_HASH=${storeHash}`,\n `BIGCOMMERCE_CHANNEL_ID=${channelId}`,\n `BIGCOMMERCE_ACCESS_TOKEN=${accessToken}`,\n `BIGCOMMERCE_CUSTOMER_IMPERSONATION_TOKEN=${customerImpersonationToken}`,\n `CLIENT_LOGGER=false`,\n `ENABLE_ADMIN_ROUTE=true`,\n `NEXT_PUBLIC_DEFAULT_REVALIDATE_TARGET=3600`,\n ].join('\\n'),\n );\n};\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport * as z from 'zod';\n\nimport { checkStorefrontLimit } from '../utils/check-storefront-limit';\nimport { Https } from '../utils/https';\nimport { login } from '../utils/login';\nimport { parse } from '../utils/parse';\nimport { writeEnv } from '../utils/write-env';\n\nexport const init = new Command('init')\n .description('Connect a BigCommerce store with an existing Catalyst project')\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\n .hideHelp(),\n )\n .addOption(\n new Option('--sample-data-api-url <url>', 'BigCommerce sample data API URL')\n .default('https://api.bc-sample.store')\n .hideHelp(),\n )\n .action(async (options) => {\n const projectDir = process.cwd();\n\n const URLSchema = z.string().url();\n const sampleDataApiUrl = parse(options.sampleDataApiUrl, URLSchema);\n const bigCommerceApiUrl = `https://api.${options.bigcommerceHostname}`;\n const bigCommerceAuthUrl = `https://login.${options.bigcommerceHostname}`;\n\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n let channelId;\n let customerImpersonationToken;\n\n if (!options.storeHash || !options.accessToken) {\n const credentials = await login(bigCommerceAuthUrl);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n if (!storeHash || !accessToken) {\n console.log(\n chalk.yellow('\\nYou must authenticate with a store to overwrite your local environment.\\n'),\n );\n\n process.exit(1);\n }\n\n const bc = new Https({ bigCommerceApiUrl, storeHash, accessToken });\n\n const availableChannels = await bc.channels('?available=true&type=storefront');\n const storeInfo = await bc.storeInformation();\n\n const canCreateChannel = checkStorefrontLimit(availableChannels, storeInfo);\n\n let shouldCreateChannel;\n\n if (canCreateChannel) {\n shouldCreateChannel = await select({\n message: 'Would you like to create a new channel?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n }\n\n if (shouldCreateChannel) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n const sampleDataApi = new Https({\n sampleDataApiUrl,\n storeHash,\n accessToken,\n });\n\n const {\n data: { id: createdChannelId, storefront_api_token: storefrontApiToken },\n } = await sampleDataApi.createChannel(newChannelName);\n\n channelId = createdChannelId;\n customerImpersonationToken = storefrontApiToken;\n\n /**\n * @todo prompt sample data API\n */\n }\n\n if (!shouldCreateChannel) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a, b) => channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch) => ({\n name: ch.name,\n value: ch,\n description: `Channel Platform: ${\n ch.platform === 'bigcommerce'\n ? 'Stencil'\n : ch.platform.charAt(0).toUpperCase() + ch.platform.slice(1)\n }`,\n })),\n });\n\n channelId = existingChannel.id;\n\n const {\n data: { token },\n } = await bc.customerImpersonationToken();\n\n customerImpersonationToken = token;\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!customerImpersonationToken)\n throw new Error('Something went wrong, customerImpersonationToken is not defined');\n\n writeEnv(projectDir, {\n channelId: channelId.toString(),\n storeHash,\n accessToken,\n customerImpersonationToken,\n });\n });\n"],"mappings":"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","names":["chalk","Command","select","chalk","execCallback","kebabCase","join","promisify","z","promisify","exec","promisify","integration","chalk","readJsonSync","writeJsonSync","downloadTemplate","join","z","downloadTemplate","chalk","join","writeJsonSync","readJsonSync","z","chalk","z","z","parse","z","chalk","parse","chalk","addDependency","addDevDependency","addDependency","addDevDependency","chalk","chalk","chalk","outputFileSync","join","exec","promisify","execCallback","Command","z","parse","chalk","kebabCase","join","select","Command","Option","input","select","chalk","z","Command","Option","parse","chalk","select","input","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../package.json","../src/commands/create.ts","../src/utils/check-storefront-limit.ts","../src/utils/clone-catalyst.ts","../src/utils/checkout-ref.ts","../src/utils/is-exec-exception.ts","../src/utils/has-github-ssh.ts","../src/utils/https.ts","../src/utils/parse.ts","../src/utils/install-dependencies.ts","../src/utils/spinner.ts","../src/utils/login.ts","../src/utils/write-env.ts","../src/commands/init.ts","../src/commands/integration.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { program } from '@commander-js/extra-typings';\nimport chalk from 'chalk';\n\nimport PACKAGE_INFO from '../package.json';\n\nimport { create } from './commands/create';\nimport { init } from './commands/init';\nimport { integration } from './commands/integration';\n\nconsole.log(chalk.cyanBright(`\\n◢ ${PACKAGE_INFO.name} v${PACKAGE_INFO.version}\\n`));\n\nprogram\n .name(PACKAGE_INFO.name)\n .version(PACKAGE_INFO.version)\n .description('A command line tool to create a new Catalyst project.')\n .addCommand(create, { isDefault: true })\n .addCommand(init)\n .addCommand(integration);\n\nprogram.parse(process.argv);\n","{\n \"name\": \"@bigcommerce/create-catalyst\",\n \"version\": \"0.13.0\",\n \"type\": \"module\",\n \"bin\": \"bin/index.cjs\",\n \"files\": [\n \"bin\",\n \"dist\"\n ],\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint . --max-warnings 0\",\n \"test\": \"jest\",\n \"build\": \"tsup\"\n },\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"dependencies\": {\n \"@commander-js/extra-typings\": \"^12.1.0\",\n \"@inquirer/prompts\": \"^7.0.0\",\n \"chalk\": \"^5.3.0\",\n \"commander\": \"^12.1.0\",\n \"dotenv\": \"^16.4.5\",\n \"fs-extra\": \"^11.2.0\",\n \"giget\": \"^1.2.3\",\n \"lodash.kebabcase\": \"^4.1.1\",\n \"nypm\": \"^0.3.12\",\n \"ora\": \"^8.1.0\",\n \"semver\": \"^7.6.3\",\n \"zod\": \"^3.23.8\",\n \"zod-validation-error\": \"^3.4.0\"\n },\n \"devDependencies\": {\n \"@bigcommerce/eslint-config\": \"^2.9.1\",\n \"@bigcommerce/eslint-config-catalyst\": \"workspace:^\",\n \"@swc/core\": \"^1.7.26\",\n \"@swc/jest\": \"^0.2.36\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^29.5.13\",\n \"@types/lodash.kebabcase\": \"^4.1.9\",\n \"@types/node\": \"^20.16.10\",\n \"@types/prompts\": \"^2.4.9\",\n \"@types/semver\": \"^7.5.8\",\n \"eslint\": \"^8.57.1\",\n \"jest\": \"^29.7.0\",\n \"msw\": \"^2.4.9\",\n \"prettier\": \"^3.3.3\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.2\"\n }\n}\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\nimport { pathExistsSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { join } from 'path';\nimport { z } from 'zod';\n\nimport { checkStorefrontLimit } from '../utils/check-storefront-limit';\nimport { cloneCatalyst } from '../utils/clone-catalyst';\nimport { Https } from '../utils/https';\nimport { installDependencies } from '../utils/install-dependencies';\nimport { login } from '../utils/login';\nimport { parse } from '../utils/parse';\nimport { writeEnv } from '../utils/write-env';\n\nexport const create = new Command('create')\n .description('Command to scaffold and connect a Catalyst storefront to your BigCommerce store')\n .option('--project-name <name>', 'Name of your Catalyst project')\n .option('--project-dir <dir>', 'Directory in which to create your project', process.cwd())\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .option('--channel-id <id>', 'BigCommerce channel ID')\n .option('--customer-impersonation-token <token>', 'BigCommerce customer impersonation token')\n .option('--gh-ref <ref>', 'Clone a specific ref from the bigcommerce/catalyst repository')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\n .hideHelp(),\n )\n .addOption(\n new Option('--sample-data-api-url <url>', 'BigCommerce sample data API URL')\n .default('https://api.bc-sample.store')\n .hideHelp(),\n )\n // eslint-disable-next-line complexity\n .action(async (options) => {\n const { ghRef } = options;\n\n try {\n execSync('which git', { stdio: 'ignore' });\n } catch {\n console.error(chalk.red('Error: git is required to create a Catalyst project\\n'));\n process.exit(1);\n }\n\n try {\n execSync('which pnpm', { stdio: 'ignore' });\n } catch {\n console.error(chalk.red('Error: pnpm is required to create a Catalyst project\\n'));\n console.error(chalk.yellow('Tip: Enable it by running `corepack enable pnpm`\\n'));\n process.exit(1);\n }\n\n const URLSchema = z.string().url();\n const sampleDataApiUrl = parse(options.sampleDataApiUrl, URLSchema);\n const bigcommerceApiUrl = parse(`https://api.${options.bigcommerceHostname}`, URLSchema);\n const bigcommerceAuthUrl = parse(`https://login.${options.bigcommerceHostname}`, URLSchema);\n\n let projectName;\n let projectDir;\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n let channelId;\n let customerImpersonationToken = options.customerImpersonationToken;\n\n if (options.channelId) {\n channelId = parseInt(options.channelId, 10);\n }\n\n if (!pathExistsSync(options.projectDir)) {\n console.error(chalk.red(`Error: --projectDir ${options.projectDir} is not a valid path\\n`));\n process.exit(1);\n }\n\n if (options.projectName) {\n projectName = kebabCase(options.projectName);\n projectDir = join(options.projectDir, projectName);\n\n if (pathExistsSync(projectDir)) {\n console.error(chalk.red(`Error: ${projectDir} already exists\\n`));\n process.exit(1);\n }\n }\n\n if (!options.projectName) {\n const validateProjectName = (i: string) => {\n const formatted = kebabCase(i);\n\n if (!formatted) return 'Project name is required';\n\n const targetDir = join(options.projectDir, formatted);\n\n if (pathExistsSync(targetDir)) return `Destination '${targetDir}' already exists`;\n\n projectName = formatted;\n projectDir = targetDir;\n\n return true;\n };\n\n await input({\n message: 'What is the name of your project?',\n default: 'my-catalyst-app',\n validate: validateProjectName,\n });\n }\n\n if (!options.storeHash || !options.accessToken) {\n const credentials = await login(bigcommerceAuthUrl);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n if (!projectName) throw new Error('Something went wrong, projectName is not defined');\n if (!projectDir) throw new Error('Something went wrong, projectDir is not defined');\n\n if (!storeHash || !accessToken) {\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n\n cloneCatalyst({ projectDir, projectName, ghRef });\n\n await installDependencies(projectDir);\n\n console.log(\n [\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n `Next steps:`,\n chalk.yellow(`\\n- cd ${projectName} && cp .env.example .env.local`),\n chalk.yellow(`\\n- Populate .env.local with your BigCommerce API credentials\\n`),\n ].join('\\n'),\n );\n\n process.exit(0);\n }\n\n if (!channelId || !customerImpersonationToken) {\n const bc = new Https({ bigCommerceApiUrl: bigcommerceApiUrl, storeHash, accessToken });\n const availableChannels = await bc.channels('?available=true&type=storefront');\n const storeInfo = await bc.storeInformation();\n\n const canCreateChannel = checkStorefrontLimit(availableChannels, storeInfo);\n\n let shouldCreateChannel;\n\n if (canCreateChannel) {\n shouldCreateChannel = await select({\n message: 'Would you like to create a new channel?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n }\n\n if (shouldCreateChannel) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n const sampleDataApi = new Https({\n sampleDataApiUrl,\n storeHash,\n accessToken,\n });\n\n const {\n data: { id: createdChannelId, storefront_api_token: storefrontApiToken },\n } = await sampleDataApi.createChannel(newChannelName);\n\n await bc.createChannelMenus(createdChannelId);\n\n channelId = createdChannelId;\n customerImpersonationToken = storefrontApiToken;\n\n /**\n * @todo prompt sample data API\n */\n }\n\n if (!shouldCreateChannel) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a, b) => channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch) => ({\n name: ch.name,\n value: ch,\n description: `Channel Platform: ${\n ch.platform === 'bigcommerce'\n ? 'Stencil'\n : ch.platform.charAt(0).toUpperCase() + ch.platform.slice(1)\n }`,\n })),\n });\n\n channelId = existingChannel.id;\n\n const {\n data: { token },\n } = await bc.customerImpersonationToken();\n\n customerImpersonationToken = token;\n }\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!customerImpersonationToken)\n throw new Error('Something went wrong, customerImpersonationToken is not defined');\n\n console.log(`\\nCreating '${projectName}' at '${projectDir}'\\n`);\n\n cloneCatalyst({ projectDir, projectName, ghRef });\n\n writeEnv(projectDir, {\n channelId: channelId.toString(),\n storeHash,\n customerImpersonationToken,\n });\n\n await installDependencies(projectDir);\n\n console.log(\n `\\n${chalk.green('Success!')} Created '${projectName}' at '${projectDir}'\\n`,\n '\\nNext steps:\\n',\n chalk.yellow(`\\ncd ${projectName} && pnpm run dev\\n`),\n );\n });\n","import chalk from 'chalk';\n\nimport { type BigCommerceChannelsV3Response, type BigCommerceStoreInfo } from './https';\n\nexport const checkStorefrontLimit = (\n channels: BigCommerceChannelsV3Response,\n storeInfo: BigCommerceStoreInfo,\n) => {\n const { data: availableChannels } = channels;\n const { features } = storeInfo;\n\n if (availableChannels.length >= features.storefront_limits.total_including_inactive) {\n console.error(\n chalk.yellow(\n `You have reached the maximum number of storefronts allowed for your plan. Please select an existing channel below, purchase additional storefront seats in your BigCommerce Control Panel, or contact BigCommerce Support: ${chalk.cyan(\n 'https://support.bigcommerce.com',\n )}\\n`,\n ),\n );\n\n return false;\n }\n\n const activeChannels = availableChannels.filter((channel) => channel.status === 'active');\n\n if (activeChannels.length >= features.storefront_limits.active) {\n console.error(\n chalk.yellow(\n 'You have reached the maximum number of active storefronts allowed for your plan. Please select an existing channel below, de-activate an active channel, or purchase additional storefront seats in your BigCommerce Control Panel.\\n',\n ),\n );\n\n return false;\n }\n\n return true;\n};\n","import { execSync } from 'child_process';\n\nimport { checkoutRef } from './checkout-ref';\nimport { hasGitHubSSH } from './has-github-ssh';\n\nexport const cloneCatalyst = ({\n projectName,\n projectDir,\n ghRef,\n}: {\n projectName: string;\n projectDir: string;\n ghRef?: string;\n}) => {\n const repositoryName = 'bigcommerce/catalyst';\n const useSSH = hasGitHubSSH();\n\n console.log(`Cloning ${repositoryName} using ${useSSH ? 'SSH' : 'HTTPS'}...\\n`);\n\n const cloneCommand = `git clone ${\n useSSH ? `git@github.com:${repositoryName}` : `https://github.com/${repositoryName}`\n }.git${projectName ? ` ${projectName}` : ''}`;\n\n execSync(cloneCommand, { stdio: 'inherit' });\n console.log();\n\n execSync('git remote rename origin upstream', { cwd: projectDir, stdio: 'inherit' });\n console.log();\n\n if (ghRef) {\n checkoutRef(projectDir, ghRef);\n console.log();\n }\n};\n","import { execSync } from 'node:child_process';\n\nimport { isExecException } from './is-exec-exception';\n\nexport function checkoutRef(repoDir: string, ref: string): void {\n try {\n // Attempt to checkout the specified ref\n execSync(`git checkout ${ref}`, {\n cwd: repoDir,\n stdio: 'inherit',\n encoding: 'utf8',\n });\n console.log(`Checked out ref ${ref} successfully.`);\n } catch (error: unknown) {\n // Handle the error safely according to ESLint rules\n if (isExecException(error)) {\n const stderr = error.stderr ? error.stderr.toString() : '';\n\n // Check if the error message indicates that the ref was not found\n if (\n stderr.includes(`fatal: reference is not a tree: ${ref}`) ||\n stderr.includes(`fatal: ambiguous argument '${ref}'`) ||\n stderr.includes(`unknown revision or path not in the working tree`)\n ) {\n console.error(`Ref '${ref}' not found in the repository.`);\n } else {\n console.error(`Error checking out ref '${ref}':`, stderr.trim());\n }\n } else if (error instanceof Error) {\n // General error handling\n console.error(`Error checking out ref '${ref}':`, error.message);\n } else {\n // Unknown error type\n console.error(`Unknown error occurred while checking out ref '${ref}'.`);\n }\n\n // Exit the process with a non-zero exit code\n process.exit(1);\n }\n}\n","import { ExecException } from 'node:child_process';\n\nexport function isExecException(error: unknown): error is ExecException {\n return typeof error === 'object' && error !== null && 'stdout' in error && 'stderr' in error;\n}\n","import { execSync } from 'child_process';\n\nimport { isExecException } from './is-exec-exception';\n\nexport function hasGitHubSSH(): boolean {\n try {\n // Attempt to connect to GitHub via SSH and capture the output\n const output = execSync('ssh -T git@github.com', {\n encoding: 'utf8',\n stdio: 'pipe',\n }).toString();\n\n // Check the output for successful authentication\n return output.includes('successfully authenticated');\n } catch (error: unknown) {\n // Use the type guard to check if error is an ExecException\n if (isExecException(error)) {\n const stdout = error.stdout ? error.stdout.toString() : '';\n const stderr = error.stderr ? error.stderr.toString() : '';\n const combinedOutput = stdout + stderr;\n\n // Check if the output indicates successful authentication\n if (combinedOutput.includes('successfully authenticated')) {\n return true;\n }\n }\n\n return false;\n }\n}\n","/* eslint-disable @typescript-eslint/unified-signatures */\n\nimport chalk from 'chalk';\nimport { z } from 'zod';\n\nimport { parse } from './parse';\n\ninterface BigCommerceRestApiConfig {\n bigCommerceApiUrl: string;\n storeHash: string;\n accessToken: string;\n}\n\ninterface SampleDataApiConfig {\n sampleDataApiUrl: string;\n storeHash: string;\n accessToken: string;\n}\n\ninterface DeviceOAuthConfig {\n bigCommerceAuthUrl: string;\n}\n\ninterface HttpsConfig {\n bigCommerceApiUrl?: string;\n bigCommerceAuthUrl?: string;\n sampleDataApiUrl?: string;\n storeHash?: string;\n accessToken?: string;\n}\n\nconst BigCommerceStoreInfo = z.object({\n features: z.object({\n storefront_limits: z.object({\n active: z.number(),\n total_including_inactive: z.number(),\n }),\n }),\n});\n\nexport type BigCommerceStoreInfo = z.infer<typeof BigCommerceStoreInfo>;\n\nconst BigCommerceV3ApiResponseSchema = <T>(schema: z.ZodType<T>) =>\n z.object({\n data: schema,\n meta: z.object({}),\n });\n\nconst BigCommerceChannelsV3ResponseSchema = BigCommerceV3ApiResponseSchema(\n z.array(\n z.object({\n id: z.number(),\n name: z.string(),\n status: z.string(),\n platform: z.string(),\n }),\n ),\n);\n\nexport type BigCommerceChannelsV3Response = z.infer<typeof BigCommerceChannelsV3ResponseSchema>;\n\nexport class Https {\n DEVICE_OAUTH_CLIENT_ID = 'acse0vvawm9r1n0evag4b8e1ea1fo90';\n\n bigCommerceApiUrl: string;\n bigCommerceAuthUrl: string;\n sampleDataApiUrl: string;\n storeHash: string;\n accessToken: string;\n\n constructor({ bigCommerceApiUrl, storeHash, accessToken }: BigCommerceRestApiConfig);\n constructor({ sampleDataApiUrl, storeHash, accessToken }: SampleDataApiConfig);\n constructor({ bigCommerceAuthUrl }: DeviceOAuthConfig);\n constructor({\n bigCommerceApiUrl,\n bigCommerceAuthUrl,\n sampleDataApiUrl,\n storeHash,\n accessToken,\n }: HttpsConfig) {\n this.bigCommerceApiUrl = bigCommerceApiUrl ?? '';\n this.bigCommerceAuthUrl = bigCommerceAuthUrl ?? '';\n this.sampleDataApiUrl = sampleDataApiUrl ?? '';\n this.storeHash = storeHash ?? '';\n this.accessToken = accessToken ?? '';\n }\n\n auth(path: string, opts: RequestInit = {}) {\n if (!this.bigCommerceAuthUrl) {\n throw new Error('bigCommerceAuthUrl is required to make API requests');\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n method: 'POST',\n headers: {\n ...headers,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n ...rest,\n };\n\n return fetch(`${this.bigCommerceAuthUrl}${path}`, options);\n }\n\n async getDeviceCode() {\n const response = await this.auth('/device/token', {\n body: JSON.stringify({\n scopes: [\n 'store_v2_content',\n 'store_v2_information',\n 'store_v2_products',\n 'store_cart',\n 'store_sites',\n 'store_channel_settings',\n 'store_storefront_api_customer_impersonation',\n ].join(' '),\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (!response.ok) {\n console.error(\n chalk.red(`\\nPOST /device/token failed: ${response.status} ${response.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const DeviceCodeSchema = z.object({\n device_code: z.string(),\n user_code: z.string(),\n verification_uri: z.string(),\n expires_in: z.number(),\n interval: z.number(),\n });\n\n return parse(await response.json(), DeviceCodeSchema);\n }\n\n async checkDeviceCode(deviceCode: string) {\n const response = await this.auth('/device/token', {\n body: JSON.stringify({\n device_code: deviceCode,\n client_id: this.DEVICE_OAUTH_CLIENT_ID,\n }),\n });\n\n if (response.status !== 200) {\n throw new Error('Device code not yet verified');\n }\n\n const DeviceCodeSuccessSchema = z.object({\n access_token: z.string(),\n store_hash: z.string(),\n context: z.string(),\n api_uri: z.string().url(),\n });\n\n return parse(await response.json(), DeviceCodeSuccessSchema);\n }\n\n api(path: string, opts: RequestInit = {}) {\n if (!this.bigCommerceApiUrl || !this.storeHash || !this.accessToken) {\n throw new Error(\n 'bigCommerceApiUrl, storeHash, and accessToken are required to make API requests',\n );\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n headers: {\n ...headers,\n Accept: 'application/json',\n 'X-Auth-Token': this.accessToken,\n },\n ...rest,\n };\n\n return fetch(`${this.bigCommerceApiUrl}/stores/${this.storeHash}${path}`, options);\n }\n\n async storeInformation() {\n const res = await this.api('/v2/store');\n\n if (!res.ok) {\n console.error(chalk.red(`\\nGET /v2/store failed: ${res.status} ${res.statusText}\\n`));\n process.exit(1);\n }\n\n return parse(await res.json(), BigCommerceStoreInfo);\n }\n\n async channels(query = '') {\n const res = await this.api(`/v3/channels${query}`);\n\n if (!res.ok) {\n console.error(chalk.red(`\\nGET /v3/channels failed: ${res.status} ${res.statusText}\\n`));\n process.exit(1);\n }\n\n return parse(await res.json(), BigCommerceChannelsV3ResponseSchema);\n }\n\n async createChannelMenus(channelId: number) {\n const res = await this.api(`/v3/channels/${channelId}/channel-menus`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n bigcommerce_protected_app_sections: [\n 'storefront_settings',\n 'currencies',\n 'domains',\n 'notifications',\n 'social',\n ],\n }),\n });\n\n if (!res.ok) {\n console.warn(\n chalk.yellow(\n `\\nFailed to create channel menus: ${res.status} ${res.statusText}. You may want to create these later: https://developer.bigcommerce.com/docs/rest-management/channels/menus#create-channel-menus\\n`,\n ),\n );\n }\n }\n\n async customerImpersonationToken() {\n const res = await this.api('/v3/storefront/api-token-customer-impersonation', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ expires_at: 2147483647, channel_ids: [] }),\n });\n\n if (!res.ok) {\n console.error(\n chalk.red(\n `\\nPOST /v3/storefront/api-token-customer-impersonation failed: ${res.status} ${res.statusText}\\n`,\n ),\n );\n process.exit(1);\n }\n\n const BigCommerceCustomerImpersonationTokenSchema = z.object({\n data: z.object({\n token: z.string(),\n }),\n });\n\n return parse(await res.json(), BigCommerceCustomerImpersonationTokenSchema);\n }\n\n sampleDataApi(path: string, opts: RequestInit = {}) {\n if (!this.sampleDataApiUrl || !this.storeHash || !this.accessToken) {\n throw new Error(\n 'sampleDataApiUrl, storeHash, and accessToken are required to make API requests',\n );\n }\n\n const { headers = {}, ...rest } = opts;\n\n const options = {\n method: 'POST',\n headers: {\n ...headers,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n 'X-Auth-Token': this.accessToken,\n },\n ...rest,\n };\n\n return fetch(`${this.sampleDataApiUrl}/stores/${this.storeHash}${path}`, options);\n }\n\n async createChannel(channelName: string) {\n const res = await this.sampleDataApi('/v3/channels/catalyst', {\n body: JSON.stringify({ name: channelName }),\n });\n\n if (!res.ok) {\n console.error(\n chalk.red(`\\nPOST /v3/channels/catalyst failed: ${res.status} ${res.statusText}\\n`),\n );\n process.exit(1);\n }\n\n const SampleDataChannelCreateSchema = z.object({\n data: z.object({\n id: z.number(),\n name: z.string().min(1),\n storefront_api_token: z.string(),\n }),\n });\n\n return parse(await res.json(), SampleDataChannelCreateSchema);\n }\n}\n","import * as z from 'zod';\nimport { fromZodError } from 'zod-validation-error';\n\nexport const parse = <T>(data: unknown, schema: z.Schema<T>): T => {\n try {\n return schema.parse(data);\n } catch (error) {\n if (error instanceof z.ZodError) {\n console.error(fromZodError(error).toString());\n }\n\n process.exit(1);\n }\n};\n","import chalk from 'chalk';\nimport { installDependencies as installDeps } from 'nypm';\n\nimport { spinner } from './spinner';\n\nconst installAllDeps = async (projectDir: string) => {\n await installDeps({ cwd: projectDir, silent: true, packageManager: 'pnpm' });\n};\n\nexport const installDependencies = async (projectDir: string) =>\n spinner(installAllDeps(projectDir), {\n text: `Installing dependencies. This could take a minute...`,\n successText: `Dependencies installed successfully`,\n failText: (err) => chalk.red(`Failed to install dependencies: ${err.message}`),\n });\n","import { type Ora, oraPromise, type PromiseOptions } from 'ora';\n\nexport const spinner = async <T>(\n action: PromiseLike<T> | ((spinner: Ora) => PromiseLike<T>),\n oraOpts: PromiseOptions<T>,\n) => {\n return oraPromise(action, {\n spinner: 'triangle',\n ...oraOpts,\n }).catch(() => process.exit(1));\n};\n","/* eslint-disable no-await-in-loop */\n\nimport { select } from '@inquirer/prompts';\nimport chalk from 'chalk';\n\nimport { Https } from './https';\nimport { spinner } from './spinner';\n\nconst poll = async (auth: Https, deviceCode: string, interval: number, expiresIn: number) => {\n const intervalMs = interval * 1000;\n const expiresAtMs = expiresIn * 1000;\n const retries = expiresAtMs / intervalMs;\n\n for (let i = 0; i < retries; i += 1) {\n try {\n return await auth.checkDeviceCode(deviceCode);\n } catch {\n // noop\n }\n\n await new Promise((resolve) => setTimeout(resolve, intervalMs));\n }\n\n console.error(chalk.red('\\nDevice code expired. Please try again.\\n'));\n process.exit(1);\n};\n\nexport const login = async (\n bigCommerceAuthUrl: string,\n storeHash?: string,\n accessToken?: string,\n) => {\n if (storeHash && accessToken) {\n return { storeHash, accessToken };\n }\n\n const shouldLogin = await select({\n message: 'Would you like to connect to a BigCommerce store?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n\n if (!shouldLogin) {\n return { storeHash, accessToken };\n }\n\n const auth = new Https({ bigCommerceAuthUrl });\n\n const deviceCode = await auth.getDeviceCode();\n\n console.log(\n [\n `\\nPlease visit ${chalk.cyan(deviceCode.verification_uri)} and enter the code: ${chalk.yellow(\n deviceCode.user_code,\n )}\\n`,\n `The code will expire in ${chalk.yellow(`${deviceCode.expires_in / 60} minutes`)}\\n`,\n ].join('\\n'),\n );\n\n const { store_hash, access_token } = await spinner(\n poll(auth, deviceCode.device_code, deviceCode.interval, deviceCode.expires_in),\n {\n text: 'Waiting for device code to be authorized',\n successText: 'Device code authorized\\n',\n failText: 'Device code expired\\n',\n },\n );\n\n return {\n storeHash: store_hash,\n accessToken: access_token,\n };\n};\n","import { randomBytes } from 'crypto';\nimport { outputFileSync } from 'fs-extra/esm';\nimport { join } from 'path';\n\nexport const writeEnv = (\n projectDir: string,\n {\n channelId,\n storeHash,\n customerImpersonationToken,\n }: {\n channelId: string;\n storeHash: string;\n customerImpersonationToken: string;\n },\n) => {\n outputFileSync(\n join(projectDir, '.env.local'),\n [\n `BIGCOMMERCE_STORE_HASH=${storeHash}`,\n `BIGCOMMERCE_CHANNEL_ID=${channelId}`,\n `BIGCOMMERCE_CUSTOMER_IMPERSONATION_TOKEN=${customerImpersonationToken}`,\n '',\n `AUTH_SECRET=${randomBytes(32).toString('hex')}`,\n `CLIENT_LOGGER=false`,\n `ENABLE_ADMIN_ROUTE=true`,\n `DEFAULT_REVALIDATE_TARGET=3600`,\n ].join('\\n'),\n );\n};\n","import { Command, Option } from '@commander-js/extra-typings';\nimport { input, select } from '@inquirer/prompts';\nimport chalk from 'chalk';\nimport * as z from 'zod';\n\nimport { checkStorefrontLimit } from '../utils/check-storefront-limit';\nimport { Https } from '../utils/https';\nimport { login } from '../utils/login';\nimport { parse } from '../utils/parse';\nimport { writeEnv } from '../utils/write-env';\n\nexport const init = new Command('init')\n .description('Connect a BigCommerce store with an existing Catalyst project')\n .option('--store-hash <hash>', 'BigCommerce store hash')\n .option('--access-token <token>', 'BigCommerce access token')\n .addOption(\n new Option('--bigcommerce-hostname <hostname>', 'BigCommerce hostname')\n .default('bigcommerce.com')\n .hideHelp(),\n )\n .addOption(\n new Option('--sample-data-api-url <url>', 'BigCommerce sample data API URL')\n .default('https://api.bc-sample.store')\n .hideHelp(),\n )\n .action(async (options) => {\n const projectDir = process.cwd();\n\n const URLSchema = z.string().url();\n const sampleDataApiUrl = parse(options.sampleDataApiUrl, URLSchema);\n const bigCommerceApiUrl = `https://api.${options.bigcommerceHostname}`;\n const bigCommerceAuthUrl = `https://login.${options.bigcommerceHostname}`;\n\n let storeHash = options.storeHash;\n let accessToken = options.accessToken;\n let channelId;\n let customerImpersonationToken;\n\n if (!options.storeHash || !options.accessToken) {\n const credentials = await login(bigCommerceAuthUrl);\n\n storeHash = credentials.storeHash;\n accessToken = credentials.accessToken;\n }\n\n if (!storeHash || !accessToken) {\n console.log(\n chalk.yellow('\\nYou must authenticate with a store to overwrite your local environment.\\n'),\n );\n\n process.exit(1);\n }\n\n const bc = new Https({ bigCommerceApiUrl, storeHash, accessToken });\n\n const availableChannels = await bc.channels('?available=true&type=storefront');\n const storeInfo = await bc.storeInformation();\n\n const canCreateChannel = checkStorefrontLimit(availableChannels, storeInfo);\n\n let shouldCreateChannel;\n\n if (canCreateChannel) {\n shouldCreateChannel = await select({\n message: 'Would you like to create a new channel?',\n choices: [\n { name: 'Yes', value: true },\n { name: 'No', value: false },\n ],\n });\n }\n\n if (shouldCreateChannel) {\n const newChannelName = await input({\n message: 'What would you like to name your new channel?',\n });\n\n const sampleDataApi = new Https({\n sampleDataApiUrl,\n storeHash,\n accessToken,\n });\n\n const {\n data: { id: createdChannelId, storefront_api_token: storefrontApiToken },\n } = await sampleDataApi.createChannel(newChannelName);\n\n channelId = createdChannelId;\n customerImpersonationToken = storefrontApiToken;\n\n /**\n * @todo prompt sample data API\n */\n }\n\n if (!shouldCreateChannel) {\n const channelSortOrder = ['catalyst', 'next', 'bigcommerce'];\n\n const existingChannel = await select({\n message: 'Which channel would you like to use?',\n choices: availableChannels.data\n .sort(\n (a, b) => channelSortOrder.indexOf(a.platform) - channelSortOrder.indexOf(b.platform),\n )\n .map((ch) => ({\n name: ch.name,\n value: ch,\n description: `Channel Platform: ${\n ch.platform === 'bigcommerce'\n ? 'Stencil'\n : ch.platform.charAt(0).toUpperCase() + ch.platform.slice(1)\n }`,\n })),\n });\n\n channelId = existingChannel.id;\n\n const {\n data: { token },\n } = await bc.customerImpersonationToken();\n\n customerImpersonationToken = token;\n }\n\n if (!channelId) throw new Error('Something went wrong, channelId is not defined');\n if (!customerImpersonationToken)\n throw new Error('Something went wrong, customerImpersonationToken is not defined');\n\n writeEnv(projectDir, {\n channelId: channelId.toString(),\n storeHash,\n customerImpersonationToken,\n });\n });\n","import { Command } from '@commander-js/extra-typings';\nimport { exec as execCb } from 'child_process';\nimport { parse } from 'dotenv';\nimport { outputFileSync, writeJsonSync } from 'fs-extra/esm';\nimport kebabCase from 'lodash.kebabcase';\nimport { coerce, compare } from 'semver';\nimport { promisify } from 'util';\nimport { z } from 'zod';\n\nconst exec = promisify(execCb);\n\nexport const ManifestSchema = z.object({\n name: z.string(),\n dependencies: z.object({ add: z.array(z.string()) }),\n devDependencies: z.object({ add: z.array(z.string()) }),\n environmentVariables: z.array(z.string()),\n});\n\ntype Manifest = z.infer<typeof ManifestSchema>;\n\nexport const integration = new Command('integration')\n .argument('<integration-name>', 'Formatted name of the integration')\n .option('--commit-hash <hash>', 'Override integration source branch with a specific commit hash')\n .action(async (integrationNameRaw, options) => {\n // @todo check for integration name conflicts\n const integrationName = z.string().transform(kebabCase).parse(integrationNameRaw);\n\n const manifest: Manifest = {\n name: integrationName,\n dependencies: { add: [] },\n devDependencies: { add: [] },\n environmentVariables: [],\n };\n\n await exec('git fetch --tags');\n\n const { stdout: headRefStdOut } = await exec('git rev-parse --abbrev-ref HEAD');\n let [sourceRef] = headRefStdOut.split('\\n');\n\n if (options.commitHash) {\n sourceRef = options.commitHash;\n }\n\n const { stdout: catalystTags } = await exec('git tag --list @bigcommerce/catalyst-core@\\\\*');\n const [latestCoreTag] = catalystTags\n .split('\\n')\n .filter(Boolean)\n .sort((a, b) => {\n const versionA = coerce(a.replace('@bigcommerce/catalyst-core@', ''));\n const versionB = coerce(b.replace('@bigcommerce/catalyst-core@', ''));\n\n if (versionA && versionB) {\n return compare(versionA, versionB);\n }\n\n return 0;\n })\n .reverse();\n\n const PackageDependenciesSchema = z.object({\n dependencies: z.object({}).passthrough(),\n devDependencies: z.object({}).passthrough(),\n });\n\n const getPackageDeps = async (ref: string) => {\n const { stdout } = await exec(`git show ${ref}:core/package.json`);\n\n return PackageDependenciesSchema.parse(JSON.parse(stdout));\n };\n\n const integrationJson = await getPackageDeps(sourceRef);\n const latestCoreTagJson = await getPackageDeps(latestCoreTag);\n\n const diffObjectKeys = (a: Record<string, unknown>, b: Record<string, unknown>) => {\n return Object.keys(a).filter((key) => !Object.keys(b).includes(key));\n };\n\n manifest.dependencies.add = diffObjectKeys(\n integrationJson.dependencies,\n latestCoreTagJson.dependencies,\n );\n manifest.devDependencies.add = diffObjectKeys(\n integrationJson.devDependencies,\n latestCoreTagJson.devDependencies,\n );\n\n const { stdout: latestCoreEnv } = await exec(`git show ${latestCoreTag}:core/.env.example`);\n const { stdout: integrationEnv } = await exec(`git show ${sourceRef}:core/.env.example`);\n\n manifest.environmentVariables = diffObjectKeys(parse(integrationEnv), parse(latestCoreEnv));\n\n const { stdout: integrationDiff } = await exec(\n `git diff ${latestCoreTag}...${sourceRef} -- ':(exclude)core/package.json' ':(exclude)pnpm-lock.yaml'`,\n );\n\n outputFileSync(`integrations/${integrationName}/integration.patch`, integrationDiff);\n writeJsonSync(`integrations/${integrationName}/manifest.json`, manifest, {\n spaces: 2,\n });\n\n console.log('Integration created successfully.');\n });\n"],"mappings":"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","names":["chalk","select","chalk","execSync","join","z","execSync","execSync","execSync","execSync","chalk","z","z","chalk","chalk","chalk","chalk","chalk","execSync","chalk","z","join","select","Command","Option","input","select","chalk","z","Command","Option","chalk","select","input","Command","parse","outputFileSync","kebabCase","z","z","Command","kebabCase","parse","outputFileSync","chalk"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bigcommerce/create-catalyst",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": "bin/index.cjs",
|
|
6
6
|
"files": [
|
|
@@ -12,37 +12,35 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@commander-js/extra-typings": "^12.1.0",
|
|
15
|
-
"@inquirer/prompts": "^
|
|
15
|
+
"@inquirer/prompts": "^7.0.0",
|
|
16
16
|
"chalk": "^5.3.0",
|
|
17
17
|
"commander": "^12.1.0",
|
|
18
18
|
"dotenv": "^16.4.5",
|
|
19
19
|
"fs-extra": "^11.2.0",
|
|
20
20
|
"giget": "^1.2.3",
|
|
21
21
|
"lodash.kebabcase": "^4.1.1",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"ora": "^8.0.1",
|
|
22
|
+
"nypm": "^0.3.12",
|
|
23
|
+
"ora": "^8.1.0",
|
|
25
24
|
"semver": "^7.6.3",
|
|
26
25
|
"zod": "^3.23.8",
|
|
27
|
-
"zod-validation-error": "^3.
|
|
26
|
+
"zod-validation-error": "^3.4.0"
|
|
28
27
|
},
|
|
29
28
|
"devDependencies": {
|
|
30
|
-
"@bigcommerce/eslint-config": "^2.9.
|
|
31
|
-
"@swc/core": "^1.7.
|
|
29
|
+
"@bigcommerce/eslint-config": "^2.9.1",
|
|
30
|
+
"@swc/core": "^1.7.26",
|
|
32
31
|
"@swc/jest": "^0.2.36",
|
|
33
32
|
"@types/fs-extra": "^11.0.4",
|
|
34
|
-
"@types/jest": "^29.5.
|
|
33
|
+
"@types/jest": "^29.5.13",
|
|
35
34
|
"@types/lodash.kebabcase": "^4.1.9",
|
|
36
|
-
"@types/
|
|
37
|
-
"@types/node": "^20.14.15",
|
|
35
|
+
"@types/node": "^20.16.10",
|
|
38
36
|
"@types/prompts": "^2.4.9",
|
|
39
37
|
"@types/semver": "^7.5.8",
|
|
40
|
-
"eslint": "^8.57.
|
|
38
|
+
"eslint": "^8.57.1",
|
|
41
39
|
"jest": "^29.7.0",
|
|
42
|
-
"msw": "^2.
|
|
40
|
+
"msw": "^2.4.9",
|
|
43
41
|
"prettier": "^3.3.3",
|
|
44
|
-
"tsup": "^8.
|
|
45
|
-
"typescript": "^5.
|
|
42
|
+
"tsup": "^8.3.0",
|
|
43
|
+
"typescript": "^5.6.2",
|
|
46
44
|
"@bigcommerce/eslint-config-catalyst": "^0.1.2"
|
|
47
45
|
},
|
|
48
46
|
"scripts": {
|