create-backpack-app 0.6.1 → 0.7.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/README.md +20 -6
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/metafile-esm.json +1 -1
- package/package.json +9 -7
package/README.md
CHANGED
|
@@ -2,10 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
## Prerequisites
|
|
5
|
-
- You need to have
|
|
6
|
-
- You need to have access to
|
|
7
|
-
- https://github.com/ef-global/nextjs-backpack-boilerplate,
|
|
8
|
-
- https://github.com/ef-global/reactjs-backpack-boilerplate,
|
|
5
|
+
- You need to have Node.js 24+ and npm installed. This repo is pinned to `24.15.0` in `.nvmrc`; run `nvm use` from the repo root if you use nvm.
|
|
6
|
+
- You need to have access to the template used in this cli.
|
|
9
7
|
- https://github.com/ef-global/storyblok-nextjs-backpack-boilerplate
|
|
10
8
|
- You need to have `GH_PACKAGES_TOKEN` setup in your environment variables. (https://vimeo.com/777149667)
|
|
11
9
|
|
|
@@ -16,8 +14,24 @@ Run the following command to create a new app with Backpack Design System:
|
|
|
16
14
|
npm create backpack-app
|
|
17
15
|
```
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
The CLI currently supports the Storyblok NextJS Backpack template only.
|
|
18
|
+
|
|
19
|
+
For non-interactive usage, `--templateUrl` accepts either `storyblok` or the full Storyblok template git URL:
|
|
20
20
|
|
|
21
21
|
```
|
|
22
|
-
|
|
22
|
+
npm create backpack-app my-app -- --templateUrl storyblok
|
|
23
23
|
```
|
|
24
|
+
|
|
25
|
+
## Releases
|
|
26
|
+
|
|
27
|
+
This package is published publicly to npm as `create-backpack-app`.
|
|
28
|
+
|
|
29
|
+
Releases are managed by Changesets and GitHub Actions:
|
|
30
|
+
|
|
31
|
+
1. Add a changeset with `npm run changeset` for every releasable change.
|
|
32
|
+
2. Merge the change to `master`.
|
|
33
|
+
3. GitHub Actions creates or updates the `Version Packages` PR.
|
|
34
|
+
4. Merge the `Version Packages` PR.
|
|
35
|
+
5. GitHub Actions publishes the package to npm.
|
|
36
|
+
|
|
37
|
+
The GitHub repository must have an `NPM_TOKEN` Actions secret with permission to publish `create-backpack-app` to npm.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
type TemplateUrls = 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git'
|
|
2
|
+
type TemplateUrls = 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git';
|
|
3
3
|
|
|
4
4
|
interface CLIOptions {
|
|
5
5
|
appName: string;
|
|
@@ -13,6 +13,7 @@ interface CLIOptions {
|
|
|
13
13
|
sbMigFeatures: string[];
|
|
14
14
|
install?: boolean;
|
|
15
15
|
dryRun?: boolean;
|
|
16
|
+
noGit?: boolean;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
export { CLIOptions };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import
|
|
2
|
+
import ee from"chalk";import{Command as te}from"commander";import a from"inquirer";var Y=/^(?:@[a-z0-9-*~][a-z0-9-*._~]*\/)?[a-z0-9-~][a-z0-9-._~]*$/,y=e=>{let t=e.split("/"),o=t.findIndex(r=>r.startsWith("@")),n=t[t.length-1];return t.findIndex(r=>r.startsWith("@"))!==-1&&(n=t.slice(o).join("/")),e==="."||Y.test(n??"")?!0:"App name must consist of only lowercase alphanumeric characters, '-', and '_'"},d=e=>!0,b=e=>!0;var l="git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git",$={"Storyblok NextJS Backpack Boilerplate":l},k=[{name:"Storyblok NextJS Backpack Boilerplate",value:$["Storyblok NextJS Backpack Boilerplate"]}],f=[{name:"eu",value:"eu"},{name:"us",value:"us"},{name:"cn",value:"cn"}],h=[{name:"components",checked:!0},{name:"datasources",checked:!0},{name:"roles",checked:!1},{name:"content",checked:!0}];var w=async()=>{let{appName:e}=await a.prompt({name:"appName",type:"input",message:"What will your project be called?",default:"new-backpack-app",validate:y,transformer:t=>t.trim()});return e},S=async()=>{let{region:e}=await a.prompt({type:"list",name:"region",message:"Select your region",choices:f});return e},x=async()=>{let{spaceId:e}=await a.prompt({name:"spaceId",type:"input",message:"Insert your space id",default:"00000",validate:d,transformer:t=>t.trim()});return e},T=async()=>{let{OAuthToken:e}=await a.prompt({name:"OAuthToken",type:"input",message:"Insert your OAuthToken",default:"00000",validate:b,transformer:t=>t.trim()});return e};var v=async()=>{let{inWorkshop:e}=await a.prompt({type:"confirm",name:"inWorkshop",message:"Are you in a workshop?",default:!1});return e},I=async()=>{let{noGit:e}=await a.prompt({type:"confirm",name:"noGit",message:"Do you want to skip initializing a new git repository?",default:!1});return e},N=async()=>{let{areYouSure:e}=await a.prompt({type:"confirm",name:"areYouSure",message:"Are all these answers correct?",default:!0});return e},A=async()=>{let{install:e}=await a.prompt({type:"confirm",name:"install",message:"Do you want to run auto configuration (install packages, sync components, initialize project)?",default:!0});return e},R=async()=>{let{templateUrl:e}=await a.prompt({type:"list",name:"templateUrl",message:"Select template",choices:k});return e},O=async()=>{let{branchName:e}=await a.prompt({type:"input",name:"branchName",message:"Custom branchName",default:"master"});return e},P=async()=>{let{sbMigFeatures:e}=await a.prompt({type:"checkbox",name:"sbMigFeatures",message:"What would you like to sync initially?",choices:h});return e};import{execa as p}from"execa";import i from"ora";import{rimraf as H}from"rimraf";import u from"path";import{fileURLToPath as X}from"url";import q from"fs-extra";var c=async e=>{e.stdout.pipe(process.stdout),e.stderr.pipe(process.stderr);try{let{stdout:t}=await e;return t}catch(t){console.log(t)}},C=async(e,t,o="master")=>{let n=i("Cloning repo").start(),r=p("git",["clone","-b",o,e,t]);return await c(r),n.stop(),r},M=async e=>{let t=i("Cleaning").start(),o=await H(`${e}/.git`);return t.stop(),o},U=async e=>{let t=i("Initializing GIT").start(),o=p("git",["init"],{cwd:e});return await c(o),t.stop(),o},L=async(e,t,o,n)=>{let r=i("Initializing storyblok project").start(),m=p("npm",["exec","--","sb-mig","init","project",`--spaceId=${t}`,`--oauthToken=${o}`,`--region=${n}`],{cwd:e});return await c(m),r.stop(),m},j=async e=>{let t=i("Installing dependencies").start(),o=p("npm",["install","--legacy-peer-deps"],{cwd:e});return await c(o),t.stop(),o},G=async e=>{let t=i("Syncing schemas").start(),o=p("npm",["run","sync:components:all"],{cwd:e});return await c(o),t.stop(),o},W=async e=>{let t=i("Syncing datasources").start(),o=p("npm",["run","sync:datasources:all"],{cwd:e});return await c(o),t.stop(),o},_=async e=>{let t=i("Syncing roles").start(),o=p("npm",["run","sync:roles:all"],{cwd:e});return await c(o),t.stop(),o},B=async e=>{let t=i("Syncing stories").start(),o=p("npm",["run","sync:content:seed"],{cwd:e});return await c(o),t.stop(),o},F=async e=>{let t=i("Creating Local HTTPs").start(),o=p("npm",["run","create:https"],{cwd:e});return await c(o),t.stop(),o},V=X(import.meta.url),Q=u.dirname(V),Z=u.join(Q,"../"),D=()=>{let e=u.join(Z,"package.json");return q.readJSONSync(e).version??"1.0.0"};var g=async e=>{let{region:t,templateUrl:o,sbMigFeatures:n,spaceId:r="",OAuthToken:m="",appName:s,inWorkshop:E=!1,noGit:J=!1,branchName:z="master"}=e;if(await C(o,s,z),await M(s),!E&&!J&&await U(s),e.install&&await j(s),o===l&&e.install)try{console.log("you've selected storyblok-nextjs-backpack-boilerplate"),await L(s,r,m,t),await F(s),n.includes("components")&&await G(s),n.includes("datasources")&&await W(s),n.includes("roles")&&await _(s),n.includes("content")&&await B(s)}catch(K){console.log("error happened..."),console.log(K)}};var oe=e=>{if(e===l||e==="storyblok")return l;throw new Error(`Unsupported template "${e}". Only storyblok is currently supported.`)},ne=async()=>{let e={},t=new te().name("create-backpack-app");if(t.description("A CLI for creating projects with @ef-global/backpack").argument("[dir]","The name of the application, as well as the name of the directory to create").option("--appName <appName>","Name of your application").option("--region <region>","Region you are in: eu, us, cn","eu").option("--inWorkshop","Pass it if you are in the workshop").option("--templateUrl <template>","Template you would like to use (accepted: storyblok or the full Storyblok template git URL)",l).option("--spaceId <spaceId>","Space ID for Storyblok").option("--OAuthToken <token>","OAuth Token for Storyblok").option("--sbMigFeatures <sbMigFeatures...>","What you would like to sync with sb-mig automatically (components, roles, datasources, content)",[]).option("--noGit","Explicitly tell the CLI to not initialize a new git repo in the project").option("--install","Run auto configuration, including package install, project initialization, and syncing").option("--dryRun","Dry Run command").version(D(),"-v, --version","Display the version number").addHelpText("afterAll","Done").parse(process.argv),process.argv.length>2){let o=t.opts(),n=o.appName||t.args[0];if(!n)throw new Error("App name is required. Pass it as [dir] or --appName.");e={...o,appName:n,templateUrl:oe(o.templateUrl)},e.dryRun?console.log("CLI Options passed to execute",e):await g(e)}else{e.appName=await w(),console.log(" "),e.region=await S(),console.log(" "),e.inWorkshop=await v(),console.log(" "),e.inWorkshop||(e.noGit=await I(),console.log(" ")),e.templateUrl=await R(),console.log(" "),e.branchName=await O(),e.install=await A(),console.log(" "),e.templateUrl===l&&e.install&&(console.log("you've selected storyblok-nextjs-backpack-boilerplate"),e.sbMigFeatures=await P(),console.log(" "),e.spaceId=await x(),console.log(" "),e.OAuthToken=await T(),console.log(" ")),console.log("cliOptions to run cli command with: ",{cliOptions:e});let o=await N();console.log(" "),o||(console.log(ee.red("Aborting creation...")),process.exit(1)),await g(e)}};ne().catch(e=>{console.log("Aborting installation..."),e instanceof Error||console.log("An unknown error has occurred. Please open an issue on github with the below:"),console.log(e),process.exit(1)});
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/prompts.ts","../src/validators.ts","../src/constants.ts","../src/utils.ts","../src/execute.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport {\n promptAppName,\n promptList,\n promptOAuthToken,\n promptSpaceId,\n promptIfInWorkshop,\n promptSbMigFeatures,\n promptInstall,\n promptAreYouSure,\n promptContentSeedSpaceId,\n promptRegion,\n customBranchName\n} from \"./prompts.js\";\nimport {execute} from \"./execute.js\";\nimport {TemplateUrls} from \"./constants.js\";\nimport {getVersion} from \"./utils.js\";\n\n\nexport interface CLIOptions {\n appName: string;\n region: string;\n inWorkshop: boolean;\n templateUrl: TemplateUrls;\n contentSeedSpaceId?: string;\n branchName?: string;\n spaceId?: string;\n OAuthToken?: string;\n sbMigFeatures: string[];\n install?: boolean;\n dryRun?: boolean;\n}\n\n\nconst main = async () => {\n let cliOptions = {} as CLIOptions;\n\n\n\n\n const program = new Command().name(\"create-backpack-app\");\n\n program\n .description(\"A CLI for creating projects with @ef-global/backpack\")\n .argument(\n \"[dir]\",\n \"The name of the application, as well as the name of the directory to create\",\n )\n .option(\n \"--appName <appName>\",\n \"Name of your application\",\n false,\n )\n .option(\n \"--region <region>\",\n \"Region you are in: eu, us, cn\",\n 'eu',\n )\n .option(\n \"--inWorkshop\",\n \"Pass it if you are in the workshop\",\n false,\n )\n .option(\n \"--templateUrl <template>\",\n \"Template you would like to use (storyblok, nextjs, reactjs)\",\n 'reactjs',\n )\n .option(\n \"--spaceId <spaceId>\",\n \"Space ID for Storyblok\",\n false,\n )\n .option(\n \"--OAuthToken <token>\",\n \"OAuth Token for Storyblok\",\n false,\n )\n .option(\n \"--sbMigFeatures <sbMigFeatures...>\",\n \"What would you would like to sync with sb-mig automatically (components, roles, datasources, content)\",\n [],\n )\n .option(\n \"--noGit\",\n \"Explicitly tell the CLI to not initialize a new git repo in the project\",\n false,\n )\n .option(\n \"--install\",\n \"Explicitly tell the CLI to not run all the auto syncing and install\",\n false,\n )\n .option(\n \"--dryRun\",\n \"Dry Run command\",\n false,\n )\n .version(getVersion(), \"-v, --version\", \"Display the version number\")\n .addHelpText(\n \"afterAll\",\n `Done`,\n )\n .parse(process.argv);\n\n\n if(process.argv.length > 2) {\n const options = program.opts<CLIOptions>();\n cliOptions = {\n ...options // options needs to be exactly the same as CLIOptions that i'm using in interactive cli\n }\n if(cliOptions['dryRun']) {\n console.log(\"CLI Options passed to execute\", cliOptions)\n } else {\n await execute(cliOptions)\n }\n } else {\n cliOptions['appName'] = await promptAppName();\n console.log(\" \")\n\n cliOptions['region'] = await promptRegion();\n console.log(\" \")\n\n cliOptions['inWorkshop'] = await promptIfInWorkshop();\n console.log(\" \")\n\n cliOptions['templateUrl'] = await promptList();\n console.log(\" \")\n\n cliOptions['branchName'] = await customBranchName();\n\n cliOptions['install'] = await promptInstall();\n console.log(\" \")\n\n if (cliOptions['templateUrl'] === 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git' && cliOptions['install']) {\n console.log(\"you've selecvted storyblok-nextjs-backpack-boilerplate\")\n cliOptions['sbMigFeatures'] = await promptSbMigFeatures();\n console.log(\" \")\n\n cliOptions['spaceId'] = await promptSpaceId();\n console.log(\" \")\n\n cliOptions['OAuthToken'] = await promptOAuthToken();\n console.log(\" \");\n\n\n }\n\n console.log(\"cliOptions to run cli command with: \", {cliOptions})\n\n const areYouSure = await promptAreYouSure();\n console.log(\" \")\n\n if (!areYouSure) {\n console.log(chalk.red(\"Aborting creation...\"));\n process.exit(1);\n }\n\n await execute(cliOptions)\n }\n}\n\nmain().catch((err) => {\n console.log(\"Aborting installation...\");\n if (err instanceof Error) {\n console.log(err);\n } else {\n console.log(\n \"An unknown error has occurred. Please open an issue on github with the below:\",\n );\n console.log(err);\n }\n process.exit(1);\n});","import inquirer from \"inquirer\";\nimport {validateAppName, validateSpaceId, valdiateOAuthToken} from \"./validators.js\";\nimport {availableRegions, availableSbMigFeatures, availableTemplates, TemplateUrls} from \"./constants.js\";\n\n\ninterface CliResults {\n appName: string;\n spaceId: string;\n contentSeedSpaceId: string;\n OAuthToken: string;\n}\n\n\nexport const promptAppName = async (): Promise<string> => {\n const { appName } = await inquirer.prompt<Pick<CliResults, \"appName\">>({\n name: \"appName\",\n type: \"input\",\n message: \"What will your project be called?\",\n default: 'new-backpack-app',\n validate: validateAppName,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return appName;\n};\n\nexport const promptRegion = async (): Promise<TemplateUrls> => {\n const {region} = await inquirer.prompt<{ region: TemplateUrls }>({\n type: 'list',\n name: 'region',\n message: 'Select your region',\n choices: availableRegions,\n },)\n\n return region;\n}\n\nexport const promptSpaceId = async (): Promise<string> => {\n const { spaceId } = await inquirer.prompt<Pick<CliResults, \"spaceId\">>({\n name: \"spaceId\",\n type: \"input\",\n message: \"Insert your space id\",\n default: '00000',\n validate: validateSpaceId,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return spaceId;\n};\n\nconst SBNextJSBackpackBoilerplateWorkshopsSpace = '209562'\n\nexport const promptContentSeedSpaceId = async (): Promise<string> => {\n const { contentSeedSpaceId } = await inquirer.prompt<Pick<CliResults, \"contentSeedSpaceId\">>({\n name: \"contentSeedSpaceId\",\n type: \"input\",\n message: \"Insert your Content Seed id (it will sync your stories, assets and others from this space)\",\n default: SBNextJSBackpackBoilerplateWorkshopsSpace,\n validate: validateSpaceId,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return contentSeedSpaceId;\n};\n\nexport const promptOAuthToken = async (): Promise<string> => {\n const { OAuthToken } = await inquirer.prompt<Pick<CliResults, \"OAuthToken\">>({\n name: \"OAuthToken\",\n type: \"input\",\n message: \"Insert your OAuthToken\",\n default: '00000',\n validate: valdiateOAuthToken,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return OAuthToken;\n};\n\nexport const promptContinue = async (): Promise<boolean> => {\n const {doWeContinue} = await inquirer.prompt<{ doWeContinue: boolean }>({\n type: 'confirm',\n name: 'doWeContinue',\n message: 'Do we continue?',\n default: false,\n })\n\n return doWeContinue;\n}\n\nexport const promptInitGit = async (): Promise<boolean> => {\n const {initGit} = await inquirer.prompt<{ initGit: boolean }>({\n type: 'confirm',\n name: 'initGit',\n message: 'Do you want to init a new git repository?',\n default: false,\n })\n\n return initGit;\n}\n\nexport const promptIfInWorkshop = async (): Promise<boolean> => {\n const {inWorkshop} = await inquirer.prompt<{ inWorkshop: boolean }>({\n type: 'confirm',\n name: 'inWorkshop',\n message: 'Are you in a workshop?',\n default: false,\n })\n\n return inWorkshop;\n}\n\nexport const promptAreYouSure = async (): Promise<boolean> => {\n const {areYouSure} = await inquirer.prompt<{ areYouSure: boolean }>({\n type: 'confirm',\n name: 'areYouSure',\n message: 'Are all these answers correct?',\n default: true,\n })\n\n return areYouSure;\n}\n\nexport const promptInstall = async (): Promise<boolean> => {\n const {install} = await inquirer.prompt<{ install: boolean }>({\n type: 'confirm',\n name: 'install',\n message: 'Do you want to run auto configuration (install packages, sync components, initialize project)?',\n default: true,\n })\n\n return install;\n}\n\nexport const promptList = async (): Promise<TemplateUrls> => {\n const {templateUrl} = await inquirer.prompt<{ templateUrl: TemplateUrls }>({\n type: 'list',\n name: 'templateUrl',\n message: 'Select template',\n choices: availableTemplates,\n },)\n\n return templateUrl;\n}\n\nexport const customBranchName = async (): Promise<string> => {\n const {branchName} = await inquirer.prompt<{ branchName: string }>({\n type: 'input',\n name: 'branchName',\n message: 'Custom branchName',\n default: 'master',\n },)\n\n return branchName;\n}\n\nexport const promptSbMigFeatures = async (): Promise<any> => {\n const {sbMigFeatures} = await inquirer.prompt<{ sbMigFeatures: any }>({\n type: \"checkbox\",\n name: 'sbMigFeatures',\n message: 'What would you like to sync initially?',\n choices: availableSbMigFeatures,\n },)\n\n return sbMigFeatures;\n}\n\n","const validationRegExp =\n /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n//Validate a string against allowed package.json names\nexport const validateAppName = (input: string) => {\n const paths = input.split(\"/\");\n\n // If the first part is a @, it's a scoped package\n const indexOfDelimiter = paths.findIndex((p) => p.startsWith(\"@\"));\n\n let appName = paths[paths.length - 1];\n if (paths.findIndex((p) => p.startsWith(\"@\")) !== -1) {\n appName = paths.slice(indexOfDelimiter).join(\"/\");\n }\n\n if (input === \".\" || validationRegExp.test(appName ?? \"\")) {\n return true;\n } else {\n return \"App name must consist of only lowercase alphanumeric characters, '-', and '_'\";\n }\n};\n\nexport const validateSpaceId = (input: string) => {\n // TODO: make space id validation\n return true\n};\n\nexport const valdiateOAuthToken = (input: string) => {\n // TODO: make OAuthToken validation\n return true\n};\n\n\n","export type TemplateNames = 'Storyblok NextJS Backpack Boilerplate' | 'NextJS Backpack Boilerplate' | 'ReactJS Backpack Boilerplate';\nexport type TemplateUrls = 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git' | 'git@github.com:ef-global/nextjs-backpack-boilerplate.git' | 'git@github.com:ef-global/reactjs-backpack-boilerplate.git';\n\nexport const templates: Record<TemplateNames, TemplateUrls> = {\n 'Storyblok NextJS Backpack Boilerplate': \"git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git\",\n 'NextJS Backpack Boilerplate': \"git@github.com:ef-global/nextjs-backpack-boilerplate.git\",\n 'ReactJS Backpack Boilerplate': \"git@github.com:ef-global/reactjs-backpack-boilerplate.git\",\n} as const\n\n\ninterface TemplateObj {\n name: TemplateNames,\n value: TemplateUrls\n}\n\ntype Region = 'eu' | 'us' | 'cn'\n\ninterface RegionObj {\n name: Region,\n value: Region\n}\n\n\nexport const availableTemplates: TemplateObj[] = [\n {\n name: 'Storyblok NextJS Backpack Boilerplate',\n value: templates['Storyblok NextJS Backpack Boilerplate']\n },\n {\n name: 'NextJS Backpack Boilerplate',\n value: templates['NextJS Backpack Boilerplate']\n },\n {\n name: 'ReactJS Backpack Boilerplate',\n value: templates['ReactJS Backpack Boilerplate']\n }\n]\n\nexport const availableRegions: RegionObj[] = [\n {\n name: 'eu',\n value: 'eu'\n },\n {\n name: 'us',\n value: 'us'\n },\n {\n name: 'cn',\n value: 'cn'\n }\n]\n\n\nexport type SbMigFeature = 'components' | 'datasources' | 'roles' | 'content';\n\ninterface SbMigFeatures {\n name: SbMigFeature,\n checked: boolean\n}\n\nexport const availableSbMigFeatures: SbMigFeatures[] = [\n {\n name: 'components',\n checked: true,\n },\n {\n name: 'datasources',\n checked: true,\n },\n {\n name: 'roles',\n checked: false,\n },\n {\n name: 'content',\n checked: true,\n },\n]\n\n// Content Seed for NextJS Backpack Boilerplate\nexport const defaultContentSeed = {\n accessToken: 'ThD6rsOr7ahgEqZUgD9LEgtt',\n spaceId: '172677'\n}\n\n// Workshop Content Seed for NextJS Backpack Boilerplate\nexport const workshopContentSeed = {\n accessToken: 'eXMy2GQTvkgJDvOGBFs2JQtt',\n spaceId: '209562'\n}","import type { PackageJson } from \"type-fest\";\nimport { execa } from \"execa\";\nimport ora from \"ora\";\nimport { rimraf } from \"rimraf\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport fs from \"fs-extra\";\nimport { TemplateUrls } from \"./constants.js\";\n\nexport type PackageManager = \"npm\" | \"yarn\";\n\nconst pipeOut = async (result: any) => {\n result.stdout.pipe(process.stdout);\n result.stderr.pipe(process.stderr);\n try {\n const { stdout } = await result;\n\n return stdout;\n } catch (e) {\n console.log(e);\n }\n};\n\nexport const getUserPkgManager: () => PackageManager = () => {\n // This environment variable is set by npm and yarn but pnpm seems less consistent\n const userAgent = process.env.npm_config_user_agent;\n\n if (userAgent) {\n if (userAgent.startsWith(\"yarn\")) {\n return \"yarn\";\n } else {\n return \"npm\";\n }\n } else {\n // If no user agent is set, assume npm\n return \"npm\";\n }\n};\n\nexport const cloneRepo = async (\n boilerplateUrl: TemplateUrls,\n nameOfFolder: string,\n branchName: string = \"master\"\n) => {\n const spinner = ora(\"Cloning repo\").start();\n\n const result = execa(\n `git clone -b ${branchName} ${boilerplateUrl} ${nameOfFolder}`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const removeInitialGitDirectory = async (appName: string) => {\n const spinner = ora(\"Cleaning\").start();\n\n const result = await rimraf(`${appName}/.git`);\n\n spinner.stop();\n\n return result;\n};\n\nexport const initializeGit = async (appName: string) => {\n const spinner = ora(\"Initializing GIT\").start();\n\n const result = execa(`cd ${appName} && git init`, {\n shell: true,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigInit = async (\n appName: string,\n spaceId: string,\n OAuthToken: string,\n region: string\n) => {\n const spinner = ora(\"Initializing storyblok project\").start();\n\n const result = execa(\n `cd ${appName} && yarn sb-mig init project --spaceId=${spaceId} --oauthToken=${OAuthToken} --region=${region}`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const installDeps = async (appName: string) => {\n const spinner = ora(\"Installing dependencies\").start();\n\n const userPackageManager = getUserPkgManager();\n\n console.log(\"This is current user package manage: \");\n console.log(userPackageManager);\n console.log(\n \"full command: \",\n `cd ${appName} && ${userPackageManager} install ${\n userPackageManager === \"npm\" ? \"--legacy-peer-deps\" : \"\"\n }`\n );\n\n const result = execa(\n `cd ${appName} && ${userPackageManager} install ${\n userPackageManager === \"npm\" ? \"--legacy-peer-deps\" : \"\"\n }`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\n// \"yarn sync:components:all && yarn sync:contents:all && yarn create:https\"\n\nexport const invokeSbMigSyncComponents = async (appName: string) => {\n const spinner = ora(\"Syncing schemas\").start();\n\n const userPackageManager = getUserPkgManager();\n\n const result = execa(\n `cd ${appName} && ${\n userPackageManager === \"npm\"\n ? `${userPackageManager} run`\n : userPackageManager\n } sync:components:all`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncDatasources = async (appName: string) => {\n const spinner = ora(\"Syncing datasources\").start();\n\n const userPackageManager = getUserPkgManager();\n\n const result = execa(\n `cd ${appName} && ${\n userPackageManager === \"npm\"\n ? `${userPackageManager} run`\n : userPackageManager\n } sync:datasources:all`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncRoles = async (appName: string) => {\n const spinner = ora(\"Syncing roles\").start();\n\n const userPackageManager = getUserPkgManager();\n\n const result = execa(\n `cd ${appName} && ${\n userPackageManager === \"npm\"\n ? `${userPackageManager} run`\n : userPackageManager\n } sync:roles:all`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncStories = async (appName: string) => {\n const spinner = ora(\"Syncing stories\").start();\n\n const userPackageManager = getUserPkgManager();\n\n const result = execa(\n `cd ${appName} && ${\n userPackageManager === \"npm\"\n ? `${userPackageManager} run`\n : userPackageManager\n } sync:content:seed`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const createLocalHTTPS = async (appName: string) => {\n const spinner = ora(\"Creating Local HTTPs\").start();\n\n const userPackageManager = getUserPkgManager();\n\n const result = execa(\n `cd ${appName} && ${\n userPackageManager === \"npm\"\n ? `${userPackageManager} run`\n : userPackageManager\n } create:https`,\n {\n shell: true,\n }\n );\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nconst __filename = fileURLToPath(import.meta.url);\nconst distPath = path.dirname(__filename);\nexport const PKG_ROOT = path.join(distPath, \"../\");\n\nexport const getVersion = () => {\n const packageJsonPath = path.join(PKG_ROOT, \"package.json\");\n\n const packageJsonContent = fs.readJSONSync(packageJsonPath) as PackageJson;\n\n return packageJsonContent.version ?? \"1.0.0\";\n};\n","import type {CLIOptions} from \"./index.js\";\nimport {\n cloneRepo, createLocalHTTPS,\n initializeGit,\n installDeps,\n invokeSbMigInit,\n invokeSbMigSyncComponents, invokeSbMigSyncDatasources, invokeSbMigSyncRoles, invokeSbMigSyncStories,\n removeInitialGitDirectory\n} from \"./utils.js\";\nimport {defaultContentSeed} from \"./constants.js\";\n\nexport const execute = async (cliOptions: CLIOptions) => {\n const {\n region,\n templateUrl,\n sbMigFeatures,\n spaceId = '',\n OAuthToken = '',\n appName,\n inWorkshop = false,\n branchName = 'master'\n } = cliOptions\n\n await cloneRepo(templateUrl, appName, branchName)\n if(!inWorkshop) {\n await removeInitialGitDirectory(appName)\n await initializeGit(appName)\n }\n if(!inWorkshop) {\n await removeInitialGitDirectory(appName)\n }\n\n if(cliOptions['install']) {\n await installDeps(appName)\n }\n\n if (templateUrl === 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git' && cliOptions['install']) {\n try {\n console.log(\"you've selecvted storyblok-nextjs-backpack-boilerplate\")\n await invokeSbMigInit(appName, spaceId, OAuthToken, region)\n await createLocalHTTPS(appName)\n\n if(sbMigFeatures.includes('components')) {\n await invokeSbMigSyncComponents(appName)\n }\n\n if(sbMigFeatures.includes('datasources')) {\n await invokeSbMigSyncDatasources(appName)\n }\n\n if(sbMigFeatures.includes('roles')) {\n await invokeSbMigSyncRoles(appName)\n }\n\n\n\n if(sbMigFeatures.includes('content')) {\n await invokeSbMigSyncStories(appName)\n }\n } catch (e) {\n console.log(\"error happened...\")\n console.log(e)\n }\n }\n}"],"mappings":";AAEA,OAAOA,MAAW,QAClB,OAAS,WAAAC,MAAe,YCHxB,OAAOC,MAAc,WCArB,IAAMC,EACF,6DAGSC,EAAmBC,GAAkB,CAC9C,IAAMC,EAAQD,EAAM,MAAM,GAAG,EAGvBE,EAAmBD,EAAM,UAAWE,GAAMA,EAAE,WAAW,GAAG,CAAC,EAE7DC,EAAUH,EAAMA,EAAM,OAAS,CAAC,EAKpC,OAJIA,EAAM,UAAWE,GAAMA,EAAE,WAAW,GAAG,CAAC,IAAM,KAC9CC,EAAUH,EAAM,MAAMC,CAAgB,EAAE,KAAK,GAAG,GAGhDF,IAAU,KAAOF,EAAiB,KAAKM,GAAW,EAAE,EAC7C,GAEA,+EAEf,EAEaC,EAAmBL,GAErB,GAGEM,EAAsBN,GAExB,GC1BJ,IAAMO,EAAiD,CAC1D,wCAAyC,qEACzC,8BAA+B,2DAC/B,+BAAgC,2DACpC,EAgBaC,EAAoC,CAC7C,CACI,KAAM,wCACN,MAAOD,EAAU,uCAAuC,CAC5D,EACA,CACI,KAAM,8BACN,MAAOA,EAAU,6BAA6B,CAClD,EACA,CACI,KAAM,+BACN,MAAOA,EAAU,8BAA8B,CACnD,CACJ,EAEaE,EAAgC,CACzC,CACI,KAAM,KACN,MAAO,IACX,EACA,CACI,KAAM,KACN,MAAO,IACX,EACA,CACI,KAAM,KACN,MAAO,IACX,CACJ,EAUaC,EAA0C,CACnD,CACI,KAAM,aACN,QAAS,EACb,EACA,CACI,KAAM,cACN,QAAS,EACb,EACA,CACI,KAAM,QACN,QAAS,EACb,EACA,CACI,KAAM,UACN,QAAS,EACb,CACJ,EFjEO,IAAMC,EAAgB,SAA6B,CACtD,GAAM,CAAE,QAAAC,CAAQ,EAAI,MAAMC,EAAS,OAAoC,CACnE,KAAM,UACN,KAAM,QACN,QAAS,oCACT,QAAS,mBACT,SAAUC,EACV,YAAcC,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOH,CACX,EAEaI,EAAe,SAAmC,CAC3D,GAAM,CAAC,OAAAC,CAAM,EAAI,MAAMJ,EAAS,OAAiC,CAC7D,KAAM,OACN,KAAM,SACN,QAAS,qBACT,QAASK,CACb,CAAE,EAEF,OAAOD,CACX,EAEaE,EAAgB,SAA6B,CACtD,GAAM,CAAE,QAAAC,CAAQ,EAAI,MAAMP,EAAS,OAAoC,CACnE,KAAM,UACN,KAAM,QACN,QAAS,uBACT,QAAS,QACT,SAAUQ,EACV,YAAcN,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOK,CACX,EAmBO,IAAME,EAAmB,SAA6B,CACzD,GAAM,CAAE,WAAAC,CAAW,EAAI,MAAMC,EAAS,OAAuC,CACzE,KAAM,aACN,KAAM,QACN,QAAS,yBACT,QAAS,QACT,SAAUC,EACV,YAAcC,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOH,CACX,EAwBO,IAAMI,EAAqB,SAA8B,CAC5D,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMC,EAAS,OAAgC,CAChE,KAAM,UACN,KAAM,aACN,QAAS,yBACT,QAAS,EACb,CAAC,EAED,OAAOD,CACX,EAEaE,EAAmB,SAA8B,CAC1D,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMF,EAAS,OAAgC,CAChE,KAAM,UACN,KAAM,aACN,QAAS,iCACT,QAAS,EACb,CAAC,EAED,OAAOE,CACX,EAEaC,EAAgB,SAA8B,CACvD,GAAM,CAAC,QAAAC,CAAO,EAAI,MAAMJ,EAAS,OAA6B,CAC1D,KAAM,UACN,KAAM,UACN,QAAS,iGACT,QAAS,EACb,CAAC,EAED,OAAOI,CACX,EAEaC,EAAa,SAAmC,CACzD,GAAM,CAAC,YAAAC,CAAW,EAAI,MAAMN,EAAS,OAAsC,CACvE,KAAM,OACN,KAAM,cACN,QAAS,kBACT,QAASO,CACb,CAAE,EAEF,OAAOD,CACX,EAEaE,EAAmB,SAA6B,CACzD,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMT,EAAS,OAA+B,CAC/D,KAAM,QACN,KAAM,aACN,QAAS,oBACT,QAAS,QACb,CAAE,EAEF,OAAOS,CACX,EAEaC,EAAsB,SAA0B,CACzD,GAAM,CAAC,cAAAC,CAAa,EAAI,MAAMX,EAAS,OAA+B,CAClE,KAAM,WACN,KAAM,gBACN,QAAS,yCACT,QAASY,CACb,CAAE,EAEF,OAAOD,CACX,EG3KA,OAAS,SAAAE,MAAa,QACtB,OAAOC,MAAS,MAChB,OAAS,UAAAC,MAAc,SACvB,OAAOC,MAAU,OACjB,OAAS,iBAAAC,MAAqB,MAC9B,OAAOC,MAAQ,WAKf,IAAMC,EAAU,MAAOC,GAAgB,CACrCA,EAAO,OAAO,KAAK,QAAQ,MAAM,EACjCA,EAAO,OAAO,KAAK,QAAQ,MAAM,EACjC,GAAI,CACF,GAAM,CAAE,OAAAC,CAAO,EAAI,MAAMD,EAEzB,OAAOC,CACT,OAASC,EAAP,CACA,QAAQ,IAAIA,CAAC,CACf,CACF,EAEaC,EAA0C,IAAM,CAE3D,IAAMC,EAAY,QAAQ,IAAI,sBAE9B,OAAIA,GACEA,EAAU,WAAW,MAAM,EACtB,OAMF,KAEX,EAEaC,EAAY,MACvBC,EACAC,EACAC,EAAqB,WAClB,CACH,IAAMC,EAAUf,EAAI,cAAc,EAAE,MAAM,EAEpCM,EAASP,EACb,gBAAgBe,KAAcF,KAAkBC,IAChD,CACE,MAAO,EACT,CACF,EAEA,aAAMR,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEaU,EAA4B,MAAOC,GAAoB,CAClE,IAAMF,EAAUf,EAAI,UAAU,EAAE,MAAM,EAEhCM,EAAS,MAAML,EAAO,GAAGgB,QAAc,EAE7C,OAAAF,EAAQ,KAAK,EAENT,CACT,EAEaY,EAAgB,MAAOD,GAAoB,CACtD,IAAMF,EAAUf,EAAI,kBAAkB,EAAE,MAAM,EAExCM,EAASP,EAAM,MAAMkB,gBAAuB,CAChD,MAAO,EACT,CAAC,EAED,aAAMZ,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEaa,EAAkB,MAC7BF,EACAG,EACAC,EACAC,IACG,CACH,IAAMP,EAAUf,EAAI,gCAAgC,EAAE,MAAM,EAEtDM,EAASP,EACb,MAAMkB,2CAAiDG,kBAAwBC,cAAuBC,IACtG,CACE,MAAO,EACT,CACF,EAEA,aAAMjB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEaiB,EAAc,MAAON,GAAoB,CACpD,IAAMF,EAAUf,EAAI,yBAAyB,EAAE,MAAM,EAE/CwB,EAAqBf,EAAkB,EAE7C,QAAQ,IAAI,uCAAuC,EACnD,QAAQ,IAAIe,CAAkB,EAC9B,QAAQ,IACN,iBACA,MAAMP,QAAcO,aAClBA,IAAuB,MAAQ,qBAAuB,IAE1D,EAEA,IAAMlB,EAASP,EACb,MAAMkB,QAAcO,aAClBA,IAAuB,MAAQ,qBAAuB,KAExD,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAIamB,EAA4B,MAAOR,GAAoB,CAClE,IAAMF,EAAUf,EAAI,iBAAiB,EAAE,MAAM,EAEvCwB,EAAqBf,EAAkB,EAEvCH,EAASP,EACb,MAAMkB,QACJO,IAAuB,MACnB,GAAGA,QACHA,wBAEN,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEaoB,EAA6B,MAAOT,GAAoB,CACnE,IAAMF,EAAUf,EAAI,qBAAqB,EAAE,MAAM,EAE3CwB,EAAqBf,EAAkB,EAEvCH,EAASP,EACb,MAAMkB,QACJO,IAAuB,MACnB,GAAGA,QACHA,yBAEN,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEaqB,EAAuB,MAAOV,GAAoB,CAC7D,IAAMF,EAAUf,EAAI,eAAe,EAAE,MAAM,EAErCwB,EAAqBf,EAAkB,EAEvCH,EAASP,EACb,MAAMkB,QACJO,IAAuB,MACnB,GAAGA,QACHA,mBAEN,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEasB,EAAyB,MAAOX,GAAoB,CAC/D,IAAMF,EAAUf,EAAI,iBAAiB,EAAE,MAAM,EAEvCwB,EAAqBf,EAAkB,EAEvCH,EAASP,EACb,MAAMkB,QACJO,IAAuB,MACnB,GAAGA,QACHA,sBAEN,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEauB,EAAmB,MAAOZ,GAAoB,CACzD,IAAMF,EAAUf,EAAI,sBAAsB,EAAE,MAAM,EAE5CwB,EAAqBf,EAAkB,EAEvCH,EAASP,EACb,MAAMkB,QACJO,IAAuB,MACnB,GAAGA,QACHA,iBAEN,CACE,MAAO,EACT,CACF,EAEA,aAAMnB,EAAQC,CAAM,EAEpBS,EAAQ,KAAK,EAENT,CACT,EAEMwB,EAAa3B,EAAc,YAAY,GAAG,EAC1C4B,EAAW7B,EAAK,QAAQ4B,CAAU,EAC3BE,EAAW9B,EAAK,KAAK6B,EAAU,KAAK,EAEpCE,EAAa,IAAM,CAC9B,IAAMC,EAAkBhC,EAAK,KAAK8B,EAAU,cAAc,EAI1D,OAF2B5B,EAAG,aAAa8B,CAAe,EAEhC,SAAW,OACvC,EC5PO,IAAMC,EAAU,MAAOC,GAA2B,CACrD,GAAM,CACF,OAAAC,EACA,YAAAC,EACA,cAAAC,EACA,QAAAC,EAAU,GACV,WAAAC,EAAa,GACb,QAAAC,EACA,WAAAC,EAAa,GACb,WAAAC,EAAa,QACjB,EAAIR,EAeJ,GAbA,MAAMS,EAAUP,EAAaI,EAASE,CAAU,EAC5CD,IACA,MAAMG,EAA0BJ,CAAO,EACvC,MAAMK,EAAcL,CAAO,GAE3BC,GACA,MAAMG,EAA0BJ,CAAO,EAGxCN,EAAW,SACV,MAAMY,EAAYN,CAAO,EAGzBJ,IAAgB,sEAAwEF,EAAW,QACnG,GAAI,CACA,QAAQ,IAAI,wDAAwD,EACpE,MAAMa,EAAgBP,EAASF,EAASC,EAAYJ,CAAM,EAC1D,MAAMa,EAAiBR,CAAO,EAE3BH,EAAc,SAAS,YAAY,GAClC,MAAMY,EAA0BT,CAAO,EAGxCH,EAAc,SAAS,aAAa,GACnC,MAAMa,EAA2BV,CAAO,EAGzCH,EAAc,SAAS,OAAO,GAC7B,MAAMc,EAAqBX,CAAO,EAKnCH,EAAc,SAAS,SAAS,GAC/B,MAAMe,EAAuBZ,CAAO,CAE5C,OAASa,EAAP,CACM,QAAQ,IAAI,mBAAmB,EAC/B,QAAQ,IAAIA,CAAC,CACrB,CAER,EL3BA,IAAMC,GAAO,SAAY,CACrB,IAAIC,EAAa,CAAC,EAKZC,EAAU,IAAIC,EAAQ,EAAE,KAAK,qBAAqB,EAkExD,GAhEAD,EACK,YAAY,sDAAsD,EAClE,SACG,QACA,6EACJ,EACC,OACG,sBACA,2BACA,EACJ,EACC,OACG,oBACA,gCACA,IACJ,EACC,OACG,eACA,qCACA,EACJ,EACC,OACG,2BACA,8DACA,SACJ,EACC,OACG,sBACA,yBACA,EACJ,EACC,OACG,uBACA,4BACA,EACJ,EACC,OACG,qCACA,wGACA,CAAC,CACL,EACC,OACG,UACA,0EACA,EACJ,EACC,OACG,YACA,sEACA,EACJ,EACC,OACG,WACA,kBACA,EACJ,EACC,QAAQE,EAAW,EAAG,gBAAiB,4BAA4B,EACnE,YACG,WACA,MACJ,EACC,MAAM,QAAQ,IAAI,EAGpB,QAAQ,KAAK,OAAS,EAErBH,EAAa,CACT,GAFYC,EAAQ,KAAiB,CAGzC,EACGD,EAAW,OACV,QAAQ,IAAI,gCAAiCA,CAAU,EAEvD,MAAMI,EAAQJ,CAAU,MAEzB,CACHA,EAAW,QAAa,MAAMK,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEfL,EAAW,OAAY,MAAMM,EAAa,EAC1C,QAAQ,IAAI,GAAG,EAEfN,EAAW,WAAgB,MAAMO,EAAmB,EACpD,QAAQ,IAAI,GAAG,EAEfP,EAAW,YAAiB,MAAMQ,EAAW,EAC7C,QAAQ,IAAI,GAAG,EAEfR,EAAW,WAAgB,MAAMS,EAAiB,EAElDT,EAAW,QAAa,MAAMU,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEXV,EAAW,cAAmB,sEAAwEA,EAAW,UACjH,QAAQ,IAAI,wDAAwD,EACpEA,EAAW,cAAmB,MAAMW,EAAoB,EACxD,QAAQ,IAAI,GAAG,EAEfX,EAAW,QAAa,MAAMY,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEfZ,EAAW,WAAgB,MAAMa,EAAiB,EAClD,QAAQ,IAAI,GAAG,GAKnB,QAAQ,IAAI,uCAAwC,CAAC,WAAAb,CAAU,CAAC,EAEhE,IAAMc,EAAa,MAAMC,EAAiB,EAC1C,QAAQ,IAAI,GAAG,EAEVD,IACD,QAAQ,IAAIE,EAAM,IAAI,sBAAsB,CAAC,EAC7C,QAAQ,KAAK,CAAC,GAGlB,MAAMZ,EAAQJ,CAAU,EAEhC,EAEAD,GAAK,EAAE,MAAOkB,GAAQ,CAClB,QAAQ,IAAI,0BAA0B,EAClCA,aAAe,OAGf,QAAQ,IACJ,+EACJ,EACA,QAAQ,IAAIA,CAAG,EAEnB,QAAQ,KAAK,CAAC,CAClB,CAAC","names":["chalk","Command","inquirer","validationRegExp","validateAppName","input","paths","indexOfDelimiter","p","appName","validateSpaceId","valdiateOAuthToken","templates","availableTemplates","availableRegions","availableSbMigFeatures","promptAppName","appName","inquirer","validateAppName","input","promptRegion","region","availableRegions","promptSpaceId","spaceId","validateSpaceId","promptOAuthToken","OAuthToken","inquirer","valdiateOAuthToken","input","promptIfInWorkshop","inWorkshop","inquirer","promptAreYouSure","areYouSure","promptInstall","install","promptList","templateUrl","availableTemplates","customBranchName","branchName","promptSbMigFeatures","sbMigFeatures","availableSbMigFeatures","execa","ora","rimraf","path","fileURLToPath","fs","pipeOut","result","stdout","e","getUserPkgManager","userAgent","cloneRepo","boilerplateUrl","nameOfFolder","branchName","spinner","removeInitialGitDirectory","appName","initializeGit","invokeSbMigInit","spaceId","OAuthToken","region","installDeps","userPackageManager","invokeSbMigSyncComponents","invokeSbMigSyncDatasources","invokeSbMigSyncRoles","invokeSbMigSyncStories","createLocalHTTPS","__filename","distPath","PKG_ROOT","getVersion","packageJsonPath","execute","cliOptions","region","templateUrl","sbMigFeatures","spaceId","OAuthToken","appName","inWorkshop","branchName","cloneRepo","removeInitialGitDirectory","initializeGit","installDeps","invokeSbMigInit","createLocalHTTPS","invokeSbMigSyncComponents","invokeSbMigSyncDatasources","invokeSbMigSyncRoles","invokeSbMigSyncStories","e","main","cliOptions","program","Command","getVersion","execute","promptAppName","promptRegion","promptIfInWorkshop","promptList","customBranchName","promptInstall","promptSbMigFeatures","promptSpaceId","promptOAuthToken","areYouSure","promptAreYouSure","chalk","err"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/prompts.ts","../src/validators.ts","../src/constants.ts","../src/utils.ts","../src/execute.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport chalk from \"chalk\";\nimport { Command } from \"commander\";\nimport {\n promptAppName,\n promptList,\n promptOAuthToken,\n promptSpaceId,\n promptIfInWorkshop,\n promptNoGit,\n promptSbMigFeatures,\n promptInstall,\n promptAreYouSure,\n promptRegion,\n customBranchName\n} from \"./prompts.js\";\nimport {execute} from \"./execute.js\";\nimport {STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL, TemplateUrls} from \"./constants.js\";\nimport {getVersion} from \"./utils.js\";\n\n\nexport interface CLIOptions {\n appName: string;\n region: string;\n inWorkshop: boolean;\n templateUrl: TemplateUrls;\n contentSeedSpaceId?: string;\n branchName?: string;\n spaceId?: string;\n OAuthToken?: string;\n sbMigFeatures: string[];\n install?: boolean;\n dryRun?: boolean;\n noGit?: boolean;\n}\n\nconst resolveTemplateUrl = (template: string): TemplateUrls => {\n if (template === STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL || template === 'storyblok') {\n return STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL;\n }\n\n throw new Error(`Unsupported template \"${template}\". Only storyblok is currently supported.`);\n}\n\nconst main = async () => {\n let cliOptions = {} as CLIOptions;\n\n\n\n\n const program = new Command().name(\"create-backpack-app\");\n\n program\n .description(\"A CLI for creating projects with @ef-global/backpack\")\n .argument(\n \"[dir]\",\n \"The name of the application, as well as the name of the directory to create\",\n )\n .option(\n \"--appName <appName>\",\n \"Name of your application\",\n )\n .option(\n \"--region <region>\",\n \"Region you are in: eu, us, cn\",\n 'eu',\n )\n .option(\n \"--inWorkshop\",\n \"Pass it if you are in the workshop\",\n )\n .option(\n \"--templateUrl <template>\",\n \"Template you would like to use (accepted: storyblok or the full Storyblok template git URL)\",\n STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL,\n )\n .option(\n \"--spaceId <spaceId>\",\n \"Space ID for Storyblok\",\n )\n .option(\n \"--OAuthToken <token>\",\n \"OAuth Token for Storyblok\",\n )\n .option(\n \"--sbMigFeatures <sbMigFeatures...>\",\n \"What you would like to sync with sb-mig automatically (components, roles, datasources, content)\",\n [],\n )\n .option(\n \"--noGit\",\n \"Explicitly tell the CLI to not initialize a new git repo in the project\",\n )\n .option(\n \"--install\",\n \"Run auto configuration, including package install, project initialization, and syncing\",\n )\n .option(\n \"--dryRun\",\n \"Dry Run command\",\n )\n .version(getVersion(), \"-v, --version\", \"Display the version number\")\n .addHelpText(\n \"afterAll\",\n `Done`,\n )\n .parse(process.argv);\n\n\n if(process.argv.length > 2) {\n const options = program.opts<CLIOptions>();\n const appName = options.appName || program.args[0];\n\n if (!appName) {\n throw new Error(\"App name is required. Pass it as [dir] or --appName.\");\n }\n\n cliOptions = {\n ...options,\n appName,\n templateUrl: resolveTemplateUrl(options.templateUrl),\n }\n if(cliOptions['dryRun']) {\n console.log(\"CLI Options passed to execute\", cliOptions)\n } else {\n await execute(cliOptions)\n }\n } else {\n cliOptions['appName'] = await promptAppName();\n console.log(\" \")\n\n cliOptions['region'] = await promptRegion();\n console.log(\" \")\n\n cliOptions['inWorkshop'] = await promptIfInWorkshop();\n console.log(\" \")\n\n if (!cliOptions['inWorkshop']) {\n cliOptions['noGit'] = await promptNoGit();\n console.log(\" \")\n }\n\n cliOptions['templateUrl'] = await promptList();\n console.log(\" \")\n\n cliOptions['branchName'] = await customBranchName();\n\n cliOptions['install'] = await promptInstall();\n console.log(\" \")\n\n if (cliOptions['templateUrl'] === STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL && cliOptions['install']) {\n console.log(\"you've selected storyblok-nextjs-backpack-boilerplate\")\n cliOptions['sbMigFeatures'] = await promptSbMigFeatures();\n console.log(\" \")\n\n cliOptions['spaceId'] = await promptSpaceId();\n console.log(\" \")\n\n cliOptions['OAuthToken'] = await promptOAuthToken();\n console.log(\" \");\n\n\n }\n\n console.log(\"cliOptions to run cli command with: \", {cliOptions})\n\n const areYouSure = await promptAreYouSure();\n console.log(\" \")\n\n if (!areYouSure) {\n console.log(chalk.red(\"Aborting creation...\"));\n process.exit(1);\n }\n\n await execute(cliOptions)\n }\n}\n\nmain().catch((err) => {\n console.log(\"Aborting installation...\");\n if (err instanceof Error) {\n console.log(err);\n } else {\n console.log(\n \"An unknown error has occurred. Please open an issue on github with the below:\",\n );\n console.log(err);\n }\n process.exit(1);\n});\n","import inquirer from \"inquirer\";\nimport {validateAppName, validateSpaceId, valdiateOAuthToken} from \"./validators.js\";\nimport {availableRegions, availableSbMigFeatures, availableTemplates, TemplateUrls} from \"./constants.js\";\n\n\ninterface CliResults {\n appName: string;\n spaceId: string;\n OAuthToken: string;\n}\n\n\nexport const promptAppName = async (): Promise<string> => {\n const { appName } = await inquirer.prompt<Pick<CliResults, \"appName\">>({\n name: \"appName\",\n type: \"input\",\n message: \"What will your project be called?\",\n default: 'new-backpack-app',\n validate: validateAppName,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return appName;\n};\n\ntype Region = 'eu' | 'us' | 'cn';\n\nexport const promptRegion = async (): Promise<Region> => {\n const {region} = await inquirer.prompt<{ region: Region }>({\n type: 'list',\n name: 'region',\n message: 'Select your region',\n choices: availableRegions,\n },)\n\n return region;\n}\n\nexport const promptSpaceId = async (): Promise<string> => {\n const { spaceId } = await inquirer.prompt<Pick<CliResults, \"spaceId\">>({\n name: \"spaceId\",\n type: \"input\",\n message: \"Insert your space id\",\n default: '00000',\n validate: validateSpaceId,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return spaceId;\n};\n\nexport const promptOAuthToken = async (): Promise<string> => {\n const { OAuthToken } = await inquirer.prompt<Pick<CliResults, \"OAuthToken\">>({\n name: \"OAuthToken\",\n type: \"input\",\n message: \"Insert your OAuthToken\",\n default: '00000',\n validate: valdiateOAuthToken,\n transformer: (input: string) => {\n return input.trim();\n },\n });\n\n return OAuthToken;\n};\n\nexport const promptContinue = async (): Promise<boolean> => {\n const {doWeContinue} = await inquirer.prompt<{ doWeContinue: boolean }>({\n type: 'confirm',\n name: 'doWeContinue',\n message: 'Do we continue?',\n default: false,\n })\n\n return doWeContinue;\n}\n\nexport const promptInitGit = async (): Promise<boolean> => {\n const {initGit} = await inquirer.prompt<{ initGit: boolean }>({\n type: 'confirm',\n name: 'initGit',\n message: 'Do you want to init a new git repository?',\n default: false,\n })\n\n return initGit;\n}\n\nexport const promptIfInWorkshop = async (): Promise<boolean> => {\n const {inWorkshop} = await inquirer.prompt<{ inWorkshop: boolean }>({\n type: 'confirm',\n name: 'inWorkshop',\n message: 'Are you in a workshop?',\n default: false,\n })\n\n return inWorkshop;\n}\n\nexport const promptNoGit = async (): Promise<boolean> => {\n const {noGit} = await inquirer.prompt<{ noGit: boolean }>({\n type: 'confirm',\n name: 'noGit',\n message: 'Do you want to skip initializing a new git repository?',\n default: false,\n })\n\n return noGit;\n}\n\nexport const promptAreYouSure = async (): Promise<boolean> => {\n const {areYouSure} = await inquirer.prompt<{ areYouSure: boolean }>({\n type: 'confirm',\n name: 'areYouSure',\n message: 'Are all these answers correct?',\n default: true,\n })\n\n return areYouSure;\n}\n\nexport const promptInstall = async (): Promise<boolean> => {\n const {install} = await inquirer.prompt<{ install: boolean }>({\n type: 'confirm',\n name: 'install',\n message: 'Do you want to run auto configuration (install packages, sync components, initialize project)?',\n default: true,\n })\n\n return install;\n}\n\nexport const promptList = async (): Promise<TemplateUrls> => {\n const {templateUrl} = await inquirer.prompt<{ templateUrl: TemplateUrls }>({\n type: 'list',\n name: 'templateUrl',\n message: 'Select template',\n choices: availableTemplates,\n },)\n\n return templateUrl;\n}\n\nexport const customBranchName = async (): Promise<string> => {\n const {branchName} = await inquirer.prompt<{ branchName: string }>({\n type: 'input',\n name: 'branchName',\n message: 'Custom branchName',\n default: 'master',\n },)\n\n return branchName;\n}\n\nexport const promptSbMigFeatures = async (): Promise<any> => {\n const {sbMigFeatures} = await inquirer.prompt<{ sbMigFeatures: any }>({\n type: \"checkbox\",\n name: 'sbMigFeatures',\n message: 'What would you like to sync initially?',\n choices: availableSbMigFeatures,\n },)\n\n return sbMigFeatures;\n}\n","const validationRegExp =\n /^(?:@[a-z0-9-*~][a-z0-9-*._~]*\\/)?[a-z0-9-~][a-z0-9-._~]*$/;\n\n//Validate a string against allowed package.json names\nexport const validateAppName = (input: string) => {\n const paths = input.split(\"/\");\n\n // If the first part is a @, it's a scoped package\n const indexOfDelimiter = paths.findIndex((p) => p.startsWith(\"@\"));\n\n let appName = paths[paths.length - 1];\n if (paths.findIndex((p) => p.startsWith(\"@\")) !== -1) {\n appName = paths.slice(indexOfDelimiter).join(\"/\");\n }\n\n if (input === \".\" || validationRegExp.test(appName ?? \"\")) {\n return true;\n } else {\n return \"App name must consist of only lowercase alphanumeric characters, '-', and '_'\";\n }\n};\n\nexport const validateSpaceId = (input: string) => {\n // TODO: make space id validation\n return true\n};\n\nexport const valdiateOAuthToken = (input: string) => {\n // TODO: make OAuthToken validation\n return true\n};\n\n\n","export type TemplateNames = 'Storyblok NextJS Backpack Boilerplate';\nexport type TemplateUrls = 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git';\n\nexport const STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL: TemplateUrls =\n 'git@github.com:ef-global/storyblok-nextjs-backpack-boilerplate.git';\n\nexport const templates: Record<TemplateNames, TemplateUrls> = {\n 'Storyblok NextJS Backpack Boilerplate': STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL,\n} as const\n\n\ninterface TemplateObj {\n name: TemplateNames,\n value: TemplateUrls\n}\n\ntype Region = 'eu' | 'us' | 'cn'\n\ninterface RegionObj {\n name: Region,\n value: Region\n}\n\n\nexport const availableTemplates: TemplateObj[] = [\n {\n name: 'Storyblok NextJS Backpack Boilerplate',\n value: templates['Storyblok NextJS Backpack Boilerplate']\n }\n]\n\nexport const availableRegions: RegionObj[] = [\n {\n name: 'eu',\n value: 'eu'\n },\n {\n name: 'us',\n value: 'us'\n },\n {\n name: 'cn',\n value: 'cn'\n }\n]\n\n\nexport type SbMigFeature = 'components' | 'datasources' | 'roles' | 'content';\n\ninterface SbMigFeatures {\n name: SbMigFeature,\n checked: boolean\n}\n\nexport const availableSbMigFeatures: SbMigFeatures[] = [\n {\n name: 'components',\n checked: true,\n },\n {\n name: 'datasources',\n checked: true,\n },\n {\n name: 'roles',\n checked: false,\n },\n {\n name: 'content',\n checked: true,\n },\n]\n","import type { PackageJson } from \"type-fest\";\nimport { execa } from \"execa\";\nimport ora from \"ora\";\nimport { rimraf } from \"rimraf\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport fs from \"fs-extra\";\nimport { TemplateUrls } from \"./constants.js\";\n\nconst pipeOut = async (result: any) => {\n result.stdout.pipe(process.stdout);\n result.stderr.pipe(process.stderr);\n try {\n const { stdout } = await result;\n\n return stdout;\n } catch (e) {\n console.log(e);\n }\n};\n\nexport const cloneRepo = async (\n boilerplateUrl: TemplateUrls,\n nameOfFolder: string,\n branchName: string = \"master\"\n) => {\n const spinner = ora(\"Cloning repo\").start();\n\n const result = execa(\"git\", [\"clone\", \"-b\", branchName, boilerplateUrl, nameOfFolder]);\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const removeInitialGitDirectory = async (appName: string) => {\n const spinner = ora(\"Cleaning\").start();\n\n const result = await rimraf(`${appName}/.git`);\n\n spinner.stop();\n\n return result;\n};\n\nexport const initializeGit = async (appName: string) => {\n const spinner = ora(\"Initializing GIT\").start();\n\n const result = execa(\"git\", [\"init\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigInit = async (\n appName: string,\n spaceId: string,\n OAuthToken: string,\n region: string\n) => {\n const spinner = ora(\"Initializing storyblok project\").start();\n\n const result = execa(\"npm\", [\n \"exec\",\n \"--\",\n \"sb-mig\",\n \"init\",\n \"project\",\n `--spaceId=${spaceId}`,\n `--oauthToken=${OAuthToken}`,\n `--region=${region}`,\n ], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const installDeps = async (appName: string) => {\n const spinner = ora(\"Installing dependencies\").start();\n\n const result = execa(\"npm\", [\"install\", \"--legacy-peer-deps\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncComponents = async (appName: string) => {\n const spinner = ora(\"Syncing schemas\").start();\n\n const result = execa(\"npm\", [\"run\", \"sync:components:all\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncDatasources = async (appName: string) => {\n const spinner = ora(\"Syncing datasources\").start();\n\n const result = execa(\"npm\", [\"run\", \"sync:datasources:all\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncRoles = async (appName: string) => {\n const spinner = ora(\"Syncing roles\").start();\n\n const result = execa(\"npm\", [\"run\", \"sync:roles:all\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const invokeSbMigSyncStories = async (appName: string) => {\n const spinner = ora(\"Syncing stories\").start();\n\n const result = execa(\"npm\", [\"run\", \"sync:content:seed\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nexport const createLocalHTTPS = async (appName: string) => {\n const spinner = ora(\"Creating Local HTTPs\").start();\n\n const result = execa(\"npm\", [\"run\", \"create:https\"], {\n cwd: appName,\n });\n\n await pipeOut(result);\n\n spinner.stop();\n\n return result;\n};\n\nconst __filename = fileURLToPath(import.meta.url);\nconst distPath = path.dirname(__filename);\nexport const PKG_ROOT = path.join(distPath, \"../\");\n\nexport const getVersion = () => {\n const packageJsonPath = path.join(PKG_ROOT, \"package.json\");\n\n const packageJsonContent = fs.readJSONSync(packageJsonPath) as PackageJson;\n\n return packageJsonContent.version ?? \"1.0.0\";\n};\n","import type {CLIOptions} from \"./index.js\";\nimport {\n cloneRepo, createLocalHTTPS,\n initializeGit,\n installDeps,\n invokeSbMigInit,\n invokeSbMigSyncComponents, invokeSbMigSyncDatasources, invokeSbMigSyncRoles, invokeSbMigSyncStories,\n removeInitialGitDirectory\n} from \"./utils.js\";\nimport {STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL} from \"./constants.js\";\n\nexport const execute = async (cliOptions: CLIOptions) => {\n const {\n region,\n templateUrl,\n sbMigFeatures,\n spaceId = '',\n OAuthToken = '',\n appName,\n inWorkshop = false,\n noGit = false,\n branchName = 'master'\n } = cliOptions\n\n await cloneRepo(templateUrl, appName, branchName)\n await removeInitialGitDirectory(appName)\n\n if(!inWorkshop && !noGit) {\n await initializeGit(appName)\n }\n if(cliOptions['install']) {\n await installDeps(appName)\n }\n\n if (templateUrl === STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL && cliOptions['install']) {\n try {\n console.log(\"you've selected storyblok-nextjs-backpack-boilerplate\")\n await invokeSbMigInit(appName, spaceId, OAuthToken, region)\n await createLocalHTTPS(appName)\n\n if(sbMigFeatures.includes('components')) {\n await invokeSbMigSyncComponents(appName)\n }\n\n if(sbMigFeatures.includes('datasources')) {\n await invokeSbMigSyncDatasources(appName)\n }\n\n if(sbMigFeatures.includes('roles')) {\n await invokeSbMigSyncRoles(appName)\n }\n\n\n\n if(sbMigFeatures.includes('content')) {\n await invokeSbMigSyncStories(appName)\n }\n } catch (e) {\n console.log(\"error happened...\")\n console.log(e)\n }\n }\n}\n"],"mappings":";AAEA,OAAOA,OAAW,QAClB,OAAS,WAAAC,OAAe,YCHxB,OAAOC,MAAc,WCArB,IAAMC,EACF,6DAGSC,EAAmBC,GAAkB,CAC9C,IAAMC,EAAQD,EAAM,MAAM,GAAG,EAGvBE,EAAmBD,EAAM,UAAWE,GAAMA,EAAE,WAAW,GAAG,CAAC,EAE7DC,EAAUH,EAAMA,EAAM,OAAS,CAAC,EAKpC,OAJIA,EAAM,UAAWE,GAAMA,EAAE,WAAW,GAAG,CAAC,IAAM,KAC9CC,EAAUH,EAAM,MAAMC,CAAgB,EAAE,KAAK,GAAG,GAGhDF,IAAU,KAAOF,EAAiB,KAAKM,GAAW,EAAE,EAC7C,GAEA,+EAEf,EAEaC,EAAmBL,GAErB,GAGEM,EAAsBN,GAExB,GC1BJ,IAAMO,EACT,qEAESC,EAAiD,CAC1D,wCAAyCD,CAC7C,EAgBaE,EAAoC,CAC7C,CACI,KAAM,wCACN,MAAOD,EAAU,uCAAuC,CAC5D,CACJ,EAEaE,EAAgC,CACzC,CACI,KAAM,KACN,MAAO,IACX,EACA,CACI,KAAM,KACN,MAAO,IACX,EACA,CACI,KAAM,KACN,MAAO,IACX,CACJ,EAUaC,EAA0C,CACnD,CACI,KAAM,aACN,QAAS,EACb,EACA,CACI,KAAM,cACN,QAAS,EACb,EACA,CACI,KAAM,QACN,QAAS,EACb,EACA,CACI,KAAM,UACN,QAAS,EACb,CACJ,EF3DO,IAAMC,EAAgB,SAA6B,CACtD,GAAM,CAAE,QAAAC,CAAQ,EAAI,MAAMC,EAAS,OAAoC,CACnE,KAAM,UACN,KAAM,QACN,QAAS,oCACT,QAAS,mBACT,SAAUC,EACV,YAAcC,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOH,CACX,EAIaI,EAAe,SAA6B,CACrD,GAAM,CAAC,OAAAC,CAAM,EAAI,MAAMJ,EAAS,OAA2B,CACvD,KAAM,OACN,KAAM,SACN,QAAS,qBACT,QAASK,CACb,CAAE,EAEF,OAAOD,CACX,EAEaE,EAAgB,SAA6B,CACtD,GAAM,CAAE,QAAAC,CAAQ,EAAI,MAAMP,EAAS,OAAoC,CACnE,KAAM,UACN,KAAM,QACN,QAAS,uBACT,QAAS,QACT,SAAUQ,EACV,YAAcN,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOK,CACX,EAEaE,EAAmB,SAA6B,CACzD,GAAM,CAAE,WAAAC,CAAW,EAAI,MAAMV,EAAS,OAAuC,CACzE,KAAM,aACN,KAAM,QACN,QAAS,yBACT,QAAS,QACT,SAAUW,EACV,YAAcT,GACHA,EAAM,KAAK,CAE1B,CAAC,EAED,OAAOQ,CACX,EAwBO,IAAME,EAAqB,SAA8B,CAC5D,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMC,EAAS,OAAgC,CAChE,KAAM,UACN,KAAM,aACN,QAAS,yBACT,QAAS,EACb,CAAC,EAED,OAAOD,CACX,EAEaE,EAAc,SAA8B,CACrD,GAAM,CAAC,MAAAC,CAAK,EAAI,MAAMF,EAAS,OAA2B,CACtD,KAAM,UACN,KAAM,QACN,QAAS,yDACT,QAAS,EACb,CAAC,EAED,OAAOE,CACX,EAEaC,EAAmB,SAA8B,CAC1D,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMJ,EAAS,OAAgC,CAChE,KAAM,UACN,KAAM,aACN,QAAS,iCACT,QAAS,EACb,CAAC,EAED,OAAOI,CACX,EAEaC,EAAgB,SAA8B,CACvD,GAAM,CAAC,QAAAC,CAAO,EAAI,MAAMN,EAAS,OAA6B,CAC1D,KAAM,UACN,KAAM,UACN,QAAS,iGACT,QAAS,EACb,CAAC,EAED,OAAOM,CACX,EAEaC,EAAa,SAAmC,CACzD,GAAM,CAAC,YAAAC,CAAW,EAAI,MAAMR,EAAS,OAAsC,CACvE,KAAM,OACN,KAAM,cACN,QAAS,kBACT,QAASS,CACb,CAAE,EAEF,OAAOD,CACX,EAEaE,EAAmB,SAA6B,CACzD,GAAM,CAAC,WAAAC,CAAU,EAAI,MAAMX,EAAS,OAA+B,CAC/D,KAAM,QACN,KAAM,aACN,QAAS,oBACT,QAAS,QACb,CAAE,EAEF,OAAOW,CACX,EAEaC,EAAsB,SAA0B,CACzD,GAAM,CAAC,cAAAC,CAAa,EAAI,MAAMb,EAAS,OAA+B,CAClE,KAAM,WACN,KAAM,gBACN,QAAS,yCACT,QAASc,CACb,CAAE,EAEF,OAAOD,CACX,EGtKA,OAAS,SAAAE,MAAa,QACtB,OAAOC,MAAS,MAChB,OAAS,UAAAC,MAAc,SACvB,OAAOC,MAAU,OACjB,OAAS,iBAAAC,MAAqB,MAC9B,OAAOC,MAAQ,WAGf,IAAMC,EAAU,MAAOC,GAAgB,CACrCA,EAAO,OAAO,KAAK,QAAQ,MAAM,EACjCA,EAAO,OAAO,KAAK,QAAQ,MAAM,EACjC,GAAI,CACF,GAAM,CAAE,OAAAC,CAAO,EAAI,MAAMD,EAEzB,OAAOC,CACT,OAASC,EAAP,CACA,QAAQ,IAAIA,CAAC,CACf,CACF,EAEaC,EAAY,MACvBC,EACAC,EACAC,EAAqB,WAClB,CACH,IAAMC,EAAUb,EAAI,cAAc,EAAE,MAAM,EAEpCM,EAASP,EAAM,MAAO,CAAC,QAAS,KAAMa,EAAYF,EAAgBC,CAAY,CAAC,EAErF,aAAMN,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEaQ,EAA4B,MAAOC,GAAoB,CAClE,IAAMF,EAAUb,EAAI,UAAU,EAAE,MAAM,EAEhCM,EAAS,MAAML,EAAO,GAAGc,QAAc,EAE7C,OAAAF,EAAQ,KAAK,EAENP,CACT,EAEaU,EAAgB,MAAOD,GAAoB,CACtD,IAAMF,EAAUb,EAAI,kBAAkB,EAAE,MAAM,EAExCM,EAASP,EAAM,MAAO,CAAC,MAAM,EAAG,CACpC,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEaW,EAAkB,MAC7BF,EACAG,EACAC,EACAC,IACG,CACH,IAAMP,EAAUb,EAAI,gCAAgC,EAAE,MAAM,EAEtDM,EAASP,EAAM,MAAO,CAC1B,OACA,KACA,SACA,OACA,UACA,aAAamB,IACb,gBAAgBC,IAChB,YAAYC,GACd,EAAG,CACD,IAAKL,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEae,EAAc,MAAON,GAAoB,CACpD,IAAMF,EAAUb,EAAI,yBAAyB,EAAE,MAAM,EAE/CM,EAASP,EAAM,MAAO,CAAC,UAAW,oBAAoB,EAAG,CAC7D,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEagB,EAA4B,MAAOP,GAAoB,CAClE,IAAMF,EAAUb,EAAI,iBAAiB,EAAE,MAAM,EAEvCM,EAASP,EAAM,MAAO,CAAC,MAAO,qBAAqB,EAAG,CAC1D,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEaiB,EAA6B,MAAOR,GAAoB,CACnE,IAAMF,EAAUb,EAAI,qBAAqB,EAAE,MAAM,EAE3CM,EAASP,EAAM,MAAO,CAAC,MAAO,sBAAsB,EAAG,CAC3D,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEakB,EAAuB,MAAOT,GAAoB,CAC7D,IAAMF,EAAUb,EAAI,eAAe,EAAE,MAAM,EAErCM,EAASP,EAAM,MAAO,CAAC,MAAO,gBAAgB,EAAG,CACrD,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEamB,EAAyB,MAAOV,GAAoB,CAC/D,IAAMF,EAAUb,EAAI,iBAAiB,EAAE,MAAM,EAEvCM,EAASP,EAAM,MAAO,CAAC,MAAO,mBAAmB,EAAG,CACxD,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEaoB,EAAmB,MAAOX,GAAoB,CACzD,IAAMF,EAAUb,EAAI,sBAAsB,EAAE,MAAM,EAE5CM,EAASP,EAAM,MAAO,CAAC,MAAO,cAAc,EAAG,CACnD,IAAKgB,CACP,CAAC,EAED,aAAMV,EAAQC,CAAM,EAEpBO,EAAQ,KAAK,EAENP,CACT,EAEMqB,EAAaxB,EAAc,YAAY,GAAG,EAC1CyB,EAAW1B,EAAK,QAAQyB,CAAU,EAC3BE,EAAW3B,EAAK,KAAK0B,EAAU,KAAK,EAEpCE,EAAa,IAAM,CAC9B,IAAMC,EAAkB7B,EAAK,KAAK2B,EAAU,cAAc,EAI1D,OAF2BzB,EAAG,aAAa2B,CAAe,EAEhC,SAAW,OACvC,EC5KO,IAAMC,EAAU,MAAOC,GAA2B,CACrD,GAAM,CACF,OAAAC,EACA,YAAAC,EACA,cAAAC,EACA,QAAAC,EAAU,GACV,WAAAC,EAAa,GACb,QAAAC,EACA,WAAAC,EAAa,GACb,MAAAC,EAAQ,GACR,WAAAC,EAAa,QACjB,EAAIT,EAYJ,GAVA,MAAMU,EAAUR,EAAaI,EAASG,CAAU,EAChD,MAAME,EAA0BL,CAAO,EAEpC,CAACC,GAAc,CAACC,GACf,MAAMI,EAAcN,CAAO,EAE5BN,EAAW,SACV,MAAMa,EAAYP,CAAO,EAGzBJ,IAAgBY,GAA0Cd,EAAW,QACrE,GAAI,CACA,QAAQ,IAAI,uDAAuD,EACnE,MAAMe,EAAgBT,EAASF,EAASC,EAAYJ,CAAM,EAC1D,MAAMe,EAAiBV,CAAO,EAE3BH,EAAc,SAAS,YAAY,GAClC,MAAMc,EAA0BX,CAAO,EAGxCH,EAAc,SAAS,aAAa,GACnC,MAAMe,EAA2BZ,CAAO,EAGzCH,EAAc,SAAS,OAAO,GAC7B,MAAMgB,EAAqBb,CAAO,EAKnCH,EAAc,SAAS,SAAS,GAC/B,MAAMiB,EAAuBd,CAAO,CAE5C,OAASe,EAAP,CACM,QAAQ,IAAI,mBAAmB,EAC/B,QAAQ,IAAIA,CAAC,CACrB,CAER,ELzBA,IAAMC,GAAsBC,GAAmC,CAC3D,GAAIA,IAAaC,GAA0CD,IAAa,YACpE,OAAOC,EAGX,MAAM,IAAI,MAAM,yBAAyBD,4CAAmD,CAChG,EAEME,GAAO,SAAY,CACrB,IAAIC,EAAa,CAAC,EAKZC,EAAU,IAAIC,GAAQ,EAAE,KAAK,qBAAqB,EA2DxD,GAzDAD,EACK,YAAY,sDAAsD,EAClE,SACG,QACA,6EACJ,EACC,OACG,sBACA,0BACJ,EACC,OACG,oBACA,gCACA,IACJ,EACC,OACG,eACA,oCACJ,EACC,OACG,2BACA,8FACAH,CACJ,EACC,OACG,sBACA,wBACJ,EACC,OACG,uBACA,2BACJ,EACC,OACG,qCACA,kGACA,CAAC,CACL,EACC,OACG,UACA,yEACJ,EACC,OACG,YACA,wFACJ,EACC,OACG,WACA,iBACJ,EACC,QAAQK,EAAW,EAAG,gBAAiB,4BAA4B,EACnE,YACG,WACA,MACJ,EACC,MAAM,QAAQ,IAAI,EAGpB,QAAQ,KAAK,OAAS,EAAG,CACxB,IAAMC,EAAUH,EAAQ,KAAiB,EACnCI,EAAUD,EAAQ,SAAWH,EAAQ,KAAK,CAAC,EAEjD,GAAI,CAACI,EACD,MAAM,IAAI,MAAM,sDAAsD,EAG1EL,EAAa,CACT,GAAGI,EACH,QAAAC,EACA,YAAaT,GAAmBQ,EAAQ,WAAW,CACvD,EACGJ,EAAW,OACV,QAAQ,IAAI,gCAAiCA,CAAU,EAEvD,MAAMM,EAAQN,CAAU,MAEzB,CACHA,EAAW,QAAa,MAAMO,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEfP,EAAW,OAAY,MAAMQ,EAAa,EAC1C,QAAQ,IAAI,GAAG,EAEfR,EAAW,WAAgB,MAAMS,EAAmB,EACpD,QAAQ,IAAI,GAAG,EAEVT,EAAW,aACZA,EAAW,MAAW,MAAMU,EAAY,EACxC,QAAQ,IAAI,GAAG,GAGnBV,EAAW,YAAiB,MAAMW,EAAW,EAC7C,QAAQ,IAAI,GAAG,EAEfX,EAAW,WAAgB,MAAMY,EAAiB,EAElDZ,EAAW,QAAa,MAAMa,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEXb,EAAW,cAAmBF,GAA0CE,EAAW,UACnF,QAAQ,IAAI,uDAAuD,EACnEA,EAAW,cAAmB,MAAMc,EAAoB,EACxD,QAAQ,IAAI,GAAG,EAEfd,EAAW,QAAa,MAAMe,EAAc,EAC5C,QAAQ,IAAI,GAAG,EAEff,EAAW,WAAgB,MAAMgB,EAAiB,EAClD,QAAQ,IAAI,GAAG,GAKnB,QAAQ,IAAI,uCAAwC,CAAC,WAAAhB,CAAU,CAAC,EAEhE,IAAMiB,EAAa,MAAMC,EAAiB,EAC1C,QAAQ,IAAI,GAAG,EAEVD,IACD,QAAQ,IAAIE,GAAM,IAAI,sBAAsB,CAAC,EAC7C,QAAQ,KAAK,CAAC,GAGlB,MAAMb,EAAQN,CAAU,EAEhC,EAEAD,GAAK,EAAE,MAAOqB,GAAQ,CAClB,QAAQ,IAAI,0BAA0B,EAClCA,aAAe,OAGf,QAAQ,IACJ,+EACJ,EACA,QAAQ,IAAIA,CAAG,EAEnB,QAAQ,KAAK,CAAC,CAClB,CAAC","names":["chalk","Command","inquirer","validationRegExp","validateAppName","input","paths","indexOfDelimiter","p","appName","validateSpaceId","valdiateOAuthToken","STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL","templates","availableTemplates","availableRegions","availableSbMigFeatures","promptAppName","appName","inquirer","validateAppName","input","promptRegion","region","availableRegions","promptSpaceId","spaceId","validateSpaceId","promptOAuthToken","OAuthToken","valdiateOAuthToken","promptIfInWorkshop","inWorkshop","inquirer","promptNoGit","noGit","promptAreYouSure","areYouSure","promptInstall","install","promptList","templateUrl","availableTemplates","customBranchName","branchName","promptSbMigFeatures","sbMigFeatures","availableSbMigFeatures","execa","ora","rimraf","path","fileURLToPath","fs","pipeOut","result","stdout","e","cloneRepo","boilerplateUrl","nameOfFolder","branchName","spinner","removeInitialGitDirectory","appName","initializeGit","invokeSbMigInit","spaceId","OAuthToken","region","installDeps","invokeSbMigSyncComponents","invokeSbMigSyncDatasources","invokeSbMigSyncRoles","invokeSbMigSyncStories","createLocalHTTPS","__filename","distPath","PKG_ROOT","getVersion","packageJsonPath","execute","cliOptions","region","templateUrl","sbMigFeatures","spaceId","OAuthToken","appName","inWorkshop","noGit","branchName","cloneRepo","removeInitialGitDirectory","initializeGit","installDeps","STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL","invokeSbMigInit","createLocalHTTPS","invokeSbMigSyncComponents","invokeSbMigSyncDatasources","invokeSbMigSyncRoles","invokeSbMigSyncStories","e","resolveTemplateUrl","template","STORYBLOK_NEXTJS_BACKPACK_TEMPLATE_URL","main","cliOptions","program","Command","getVersion","options","appName","execute","promptAppName","promptRegion","promptIfInWorkshop","promptNoGit","promptList","customBranchName","promptInstall","promptSbMigFeatures","promptSpaceId","promptOAuthToken","areYouSure","promptAreYouSure","chalk","err"]}
|
package/dist/metafile-esm.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/validators.ts":{"bytes":964,"imports":[],"format":"esm"},"src/constants.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/validators.ts":{"bytes":964,"imports":[],"format":"esm"},"src/constants.ts":{"bytes":1503,"imports":[],"format":"esm"},"src/prompts.ts":{"bytes":4644,"imports":[{"path":"inquirer","kind":"import-statement","external":true},{"path":"src/validators.ts","kind":"import-statement","original":"./validators.js"},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"}],"format":"esm"},"src/utils.ts":{"bytes":3753,"imports":[{"path":"execa","kind":"import-statement","external":true},{"path":"ora","kind":"import-statement","external":true},{"path":"rimraf","kind":"import-statement","external":true},{"path":"path","kind":"import-statement","external":true},{"path":"url","kind":"import-statement","external":true},{"path":"fs-extra","kind":"import-statement","external":true},{"path":"./constants.js","kind":"import-statement","external":true}],"format":"esm"},"src/execute.ts":{"bytes":1834,"imports":[{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"}],"format":"esm"},"src/index.ts":{"bytes":5377,"imports":[{"path":"chalk","kind":"import-statement","external":true},{"path":"commander","kind":"import-statement","external":true},{"path":"src/prompts.ts","kind":"import-statement","original":"./prompts.js"},{"path":"src/execute.ts","kind":"import-statement","original":"./execute.js"},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"}],"format":"esm"}},"outputs":{"dist/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":28501},"dist/index.js":{"imports":[{"path":"chalk","kind":"import-statement","external":true},{"path":"commander","kind":"import-statement","external":true},{"path":"inquirer","kind":"import-statement","external":true},{"path":"execa","kind":"import-statement","external":true},{"path":"ora","kind":"import-statement","external":true},{"path":"rimraf","kind":"import-statement","external":true},{"path":"path","kind":"import-statement","external":true},{"path":"url","kind":"import-statement","external":true},{"path":"fs-extra","kind":"import-statement","external":true}],"exports":[],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":2468},"src/prompts.ts":{"bytesInOutput":1731},"src/validators.ts":{"bytesInOutput":339},"src/constants.ts":{"bytesInOutput":415},"src/utils.ts":{"bytesInOutput":1713},"src/execute.ts":{"bytesInOutput":538}},"bytes":7225}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-backpack-app",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"repository": "git@github.com:ef-global/create-backpack.git",
|
|
5
5
|
"author": "marckraw <marckraw@icloud.com>",
|
|
6
6
|
"publishConfig": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"typescript"
|
|
15
15
|
],
|
|
16
16
|
"type": "module",
|
|
17
|
+
"packageManager": "npm@11.12.1",
|
|
17
18
|
"exports": "./dist/index.js",
|
|
18
19
|
"bin": {
|
|
19
20
|
"create-backpack-app": "./dist/index.js"
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
"README.md"
|
|
24
25
|
],
|
|
25
26
|
"engines": {
|
|
26
|
-
"node": "
|
|
27
|
+
"node": ">=24.0.0"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"chalk": "^5.2.0",
|
|
@@ -36,20 +37,21 @@
|
|
|
36
37
|
"sb-mig": "^5.2.1"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
40
|
+
"@changesets/cli": "^2.31.0",
|
|
39
41
|
"@types/fs-extra": "^11.0.1",
|
|
40
42
|
"@types/inquirer": "^9.0.3",
|
|
41
|
-
"@types/node": "^
|
|
43
|
+
"@types/node": "^24.12.2",
|
|
42
44
|
"tsup": "^6.7.0",
|
|
43
45
|
"type-fest": "^3.8.0",
|
|
44
|
-
"typescript": "^
|
|
46
|
+
"typescript": "^5.9.3"
|
|
45
47
|
},
|
|
46
48
|
"scripts": {
|
|
47
49
|
"start": "node dist/index.js",
|
|
48
50
|
"tsc": "tsc",
|
|
49
51
|
"build": "tsup",
|
|
50
52
|
"build:dev": "tsup --watch",
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
53
|
+
"changeset": "changeset",
|
|
54
|
+
"version-packages": "changeset version",
|
|
55
|
+
"release": "npm run build && changeset publish"
|
|
54
56
|
}
|
|
55
57
|
}
|