UNPKG

storybook-branch-switcher

Version:

A Storybook addon to navigate between multiple Git branches.

1 lines 16.9 kB
{"version":3,"sources":["../src/run/providers/bitbucket-pull-requests.ts","../src/run/providers/github-pull-requests.ts","../src/run/providers/gitlab-merge-requests.ts","../src/run/providers/index.ts","../src/run/branches.ts","../src/run/build.ts","../src/run/setup.ts","../src/run/log.ts","../src/cli.ts"],"names":["isApplicable","config","computeAuthorizationHeader","token","username","password","fetcher","url","response","v","provider","bitbucket_pull_requests_default","github_pull_requests_default","mr","gitlab_merge_requests_default","providers","providers_default","fetchBranches","branches","currentBranch","currentCommit","p","cleanPreviousBundle","directory","checkoutCommit","commit","prepareAddonState","state","buildStorybook","scriptName","prepareStorybook","from","to","extractConfiguration","path","verifyNode","verifyGit","logAndWait","message","fn","logSuccess","logError","error","configPath","defaultBranch","branch"],"mappings":";;;AAUA,IAAMA,CAAAA,CAAgBC,GACpBA,CAAO,CAAA,IAAA,GAAS,aAChBA,CAAO,CAAA,OAAA,EAAW,IAClBA,EAAAA,CAAAA,CAAO,YAAc,IAEjBC,CAAAA,CAAAA,CAA6B,IAAc,CAC/C,IAAMC,EAAQ,CAAE,CAAA,GAAA,CAAI,eACpB,CAAA,GAAIA,GAAS,IACX,CAAA,OAAO,UAAUA,CAAK,CAAA,CAAA,CAExB,IAAMC,CAAW,CAAA,CAAA,CAAE,IAAI,kBACjBC,CAAAA,CAAAA,CAAW,EAAE,GAAI,CAAA,kBAAA,CACvB,GAAID,CAAY,EAAA,IAAA,EAAQC,GAAY,IAClC,CAAA,OAAO,CAAS,MAAA,EAAA,MAAA,CAAO,KAAK,CAAGD,EAAAA,CAAQ,IAAIC,CAAQ,CAAA,CAAE,EAAE,QAAS,CAAA,QAAQ,CAAC,CAE7E,CAAA,CAAA,CAEMC,EAAU,MAAOL,CAAAA,EAAoC,CAEzD,IAAMM,CAAAA,CAAM,GADCN,CAAO,CAAA,GAAA,EAAO,uBACR,CAAA,uBAAA,EAA0BA,EAAO,OAAO,CAAA,OAAA,EAAUA,EAAO,UAAU,CAAA,yBAAA,CAAA,CAChFO,EAAW,MAAM,KAAA,CAAMD,EAAK,CAChC,OAAA,CAAS,CAAE,aAAeL,CAAAA,CAAAA,EAA6B,CACzD,CAAC,EACD,GAAIM,CAAAA,CAAS,EAEX,CAAA,OAAA,CADa,MAAMA,CAAS,CAAA,IAAA,IAChB,MAAO,CAAA,GAAA,CAAKC,IAAY,CAClC,EAAA,CAAI,MAAMA,CAAE,CAAA,EAAE,GACd,MAAQA,CAAAA,CAAAA,CAAE,QAAQ,YACpB,CAAA,CAAE,EAEF,MAAM,IAAI,KACR,CAAA,CAAA,oBAAA,EAAuBD,EAAS,MAAM,CAAA,CAAA,EAAIA,EAAS,UAAU,CAAA,CAC/D,CAEJ,CAEME,CAAAA,CAAAA,CAAoD,CAAE,YAAAV,CAAAA,CAAAA,CAAc,QAAAM,CAAQ,CAAA,CAE3EK,EAAQD,CCtCf,CAAA,IAAMV,EAAgBC,CACpBA,EAAAA,CAAAA,CAAO,IAAS,GAAA,QAAA,EAAYA,EAAO,KAAS,EAAA,IAAA,EAAQA,EAAO,UAAc,EAAA,IAAA,CAErEK,EAAU,MAAOL,CAAAA,EAAiC,CAEtD,IAAMM,CAAAA,CAAM,GADCN,CAAO,CAAA,GAAA,EAAO,wBACR,CAAUA,OAAAA,EAAAA,CAAAA,CAAO,KAAK,CAAIA,CAAAA,EAAAA,CAAAA,CAAO,UAAU,CAAA,iBAAA,CAAA,CACxDO,EAAW,MAAM,KAAA,CAAMD,EAAK,CAChC,OAAA,CAAS,CACP,MAAQ,CAAA,qCAAA,CACR,cAAe,CAAU,OAAA,EAAA,CAAA,CAAE,IAAI,YAAe,CAAA,CAAA,CAC9C,uBAAwB,YAC1B,CACF,CAAC,CACD,CAAA,GAAIC,CAAS,CAAA,EAAA,CAEX,QADa,MAAMA,CAAAA,CAAS,MAChB,EAAA,GAAA,CAAKC,IAAY,CAAE,EAAA,CAAI,CAAMA,GAAAA,EAAAA,CAAAA,CAAE,MAAM,CAAI,CAAA,CAAA,MAAA,CAAQA,EAAE,IAAK,CAAA,GAAI,EAAE,CAE1E,CAAA,MAAM,IAAI,KAAA,CACR,uBAAuBD,CAAS,CAAA,MAAM,IAAIA,CAAS,CAAA,UAAU,EAC/D,CAEJ,CAAA,CAEME,EAAiD,CACrD,YAAA,CAAAV,EACA,OAAAM,CAAAA,CACF,EAEOM,CAAQF,CAAAA,CAAAA,CC7Bf,IAAMV,CAAgBC,CAAAA,CAAAA,EACpBA,CAAO,CAAA,IAAA,GAAS,UAAYA,CAAO,CAAA,SAAA,EAAa,KAE5CK,CAAU,CAAA,MAAOL,GAAiC,CAEtD,IAAMM,EAAM,CADCN,EAAAA,CAAAA,CAAO,KAAO,oBACR,CAAA,iBAAA,EAAoBA,EAAO,SAAS,CAAA,0DAAA,CAAA,CACjDO,EAAW,MAAM,KAAA,CAAMD,CAAK,CAAA,CAChC,QAAS,CAAE,eAAA,CAAiB,GAAG,CAAE,CAAA,GAAA,CAAI,YAAe,CAAG,CAAA,CACzD,CAAC,CAED,CAAA,GAAI,CAACC,CAAS,CAAA,EAAA,CACZ,MAAM,IAAI,KAAA,CACR,uBAAuBA,CAAS,CAAA,MAAM,CAAIA,CAAAA,EAAAA,CAAAA,CAAS,UAAU,CAC/D,CAAA,CAAA,CAIF,QADa,MAAMA,CAAAA,CAAS,MAChB,EAAA,GAAA,CAAKK,IAAa,CAC5B,EAAA,CAAIA,EAAG,EACP,CAAA,MAAA,CAAQA,EAAG,IAAK,CAAA,GAAA,CAChB,MAAOA,CAAG,CAAA,KAAA,CACV,aAAeA,CAAAA,CAAAA,CAAG,aACpB,CAAE,CAAA,CACJ,EAEMH,CAAiD,CAAA,CACrD,aAAAV,CACA,CAAA,OAAA,CAAAM,CACF,CAEOQ,CAAAA,CAAAA,CAAQJ,EC5Bf,IAAMK,CAAAA,CAA8C,CAClDJ,CACAC,CAAAA,CAAAA,CACAE,CACF,CAEOE,CAAAA,CAAAA,CAAQD,CCTR,CAAA,IAAME,EAAgB,MAC3BhB,CAAAA,EACsB,CACtB,IAAMiB,CAAAA,CAAqB,EAGrBC,CAAAA,CAAAA,CAAgB,MAAM,CACtBC,CAAAA,yBAAAA,CAAAA,CAAAA,CAAAA,CAAgB,MAAM,CAC5B,CAAA,0BAAA,CAAA,CAAA,OAAAF,EAAS,IAAK,CAAA,CACZ,GAAIC,CAAc,CAAA,QAAA,EAAW,CAAA,IAAA,GAC7B,MAAQC,CAAAA,CAAAA,CAAc,UAAW,CAAA,IAAA,EACnC,CAAC,CAAA,CAGGnB,GACF,MAAM,OAAA,CAAQ,sBAAuB,SAAY,CAC/C,IAAMS,CAAWM,CAAAA,CAAAA,CAAU,KAAMK,CAAMA,EAAAA,CAAAA,CAAE,YAAapB,CAAAA,CAAM,CAAC,CAC7D,CAAA,GAAI,CAACS,CACH,CAAA,MAAM,IAAI,KAAM,CAAA,+BAA+B,CAEjDQ,CAAAA,CAAAA,CAAS,KAAK,GAAI,MAAMR,EAAS,OAAQT,CAAAA,CAAM,CAAE,EACnD,CAAC,CAGIiB,CAAAA,CACT,EC/BO,IAAMI,CAAAA,CAAsB,MAAOC,CAAqC,EAAA,CAC7E,GAAG,UAAWA,CAAAA,CAAS,EACzB,CAEaC,CAAAA,CAAAA,CAAiB,MAAOC,CAAkC,EAAA,CACrE,MAAM,CACN,CAAA,gBAAA,CAAA,CAAA,MAAM,iBAAiBA,CAAM,CAAA,CAAA,CAC7B,MAAM,CAAA,CAAA,2BAAA,EACR,EAEaC,CAAqBC,CAAAA,CAAAA,EAAqC,CACrE,OAAQ,CAAA,GAAA,CAAI,gCAAqC,IAAK,CAAA,SAAA,CAAUA,CAAK,EACvE,CAAA,CAEaC,EAAiB,MAAOC,CAAAA,EAAuC,CAC1E,MAAM,CAAA,CAAA,QAAA,EAAYA,GAAc,iBAAiB,CAAA,CAAA,CAAG,IAAK,CAAA,OAAA,CAAQ,MAAM,EACzE,CAAA,CAEaC,EAAmB,MAC9BC,CAAAA,CACAC,IACkB,CAClB,EAAA,CAAG,OAAOD,CAAMC,CAAAA,CAAAA,CAAI,CAAE,SAAW,CAAA,CAAA,CAAK,CAAC,EACzC,CAAA,CCvBO,IAAMC,CAAuB,CAAA,MAAOC,CAAkC,EAAA,CAC3E,GAAI,CACF,OAAO,MAAM,EAAG,CAAA,QAAA,CAASA,CAAI,CAC/B,CAAA,KAAgB,CACd,MAAM,IAAI,MAAM,CAAqCA,kCAAAA,EAAAA,CAAI,EAAE,CAC7D,CACF,EAEaC,CAAa,CAAA,SAA2B,CACnD,GAAI,CACF,MAAM,CAAA,CAAA,cAAA,EACR,MAAgB,CACd,MAAM,IAAI,KAAM,CAAA,wBAAwB,CAC1C,CACF,CAAA,CAEaC,EAAY,SAA2B,CAElD,GAAI,CADe,CAAA,MAAM,kBACT,QAAS,EAAA,CAAE,QAAS,CAAA,gBAAgB,EAClD,MAAM,IAAI,MAAM,2BAA2B,CAAA,CAG7C,GAAI,CACF,MAAM,+BACR,CAAY,KAAA,CACV,MAAM,IAAI,KAAA,CAAM,6BAA6B,CAC/C,CACF,EC7BO,IAAMC,CAAAA,CAAa,MACxBC,CAAAA,CACAC,IAEI,CAAE,CAAA,GAAA,CAAI,KAAU,MAClB,EAAA,IAAA,CAAKD,CAAO,CACLC,CAAAA,CAAAA,IAEA,OAAQD,CAAAA,CAAAA,CAASC,CAAE,CAIjBC,CAAAA,CAAAA,CAAcF,GAAoB,IAAK,CAAA,KAAA,CAAM,MAAMA,CAAO,CAAC,CAE3DG,CAAAA,CAAAA,CAAYC,GAAkB,IAAK,CAAA,CAAA,QAAA,EAAM,MAAM,GAAIA,CAAAA,CAAK,CAAC,CAAE,CAAA,CAAA,CAAA,CCelE,gBAAkB,CACtB,IAAMC,EAAa,IAAK,CAAA,CAAA,EAAQ,KAAK,MAAa,EAAA,2BAAA,CAC9C1C,EAEJ,CAAE,CAAA,OAAA,CAAU,IAAK,CAAA,OAAA,GAAe,OAEhC,GAAI,CACFA,EAAS,MAAMgC,CAAAA,CAAqBU,CAAU,CAC1C1C,CAAAA,CAAAA,CAAO,WACT,EAAGA,CAAAA,CAAAA,CAAO,SAAS,CAGrB,CAAA,MAAMkC,GACN,CAAA,MAAMC,GACNI,CAAAA,CAAAA,CAAW,sCAA+B,EAC5C,OAASE,CAAO,CAAA,CACdD,EAASC,CAAK,CAAA,CACd,QAAQ,IAAK,CAAA,CAAC,EAChB,CAEA,IAAMxB,EAAW,MAAMD,CAAAA,CAAchB,EAAO,QAAQ,CAAA,CAC9C2C,EAAgB3C,CAAO,CAAA,cAAA,EAAkBiB,CAAS,CAAA,CAAC,EAAE,EAE3D,CAAA,IAAA,CACE,gCAAyB,KAAM,CAAA,IAAA,CAC7BA,EAAS,GAAK2B,CAAAA,CAAAA,EAAWA,EAAO,EAAE,CAAA,CAAE,KAAK,IAAI,CAC/C,CAAC,CACH,CAAA,CAAA,CAEA,MAAMvB,CAAoBrB,CAAAA,CAAAA,CAAO,EAAE,CAAA,CAEnC,QAAW4C,CAAU3B,IAAAA,CAAAA,CAAU,CAC7B,IAAsB,CAAA,eAAA,EAAA,KAAA,CAAM,KAAK2B,CAAO,CAAA,EAAE,CAAC,CAE3CnB,OAAAA,CAAAA,CAAAA,CAAAA,CAAkB,CAChB,IAAMR,CAAAA,CAAAA,CAAS,IAAK2B,CAAWA,EAAAA,CAAAA,CAAO,EAAE,CACxC,CAAA,aAAA,CAAeA,CAAO,CAAA,EAAA,CACtB,cAAAD,CACF,CAAC,EAED,GAAI,CACF,MAAMP,CAAW,CAAA,CAAA,SAAA,EAAYQ,EAAO,MAAM,CAAA,GAAA,CAAA,CAAO,IAC/CrB,CAAeqB,CAAAA,CAAAA,CAAO,MAAM,CAC9B,CAAA,CACA,MAAMjB,CAAe3B,CAAAA,CAAAA,CAAO,WAAW,CAAA,CACvC,MAAMoC,CAAW,CAAA,kBAAA,CAAoB,IACnCP,CACE7B,CAAAA,CAAAA,CAAO,KACP2C,CAAkBC,GAAAA,CAAAA,CAAO,IAAM5C,CAAO,CAAA,YAAA,CAClCA,EAAO,EACP,CAAA,IAAA,CAAK,KAAKA,CAAO,CAAA,EAAA,CAAI4C,EAAO,EAAE,CACpC,CACF,EACF,OAASH,CAAO,CAAA,CACdD,EAASC,CAAM,CAAA,MAAA,EAAQ,MAAUA,EAAAA,CAAK,EACxC,CACF,CAEA,MAAM,CAAiBE,CAAAA,aAAAA,EAAAA,CAAa,GAEpCJ,CAAW,CAAA,yBAAkB,EAC/B,CAAG,GAAA","file":"cli.mjs","sourcesContent":["import type { ProviderConfig } from \"../../cli\";\nimport { BranchProvider } from \"./index\";\n\nexport interface BitbucketProviderConfig extends ProviderConfig {\n type: \"bitbucket\";\n url?: string;\n project: string;\n repository: string;\n}\n\nconst isApplicable = (config: BitbucketProviderConfig) =>\n config.type === \"bitbucket\" &&\n config.project != null &&\n config.repository != null;\n\nconst computeAuthorizationHeader = (): string => {\n const token = $.env[\"BITBUCKET_TOKEN\"];\n if (token != null) {\n return `Bearer ${token}`;\n }\n const username = $.env[\"BITBUCKET_USERNAME\"];\n const password = $.env[\"BITBUCKET_PASSWORD\"];\n if (username != null && password != null) {\n return `Basic ${Buffer.from(`${username}:${password}`).toString(\"base64\")}`;\n }\n};\n\nconst fetcher = async (config: BitbucketProviderConfig) => {\n const host = config.url ?? \"https://bitbucket.org\";\n const url = `${host}/rest/api/1.0/projects/${config.project}/repos/${config.repository}/pull-requests?state=open`;\n const response = await fetch(url, {\n headers: { Authorization: computeAuthorizationHeader() },\n });\n if (response.ok) {\n const data = await response.json();\n return data.values.map((v: any) => ({\n id: `PR-${v.id}`,\n commit: v.fromRef.latestCommit,\n }));\n } else {\n throw new Error(\n `Error during fetch: ${response.status} ${response.statusText}`,\n );\n }\n};\n\nconst provider: BranchProvider<BitbucketProviderConfig> = { isApplicable, fetcher };\n\nexport default provider;\n","import type { ProviderConfig } from \"../../cli\";\nimport type { BranchProvider } from \"./index\";\n\nexport interface GithubProviderConfig extends ProviderConfig {\n type: \"github\";\n url?: string;\n owner: string;\n repository: string;\n}\n\nconst isApplicable = (config: GithubProviderConfig) =>\n config.type === \"github\" && config.owner != null && config.repository != null;\n\nconst fetcher = async (config: GithubProviderConfig) => {\n const host = config.url ?? \"https://api.github.com\";\n const url = `${host}/repos/${config.owner}/${config.repository}/pulls?state=open`;\n const response = await fetch(url, {\n headers: {\n Accept: \"Accept: application/vnd.github+json\",\n Authorization: `Bearer ${$.env[\"GITHUB_TOKEN\"]}`,\n \"X-GitHub-Api-Version\": \"2022-11-28\",\n },\n });\n if (response.ok) {\n const data = await response.json();\n return data.map((v: any) => ({ id: `PR-${v.number}`, commit: v.head.sha }));\n } else {\n throw new Error(\n `Error during fetch: ${response.status} ${response.statusText}`,\n );\n }\n};\n\nconst provider: BranchProvider<GithubProviderConfig> = {\n isApplicable,\n fetcher,\n};\n\nexport default provider;\n","import type { ProviderConfig } from \"../../cli\";\nimport { BranchProvider } from \"./index\";\n\nexport interface GitLabProviderConfig extends ProviderConfig {\n type: \"gitlab\";\n url?: string;\n projectId: string;\n}\n\nconst isApplicable = (config: GitLabProviderConfig) =>\n config.type === \"gitlab\" && config.projectId != null;\n\nconst fetcher = async (config: GitLabProviderConfig) => {\n const host = config.url ?? \"https://gitlab.com\";\n const url = `${host}/api/v4/projects/${config.projectId}/merge_requests?state=opened&order_by=updated_at&sort=desc`;\n const response = await fetch(url, {\n headers: { \"PRIVATE-TOKEN\": `${$.env[\"GITLAB_TOKEN\"]}` },\n });\n\n if (!response.ok) {\n throw new Error(\n `HTTP error! status: ${response.status} ${response.statusText}`\n );\n }\n\n const data = await response.json();\n return data.map((mr: any) => ({\n id: mr.id,\n commit: mr.head.sha,\n title: mr.title,\n source_branch: mr.source_branch,\n }));\n};\n\nconst provider: BranchProvider<GitLabProviderConfig> = {\n isApplicable,\n fetcher,\n};\n\nexport default provider;\n","import type { ProviderConfig } from \"../../cli\";\nimport type { Branch } from \"../branches\";\nimport bitbucketPullRequests from \"./bitbucket-pull-requests\";\nimport githubPullRequests from \"./github-pull-requests\";\nimport gitlabMergeRequests from \"./gitlab-merge-requests\";\n\nexport interface BranchProvider<C extends ProviderConfig> {\n isApplicable: (config: C) => boolean;\n fetcher: (config: C) => Promise<Branch[]>;\n}\n\nconst providers: BranchProvider<ProviderConfig>[] = [\n bitbucketPullRequests,\n githubPullRequests,\n gitlabMergeRequests,\n];\n\nexport default providers;\n","import type { ProviderConfig } from \"../cli\";\nimport providers from \"./providers\";\n\nexport interface Branch {\n id: string;\n commit: string;\n}\n\nexport const fetchBranches = async (\n config?: ProviderConfig,\n): Promise<Branch[]> => {\n const branches: Branch[] = [];\n\n // Add current branch to the list\n const currentBranch = await $`git branch --show-current`;\n const currentCommit = await $`git log --format=\"%H\" -n 1`;\n branches.push({\n id: currentBranch.toString().trim(),\n commit: currentCommit.toString().trim(),\n });\n\n // Fetch other branches from a provider, based on configuration\n if (config) {\n await spinner(\"Fetching branches..\", async () => {\n const provider = providers.find((p) => p.isApplicable(config));\n if (!provider) {\n throw new Error(\"Cannot find a branch provider\");\n }\n branches.push(...(await provider.fetcher(config)));\n });\n }\n\n return branches;\n};\n","import type { BranchSwitcherState } from \"../state\";\n\nexport const cleanPreviousBundle = async (directory: string): Promise<void> => {\n fs.removeSync(directory);\n};\n\nexport const checkoutCommit = async (commit: string): Promise<void> => {\n await $`git fetch origin`;\n await $`git checkout ${commit}`;\n await $`git submodule update --init`;\n};\n\nexport const prepareAddonState = (state: BranchSwitcherState): void => {\n process.env[\"STORYBOOK_BRANCH_SWITCHER_STATE\"] = JSON.stringify(state);\n};\n\nexport const buildStorybook = async (scriptName?: string): Promise<void> => {\n await $`npm run ${scriptName ?? \"build-storybook\"}`.pipe(process.stdout);\n};\n\nexport const prepareStorybook = async (\n from: string,\n to: string,\n): Promise<void> => {\n fs.cpSync(from, to, { recursive: true });\n};\n","import { Config } from \"../cli\";\n\nexport const extractConfiguration = async (path: string): Promise<Config> => {\n try {\n return await fs.readJson(path);\n } catch (error) {\n throw new Error(`Cannot read configuration file at ${path}`);\n }\n}\n\nexport const verifyNode = async (): Promise<void> => {\n try {\n await $`node --version`;\n } catch (error) {\n throw new Error('Node must be installed');\n }\n}\n\nexport const verifyGit = async (): Promise<void> => {\n const gitVersion = await $`git --version`;\n if (!gitVersion.toString().includes('git version 2.')) {\n throw new Error('Git 2.x must be installed');\n }\n\n try {\n await $`git diff-index --quiet HEAD`\n } catch (e) {\n throw new Error('Git workspace must be clean');\n }\n}\n","export const logAndWait = async (\n message: string,\n fn: () => Promise<void>,\n): Promise<void> => {\n if ($.env[\"CI\"] === \"true\") {\n echo(message);\n return fn();\n } else {\n return spinner(message, fn);\n }\n};\n\nexport const logSuccess = (message: string) => echo(chalk.green(message));\n\nexport const logError = (error: string) => echo(`❌ ${chalk.red(error)}`);\n","#!/usr/bin/env node\n\nimport \"zx/globals\";\nimport { fetchBranches } from \"./run/branches\";\nimport {\n buildStorybook,\n checkoutCommit,\n cleanPreviousBundle,\n prepareAddonState,\n prepareStorybook,\n} from \"./run/build\";\nimport { extractConfiguration, verifyGit, verifyNode } from \"./run/setup\";\nimport { logAndWait, logError, logSuccess } from \"./run/log\";\n\nexport interface ProviderConfig {\n type: \"bitbucket\" | \"github\" | \"gitlab\";\n [key: string]: string;\n}\n\nexport interface Config {\n directory?: string;\n script_name?: string;\n from: string;\n to: string;\n default_branch?: string;\n default_root?: boolean;\n provider?: ProviderConfig;\n}\n\nvoid (async function () {\n const configPath = argv[\"c\"] ?? argv[\"config\"] ?? \".storybook/.branches.json\";\n let config: Config;\n\n $.verbose = argv[\"verbose\"] !== undefined;\n\n try {\n config = await extractConfiguration(configPath);\n if (config.directory) {\n cd(config.directory);\n }\n\n await verifyNode();\n await verifyGit();\n logSuccess(\"😎 Your workspace looks good!\");\n } catch (error) {\n logError(error);\n process.exit(1);\n }\n\n const branches = await fetchBranches(config.provider);\n const defaultBranch = config.default_branch ?? branches[0].id;\n\n echo(\n `👐 Branches to build: ${chalk.cyan(\n branches.map((branch) => branch.id).join(\", \"),\n )}`,\n );\n\n await cleanPreviousBundle(config.to);\n\n for (const branch of branches) {\n echo`🚚 Move to the ${chalk.cyan(branch.id)} branch`;\n\n prepareAddonState({\n list: branches.map((branch) => branch.id),\n currentBranch: branch.id,\n defaultBranch,\n });\n\n try {\n await logAndWait(`Fetching ${branch.commit}...`, () =>\n checkoutCommit(branch.commit),\n );\n await buildStorybook(config.script_name);\n await logAndWait(`Copying files...`, () =>\n prepareStorybook(\n config.from,\n defaultBranch === branch.id && config.default_root\n ? config.to\n : path.join(config.to, branch.id),\n ),\n );\n } catch (error) {\n logError(error.stderr?.trim() ?? error);\n }\n }\n\n await $`git checkout ${defaultBranch}`;\n\n logSuccess(\"🎉 Bundle ready!\");\n})();\n"]}