@slicemachine/init 1.1.11-alpha.5 → 1.1.12-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/build/index.js CHANGED
@@ -95,7 +95,7 @@ var EventType;
95
95
  EventType2["DownloadLibrary"] = "SliceMachine Download Library";
96
96
  EventType2["InitStart"] = "SliceMachine Init Start";
97
97
  EventType2["InitIdentify"] = "SliceMachine Init Identify";
98
- EventType2["InitDone"] = "SliceMachine Init Done";
98
+ EventType2["InitEnd"] = "SliceMachine Init End";
99
99
  })(EventType || (EventType = {}));
100
100
  class InitTracker {
101
101
  constructor() {
@@ -169,10 +169,24 @@ class InitTracker {
169
169
  return this._trackEvent(EventType.InitIdentify);
170
170
  }
171
171
  trackInitStart(repoDomain) {
172
+ if (repoDomain)
173
+ this.setRepository(repoDomain);
172
174
  return this._trackEvent(EventType.InitStart, { repo: repoDomain });
173
175
  }
174
- trackInitDone(framework) {
175
- return this._trackEvent(EventType.InitDone, { framework });
176
+ trackInitEndSuccess(framework) {
177
+ return this._trackEvent(EventType.InitEnd, {
178
+ framework,
179
+ repo: __privateGet(this, _repository),
180
+ result: "success"
181
+ });
182
+ }
183
+ trackInitEndFail(framework, error) {
184
+ return this._trackEvent(EventType.InitEnd, {
185
+ framework,
186
+ repo: __privateGet(this, _repository),
187
+ result: "error",
188
+ error
189
+ });
176
190
  }
177
191
  }
178
192
  _client = new WeakMap();
@@ -532,8 +546,9 @@ function createRepository(client, domain, framework) {
532
546
  const address = addressUrl.toString();
533
547
  spinner.succeed(`We created your new repository ${address}`);
534
548
  return domain2;
535
- }).catch((error) => {
549
+ }).catch(async (error) => {
536
550
  spinner.fail(`Error creating repository ${domain}`);
551
+ await Tracker.get().trackInitEndFail(framework, "Failed to create repository");
537
552
  if (error.message) {
538
553
  writeError$1(error.message);
539
554
  }
@@ -727,6 +742,7 @@ async function detectFramework(cwd) {
727
742
  } else {
728
743
  console.log(failMessage);
729
744
  }
745
+ await Tracker.get().trackInitEndFail(core.Models.Frameworks.none, "Framework not detected");
730
746
  process.exit(1);
731
747
  }
732
748
  }
@@ -744,19 +760,16 @@ async function loginOrBypass(client) {
744
760
  return userAfterLogin;
745
761
  }
746
762
 
747
- const defaultSliceMachineVersion = "0.0.41";
748
763
  async function configureProject(client, cwd, repositoryDomainName, framework, sliceLibPath = [], tracking = true) {
749
764
  const frameworkName = NodeUtils__namespace.Framework.fancyName(framework.value);
750
765
  const spinner = spinner$1(`Configuring your ${frameworkName} and Prismic project...`);
751
766
  spinner.start();
752
767
  try {
753
768
  const manifest = NodeUtils__namespace.retrieveManifest(cwd);
754
- const packageJson = NodeUtils__namespace.retrieveJsonPackage(cwd);
755
- const sliceMachineVersionInstalled = getTheSliceMachineVersionInstalled(packageJson);
756
769
  const manifestAlreadyExistWithContent = manifest.exists && manifest.content;
757
770
  const libs = manifest.content && manifest.content.libraries && manifest.content.libraries.length > 0 ? manifest.content.libraries : ["@/slices"];
758
771
  const manifestUpdated = {
759
- ...manifestAlreadyExistWithContent ? manifest.content : { _latest: sliceMachineVersionInstalled },
772
+ ...manifestAlreadyExistWithContent ? manifest.content : {},
760
773
  apiEndpoint: Prismic__namespace.Endpoints.buildRepositoryEndpoint(client.apisEndpoints.Wroom, repositoryDomainName),
761
774
  libraries: [...libs, ...sliceLibPath],
762
775
  ...framework.manuallyAdded ? { framework: framework.value } : {},
@@ -771,36 +784,14 @@ async function configureProject(client, cwd, repositoryDomainName, framework, sl
771
784
  NodeUtils__namespace.Files.mkdir(pathToSlicesFolder, { recursive: true });
772
785
  }
773
786
  NodeUtils__namespace.addJsonPackageSmScript(cwd);
774
- await Tracker.get().trackInitDone(framework.value);
787
+ await Tracker.get().trackInitEndSuccess(framework.value);
775
788
  spinner.succeed("Project configured! Ready to start");
776
- } catch (e) {
789
+ } catch (error) {
790
+ await Tracker.get().trackInitEndFail(framework.value, "Failed to configure Slice Machine");
777
791
  spinner.fail("Failed to configure Slice Machine");
778
792
  process.exit(-1);
779
793
  }
780
794
  }
781
- const getTheSliceMachineVersionInstalled = (packageJson) => {
782
- var _a;
783
- const sliceMachinePackageInstalled = Object.entries(((_a = packageJson.content) == null ? void 0 : _a.devDependencies) || {}).find((devDependency) => {
784
- if (devDependency[0] === core.CONSTS.SM_PACKAGE_NAME) {
785
- return devDependency;
786
- }
787
- });
788
- if (!sliceMachinePackageInstalled) {
789
- return defaultSliceMachineVersion;
790
- }
791
- const extractedVersion = extractVersionNumberFromSemver(sliceMachinePackageInstalled[1]);
792
- if (!extractedVersion) {
793
- return defaultSliceMachineVersion;
794
- }
795
- return extractedVersion;
796
- };
797
- const extractVersionNumberFromSemver = (semver) => {
798
- const versionFound = semver.match(/\d+\.\d+\.\d+/);
799
- if (versionFound && versionFound.length > 0) {
800
- return versionFound[0];
801
- }
802
- return null;
803
- };
804
795
 
805
796
  function displayFinalMessage(cwd, wasStarter, reponame, base) {
806
797
  const yarnLock = NodeUtils__namespace.Files.exists(NodeUtils__namespace.YarnLockPath(cwd));
@@ -918,6 +909,7 @@ async function installLib(cwd, libGithubPath, branch = "HEAD") {
918
909
  if (error instanceof Error) {
919
910
  console.error(error.message);
920
911
  }
912
+ await Tracker.get().trackInitEndFail(core.Models.Frameworks.none, "Failed to install ${libGithubPath} library");
921
913
  process.exit(-1);
922
914
  }
923
915
  }
@@ -943,13 +935,13 @@ async function promptToPushCustomTypes() {
943
935
  ]).then((res) => res.pushCustomTypes);
944
936
  }
945
937
 
946
- async function updateVariationWithScreenshot(client, acl, screenshotPaths, sliceName, variation) {
938
+ async function updateVariationWithScreenshot(client, acl, screenshotPaths, sliceId, variation) {
947
939
  const screenshot = screenshotPaths[variation.id];
948
940
  if (!screenshot || !screenshot.path)
949
941
  return Promise.resolve(variation);
950
942
  return client.uploadScreenshot({
951
943
  acl,
952
- sliceName,
944
+ sliceId,
953
945
  variationId: variation.id,
954
946
  filePath: screenshot.path
955
947
  }).then((screenshotUrl) => {
@@ -958,7 +950,7 @@ async function updateVariationWithScreenshot(client, acl, screenshotPaths, slice
958
950
  imageUrl: screenshotUrl
959
951
  };
960
952
  }).catch((error) => {
961
- writeError$1(`Couldn't upload screenshot slice: ${sliceName} - variation: ${variation.id}`);
953
+ writeError$1(`Couldn't upload screenshot slice: ${sliceId} - variation: ${variation.id}`);
962
954
  writeError$1(error.message, "Full error:");
963
955
  return variation;
964
956
  });
@@ -1099,7 +1091,7 @@ async function sendDocuments(client, cwd) {
1099
1091
  spinner.succeed();
1100
1092
  fs__default["default"].rmSync(pathToDocuments, { recursive: true, force: true });
1101
1093
  return true;
1102
- }).catch((e) => {
1094
+ }).catch(async (e) => {
1103
1095
  var _a;
1104
1096
  spinner.fail();
1105
1097
  if (((_a = e.response) == null ? void 0 : _a.data) === "Repository should not contain documents") {
@@ -1108,6 +1100,7 @@ async function sendDocuments(client, cwd) {
1108
1100
  writeError$1("Sending documents failed, please try again. If the problem persists, contact us.");
1109
1101
  writeError$1(`Full error: ${e.code || 500} - ${e.message}`);
1110
1102
  }
1103
+ await Tracker.get().trackInitEndFail(core.Models.Frameworks.none, "Failed to push documents");
1111
1104
  process.exit(1);
1112
1105
  });
1113
1106
  }
@@ -1128,6 +1121,45 @@ async function sendStarterData(client, cwd, pushDocuments = true) {
1128
1121
  return sendDocuments(client, cwd);
1129
1122
  }
1130
1123
 
1124
+ const defaultSliceMachineVersion = "0.0.41";
1125
+ const getTheSliceMachineVersionInstalled = (packageJson) => {
1126
+ var _a;
1127
+ const sliceMachinePackageInstalled = Object.entries(((_a = packageJson.content) == null ? void 0 : _a.devDependencies) || {}).find((devDependency) => {
1128
+ if (devDependency[0] === core.CONSTS.SM_PACKAGE_NAME) {
1129
+ return devDependency;
1130
+ }
1131
+ });
1132
+ if (!sliceMachinePackageInstalled) {
1133
+ return defaultSliceMachineVersion;
1134
+ }
1135
+ const extractedVersion = extractVersionNumberFromSemver(sliceMachinePackageInstalled[1]);
1136
+ if (!extractedVersion) {
1137
+ return defaultSliceMachineVersion;
1138
+ }
1139
+ return extractedVersion;
1140
+ };
1141
+ const extractVersionNumberFromSemver = (semver) => {
1142
+ const versionFound = semver.match(/\d+\.\d+\.\d+/);
1143
+ if (versionFound && versionFound.length > 0) {
1144
+ return versionFound[0];
1145
+ }
1146
+ return null;
1147
+ };
1148
+ function setVersion(cwd) {
1149
+ var _a;
1150
+ try {
1151
+ const manifest = NodeUtils__namespace.retrieveManifest(cwd);
1152
+ if ((_a = manifest.content) == null ? void 0 : _a._latest) {
1153
+ return;
1154
+ }
1155
+ const packageJson = NodeUtils__namespace.retrieveJsonPackage(cwd);
1156
+ const sliceMachineVersionInstalled = getTheSliceMachineVersionInstalled(packageJson);
1157
+ NodeUtils__namespace.patchManifest(cwd, { _latest: sliceMachineVersionInstalled });
1158
+ } catch (e) {
1159
+ warning("Could not set _latest to installed slice-machine-ui version in sm.json");
1160
+ }
1161
+ }
1162
+
1131
1163
  async function init() {
1132
1164
  const cwd = findArgument(process.argv, "cwd") || process.cwd();
1133
1165
  const mode = getApplicationMode(findArgument(process.argv, "mode")) || client.ApplicationMode.PROD;
@@ -1152,14 +1184,16 @@ async function init() {
1152
1184
  const wasStarter = await sendStarterData(client$1, cwd, pushDocuments);
1153
1185
  await configureProject(client$1, cwd, repository, frameworkResult, sliceLibPath, isTrackingAvailable);
1154
1186
  await installRequiredDependencies(cwd, frameworkResult.value, wasStarter);
1187
+ setVersion(cwd);
1155
1188
  displayFinalMessage(cwd, wasStarter, repository, client$1.apisEndpoints.Wroom);
1156
1189
  }
1157
1190
  init().then(() => {
1158
1191
  process.exit(0);
1159
- }).catch((error) => {
1192
+ }).catch(async (error) => {
1160
1193
  if (error instanceof Error)
1161
1194
  writeError$1(error.message);
1162
1195
  else
1163
1196
  console.error(error);
1197
+ await Tracker.get().trackInitEndFail(core.Models.Frameworks.none, "Failed to initialise Slice Machine.");
1164
1198
  });
1165
1199
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/utils/tracker.ts","../src/utils/logs.ts","../src/utils/auth/helpers.ts","../src/utils/auth/index.ts","../src/utils/client.ts","../src/utils/fs.ts","../src/utils/index.ts","../src/steps/install-required-dependencies.ts","../src/steps/validate-pkg.ts","../src/utils/create-repo.ts","../src/utils/validateRepositoryName.ts","../src/steps/choose-or-create-a-repository.ts","../src/steps/detect-framework.ts","../src/steps/loginOrBypass.ts","../src/steps/configure-project.ts","../src/steps/display-final-message.ts","../src/utils/PackageManager.ts","../src/steps/install-lib.ts","../src/steps/starters/prompts.ts","../src/steps/starters/s3.ts","../src/steps/starters/slices.ts","../src/steps/starters/custom-types.ts","../src/steps/starters/documents.ts","../src/steps/sendStarterData.ts","../src/index.ts"],"sourcesContent":["import ServerAnalytics from \"analytics-node\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Models } from \"@slicemachine/core\";\n\nexport enum EventType {\n DownloadLibrary = \"SliceMachine Download Library\",\n InitStart = \"SliceMachine Init Start\",\n InitIdentify = \"SliceMachine Init Identify\",\n InitDone = \"SliceMachine Init Done\",\n}\n\ntype SegmentIdentifier = { userId: string } | { anonymousId: string };\n\nexport class InitTracker {\n #client: ServerAnalytics | null = null;\n #isTrackingActive = true;\n #anonymousId = \"\";\n #userId: string | null = null;\n #repository: string | null = null;\n\n initialize(segmentKey: string, isTrackingActive = true): void {\n try {\n // The initialize method cannot be used for changing some class properties\n if (!!this.#client) return;\n\n this.#isTrackingActive = isTrackingActive;\n this.#anonymousId = uuidv4();\n this.#client = new ServerAnalytics(segmentKey);\n } catch (error) {\n // If the client is not correctly setup we are silently failing as the tracker is not a critical feature\n }\n }\n\n /** Private methods **/\n\n _trackEvent(\n eventType: EventType,\n attributes: Record<string, unknown> = {}\n ): Promise<void> {\n return new Promise((resolve) => {\n if (!this._isTrackingPossible(this.#client)) {\n return resolve();\n }\n\n const identifier = this._createSegmentIdentifier();\n const payload = {\n event: eventType,\n ...identifier,\n properties: attributes,\n ...(this.#repository\n ? { context: { groupId: { Repository: this.#repository } } }\n : {}),\n };\n\n return this.#client.track(payload, () => {\n // if(_) return reject(_)\n return resolve();\n });\n });\n }\n\n _identifyEvent(userId: string, intercomHash: string): void {\n if (!this._isTrackingPossible(this.#client)) {\n return;\n }\n\n try {\n this.#client.identify({\n userId,\n anonymousId: this.#anonymousId,\n integrations: {\n Intercom: {\n user_hash: intercomHash,\n },\n },\n });\n } catch {\n // If the client is not correctly setup we are silently failing as the tracker is not a critical feature\n }\n }\n\n _isTrackingPossible(\n client: ServerAnalytics | null\n ): client is ServerAnalytics {\n return !!client && this.#isTrackingActive;\n }\n\n _createSegmentIdentifier(): SegmentIdentifier {\n return !!this.#userId\n ? { userId: this.#userId }\n : { anonymousId: this.#anonymousId };\n }\n\n /** Public methods **/\n\n setRepository(repository: string) {\n this.#repository = repository;\n }\n\n identifyUser(userId: string, intercomHash: string): void {\n this.#userId = userId;\n return this._identifyEvent(userId, intercomHash);\n }\n\n trackDownloadLibrary(library: string): Promise<void> {\n return this._trackEvent(EventType.DownloadLibrary, { library });\n }\n\n trackInitIdentify(): Promise<void> {\n return this._trackEvent(EventType.InitIdentify);\n }\n\n trackInitStart(repoDomain: string | undefined): Promise<void> {\n return this._trackEvent(EventType.InitStart, { repo: repoDomain });\n }\n\n trackInitDone(framework: Models.Frameworks): Promise<void> {\n return this._trackEvent(EventType.InitDone, { framework });\n }\n}\n\nconst Tracker = (() => {\n let smTrackerInstance: InitTracker;\n\n const init = () => new InitTracker();\n\n return {\n get() {\n if (!smTrackerInstance) smTrackerInstance = init();\n return smTrackerInstance;\n },\n };\n})();\n\nexport default Tracker;\n","import chalk from \"chalk\";\nimport ora from \"ora\";\n\nexport const purple = chalk.hex(\"8c76fc\");\nexport const error = chalk.hex(\"FF6868\");\nexport const warning = chalk.hex(\"F3AD38\");\nexport const underline = chalk.underline;\nexport const bold = chalk.bold;\nexport const dim = chalk.dim;\nexport const cyan = chalk.cyan;\nexport const yellow = chalk.yellow;\nexport const white = chalk.white;\n\nexport const spinner = ora;\n\nexport const writeError = (msg: string, prefix = \"Error!\"): void =>\n console.error(`${error(prefix)} ${msg}`);\n\nexport const writeWarning = (msg: string, prefix = \"Warning!\"): void =>\n console.warn(`${warning(prefix)} ${msg}`);\n\nexport const writeCheck = (msg: string): void => {\n ora().succeed(msg); // using the same check as Ora for coherence\n};\n\nexport const writeInfo = (msg: string): void => {\n console.log(`${yellow(\"ℹ\")} ${dim(msg)}`);\n};\n","import * as hapi from \"@hapi/hapi\";\nimport open from \"open\";\nimport * as logs from \"../logs\";\nimport { Utils, CONSTS } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\n\nconst { Cookie } = Utils;\nconst { DEFAULT_BASE, DEFAULT_SERVER_PORT } = CONSTS;\n\nconst { bold, underline, spinner, writeError } = logs;\n\nexport type HandlerData = { email: string; cookies: ReadonlyArray<string> };\n\nexport const isHandlerData = (\n data: string | Record<string, unknown>\n): data is HandlerData => {\n if (typeof data != \"object\") return false;\n\n const { email, cookies } = data as Partial<HandlerData>;\n return (\n Boolean(email && cookies) &&\n Array.isArray(cookies) &&\n !cookies.some((c: unknown) => typeof c !== \"string\")\n );\n};\n\nconst Routes = {\n authentication:\n (server: hapi.Server) =>\n (\n onSuccess: (data: HandlerData) => void,\n onFail: () => void\n ): hapi.ServerRoute => ({\n method: \"POST\",\n path: \"/\",\n handler: authenticationHandler(server)(onSuccess, onFail),\n }),\n\n notFound: {\n method: [\"GET\", \"POST\"],\n path: \"/{any*}\",\n handler: (\n request: hapi.Request,\n h: hapi.ResponseToolkit\n ): hapi.ResponseObject => {\n return h\n .response(`not found: [${request.method}]: ${request.url.toString()}`)\n .code(404);\n },\n },\n};\n\nexport function validatePayload(\n payload: Buffer | string | Record<string, unknown>\n): HandlerData | null {\n if (Buffer.isBuffer(payload)) return null;\n return isHandlerData(payload) ? payload : null;\n}\n\nconst authenticationHandler =\n (server: hapi.Server) =>\n (onSuccess: (data: HandlerData) => void, onFail: () => void) => {\n return (request: hapi.Request, h: hapi.ResponseToolkit) => {\n try {\n const data: HandlerData | null = validatePayload(\n request.payload as Buffer | string | Record<string, unknown>\n ); // type coming from the lib\n\n if (!data) {\n onFail();\n h.response(\"Error with cookies\").code(400);\n throw new Error(\n \"It seems the server didn't respond properly, please contact us.\"\n );\n }\n onSuccess(data);\n return h.response(data).code(200);\n } finally {\n void server.stop({ timeout: 10000 });\n }\n };\n };\n\nfunction stripTrailingSlash(str: string) {\n return str.endsWith(\"/\") ? str.slice(0, -1) : str;\n}\n\nfunction buildServer(base: string, port: number, host: string): hapi.Server {\n const server = hapi.server({\n port,\n host,\n routes: {\n cors: {\n origin: [stripTrailingSlash(base)],\n headers: [\"Origin\", \"X-Requested-With\", \"Content-Type\", \"Accept\"],\n },\n },\n });\n return server;\n}\n\nexport function askSingleChar(title: string): Promise<string> {\n return new Promise((resolve) => {\n process.stdout.write(title);\n const rawMode: boolean = process.stdin.isRaw;\n if (process.stdin.setRawMode) process.stdin.setRawMode(true);\n\n function handler(key: Buffer) {\n const response: string = key.toString(\"utf-8\");\n if (process.stdin.setRawMode) process.stdin.setRawMode(Boolean(rawMode));\n process.stdin.removeListener(\"data\", handler);\n resolve(response);\n }\n\n process.stdin.on(\"data\", handler);\n });\n}\n\nexport async function startServerAndOpenBrowser(\n url: string,\n action: \"login\" | \"signup\",\n base: string = DEFAULT_BASE,\n port: number = DEFAULT_SERVER_PORT\n): Promise<{\n onLoginFail: () => void;\n}> {\n const confirmation = await askSingleChar(\n `>> Press any key to open the browser to ${action} or q to exit:`\n );\n if (confirmation === \"q\" || confirmation === \"\\u0003\")\n return process.exit(-1);\n\n const s = spinner(\"Waiting for the browser response\");\n\n const onLoginFail = () => {\n s.stop();\n writeError(`We failed to log you into your Prismic account`);\n console.log(`Run ${bold(\"npx slicemachine init\")} again!`);\n process.exit(-1);\n };\n\n function onSuccess(data: HandlerData) {\n s.succeed(`Logged in as ${bold(data.email)}`).stop();\n PrismicSharedConfigManager.setProperties({\n cookies: Cookie.serializeCookies(data.cookies),\n base,\n });\n }\n\n function onFail(): void {\n onLoginFail();\n }\n\n const server = buildServer(base, port, \"localhost\");\n server.route([\n Routes.authentication(server)(onSuccess, onFail),\n Routes.notFound,\n ]);\n\n return server.start().then(() => {\n console.log(\"\\nOpening browser to \" + underline(url));\n s.start();\n void open(url);\n return {\n onLoginFail,\n };\n });\n}\n","import { Utils } from \"@slicemachine/core\";\nimport { startServerAndOpenBrowser } from \"./helpers\";\nimport {\n Endpoints,\n PrismicSharedConfigManager,\n} from \"@slicemachine/core/build/prismic\";\nimport { InitClient } from \"../client\";\n\nasync function startAuth({\n client,\n url,\n action,\n}: {\n client: InitClient;\n url: string;\n action: \"signup\" | \"login\";\n}): Promise<void> {\n const { onLoginFail } = await startServerAndOpenBrowser(\n url,\n action,\n client.apisEndpoints.Wroom\n );\n try {\n // We wait 3 minutes before timeout\n await Utils.Poll.startPolling<boolean, boolean>(\n () => Auth.validateSession(client),\n (isSessionValid): isSessionValid is boolean => isSessionValid == true,\n 3000,\n 60\n );\n return;\n } catch (e) {\n onLoginFail();\n }\n}\n\nexport const Auth = {\n login: async (client: InitClient): Promise<void> => {\n const endpoints = Endpoints.buildEndpoints(client.apisEndpoints.Wroom);\n return startAuth({\n client,\n url: endpoints.Dashboard.cliLogin,\n action: \"login\",\n });\n },\n validateSession: async (client: InitClient): Promise<boolean> => {\n const authToken = PrismicSharedConfigManager.getAuth();\n\n // verify token is by retrieving the profile, update the config if need be.\n return client\n .updateAuthenticationToken(authToken)\n .profile()\n .then((userProfile) => {\n // settings shortId and IntercomHash as we switch between dev and prod.\n PrismicSharedConfigManager.setProperties({\n shortId: userProfile.shortId,\n intercomHash: userProfile.intercomHash,\n });\n return true;\n })\n .catch(() => false);\n },\n};\n","import * as t from \"io-ts\";\nimport { Models } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\nimport { Client, getAndValidateResponse } from \"@slicemachine/client\";\n\nexport class InitClient extends Client {\n async listRepositories(): Promise<Models.Repository[]> {\n return getAndValidateResponse<Models.Repository[]>(\n this._get(`${this.apisEndpoints.Users}repositories`),\n \"repository list\",\n t.array(Models.Repository)\n );\n }\n\n async createRepository(\n domain: string,\n framework: Models.Frameworks\n ): Promise<string> {\n const data = {\n domain,\n framework,\n plan: \"personal\",\n isAnnual: \"false\",\n role: \"developer\",\n };\n\n return this._fetch({\n method: \"post\",\n url: `${this.apisEndpoints.Wroom}authentication/newrepository?app=slicemachine`,\n data: data,\n headers: {\n Cookie: PrismicSharedConfigManager.get().cookies,\n \"User-Agent\": \"prismic-cli/sm\", // special user agent just for this route.\n },\n }).then(() => domain);\n }\n\n async domainExist(domain: string): Promise<boolean> {\n return getAndValidateResponse<boolean>(\n this._get(\n `${this.apisEndpoints.Wroom}app/dashboard/repositories/${domain}/exists`\n ),\n \"repository exists\",\n t.boolean\n );\n }\n\n async pushDocuments(\n signature: string,\n documents: Record<string, unknown>,\n cookies: string\n ) {\n if (!this.repository) throw new Error(\"Repository undefined in the client\");\n const repositoryDirectUrl = new URL(this.apisEndpoints.Wroom);\n repositoryDirectUrl.hostname = `${this.repository}.${repositoryDirectUrl.hostname}`;\n\n return this._fetch({\n method: \"post\",\n url: `${repositoryDirectUrl.toString()}starter/documents`,\n data: { signature, documents: JSON.stringify(documents) },\n headers: {\n Cookie: cookies,\n \"User-Agent\": \"prismic-cli/0\", // special user agent just for this route.\n },\n });\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport async function lsdir(dir: string): Promise<Array<string>> {\n return fs.promises.readdir(dir).then((dirs) => {\n return dirs\n .filter((name) => fs.statSync(path.join(dir, name)).isDirectory())\n .map((subdirectory) => path.join(dir, subdirectory));\n });\n}\n\nexport async function lsfiles(dir: string): Promise<Array<string>> {\n return fs.promises.readdir(dir).then((dirs) => {\n return dirs\n .filter((name) => fs.statSync(path.join(dir, name)).isFile())\n .map((file) => path.join(dir, file));\n });\n}\n","import { ApplicationMode } from \"@slicemachine/client\";\nimport util from \"util\";\nimport { exec } from \"child_process\";\nexport * as logs from \"./logs\";\nexport { Auth } from \"./auth\";\nexport * from \"./client\";\nexport * from \"./fs\";\n\nexport function findArgument(args: string[], name: string): string | undefined {\n const flagIndex: number = args.indexOf(`--${name}`);\n\n if (flagIndex === -1) return;\n if (args.length < flagIndex + 2) return;\n\n const flagValue = args[flagIndex + 1];\n\n if (flagValue.startsWith(\"--\")) return;\n return flagValue;\n}\n\nexport function findFlag(args: string[], name: string): boolean {\n const toFind = `--${name}`;\n return args.includes(toFind);\n}\n\nexport const execCommand: (\n command: string\n) => Promise<{ stderr: string; stdout: string }> = util.promisify(exec);\n\nexport function getApplicationMode(\n argumentValue: string | undefined\n): ApplicationMode | null {\n switch (argumentValue) {\n case ApplicationMode.PROD:\n case ApplicationMode.STAGE:\n case ApplicationMode.DEV:\n return argumentValue;\n default:\n return null;\n }\n}\n","import path from \"path\";\nimport { execCommand, logs } from \"../utils\";\nimport { CONSTS, Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\n\nconst {\n PRISMIC_CLIENT,\n PRISMIC_DOM_PACKAGE_NAME,\n PRISMIC_REACT_PACKAGE_NAME,\n SM_PACKAGE_NAME,\n NUXT_PRISMIC,\n PRISMIC_VUE,\n SLICE_SIMULATOR_REACT,\n SLICE_SIMULATOR_VUE,\n PRISMIC_HELPERS,\n} = CONSTS;\n\nfunction depsForFramework(framework: Models.Frameworks): string {\n switch (framework) {\n case Models.Frameworks.react:\n return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${PRISMIC_HELPERS}`;\n case Models.Frameworks.next:\n return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${SLICE_SIMULATOR_REACT} ${PRISMIC_HELPERS}`;\n case Models.Frameworks.svelte:\n return `${PRISMIC_DOM_PACKAGE_NAME} ${PRISMIC_CLIENT}`;\n case Models.Frameworks.nuxt:\n return `${NUXT_PRISMIC} ${SLICE_SIMULATOR_VUE}`;\n case Models.Frameworks.vue:\n return `${PRISMIC_VUE} ${PRISMIC_CLIENT} ${PRISMIC_DOM_PACKAGE_NAME}`;\n default:\n return \"\";\n }\n}\n\nasync function addAndInstallDeps(\n framework: Models.Frameworks,\n useYarn = false\n): Promise<string> {\n const installDevDependencyCommand = useYarn\n ? \"yarn add -D\"\n : \"npm install --save-dev\";\n const installDependencyCommand = useYarn ? \"yarn add\" : \"npm install --save\";\n\n const { stderr } = await execCommand(\n `${installDevDependencyCommand} ${SM_PACKAGE_NAME}`\n );\n\n const deps = depsForFramework(framework);\n if (deps) await execCommand(`${installDependencyCommand} ${deps}`);\n\n return stderr;\n}\n\nasync function installDeps(useYarn = false): Promise<string> {\n const installCommand = useYarn ? \"yarn\" : \"npm install\";\n const { stderr } = await execCommand(installCommand);\n return stderr;\n}\n\nexport async function installRequiredDependencies(\n cwd: string,\n framework: Models.Frameworks,\n skipDependencies: boolean\n): Promise<void> {\n const yarnLock = NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd));\n\n const spinner = logs.spinner(\"Installing Slice Machine\");\n spinner.start();\n\n const stderr = await (skipDependencies\n ? installDeps(yarnLock)\n : addAndInstallDeps(framework, yarnLock));\n\n const pathToPkg = path.join(\n NodeUtils.PackagePaths(cwd).value(),\n SM_PACKAGE_NAME\n );\n const isPackageInstalled = NodeUtils.Files.exists(pathToPkg);\n\n if (isPackageInstalled || !stderr.length) {\n spinner.succeed(\"Slice Machine was installed successfully\");\n return;\n }\n\n spinner.fail();\n logs.writeWarning(\n `could not install ${SM_PACKAGE_NAME}. Please do it manually!`\n );\n}\n","import * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { logs } from \"../utils\";\n\nexport function validatePkg(cwd: string): void {\n const jsonPackage = NodeUtils.retrieveJsonPackage(cwd);\n if (!jsonPackage.exists) {\n logs.writeError(`package.json not found. Are you in the right folder?`);\n return process.exit(-1);\n }\n if (!jsonPackage.content) {\n logs.writeError(`could not parse package.json.`);\n return process.exit(-1);\n }\n}\n","import type { Models } from \"@slicemachine/core\";\nimport * as logs from \"./logs\";\nimport { InitClient } from \"./client\";\n\nexport function createRepository(\n client: InitClient,\n domain: string,\n framework: Models.Frameworks\n): Promise<string> {\n const spinner = logs.spinner(\"Creating Prismic Repository\");\n spinner.start();\n\n return client\n .createRepository(domain, framework)\n .then((domain: string) => {\n const addressUrl = new URL(client.apisEndpoints.Wroom);\n addressUrl.hostname = `${domain}.${addressUrl.hostname}`;\n const address = addressUrl.toString();\n spinner.succeed(`We created your new repository ${address}`);\n\n return domain;\n })\n .catch((error: Error) => {\n spinner.fail(`Error creating repository ${domain}`);\n if (error.message) {\n logs.writeError(error.message);\n }\n logs.writeError(`We failed to create you new prismic repository`);\n console.log(`Run ${logs.bold(\"npx @slicemachine/init\")} again!`);\n process.exit(-1);\n });\n}\n","import { InitClient } from \"./client\";\n\nexport async function validateRepositoryName(\n client: InitClient,\n name: string\n): Promise<boolean> {\n const domain = name.trim();\n const errors = [];\n\n const startsWithLetter = /^[a-zA-Z]/.test(domain);\n if (!startsWithLetter) errors.push(\"Must start with a letter.\");\n\n const acceptedChars = /^[a-z0-9-]+$/.test(domain);\n if (!acceptedChars)\n errors.push(\"Must contain only lowercase letters, numbers and hyphens.\");\n\n const fourCharactersOrMore = domain.length >= 4;\n if (!fourCharactersOrMore)\n errors.push(\n \"Must have four or more alphanumeric characters and/or hyphens.\"\n );\n\n const endsWithALetterOrNumber = /[a-z0-9]$/.test(domain);\n if (!endsWithALetterOrNumber)\n errors.push(\"Must end in a letter or a number.\");\n\n const thirtyCharacterOrLess = domain.length <= 30;\n if (!thirtyCharacterOrLess) errors.push(\"Must be 30 characters or less\");\n\n if (errors.length > 0) {\n const errorString = errors.map((d, i) => `(${i + 1}: ${d}`).join(\" \");\n const msg = `Validation errors: ${errorString}`;\n return Promise.reject(new Error(msg));\n }\n\n return client\n .domainExist(domain)\n .then((isAvailable) =>\n isAvailable\n ? true\n : Promise.reject(new Error(`${name} is already in use`))\n )\n .catch(() => Promise.reject(new Error(`${name} is already in use`)));\n}\n","import * as inquirer from \"inquirer\";\nimport Separator from \"inquirer/lib/objects/separator\";\nimport { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { createRepository } from \"../utils/create-repo\";\nimport { validateRepositoryName } from \"../utils/validateRepositoryName\";\nimport { InitClient, logs } from \"../utils\";\n\nexport const CREATE_REPO = \"$_CREATE_REPO\"; // not a valid domain name\n\nexport function prettyRepoName(address: URL, domain: string): string {\n return `${logs.cyan.dim(`${address.protocol}//`)}${logs.cyan(\n domain\n )}${logs.cyan.dim(`.${address.hostname}`)}`;\n}\n\nexport async function promptForRepoDomain(\n client: InitClient,\n defaultValue?: string\n): Promise<string> {\n const address = new URL(client.apisEndpoints.Wroom);\n\n logs.writeInfo(\n \"The name acts as a domain/endpoint for your content repo and should be completely unique.\"\n );\n\n return inquirer\n .prompt<Record<string, string>>([\n {\n name: \"repoDomain\",\n message: \"Name your Prismic repository\",\n type: \"input\",\n required: true,\n default: defaultValue,\n transformer: (value: string | undefined) =>\n prettyRepoName(address, value || defaultValue || \"repository\"),\n validate: (name: string) => validateRepositoryName(client, name),\n },\n ])\n .then((res) => res.repoDomain);\n}\n\nexport type RepoPrompt = { name: string; value: string; disabled?: string };\n\nexport type PromptOrSeparator = RepoPrompt | Separator;\n\nexport type RepoPrompts = Array<PromptOrSeparator>;\n\nexport function makeReposPretty(base: string) {\n return function ({ name, domain, role }: Models.Repository): RepoPrompt {\n const address = new URL(base);\n address.hostname = `${domain}.${address.hostname}`;\n if (Models.canUpdateCustomTypes(role) === false) {\n return {\n name: `${logs.purple.dim(\"Use\")} ${logs.bold.dim(\n name\n )} ${logs.purple.dim(`\"${address.hostname}\"`)}`,\n value: domain,\n disabled: \"Unauthorized\",\n };\n }\n\n return {\n name: `${logs.purple(\"Use\")} ${logs.bold(name)} ${logs.purple(\n `\"${address.hostname}\"`\n )}`,\n value: domain,\n };\n };\n}\n\nexport function orderPrompts(maybeName?: string | null) {\n return (a: PromptOrSeparator, b: PromptOrSeparator): number => {\n if (a instanceof Separator || b instanceof Separator) return 0;\n if (maybeName && (a.value === maybeName || b.value === maybeName)) return 0;\n if (a.value === CREATE_REPO || b.value === CREATE_REPO) return 0;\n if (a.disabled && !b.disabled) return 1;\n if (!a.disabled && b.disabled) return -1;\n return 0;\n };\n}\n\nexport function maybeStickTheRepoToTheTopOfTheList(repoName?: string | null) {\n return (acc: RepoPrompts, curr: RepoPrompt): RepoPrompts => {\n if (repoName && curr.value === repoName) {\n return [curr, ...acc];\n }\n return [...acc, curr];\n };\n}\n\nexport function sortReposForPrompt(\n repos: Models.Repositories,\n base: string,\n cwd: string\n): RepoPrompts {\n const createNew = {\n name: `${logs.purple(\"Create a\")} ${logs.bold(\"new\")} ${logs.purple(\n \"Repository\"\n )}`,\n value: CREATE_REPO,\n };\n\n const maybeConfiguredRepoName = NodeUtils.maybeRepoNameFromSMFile(cwd, base);\n\n return repos\n .reverse()\n .map(makeReposPretty(base))\n .reduce(maybeStickTheRepoToTheTopOfTheList(maybeConfiguredRepoName), [\n createNew,\n ])\n .sort(orderPrompts(maybeConfiguredRepoName));\n}\n\nexport async function chooseOrCreateARepository(\n client: InitClient,\n cwd: string,\n framework: Models.Frameworks,\n preSelectedRepository?: string\n): Promise<string> {\n const repositories: Models.Repository[] = await client.listRepositories();\n\n const isPreSelectedValid =\n preSelectedRepository &&\n repositories.find(\n (repository) => repository.domain === preSelectedRepository\n );\n if (isPreSelectedValid) return preSelectedRepository;\n\n // No repository to display, ask for a new repository name to create it.\n if (repositories.length === 0) {\n const domainName = await promptForRepoDomain(client, preSelectedRepository);\n await createRepository(client, domainName, framework);\n return domainName;\n }\n\n // prepare the list of repositories to display\n const choices = sortReposForPrompt(\n repositories,\n client.apisEndpoints.Wroom,\n cwd\n );\n const numberOfDisabledRepos = choices.filter((repo) => {\n if (repo instanceof Separator) return false;\n return repo.disabled;\n }).length;\n\n // display the list of repositories and wait for the user to choose one.\n const promptResult = await inquirer.prompt<{ chosenRepository: string }>([\n {\n type: \"list\",\n name: \"chosenRepository\",\n default: 0,\n required: true,\n message: \"Connect a Prismic Repository or create a new one\",\n choices,\n pageSize: numberOfDisabledRepos + 2 <= 7 ? 7 : numberOfDisabledRepos + 2,\n },\n ]);\n\n // If the user has chosen to create a new repository.\n if (promptResult.chosenRepository === CREATE_REPO) {\n const domainName = await promptForRepoDomain(client, preSelectedRepository);\n await createRepository(client, domainName, framework);\n return domainName;\n }\n\n return promptResult.chosenRepository;\n}\n","import { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport * as inquirer from \"inquirer\";\nimport { logs } from \"../utils\";\n\nexport type FrameworkResult = {\n value: Models.Frameworks;\n manuallyAdded: boolean;\n};\n\nexport async function promptForFramework(): Promise<FrameworkResult> {\n const choices = Models.SupportedFrameworks.map((framework) => {\n return {\n name: NodeUtils.Framework.fancyName(framework),\n value: framework,\n };\n });\n\n return inquirer\n .prompt<{ framework: Models.Frameworks }>([\n {\n name: \"framework\",\n type: \"list\",\n message: \"Select a framework to use\",\n required: true,\n choices,\n },\n ])\n .then((res) => {\n return {\n value: res.framework,\n manuallyAdded: true,\n };\n });\n}\n\nexport async function detectFramework(cwd: string): Promise<FrameworkResult> {\n const failMessage = `Please run ${logs.bold(\n \"npx @slicemachine/init\"\n )} in a Nuxt or Next.js project`;\n\n const spinner = logs.spinner(\n \"Detecting framework to install correct dependencies\"\n );\n\n spinner.start();\n\n try {\n const maybeFramework = NodeUtils.Framework.defineFramework({\n cwd,\n supportedFrameworks: Object.values(Models.Frameworks),\n });\n\n spinner.stop();\n\n if (!maybeFramework || maybeFramework === Models.Frameworks.vanillajs) {\n logs.writeError(\"Framework not detected\");\n return await promptForFramework();\n }\n\n const nameToPrint = NodeUtils.Framework.fancyName(maybeFramework);\n\n if (!NodeUtils.Framework.isFrameworkSupported(maybeFramework)) {\n logs.writeError(`${nameToPrint} is currently not supported`);\n console.log(failMessage);\n process.exit(1);\n }\n\n logs.writeCheck(`${nameToPrint} detected`);\n\n return {\n value: maybeFramework,\n manuallyAdded: false,\n };\n } catch (error) {\n spinner.fail(\"package.json not found\");\n\n if (error instanceof Error && error.message) {\n logs.writeError(error.message);\n } else {\n console.log(failMessage);\n }\n\n process.exit(1);\n }\n}\n","import { Models } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\nimport { logs, Auth, InitClient } from \"../utils\";\n\nexport async function loginOrBypass(\n client: InitClient\n): Promise<Models.UserProfile> {\n const user: Models.UserProfile | null = await client\n .profile()\n .catch(() => null);\n\n if (user) {\n const email = user.email;\n logs.writeCheck(`Logged in as ${logs.bold(email)}`);\n return user;\n }\n\n await Auth.login(client);\n\n // update token used to make calls.\n client.updateAuthenticationToken(PrismicSharedConfigManager.getAuth());\n\n const userAfterLogin: Models.UserProfile = await client.profile();\n return userAfterLogin;\n}\n","import { CONSTS } from \"@slicemachine/core\";\nimport type { Models } from \"@slicemachine/core\";\nimport * as Prismic from \"@slicemachine/core/build/prismic\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { FrameworkResult } from \"./detect-framework\";\nimport { InitClient, logs } from \"../utils\";\nimport Tracker from \"../utils/tracker\";\n\nconst defaultSliceMachineVersion = \"0.0.41\";\n\nexport async function configureProject(\n client: InitClient,\n cwd: string,\n repositoryDomainName: string,\n framework: FrameworkResult,\n sliceLibPath: string[] = [],\n tracking = true\n): Promise<void> {\n const frameworkName = NodeUtils.Framework.fancyName(framework.value);\n const spinner = logs.spinner(\n `Configuring your ${frameworkName} and Prismic project...`\n );\n spinner.start();\n\n try {\n const manifest = NodeUtils.retrieveManifest(cwd);\n const packageJson = NodeUtils.retrieveJsonPackage(cwd);\n\n const sliceMachineVersionInstalled =\n getTheSliceMachineVersionInstalled(packageJson);\n\n const manifestAlreadyExistWithContent = manifest.exists && manifest.content;\n\n const libs =\n manifest.content &&\n manifest.content.libraries &&\n manifest.content.libraries.length > 0\n ? manifest.content.libraries\n : [\"@/slices\"];\n\n const manifestUpdated: Models.Manifest = {\n ...(manifestAlreadyExistWithContent\n ? manifest.content\n : { _latest: sliceMachineVersionInstalled }),\n apiEndpoint: Prismic.Endpoints.buildRepositoryEndpoint(\n client.apisEndpoints.Wroom,\n repositoryDomainName\n ),\n libraries: [...libs, ...sliceLibPath], // odd case here for staters\n ...(framework.manuallyAdded ? { framework: framework.value } : {}),\n ...(!tracking ? { tracking } : {}),\n };\n\n if (!manifest.exists) NodeUtils.createManifest(cwd, manifestUpdated);\n else NodeUtils.patchManifest(cwd, manifestUpdated);\n\n // create the default slices folder if it doesn't exist.\n const pathToSlicesFolder = NodeUtils.CustomPaths(cwd)\n .library(\"slices\")\n .value();\n if (\n !NodeUtils.Files.exists(pathToSlicesFolder) &&\n libs.includes(\"@/slices\")\n ) {\n NodeUtils.Files.mkdir(pathToSlicesFolder, { recursive: true });\n }\n\n // add slicemachine script to package.json.\n NodeUtils.addJsonPackageSmScript(cwd);\n\n await Tracker.get().trackInitDone(framework.value);\n\n spinner.succeed(\"Project configured! Ready to start\");\n } catch {\n spinner.fail(\"Failed to configure Slice Machine\");\n process.exit(-1);\n }\n}\n\nconst getTheSliceMachineVersionInstalled = (\n packageJson: NodeUtils.FileContent<NodeUtils.JsonPackage>\n) => {\n const sliceMachinePackageInstalled = Object.entries(\n packageJson.content?.devDependencies || {}\n ).find((devDependency) => {\n if (devDependency[0] === CONSTS.SM_PACKAGE_NAME) {\n return devDependency;\n }\n });\n\n if (!sliceMachinePackageInstalled) {\n return defaultSliceMachineVersion;\n }\n\n const extractedVersion = extractVersionNumberFromSemver(\n sliceMachinePackageInstalled[1]\n );\n\n if (!extractedVersion) {\n return defaultSliceMachineVersion;\n }\n\n return extractedVersion;\n};\n\nconst extractVersionNumberFromSemver = (semver: string) => {\n const versionFound = semver.match(/\\d+\\.\\d+\\.\\d+/);\n\n if (versionFound && versionFound.length > 0) {\n return versionFound[0];\n }\n\n return null;\n};\n","import { CONSTS } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { logs } from \"../utils\";\n\nexport function displayFinalMessage(\n cwd: string,\n wasStarter: boolean,\n reponame: string,\n base: string\n): void {\n const yarnLock = NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd));\n const command = `${yarnLock ? \"yarn\" : \"npm\"} run ${CONSTS.SCRIPT_NAME}`;\n console.log();\n\n if (wasStarter) {\n const repoUrl = new URL(base);\n repoUrl.hostname = `${reponame}.${repoUrl.hostname}`;\n const urlAsString = repoUrl.toString();\n\n const message = `${logs.white(\n \"■\"\n )} Start editing your content in Prismic ${logs.purple(urlAsString)}`;\n console.log(message);\n } else {\n console.log(\n `${logs.white(\"■\")} Run ${logs.purple(\n command\n )} to launch Slice Machine and create your first Custom Type`\n );\n }\n}\n","import * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { execCommand } from \"../utils\";\n\nexport type Dependency = string | { name: string; version: string };\nexport const Dependencies = {\n fromPkgFormat(\n pkgDeps: Record<string, string> | undefined\n ): ReadonlyArray<Dependency> | undefined {\n if (!pkgDeps) return;\n\n return Object.entries(pkgDeps).map(([name, version]) => ({\n name,\n version,\n }));\n },\n};\nfunction formatDeps(dependencies: ReadonlyArray<Dependency>): string {\n return dependencies\n .map((dep) => {\n if (typeof dep === \"string\") return dep;\n return `${dep.name}@${dep.version}`;\n })\n .join(\" \");\n}\n\nexport interface PackageManager {\n install(dependencies: ReadonlyArray<Dependency>): Promise<{ stderr: string }>;\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }>;\n}\n\nexport const PackageManager = {\n get(cwd: string): PackageManager {\n if (NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd))) {\n return Yarn;\n }\n return Npm;\n },\n};\n\nexport const Yarn: PackageManager = {\n install(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`yarn add ${formatDeps(dependencies)}`);\n },\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`yarn add --dev ${formatDeps(dependencies)}`);\n },\n};\n\nexport const Npm: PackageManager = {\n install(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`npm i --save ${formatDeps(dependencies)}`);\n },\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`npm i --save-dev ${formatDeps(dependencies)}`);\n },\n};\n","import { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport tmp from \"tmp\";\nimport AdmZip from \"adm-zip\";\nimport fsExtra from \"fs-extra\";\nimport axios from \"axios\";\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport { getOrElseW } from \"fp-ts/Either\";\nimport { PackageManager, Dependencies } from \"../utils/PackageManager\";\nimport Tracker from \"../utils/tracker\";\nimport { logs } from \"../utils\";\n\nconst { PackageJsonHelper } = NodeUtils;\n\nconst downloadFile = async (reqUrl: string): Promise<string> => {\n const res = await axios.get<Buffer>(reqUrl, { responseType: \"arraybuffer\" });\n\n return new Promise((resolve, reject) => {\n if (res.status == 200) {\n const tmpZipFile = tmp.tmpNameSync();\n const zip = new AdmZip(res.data);\n zip.extractAllTo(tmpZipFile);\n resolve(tmpZipFile);\n } else {\n reject();\n }\n });\n};\n\nfunction toGithubSource(githubPath: string, branch: string): string {\n return `https://codeload.github.com/${githubPath}/zip/${branch}`;\n}\n\nexport async function installLib(\n cwd: string,\n libGithubPath: string,\n branch = \"HEAD\"\n): Promise<string[] | undefined> {\n const spinner = logs.spinner(\n `Installing the ${libGithubPath} lib in your project...`\n );\n\n try {\n spinner.start();\n\n const [githubUserName, githubProjectName] = libGithubPath.split(\"/\");\n const source = toGithubSource(libGithubPath, branch);\n\n const zipFilePath = await downloadFile(source);\n const outputFolder = `${githubProjectName}-${branch}`;\n const projectPath = path.join(zipFilePath, outputFolder);\n\n const name = `${githubUserName}-${githubProjectName}`;\n const libDestinationFolder = path.join(cwd, name);\n\n // We should be able to offer the ability to override or not an existing library\n if (fs.existsSync(libDestinationFolder)) {\n spinner.succeed(`Lib \"${libGithubPath}\" was already installed (skipped)`);\n return;\n }\n\n // We copy all the slices into the the user project minus the src folder\n fsExtra.moveSync(path.join(projectPath, \"src\"), libDestinationFolder);\n\n // handle dependencies\n const pkgManager = PackageManager.get(cwd);\n const pkgJson = PackageJsonHelper.fromPath(\n path.join(projectPath, \"package.json\")\n );\n if (pkgJson instanceof Error) throw pkgJson;\n\n const dependencies = Dependencies.fromPkgFormat(pkgJson.dependencies);\n if (dependencies) await pkgManager.install(dependencies);\n\n // generate meta file\n NodeUtils.Files.write(path.join(libDestinationFolder, \"meta.json\"), {\n name: pkgJson.name,\n });\n\n // retrieve all slices lib paths\n const manifest = NodeUtils.Files.readEntity<Error | Models.Manifest>(\n path.join(projectPath, \"sm.json\"),\n (payload: unknown) => {\n return getOrElseW(\n () => new Error(`Unable to parse sm.json from lib ${libGithubPath}`)\n )(Models.Manifest.decode(payload));\n }\n );\n if (manifest instanceof Error) throw manifest;\n\n const localLibs = Models.ManifestHelper.localLibraries(manifest).map(\n ({ path }) => {\n return `~/${name}/${path.replace(\"src/\", \"\")}`;\n }\n );\n\n spinner.succeed(\n `Slice library \"${libGithubPath}\" was installed successfully`\n );\n\n void Tracker.get().trackDownloadLibrary(libGithubPath);\n return localLibs;\n } catch (error) {\n spinner.fail(`Error installing ${libGithubPath} lib!`);\n if (error instanceof Error) {\n console.error(error.message);\n }\n process.exit(-1);\n }\n}\n","import inquirer from \"inquirer\";\n\nexport async function promptToPushSlices(): Promise<boolean> {\n return inquirer\n .prompt<{ pushSlices: boolean }>([\n {\n type: \"confirm\",\n name: \"pushSlices\",\n default: false,\n message:\n \"Your repository already contains Slices. Do you want to continue pushing your local Slices?\",\n },\n ])\n .then((res) => res.pushSlices);\n}\n\nexport async function promptToPushCustomTypes(): Promise<boolean> {\n return inquirer\n .prompt<{ pushCustomTypes: boolean }>([\n {\n type: \"confirm\",\n name: \"pushCustomTypes\",\n default: false,\n message:\n \"Your repository already contains Custom Types. Do you want to continue pushing your local Custom Types?\",\n },\n ])\n .then((res) => res.pushCustomTypes);\n}\n","import { InitClient } from \"../../utils\";\nimport {\n Component,\n ComponentInfo,\n VariationSM,\n SliceSM,\n} from \"@slicemachine/core/build/models\";\nimport { Acl, ClientError } from \"@slicemachine/client\";\nimport { writeError } from \"../../utils/logs\";\n\nasync function updateVariationWithScreenshot(\n client: InitClient,\n acl: Acl,\n screenshotPaths: ComponentInfo[\"screenshotPaths\"],\n sliceName: SliceSM[\"id\"],\n variation: VariationSM\n): Promise<VariationSM> {\n const screenshot = screenshotPaths[variation.id];\n if (!screenshot || !screenshot.path) return Promise.resolve(variation);\n\n return client\n .uploadScreenshot({\n acl,\n sliceName,\n variationId: variation.id,\n filePath: screenshot.path,\n })\n .then((screenshotUrl) => {\n return {\n ...variation,\n imageUrl: screenshotUrl,\n };\n })\n .catch((error: ClientError) => {\n writeError(\n `Couldn't upload screenshot slice: ${sliceName} - variation: ${variation.id}`\n );\n writeError(error.message, \"Full error:\");\n return variation;\n });\n}\n\nexport async function updateSlicesWithScreenshots(\n client: InitClient,\n acl: Acl,\n components: Array<Component>\n): Promise<Array<SliceSM>> {\n return Promise.all(\n components.map(async (component) => {\n const { screenshotPaths, model } = component;\n\n const variationsUpdated: VariationSM[] = await Promise.all(\n model.variations.map(async (variation) =>\n updateVariationWithScreenshot(\n client,\n acl,\n screenshotPaths,\n model.id,\n variation\n )\n )\n );\n\n return {\n ...model,\n variations: variationsUpdated,\n };\n })\n );\n}\n","import { Component, Manifest, Slices } from \"@slicemachine/core/build/models\";\nimport { Acl, ClientError } from \"@slicemachine/client\";\nimport { InitClient, logs } from \"../../utils\";\nimport * as Libraries from \"@slicemachine/core/build/libraries\";\nimport { promptToPushSlices } from \"./prompts\";\nimport { updateSlicesWithScreenshots } from \"./s3\";\nimport { writeError } from \"../../utils/logs\";\n\nexport async function sendSlices(\n client: InitClient,\n cwd: string,\n manifest: Manifest\n): Promise<boolean> {\n if (!manifest.libraries) return Promise.resolve(false); // No libraries defined\n\n const libraries = Libraries.libraries(cwd, manifest.libraries);\n const components = libraries.reduce<Array<Component>>((acc, lib) => {\n return [...acc, ...lib.components];\n }, []);\n\n if (components.length === 0) return Promise.resolve(false); // No slices to send found in the libraries\n\n const remoteSlicesIds: string[] = await client\n .getSlices()\n .then((slices) => slices.map((slice) => slice.id));\n\n // If the repository already has Slices, ask the user to confirm.\n if (remoteSlicesIds.length) {\n const pushAnyway = await promptToPushSlices();\n if (pushAnyway === false) return Promise.resolve(true);\n }\n\n const spinner = logs.spinner(\n \"Pushing existing Slice models to your repository\"\n );\n spinner.start();\n\n const acl: Acl | null = await client\n .createAcl()\n .catch((error: ClientError) => {\n writeError(\n \"Uploading screenshots for your slices failed, please contact us.\"\n );\n writeError(error.message, \"Full error:\");\n return null;\n });\n\n // If the acl failed to be created, don't mind the screenshots.\n const models = acl\n ? await updateSlicesWithScreenshots(client, acl, components)\n : components.map((component) => component.model);\n\n await Promise.all(\n models.map(async (model) => {\n const slice = Slices.fromSM(model);\n\n const promise = remoteSlicesIds.includes(slice.id)\n ? client.updateSlice(slice)\n : client.insertSlice(slice);\n\n return promise.catch((error: ClientError) => {\n logs.writeError(`Sending slice ${model.id} - ${error.message}`);\n\n // throwing the error again to stop the Promise.all\n throw error;\n });\n })\n ).catch(() => {\n // the error about the slice that failed to be pushed should be in the terminal already.\n process.exit(1);\n });\n\n spinner.succeed();\n return Promise.resolve(true);\n}\n","import { CustomType } from \"@prismicio/types-internal/lib/customtypes\";\nimport { Files, CustomTypesPaths } from \"@slicemachine/core/build/node-utils\";\nimport { isLeft } from \"fp-ts/lib/Either\";\nimport { promptToPushCustomTypes } from \"./prompts\";\nimport { InitClient, logs } from \"../../utils\";\nimport { ClientError } from \"@slicemachine/client\";\n\nexport function readLocalCustomTypes(cwd: string): Array<CustomType> {\n const customTypePaths = CustomTypesPaths(cwd);\n const dir = customTypePaths.value();\n\n if (Files.isDirectory(dir) === false) return [];\n\n const fileNames = Files.readDirectory(dir);\n\n const files = fileNames.reduce<Array<CustomType>>((acc, fileName) => {\n const filePath = customTypePaths.customType(fileName).model();\n const json = Files.safeReadJson(filePath);\n\n if (!json) return acc;\n\n const file = CustomType.decode(json);\n\n if (file instanceof Error) {\n logs.writeError(`reading ${filePath}: ${file.message}`);\n return acc;\n }\n if (isLeft(file)) {\n logs.writeError(`validating ${filePath}: ${JSON.stringify(file.left)}`);\n return acc;\n }\n\n return [...acc, file.right];\n }, []);\n\n return files;\n}\n\nexport async function sendCustomTypes(client: InitClient, cwd: string) {\n const localCustomTypes = readLocalCustomTypes(cwd);\n\n // nothing to push\n if (localCustomTypes.length === 0) return Promise.resolve(false);\n\n const remoteCustomTypeIds = await client\n .getCustomTypes()\n .then((customTypes) => customTypes.map((customType) => customType.id));\n\n if (remoteCustomTypeIds.length) {\n const shouldPush = await promptToPushCustomTypes();\n if (shouldPush === false) return Promise.resolve(false);\n }\n\n const spinner = logs.spinner(\n \"Pushing existing custom types to your repository\"\n );\n spinner.start();\n\n await Promise.all(\n localCustomTypes.map(async (customType) => {\n const promise = remoteCustomTypeIds.includes(customType.id)\n ? client.updateCustomType(customType)\n : client.insertCustomType(customType);\n\n return promise.catch((error: ClientError) => {\n logs.writeError(\n `Sending custom type ${customType.id} - ${error.message}`\n );\n\n // throwing the error again to stop the Promise.all\n throw error;\n });\n })\n ).catch(() => {\n // the error about the custom type that failed to be pushed should be in the terminal already.\n process.exit(1);\n });\n\n spinner.succeed();\n return Promise.resolve(true);\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport type { AxiosError } from \"axios\";\n\nimport * as t from \"io-ts\";\nimport { getOrElseW } from \"fp-ts/Either\";\nimport { InitClient, logs, lsdir, lsfiles } from \"../../utils\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic/SharedConfig\";\n\nconst SignatureFileReader = t.type({\n signature: t.string,\n});\n\ntype SignatureFile = t.TypeOf<typeof SignatureFileReader>;\n\nexport async function readSignatureFile(cwd: string): Promise<SignatureFile> {\n const pathToFile = path.join(cwd, \"documents\", \"index.json\");\n return fs.promises.readFile(pathToFile, \"utf-8\").then((res) => {\n const data = JSON.parse(res) as unknown;\n return getOrElseW(() => {\n throw new Error(\"Unable to read document signature file\");\n })(SignatureFileReader.decode(data));\n });\n}\n\nexport async function readDocuments(\n cwd: string\n): Promise<Record<string, unknown>> {\n const documentDir = path.join(cwd, \"documents\");\n const dirs = await lsdir(documentDir);\n\n const files = (await Promise.all(dirs.map((dir) => lsfiles(dir)))).flat();\n\n const documentObj = files.reduce<Record<string, unknown>>((acc, file) => {\n const filename: string = path.parse(file).name;\n const fileContent: string = fs.readFileSync(file, \"utf-8\");\n const json = JSON.parse(fileContent) as Record<string, unknown>;\n\n return { ...acc, [filename]: json };\n }, {});\n\n return documentObj;\n}\n\nexport async function sendDocuments(\n client: InitClient,\n cwd: string\n): Promise<boolean> {\n const pathToDocuments = path.join(cwd, \"documents\");\n const pathToSignatureFile = path.join(pathToDocuments, \"index.json\");\n\n // Without the signature, we can't push documents to Prismic.\n if (!fs.existsSync(pathToSignatureFile)) return Promise.resolve(false);\n\n const signatureObj = await readSignatureFile(cwd);\n const documents: Record<string, unknown> = await readDocuments(cwd);\n\n // No documents to push\n if (Object.keys(documents).length === 0) return Promise.resolve(false);\n\n const spinner = logs.spinner(\"Pushing existing documents to your repository\");\n spinner.start();\n\n return client\n .pushDocuments(\n signatureObj.signature,\n documents,\n PrismicSharedConfigManager.get().cookies\n )\n .then(() => {\n spinner.succeed();\n fs.rmSync(pathToDocuments, { recursive: true, force: true });\n return true;\n })\n .catch((e: AxiosError) => {\n spinner.fail();\n if (e.response?.data === \"Repository should not contain documents\") {\n logs.writeError(\n \"The selected repository is not empty, documents cannot be uploaded. Please choose an empty repository or delete the documents contained in your repository.\"\n );\n } else {\n logs.writeError(\n \"Sending documents failed, please try again. If the problem persists, contact us.\"\n );\n logs.writeError(`Full error: ${e.code || 500} - ${e.message}`);\n }\n process.exit(1);\n });\n}\n","import { retrieveManifest, Files } from \"@slicemachine/core/build/node-utils\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { sendSlices } from \"./starters/slices\";\nimport { sendCustomTypes } from \"./starters/custom-types\";\nimport { sendDocuments } from \"./starters/documents\";\nimport { InitClient } from \"../utils\";\n\nexport async function sendStarterData(\n client: InitClient,\n cwd: string,\n pushDocuments = true\n) {\n const manifest = retrieveManifest(cwd);\n const documentsPath = path.join(cwd, \"documents\");\n const hasDocuments = Files.exists(documentsPath);\n\n if (manifest.exists === false || hasDocuments === false)\n return Promise.resolve(false);\n\n if (manifest.content) await sendSlices(client, cwd, manifest.content);\n await sendCustomTypes(client, cwd);\n\n // If the user choose not to push documents, we still delete the documents folder.\n if (!pushDocuments) {\n fs.rmSync(documentsPath, { recursive: true, force: true });\n return Promise.resolve(true);\n }\n\n return sendDocuments(client, cwd);\n}\n","import { ApplicationMode } from \"@slicemachine/client\";\nimport Prismic from \"@slicemachine/core/build/prismic\";\nimport Tracker from \"./utils/tracker\";\nimport {\n installRequiredDependencies,\n validatePkg,\n chooseOrCreateARepository,\n loginOrBypass,\n configureProject,\n displayFinalMessage,\n detectFramework,\n installLib,\n sendStarterData,\n} from \"./steps\";\nimport {\n findArgument,\n findFlag,\n logs,\n getApplicationMode,\n InitClient,\n} from \"./utils\";\n\nasync function init() {\n const cwd = findArgument(process.argv, \"cwd\") || process.cwd();\n const mode: ApplicationMode =\n getApplicationMode(findArgument(process.argv, \"mode\")) ||\n ApplicationMode.PROD;\n const lib: string | undefined = findArgument(process.argv, \"library\");\n const branch: string | undefined = findArgument(process.argv, \"branch\");\n const isTrackingAvailable: boolean =\n findArgument(process.argv, \"tracking\") !== \"false\";\n const preSelectedRepository: string | undefined = findArgument(\n process.argv,\n \"repository\"\n );\n const pushDocuments = !findFlag(process.argv, \"no-docs\");\n\n Tracker.get().initialize(\n process.env.PUBLIC_SM_INIT_SEGMENT_KEY ||\n \"JfTfmHaATChc4xueS7RcCBsixI71dJIJ\",\n isTrackingAvailable\n );\n\n void Tracker.get().trackInitStart(preSelectedRepository);\n\n // initializing the client with what we have for now.\n const client = new InitClient(\n mode,\n null,\n Prismic.PrismicSharedConfigManager.getAuth()\n );\n\n console.log(\n logs.purple(\n \"You're about to configure Slicemachine... Press ctrl + C to cancel\"\n )\n );\n\n // verify package.json file exist\n validatePkg(cwd);\n\n // login\n const user = await loginOrBypass(client);\n\n Tracker.get().identifyUser(user.shortId, user.intercomHash);\n void Tracker.get().trackInitIdentify();\n\n // detect the framework used by the project\n const frameworkResult = await detectFramework(cwd);\n\n // select the repository used with the project.\n const repository = await chooseOrCreateARepository(\n client,\n cwd,\n frameworkResult.value,\n preSelectedRepository\n );\n\n Tracker.get().setRepository(repository);\n client.updateRepository(repository);\n\n const sliceLibPath = lib ? await installLib(cwd, lib, branch) : undefined;\n\n const wasStarter = await sendStarterData(client, cwd, pushDocuments); // will be false if no sm.json is found\n\n // configure the SM.json file and the json package file of the project..\n await configureProject(\n client,\n cwd,\n repository,\n frameworkResult,\n sliceLibPath,\n isTrackingAvailable\n );\n\n // Install the required dependencies in the project.\n await installRequiredDependencies(cwd, frameworkResult.value, wasStarter);\n\n // Ask the user to run slice-machine.\n displayFinalMessage(cwd, wasStarter, repository, client.apisEndpoints.Wroom);\n}\n\ninit()\n .then(() => {\n process.exit(0);\n })\n .catch((error) => {\n if (error instanceof Error) logs.writeError(error.message);\n else console.error(error);\n });\n"],"names":["uuidv4","ServerAnalytics","chalk","underline","bold","spinner","ora","writeError","Utils","CONSTS","hapi","PrismicSharedConfigManager","open","Endpoints","Client","getAndValidateResponse","t","Models","fs","path","util","exec","ApplicationMode","NodeUtils","logs.spinner","logs.writeWarning","logs.writeError","logs.bold","logs.cyan","logs.writeInfo","inquirer","logs.purple","Separator","logs.writeCheck","Prismic","logs.white","axios","tmp","AdmZip","fsExtra","getOrElseW","Libraries","models","Slices","CustomTypesPaths","Files","CustomType","isLeft","retrieveManifest","client"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/utils/tracker.ts","../src/utils/logs.ts","../src/utils/auth/helpers.ts","../src/utils/auth/index.ts","../src/utils/client.ts","../src/utils/fs.ts","../src/utils/index.ts","../src/steps/install-required-dependencies.ts","../src/steps/validate-pkg.ts","../src/utils/create-repo.ts","../src/utils/validateRepositoryName.ts","../src/steps/choose-or-create-a-repository.ts","../src/steps/detect-framework.ts","../src/steps/loginOrBypass.ts","../src/steps/configure-project.ts","../src/steps/display-final-message.ts","../src/utils/PackageManager.ts","../src/steps/install-lib.ts","../src/steps/starters/prompts.ts","../src/steps/starters/s3.ts","../src/steps/starters/slices.ts","../src/steps/starters/custom-types.ts","../src/steps/starters/documents.ts","../src/steps/sendStarterData.ts","../src/steps/set-version.ts","../src/index.ts"],"sourcesContent":["import ServerAnalytics from \"analytics-node\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { Models } from \"@slicemachine/core\";\n\nexport enum EventType {\n DownloadLibrary = \"SliceMachine Download Library\",\n InitStart = \"SliceMachine Init Start\",\n InitIdentify = \"SliceMachine Init Identify\",\n InitEnd = \"SliceMachine Init End\",\n}\n\ntype SegmentIdentifier = { userId: string } | { anonymousId: string };\n\nexport class InitTracker {\n #client: ServerAnalytics | null = null;\n #isTrackingActive = true;\n #anonymousId = \"\";\n #userId: string | null = null;\n #repository: string | null = null;\n\n initialize(segmentKey: string, isTrackingActive = true): void {\n try {\n // The initialize method cannot be used for changing some class properties\n if (!!this.#client) return;\n\n this.#isTrackingActive = isTrackingActive;\n this.#anonymousId = uuidv4();\n this.#client = new ServerAnalytics(segmentKey);\n } catch (error) {\n // If the client is not correctly setup we are silently failing as the tracker is not a critical feature\n }\n }\n\n /** Private methods **/\n\n _trackEvent(\n eventType: EventType,\n attributes: Record<string, unknown> = {}\n ): Promise<void> {\n return new Promise((resolve) => {\n if (!this._isTrackingPossible(this.#client)) {\n return resolve();\n }\n\n const identifier = this._createSegmentIdentifier();\n const payload = {\n event: eventType,\n ...identifier,\n properties: attributes,\n ...(this.#repository\n ? { context: { groupId: { Repository: this.#repository } } }\n : {}),\n };\n\n return this.#client.track(payload, () => {\n // if(_) return reject(_)\n return resolve();\n });\n });\n }\n\n _identifyEvent(userId: string, intercomHash: string): void {\n if (!this._isTrackingPossible(this.#client)) {\n return;\n }\n\n try {\n this.#client.identify({\n userId,\n anonymousId: this.#anonymousId,\n integrations: {\n Intercom: {\n user_hash: intercomHash,\n },\n },\n });\n } catch {\n // If the client is not correctly setup we are silently failing as the tracker is not a critical feature\n }\n }\n\n _isTrackingPossible(\n client: ServerAnalytics | null\n ): client is ServerAnalytics {\n return !!client && this.#isTrackingActive;\n }\n\n _createSegmentIdentifier(): SegmentIdentifier {\n return !!this.#userId\n ? { userId: this.#userId }\n : { anonymousId: this.#anonymousId };\n }\n\n /** Public methods **/\n\n setRepository(repository: string) {\n this.#repository = repository;\n }\n\n identifyUser(userId: string, intercomHash: string): void {\n this.#userId = userId;\n return this._identifyEvent(userId, intercomHash);\n }\n\n trackDownloadLibrary(library: string): Promise<void> {\n return this._trackEvent(EventType.DownloadLibrary, { library });\n }\n\n trackInitIdentify(): Promise<void> {\n return this._trackEvent(EventType.InitIdentify);\n }\n\n trackInitStart(repoDomain: string | undefined): Promise<void> {\n if (repoDomain) this.setRepository(repoDomain);\n return this._trackEvent(EventType.InitStart, { repo: repoDomain });\n }\n\n trackInitEndSuccess(framework: Models.Frameworks): Promise<void> {\n return this._trackEvent(EventType.InitEnd, {\n framework,\n repo: this.#repository,\n result: \"success\",\n });\n }\n\n trackInitEndFail(framework: Models.Frameworks, error: string): Promise<void> {\n return this._trackEvent(EventType.InitEnd, {\n framework,\n repo: this.#repository,\n result: \"error\",\n error,\n });\n }\n}\n\nconst Tracker = (() => {\n let smTrackerInstance: InitTracker;\n\n const init = () => new InitTracker();\n\n return {\n get() {\n if (!smTrackerInstance) smTrackerInstance = init();\n return smTrackerInstance;\n },\n };\n})();\n\nexport default Tracker;\n","import chalk from \"chalk\";\nimport ora from \"ora\";\n\nexport const purple = chalk.hex(\"8c76fc\");\nexport const error = chalk.hex(\"FF6868\");\nexport const warning = chalk.hex(\"F3AD38\");\nexport const underline = chalk.underline;\nexport const bold = chalk.bold;\nexport const dim = chalk.dim;\nexport const cyan = chalk.cyan;\nexport const yellow = chalk.yellow;\nexport const white = chalk.white;\n\nexport const spinner = ora;\n\nexport const writeError = (msg: string, prefix = \"Error!\"): void =>\n console.error(`${error(prefix)} ${msg}`);\n\nexport const writeWarning = (msg: string, prefix = \"Warning!\"): void =>\n console.warn(`${warning(prefix)} ${msg}`);\n\nexport const writeCheck = (msg: string): void => {\n ora().succeed(msg); // using the same check as Ora for coherence\n};\n\nexport const writeInfo = (msg: string): void => {\n console.log(`${yellow(\"ℹ\")} ${dim(msg)}`);\n};\n","import * as hapi from \"@hapi/hapi\";\nimport open from \"open\";\nimport * as logs from \"../logs\";\nimport { Utils, CONSTS } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\n\nconst { Cookie } = Utils;\nconst { DEFAULT_BASE, DEFAULT_SERVER_PORT } = CONSTS;\n\nconst { bold, underline, spinner, writeError } = logs;\n\nexport type HandlerData = { email: string; cookies: ReadonlyArray<string> };\n\nexport const isHandlerData = (\n data: string | Record<string, unknown>\n): data is HandlerData => {\n if (typeof data != \"object\") return false;\n\n const { email, cookies } = data as Partial<HandlerData>;\n return (\n Boolean(email && cookies) &&\n Array.isArray(cookies) &&\n !cookies.some((c: unknown) => typeof c !== \"string\")\n );\n};\n\nconst Routes = {\n authentication:\n (server: hapi.Server) =>\n (\n onSuccess: (data: HandlerData) => void,\n onFail: () => void\n ): hapi.ServerRoute => ({\n method: \"POST\",\n path: \"/\",\n handler: authenticationHandler(server)(onSuccess, onFail),\n }),\n\n notFound: {\n method: [\"GET\", \"POST\"],\n path: \"/{any*}\",\n handler: (\n request: hapi.Request,\n h: hapi.ResponseToolkit\n ): hapi.ResponseObject => {\n return h\n .response(`not found: [${request.method}]: ${request.url.toString()}`)\n .code(404);\n },\n },\n};\n\nexport function validatePayload(\n payload: Buffer | string | Record<string, unknown>\n): HandlerData | null {\n if (Buffer.isBuffer(payload)) return null;\n return isHandlerData(payload) ? payload : null;\n}\n\nconst authenticationHandler =\n (server: hapi.Server) =>\n (onSuccess: (data: HandlerData) => void, onFail: () => void) => {\n return (request: hapi.Request, h: hapi.ResponseToolkit) => {\n try {\n const data: HandlerData | null = validatePayload(\n request.payload as Buffer | string | Record<string, unknown>\n ); // type coming from the lib\n\n if (!data) {\n onFail();\n h.response(\"Error with cookies\").code(400);\n throw new Error(\n \"It seems the server didn't respond properly, please contact us.\"\n );\n }\n onSuccess(data);\n return h.response(data).code(200);\n } finally {\n void server.stop({ timeout: 10000 });\n }\n };\n };\n\nfunction stripTrailingSlash(str: string) {\n return str.endsWith(\"/\") ? str.slice(0, -1) : str;\n}\n\nfunction buildServer(base: string, port: number, host: string): hapi.Server {\n const server = hapi.server({\n port,\n host,\n routes: {\n cors: {\n origin: [stripTrailingSlash(base)],\n headers: [\"Origin\", \"X-Requested-With\", \"Content-Type\", \"Accept\"],\n },\n },\n });\n return server;\n}\n\nexport function askSingleChar(title: string): Promise<string> {\n return new Promise((resolve) => {\n process.stdout.write(title);\n const rawMode: boolean = process.stdin.isRaw;\n if (process.stdin.setRawMode) process.stdin.setRawMode(true);\n\n function handler(key: Buffer) {\n const response: string = key.toString(\"utf-8\");\n if (process.stdin.setRawMode) process.stdin.setRawMode(Boolean(rawMode));\n process.stdin.removeListener(\"data\", handler);\n resolve(response);\n }\n\n process.stdin.on(\"data\", handler);\n });\n}\n\nexport async function startServerAndOpenBrowser(\n url: string,\n action: \"login\" | \"signup\",\n base: string = DEFAULT_BASE,\n port: number = DEFAULT_SERVER_PORT\n): Promise<{\n onLoginFail: () => void;\n}> {\n const confirmation = await askSingleChar(\n `>> Press any key to open the browser to ${action} or q to exit:`\n );\n if (confirmation === \"q\" || confirmation === \"\\u0003\")\n return process.exit(-1);\n\n const s = spinner(\"Waiting for the browser response\");\n\n const onLoginFail = () => {\n s.stop();\n writeError(`We failed to log you into your Prismic account`);\n console.log(`Run ${bold(\"npx slicemachine init\")} again!`);\n process.exit(-1);\n };\n\n function onSuccess(data: HandlerData) {\n s.succeed(`Logged in as ${bold(data.email)}`).stop();\n PrismicSharedConfigManager.setProperties({\n cookies: Cookie.serializeCookies(data.cookies),\n base,\n });\n }\n\n function onFail(): void {\n onLoginFail();\n }\n\n const server = buildServer(base, port, \"localhost\");\n server.route([\n Routes.authentication(server)(onSuccess, onFail),\n Routes.notFound,\n ]);\n\n return server.start().then(() => {\n console.log(\"\\nOpening browser to \" + underline(url));\n s.start();\n void open(url);\n return {\n onLoginFail,\n };\n });\n}\n","import { Utils } from \"@slicemachine/core\";\nimport { startServerAndOpenBrowser } from \"./helpers\";\nimport {\n Endpoints,\n PrismicSharedConfigManager,\n} from \"@slicemachine/core/build/prismic\";\nimport { InitClient } from \"../client\";\n\nasync function startAuth({\n client,\n url,\n action,\n}: {\n client: InitClient;\n url: string;\n action: \"signup\" | \"login\";\n}): Promise<void> {\n const { onLoginFail } = await startServerAndOpenBrowser(\n url,\n action,\n client.apisEndpoints.Wroom\n );\n try {\n // We wait 3 minutes before timeout\n await Utils.Poll.startPolling<boolean, boolean>(\n () => Auth.validateSession(client),\n (isSessionValid): isSessionValid is boolean => isSessionValid == true,\n 3000,\n 60\n );\n return;\n } catch (e) {\n onLoginFail();\n }\n}\n\nexport const Auth = {\n login: async (client: InitClient): Promise<void> => {\n const endpoints = Endpoints.buildEndpoints(client.apisEndpoints.Wroom);\n return startAuth({\n client,\n url: endpoints.Dashboard.cliLogin,\n action: \"login\",\n });\n },\n validateSession: async (client: InitClient): Promise<boolean> => {\n const authToken = PrismicSharedConfigManager.getAuth();\n\n // verify token is by retrieving the profile, update the config if need be.\n return client\n .updateAuthenticationToken(authToken)\n .profile()\n .then((userProfile) => {\n // settings shortId and IntercomHash as we switch between dev and prod.\n PrismicSharedConfigManager.setProperties({\n shortId: userProfile.shortId,\n intercomHash: userProfile.intercomHash,\n });\n return true;\n })\n .catch(() => false);\n },\n};\n","import * as t from \"io-ts\";\nimport { Models } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\nimport { Client, getAndValidateResponse } from \"@slicemachine/client\";\n\nexport class InitClient extends Client {\n async listRepositories(): Promise<Models.Repository[]> {\n return getAndValidateResponse<Models.Repository[]>(\n this._get(`${this.apisEndpoints.Users}repositories`),\n \"repository list\",\n t.array(Models.Repository)\n );\n }\n\n async createRepository(\n domain: string,\n framework: Models.Frameworks\n ): Promise<string> {\n const data = {\n domain,\n framework,\n plan: \"personal\",\n isAnnual: \"false\",\n role: \"developer\",\n };\n\n return this._fetch({\n method: \"post\",\n url: `${this.apisEndpoints.Wroom}authentication/newrepository?app=slicemachine`,\n data: data,\n headers: {\n Cookie: PrismicSharedConfigManager.get().cookies,\n \"User-Agent\": \"prismic-cli/sm\", // special user agent just for this route.\n },\n }).then(() => domain);\n }\n\n async domainExist(domain: string): Promise<boolean> {\n return getAndValidateResponse<boolean>(\n this._get(\n `${this.apisEndpoints.Wroom}app/dashboard/repositories/${domain}/exists`\n ),\n \"repository exists\",\n t.boolean\n );\n }\n\n async pushDocuments(\n signature: string,\n documents: Record<string, unknown>,\n cookies: string\n ) {\n if (!this.repository) throw new Error(\"Repository undefined in the client\");\n const repositoryDirectUrl = new URL(this.apisEndpoints.Wroom);\n repositoryDirectUrl.hostname = `${this.repository}.${repositoryDirectUrl.hostname}`;\n\n return this._fetch({\n method: \"post\",\n url: `${repositoryDirectUrl.toString()}starter/documents`,\n data: { signature, documents: JSON.stringify(documents) },\n headers: {\n Cookie: cookies,\n \"User-Agent\": \"prismic-cli/0\", // special user agent just for this route.\n },\n });\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport async function lsdir(dir: string): Promise<Array<string>> {\n return fs.promises.readdir(dir).then((dirs) => {\n return dirs\n .filter((name) => fs.statSync(path.join(dir, name)).isDirectory())\n .map((subdirectory) => path.join(dir, subdirectory));\n });\n}\n\nexport async function lsfiles(dir: string): Promise<Array<string>> {\n return fs.promises.readdir(dir).then((dirs) => {\n return dirs\n .filter((name) => fs.statSync(path.join(dir, name)).isFile())\n .map((file) => path.join(dir, file));\n });\n}\n","import { ApplicationMode } from \"@slicemachine/client\";\nimport util from \"util\";\nimport { exec } from \"child_process\";\nexport * as logs from \"./logs\";\nexport { Auth } from \"./auth\";\nexport * from \"./client\";\nexport * from \"./fs\";\n\nexport function findArgument(args: string[], name: string): string | undefined {\n const flagIndex: number = args.indexOf(`--${name}`);\n\n if (flagIndex === -1) return;\n if (args.length < flagIndex + 2) return;\n\n const flagValue = args[flagIndex + 1];\n\n if (flagValue.startsWith(\"--\")) return;\n return flagValue;\n}\n\nexport function findFlag(args: string[], name: string): boolean {\n const toFind = `--${name}`;\n return args.includes(toFind);\n}\n\nexport const execCommand: (\n command: string\n) => Promise<{ stderr: string; stdout: string }> = util.promisify(exec);\n\nexport function getApplicationMode(\n argumentValue: string | undefined\n): ApplicationMode | null {\n switch (argumentValue) {\n case ApplicationMode.PROD:\n case ApplicationMode.STAGE:\n case ApplicationMode.DEV:\n return argumentValue;\n default:\n return null;\n }\n}\n","import path from \"path\";\nimport { execCommand, logs } from \"../utils\";\nimport { CONSTS, Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\n\nconst {\n PRISMIC_CLIENT,\n PRISMIC_DOM_PACKAGE_NAME,\n PRISMIC_REACT_PACKAGE_NAME,\n SM_PACKAGE_NAME,\n NUXT_PRISMIC,\n PRISMIC_VUE,\n SLICE_SIMULATOR_REACT,\n SLICE_SIMULATOR_VUE,\n PRISMIC_HELPERS,\n} = CONSTS;\n\nfunction depsForFramework(framework: Models.Frameworks): string {\n switch (framework) {\n case Models.Frameworks.react:\n return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${PRISMIC_HELPERS}`;\n case Models.Frameworks.next:\n return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT} ${SLICE_SIMULATOR_REACT} ${PRISMIC_HELPERS}`;\n case Models.Frameworks.svelte:\n return `${PRISMIC_DOM_PACKAGE_NAME} ${PRISMIC_CLIENT}`;\n case Models.Frameworks.nuxt:\n return `${NUXT_PRISMIC} ${SLICE_SIMULATOR_VUE}`;\n case Models.Frameworks.vue:\n return `${PRISMIC_VUE} ${PRISMIC_CLIENT} ${PRISMIC_DOM_PACKAGE_NAME}`;\n default:\n return \"\";\n }\n}\n\nasync function addAndInstallDeps(\n framework: Models.Frameworks,\n useYarn = false\n): Promise<string> {\n const installDevDependencyCommand = useYarn\n ? \"yarn add -D\"\n : \"npm install --save-dev\";\n const installDependencyCommand = useYarn ? \"yarn add\" : \"npm install --save\";\n\n const { stderr } = await execCommand(\n `${installDevDependencyCommand} ${SM_PACKAGE_NAME}`\n );\n\n const deps = depsForFramework(framework);\n if (deps) await execCommand(`${installDependencyCommand} ${deps}`);\n\n return stderr;\n}\n\nasync function installDeps(useYarn = false): Promise<string> {\n const installCommand = useYarn ? \"yarn\" : \"npm install\";\n const { stderr } = await execCommand(installCommand);\n return stderr;\n}\n\nexport async function installRequiredDependencies(\n cwd: string,\n framework: Models.Frameworks,\n skipDependencies: boolean\n): Promise<void> {\n const yarnLock = NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd));\n\n const spinner = logs.spinner(\"Installing Slice Machine\");\n spinner.start();\n\n const stderr = await (skipDependencies\n ? installDeps(yarnLock)\n : addAndInstallDeps(framework, yarnLock));\n\n const pathToPkg = path.join(\n NodeUtils.PackagePaths(cwd).value(),\n SM_PACKAGE_NAME\n );\n const isPackageInstalled = NodeUtils.Files.exists(pathToPkg);\n\n if (isPackageInstalled || !stderr.length) {\n spinner.succeed(\"Slice Machine was installed successfully\");\n return;\n }\n\n spinner.fail();\n logs.writeWarning(\n `could not install ${SM_PACKAGE_NAME}. Please do it manually!`\n );\n}\n","import * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { logs } from \"../utils\";\n\nexport function validatePkg(cwd: string): void {\n const jsonPackage = NodeUtils.retrieveJsonPackage(cwd);\n if (!jsonPackage.exists) {\n logs.writeError(`package.json not found. Are you in the right folder?`);\n return process.exit(-1);\n }\n if (!jsonPackage.content) {\n logs.writeError(`could not parse package.json.`);\n return process.exit(-1);\n }\n}\n","import type { Models } from \"@slicemachine/core\";\nimport * as logs from \"./logs\";\nimport { InitClient } from \"./client\";\nimport Tracker from \"../utils/tracker\";\n\nexport function createRepository(\n client: InitClient,\n domain: string,\n framework: Models.Frameworks\n): Promise<string> {\n const spinner = logs.spinner(\"Creating Prismic Repository\");\n spinner.start();\n\n return client\n .createRepository(domain, framework)\n .then((domain: string) => {\n const addressUrl = new URL(client.apisEndpoints.Wroom);\n addressUrl.hostname = `${domain}.${addressUrl.hostname}`;\n const address = addressUrl.toString();\n spinner.succeed(`We created your new repository ${address}`);\n\n return domain;\n })\n .catch(async (error: Error) => {\n spinner.fail(`Error creating repository ${domain}`);\n await Tracker.get().trackInitEndFail(\n framework,\n \"Failed to create repository\"\n );\n if (error.message) {\n logs.writeError(error.message);\n }\n logs.writeError(`We failed to create you new prismic repository`);\n console.log(`Run ${logs.bold(\"npx @slicemachine/init\")} again!`);\n process.exit(-1);\n });\n}\n","import { InitClient } from \"./client\";\n\nexport async function validateRepositoryName(\n client: InitClient,\n name: string\n): Promise<boolean> {\n const domain = name.trim();\n const errors = [];\n\n const startsWithLetter = /^[a-zA-Z]/.test(domain);\n if (!startsWithLetter) errors.push(\"Must start with a letter.\");\n\n const acceptedChars = /^[a-z0-9-]+$/.test(domain);\n if (!acceptedChars)\n errors.push(\"Must contain only lowercase letters, numbers and hyphens.\");\n\n const fourCharactersOrMore = domain.length >= 4;\n if (!fourCharactersOrMore)\n errors.push(\n \"Must have four or more alphanumeric characters and/or hyphens.\"\n );\n\n const endsWithALetterOrNumber = /[a-z0-9]$/.test(domain);\n if (!endsWithALetterOrNumber)\n errors.push(\"Must end in a letter or a number.\");\n\n const thirtyCharacterOrLess = domain.length <= 30;\n if (!thirtyCharacterOrLess) errors.push(\"Must be 30 characters or less\");\n\n if (errors.length > 0) {\n const errorString = errors.map((d, i) => `(${i + 1}: ${d}`).join(\" \");\n const msg = `Validation errors: ${errorString}`;\n return Promise.reject(new Error(msg));\n }\n\n return client\n .domainExist(domain)\n .then((isAvailable) =>\n isAvailable\n ? true\n : Promise.reject(new Error(`${name} is already in use`))\n )\n .catch(() => Promise.reject(new Error(`${name} is already in use`)));\n}\n","import * as inquirer from \"inquirer\";\nimport Separator from \"inquirer/lib/objects/separator\";\nimport { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { createRepository } from \"../utils/create-repo\";\nimport { validateRepositoryName } from \"../utils/validateRepositoryName\";\nimport { InitClient, logs } from \"../utils\";\n\nexport const CREATE_REPO = \"$_CREATE_REPO\"; // not a valid domain name\n\nexport function prettyRepoName(address: URL, domain: string): string {\n return `${logs.cyan.dim(`${address.protocol}//`)}${logs.cyan(\n domain\n )}${logs.cyan.dim(`.${address.hostname}`)}`;\n}\n\nexport async function promptForRepoDomain(\n client: InitClient,\n defaultValue?: string\n): Promise<string> {\n const address = new URL(client.apisEndpoints.Wroom);\n\n logs.writeInfo(\n \"The name acts as a domain/endpoint for your content repo and should be completely unique.\"\n );\n\n return inquirer\n .prompt<Record<string, string>>([\n {\n name: \"repoDomain\",\n message: \"Name your Prismic repository\",\n type: \"input\",\n required: true,\n default: defaultValue,\n transformer: (value: string | undefined) =>\n prettyRepoName(address, value || defaultValue || \"repository\"),\n validate: (name: string) => validateRepositoryName(client, name),\n },\n ])\n .then((res) => res.repoDomain);\n}\n\nexport type RepoPrompt = { name: string; value: string; disabled?: string };\n\nexport type PromptOrSeparator = RepoPrompt | Separator;\n\nexport type RepoPrompts = Array<PromptOrSeparator>;\n\nexport function makeReposPretty(base: string) {\n return function ({ name, domain, role }: Models.Repository): RepoPrompt {\n const address = new URL(base);\n address.hostname = `${domain}.${address.hostname}`;\n if (Models.canUpdateCustomTypes(role) === false) {\n return {\n name: `${logs.purple.dim(\"Use\")} ${logs.bold.dim(\n name\n )} ${logs.purple.dim(`\"${address.hostname}\"`)}`,\n value: domain,\n disabled: \"Unauthorized\",\n };\n }\n\n return {\n name: `${logs.purple(\"Use\")} ${logs.bold(name)} ${logs.purple(\n `\"${address.hostname}\"`\n )}`,\n value: domain,\n };\n };\n}\n\nexport function orderPrompts(maybeName?: string | null) {\n return (a: PromptOrSeparator, b: PromptOrSeparator): number => {\n if (a instanceof Separator || b instanceof Separator) return 0;\n if (maybeName && (a.value === maybeName || b.value === maybeName)) return 0;\n if (a.value === CREATE_REPO || b.value === CREATE_REPO) return 0;\n if (a.disabled && !b.disabled) return 1;\n if (!a.disabled && b.disabled) return -1;\n return 0;\n };\n}\n\nexport function maybeStickTheRepoToTheTopOfTheList(repoName?: string | null) {\n return (acc: RepoPrompts, curr: RepoPrompt): RepoPrompts => {\n if (repoName && curr.value === repoName) {\n return [curr, ...acc];\n }\n return [...acc, curr];\n };\n}\n\nexport function sortReposForPrompt(\n repos: Models.Repositories,\n base: string,\n cwd: string\n): RepoPrompts {\n const createNew = {\n name: `${logs.purple(\"Create a\")} ${logs.bold(\"new\")} ${logs.purple(\n \"Repository\"\n )}`,\n value: CREATE_REPO,\n };\n\n const maybeConfiguredRepoName = NodeUtils.maybeRepoNameFromSMFile(cwd, base);\n\n return repos\n .reverse()\n .map(makeReposPretty(base))\n .reduce(maybeStickTheRepoToTheTopOfTheList(maybeConfiguredRepoName), [\n createNew,\n ])\n .sort(orderPrompts(maybeConfiguredRepoName));\n}\n\nexport async function chooseOrCreateARepository(\n client: InitClient,\n cwd: string,\n framework: Models.Frameworks,\n preSelectedRepository?: string\n): Promise<string> {\n const repositories: Models.Repository[] = await client.listRepositories();\n\n const isPreSelectedValid =\n preSelectedRepository &&\n repositories.find(\n (repository) => repository.domain === preSelectedRepository\n );\n if (isPreSelectedValid) return preSelectedRepository;\n\n // No repository to display, ask for a new repository name to create it.\n if (repositories.length === 0) {\n const domainName = await promptForRepoDomain(client, preSelectedRepository);\n await createRepository(client, domainName, framework);\n return domainName;\n }\n\n // prepare the list of repositories to display\n const choices = sortReposForPrompt(\n repositories,\n client.apisEndpoints.Wroom,\n cwd\n );\n const numberOfDisabledRepos = choices.filter((repo) => {\n if (repo instanceof Separator) return false;\n return repo.disabled;\n }).length;\n\n // display the list of repositories and wait for the user to choose one.\n const promptResult = await inquirer.prompt<{ chosenRepository: string }>([\n {\n type: \"list\",\n name: \"chosenRepository\",\n default: 0,\n required: true,\n message: \"Connect a Prismic Repository or create a new one\",\n choices,\n pageSize: numberOfDisabledRepos + 2 <= 7 ? 7 : numberOfDisabledRepos + 2,\n },\n ]);\n\n // If the user has chosen to create a new repository.\n if (promptResult.chosenRepository === CREATE_REPO) {\n const domainName = await promptForRepoDomain(client, preSelectedRepository);\n await createRepository(client, domainName, framework);\n return domainName;\n }\n\n return promptResult.chosenRepository;\n}\n","import { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport * as inquirer from \"inquirer\";\nimport { logs } from \"../utils\";\nimport Tracker from \"../utils/tracker\";\n\nexport type FrameworkResult = {\n value: Models.Frameworks;\n manuallyAdded: boolean;\n};\n\nexport async function promptForFramework(): Promise<FrameworkResult> {\n const choices = Models.SupportedFrameworks.map((framework) => {\n return {\n name: NodeUtils.Framework.fancyName(framework),\n value: framework,\n };\n });\n\n return inquirer\n .prompt<{ framework: Models.Frameworks }>([\n {\n name: \"framework\",\n type: \"list\",\n message: \"Select a framework to use\",\n required: true,\n choices,\n },\n ])\n .then((res) => {\n return {\n value: res.framework,\n manuallyAdded: true,\n };\n });\n}\n\nexport async function detectFramework(cwd: string): Promise<FrameworkResult> {\n const failMessage = `Please run ${logs.bold(\n \"npx @slicemachine/init\"\n )} in a Nuxt or Next.js project`;\n\n const spinner = logs.spinner(\n \"Detecting framework to install correct dependencies\"\n );\n\n spinner.start();\n\n try {\n const maybeFramework = NodeUtils.Framework.defineFramework({\n cwd,\n supportedFrameworks: Object.values(Models.Frameworks),\n });\n\n spinner.stop();\n\n if (!maybeFramework || maybeFramework === Models.Frameworks.vanillajs) {\n logs.writeError(\"Framework not detected\");\n return await promptForFramework();\n }\n\n const nameToPrint = NodeUtils.Framework.fancyName(maybeFramework);\n\n if (!NodeUtils.Framework.isFrameworkSupported(maybeFramework)) {\n logs.writeError(`${nameToPrint} is currently not supported`);\n console.log(failMessage);\n process.exit(1);\n }\n\n logs.writeCheck(`${nameToPrint} detected`);\n\n return {\n value: maybeFramework,\n manuallyAdded: false,\n };\n } catch (error) {\n spinner.fail(\"package.json not found\");\n\n if (error instanceof Error && error.message) {\n logs.writeError(error.message);\n } else {\n console.log(failMessage);\n }\n await Tracker.get().trackInitEndFail(\n Models.Frameworks.none,\n \"Framework not detected\"\n );\n process.exit(1);\n }\n}\n","import { Models } from \"@slicemachine/core\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic\";\nimport { logs, Auth, InitClient } from \"../utils\";\n\nexport async function loginOrBypass(\n client: InitClient\n): Promise<Models.UserProfile> {\n const user: Models.UserProfile | null = await client\n .profile()\n .catch(() => null);\n\n if (user) {\n const email = user.email;\n logs.writeCheck(`Logged in as ${logs.bold(email)}`);\n return user;\n }\n\n await Auth.login(client);\n\n // update token used to make calls.\n client.updateAuthenticationToken(PrismicSharedConfigManager.getAuth());\n\n const userAfterLogin: Models.UserProfile = await client.profile();\n return userAfterLogin;\n}\n","import type { Models } from \"@slicemachine/core\";\nimport * as Prismic from \"@slicemachine/core/build/prismic\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { FrameworkResult } from \"./detect-framework\";\nimport { InitClient, logs } from \"../utils\";\nimport Tracker from \"../utils/tracker\";\n\nexport async function configureProject(\n client: InitClient,\n cwd: string,\n repositoryDomainName: string,\n framework: FrameworkResult,\n sliceLibPath: string[] = [],\n tracking = true\n): Promise<void> {\n const frameworkName = NodeUtils.Framework.fancyName(framework.value);\n const spinner = logs.spinner(\n `Configuring your ${frameworkName} and Prismic project...`\n );\n spinner.start();\n\n try {\n const manifest = NodeUtils.retrieveManifest(cwd);\n const manifestAlreadyExistWithContent = manifest.exists && manifest.content;\n\n const libs =\n manifest.content &&\n manifest.content.libraries &&\n manifest.content.libraries.length > 0\n ? manifest.content.libraries\n : [\"@/slices\"];\n\n const manifestUpdated: Models.Manifest = {\n ...(manifestAlreadyExistWithContent ? manifest.content : {}),\n apiEndpoint: Prismic.Endpoints.buildRepositoryEndpoint(\n client.apisEndpoints.Wroom,\n repositoryDomainName\n ),\n libraries: [...libs, ...sliceLibPath], // odd case here for staters\n ...(framework.manuallyAdded ? { framework: framework.value } : {}),\n ...(!tracking ? { tracking } : {}),\n };\n\n if (!manifest.exists) NodeUtils.createManifest(cwd, manifestUpdated);\n else NodeUtils.patchManifest(cwd, manifestUpdated);\n\n // create the default slices folder if it doesn't exist.\n const pathToSlicesFolder = NodeUtils.CustomPaths(cwd)\n .library(\"slices\")\n .value();\n if (\n !NodeUtils.Files.exists(pathToSlicesFolder) &&\n libs.includes(\"@/slices\")\n ) {\n NodeUtils.Files.mkdir(pathToSlicesFolder, { recursive: true });\n }\n\n // add slicemachine script to package.json.\n NodeUtils.addJsonPackageSmScript(cwd);\n\n await Tracker.get().trackInitEndSuccess(framework.value);\n\n spinner.succeed(\"Project configured! Ready to start\");\n } catch (error) {\n await Tracker.get().trackInitEndFail(\n framework.value,\n \"Failed to configure Slice Machine\"\n );\n spinner.fail(\"Failed to configure Slice Machine\");\n process.exit(-1);\n }\n}\n","import { CONSTS } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { logs } from \"../utils\";\n\nexport function displayFinalMessage(\n cwd: string,\n wasStarter: boolean,\n reponame: string,\n base: string\n): void {\n const yarnLock = NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd));\n const command = `${yarnLock ? \"yarn\" : \"npm\"} run ${CONSTS.SCRIPT_NAME}`;\n console.log();\n\n if (wasStarter) {\n const repoUrl = new URL(base);\n repoUrl.hostname = `${reponame}.${repoUrl.hostname}`;\n const urlAsString = repoUrl.toString();\n\n const message = `${logs.white(\n \"■\"\n )} Start editing your content in Prismic ${logs.purple(urlAsString)}`;\n console.log(message);\n } else {\n console.log(\n `${logs.white(\"■\")} Run ${logs.purple(\n command\n )} to launch Slice Machine and create your first Custom Type`\n );\n }\n}\n","import * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { execCommand } from \"../utils\";\n\nexport type Dependency = string | { name: string; version: string };\nexport const Dependencies = {\n fromPkgFormat(\n pkgDeps: Record<string, string> | undefined\n ): ReadonlyArray<Dependency> | undefined {\n if (!pkgDeps) return;\n\n return Object.entries(pkgDeps).map(([name, version]) => ({\n name,\n version,\n }));\n },\n};\nfunction formatDeps(dependencies: ReadonlyArray<Dependency>): string {\n return dependencies\n .map((dep) => {\n if (typeof dep === \"string\") return dep;\n return `${dep.name}@${dep.version}`;\n })\n .join(\" \");\n}\n\nexport interface PackageManager {\n install(dependencies: ReadonlyArray<Dependency>): Promise<{ stderr: string }>;\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }>;\n}\n\nexport const PackageManager = {\n get(cwd: string): PackageManager {\n if (NodeUtils.Files.exists(NodeUtils.YarnLockPath(cwd))) {\n return Yarn;\n }\n return Npm;\n },\n};\n\nexport const Yarn: PackageManager = {\n install(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`yarn add ${formatDeps(dependencies)}`);\n },\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`yarn add --dev ${formatDeps(dependencies)}`);\n },\n};\n\nexport const Npm: PackageManager = {\n install(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`npm i --save ${formatDeps(dependencies)}`);\n },\n installDev(\n dependencies: ReadonlyArray<Dependency>\n ): Promise<{ stderr: string }> {\n return execCommand(`npm i --save-dev ${formatDeps(dependencies)}`);\n },\n};\n","import { Models } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport tmp from \"tmp\";\nimport AdmZip from \"adm-zip\";\nimport fsExtra from \"fs-extra\";\nimport axios from \"axios\";\n\nimport fs from \"fs\";\nimport path from \"path\";\nimport { getOrElseW } from \"fp-ts/Either\";\nimport { PackageManager, Dependencies } from \"../utils/PackageManager\";\nimport Tracker from \"../utils/tracker\";\nimport { logs } from \"../utils\";\n\nconst { PackageJsonHelper } = NodeUtils;\n\nconst downloadFile = async (reqUrl: string): Promise<string> => {\n const res = await axios.get<Buffer>(reqUrl, { responseType: \"arraybuffer\" });\n\n return new Promise((resolve, reject) => {\n if (res.status == 200) {\n const tmpZipFile = tmp.tmpNameSync();\n const zip = new AdmZip(res.data);\n zip.extractAllTo(tmpZipFile);\n resolve(tmpZipFile);\n } else {\n reject();\n }\n });\n};\n\nfunction toGithubSource(githubPath: string, branch: string): string {\n return `https://codeload.github.com/${githubPath}/zip/${branch}`;\n}\n\nexport async function installLib(\n cwd: string,\n libGithubPath: string,\n branch = \"HEAD\"\n): Promise<string[] | undefined> {\n const spinner = logs.spinner(\n `Installing the ${libGithubPath} lib in your project...`\n );\n\n try {\n spinner.start();\n\n const [githubUserName, githubProjectName] = libGithubPath.split(\"/\");\n const source = toGithubSource(libGithubPath, branch);\n\n const zipFilePath = await downloadFile(source);\n const outputFolder = `${githubProjectName}-${branch}`;\n const projectPath = path.join(zipFilePath, outputFolder);\n\n const name = `${githubUserName}-${githubProjectName}`;\n const libDestinationFolder = path.join(cwd, name);\n\n // We should be able to offer the ability to override or not an existing library\n if (fs.existsSync(libDestinationFolder)) {\n spinner.succeed(`Lib \"${libGithubPath}\" was already installed (skipped)`);\n return;\n }\n\n // We copy all the slices into the the user project minus the src folder\n fsExtra.moveSync(path.join(projectPath, \"src\"), libDestinationFolder);\n\n // handle dependencies\n const pkgManager = PackageManager.get(cwd);\n const pkgJson = PackageJsonHelper.fromPath(\n path.join(projectPath, \"package.json\")\n );\n if (pkgJson instanceof Error) throw pkgJson;\n\n const dependencies = Dependencies.fromPkgFormat(pkgJson.dependencies);\n if (dependencies) await pkgManager.install(dependencies);\n\n // generate meta file\n NodeUtils.Files.write(path.join(libDestinationFolder, \"meta.json\"), {\n name: pkgJson.name,\n });\n\n // retrieve all slices lib paths\n const manifest = NodeUtils.Files.readEntity<Error | Models.Manifest>(\n path.join(projectPath, \"sm.json\"),\n (payload: unknown) => {\n return getOrElseW(\n () => new Error(`Unable to parse sm.json from lib ${libGithubPath}`)\n )(Models.Manifest.decode(payload));\n }\n );\n if (manifest instanceof Error) throw manifest;\n\n const localLibs = Models.ManifestHelper.localLibraries(manifest).map(\n ({ path }) => {\n return `~/${name}/${path.replace(\"src/\", \"\")}`;\n }\n );\n\n spinner.succeed(\n `Slice library \"${libGithubPath}\" was installed successfully`\n );\n\n void Tracker.get().trackDownloadLibrary(libGithubPath);\n return localLibs;\n } catch (error) {\n spinner.fail(`Error installing ${libGithubPath} lib!`);\n if (error instanceof Error) {\n console.error(error.message);\n }\n await Tracker.get().trackInitEndFail(\n Models.Frameworks.none,\n \"Failed to install ${libGithubPath} library\"\n );\n process.exit(-1);\n }\n}\n","import inquirer from \"inquirer\";\n\nexport async function promptToPushSlices(): Promise<boolean> {\n return inquirer\n .prompt<{ pushSlices: boolean }>([\n {\n type: \"confirm\",\n name: \"pushSlices\",\n default: false,\n message:\n \"Your repository already contains Slices. Do you want to continue pushing your local Slices?\",\n },\n ])\n .then((res) => res.pushSlices);\n}\n\nexport async function promptToPushCustomTypes(): Promise<boolean> {\n return inquirer\n .prompt<{ pushCustomTypes: boolean }>([\n {\n type: \"confirm\",\n name: \"pushCustomTypes\",\n default: false,\n message:\n \"Your repository already contains Custom Types. Do you want to continue pushing your local Custom Types?\",\n },\n ])\n .then((res) => res.pushCustomTypes);\n}\n","import { InitClient } from \"../../utils\";\nimport {\n Component,\n ComponentInfo,\n VariationSM,\n SliceSM,\n} from \"@slicemachine/core/build/models\";\nimport { Acl, ClientError } from \"@slicemachine/client\";\nimport { writeError } from \"../../utils/logs\";\n\nasync function updateVariationWithScreenshot(\n client: InitClient,\n acl: Acl,\n screenshotPaths: ComponentInfo[\"screenshotPaths\"],\n sliceId: SliceSM[\"id\"],\n variation: VariationSM\n): Promise<VariationSM> {\n const screenshot = screenshotPaths[variation.id];\n if (!screenshot || !screenshot.path) return Promise.resolve(variation);\n\n return client\n .uploadScreenshot({\n acl,\n sliceId,\n variationId: variation.id,\n filePath: screenshot.path,\n })\n .then((screenshotUrl) => {\n return {\n ...variation,\n imageUrl: screenshotUrl,\n };\n })\n .catch((error: ClientError) => {\n writeError(\n `Couldn't upload screenshot slice: ${sliceId} - variation: ${variation.id}`\n );\n writeError(error.message, \"Full error:\");\n return variation;\n });\n}\n\nexport async function updateSlicesWithScreenshots(\n client: InitClient,\n acl: Acl,\n components: Array<Component>\n): Promise<Array<SliceSM>> {\n return Promise.all(\n components.map(async (component) => {\n const { screenshotPaths, model } = component;\n\n const variationsUpdated: VariationSM[] = await Promise.all(\n model.variations.map(async (variation) =>\n updateVariationWithScreenshot(\n client,\n acl,\n screenshotPaths,\n model.id,\n variation\n )\n )\n );\n\n return {\n ...model,\n variations: variationsUpdated,\n };\n })\n );\n}\n","import { Component, Manifest, Slices } from \"@slicemachine/core/build/models\";\nimport { Acl, ClientError } from \"@slicemachine/client\";\nimport { InitClient, logs } from \"../../utils\";\nimport * as Libraries from \"@slicemachine/core/build/libraries\";\nimport { promptToPushSlices } from \"./prompts\";\nimport { updateSlicesWithScreenshots } from \"./s3\";\nimport { writeError } from \"../../utils/logs\";\n\nexport async function sendSlices(\n client: InitClient,\n cwd: string,\n manifest: Manifest\n): Promise<boolean> {\n if (!manifest.libraries) return Promise.resolve(false); // No libraries defined\n\n const libraries = Libraries.libraries(cwd, manifest.libraries);\n const components = libraries.reduce<Array<Component>>((acc, lib) => {\n return [...acc, ...lib.components];\n }, []);\n\n if (components.length === 0) return Promise.resolve(false); // No slices to send found in the libraries\n\n const remoteSlicesIds: string[] = await client\n .getSlices()\n .then((slices) => slices.map((slice) => slice.id));\n\n // If the repository already has Slices, ask the user to confirm.\n if (remoteSlicesIds.length) {\n const pushAnyway = await promptToPushSlices();\n if (pushAnyway === false) return Promise.resolve(true);\n }\n\n const spinner = logs.spinner(\n \"Pushing existing Slice models to your repository\"\n );\n spinner.start();\n\n const acl: Acl | null = await client\n .createAcl()\n .catch((error: ClientError) => {\n writeError(\n \"Uploading screenshots for your slices failed, please contact us.\"\n );\n writeError(error.message, \"Full error:\");\n return null;\n });\n\n // If the acl failed to be created, don't mind the screenshots.\n const models = acl\n ? await updateSlicesWithScreenshots(client, acl, components)\n : components.map((component) => component.model);\n\n await Promise.all(\n models.map(async (model) => {\n const slice = Slices.fromSM(model);\n\n const promise = remoteSlicesIds.includes(slice.id)\n ? client.updateSlice(slice)\n : client.insertSlice(slice);\n\n return promise.catch((error: ClientError) => {\n logs.writeError(`Sending slice ${model.id} - ${error.message}`);\n\n // throwing the error again to stop the Promise.all\n throw error;\n });\n })\n ).catch(() => {\n // the error about the slice that failed to be pushed should be in the terminal already.\n process.exit(1);\n });\n\n spinner.succeed();\n return Promise.resolve(true);\n}\n","import { CustomType } from \"@prismicio/types-internal/lib/customtypes\";\nimport { Files, CustomTypesPaths } from \"@slicemachine/core/build/node-utils\";\nimport { isLeft } from \"fp-ts/lib/Either\";\nimport { promptToPushCustomTypes } from \"./prompts\";\nimport { InitClient, logs } from \"../../utils\";\nimport { ClientError } from \"@slicemachine/client\";\n\nexport function readLocalCustomTypes(cwd: string): Array<CustomType> {\n const customTypePaths = CustomTypesPaths(cwd);\n const dir = customTypePaths.value();\n\n if (Files.isDirectory(dir) === false) return [];\n\n const fileNames = Files.readDirectory(dir);\n\n const files = fileNames.reduce<Array<CustomType>>((acc, fileName) => {\n const filePath = customTypePaths.customType(fileName).model();\n const json = Files.safeReadJson(filePath);\n\n if (!json) return acc;\n\n const file = CustomType.decode(json);\n\n if (file instanceof Error) {\n logs.writeError(`reading ${filePath}: ${file.message}`);\n return acc;\n }\n if (isLeft(file)) {\n logs.writeError(`validating ${filePath}: ${JSON.stringify(file.left)}`);\n return acc;\n }\n\n return [...acc, file.right];\n }, []);\n\n return files;\n}\n\nexport async function sendCustomTypes(client: InitClient, cwd: string) {\n const localCustomTypes = readLocalCustomTypes(cwd);\n\n // nothing to push\n if (localCustomTypes.length === 0) return Promise.resolve(false);\n\n const remoteCustomTypeIds = await client\n .getCustomTypes()\n .then((customTypes) => customTypes.map((customType) => customType.id));\n\n if (remoteCustomTypeIds.length) {\n const shouldPush = await promptToPushCustomTypes();\n if (shouldPush === false) return Promise.resolve(false);\n }\n\n const spinner = logs.spinner(\n \"Pushing existing custom types to your repository\"\n );\n spinner.start();\n\n await Promise.all(\n localCustomTypes.map(async (customType) => {\n const promise = remoteCustomTypeIds.includes(customType.id)\n ? client.updateCustomType(customType)\n : client.insertCustomType(customType);\n\n return promise.catch((error: ClientError) => {\n logs.writeError(\n `Sending custom type ${customType.id} - ${error.message}`\n );\n\n // throwing the error again to stop the Promise.all\n throw error;\n });\n })\n ).catch(() => {\n // the error about the custom type that failed to be pushed should be in the terminal already.\n process.exit(1);\n });\n\n spinner.succeed();\n return Promise.resolve(true);\n}\n","import path from \"path\";\nimport fs from \"fs\";\nimport type { AxiosError } from \"axios\";\nimport { Models } from \"@slicemachine/core\";\n\nimport * as t from \"io-ts\";\nimport { getOrElseW } from \"fp-ts/Either\";\nimport { InitClient, logs, lsdir, lsfiles } from \"../../utils\";\nimport { PrismicSharedConfigManager } from \"@slicemachine/core/build/prismic/SharedConfig\";\nimport Tracker from \"../../utils/tracker\";\n\nconst SignatureFileReader = t.type({\n signature: t.string,\n});\n\ntype SignatureFile = t.TypeOf<typeof SignatureFileReader>;\n\nexport async function readSignatureFile(cwd: string): Promise<SignatureFile> {\n const pathToFile = path.join(cwd, \"documents\", \"index.json\");\n return fs.promises.readFile(pathToFile, \"utf-8\").then((res) => {\n const data = JSON.parse(res) as unknown;\n return getOrElseW(() => {\n throw new Error(\"Unable to read document signature file\");\n })(SignatureFileReader.decode(data));\n });\n}\n\nexport async function readDocuments(\n cwd: string\n): Promise<Record<string, unknown>> {\n const documentDir = path.join(cwd, \"documents\");\n const dirs = await lsdir(documentDir);\n\n const files = (await Promise.all(dirs.map((dir) => lsfiles(dir)))).flat();\n\n const documentObj = files.reduce<Record<string, unknown>>((acc, file) => {\n const filename: string = path.parse(file).name;\n const fileContent: string = fs.readFileSync(file, \"utf-8\");\n const json = JSON.parse(fileContent) as Record<string, unknown>;\n\n return { ...acc, [filename]: json };\n }, {});\n\n return documentObj;\n}\n\nexport async function sendDocuments(\n client: InitClient,\n cwd: string\n): Promise<boolean> {\n const pathToDocuments = path.join(cwd, \"documents\");\n const pathToSignatureFile = path.join(pathToDocuments, \"index.json\");\n\n // Without the signature, we can't push documents to Prismic.\n if (!fs.existsSync(pathToSignatureFile)) return Promise.resolve(false);\n\n const signatureObj = await readSignatureFile(cwd);\n const documents: Record<string, unknown> = await readDocuments(cwd);\n\n // No documents to push\n if (Object.keys(documents).length === 0) return Promise.resolve(false);\n\n const spinner = logs.spinner(\"Pushing existing documents to your repository\");\n spinner.start();\n\n return client\n .pushDocuments(\n signatureObj.signature,\n documents,\n PrismicSharedConfigManager.get().cookies\n )\n .then(() => {\n spinner.succeed();\n fs.rmSync(pathToDocuments, { recursive: true, force: true });\n return true;\n })\n .catch(async (e: AxiosError) => {\n spinner.fail();\n if (e.response?.data === \"Repository should not contain documents\") {\n logs.writeError(\n \"The selected repository is not empty, documents cannot be uploaded. Please choose an empty repository or delete the documents contained in your repository.\"\n );\n } else {\n logs.writeError(\n \"Sending documents failed, please try again. If the problem persists, contact us.\"\n );\n logs.writeError(`Full error: ${e.code || 500} - ${e.message}`);\n }\n await Tracker.get().trackInitEndFail(\n Models.Frameworks.none,\n \"Failed to push documents\"\n );\n process.exit(1);\n });\n}\n","import { retrieveManifest, Files } from \"@slicemachine/core/build/node-utils\";\nimport path from \"path\";\nimport fs from \"fs\";\nimport { sendSlices } from \"./starters/slices\";\nimport { sendCustomTypes } from \"./starters/custom-types\";\nimport { sendDocuments } from \"./starters/documents\";\nimport { InitClient } from \"../utils\";\n\nexport async function sendStarterData(\n client: InitClient,\n cwd: string,\n pushDocuments = true\n) {\n const manifest = retrieveManifest(cwd);\n const documentsPath = path.join(cwd, \"documents\");\n const hasDocuments = Files.exists(documentsPath);\n\n if (manifest.exists === false || hasDocuments === false)\n return Promise.resolve(false);\n\n if (manifest.content) await sendSlices(client, cwd, manifest.content);\n await sendCustomTypes(client, cwd);\n\n // If the user choose not to push documents, we still delete the documents folder.\n if (!pushDocuments) {\n fs.rmSync(documentsPath, { recursive: true, force: true });\n return Promise.resolve(true);\n }\n\n return sendDocuments(client, cwd);\n}\n","import { CONSTS } from \"@slicemachine/core\";\nimport * as NodeUtils from \"@slicemachine/core/build/node-utils\";\nimport { logs } from \"../utils\";\n\nconst defaultSliceMachineVersion = \"0.0.41\";\n\nconst getTheSliceMachineVersionInstalled = (\n packageJson: NodeUtils.FileContent<NodeUtils.JsonPackage>\n) => {\n const sliceMachinePackageInstalled = Object.entries(\n packageJson.content?.devDependencies || {}\n ).find((devDependency) => {\n if (devDependency[0] === CONSTS.SM_PACKAGE_NAME) {\n return devDependency;\n }\n });\n\n if (!sliceMachinePackageInstalled) {\n return defaultSliceMachineVersion;\n }\n\n const extractedVersion = extractVersionNumberFromSemver(\n sliceMachinePackageInstalled[1]\n );\n\n if (!extractedVersion) {\n return defaultSliceMachineVersion;\n }\n\n return extractedVersion;\n};\n\nconst extractVersionNumberFromSemver = (semver: string) => {\n const versionFound = semver.match(/\\d+\\.\\d+\\.\\d+/);\n\n if (versionFound && versionFound.length > 0) {\n return versionFound[0];\n }\n\n return null;\n};\n\nexport function setVersion(cwd: string): void {\n try {\n const manifest = NodeUtils.retrieveManifest(cwd);\n\n if (manifest.content?._latest) {\n return;\n }\n\n const packageJson = NodeUtils.retrieveJsonPackage(cwd);\n const sliceMachineVersionInstalled =\n getTheSliceMachineVersionInstalled(packageJson);\n\n NodeUtils.patchManifest(cwd, { _latest: sliceMachineVersionInstalled });\n } catch {\n logs.warning(\n \"Could not set _latest to installed slice-machine-ui version in sm.json\"\n );\n }\n}\n","import { ApplicationMode } from \"@slicemachine/client\";\nimport Prismic from \"@slicemachine/core/build/prismic\";\nimport Tracker from \"./utils/tracker\";\nimport {\n installRequiredDependencies,\n validatePkg,\n chooseOrCreateARepository,\n loginOrBypass,\n configureProject,\n displayFinalMessage,\n detectFramework,\n installLib,\n sendStarterData,\n setVersion,\n} from \"./steps\";\nimport {\n findArgument,\n findFlag,\n logs,\n getApplicationMode,\n InitClient,\n} from \"./utils\";\nimport { Models } from \"@slicemachine/core\";\n\nasync function init() {\n const cwd = findArgument(process.argv, \"cwd\") || process.cwd();\n const mode: ApplicationMode =\n getApplicationMode(findArgument(process.argv, \"mode\")) ||\n ApplicationMode.PROD;\n const lib: string | undefined = findArgument(process.argv, \"library\");\n const branch: string | undefined = findArgument(process.argv, \"branch\");\n const isTrackingAvailable: boolean =\n findArgument(process.argv, \"tracking\") !== \"false\";\n const preSelectedRepository: string | undefined = findArgument(\n process.argv,\n \"repository\"\n );\n const pushDocuments = !findFlag(process.argv, \"no-docs\");\n\n Tracker.get().initialize(\n process.env.PUBLIC_SM_INIT_SEGMENT_KEY ||\n \"JfTfmHaATChc4xueS7RcCBsixI71dJIJ\",\n isTrackingAvailable\n );\n\n void Tracker.get().trackInitStart(preSelectedRepository);\n\n // initializing the client with what we have for now.\n const client = new InitClient(\n mode,\n null,\n Prismic.PrismicSharedConfigManager.getAuth()\n );\n\n console.log(\n logs.purple(\n \"You're about to configure Slicemachine... Press ctrl + C to cancel\"\n )\n );\n\n // verify package.json file exist\n validatePkg(cwd);\n\n // login\n const user = await loginOrBypass(client);\n\n Tracker.get().identifyUser(user.shortId, user.intercomHash);\n void Tracker.get().trackInitIdentify();\n\n // detect the framework used by the project\n const frameworkResult = await detectFramework(cwd);\n\n // select the repository used with the project.\n const repository = await chooseOrCreateARepository(\n client,\n cwd,\n frameworkResult.value,\n preSelectedRepository\n );\n\n Tracker.get().setRepository(repository);\n client.updateRepository(repository);\n\n const sliceLibPath = lib ? await installLib(cwd, lib, branch) : undefined;\n\n const wasStarter = await sendStarterData(client, cwd, pushDocuments); // will be false if no sm.json is found\n\n // configure the SM.json file and the json package file of the project..\n await configureProject(\n client,\n cwd,\n repository,\n frameworkResult,\n sliceLibPath,\n isTrackingAvailable\n );\n\n // Install the required dependencies in the project.\n await installRequiredDependencies(cwd, frameworkResult.value, wasStarter);\n\n setVersion(cwd);\n\n // Ask the user to run slice-machine.\n displayFinalMessage(cwd, wasStarter, repository, client.apisEndpoints.Wroom);\n}\n\ninit()\n .then(() => {\n process.exit(0);\n })\n .catch(async (error) => {\n if (error instanceof Error) logs.writeError(error.message);\n else console.error(error);\n await Tracker.get().trackInitEndFail(\n Models.Frameworks.none,\n \"Failed to initialise Slice Machine.\"\n );\n });\n"],"names":["uuidv4","ServerAnalytics","chalk","underline","bold","spinner","ora","writeError","Utils","CONSTS","hapi","PrismicSharedConfigManager","open","Endpoints","Client","getAndValidateResponse","t","Models","fs","path","util","exec","ApplicationMode","NodeUtils","logs.spinner","logs.writeWarning","logs.writeError","logs.bold","logs.cyan","logs.writeInfo","inquirer","logs.purple","Separator","logs.writeCheck","Prismic","logs.white","axios","tmp","AdmZip","fsExtra","getOrElseW","Libraries","models","Slices","CustomTypesPaths","Files","CustomType","isLeft","retrieveManifest","logs.warning","client"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/init",
3
- "version": "1.1.11-alpha.5",
3
+ "version": "1.1.12-alpha.10",
4
4
  "description": "The easiest way to add Slice Machine to your project",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -20,8 +20,8 @@
20
20
  "dependencies": {
21
21
  "@hapi/hapi": "^20.2.0",
22
22
  "@prismicio/types-internal": "^0.2.8",
23
- "@slicemachine/client": "1.1.11-alpha.4",
24
- "@slicemachine/core": "1.1.11-alpha.4",
23
+ "@slicemachine/client": "1.1.12-alpha.8",
24
+ "@slicemachine/core": "1.1.12-alpha.7",
25
25
  "adm-zip": "^0.5.9",
26
26
  "analytics-node": "^6.0.0",
27
27
  "axios": "^0.24.0",
@@ -69,5 +69,5 @@
69
69
  "engines": {
70
70
  "node": ">=12"
71
71
  },
72
- "gitHead": "6f44ee6d619803d37829c9627146c21711830890"
72
+ "gitHead": "e32eed8fec2234bc48299c9e5bbd0269237cb518"
73
73
  }
package/src/index.ts CHANGED
@@ -11,6 +11,7 @@ import {
11
11
  detectFramework,
12
12
  installLib,
13
13
  sendStarterData,
14
+ setVersion,
14
15
  } from "./steps";
15
16
  import {
16
17
  findArgument,
@@ -19,6 +20,7 @@ import {
19
20
  getApplicationMode,
20
21
  InitClient,
21
22
  } from "./utils";
23
+ import { Models } from "@slicemachine/core";
22
24
 
23
25
  async function init() {
24
26
  const cwd = findArgument(process.argv, "cwd") || process.cwd();
@@ -96,6 +98,8 @@ async function init() {
96
98
  // Install the required dependencies in the project.
97
99
  await installRequiredDependencies(cwd, frameworkResult.value, wasStarter);
98
100
 
101
+ setVersion(cwd);
102
+
99
103
  // Ask the user to run slice-machine.
100
104
  displayFinalMessage(cwd, wasStarter, repository, client.apisEndpoints.Wroom);
101
105
  }
@@ -104,7 +108,11 @@ init()
104
108
  .then(() => {
105
109
  process.exit(0);
106
110
  })
107
- .catch((error) => {
111
+ .catch(async (error) => {
108
112
  if (error instanceof Error) logs.writeError(error.message);
109
113
  else console.error(error);
114
+ await Tracker.get().trackInitEndFail(
115
+ Models.Frameworks.none,
116
+ "Failed to initialise Slice Machine."
117
+ );
110
118
  });
@@ -1,4 +1,3 @@
1
- import { CONSTS } from "@slicemachine/core";
2
1
  import type { Models } from "@slicemachine/core";
3
2
  import * as Prismic from "@slicemachine/core/build/prismic";
4
3
  import * as NodeUtils from "@slicemachine/core/build/node-utils";
@@ -6,8 +5,6 @@ import { FrameworkResult } from "./detect-framework";
6
5
  import { InitClient, logs } from "../utils";
7
6
  import Tracker from "../utils/tracker";
8
7
 
9
- const defaultSliceMachineVersion = "0.0.41";
10
-
11
8
  export async function configureProject(
12
9
  client: InitClient,
13
10
  cwd: string,
@@ -24,11 +21,6 @@ export async function configureProject(
24
21
 
25
22
  try {
26
23
  const manifest = NodeUtils.retrieveManifest(cwd);
27
- const packageJson = NodeUtils.retrieveJsonPackage(cwd);
28
-
29
- const sliceMachineVersionInstalled =
30
- getTheSliceMachineVersionInstalled(packageJson);
31
-
32
24
  const manifestAlreadyExistWithContent = manifest.exists && manifest.content;
33
25
 
34
26
  const libs =
@@ -39,9 +31,7 @@ export async function configureProject(
39
31
  : ["@/slices"];
40
32
 
41
33
  const manifestUpdated: Models.Manifest = {
42
- ...(manifestAlreadyExistWithContent
43
- ? manifest.content
44
- : { _latest: sliceMachineVersionInstalled }),
34
+ ...(manifestAlreadyExistWithContent ? manifest.content : {}),
45
35
  apiEndpoint: Prismic.Endpoints.buildRepositoryEndpoint(
46
36
  client.apisEndpoints.Wroom,
47
37
  repositoryDomainName
@@ -68,47 +58,15 @@ export async function configureProject(
68
58
  // add slicemachine script to package.json.
69
59
  NodeUtils.addJsonPackageSmScript(cwd);
70
60
 
71
- await Tracker.get().trackInitDone(framework.value);
61
+ await Tracker.get().trackInitEndSuccess(framework.value);
72
62
 
73
63
  spinner.succeed("Project configured! Ready to start");
74
- } catch {
64
+ } catch (error) {
65
+ await Tracker.get().trackInitEndFail(
66
+ framework.value,
67
+ "Failed to configure Slice Machine"
68
+ );
75
69
  spinner.fail("Failed to configure Slice Machine");
76
70
  process.exit(-1);
77
71
  }
78
72
  }
79
-
80
- const getTheSliceMachineVersionInstalled = (
81
- packageJson: NodeUtils.FileContent<NodeUtils.JsonPackage>
82
- ) => {
83
- const sliceMachinePackageInstalled = Object.entries(
84
- packageJson.content?.devDependencies || {}
85
- ).find((devDependency) => {
86
- if (devDependency[0] === CONSTS.SM_PACKAGE_NAME) {
87
- return devDependency;
88
- }
89
- });
90
-
91
- if (!sliceMachinePackageInstalled) {
92
- return defaultSliceMachineVersion;
93
- }
94
-
95
- const extractedVersion = extractVersionNumberFromSemver(
96
- sliceMachinePackageInstalled[1]
97
- );
98
-
99
- if (!extractedVersion) {
100
- return defaultSliceMachineVersion;
101
- }
102
-
103
- return extractedVersion;
104
- };
105
-
106
- const extractVersionNumberFromSemver = (semver: string) => {
107
- const versionFound = semver.match(/\d+\.\d+\.\d+/);
108
-
109
- if (versionFound && versionFound.length > 0) {
110
- return versionFound[0];
111
- }
112
-
113
- return null;
114
- };
@@ -2,6 +2,7 @@ import { Models } from "@slicemachine/core";
2
2
  import * as NodeUtils from "@slicemachine/core/build/node-utils";
3
3
  import * as inquirer from "inquirer";
4
4
  import { logs } from "../utils";
5
+ import Tracker from "../utils/tracker";
5
6
 
6
7
  export type FrameworkResult = {
7
8
  value: Models.Frameworks;
@@ -80,7 +81,10 @@ export async function detectFramework(cwd: string): Promise<FrameworkResult> {
80
81
  } else {
81
82
  console.log(failMessage);
82
83
  }
83
-
84
+ await Tracker.get().trackInitEndFail(
85
+ Models.Frameworks.none,
86
+ "Framework not detected"
87
+ );
84
88
  process.exit(1);
85
89
  }
86
90
  }
@@ -7,3 +7,4 @@ export { configureProject } from "./configure-project";
7
7
  export { displayFinalMessage } from "./display-final-message";
8
8
  export { installLib } from "./install-lib";
9
9
  export { sendStarterData } from "./sendStarterData";
10
+ export { setVersion } from "./set-version";
@@ -107,6 +107,10 @@ export async function installLib(
107
107
  if (error instanceof Error) {
108
108
  console.error(error.message);
109
109
  }
110
+ await Tracker.get().trackInitEndFail(
111
+ Models.Frameworks.none,
112
+ "Failed to install ${libGithubPath} library"
113
+ );
110
114
  process.exit(-1);
111
115
  }
112
116
  }
@@ -0,0 +1,61 @@
1
+ import { CONSTS } from "@slicemachine/core";
2
+ import * as NodeUtils from "@slicemachine/core/build/node-utils";
3
+ import { logs } from "../utils";
4
+
5
+ const defaultSliceMachineVersion = "0.0.41";
6
+
7
+ const getTheSliceMachineVersionInstalled = (
8
+ packageJson: NodeUtils.FileContent<NodeUtils.JsonPackage>
9
+ ) => {
10
+ const sliceMachinePackageInstalled = Object.entries(
11
+ packageJson.content?.devDependencies || {}
12
+ ).find((devDependency) => {
13
+ if (devDependency[0] === CONSTS.SM_PACKAGE_NAME) {
14
+ return devDependency;
15
+ }
16
+ });
17
+
18
+ if (!sliceMachinePackageInstalled) {
19
+ return defaultSliceMachineVersion;
20
+ }
21
+
22
+ const extractedVersion = extractVersionNumberFromSemver(
23
+ sliceMachinePackageInstalled[1]
24
+ );
25
+
26
+ if (!extractedVersion) {
27
+ return defaultSliceMachineVersion;
28
+ }
29
+
30
+ return extractedVersion;
31
+ };
32
+
33
+ const extractVersionNumberFromSemver = (semver: string) => {
34
+ const versionFound = semver.match(/\d+\.\d+\.\d+/);
35
+
36
+ if (versionFound && versionFound.length > 0) {
37
+ return versionFound[0];
38
+ }
39
+
40
+ return null;
41
+ };
42
+
43
+ export function setVersion(cwd: string): void {
44
+ try {
45
+ const manifest = NodeUtils.retrieveManifest(cwd);
46
+
47
+ if (manifest.content?._latest) {
48
+ return;
49
+ }
50
+
51
+ const packageJson = NodeUtils.retrieveJsonPackage(cwd);
52
+ const sliceMachineVersionInstalled =
53
+ getTheSliceMachineVersionInstalled(packageJson);
54
+
55
+ NodeUtils.patchManifest(cwd, { _latest: sliceMachineVersionInstalled });
56
+ } catch {
57
+ logs.warning(
58
+ "Could not set _latest to installed slice-machine-ui version in sm.json"
59
+ );
60
+ }
61
+ }
@@ -1,11 +1,13 @@
1
1
  import path from "path";
2
2
  import fs from "fs";
3
3
  import type { AxiosError } from "axios";
4
+ import { Models } from "@slicemachine/core";
4
5
 
5
6
  import * as t from "io-ts";
6
7
  import { getOrElseW } from "fp-ts/Either";
7
8
  import { InitClient, logs, lsdir, lsfiles } from "../../utils";
8
9
  import { PrismicSharedConfigManager } from "@slicemachine/core/build/prismic/SharedConfig";
10
+ import Tracker from "../../utils/tracker";
9
11
 
10
12
  const SignatureFileReader = t.type({
11
13
  signature: t.string,
@@ -72,7 +74,7 @@ export async function sendDocuments(
72
74
  fs.rmSync(pathToDocuments, { recursive: true, force: true });
73
75
  return true;
74
76
  })
75
- .catch((e: AxiosError) => {
77
+ .catch(async (e: AxiosError) => {
76
78
  spinner.fail();
77
79
  if (e.response?.data === "Repository should not contain documents") {
78
80
  logs.writeError(
@@ -84,6 +86,10 @@ export async function sendDocuments(
84
86
  );
85
87
  logs.writeError(`Full error: ${e.code || 500} - ${e.message}`);
86
88
  }
89
+ await Tracker.get().trackInitEndFail(
90
+ Models.Frameworks.none,
91
+ "Failed to push documents"
92
+ );
87
93
  process.exit(1);
88
94
  });
89
95
  }
@@ -12,7 +12,7 @@ async function updateVariationWithScreenshot(
12
12
  client: InitClient,
13
13
  acl: Acl,
14
14
  screenshotPaths: ComponentInfo["screenshotPaths"],
15
- sliceName: SliceSM["id"],
15
+ sliceId: SliceSM["id"],
16
16
  variation: VariationSM
17
17
  ): Promise<VariationSM> {
18
18
  const screenshot = screenshotPaths[variation.id];
@@ -21,7 +21,7 @@ async function updateVariationWithScreenshot(
21
21
  return client
22
22
  .uploadScreenshot({
23
23
  acl,
24
- sliceName,
24
+ sliceId,
25
25
  variationId: variation.id,
26
26
  filePath: screenshot.path,
27
27
  })
@@ -33,7 +33,7 @@ async function updateVariationWithScreenshot(
33
33
  })
34
34
  .catch((error: ClientError) => {
35
35
  writeError(
36
- `Couldn't upload screenshot slice: ${sliceName} - variation: ${variation.id}`
36
+ `Couldn't upload screenshot slice: ${sliceId} - variation: ${variation.id}`
37
37
  );
38
38
  writeError(error.message, "Full error:");
39
39
  return variation;
@@ -1,6 +1,7 @@
1
1
  import type { Models } from "@slicemachine/core";
2
2
  import * as logs from "./logs";
3
3
  import { InitClient } from "./client";
4
+ import Tracker from "../utils/tracker";
4
5
 
5
6
  export function createRepository(
6
7
  client: InitClient,
@@ -20,8 +21,12 @@ export function createRepository(
20
21
 
21
22
  return domain;
22
23
  })
23
- .catch((error: Error) => {
24
+ .catch(async (error: Error) => {
24
25
  spinner.fail(`Error creating repository ${domain}`);
26
+ await Tracker.get().trackInitEndFail(
27
+ framework,
28
+ "Failed to create repository"
29
+ );
25
30
  if (error.message) {
26
31
  logs.writeError(error.message);
27
32
  }
@@ -6,7 +6,7 @@ export enum EventType {
6
6
  DownloadLibrary = "SliceMachine Download Library",
7
7
  InitStart = "SliceMachine Init Start",
8
8
  InitIdentify = "SliceMachine Init Identify",
9
- InitDone = "SliceMachine Init Done",
9
+ InitEnd = "SliceMachine Init End",
10
10
  }
11
11
 
12
12
  type SegmentIdentifier = { userId: string } | { anonymousId: string };
@@ -111,11 +111,25 @@ export class InitTracker {
111
111
  }
112
112
 
113
113
  trackInitStart(repoDomain: string | undefined): Promise<void> {
114
+ if (repoDomain) this.setRepository(repoDomain);
114
115
  return this._trackEvent(EventType.InitStart, { repo: repoDomain });
115
116
  }
116
117
 
117
- trackInitDone(framework: Models.Frameworks): Promise<void> {
118
- return this._trackEvent(EventType.InitDone, { framework });
118
+ trackInitEndSuccess(framework: Models.Frameworks): Promise<void> {
119
+ return this._trackEvent(EventType.InitEnd, {
120
+ framework,
121
+ repo: this.#repository,
122
+ result: "success",
123
+ });
124
+ }
125
+
126
+ trackInitEndFail(framework: Models.Frameworks, error: string): Promise<void> {
127
+ return this._trackEvent(EventType.InitEnd, {
128
+ framework,
129
+ repo: this.#repository,
130
+ result: "error",
131
+ error,
132
+ });
119
133
  }
120
134
  }
121
135