@slicemachine/init 0.1.1-dev-plugins-m3.5 → 0.1.1-dev-plugins-m3.7

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.
@@ -133,12 +133,16 @@ ${chalk.bgGreen(` ${chalk.bold.white("Slice Machine")} `)} ${chalk.dim("→")} I
133
133
  Getting help ${chalk.cyan("https://community.prismic.io")}
134
134
 
135
135
  GETTING STARTED
136
- Start Slice Machine ${chalk.cyan(((_a = this.context.projectInitialization) == null ? void 0 : _a.patchedScript) ? await getRunScriptCommand.getRunScriptCommand({
136
+ Run Slice Machine ${chalk.cyan(((_a = this.context.projectInitialization) == null ? void 0 : _a.patchedScript) ? await getRunScriptCommand.getRunScriptCommand({
137
137
  agent: this.context.packageManager || "npm",
138
138
  script: "slicemachine"
139
139
  }) : await getExecuteCommand.getExecuteCommand({
140
140
  agent: this.context.packageManager || "npm",
141
141
  script: "start-slicemachine"
142
+ }))}
143
+ Run your project ${chalk.cyan(await getRunScriptCommand.getRunScriptCommand({
144
+ agent: this.context.packageManager || "npm",
145
+ script: "dev"
142
146
  }))}`);
143
147
  } catch {
144
148
  }
@@ -518,11 +522,13 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
518
522
  }
519
523
  return listr.listr([
520
524
  {
521
- title: "Starting plugin runner...",
525
+ // TODO: Revert when plugin are introduced to users
526
+ // title: "Starting plugin runner...",
527
+ title: "Loading adapter...",
522
528
  task: async (_2, task) => {
523
529
  await this.manager.plugins.initPlugins();
524
- task.title = "Started plugin runner";
525
- parentTask.title = `${parentTask.title} and started plugin runner`;
530
+ task.title = "Loaded adapter";
531
+ parentTask.title = `${parentTask.title} and loaded adapter`;
526
532
  }
527
533
  }
528
534
  ]);
@@ -718,7 +724,9 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
718
724
  initializePlugins() {
719
725
  return listr.listrRun([
720
726
  {
721
- title: "Initializing plugins...",
727
+ // TODO: Revert when plugin are introduced to users
728
+ // title: "Initializing plugins...",
729
+ title: "Initializing adapter...",
722
730
  task: async (_, task) => {
723
731
  const updateOutput = (data) => {
724
732
  if (data instanceof Buffer) {
@@ -730,7 +738,7 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
730
738
  await this.manager.project.initProject({
731
739
  log: updateOutput
732
740
  });
733
- task.title = "Initialized plugins";
741
+ task.title = "Initialized adapter";
734
742
  }
735
743
  }
736
744
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"SliceMachineInitProcess.cjs","sources":["../../src/SliceMachineInitProcess.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport chalk from \"chalk\";\nimport type { ExecaChildProcess } from \"execa\";\nimport open from \"open\";\nimport logSymbols from \"log-symbols\";\nimport { globby } from \"globby\";\n\nimport {\n\tcreateSliceMachineManager,\n\tPrismicUserProfile,\n\tPrismicRepository,\n\tSliceMachineManager,\n\tPackageManager,\n} from \"@slicemachine/manager\";\n\nimport pkg from \"../package.json\";\nimport { detectFramework, Framework } from \"./lib/framework\";\nimport { getRunScriptCommand } from \"./lib/getRunScriptCommand\";\nimport { getExecuteCommand } from \"./lib/getExecuteCommand\";\nimport {\n\tgetRandomRepositoryDomain,\n\tformatRepositoryDomain,\n\tvalidateRepositoryDomain,\n\tvalidateRepositoryDomainAndAvailability,\n\tgetErrorMessageForRepositoryDomainValidation,\n} from \"./lib/repositoryDomain\";\nimport { listr, listrRun } from \"./lib/listr\";\nimport { prompt } from \"./lib/prompt\";\nimport { assertExists } from \"./lib/assertExists\";\nimport { START_SCRIPT_KEY, START_SCRIPT_VALUE } from \"./constants\";\n\nexport type SliceMachineInitProcessOptions = {\n\trepository?: string;\n\tpush?: boolean;\n\tpushSlices?: boolean;\n\tpushCustomTypes?: boolean;\n\tpushDocuments?: boolean;\n\tcwd?: string;\n} & Record<string, unknown>;\n\nconst DEFAULT_OPTIONS: SliceMachineInitProcessOptions = {\n\tpush: true,\n\tpushSlices: true,\n\tpushCustomTypes: true,\n\tpushDocuments: true,\n};\n\nexport const createSliceMachineInitProcess = (\n\toptions?: SliceMachineInitProcessOptions,\n): SliceMachineInitProcess => {\n\treturn new SliceMachineInitProcess(options);\n};\n\ntype SliceMachineInitProcessContext = {\n\tframework?: Framework;\n\tpackageManager?: PackageManager;\n\tinstallProcess?: ExecaChildProcess;\n\tuserProfile?: PrismicUserProfile;\n\tuserRepositories?: PrismicRepository[];\n\trepository?: {\n\t\tdomain: string;\n\t\texists: boolean;\n\t};\n\tprojectInitialization?: {\n\t\tpatchedScript?: boolean;\n\t};\n};\n\nexport class SliceMachineInitProcess {\n\tprotected options: SliceMachineInitProcessOptions;\n\tprotected manager: SliceMachineManager;\n\n\tprotected context: SliceMachineInitProcessContext;\n\n\tconstructor(options?: SliceMachineInitProcessOptions) {\n\t\tthis.options = { ...DEFAULT_OPTIONS, ...options };\n\t\tthis.manager = createSliceMachineManager({ cwd: options?.cwd });\n\n\t\tthis.context = {};\n\t}\n\n\tasync run(): Promise<void> {\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGray(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command started\\n`,\n\t\t);\n\n\t\tif (await this.manager.telemetry.checkIsTelemetryEnabled()) {\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(\n\t\t\t\t`${\n\t\t\t\t\tlogSymbols.info\n\t\t\t\t} We collect telemetry data to improve user experience.\\n Learn more: ${chalk.cyan(\n\t\t\t\t\t\"https://prismic.dev/slice-machine/telemetry\",\n\t\t\t\t)}\\n`,\n\t\t\t);\n\t\t}\n\t\tawait this.manager.telemetry.initTelemetry({\n\t\t\tappName: pkg.name,\n\t\t\tappVersion: pkg.version,\n\t\t});\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:start\",\n\t\t\trepository: this.options.repository,\n\t\t});\n\n\t\ttry {\n\t\t\tawait this.detectEnvironment();\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.framework,\n\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tawait this.beginCoreDependenciesInstallation();\n\t\t\tawait this.loginAndFetchUserData();\n\n\t\t\tif (this.options.repository) {\n\t\t\t\tawait this.useRepositoryFlag();\n\t\t\t} else {\n\t\t\t\tawait this.selectRepository();\n\t\t\t}\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.repository,\n\t\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tif (!this.context.repository.exists) {\n\t\t\t\tawait this.createNewRepository();\n\t\t\t}\n\n\t\t\tawait this.finishCoreDependenciesInstallation();\n\t\t\tawait this.upsertSliceMachineConfigurationAndStartPluginRunner();\n\t\t\tawait this.pushDataToPrismic();\n\t\t\tawait this.initializeProject();\n\t\t\tawait this.initializePlugins();\n\t\t} catch (error) {\n\t\t\tawait this.trackError(error);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework.prismicName,\n\t\t\trepository: this.context.repository.domain,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGreen(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command successful!`,\n\t\t);\n\n\t\ttry {\n\t\t\tconst apiEndpoints = this.manager.getAPIEndpoints();\n\t\t\tconst wroomHost = new URL(apiEndpoints.PrismicWroom).host;\n\n\t\t\tconst dashboardURL = new URL(\n\t\t\t\t`https://${this.context.repository.domain}.${wroomHost}`,\n\t\t\t)\n\t\t\t\t.toString()\n\t\t\t\t.replace(/\\/$/, \"\");\n\t\t\tconst apiURL = new URL(\n\t\t\t\t\"./api/v2\",\n\t\t\t\t`https://${this.context.repository.domain}.cdn.${wroomHost}`,\n\t\t\t).toString();\n\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`\n YOUR REPOSITORY\n Dashboard ${chalk.cyan(dashboardURL)}\n API ${chalk.cyan(apiURL)}\n\n RESOURCES\n Documentation ${chalk.cyan(\n\t\t\tthis.context.framework.prismicDocumentation,\n\t\t)}\n Getting help ${chalk.cyan(\"https://community.prismic.io\")}\n\n GETTING STARTED\n Start Slice Machine ${chalk.cyan(\n\t\t\tthis.context.projectInitialization?.patchedScript\n\t\t\t\t? await getRunScriptCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"slicemachine\",\n\t\t\t\t })\n\t\t\t\t: await getExecuteCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"start-slicemachine\",\n\t\t\t\t }),\n\t\t)}`);\n\t\t} catch {\n\t\t\t// Noop, it's only the final convenience messsage\n\t\t}\n\t}\n\n\tprotected trackError = (error: unknown): Promise<void> => {\n\t\t// Transform error to string and prevent hitting Segment 500kb API limit or sending ridiculously long trace\n\t\tconst safeError = (\n\t\t\terror instanceof Error ? error.message : `${error}`\n\t\t).slice(0, 512);\n\n\t\treturn this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework?.prismicName ?? \"unknown\",\n\t\t\trepository: this.context.repository?.domain,\n\t\t\tsuccess: false,\n\t\t\terror: safeError,\n\t\t});\n\t};\n\n\tprotected detectEnvironment(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Detecting environment...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting framework...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.framework = await detectFramework(\n\t\t\t\t\t\t\t\t\tthis.manager.cwd,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting package manager...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.packageManager =\n\t\t\t\t\t\t\t\t\tawait this.manager.project.detectPackageManager({\n\t\t\t\t\t\t\t\t\t\troot: this.manager.cwd,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = `Detected package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tparentTask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)} and package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected beginCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Beginning core dependencies installation...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\"Project package manager must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst { execaProcess } =\n\t\t\t\t\t\tawait this.manager.project.installDependencies({\n\t\t\t\t\t\t\tpackageManager: this.context.packageManager,\n\t\t\t\t\t\t\tdependencies: this.context.framework.devDependencies,\n\t\t\t\t\t\t\tdev: true,\n\t\t\t\t\t\t\t// Picked up later\n\t\t\t\t\t\t\tlog: () => {\n\t\t\t\t\t\t\t\t/* ... */\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Fail hard if process fails\n\t\t\t\t\texecaProcess.catch(async (error) => {\n\t\t\t\t\t\tconst [_, ...argv1n] = process.argv;\n\t\t\t\t\t\t// Command the user used\n\t\t\t\t\t\tlet tryAgainCommand = [process.argv0, ...argv1n].join(\" \");\n\n\t\t\t\t\t\t// If the `repository` option wasn't used AND the repository was selected/created\n\t\t\t\t\t\tif (!this.options.repository && this.context.repository) {\n\t\t\t\t\t\t\ttryAgainCommand = `${tryAgainCommand} --repository=${this.context.repository.domain}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.trackError(error.shortMessage);\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`\\n\\n${error.shortMessage}\\n${error.stderr}\\n\\n${\n\t\t\t\t\t\t\t\tlogSymbols.error\n\t\t\t\t\t\t\t} Dependency installation failed, try again with:\\n\\n ${chalk.gray(\n\t\t\t\t\t\t\t\t\"$\",\n\t\t\t\t\t\t\t)} ${chalk.cyan(tryAgainCommand)}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.installProcess = execaProcess;\n\n\t\t\t\t\ttask.title = `Began core dependencies installation with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)} ... (running in background)`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected loginAndFetchUserData(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Logging in to Prismic...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tparentTask.output = \"Validating session...\";\n\t\t\t\t\tconst isLoggedIn = await this.manager.user.checkIsLoggedIn();\n\n\t\t\t\t\tif (!isLoggedIn) {\n\t\t\t\t\t\tparentTask.output = \"Press any key to open the browser to login...\";\n\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\tconst initialRawMode = !!process.stdin.isRaw;\n\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(true);\n\t\t\t\t\t\t\tprocess.stdin.once(\"data\", (data: Buffer) => {\n\t\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(initialRawMode);\n\t\t\t\t\t\t\t\tprocess.stdin.pause();\n\t\t\t\t\t\t\t\tresolve(data.toString(\"utf-8\"));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.output = \"Browser opened, waiting for you to login...\";\n\t\t\t\t\t\tconst { port, url } = await this.manager.user.getLoginSessionInfo();\n\t\t\t\t\t\tawait this.manager.user.nodeLoginSession({\n\t\t\t\t\t\t\tport,\n\t\t\t\t\t\t\tonListenCallback() {\n\t\t\t\t\t\t\t\topen(url);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tparentTask.output = \"\";\n\t\t\t\t\tparentTask.title = `Logged in`;\n\n\t\t\t\t\treturn listr(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user profile...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userProfile =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.user.getProfile();\n\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.identify({\n\t\t\t\t\t\t\t\t\t\tuserID: this.context.userProfile.shortId,\n\t\t\t\t\t\t\t\t\t\tintercomHash: this.context.userProfile.intercomHash,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.track({\n\t\t\t\t\t\t\t\t\t\tevent: \"command:init:identify\",\n\t\t\t\t\t\t\t\t\t\trepository: this.options.repository,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tparentTask.title = `Logged in as ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\tthis.context.userProfile?.email,\n\t\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user profile\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user repositories...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userRepositories =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.readAll();\n\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user repositories\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ concurrent: true },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected useRepositoryFlag(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Flag ${chalk.cyan(\"repository\")} used, validating input...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.userRepositories,\n\t\t\t\t\t\t\"User repositories must be available through context to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.options.repository,\n\t\t\t\t\t\t\"Flag `repository` must be set to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst domain = formatRepositoryDomain(this.options.repository);\n\n\t\t\t\t\tconst maybeRepository = this.context.userRepositories.find(\n\t\t\t\t\t\t(repository) => repository.domain === domain,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (maybeRepository) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!this.manager.prismicRepository.hasWriteAccess(maybeRepository)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Cannot run init command with repository ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tmaybeRepository.domain,\n\t\t\t\t\t\t\t\t)}: you are not a developer or admin of this repository`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\t\t\tvalidation,\n\t\t\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (errorMessage) {\n\t\t\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Selected repository ${chalk.cyan(\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t)} (flag ${chalk.cyan(\"repository\")} used)`;\n\n\t\t\t\t\tthis.context.repository = {\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t\texists: !!maybeRepository,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected async selectRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `selectRepository`\",\n\t\t);\n\n\t\tif (this.context.userRepositories.length) {\n\t\t\tawait this.trySelectExistingRepository();\n\t\t}\n\n\t\tif (!this.context.repository) {\n\t\t\tawait this.selectNewRepository();\n\t\t}\n\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t);\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`${logSymbols.success} Selected repository ${chalk.cyan(\n\t\t\t\tthis.context.repository.domain,\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tprotected async trySelectExistingRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `trySelectExistingRepository`\",\n\t\t);\n\n\t\tconst { maybeDomain } = await prompt<string, \"maybeDomain\">({\n\t\t\ttype: \"select\",\n\t\t\tname: \"maybeDomain\",\n\t\t\tmessage: \"Pick a repository to connect to or choose to create a new one\",\n\t\t\twarn: \"You are not a developer or admin of this repository\",\n\t\t\tchoices: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CREATE NEW\",\n\t\t\t\t\tdescription: \"Create a new Prismic repository\\n\",\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t},\n\t\t\t\t...this.context.userRepositories\n\t\t\t\t\t.map((repository) => {\n\t\t\t\t\t\tconst hasWriteAccess =\n\t\t\t\t\t\t\tthis.manager.prismicRepository.hasWriteAccess(repository);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: `${repository.domain}${\n\t\t\t\t\t\t\t\thasWriteAccess ? \"\" : \" (Unauthorized)\"\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\tdescription: `Connect to ${chalk.cyan(repository.domain)}`,\n\t\t\t\t\t\t\tvalue: repository.domain,\n\t\t\t\t\t\t\tdisabled: !hasWriteAccess,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.sort((a, b) => (a.value > b.value ? 1 : -1)),\n\t\t\t],\n\t\t});\n\n\t\tif (maybeDomain) {\n\t\t\tthis.context.repository = {\n\t\t\t\tdomain: maybeDomain,\n\t\t\t\texists: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected async selectNewRepository(): Promise<void> {\n\t\tlet suggestedName = \"\";\n\n\t\t// TODO: Improve concurrency\n\t\tconst trySuggestName = async (name: string): Promise<string | void> => {\n\t\t\tif (name) {\n\t\t\t\tconst formattedName = formatRepositoryDomain(name);\n\n\t\t\t\tif (\n\t\t\t\t\t!validateRepositoryDomain({ domain: formattedName }).hasErrors &&\n\t\t\t\t\t!(await this.manager.prismicRepository.checkExists({\n\t\t\t\t\t\tdomain: formattedName,\n\t\t\t\t\t}))\n\t\t\t\t) {\n\t\t\t\t\treturn formattedName;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// 1. Try to suggest name after package name\n\t\ttry {\n\t\t\tconst pkgJSONPath = path.join(this.manager.cwd, \"package.json\");\n\t\t\tconst pkg = JSON.parse(await fs.readFile(pkgJSONPath, \"utf-8\"));\n\n\t\t\tconst maybeSuggestion = await trySuggestName(pkg.name);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Noop\n\t\t}\n\n\t\t// 2. Try to suggest name after directory name\n\t\tif (!suggestedName) {\n\t\t\tconst maybeSuggestion = await trySuggestName(\n\t\t\t\tpath.basename(this.manager.cwd),\n\t\t\t);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Use random name\n\t\tif (!suggestedName) {\n\t\t\tdo {\n\t\t\t\tsuggestedName = getRandomRepositoryDomain();\n\t\t\t} while (\n\t\t\t\tawait this.manager.prismicRepository.checkExists({\n\t\t\t\t\tdomain: suggestedName,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tconst { domain } = await prompt<string, \"domain\">({\n\t\t\ttype: \"text\",\n\t\t\tname: \"domain\",\n\t\t\t// Overriden by the `onRender` function, just used as a fallback\n\t\t\tmessage: \"Choose a name for your Prismic repository\",\n\t\t\tinitial: suggestedName,\n\t\t\tonRender() {\n\t\t\t\tconst rawDomain = this.value || this.initial || \"\";\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = validateRepositoryDomain({ domain });\n\n\t\t\t\tconst minRule = validation.LessThan4\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"4 characters long or more\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"4 characters long or more\")}`;\n\n\t\t\t\tconst maxRule = validation.MoreThan30\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"30 characters long or less\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"30 characters long or less\")}`;\n\n\t\t\t\tthis.msg = chalk.reset(\n\t\t\t\t\t`\nChoose a name for your Prismic repository\n\n NAMING RULES\n ${minRule}\n ${maxRule}\n 3. Name will be ${chalk.cyan(\"kebab-cased\")} automatically\n\n CONSIDERATIONS\n 1. Once picked, your repository name ${chalk.cyan(\"cannot be changed\")}\n 2. A ${chalk.cyan(\n\t\t\t\"display name\",\n\t\t)} for the repository can be configured later on\n\n PREVIEW\n Dashboard ${chalk.cyan(`https://${domain}.prismic.io`)}\n API ${chalk.cyan(`https://${domain}.cdn.prismic.io/api/v2`)}\n\n${chalk.cyan(\"?\")} Your Prismic repository name`.replace(\"\\n\", \"\"),\n\t\t\t\t);\n\t\t\t},\n\t\t\tvalidate: async (rawDomain: string) => {\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\tdomain,\n\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t});\n\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\tvalidation,\n\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t});\n\n\t\t\t\treturn errorMessage || true;\n\t\t\t},\n\t\t\tformat: (value) => {\n\t\t\t\treturn formatRepositoryDomain(value);\n\t\t\t},\n\t\t});\n\n\t\t// Clear extra lines\n\t\tprocess.stdout.moveCursor?.(0, -16);\n\t\tprocess.stdout.clearScreenDown?.();\n\n\t\tthis.context.repository = {\n\t\t\tdomain,\n\t\t\texists: false,\n\t\t};\n\t}\n\n\tprotected createNewRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t);\n\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Creating new repository ${chalk.cyan(\n\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this.manager.prismicRepository.create({\n\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\tframework: this.context.framework.prismicName,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.repository.exists = true;\n\t\t\t\t\ttask.title = `Created new repository ${chalk.cyan(\n\t\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected finishCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Finishing core dependencies installation with ${chalk.cyan(\n\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.installProcess,\n\t\t\t\t\t\t\"Initial dependencies installation process must be available through context to run `finishCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst updateOutput = (data: Buffer | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't clutter console with logs when process is non TTY (CI, etc.)\n\t\t\t\t\tif (process.stdout.isTTY || process.env.NODE_ENV === \"test\") {\n\t\t\t\t\t\tthis.context.installProcess.stdout?.on(\"data\", updateOutput);\n\t\t\t\t\t}\n\t\t\t\t\tthis.context.installProcess.stderr?.on(\"data\", updateOutput);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.context.installProcess;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Error catching happens when then process is started ealier so\n\t\t\t\t\t\t * that all install errors, earlier and presents, can be catched.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Here, we force the task to wait so that it is neither marked as\n\t\t\t\t\t\t * done or has the opportunity to handle the error itself.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t// If for whatever reason the process is not exited by now, we still throw the error\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 5000));\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Installed core dependencies with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected upsertSliceMachineConfigurationAndStartPluginRunner(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Resolving Slice Machine configuration...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet sliceMachineConfigExists = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.manager.project.getSliceMachineConfigPath();\n\t\t\t\t\t\tsliceMachineConfigExists = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// noop, config does not exists, we'll create it\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sliceMachineConfigExists) {\n\t\t\t\t\t\tparentTask.title = \"Updating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst config = await this.manager.project.getSliceMachineConfig();\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\t...config,\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tparentTask.title = \"Updated Slice Machine configuration\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentTask.title = \"Creating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst sliceMachineConfigPath =\n\t\t\t\t\t\t\tawait this.manager.project.suggestSliceMachineConfigPath();\n\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t\tlibraries: [\"./slices\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpath: sliceMachineConfigPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.title = \"Created Slice Machine configuration\";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn listr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Starting plugin runner...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tawait this.manager.plugins.initPlugins();\n\t\t\t\t\t\t\t\ttask.title = \"Started plugin runner\";\n\t\t\t\t\t\t\t\tparentTask.title = `${parentTask.title} and started plugin runner`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected pushDataToPrismic(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Pushing data to Prismic...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing slices...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushSlices) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-slices used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { libraries, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.slices.readAllSliceLibraries();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read slice libraries: ${errors.join(\", \")}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst slices: { libraryID: string; sliceID: string }[] = [];\n\t\t\t\t\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\t\t\t\t\tif (library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\tfor (const sliceID of library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\t\tslices.push({\n\t\t\t\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\t\t\t\tsliceID,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (slices.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No slice to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushing slices... (initializing ACL)\";\n\t\t\t\t\t\t\t\tawait this.manager.screenshots.initS3ACL();\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (0/${slices.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tslices.map(async (slice) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.slices.pushSlice(slice);\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (${pushed}/${slices.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all slices\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing custom types...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushCustomTypes) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-custom-types used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { ids, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.readCustomTypeLibrary();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read custom type libraries: ${errors.join(\n\t\t\t\t\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ids || ids.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No custom type to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (0/${ids.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tids.map(async (id) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.pushCustomType({ id });\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (${pushed}/${ids.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all custom types\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing documents...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushDocuments) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-documents used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\t\t\t\"Repository selection must be available through context to run `pushDataToPrismic`\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.access(documentsDirectoryPath);\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst signaturePath = path.resolve(\n\t\t\t\t\t\t\t\t\tdocumentsDirectoryPath,\n\t\t\t\t\t\t\t\t\t\"index.json\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst rawSignature = await fs.readFile(signaturePath, \"utf-8\");\n\t\t\t\t\t\t\t\tconst signature: string = JSON.parse(rawSignature).signature;\n\n\t\t\t\t\t\t\t\tconst documentsGlob = await globby(\"*/*.json\", {\n\t\t\t\t\t\t\t\t\tcwd: documentsDirectoryPath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (documentsGlob.length === 0) {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Replace `unknown` with a Prismic document type.\n\t\t\t\t\t\t\t\t// The exact format is not know at this time, hence the `unknown`.\n\t\t\t\t\t\t\t\tconst documents: Record<string, unknown> = {};\n\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tdocumentsGlob.map(async (documentPath) => {\n\t\t\t\t\t\t\t\t\t\tconst filename = path.basename(documentPath, \".json\");\n\t\t\t\t\t\t\t\t\t\tconst fileContent = await fs.readFile(\n\t\t\t\t\t\t\t\t\t\t\tpath.resolve(documentsDirectoryPath, documentPath),\n\t\t\t\t\t\t\t\t\t\t\t\"utf-8\",\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// TOOD: Validate the contents of the JSON file and skip on invalid documents.\n\t\t\t\t\t\t\t\t\t\t\tconst parsedContents = JSON.parse(fileContent);\n\n\t\t\t\t\t\t\t\t\t\t\tdocuments[filename] = parsedContents;\n\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t`Skipped document due to its invalid format: ${documentPath}`,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.pushDocuments({\n\t\t\t\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\t\t\t\tdocuments,\n\t\t\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all documents\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Cleaning up data push artifacts\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.rm(documentsDirectoryPath, {\n\t\t\t\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Noop, it's not that big of a deal if we cannot delete this directory\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Cleaned up data push artifacts\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializeProject(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing project...\",\n\t\t\t\ttask: async (_, parentTask) =>\n\t\t\t\t\t// We return another Listr instance in the event we have additional task to perform to initialize the project\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: `Patching ${chalk.cyan(\"package.json\")} scripts...`,\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst pkgPath = path.join(this.manager.cwd, \"package.json\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst pkgRaw = await fs.readFile(pkgPath, \"utf-8\");\n\t\t\t\t\t\t\t\t\tconst pkg = JSON.parse(pkgRaw);\n\n\t\t\t\t\t\t\t\t\tpkg.scripts ||= {};\n\n\t\t\t\t\t\t\t\t\tif (!pkg.scripts[START_SCRIPT_KEY]) {\n\t\t\t\t\t\t\t\t\t\tpkg.scripts[START_SCRIPT_KEY] = START_SCRIPT_VALUE;\n\n\t\t\t\t\t\t\t\t\t\t// Cheap indent detection based on https://github.com/sindresorhus/detect-indent (simplified because we're only dealing with JSON here)\n\t\t\t\t\t\t\t\t\t\tconst firstIndent = pkgRaw\n\t\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t\t.find((line) => line.match(/^(?:( )+|\\t+)/));\n\t\t\t\t\t\t\t\t\t\tconst indent = firstIndent?.match(/^(?:( )+|\\t+)/)?.[0];\n\n\t\t\t\t\t\t\t\t\t\tawait fs.writeFile(\n\t\t\t\t\t\t\t\t\t\t\tpkgPath,\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t\t\tindent && indent !== \" \" ? indent : \" \",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t!pkg.scripts[\"slicemachine\"].startsWith(START_SCRIPT_VALUE)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Script already exists\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\ttask.title = `Could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts (warning)`;\n\t\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts)`;\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.context.projectInitialization ||= {};\n\t\t\t\t\t\t\t\tthis.context.projectInitialization.patchedScript = true;\n\n\t\t\t\t\t\t\t\ttask.title = `Patched ${chalk.cyan(\"package.json\")} scripts`;\n\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (patched ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t)} scripts)`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializePlugins(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing plugins...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tconst updateOutput = (data: Buffer | string | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t} else if (typeof data === \"string\") {\n\t\t\t\t\t\t\ttask.output = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tawait this.manager.project.initProject({\n\t\t\t\t\t\tlog: updateOutput,\n\t\t\t\t\t});\n\n\t\t\t\t\ttask.title = \"Initialized plugins\";\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n}\n"],"names":["createSliceMachineManager","pkg","assertExists","getRunScriptCommand","getExecuteCommand","listrRun","listr","_","detectFramework","_b","_a","formatRepositoryDomain","validateRepositoryDomainAndAvailability","domain","getErrorMessageForRepositoryDomainValidation","prompt","validateRepositoryDomain","path","fs","getRandomRepositoryDomain","globby","START_SCRIPT_KEY","START_SCRIPT_VALUE"],"mappings":"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"}
1
+ {"version":3,"file":"SliceMachineInitProcess.cjs","sources":["../../src/SliceMachineInitProcess.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport chalk from \"chalk\";\nimport type { ExecaChildProcess } from \"execa\";\nimport open from \"open\";\nimport logSymbols from \"log-symbols\";\nimport { globby } from \"globby\";\n\nimport {\n\tcreateSliceMachineManager,\n\tPrismicUserProfile,\n\tPrismicRepository,\n\tSliceMachineManager,\n\tPackageManager,\n} from \"@slicemachine/manager\";\n\nimport pkg from \"../package.json\";\nimport { detectFramework, Framework } from \"./lib/framework\";\nimport { getRunScriptCommand } from \"./lib/getRunScriptCommand\";\nimport { getExecuteCommand } from \"./lib/getExecuteCommand\";\nimport {\n\tgetRandomRepositoryDomain,\n\tformatRepositoryDomain,\n\tvalidateRepositoryDomain,\n\tvalidateRepositoryDomainAndAvailability,\n\tgetErrorMessageForRepositoryDomainValidation,\n} from \"./lib/repositoryDomain\";\nimport { listr, listrRun } from \"./lib/listr\";\nimport { prompt } from \"./lib/prompt\";\nimport { assertExists } from \"./lib/assertExists\";\nimport { START_SCRIPT_KEY, START_SCRIPT_VALUE } from \"./constants\";\n\nexport type SliceMachineInitProcessOptions = {\n\trepository?: string;\n\tpush?: boolean;\n\tpushSlices?: boolean;\n\tpushCustomTypes?: boolean;\n\tpushDocuments?: boolean;\n\tcwd?: string;\n} & Record<string, unknown>;\n\nconst DEFAULT_OPTIONS: SliceMachineInitProcessOptions = {\n\tpush: true,\n\tpushSlices: true,\n\tpushCustomTypes: true,\n\tpushDocuments: true,\n};\n\nexport const createSliceMachineInitProcess = (\n\toptions?: SliceMachineInitProcessOptions,\n): SliceMachineInitProcess => {\n\treturn new SliceMachineInitProcess(options);\n};\n\ntype SliceMachineInitProcessContext = {\n\tframework?: Framework;\n\tpackageManager?: PackageManager;\n\tinstallProcess?: ExecaChildProcess;\n\tuserProfile?: PrismicUserProfile;\n\tuserRepositories?: PrismicRepository[];\n\trepository?: {\n\t\tdomain: string;\n\t\texists: boolean;\n\t};\n\tprojectInitialization?: {\n\t\tpatchedScript?: boolean;\n\t};\n};\n\nexport class SliceMachineInitProcess {\n\tprotected options: SliceMachineInitProcessOptions;\n\tprotected manager: SliceMachineManager;\n\n\tprotected context: SliceMachineInitProcessContext;\n\n\tconstructor(options?: SliceMachineInitProcessOptions) {\n\t\tthis.options = { ...DEFAULT_OPTIONS, ...options };\n\t\tthis.manager = createSliceMachineManager({ cwd: options?.cwd });\n\n\t\tthis.context = {};\n\t}\n\n\tasync run(): Promise<void> {\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGray(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command started\\n`,\n\t\t);\n\n\t\tif (await this.manager.telemetry.checkIsTelemetryEnabled()) {\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(\n\t\t\t\t`${\n\t\t\t\t\tlogSymbols.info\n\t\t\t\t} We collect telemetry data to improve user experience.\\n Learn more: ${chalk.cyan(\n\t\t\t\t\t\"https://prismic.dev/slice-machine/telemetry\",\n\t\t\t\t)}\\n`,\n\t\t\t);\n\t\t}\n\t\tawait this.manager.telemetry.initTelemetry({\n\t\t\tappName: pkg.name,\n\t\t\tappVersion: pkg.version,\n\t\t});\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:start\",\n\t\t\trepository: this.options.repository,\n\t\t});\n\n\t\ttry {\n\t\t\tawait this.detectEnvironment();\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.framework,\n\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tawait this.beginCoreDependenciesInstallation();\n\t\t\tawait this.loginAndFetchUserData();\n\n\t\t\tif (this.options.repository) {\n\t\t\t\tawait this.useRepositoryFlag();\n\t\t\t} else {\n\t\t\t\tawait this.selectRepository();\n\t\t\t}\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.repository,\n\t\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tif (!this.context.repository.exists) {\n\t\t\t\tawait this.createNewRepository();\n\t\t\t}\n\n\t\t\tawait this.finishCoreDependenciesInstallation();\n\t\t\tawait this.upsertSliceMachineConfigurationAndStartPluginRunner();\n\t\t\tawait this.pushDataToPrismic();\n\t\t\tawait this.initializeProject();\n\t\t\tawait this.initializePlugins();\n\t\t} catch (error) {\n\t\t\tawait this.trackError(error);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework.prismicName,\n\t\t\trepository: this.context.repository.domain,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGreen(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command successful!`,\n\t\t);\n\n\t\ttry {\n\t\t\tconst apiEndpoints = this.manager.getAPIEndpoints();\n\t\t\tconst wroomHost = new URL(apiEndpoints.PrismicWroom).host;\n\n\t\t\tconst dashboardURL = new URL(\n\t\t\t\t`https://${this.context.repository.domain}.${wroomHost}`,\n\t\t\t)\n\t\t\t\t.toString()\n\t\t\t\t.replace(/\\/$/, \"\");\n\t\t\tconst apiURL = new URL(\n\t\t\t\t\"./api/v2\",\n\t\t\t\t`https://${this.context.repository.domain}.cdn.${wroomHost}`,\n\t\t\t).toString();\n\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`\n YOUR REPOSITORY\n Dashboard ${chalk.cyan(dashboardURL)}\n API ${chalk.cyan(apiURL)}\n\n RESOURCES\n Documentation ${chalk.cyan(\n\t\t\tthis.context.framework.prismicDocumentation,\n\t\t)}\n Getting help ${chalk.cyan(\"https://community.prismic.io\")}\n\n GETTING STARTED\n Run Slice Machine ${chalk.cyan(\n\t\t\tthis.context.projectInitialization?.patchedScript\n\t\t\t\t? await getRunScriptCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"slicemachine\",\n\t\t\t\t })\n\t\t\t\t: await getExecuteCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"start-slicemachine\",\n\t\t\t\t }),\n\t\t)}\n Run your project ${chalk.cyan(\n\t\t\tawait getRunScriptCommand({\n\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\tscript: \"dev\",\n\t\t\t}),\n\t\t)}`);\n\t\t} catch {\n\t\t\t// Noop, it's only the final convenience messsage\n\t\t}\n\t}\n\n\tprotected trackError = (error: unknown): Promise<void> => {\n\t\t// Transform error to string and prevent hitting Segment 500kb API limit or sending ridiculously long trace\n\t\tconst safeError = (\n\t\t\terror instanceof Error ? error.message : `${error}`\n\t\t).slice(0, 512);\n\n\t\treturn this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework?.prismicName ?? \"unknown\",\n\t\t\trepository: this.context.repository?.domain,\n\t\t\tsuccess: false,\n\t\t\terror: safeError,\n\t\t});\n\t};\n\n\tprotected detectEnvironment(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Detecting environment...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting framework...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.framework = await detectFramework(\n\t\t\t\t\t\t\t\t\tthis.manager.cwd,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting package manager...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.packageManager =\n\t\t\t\t\t\t\t\t\tawait this.manager.project.detectPackageManager({\n\t\t\t\t\t\t\t\t\t\troot: this.manager.cwd,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = `Detected package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tparentTask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)} and package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected beginCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Beginning core dependencies installation...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\"Project package manager must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst { execaProcess } =\n\t\t\t\t\t\tawait this.manager.project.installDependencies({\n\t\t\t\t\t\t\tpackageManager: this.context.packageManager,\n\t\t\t\t\t\t\tdependencies: this.context.framework.devDependencies,\n\t\t\t\t\t\t\tdev: true,\n\t\t\t\t\t\t\t// Picked up later\n\t\t\t\t\t\t\tlog: () => {\n\t\t\t\t\t\t\t\t/* ... */\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Fail hard if process fails\n\t\t\t\t\texecaProcess.catch(async (error) => {\n\t\t\t\t\t\tconst [_, ...argv1n] = process.argv;\n\t\t\t\t\t\t// Command the user used\n\t\t\t\t\t\tlet tryAgainCommand = [process.argv0, ...argv1n].join(\" \");\n\n\t\t\t\t\t\t// If the `repository` option wasn't used AND the repository was selected/created\n\t\t\t\t\t\tif (!this.options.repository && this.context.repository) {\n\t\t\t\t\t\t\ttryAgainCommand = `${tryAgainCommand} --repository=${this.context.repository.domain}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.trackError(error.shortMessage);\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`\\n\\n${error.shortMessage}\\n${error.stderr}\\n\\n${\n\t\t\t\t\t\t\t\tlogSymbols.error\n\t\t\t\t\t\t\t} Dependency installation failed, try again with:\\n\\n ${chalk.gray(\n\t\t\t\t\t\t\t\t\"$\",\n\t\t\t\t\t\t\t)} ${chalk.cyan(tryAgainCommand)}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.installProcess = execaProcess;\n\n\t\t\t\t\ttask.title = `Began core dependencies installation with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)} ... (running in background)`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected loginAndFetchUserData(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Logging in to Prismic...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tparentTask.output = \"Validating session...\";\n\t\t\t\t\tconst isLoggedIn = await this.manager.user.checkIsLoggedIn();\n\n\t\t\t\t\tif (!isLoggedIn) {\n\t\t\t\t\t\tparentTask.output = \"Press any key to open the browser to login...\";\n\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\tconst initialRawMode = !!process.stdin.isRaw;\n\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(true);\n\t\t\t\t\t\t\tprocess.stdin.once(\"data\", (data: Buffer) => {\n\t\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(initialRawMode);\n\t\t\t\t\t\t\t\tprocess.stdin.pause();\n\t\t\t\t\t\t\t\tresolve(data.toString(\"utf-8\"));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.output = \"Browser opened, waiting for you to login...\";\n\t\t\t\t\t\tconst { port, url } = await this.manager.user.getLoginSessionInfo();\n\t\t\t\t\t\tawait this.manager.user.nodeLoginSession({\n\t\t\t\t\t\t\tport,\n\t\t\t\t\t\t\tonListenCallback() {\n\t\t\t\t\t\t\t\topen(url);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tparentTask.output = \"\";\n\t\t\t\t\tparentTask.title = `Logged in`;\n\n\t\t\t\t\treturn listr(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user profile...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userProfile =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.user.getProfile();\n\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.identify({\n\t\t\t\t\t\t\t\t\t\tuserID: this.context.userProfile.shortId,\n\t\t\t\t\t\t\t\t\t\tintercomHash: this.context.userProfile.intercomHash,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.track({\n\t\t\t\t\t\t\t\t\t\tevent: \"command:init:identify\",\n\t\t\t\t\t\t\t\t\t\trepository: this.options.repository,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tparentTask.title = `Logged in as ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\tthis.context.userProfile?.email,\n\t\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user profile\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user repositories...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userRepositories =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.readAll();\n\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user repositories\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ concurrent: true },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected useRepositoryFlag(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Flag ${chalk.cyan(\"repository\")} used, validating input...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.userRepositories,\n\t\t\t\t\t\t\"User repositories must be available through context to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.options.repository,\n\t\t\t\t\t\t\"Flag `repository` must be set to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst domain = formatRepositoryDomain(this.options.repository);\n\n\t\t\t\t\tconst maybeRepository = this.context.userRepositories.find(\n\t\t\t\t\t\t(repository) => repository.domain === domain,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (maybeRepository) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!this.manager.prismicRepository.hasWriteAccess(maybeRepository)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Cannot run init command with repository ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tmaybeRepository.domain,\n\t\t\t\t\t\t\t\t)}: you are not a developer or admin of this repository`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\t\t\tvalidation,\n\t\t\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (errorMessage) {\n\t\t\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Selected repository ${chalk.cyan(\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t)} (flag ${chalk.cyan(\"repository\")} used)`;\n\n\t\t\t\t\tthis.context.repository = {\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t\texists: !!maybeRepository,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected async selectRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `selectRepository`\",\n\t\t);\n\n\t\tif (this.context.userRepositories.length) {\n\t\t\tawait this.trySelectExistingRepository();\n\t\t}\n\n\t\tif (!this.context.repository) {\n\t\t\tawait this.selectNewRepository();\n\t\t}\n\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t);\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`${logSymbols.success} Selected repository ${chalk.cyan(\n\t\t\t\tthis.context.repository.domain,\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tprotected async trySelectExistingRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `trySelectExistingRepository`\",\n\t\t);\n\n\t\tconst { maybeDomain } = await prompt<string, \"maybeDomain\">({\n\t\t\ttype: \"select\",\n\t\t\tname: \"maybeDomain\",\n\t\t\tmessage: \"Pick a repository to connect to or choose to create a new one\",\n\t\t\twarn: \"You are not a developer or admin of this repository\",\n\t\t\tchoices: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CREATE NEW\",\n\t\t\t\t\tdescription: \"Create a new Prismic repository\\n\",\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t},\n\t\t\t\t...this.context.userRepositories\n\t\t\t\t\t.map((repository) => {\n\t\t\t\t\t\tconst hasWriteAccess =\n\t\t\t\t\t\t\tthis.manager.prismicRepository.hasWriteAccess(repository);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: `${repository.domain}${\n\t\t\t\t\t\t\t\thasWriteAccess ? \"\" : \" (Unauthorized)\"\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\tdescription: `Connect to ${chalk.cyan(repository.domain)}`,\n\t\t\t\t\t\t\tvalue: repository.domain,\n\t\t\t\t\t\t\tdisabled: !hasWriteAccess,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.sort((a, b) => (a.value > b.value ? 1 : -1)),\n\t\t\t],\n\t\t});\n\n\t\tif (maybeDomain) {\n\t\t\tthis.context.repository = {\n\t\t\t\tdomain: maybeDomain,\n\t\t\t\texists: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected async selectNewRepository(): Promise<void> {\n\t\tlet suggestedName = \"\";\n\n\t\t// TODO: Improve concurrency\n\t\tconst trySuggestName = async (name: string): Promise<string | void> => {\n\t\t\tif (name) {\n\t\t\t\tconst formattedName = formatRepositoryDomain(name);\n\n\t\t\t\tif (\n\t\t\t\t\t!validateRepositoryDomain({ domain: formattedName }).hasErrors &&\n\t\t\t\t\t!(await this.manager.prismicRepository.checkExists({\n\t\t\t\t\t\tdomain: formattedName,\n\t\t\t\t\t}))\n\t\t\t\t) {\n\t\t\t\t\treturn formattedName;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// 1. Try to suggest name after package name\n\t\ttry {\n\t\t\tconst pkgJSONPath = path.join(this.manager.cwd, \"package.json\");\n\t\t\tconst pkg = JSON.parse(await fs.readFile(pkgJSONPath, \"utf-8\"));\n\n\t\t\tconst maybeSuggestion = await trySuggestName(pkg.name);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Noop\n\t\t}\n\n\t\t// 2. Try to suggest name after directory name\n\t\tif (!suggestedName) {\n\t\t\tconst maybeSuggestion = await trySuggestName(\n\t\t\t\tpath.basename(this.manager.cwd),\n\t\t\t);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Use random name\n\t\tif (!suggestedName) {\n\t\t\tdo {\n\t\t\t\tsuggestedName = getRandomRepositoryDomain();\n\t\t\t} while (\n\t\t\t\tawait this.manager.prismicRepository.checkExists({\n\t\t\t\t\tdomain: suggestedName,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tconst { domain } = await prompt<string, \"domain\">({\n\t\t\ttype: \"text\",\n\t\t\tname: \"domain\",\n\t\t\t// Overriden by the `onRender` function, just used as a fallback\n\t\t\tmessage: \"Choose a name for your Prismic repository\",\n\t\t\tinitial: suggestedName,\n\t\t\tonRender() {\n\t\t\t\tconst rawDomain = this.value || this.initial || \"\";\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = validateRepositoryDomain({ domain });\n\n\t\t\t\tconst minRule = validation.LessThan4\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"4 characters long or more\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"4 characters long or more\")}`;\n\n\t\t\t\tconst maxRule = validation.MoreThan30\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"30 characters long or less\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"30 characters long or less\")}`;\n\n\t\t\t\tthis.msg = chalk.reset(\n\t\t\t\t\t`\nChoose a name for your Prismic repository\n\n NAMING RULES\n ${minRule}\n ${maxRule}\n 3. Name will be ${chalk.cyan(\"kebab-cased\")} automatically\n\n CONSIDERATIONS\n 1. Once picked, your repository name ${chalk.cyan(\"cannot be changed\")}\n 2. A ${chalk.cyan(\n\t\t\t\"display name\",\n\t\t)} for the repository can be configured later on\n\n PREVIEW\n Dashboard ${chalk.cyan(`https://${domain}.prismic.io`)}\n API ${chalk.cyan(`https://${domain}.cdn.prismic.io/api/v2`)}\n\n${chalk.cyan(\"?\")} Your Prismic repository name`.replace(\"\\n\", \"\"),\n\t\t\t\t);\n\t\t\t},\n\t\t\tvalidate: async (rawDomain: string) => {\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\tdomain,\n\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t});\n\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\tvalidation,\n\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t});\n\n\t\t\t\treturn errorMessage || true;\n\t\t\t},\n\t\t\tformat: (value) => {\n\t\t\t\treturn formatRepositoryDomain(value);\n\t\t\t},\n\t\t});\n\n\t\t// Clear extra lines\n\t\tprocess.stdout.moveCursor?.(0, -16);\n\t\tprocess.stdout.clearScreenDown?.();\n\n\t\tthis.context.repository = {\n\t\t\tdomain,\n\t\t\texists: false,\n\t\t};\n\t}\n\n\tprotected createNewRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t);\n\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Creating new repository ${chalk.cyan(\n\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this.manager.prismicRepository.create({\n\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\tframework: this.context.framework.prismicName,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.repository.exists = true;\n\t\t\t\t\ttask.title = `Created new repository ${chalk.cyan(\n\t\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected finishCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Finishing core dependencies installation with ${chalk.cyan(\n\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.installProcess,\n\t\t\t\t\t\t\"Initial dependencies installation process must be available through context to run `finishCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst updateOutput = (data: Buffer | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't clutter console with logs when process is non TTY (CI, etc.)\n\t\t\t\t\tif (process.stdout.isTTY || process.env.NODE_ENV === \"test\") {\n\t\t\t\t\t\tthis.context.installProcess.stdout?.on(\"data\", updateOutput);\n\t\t\t\t\t}\n\t\t\t\t\tthis.context.installProcess.stderr?.on(\"data\", updateOutput);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.context.installProcess;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Error catching happens when then process is started ealier so\n\t\t\t\t\t\t * that all install errors, earlier and presents, can be catched.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Here, we force the task to wait so that it is neither marked as\n\t\t\t\t\t\t * done or has the opportunity to handle the error itself.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t// If for whatever reason the process is not exited by now, we still throw the error\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 5000));\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Installed core dependencies with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected upsertSliceMachineConfigurationAndStartPluginRunner(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Resolving Slice Machine configuration...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet sliceMachineConfigExists = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.manager.project.getSliceMachineConfigPath();\n\t\t\t\t\t\tsliceMachineConfigExists = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// noop, config does not exists, we'll create it\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sliceMachineConfigExists) {\n\t\t\t\t\t\tparentTask.title = \"Updating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst config = await this.manager.project.getSliceMachineConfig();\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\t...config,\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tparentTask.title = \"Updated Slice Machine configuration\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentTask.title = \"Creating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst sliceMachineConfigPath =\n\t\t\t\t\t\t\tawait this.manager.project.suggestSliceMachineConfigPath();\n\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t\tlibraries: [\"./slices\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpath: sliceMachineConfigPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.title = \"Created Slice Machine configuration\";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn listr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t// title: \"Starting plugin runner...\",\n\t\t\t\t\t\t\ttitle: \"Loading adapter...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tawait this.manager.plugins.initPlugins();\n\t\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t\t// task.title = \"Started plugin runner\";\n\t\t\t\t\t\t\t\ttask.title = \"Loaded adapter\";\n\t\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t\t// parentTask.title = `${parentTask.title} and started plugin runner`;\n\t\t\t\t\t\t\t\tparentTask.title = `${parentTask.title} and loaded adapter`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected pushDataToPrismic(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Pushing data to Prismic...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing slices...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushSlices) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-slices used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { libraries, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.slices.readAllSliceLibraries();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read slice libraries: ${errors.join(\", \")}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst slices: { libraryID: string; sliceID: string }[] = [];\n\t\t\t\t\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\t\t\t\t\tif (library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\tfor (const sliceID of library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\t\tslices.push({\n\t\t\t\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\t\t\t\tsliceID,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (slices.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No slice to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushing slices... (initializing ACL)\";\n\t\t\t\t\t\t\t\tawait this.manager.screenshots.initS3ACL();\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (0/${slices.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tslices.map(async (slice) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.slices.pushSlice(slice);\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (${pushed}/${slices.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all slices\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing custom types...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushCustomTypes) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-custom-types used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { ids, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.readCustomTypeLibrary();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read custom type libraries: ${errors.join(\n\t\t\t\t\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ids || ids.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No custom type to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (0/${ids.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tids.map(async (id) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.pushCustomType({ id });\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (${pushed}/${ids.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all custom types\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing documents...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushDocuments) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-documents used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\t\t\t\"Repository selection must be available through context to run `pushDataToPrismic`\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.access(documentsDirectoryPath);\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst signaturePath = path.resolve(\n\t\t\t\t\t\t\t\t\tdocumentsDirectoryPath,\n\t\t\t\t\t\t\t\t\t\"index.json\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst rawSignature = await fs.readFile(signaturePath, \"utf-8\");\n\t\t\t\t\t\t\t\tconst signature: string = JSON.parse(rawSignature).signature;\n\n\t\t\t\t\t\t\t\tconst documentsGlob = await globby(\"*/*.json\", {\n\t\t\t\t\t\t\t\t\tcwd: documentsDirectoryPath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (documentsGlob.length === 0) {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Replace `unknown` with a Prismic document type.\n\t\t\t\t\t\t\t\t// The exact format is not know at this time, hence the `unknown`.\n\t\t\t\t\t\t\t\tconst documents: Record<string, unknown> = {};\n\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tdocumentsGlob.map(async (documentPath) => {\n\t\t\t\t\t\t\t\t\t\tconst filename = path.basename(documentPath, \".json\");\n\t\t\t\t\t\t\t\t\t\tconst fileContent = await fs.readFile(\n\t\t\t\t\t\t\t\t\t\t\tpath.resolve(documentsDirectoryPath, documentPath),\n\t\t\t\t\t\t\t\t\t\t\t\"utf-8\",\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// TOOD: Validate the contents of the JSON file and skip on invalid documents.\n\t\t\t\t\t\t\t\t\t\t\tconst parsedContents = JSON.parse(fileContent);\n\n\t\t\t\t\t\t\t\t\t\t\tdocuments[filename] = parsedContents;\n\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t`Skipped document due to its invalid format: ${documentPath}`,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.pushDocuments({\n\t\t\t\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\t\t\t\tdocuments,\n\t\t\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all documents\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Cleaning up data push artifacts\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.rm(documentsDirectoryPath, {\n\t\t\t\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Noop, it's not that big of a deal if we cannot delete this directory\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Cleaned up data push artifacts\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializeProject(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing project...\",\n\t\t\t\ttask: async (_, parentTask) =>\n\t\t\t\t\t// We return another Listr instance in the event we have additional task to perform to initialize the project\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: `Patching ${chalk.cyan(\"package.json\")} scripts...`,\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst pkgPath = path.join(this.manager.cwd, \"package.json\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst pkgRaw = await fs.readFile(pkgPath, \"utf-8\");\n\t\t\t\t\t\t\t\t\tconst pkg = JSON.parse(pkgRaw);\n\n\t\t\t\t\t\t\t\t\tpkg.scripts ||= {};\n\n\t\t\t\t\t\t\t\t\tif (!pkg.scripts[START_SCRIPT_KEY]) {\n\t\t\t\t\t\t\t\t\t\tpkg.scripts[START_SCRIPT_KEY] = START_SCRIPT_VALUE;\n\n\t\t\t\t\t\t\t\t\t\t// Cheap indent detection based on https://github.com/sindresorhus/detect-indent (simplified because we're only dealing with JSON here)\n\t\t\t\t\t\t\t\t\t\tconst firstIndent = pkgRaw\n\t\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t\t.find((line) => line.match(/^(?:( )+|\\t+)/));\n\t\t\t\t\t\t\t\t\t\tconst indent = firstIndent?.match(/^(?:( )+|\\t+)/)?.[0];\n\n\t\t\t\t\t\t\t\t\t\tawait fs.writeFile(\n\t\t\t\t\t\t\t\t\t\t\tpkgPath,\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t\t\tindent && indent !== \" \" ? indent : \" \",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t!pkg.scripts[\"slicemachine\"].startsWith(START_SCRIPT_VALUE)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Script already exists\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\ttask.title = `Could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts (warning)`;\n\t\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts)`;\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.context.projectInitialization ||= {};\n\t\t\t\t\t\t\t\tthis.context.projectInitialization.patchedScript = true;\n\n\t\t\t\t\t\t\t\ttask.title = `Patched ${chalk.cyan(\"package.json\")} scripts`;\n\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (patched ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t)} scripts)`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializePlugins(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t// title: \"Initializing plugins...\",\n\t\t\t\ttitle: \"Initializing adapter...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tconst updateOutput = (data: Buffer | string | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t} else if (typeof data === \"string\") {\n\t\t\t\t\t\t\ttask.output = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tawait this.manager.project.initProject({\n\t\t\t\t\t\tlog: updateOutput,\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t// task.title = \"Initialized plugins\";\n\t\t\t\t\ttask.title = \"Initialized adapter\";\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n}\n"],"names":["createSliceMachineManager","pkg","assertExists","getRunScriptCommand","getExecuteCommand","listrRun","listr","_","detectFramework","_b","_a","formatRepositoryDomain","validateRepositoryDomainAndAvailability","domain","getErrorMessageForRepositoryDomainValidation","prompt","validateRepositoryDomain","path","fs","getRandomRepositoryDomain","globby","START_SCRIPT_KEY","START_SCRIPT_VALUE"],"mappings":"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"}
@@ -113,12 +113,16 @@ ${chalk.bgGreen(` ${chalk.bold.white("Slice Machine")} `)} ${chalk.dim("→")} I
113
113
  Getting help ${chalk.cyan("https://community.prismic.io")}
114
114
 
115
115
  GETTING STARTED
116
- Start Slice Machine ${chalk.cyan(((_a = this.context.projectInitialization) == null ? void 0 : _a.patchedScript) ? await getRunScriptCommand({
116
+ Run Slice Machine ${chalk.cyan(((_a = this.context.projectInitialization) == null ? void 0 : _a.patchedScript) ? await getRunScriptCommand({
117
117
  agent: this.context.packageManager || "npm",
118
118
  script: "slicemachine"
119
119
  }) : await getExecuteCommand({
120
120
  agent: this.context.packageManager || "npm",
121
121
  script: "start-slicemachine"
122
+ }))}
123
+ Run your project ${chalk.cyan(await getRunScriptCommand({
124
+ agent: this.context.packageManager || "npm",
125
+ script: "dev"
122
126
  }))}`);
123
127
  } catch {
124
128
  }
@@ -498,11 +502,13 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
498
502
  }
499
503
  return listr([
500
504
  {
501
- title: "Starting plugin runner...",
505
+ // TODO: Revert when plugin are introduced to users
506
+ // title: "Starting plugin runner...",
507
+ title: "Loading adapter...",
502
508
  task: async (_2, task) => {
503
509
  await this.manager.plugins.initPlugins();
504
- task.title = "Started plugin runner";
505
- parentTask.title = `${parentTask.title} and started plugin runner`;
510
+ task.title = "Loaded adapter";
511
+ parentTask.title = `${parentTask.title} and loaded adapter`;
506
512
  }
507
513
  }
508
514
  ]);
@@ -698,7 +704,9 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
698
704
  initializePlugins() {
699
705
  return listrRun([
700
706
  {
701
- title: "Initializing plugins...",
707
+ // TODO: Revert when plugin are introduced to users
708
+ // title: "Initializing plugins...",
709
+ title: "Initializing adapter...",
702
710
  task: async (_, task) => {
703
711
  const updateOutput = (data) => {
704
712
  if (data instanceof Buffer) {
@@ -710,7 +718,7 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""));
710
718
  await this.manager.project.initProject({
711
719
  log: updateOutput
712
720
  });
713
- task.title = "Initialized plugins";
721
+ task.title = "Initialized adapter";
714
722
  }
715
723
  }
716
724
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"SliceMachineInitProcess.js","sources":["../../src/SliceMachineInitProcess.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport chalk from \"chalk\";\nimport type { ExecaChildProcess } from \"execa\";\nimport open from \"open\";\nimport logSymbols from \"log-symbols\";\nimport { globby } from \"globby\";\n\nimport {\n\tcreateSliceMachineManager,\n\tPrismicUserProfile,\n\tPrismicRepository,\n\tSliceMachineManager,\n\tPackageManager,\n} from \"@slicemachine/manager\";\n\nimport pkg from \"../package.json\";\nimport { detectFramework, Framework } from \"./lib/framework\";\nimport { getRunScriptCommand } from \"./lib/getRunScriptCommand\";\nimport { getExecuteCommand } from \"./lib/getExecuteCommand\";\nimport {\n\tgetRandomRepositoryDomain,\n\tformatRepositoryDomain,\n\tvalidateRepositoryDomain,\n\tvalidateRepositoryDomainAndAvailability,\n\tgetErrorMessageForRepositoryDomainValidation,\n} from \"./lib/repositoryDomain\";\nimport { listr, listrRun } from \"./lib/listr\";\nimport { prompt } from \"./lib/prompt\";\nimport { assertExists } from \"./lib/assertExists\";\nimport { START_SCRIPT_KEY, START_SCRIPT_VALUE } from \"./constants\";\n\nexport type SliceMachineInitProcessOptions = {\n\trepository?: string;\n\tpush?: boolean;\n\tpushSlices?: boolean;\n\tpushCustomTypes?: boolean;\n\tpushDocuments?: boolean;\n\tcwd?: string;\n} & Record<string, unknown>;\n\nconst DEFAULT_OPTIONS: SliceMachineInitProcessOptions = {\n\tpush: true,\n\tpushSlices: true,\n\tpushCustomTypes: true,\n\tpushDocuments: true,\n};\n\nexport const createSliceMachineInitProcess = (\n\toptions?: SliceMachineInitProcessOptions,\n): SliceMachineInitProcess => {\n\treturn new SliceMachineInitProcess(options);\n};\n\ntype SliceMachineInitProcessContext = {\n\tframework?: Framework;\n\tpackageManager?: PackageManager;\n\tinstallProcess?: ExecaChildProcess;\n\tuserProfile?: PrismicUserProfile;\n\tuserRepositories?: PrismicRepository[];\n\trepository?: {\n\t\tdomain: string;\n\t\texists: boolean;\n\t};\n\tprojectInitialization?: {\n\t\tpatchedScript?: boolean;\n\t};\n};\n\nexport class SliceMachineInitProcess {\n\tprotected options: SliceMachineInitProcessOptions;\n\tprotected manager: SliceMachineManager;\n\n\tprotected context: SliceMachineInitProcessContext;\n\n\tconstructor(options?: SliceMachineInitProcessOptions) {\n\t\tthis.options = { ...DEFAULT_OPTIONS, ...options };\n\t\tthis.manager = createSliceMachineManager({ cwd: options?.cwd });\n\n\t\tthis.context = {};\n\t}\n\n\tasync run(): Promise<void> {\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGray(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command started\\n`,\n\t\t);\n\n\t\tif (await this.manager.telemetry.checkIsTelemetryEnabled()) {\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(\n\t\t\t\t`${\n\t\t\t\t\tlogSymbols.info\n\t\t\t\t} We collect telemetry data to improve user experience.\\n Learn more: ${chalk.cyan(\n\t\t\t\t\t\"https://prismic.dev/slice-machine/telemetry\",\n\t\t\t\t)}\\n`,\n\t\t\t);\n\t\t}\n\t\tawait this.manager.telemetry.initTelemetry({\n\t\t\tappName: pkg.name,\n\t\t\tappVersion: pkg.version,\n\t\t});\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:start\",\n\t\t\trepository: this.options.repository,\n\t\t});\n\n\t\ttry {\n\t\t\tawait this.detectEnvironment();\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.framework,\n\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tawait this.beginCoreDependenciesInstallation();\n\t\t\tawait this.loginAndFetchUserData();\n\n\t\t\tif (this.options.repository) {\n\t\t\t\tawait this.useRepositoryFlag();\n\t\t\t} else {\n\t\t\t\tawait this.selectRepository();\n\t\t\t}\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.repository,\n\t\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tif (!this.context.repository.exists) {\n\t\t\t\tawait this.createNewRepository();\n\t\t\t}\n\n\t\t\tawait this.finishCoreDependenciesInstallation();\n\t\t\tawait this.upsertSliceMachineConfigurationAndStartPluginRunner();\n\t\t\tawait this.pushDataToPrismic();\n\t\t\tawait this.initializeProject();\n\t\t\tawait this.initializePlugins();\n\t\t} catch (error) {\n\t\t\tawait this.trackError(error);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework.prismicName,\n\t\t\trepository: this.context.repository.domain,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGreen(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command successful!`,\n\t\t);\n\n\t\ttry {\n\t\t\tconst apiEndpoints = this.manager.getAPIEndpoints();\n\t\t\tconst wroomHost = new URL(apiEndpoints.PrismicWroom).host;\n\n\t\t\tconst dashboardURL = new URL(\n\t\t\t\t`https://${this.context.repository.domain}.${wroomHost}`,\n\t\t\t)\n\t\t\t\t.toString()\n\t\t\t\t.replace(/\\/$/, \"\");\n\t\t\tconst apiURL = new URL(\n\t\t\t\t\"./api/v2\",\n\t\t\t\t`https://${this.context.repository.domain}.cdn.${wroomHost}`,\n\t\t\t).toString();\n\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`\n YOUR REPOSITORY\n Dashboard ${chalk.cyan(dashboardURL)}\n API ${chalk.cyan(apiURL)}\n\n RESOURCES\n Documentation ${chalk.cyan(\n\t\t\tthis.context.framework.prismicDocumentation,\n\t\t)}\n Getting help ${chalk.cyan(\"https://community.prismic.io\")}\n\n GETTING STARTED\n Start Slice Machine ${chalk.cyan(\n\t\t\tthis.context.projectInitialization?.patchedScript\n\t\t\t\t? await getRunScriptCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"slicemachine\",\n\t\t\t\t })\n\t\t\t\t: await getExecuteCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"start-slicemachine\",\n\t\t\t\t }),\n\t\t)}`);\n\t\t} catch {\n\t\t\t// Noop, it's only the final convenience messsage\n\t\t}\n\t}\n\n\tprotected trackError = (error: unknown): Promise<void> => {\n\t\t// Transform error to string and prevent hitting Segment 500kb API limit or sending ridiculously long trace\n\t\tconst safeError = (\n\t\t\terror instanceof Error ? error.message : `${error}`\n\t\t).slice(0, 512);\n\n\t\treturn this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework?.prismicName ?? \"unknown\",\n\t\t\trepository: this.context.repository?.domain,\n\t\t\tsuccess: false,\n\t\t\terror: safeError,\n\t\t});\n\t};\n\n\tprotected detectEnvironment(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Detecting environment...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting framework...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.framework = await detectFramework(\n\t\t\t\t\t\t\t\t\tthis.manager.cwd,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting package manager...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.packageManager =\n\t\t\t\t\t\t\t\t\tawait this.manager.project.detectPackageManager({\n\t\t\t\t\t\t\t\t\t\troot: this.manager.cwd,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = `Detected package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tparentTask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)} and package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected beginCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Beginning core dependencies installation...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\"Project package manager must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst { execaProcess } =\n\t\t\t\t\t\tawait this.manager.project.installDependencies({\n\t\t\t\t\t\t\tpackageManager: this.context.packageManager,\n\t\t\t\t\t\t\tdependencies: this.context.framework.devDependencies,\n\t\t\t\t\t\t\tdev: true,\n\t\t\t\t\t\t\t// Picked up later\n\t\t\t\t\t\t\tlog: () => {\n\t\t\t\t\t\t\t\t/* ... */\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Fail hard if process fails\n\t\t\t\t\texecaProcess.catch(async (error) => {\n\t\t\t\t\t\tconst [_, ...argv1n] = process.argv;\n\t\t\t\t\t\t// Command the user used\n\t\t\t\t\t\tlet tryAgainCommand = [process.argv0, ...argv1n].join(\" \");\n\n\t\t\t\t\t\t// If the `repository` option wasn't used AND the repository was selected/created\n\t\t\t\t\t\tif (!this.options.repository && this.context.repository) {\n\t\t\t\t\t\t\ttryAgainCommand = `${tryAgainCommand} --repository=${this.context.repository.domain}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.trackError(error.shortMessage);\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`\\n\\n${error.shortMessage}\\n${error.stderr}\\n\\n${\n\t\t\t\t\t\t\t\tlogSymbols.error\n\t\t\t\t\t\t\t} Dependency installation failed, try again with:\\n\\n ${chalk.gray(\n\t\t\t\t\t\t\t\t\"$\",\n\t\t\t\t\t\t\t)} ${chalk.cyan(tryAgainCommand)}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.installProcess = execaProcess;\n\n\t\t\t\t\ttask.title = `Began core dependencies installation with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)} ... (running in background)`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected loginAndFetchUserData(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Logging in to Prismic...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tparentTask.output = \"Validating session...\";\n\t\t\t\t\tconst isLoggedIn = await this.manager.user.checkIsLoggedIn();\n\n\t\t\t\t\tif (!isLoggedIn) {\n\t\t\t\t\t\tparentTask.output = \"Press any key to open the browser to login...\";\n\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\tconst initialRawMode = !!process.stdin.isRaw;\n\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(true);\n\t\t\t\t\t\t\tprocess.stdin.once(\"data\", (data: Buffer) => {\n\t\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(initialRawMode);\n\t\t\t\t\t\t\t\tprocess.stdin.pause();\n\t\t\t\t\t\t\t\tresolve(data.toString(\"utf-8\"));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.output = \"Browser opened, waiting for you to login...\";\n\t\t\t\t\t\tconst { port, url } = await this.manager.user.getLoginSessionInfo();\n\t\t\t\t\t\tawait this.manager.user.nodeLoginSession({\n\t\t\t\t\t\t\tport,\n\t\t\t\t\t\t\tonListenCallback() {\n\t\t\t\t\t\t\t\topen(url);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tparentTask.output = \"\";\n\t\t\t\t\tparentTask.title = `Logged in`;\n\n\t\t\t\t\treturn listr(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user profile...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userProfile =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.user.getProfile();\n\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.identify({\n\t\t\t\t\t\t\t\t\t\tuserID: this.context.userProfile.shortId,\n\t\t\t\t\t\t\t\t\t\tintercomHash: this.context.userProfile.intercomHash,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.track({\n\t\t\t\t\t\t\t\t\t\tevent: \"command:init:identify\",\n\t\t\t\t\t\t\t\t\t\trepository: this.options.repository,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tparentTask.title = `Logged in as ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\tthis.context.userProfile?.email,\n\t\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user profile\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user repositories...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userRepositories =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.readAll();\n\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user repositories\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ concurrent: true },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected useRepositoryFlag(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Flag ${chalk.cyan(\"repository\")} used, validating input...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.userRepositories,\n\t\t\t\t\t\t\"User repositories must be available through context to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.options.repository,\n\t\t\t\t\t\t\"Flag `repository` must be set to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst domain = formatRepositoryDomain(this.options.repository);\n\n\t\t\t\t\tconst maybeRepository = this.context.userRepositories.find(\n\t\t\t\t\t\t(repository) => repository.domain === domain,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (maybeRepository) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!this.manager.prismicRepository.hasWriteAccess(maybeRepository)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Cannot run init command with repository ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tmaybeRepository.domain,\n\t\t\t\t\t\t\t\t)}: you are not a developer or admin of this repository`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\t\t\tvalidation,\n\t\t\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (errorMessage) {\n\t\t\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Selected repository ${chalk.cyan(\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t)} (flag ${chalk.cyan(\"repository\")} used)`;\n\n\t\t\t\t\tthis.context.repository = {\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t\texists: !!maybeRepository,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected async selectRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `selectRepository`\",\n\t\t);\n\n\t\tif (this.context.userRepositories.length) {\n\t\t\tawait this.trySelectExistingRepository();\n\t\t}\n\n\t\tif (!this.context.repository) {\n\t\t\tawait this.selectNewRepository();\n\t\t}\n\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t);\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`${logSymbols.success} Selected repository ${chalk.cyan(\n\t\t\t\tthis.context.repository.domain,\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tprotected async trySelectExistingRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `trySelectExistingRepository`\",\n\t\t);\n\n\t\tconst { maybeDomain } = await prompt<string, \"maybeDomain\">({\n\t\t\ttype: \"select\",\n\t\t\tname: \"maybeDomain\",\n\t\t\tmessage: \"Pick a repository to connect to or choose to create a new one\",\n\t\t\twarn: \"You are not a developer or admin of this repository\",\n\t\t\tchoices: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CREATE NEW\",\n\t\t\t\t\tdescription: \"Create a new Prismic repository\\n\",\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t},\n\t\t\t\t...this.context.userRepositories\n\t\t\t\t\t.map((repository) => {\n\t\t\t\t\t\tconst hasWriteAccess =\n\t\t\t\t\t\t\tthis.manager.prismicRepository.hasWriteAccess(repository);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: `${repository.domain}${\n\t\t\t\t\t\t\t\thasWriteAccess ? \"\" : \" (Unauthorized)\"\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\tdescription: `Connect to ${chalk.cyan(repository.domain)}`,\n\t\t\t\t\t\t\tvalue: repository.domain,\n\t\t\t\t\t\t\tdisabled: !hasWriteAccess,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.sort((a, b) => (a.value > b.value ? 1 : -1)),\n\t\t\t],\n\t\t});\n\n\t\tif (maybeDomain) {\n\t\t\tthis.context.repository = {\n\t\t\t\tdomain: maybeDomain,\n\t\t\t\texists: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected async selectNewRepository(): Promise<void> {\n\t\tlet suggestedName = \"\";\n\n\t\t// TODO: Improve concurrency\n\t\tconst trySuggestName = async (name: string): Promise<string | void> => {\n\t\t\tif (name) {\n\t\t\t\tconst formattedName = formatRepositoryDomain(name);\n\n\t\t\t\tif (\n\t\t\t\t\t!validateRepositoryDomain({ domain: formattedName }).hasErrors &&\n\t\t\t\t\t!(await this.manager.prismicRepository.checkExists({\n\t\t\t\t\t\tdomain: formattedName,\n\t\t\t\t\t}))\n\t\t\t\t) {\n\t\t\t\t\treturn formattedName;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// 1. Try to suggest name after package name\n\t\ttry {\n\t\t\tconst pkgJSONPath = path.join(this.manager.cwd, \"package.json\");\n\t\t\tconst pkg = JSON.parse(await fs.readFile(pkgJSONPath, \"utf-8\"));\n\n\t\t\tconst maybeSuggestion = await trySuggestName(pkg.name);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Noop\n\t\t}\n\n\t\t// 2. Try to suggest name after directory name\n\t\tif (!suggestedName) {\n\t\t\tconst maybeSuggestion = await trySuggestName(\n\t\t\t\tpath.basename(this.manager.cwd),\n\t\t\t);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Use random name\n\t\tif (!suggestedName) {\n\t\t\tdo {\n\t\t\t\tsuggestedName = getRandomRepositoryDomain();\n\t\t\t} while (\n\t\t\t\tawait this.manager.prismicRepository.checkExists({\n\t\t\t\t\tdomain: suggestedName,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tconst { domain } = await prompt<string, \"domain\">({\n\t\t\ttype: \"text\",\n\t\t\tname: \"domain\",\n\t\t\t// Overriden by the `onRender` function, just used as a fallback\n\t\t\tmessage: \"Choose a name for your Prismic repository\",\n\t\t\tinitial: suggestedName,\n\t\t\tonRender() {\n\t\t\t\tconst rawDomain = this.value || this.initial || \"\";\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = validateRepositoryDomain({ domain });\n\n\t\t\t\tconst minRule = validation.LessThan4\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"4 characters long or more\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"4 characters long or more\")}`;\n\n\t\t\t\tconst maxRule = validation.MoreThan30\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"30 characters long or less\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"30 characters long or less\")}`;\n\n\t\t\t\tthis.msg = chalk.reset(\n\t\t\t\t\t`\nChoose a name for your Prismic repository\n\n NAMING RULES\n ${minRule}\n ${maxRule}\n 3. Name will be ${chalk.cyan(\"kebab-cased\")} automatically\n\n CONSIDERATIONS\n 1. Once picked, your repository name ${chalk.cyan(\"cannot be changed\")}\n 2. A ${chalk.cyan(\n\t\t\t\"display name\",\n\t\t)} for the repository can be configured later on\n\n PREVIEW\n Dashboard ${chalk.cyan(`https://${domain}.prismic.io`)}\n API ${chalk.cyan(`https://${domain}.cdn.prismic.io/api/v2`)}\n\n${chalk.cyan(\"?\")} Your Prismic repository name`.replace(\"\\n\", \"\"),\n\t\t\t\t);\n\t\t\t},\n\t\t\tvalidate: async (rawDomain: string) => {\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\tdomain,\n\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t});\n\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\tvalidation,\n\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t});\n\n\t\t\t\treturn errorMessage || true;\n\t\t\t},\n\t\t\tformat: (value) => {\n\t\t\t\treturn formatRepositoryDomain(value);\n\t\t\t},\n\t\t});\n\n\t\t// Clear extra lines\n\t\tprocess.stdout.moveCursor?.(0, -16);\n\t\tprocess.stdout.clearScreenDown?.();\n\n\t\tthis.context.repository = {\n\t\t\tdomain,\n\t\t\texists: false,\n\t\t};\n\t}\n\n\tprotected createNewRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t);\n\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Creating new repository ${chalk.cyan(\n\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this.manager.prismicRepository.create({\n\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\tframework: this.context.framework.prismicName,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.repository.exists = true;\n\t\t\t\t\ttask.title = `Created new repository ${chalk.cyan(\n\t\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected finishCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Finishing core dependencies installation with ${chalk.cyan(\n\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.installProcess,\n\t\t\t\t\t\t\"Initial dependencies installation process must be available through context to run `finishCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst updateOutput = (data: Buffer | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't clutter console with logs when process is non TTY (CI, etc.)\n\t\t\t\t\tif (process.stdout.isTTY || process.env.NODE_ENV === \"test\") {\n\t\t\t\t\t\tthis.context.installProcess.stdout?.on(\"data\", updateOutput);\n\t\t\t\t\t}\n\t\t\t\t\tthis.context.installProcess.stderr?.on(\"data\", updateOutput);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.context.installProcess;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Error catching happens when then process is started ealier so\n\t\t\t\t\t\t * that all install errors, earlier and presents, can be catched.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Here, we force the task to wait so that it is neither marked as\n\t\t\t\t\t\t * done or has the opportunity to handle the error itself.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t// If for whatever reason the process is not exited by now, we still throw the error\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 5000));\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Installed core dependencies with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected upsertSliceMachineConfigurationAndStartPluginRunner(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Resolving Slice Machine configuration...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet sliceMachineConfigExists = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.manager.project.getSliceMachineConfigPath();\n\t\t\t\t\t\tsliceMachineConfigExists = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// noop, config does not exists, we'll create it\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sliceMachineConfigExists) {\n\t\t\t\t\t\tparentTask.title = \"Updating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst config = await this.manager.project.getSliceMachineConfig();\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\t...config,\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tparentTask.title = \"Updated Slice Machine configuration\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentTask.title = \"Creating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst sliceMachineConfigPath =\n\t\t\t\t\t\t\tawait this.manager.project.suggestSliceMachineConfigPath();\n\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t\tlibraries: [\"./slices\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpath: sliceMachineConfigPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.title = \"Created Slice Machine configuration\";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn listr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Starting plugin runner...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tawait this.manager.plugins.initPlugins();\n\t\t\t\t\t\t\t\ttask.title = \"Started plugin runner\";\n\t\t\t\t\t\t\t\tparentTask.title = `${parentTask.title} and started plugin runner`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected pushDataToPrismic(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Pushing data to Prismic...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing slices...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushSlices) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-slices used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { libraries, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.slices.readAllSliceLibraries();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read slice libraries: ${errors.join(\", \")}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst slices: { libraryID: string; sliceID: string }[] = [];\n\t\t\t\t\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\t\t\t\t\tif (library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\tfor (const sliceID of library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\t\tslices.push({\n\t\t\t\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\t\t\t\tsliceID,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (slices.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No slice to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushing slices... (initializing ACL)\";\n\t\t\t\t\t\t\t\tawait this.manager.screenshots.initS3ACL();\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (0/${slices.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tslices.map(async (slice) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.slices.pushSlice(slice);\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (${pushed}/${slices.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all slices\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing custom types...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushCustomTypes) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-custom-types used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { ids, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.readCustomTypeLibrary();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read custom type libraries: ${errors.join(\n\t\t\t\t\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ids || ids.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No custom type to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (0/${ids.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tids.map(async (id) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.pushCustomType({ id });\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (${pushed}/${ids.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all custom types\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing documents...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushDocuments) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-documents used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\t\t\t\"Repository selection must be available through context to run `pushDataToPrismic`\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.access(documentsDirectoryPath);\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst signaturePath = path.resolve(\n\t\t\t\t\t\t\t\t\tdocumentsDirectoryPath,\n\t\t\t\t\t\t\t\t\t\"index.json\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst rawSignature = await fs.readFile(signaturePath, \"utf-8\");\n\t\t\t\t\t\t\t\tconst signature: string = JSON.parse(rawSignature).signature;\n\n\t\t\t\t\t\t\t\tconst documentsGlob = await globby(\"*/*.json\", {\n\t\t\t\t\t\t\t\t\tcwd: documentsDirectoryPath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (documentsGlob.length === 0) {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Replace `unknown` with a Prismic document type.\n\t\t\t\t\t\t\t\t// The exact format is not know at this time, hence the `unknown`.\n\t\t\t\t\t\t\t\tconst documents: Record<string, unknown> = {};\n\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tdocumentsGlob.map(async (documentPath) => {\n\t\t\t\t\t\t\t\t\t\tconst filename = path.basename(documentPath, \".json\");\n\t\t\t\t\t\t\t\t\t\tconst fileContent = await fs.readFile(\n\t\t\t\t\t\t\t\t\t\t\tpath.resolve(documentsDirectoryPath, documentPath),\n\t\t\t\t\t\t\t\t\t\t\t\"utf-8\",\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// TOOD: Validate the contents of the JSON file and skip on invalid documents.\n\t\t\t\t\t\t\t\t\t\t\tconst parsedContents = JSON.parse(fileContent);\n\n\t\t\t\t\t\t\t\t\t\t\tdocuments[filename] = parsedContents;\n\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t`Skipped document due to its invalid format: ${documentPath}`,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.pushDocuments({\n\t\t\t\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\t\t\t\tdocuments,\n\t\t\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all documents\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Cleaning up data push artifacts\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.rm(documentsDirectoryPath, {\n\t\t\t\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Noop, it's not that big of a deal if we cannot delete this directory\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Cleaned up data push artifacts\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializeProject(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing project...\",\n\t\t\t\ttask: async (_, parentTask) =>\n\t\t\t\t\t// We return another Listr instance in the event we have additional task to perform to initialize the project\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: `Patching ${chalk.cyan(\"package.json\")} scripts...`,\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst pkgPath = path.join(this.manager.cwd, \"package.json\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst pkgRaw = await fs.readFile(pkgPath, \"utf-8\");\n\t\t\t\t\t\t\t\t\tconst pkg = JSON.parse(pkgRaw);\n\n\t\t\t\t\t\t\t\t\tpkg.scripts ||= {};\n\n\t\t\t\t\t\t\t\t\tif (!pkg.scripts[START_SCRIPT_KEY]) {\n\t\t\t\t\t\t\t\t\t\tpkg.scripts[START_SCRIPT_KEY] = START_SCRIPT_VALUE;\n\n\t\t\t\t\t\t\t\t\t\t// Cheap indent detection based on https://github.com/sindresorhus/detect-indent (simplified because we're only dealing with JSON here)\n\t\t\t\t\t\t\t\t\t\tconst firstIndent = pkgRaw\n\t\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t\t.find((line) => line.match(/^(?:( )+|\\t+)/));\n\t\t\t\t\t\t\t\t\t\tconst indent = firstIndent?.match(/^(?:( )+|\\t+)/)?.[0];\n\n\t\t\t\t\t\t\t\t\t\tawait fs.writeFile(\n\t\t\t\t\t\t\t\t\t\t\tpkgPath,\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t\t\tindent && indent !== \" \" ? indent : \" \",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t!pkg.scripts[\"slicemachine\"].startsWith(START_SCRIPT_VALUE)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Script already exists\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\ttask.title = `Could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts (warning)`;\n\t\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts)`;\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.context.projectInitialization ||= {};\n\t\t\t\t\t\t\t\tthis.context.projectInitialization.patchedScript = true;\n\n\t\t\t\t\t\t\t\ttask.title = `Patched ${chalk.cyan(\"package.json\")} scripts`;\n\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (patched ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t)} scripts)`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializePlugins(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing plugins...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tconst updateOutput = (data: Buffer | string | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t} else if (typeof data === \"string\") {\n\t\t\t\t\t\t\ttask.output = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tawait this.manager.project.initProject({\n\t\t\t\t\t\tlog: updateOutput,\n\t\t\t\t\t});\n\n\t\t\t\t\ttask.title = \"Initialized plugins\";\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n}\n"],"names":["_","_b","_a","domain","pkg"],"mappings":"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"}
1
+ {"version":3,"file":"SliceMachineInitProcess.js","sources":["../../src/SliceMachineInitProcess.ts"],"sourcesContent":["import * as fs from \"node:fs/promises\";\nimport * as path from \"node:path\";\n\nimport chalk from \"chalk\";\nimport type { ExecaChildProcess } from \"execa\";\nimport open from \"open\";\nimport logSymbols from \"log-symbols\";\nimport { globby } from \"globby\";\n\nimport {\n\tcreateSliceMachineManager,\n\tPrismicUserProfile,\n\tPrismicRepository,\n\tSliceMachineManager,\n\tPackageManager,\n} from \"@slicemachine/manager\";\n\nimport pkg from \"../package.json\";\nimport { detectFramework, Framework } from \"./lib/framework\";\nimport { getRunScriptCommand } from \"./lib/getRunScriptCommand\";\nimport { getExecuteCommand } from \"./lib/getExecuteCommand\";\nimport {\n\tgetRandomRepositoryDomain,\n\tformatRepositoryDomain,\n\tvalidateRepositoryDomain,\n\tvalidateRepositoryDomainAndAvailability,\n\tgetErrorMessageForRepositoryDomainValidation,\n} from \"./lib/repositoryDomain\";\nimport { listr, listrRun } from \"./lib/listr\";\nimport { prompt } from \"./lib/prompt\";\nimport { assertExists } from \"./lib/assertExists\";\nimport { START_SCRIPT_KEY, START_SCRIPT_VALUE } from \"./constants\";\n\nexport type SliceMachineInitProcessOptions = {\n\trepository?: string;\n\tpush?: boolean;\n\tpushSlices?: boolean;\n\tpushCustomTypes?: boolean;\n\tpushDocuments?: boolean;\n\tcwd?: string;\n} & Record<string, unknown>;\n\nconst DEFAULT_OPTIONS: SliceMachineInitProcessOptions = {\n\tpush: true,\n\tpushSlices: true,\n\tpushCustomTypes: true,\n\tpushDocuments: true,\n};\n\nexport const createSliceMachineInitProcess = (\n\toptions?: SliceMachineInitProcessOptions,\n): SliceMachineInitProcess => {\n\treturn new SliceMachineInitProcess(options);\n};\n\ntype SliceMachineInitProcessContext = {\n\tframework?: Framework;\n\tpackageManager?: PackageManager;\n\tinstallProcess?: ExecaChildProcess;\n\tuserProfile?: PrismicUserProfile;\n\tuserRepositories?: PrismicRepository[];\n\trepository?: {\n\t\tdomain: string;\n\t\texists: boolean;\n\t};\n\tprojectInitialization?: {\n\t\tpatchedScript?: boolean;\n\t};\n};\n\nexport class SliceMachineInitProcess {\n\tprotected options: SliceMachineInitProcessOptions;\n\tprotected manager: SliceMachineManager;\n\n\tprotected context: SliceMachineInitProcessContext;\n\n\tconstructor(options?: SliceMachineInitProcessOptions) {\n\t\tthis.options = { ...DEFAULT_OPTIONS, ...options };\n\t\tthis.manager = createSliceMachineManager({ cwd: options?.cwd });\n\n\t\tthis.context = {};\n\t}\n\n\tasync run(): Promise<void> {\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGray(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command started\\n`,\n\t\t);\n\n\t\tif (await this.manager.telemetry.checkIsTelemetryEnabled()) {\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(\n\t\t\t\t`${\n\t\t\t\t\tlogSymbols.info\n\t\t\t\t} We collect telemetry data to improve user experience.\\n Learn more: ${chalk.cyan(\n\t\t\t\t\t\"https://prismic.dev/slice-machine/telemetry\",\n\t\t\t\t)}\\n`,\n\t\t\t);\n\t\t}\n\t\tawait this.manager.telemetry.initTelemetry({\n\t\t\tappName: pkg.name,\n\t\t\tappVersion: pkg.version,\n\t\t});\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:start\",\n\t\t\trepository: this.options.repository,\n\t\t});\n\n\t\ttry {\n\t\t\tawait this.detectEnvironment();\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.framework,\n\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tawait this.beginCoreDependenciesInstallation();\n\t\t\tawait this.loginAndFetchUserData();\n\n\t\t\tif (this.options.repository) {\n\t\t\t\tawait this.useRepositoryFlag();\n\t\t\t} else {\n\t\t\t\tawait this.selectRepository();\n\t\t\t}\n\n\t\t\tassertExists(\n\t\t\t\tthis.context.repository,\n\t\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t\t);\n\n\t\t\tif (!this.context.repository.exists) {\n\t\t\t\tawait this.createNewRepository();\n\t\t\t}\n\n\t\t\tawait this.finishCoreDependenciesInstallation();\n\t\t\tawait this.upsertSliceMachineConfigurationAndStartPluginRunner();\n\t\t\tawait this.pushDataToPrismic();\n\t\t\tawait this.initializeProject();\n\t\t\tawait this.initializePlugins();\n\t\t} catch (error) {\n\t\t\tawait this.trackError(error);\n\n\t\t\tthrow error;\n\t\t}\n\n\t\tawait this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework.prismicName,\n\t\t\trepository: this.context.repository.domain,\n\t\t\tsuccess: true,\n\t\t});\n\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`\\n${chalk.bgGreen(` ${chalk.bold.white(\"Slice Machine\")} `)} ${chalk.dim(\n\t\t\t\t\"→\",\n\t\t\t)} Init command successful!`,\n\t\t);\n\n\t\ttry {\n\t\t\tconst apiEndpoints = this.manager.getAPIEndpoints();\n\t\t\tconst wroomHost = new URL(apiEndpoints.PrismicWroom).host;\n\n\t\t\tconst dashboardURL = new URL(\n\t\t\t\t`https://${this.context.repository.domain}.${wroomHost}`,\n\t\t\t)\n\t\t\t\t.toString()\n\t\t\t\t.replace(/\\/$/, \"\");\n\t\t\tconst apiURL = new URL(\n\t\t\t\t\"./api/v2\",\n\t\t\t\t`https://${this.context.repository.domain}.cdn.${wroomHost}`,\n\t\t\t).toString();\n\n\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.log(`\n YOUR REPOSITORY\n Dashboard ${chalk.cyan(dashboardURL)}\n API ${chalk.cyan(apiURL)}\n\n RESOURCES\n Documentation ${chalk.cyan(\n\t\t\tthis.context.framework.prismicDocumentation,\n\t\t)}\n Getting help ${chalk.cyan(\"https://community.prismic.io\")}\n\n GETTING STARTED\n Run Slice Machine ${chalk.cyan(\n\t\t\tthis.context.projectInitialization?.patchedScript\n\t\t\t\t? await getRunScriptCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"slicemachine\",\n\t\t\t\t })\n\t\t\t\t: await getExecuteCommand({\n\t\t\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\t\t\tscript: \"start-slicemachine\",\n\t\t\t\t }),\n\t\t)}\n Run your project ${chalk.cyan(\n\t\t\tawait getRunScriptCommand({\n\t\t\t\tagent: this.context.packageManager || \"npm\",\n\t\t\t\tscript: \"dev\",\n\t\t\t}),\n\t\t)}`);\n\t\t} catch {\n\t\t\t// Noop, it's only the final convenience messsage\n\t\t}\n\t}\n\n\tprotected trackError = (error: unknown): Promise<void> => {\n\t\t// Transform error to string and prevent hitting Segment 500kb API limit or sending ridiculously long trace\n\t\tconst safeError = (\n\t\t\terror instanceof Error ? error.message : `${error}`\n\t\t).slice(0, 512);\n\n\t\treturn this.manager.telemetry.track({\n\t\t\tevent: \"command:init:end\",\n\t\t\tframework: this.context.framework?.prismicName ?? \"unknown\",\n\t\t\trepository: this.context.repository?.domain,\n\t\t\tsuccess: false,\n\t\t\terror: safeError,\n\t\t});\n\t};\n\n\tprotected detectEnvironment(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Detecting environment...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting framework...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.framework = await detectFramework(\n\t\t\t\t\t\t\t\t\tthis.manager.cwd,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Detecting package manager...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tthis.context.packageManager =\n\t\t\t\t\t\t\t\t\tawait this.manager.project.detectPackageManager({\n\t\t\t\t\t\t\t\t\t\troot: this.manager.cwd,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = `Detected package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\t\t\t\"Project framework must be available through context to proceed\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tparentTask.title = `Detected framework ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.framework.name,\n\t\t\t\t\t\t\t\t)} and package manager ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected beginCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Beginning core dependencies installation...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t\t\"Project package manager must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `beginCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst { execaProcess } =\n\t\t\t\t\t\tawait this.manager.project.installDependencies({\n\t\t\t\t\t\t\tpackageManager: this.context.packageManager,\n\t\t\t\t\t\t\tdependencies: this.context.framework.devDependencies,\n\t\t\t\t\t\t\tdev: true,\n\t\t\t\t\t\t\t// Picked up later\n\t\t\t\t\t\t\tlog: () => {\n\t\t\t\t\t\t\t\t/* ... */\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\n\t\t\t\t\t// Fail hard if process fails\n\t\t\t\t\texecaProcess.catch(async (error) => {\n\t\t\t\t\t\tconst [_, ...argv1n] = process.argv;\n\t\t\t\t\t\t// Command the user used\n\t\t\t\t\t\tlet tryAgainCommand = [process.argv0, ...argv1n].join(\" \");\n\n\t\t\t\t\t\t// If the `repository` option wasn't used AND the repository was selected/created\n\t\t\t\t\t\tif (!this.options.repository && this.context.repository) {\n\t\t\t\t\t\t\ttryAgainCommand = `${tryAgainCommand} --repository=${this.context.repository.domain}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tawait this.trackError(error.shortMessage);\n\t\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\t`\\n\\n${error.shortMessage}\\n${error.stderr}\\n\\n${\n\t\t\t\t\t\t\t\tlogSymbols.error\n\t\t\t\t\t\t\t} Dependency installation failed, try again with:\\n\\n ${chalk.gray(\n\t\t\t\t\t\t\t\t\"$\",\n\t\t\t\t\t\t\t)} ${chalk.cyan(tryAgainCommand)}`,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tprocess.exit(1);\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.installProcess = execaProcess;\n\n\t\t\t\t\ttask.title = `Began core dependencies installation with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)} ... (running in background)`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected loginAndFetchUserData(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Logging in to Prismic...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tparentTask.output = \"Validating session...\";\n\t\t\t\t\tconst isLoggedIn = await this.manager.user.checkIsLoggedIn();\n\n\t\t\t\t\tif (!isLoggedIn) {\n\t\t\t\t\t\tparentTask.output = \"Press any key to open the browser to login...\";\n\t\t\t\t\t\tawait new Promise((resolve) => {\n\t\t\t\t\t\t\tconst initialRawMode = !!process.stdin.isRaw;\n\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(true);\n\t\t\t\t\t\t\tprocess.stdin.once(\"data\", (data: Buffer) => {\n\t\t\t\t\t\t\t\tprocess.stdin.setRawMode?.(initialRawMode);\n\t\t\t\t\t\t\t\tprocess.stdin.pause();\n\t\t\t\t\t\t\t\tresolve(data.toString(\"utf-8\"));\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.output = \"Browser opened, waiting for you to login...\";\n\t\t\t\t\t\tconst { port, url } = await this.manager.user.getLoginSessionInfo();\n\t\t\t\t\t\tawait this.manager.user.nodeLoginSession({\n\t\t\t\t\t\t\tport,\n\t\t\t\t\t\t\tonListenCallback() {\n\t\t\t\t\t\t\t\topen(url);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\tparentTask.output = \"\";\n\t\t\t\t\tparentTask.title = `Logged in`;\n\n\t\t\t\t\treturn listr(\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user profile...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userProfile =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.user.getProfile();\n\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.identify({\n\t\t\t\t\t\t\t\t\t\tuserID: this.context.userProfile.shortId,\n\t\t\t\t\t\t\t\t\t\tintercomHash: this.context.userProfile.intercomHash,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\tawait this.manager.telemetry.track({\n\t\t\t\t\t\t\t\t\t\tevent: \"command:init:identify\",\n\t\t\t\t\t\t\t\t\t\trepository: this.options.repository,\n\t\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\t\tparentTask.title = `Logged in as ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\tthis.context.userProfile?.email,\n\t\t\t\t\t\t\t\t\t)}`;\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user profile\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttitle: \"Fetching user repositories...\",\n\t\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\t\tthis.context.userRepositories =\n\t\t\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.readAll();\n\n\t\t\t\t\t\t\t\t\ttask.title = \"Fetched user repositories\";\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t\t{ concurrent: true },\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected useRepositoryFlag(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Flag ${chalk.cyan(\"repository\")} used, validating input...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.userRepositories,\n\t\t\t\t\t\t\"User repositories must be available through context to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.options.repository,\n\t\t\t\t\t\t\"Flag `repository` must be set to run `useRepositoryFlag`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst domain = formatRepositoryDomain(this.options.repository);\n\n\t\t\t\t\tconst maybeRepository = this.context.userRepositories.find(\n\t\t\t\t\t\t(repository) => repository.domain === domain,\n\t\t\t\t\t);\n\n\t\t\t\t\tif (maybeRepository) {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!this.manager.prismicRepository.hasWriteAccess(maybeRepository)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`Cannot run init command with repository ${chalk.cyan(\n\t\t\t\t\t\t\t\t\tmaybeRepository.domain,\n\t\t\t\t\t\t\t\t)}: you are not a developer or admin of this repository`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t\t\t});\n\t\t\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\t\t\tvalidation,\n\t\t\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tif (errorMessage) {\n\t\t\t\t\t\t\tthrow new Error(errorMessage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Selected repository ${chalk.cyan(\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t)} (flag ${chalk.cyan(\"repository\")} used)`;\n\n\t\t\t\t\tthis.context.repository = {\n\t\t\t\t\t\tdomain,\n\t\t\t\t\t\texists: !!maybeRepository,\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected async selectRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `selectRepository`\",\n\t\t);\n\n\t\tif (this.context.userRepositories.length) {\n\t\t\tawait this.trySelectExistingRepository();\n\t\t}\n\n\t\tif (!this.context.repository) {\n\t\t\tawait this.selectNewRepository();\n\t\t}\n\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to proceed\",\n\t\t);\n\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.log(\n\t\t\t`${logSymbols.success} Selected repository ${chalk.cyan(\n\t\t\t\tthis.context.repository.domain,\n\t\t\t)}`,\n\t\t);\n\t}\n\n\tprotected async trySelectExistingRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.userRepositories,\n\t\t\t\"User repositories must be available through context to run `trySelectExistingRepository`\",\n\t\t);\n\n\t\tconst { maybeDomain } = await prompt<string, \"maybeDomain\">({\n\t\t\ttype: \"select\",\n\t\t\tname: \"maybeDomain\",\n\t\t\tmessage: \"Pick a repository to connect to or choose to create a new one\",\n\t\t\twarn: \"You are not a developer or admin of this repository\",\n\t\t\tchoices: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CREATE NEW\",\n\t\t\t\t\tdescription: \"Create a new Prismic repository\\n\",\n\t\t\t\t\tvalue: \"\",\n\t\t\t\t},\n\t\t\t\t...this.context.userRepositories\n\t\t\t\t\t.map((repository) => {\n\t\t\t\t\t\tconst hasWriteAccess =\n\t\t\t\t\t\t\tthis.manager.prismicRepository.hasWriteAccess(repository);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttitle: `${repository.domain}${\n\t\t\t\t\t\t\t\thasWriteAccess ? \"\" : \" (Unauthorized)\"\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t\t\tdescription: `Connect to ${chalk.cyan(repository.domain)}`,\n\t\t\t\t\t\t\tvalue: repository.domain,\n\t\t\t\t\t\t\tdisabled: !hasWriteAccess,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.sort((a, b) => (a.value > b.value ? 1 : -1)),\n\t\t\t],\n\t\t});\n\n\t\tif (maybeDomain) {\n\t\t\tthis.context.repository = {\n\t\t\t\tdomain: maybeDomain,\n\t\t\t\texists: true,\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected async selectNewRepository(): Promise<void> {\n\t\tlet suggestedName = \"\";\n\n\t\t// TODO: Improve concurrency\n\t\tconst trySuggestName = async (name: string): Promise<string | void> => {\n\t\t\tif (name) {\n\t\t\t\tconst formattedName = formatRepositoryDomain(name);\n\n\t\t\t\tif (\n\t\t\t\t\t!validateRepositoryDomain({ domain: formattedName }).hasErrors &&\n\t\t\t\t\t!(await this.manager.prismicRepository.checkExists({\n\t\t\t\t\t\tdomain: formattedName,\n\t\t\t\t\t}))\n\t\t\t\t) {\n\t\t\t\t\treturn formattedName;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// 1. Try to suggest name after package name\n\t\ttry {\n\t\t\tconst pkgJSONPath = path.join(this.manager.cwd, \"package.json\");\n\t\t\tconst pkg = JSON.parse(await fs.readFile(pkgJSONPath, \"utf-8\"));\n\n\t\t\tconst maybeSuggestion = await trySuggestName(pkg.name);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t} catch {\n\t\t\t// Noop\n\t\t}\n\n\t\t// 2. Try to suggest name after directory name\n\t\tif (!suggestedName) {\n\t\t\tconst maybeSuggestion = await trySuggestName(\n\t\t\t\tpath.basename(this.manager.cwd),\n\t\t\t);\n\t\t\tif (maybeSuggestion) {\n\t\t\t\tsuggestedName = maybeSuggestion;\n\t\t\t}\n\t\t}\n\n\t\t// 3. Use random name\n\t\tif (!suggestedName) {\n\t\t\tdo {\n\t\t\t\tsuggestedName = getRandomRepositoryDomain();\n\t\t\t} while (\n\t\t\t\tawait this.manager.prismicRepository.checkExists({\n\t\t\t\t\tdomain: suggestedName,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\n\t\tconst { domain } = await prompt<string, \"domain\">({\n\t\t\ttype: \"text\",\n\t\t\tname: \"domain\",\n\t\t\t// Overriden by the `onRender` function, just used as a fallback\n\t\t\tmessage: \"Choose a name for your Prismic repository\",\n\t\t\tinitial: suggestedName,\n\t\t\tonRender() {\n\t\t\t\tconst rawDomain = this.value || this.initial || \"\";\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = validateRepositoryDomain({ domain });\n\n\t\t\t\tconst minRule = validation.LessThan4\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"4 characters long or more\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"4 characters long or more\")}`;\n\n\t\t\t\tconst maxRule = validation.MoreThan30\n\t\t\t\t\t? chalk.red(\n\t\t\t\t\t\t\t`1. Name must be ${chalk.bold(\"30 characters long or less\")}`,\n\t\t\t\t\t )\n\t\t\t\t\t: `1. Name must be ${chalk.cyan(\"30 characters long or less\")}`;\n\n\t\t\t\tthis.msg = chalk.reset(\n\t\t\t\t\t`\nChoose a name for your Prismic repository\n\n NAMING RULES\n ${minRule}\n ${maxRule}\n 3. Name will be ${chalk.cyan(\"kebab-cased\")} automatically\n\n CONSIDERATIONS\n 1. Once picked, your repository name ${chalk.cyan(\"cannot be changed\")}\n 2. A ${chalk.cyan(\n\t\t\t\"display name\",\n\t\t)} for the repository can be configured later on\n\n PREVIEW\n Dashboard ${chalk.cyan(`https://${domain}.prismic.io`)}\n API ${chalk.cyan(`https://${domain}.cdn.prismic.io/api/v2`)}\n\n${chalk.cyan(\"?\")} Your Prismic repository name`.replace(\"\\n\", \"\"),\n\t\t\t\t);\n\t\t\t},\n\t\t\tvalidate: async (rawDomain: string) => {\n\t\t\t\tconst domain = formatRepositoryDomain(rawDomain);\n\t\t\t\tconst validation = await validateRepositoryDomainAndAvailability({\n\t\t\t\t\tdomain,\n\t\t\t\t\texistsFn: (domain) =>\n\t\t\t\t\t\tthis.manager.prismicRepository.checkExists({ domain }),\n\t\t\t\t});\n\t\t\t\tconst errorMessage = getErrorMessageForRepositoryDomainValidation({\n\t\t\t\t\tvalidation,\n\t\t\t\t\tdisplayDomain: chalk.cyan(domain),\n\t\t\t\t});\n\n\t\t\t\treturn errorMessage || true;\n\t\t\t},\n\t\t\tformat: (value) => {\n\t\t\t\treturn formatRepositoryDomain(value);\n\t\t\t},\n\t\t});\n\n\t\t// Clear extra lines\n\t\tprocess.stdout.moveCursor?.(0, -16);\n\t\tprocess.stdout.clearScreenDown?.();\n\n\t\tthis.context.repository = {\n\t\t\tdomain,\n\t\t\texists: false,\n\t\t};\n\t}\n\n\tprotected createNewRepository(): Promise<void> {\n\t\tassertExists(\n\t\t\tthis.context.repository,\n\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t);\n\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Creating new repository ${chalk.cyan(\n\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `createNewRepository`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tawait this.manager.prismicRepository.create({\n\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\tframework: this.context.framework.prismicName,\n\t\t\t\t\t});\n\n\t\t\t\t\tthis.context.repository.exists = true;\n\t\t\t\t\ttask.title = `Created new repository ${chalk.cyan(\n\t\t\t\t\t\tthis.context.repository.domain,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected finishCoreDependenciesInstallation(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: `Finishing core dependencies installation with ${chalk.cyan(\n\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t)} ...`,\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.installProcess,\n\t\t\t\t\t\t\"Initial dependencies installation process must be available through context to run `finishCoreDependenciesInstallation`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tconst updateOutput = (data: Buffer | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Don't clutter console with logs when process is non TTY (CI, etc.)\n\t\t\t\t\tif (process.stdout.isTTY || process.env.NODE_ENV === \"test\") {\n\t\t\t\t\t\tthis.context.installProcess.stdout?.on(\"data\", updateOutput);\n\t\t\t\t\t}\n\t\t\t\t\tthis.context.installProcess.stderr?.on(\"data\", updateOutput);\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.context.installProcess;\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * Error catching happens when then process is started ealier so\n\t\t\t\t\t\t * that all install errors, earlier and presents, can be catched.\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Here, we force the task to wait so that it is neither marked as\n\t\t\t\t\t\t * done or has the opportunity to handle the error itself.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t// If for whatever reason the process is not exited by now, we still throw the error\n\t\t\t\t\t\tawait new Promise((resolve) => setTimeout(resolve, 5000));\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\ttask.title = `Installed core dependencies with ${chalk.cyan(\n\t\t\t\t\t\tthis.context.packageManager,\n\t\t\t\t\t)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected upsertSliceMachineConfigurationAndStartPluginRunner(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Resolving Slice Machine configuration...\",\n\t\t\t\ttask: async (_, parentTask) => {\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.framework,\n\t\t\t\t\t\t\"Project framework must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\t\t\t\t\tassertExists(\n\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\"Repository selection must be available through context to run `upsertSliceMachineConfiguration`\",\n\t\t\t\t\t);\n\n\t\t\t\t\tlet sliceMachineConfigExists = false;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.manager.project.getSliceMachineConfigPath();\n\t\t\t\t\t\tsliceMachineConfigExists = true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\t// noop, config does not exists, we'll create it\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sliceMachineConfigExists) {\n\t\t\t\t\t\tparentTask.title = \"Updating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst config = await this.manager.project.getSliceMachineConfig();\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\t...config,\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\tparentTask.title = \"Updated Slice Machine configuration\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparentTask.title = \"Creating Slice Machine configuration...\";\n\n\t\t\t\t\t\tconst sliceMachineConfigPath =\n\t\t\t\t\t\t\tawait this.manager.project.suggestSliceMachineConfigPath();\n\n\t\t\t\t\t\tawait this.manager.project.writeSliceMachineConfig({\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\trepositoryName: this.context.repository.domain,\n\t\t\t\t\t\t\t\tadapter: this.context.framework.adapterName,\n\t\t\t\t\t\t\t\tlibraries: [\"./slices\"],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tpath: sliceMachineConfigPath,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tparentTask.title = \"Created Slice Machine configuration\";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn listr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t// title: \"Starting plugin runner...\",\n\t\t\t\t\t\t\ttitle: \"Loading adapter...\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tawait this.manager.plugins.initPlugins();\n\t\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t\t// task.title = \"Started plugin runner\";\n\t\t\t\t\t\t\t\ttask.title = \"Loaded adapter\";\n\t\t\t\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t\t\t\t// parentTask.title = `${parentTask.title} and started plugin runner`;\n\t\t\t\t\t\t\t\tparentTask.title = `${parentTask.title} and loaded adapter`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]);\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected pushDataToPrismic(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Pushing data to Prismic...\",\n\t\t\t\ttask: (_, parentTask) =>\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing slices...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushSlices) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-slices used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { libraries, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.slices.readAllSliceLibraries();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read slice libraries: ${errors.join(\", \")}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst slices: { libraryID: string; sliceID: string }[] = [];\n\t\t\t\t\t\t\t\tfor (const library of libraries) {\n\t\t\t\t\t\t\t\t\tif (library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\tfor (const sliceID of library.sliceIDs) {\n\t\t\t\t\t\t\t\t\t\t\tslices.push({\n\t\t\t\t\t\t\t\t\t\t\t\tlibraryID: library.libraryID,\n\t\t\t\t\t\t\t\t\t\t\t\tsliceID,\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (slices.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No slice to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushing slices... (initializing ACL)\";\n\t\t\t\t\t\t\t\tawait this.manager.screenshots.initS3ACL();\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (0/${slices.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tslices.map(async (slice) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.slices.pushSlice(slice);\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing slices... (${pushed}/${slices.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all slices\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing custom types...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushCustomTypes) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-custom-types used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst { ids, errors } =\n\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.readCustomTypeLibrary();\n\n\t\t\t\t\t\t\t\tif (errors.length > 0) {\n\t\t\t\t\t\t\t\t\t// TODO: Provide better error message.\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Failed to read custom type libraries: ${errors.join(\n\t\t\t\t\t\t\t\t\t\t\t\", \",\n\t\t\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (!ids || ids.length === 0) {\n\t\t\t\t\t\t\t\t\ttask.skip(\"No custom type to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tlet pushed = 0;\n\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (0/${ids.length})`;\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tids.map(async (id) => {\n\t\t\t\t\t\t\t\t\t\tawait this.manager.customTypes.pushCustomType({ id });\n\t\t\t\t\t\t\t\t\t\tpushed++;\n\t\t\t\t\t\t\t\t\t\ttask.title = `Pushing custom types... (${pushed}/${ids.length})`;\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all custom types\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Pushing documents...\",\n\t\t\t\t\t\t\tskip: () => {\n\t\t\t\t\t\t\t\tif (!this.options.push) {\n\t\t\t\t\t\t\t\t\treturn `--no-push used`;\n\t\t\t\t\t\t\t\t} else if (!this.options.pushDocuments) {\n\t\t\t\t\t\t\t\t\treturn `--no-push-documents used`;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tassertExists(\n\t\t\t\t\t\t\t\t\tthis.context.repository,\n\t\t\t\t\t\t\t\t\t\"Repository selection must be available through context to run `pushDataToPrismic`\",\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.access(documentsDirectoryPath);\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tconst signaturePath = path.resolve(\n\t\t\t\t\t\t\t\t\tdocumentsDirectoryPath,\n\t\t\t\t\t\t\t\t\t\"index.json\",\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tconst rawSignature = await fs.readFile(signaturePath, \"utf-8\");\n\t\t\t\t\t\t\t\tconst signature: string = JSON.parse(rawSignature).signature;\n\n\t\t\t\t\t\t\t\tconst documentsGlob = await globby(\"*/*.json\", {\n\t\t\t\t\t\t\t\t\tcwd: documentsDirectoryPath,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tif (documentsGlob.length === 0) {\n\t\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t\t\ttask.skip(\"No document to push\");\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Replace `unknown` with a Prismic document type.\n\t\t\t\t\t\t\t\t// The exact format is not know at this time, hence the `unknown`.\n\t\t\t\t\t\t\t\tconst documents: Record<string, unknown> = {};\n\n\t\t\t\t\t\t\t\tawait Promise.all(\n\t\t\t\t\t\t\t\t\tdocumentsGlob.map(async (documentPath) => {\n\t\t\t\t\t\t\t\t\t\tconst filename = path.basename(documentPath, \".json\");\n\t\t\t\t\t\t\t\t\t\tconst fileContent = await fs.readFile(\n\t\t\t\t\t\t\t\t\t\t\tpath.resolve(documentsDirectoryPath, documentPath),\n\t\t\t\t\t\t\t\t\t\t\t\"utf-8\",\n\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\t// TOOD: Validate the contents of the JSON file and skip on invalid documents.\n\t\t\t\t\t\t\t\t\t\t\tconst parsedContents = JSON.parse(fileContent);\n\n\t\t\t\t\t\t\t\t\t\t\tdocuments[filename] = parsedContents;\n\t\t\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t\t\t// We prefer to manually allow console logs despite the app being a CLI to catch wild/unwanted console logs better\n\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t`Skipped document due to its invalid format: ${documentPath}`,\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tawait this.manager.prismicRepository.pushDocuments({\n\t\t\t\t\t\t\t\t\tdomain: this.context.repository.domain,\n\t\t\t\t\t\t\t\t\tdocuments,\n\t\t\t\t\t\t\t\t\tsignature,\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\ttask.title = \"Pushed all documents\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: \"Cleaning up data push artifacts\",\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst root = await this.manager.project.getRoot();\n\t\t\t\t\t\t\t\tconst documentsDirectoryPath = path.resolve(root, \"documents\");\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tawait fs.rm(documentsDirectoryPath, {\n\t\t\t\t\t\t\t\t\t\tforce: true,\n\t\t\t\t\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\t\t// Noop, it's not that big of a deal if we cannot delete this directory\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\ttask.title = \"Cleaned up data push artifacts\";\n\t\t\t\t\t\t\t\tparentTask.title = \"Pushed data to Prismic\";\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializeProject(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\ttitle: \"Initializing project...\",\n\t\t\t\ttask: async (_, parentTask) =>\n\t\t\t\t\t// We return another Listr instance in the event we have additional task to perform to initialize the project\n\t\t\t\t\tlistr([\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttitle: `Patching ${chalk.cyan(\"package.json\")} scripts...`,\n\t\t\t\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\t\t\t\tconst pkgPath = path.join(this.manager.cwd, \"package.json\");\n\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tconst pkgRaw = await fs.readFile(pkgPath, \"utf-8\");\n\t\t\t\t\t\t\t\t\tconst pkg = JSON.parse(pkgRaw);\n\n\t\t\t\t\t\t\t\t\tpkg.scripts ||= {};\n\n\t\t\t\t\t\t\t\t\tif (!pkg.scripts[START_SCRIPT_KEY]) {\n\t\t\t\t\t\t\t\t\t\tpkg.scripts[START_SCRIPT_KEY] = START_SCRIPT_VALUE;\n\n\t\t\t\t\t\t\t\t\t\t// Cheap indent detection based on https://github.com/sindresorhus/detect-indent (simplified because we're only dealing with JSON here)\n\t\t\t\t\t\t\t\t\t\tconst firstIndent = pkgRaw\n\t\t\t\t\t\t\t\t\t\t\t.split(\"\\n\")\n\t\t\t\t\t\t\t\t\t\t\t.find((line) => line.match(/^(?:( )+|\\t+)/));\n\t\t\t\t\t\t\t\t\t\tconst indent = firstIndent?.match(/^(?:( )+|\\t+)/)?.[0];\n\n\t\t\t\t\t\t\t\t\t\tawait fs.writeFile(\n\t\t\t\t\t\t\t\t\t\t\tpkgPath,\n\t\t\t\t\t\t\t\t\t\t\tJSON.stringify(\n\t\t\t\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\t\t\t\tnull,\n\t\t\t\t\t\t\t\t\t\t\t\tindent && indent !== \" \" ? indent : \" \",\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\t\t!pkg.scripts[\"slicemachine\"].startsWith(START_SCRIPT_VALUE)\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tthrow new Error(\"Script already exists\");\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\t\t\ttask.title = `Could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts (warning)`;\n\t\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (could not patch ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t\t)} scripts)`;\n\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tthis.context.projectInitialization ||= {};\n\t\t\t\t\t\t\t\tthis.context.projectInitialization.patchedScript = true;\n\n\t\t\t\t\t\t\t\ttask.title = `Patched ${chalk.cyan(\"package.json\")} scripts`;\n\t\t\t\t\t\t\t\tparentTask.title = `Initialized project (patched ${chalk.cyan(\n\t\t\t\t\t\t\t\t\t\"package.json\",\n\t\t\t\t\t\t\t\t)} scripts)`;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t},\n\t\t]);\n\t}\n\n\tprotected initializePlugins(): Promise<void> {\n\t\treturn listrRun([\n\t\t\t{\n\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t// title: \"Initializing plugins...\",\n\t\t\t\ttitle: \"Initializing adapter...\",\n\t\t\t\ttask: async (_, task) => {\n\t\t\t\t\tconst updateOutput = (data: Buffer | string | null) => {\n\t\t\t\t\t\tif (data instanceof Buffer) {\n\t\t\t\t\t\t\ttask.output = data.toString();\n\t\t\t\t\t\t} else if (typeof data === \"string\") {\n\t\t\t\t\t\t\ttask.output = data;\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tawait this.manager.project.initProject({\n\t\t\t\t\t\tlog: updateOutput,\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Revert when plugin are introduced to users\n\t\t\t\t\t// task.title = \"Initialized plugins\";\n\t\t\t\t\ttask.title = \"Initialized adapter\";\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n}\n"],"names":["_","_b","_a","domain","pkg"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const name = "@slicemachine/init";
4
- const version = "0.1.1-dev-plugins-m3.5";
4
+ const version = "0.1.1-dev-plugins-m3.7";
5
5
  const description = "Init Prismic Slice Machine in your project";
6
6
  const keywords = [
7
7
  "typescript",
@@ -54,7 +54,7 @@ const scripts = {
54
54
  const dependencies = {
55
55
  "@antfu/ni": "^0.20.0",
56
56
  "@lihbr/listr-update-renderer": "^0.5.3",
57
- "@slicemachine/manager": "0.1.1-dev-plugins-m3.5",
57
+ "@slicemachine/manager": "0.1.1-dev-plugins-m3.7",
58
58
  chalk: "^4.1.2",
59
59
  globby: "^13.1.3",
60
60
  listr: "^0.14.3",
@@ -66,7 +66,7 @@ const dependencies = {
66
66
  };
67
67
  const devDependencies = {
68
68
  "@size-limit/preset-small-lib": "^8.2.4",
69
- "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.5",
69
+ "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.7",
70
70
  "@types/listr": "^0.14.4",
71
71
  "@types/prompts": "^2.4.3",
72
72
  "@types/semver": "^7.3.13",
@@ -92,7 +92,7 @@ const devDependencies = {
92
92
  "vite-plugin-sdk": "^0.1.1",
93
93
  vitest: "^0.27.3"
94
94
  };
95
- const gitHead = "4e30e50a6bf774f0b3453d73dee7a325e3ea9729";
95
+ const gitHead = "04283817af2c7cbdc28a84ad30142a4da3a64a37";
96
96
  const pkg = {
97
97
  name,
98
98
  version,
@@ -1,5 +1,5 @@
1
1
  const name = "@slicemachine/init";
2
- const version = "0.1.1-dev-plugins-m3.5";
2
+ const version = "0.1.1-dev-plugins-m3.7";
3
3
  const description = "Init Prismic Slice Machine in your project";
4
4
  const keywords = [
5
5
  "typescript",
@@ -52,7 +52,7 @@ const scripts = {
52
52
  const dependencies = {
53
53
  "@antfu/ni": "^0.20.0",
54
54
  "@lihbr/listr-update-renderer": "^0.5.3",
55
- "@slicemachine/manager": "0.1.1-dev-plugins-m3.5",
55
+ "@slicemachine/manager": "0.1.1-dev-plugins-m3.7",
56
56
  chalk: "^4.1.2",
57
57
  globby: "^13.1.3",
58
58
  listr: "^0.14.3",
@@ -64,7 +64,7 @@ const dependencies = {
64
64
  };
65
65
  const devDependencies = {
66
66
  "@size-limit/preset-small-lib": "^8.2.4",
67
- "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.5",
67
+ "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.7",
68
68
  "@types/listr": "^0.14.4",
69
69
  "@types/prompts": "^2.4.3",
70
70
  "@types/semver": "^7.3.13",
@@ -90,7 +90,7 @@ const devDependencies = {
90
90
  "vite-plugin-sdk": "^0.1.1",
91
91
  vitest: "^0.27.3"
92
92
  };
93
- const gitHead = "4e30e50a6bf774f0b3453d73dee7a325e3ea9729";
93
+ const gitHead = "04283817af2c7cbdc28a84ad30142a4da3a64a37";
94
94
  const pkg = {
95
95
  name,
96
96
  version,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/init",
3
- "version": "0.1.1-dev-plugins-m3.5",
3
+ "version": "0.1.1-dev-plugins-m3.7",
4
4
  "description": "Init Prismic Slice Machine in your project",
5
5
  "keywords": [
6
6
  "typescript",
@@ -53,7 +53,7 @@
53
53
  "dependencies": {
54
54
  "@antfu/ni": "^0.20.0",
55
55
  "@lihbr/listr-update-renderer": "^0.5.3",
56
- "@slicemachine/manager": "0.1.1-dev-plugins-m3.5",
56
+ "@slicemachine/manager": "0.1.1-dev-plugins-m3.7",
57
57
  "chalk": "^4.1.2",
58
58
  "globby": "^13.1.3",
59
59
  "listr": "^0.14.3",
@@ -65,7 +65,7 @@
65
65
  },
66
66
  "devDependencies": {
67
67
  "@size-limit/preset-small-lib": "^8.2.4",
68
- "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.5",
68
+ "@slicemachine/plugin-kit": "0.1.8-dev-plugins-m3.7",
69
69
  "@types/listr": "^0.14.4",
70
70
  "@types/prompts": "^2.4.3",
71
71
  "@types/semver": "^7.3.13",
@@ -91,5 +91,5 @@
91
91
  "vite-plugin-sdk": "^0.1.1",
92
92
  "vitest": "^0.27.3"
93
93
  },
94
- "gitHead": "4e30e50a6bf774f0b3453d73dee7a325e3ea9729"
94
+ "gitHead": "04283817af2c7cbdc28a84ad30142a4da3a64a37"
95
95
  }
@@ -190,7 +190,7 @@ export class SliceMachineInitProcess {
190
190
  Getting help ${chalk.cyan("https://community.prismic.io")}
191
191
 
192
192
  GETTING STARTED
193
- Start Slice Machine ${chalk.cyan(
193
+ Run Slice Machine ${chalk.cyan(
194
194
  this.context.projectInitialization?.patchedScript
195
195
  ? await getRunScriptCommand({
196
196
  agent: this.context.packageManager || "npm",
@@ -200,6 +200,12 @@ export class SliceMachineInitProcess {
200
200
  agent: this.context.packageManager || "npm",
201
201
  script: "start-slicemachine",
202
202
  }),
203
+ )}
204
+ Run your project ${chalk.cyan(
205
+ await getRunScriptCommand({
206
+ agent: this.context.packageManager || "npm",
207
+ script: "dev",
208
+ }),
203
209
  )}`);
204
210
  } catch {
205
211
  // Noop, it's only the final convenience messsage
@@ -790,11 +796,17 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""),
790
796
 
791
797
  return listr([
792
798
  {
793
- title: "Starting plugin runner...",
799
+ // TODO: Revert when plugin are introduced to users
800
+ // title: "Starting plugin runner...",
801
+ title: "Loading adapter...",
794
802
  task: async (_, task) => {
795
803
  await this.manager.plugins.initPlugins();
796
- task.title = "Started plugin runner";
797
- parentTask.title = `${parentTask.title} and started plugin runner`;
804
+ // TODO: Revert when plugin are introduced to users
805
+ // task.title = "Started plugin runner";
806
+ task.title = "Loaded adapter";
807
+ // TODO: Revert when plugin are introduced to users
808
+ // parentTask.title = `${parentTask.title} and started plugin runner`;
809
+ parentTask.title = `${parentTask.title} and loaded adapter`;
798
810
  },
799
811
  },
800
812
  ]);
@@ -1076,7 +1088,9 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""),
1076
1088
  protected initializePlugins(): Promise<void> {
1077
1089
  return listrRun([
1078
1090
  {
1079
- title: "Initializing plugins...",
1091
+ // TODO: Revert when plugin are introduced to users
1092
+ // title: "Initializing plugins...",
1093
+ title: "Initializing adapter...",
1080
1094
  task: async (_, task) => {
1081
1095
  const updateOutput = (data: Buffer | string | null) => {
1082
1096
  if (data instanceof Buffer) {
@@ -1090,7 +1104,9 @@ ${chalk.cyan("?")} Your Prismic repository name`.replace("\n", ""),
1090
1104
  log: updateOutput,
1091
1105
  });
1092
1106
 
1093
- task.title = "Initialized plugins";
1107
+ // TODO: Revert when plugin are introduced to users
1108
+ // task.title = "Initialized plugins";
1109
+ task.title = "Initialized adapter";
1094
1110
  },
1095
1111
  },
1096
1112
  ]);