@slicemachine/init 1.0.2-slicecanvas.0 → 1.1.1-alpha.2

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
@@ -1,32 +1,570 @@
1
1
  #!/usr/bin/env node
2
- "use strict";
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- const core_1 = require("@slicemachine/core");
5
- const steps_1 = require("./steps");
6
- const utils_1 = require("./utils");
7
- async function init() {
8
- const cwd = (0, utils_1.findArgument)(process.argv, "cwd") || process.cwd();
9
- const base = (0, utils_1.findArgument)(process.argv, "base") || core_1.Utils.CONSTS.DEFAULT_BASE;
10
- console.log(core_1.Utils.purple("You're about to configure Slicemachine... Press ctrl + C to cancel"));
11
- (0, steps_1.validatePkg)(cwd);
12
- await (0, steps_1.loginOrBypass)(base);
13
- const config = core_1.FileSystem.PrismicSharedConfigManager.get();
14
- const frameworkResult = await (0, steps_1.detectFramework)(cwd);
15
- const { existing, name } = await (0, steps_1.maybeExistingRepo)(config.cookies, cwd, config.base);
16
- if (!existing) {
17
- await (0, steps_1.createRepository)(name, frameworkResult.value, config);
18
- }
19
- await (0, steps_1.installRequiredDependencies)(cwd, frameworkResult.value);
20
- (0, steps_1.configureProject)(cwd, base, name, frameworkResult);
21
- (0, steps_1.displayFinalMessage)(cwd);
2
+
3
+ 'use strict';
4
+
5
+ const core = require('@slicemachine/core');
6
+ const ServerAnalytics = require('analytics-node');
7
+ const path = require('path');
8
+ const util = require('util');
9
+ const child_process = require('child_process');
10
+ const inquirer = require('inquirer');
11
+ const Separator = require('inquirer/lib/objects/separator');
12
+ const cookie = require('@slicemachine/core/build/src/utils/cookie');
13
+ const axios = require('axios');
14
+ const t = require('io-ts');
15
+ const _function = require('fp-ts/function');
16
+ const Either = require('fp-ts/Either');
17
+ const tmp = require('tmp');
18
+ const AdmZip = require('adm-zip');
19
+ const fsExtra = require('fs-extra');
20
+ const fs = require('fs');
21
+ const PackageJson = require('@slicemachine/core/build/src/utils/PackageJson');
22
+ const Manifest = require('@slicemachine/core/build/src/models/Manifest');
23
+ const Files = require('@slicemachine/core/build/src/utils/files');
24
+
25
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
26
+
27
+ function _interopNamespace(e) {
28
+ if (e && e.__esModule) return e;
29
+ const n = Object.create(null);
30
+ if (e) {
31
+ for (const k in e) {
32
+ if (k !== 'default') {
33
+ const d = Object.getOwnPropertyDescriptor(e, k);
34
+ Object.defineProperty(n, k, d.get ? d : {
35
+ enumerable: true,
36
+ get: function () { return e[k]; }
37
+ });
38
+ }
39
+ }
40
+ }
41
+ n["default"] = e;
42
+ return Object.freeze(n);
22
43
  }
23
- try {
24
- void init();
44
+
45
+ const ServerAnalytics__default = /*#__PURE__*/_interopDefaultLegacy(ServerAnalytics);
46
+ const path__default = /*#__PURE__*/_interopDefaultLegacy(path);
47
+ const util__default = /*#__PURE__*/_interopDefaultLegacy(util);
48
+ const inquirer__namespace = /*#__PURE__*/_interopNamespace(inquirer);
49
+ const Separator__default = /*#__PURE__*/_interopDefaultLegacy(Separator);
50
+ const axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
51
+ const t__namespace = /*#__PURE__*/_interopNamespace(t);
52
+ const tmp__default = /*#__PURE__*/_interopDefaultLegacy(tmp);
53
+ const AdmZip__default = /*#__PURE__*/_interopDefaultLegacy(AdmZip);
54
+ const fsExtra__default = /*#__PURE__*/_interopDefaultLegacy(fsExtra);
55
+ const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
56
+ const Files__default = /*#__PURE__*/_interopDefaultLegacy(Files);
57
+
58
+ class Tracker {
59
+ constructor(analytics, repo, identifier, tracking = true) {
60
+ this.analytics = analytics;
61
+ this.repo = repo;
62
+ this.identifier = identifier;
63
+ this.tracking = tracking;
64
+ this.Track = {
65
+ downloadLibrary: (library) => {
66
+ this.trackEvent("SliceMachine Download Library" /* DownloadLibrary */, { library });
67
+ }
68
+ };
69
+ }
70
+ static build(writeKey, repo, identifier, tracking = true) {
71
+ try {
72
+ if (!repo)
73
+ return;
74
+ const analytics = new ServerAnalytics__default["default"](writeKey);
75
+ return new Tracker(analytics, repo, identifier, tracking);
76
+ } catch (error) {
77
+ console.warn(error);
78
+ return;
79
+ }
80
+ }
81
+ trackEvent(eventType, attributes = {}) {
82
+ this.tracking && this.analytics.track({
83
+ event: eventType,
84
+ ...this.identifier,
85
+ properties: attributes
86
+ });
87
+ }
88
+ }
89
+
90
+ function findArgument(args, name) {
91
+ const flagIndex = args.indexOf(`--${name}`);
92
+ if (flagIndex === -1)
93
+ return;
94
+ if (args.length < flagIndex + 2)
95
+ return;
96
+ const flagValue = args[flagIndex + 1];
97
+ if (flagValue.startsWith("--"))
98
+ return;
99
+ return flagValue;
100
+ }
101
+ const execCommand = util__default["default"].promisify(child_process.exec);
102
+
103
+ const {
104
+ PRISMIC_CLIENT,
105
+ PRISMIC_DOM_PACKAGE_NAME,
106
+ PRISMIC_REACT_PACKAGE_NAME,
107
+ NEXT_SLICEZONE,
108
+ SM_PACKAGE_NAME,
109
+ NUXT_PRISMIC,
110
+ NUXT_SM,
111
+ VUE_SLICEZONE,
112
+ PRISMIC_VUE,
113
+ SLICE_SIMULATOR_REACT,
114
+ SLICE_SIMULATOR_VUE
115
+ } = core.Utils.CONSTS;
116
+ function depsForFramework(framework) {
117
+ switch (framework) {
118
+ case core.Models.Frameworks.react:
119
+ return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT}`;
120
+ case core.Models.Frameworks.next:
121
+ return `${PRISMIC_REACT_PACKAGE_NAME} ${PRISMIC_CLIENT}@v5.1.1 ${NEXT_SLICEZONE} ${SLICE_SIMULATOR_REACT}`;
122
+ case core.Models.Frameworks.svelte:
123
+ return `${PRISMIC_DOM_PACKAGE_NAME} ${PRISMIC_CLIENT}`;
124
+ case core.Models.Frameworks.nuxt:
125
+ return `${NUXT_PRISMIC} ${NUXT_SM} ${VUE_SLICEZONE} ${SLICE_SIMULATOR_VUE}`;
126
+ case core.Models.Frameworks.vue:
127
+ return `${PRISMIC_VUE} ${PRISMIC_CLIENT}@v5.1.1 ${PRISMIC_DOM_PACKAGE_NAME} ${VUE_SLICEZONE}`;
128
+ default:
129
+ return "";
130
+ }
131
+ }
132
+ async function installRequiredDependencies(cwd, framework) {
133
+ const yarnLock = core.Utils.Files.exists(core.FileSystem.YarnLockPath(cwd));
134
+ const installDevDependencyCommand = yarnLock ? "yarn add -D" : "npm install --save-dev";
135
+ const installDependencyCommand = yarnLock ? "yarn add" : "npm install --save";
136
+ const spinner = core.Utils.spinner("Downloading Prismic Visual Builder");
137
+ spinner.start();
138
+ const { stderr } = await execCommand(`${installDevDependencyCommand} ${SM_PACKAGE_NAME}`);
139
+ const deps = depsForFramework(framework);
140
+ if (deps)
141
+ await execCommand(`${installDependencyCommand} ${deps}`);
142
+ const pathToPkg = path__default["default"].join(core.FileSystem.PackagePaths(cwd).value(), SM_PACKAGE_NAME);
143
+ const isPackageInstalled = core.Utils.Files.exists(pathToPkg);
144
+ if (isPackageInstalled || !stderr.length) {
145
+ spinner.succeed("The Prismic Visual Builder was installed successfully");
146
+ return;
147
+ }
148
+ spinner.fail();
149
+ core.Utils.writeWarning(`could not install ${SM_PACKAGE_NAME}. Please do it manually!`);
150
+ }
151
+
152
+ function validatePkg(cwd) {
153
+ const jsonPackage = core.FileSystem.retrieveJsonPackage(cwd);
154
+ if (!jsonPackage.exists) {
155
+ core.Utils.writeError(`package.json not found. Are you in the right folder?`);
156
+ return process.exit(-1);
157
+ }
158
+ if (!jsonPackage.content) {
159
+ core.Utils.writeError(`could not parse package.json.`);
160
+ return process.exit(-1);
161
+ }
162
+ }
163
+
164
+ const CREATE_REPO = "$_CREATE_REPO";
165
+ const DEFAULT_BASE = core.Utils.CONSTS.DEFAULT_BASE;
166
+ function prettyRepoName(address, value) {
167
+ const repoName = value ? core.Utils.cyan(value) : core.Utils.dim.cyan("repo-name");
168
+ return `${core.Utils.cyan.dim(`${address.protocol}//`)}${repoName}${core.Utils.cyan.dim(`.${address.hostname}`)}`;
169
+ }
170
+ async function promptForRepoName(base) {
171
+ const address = new URL(base);
172
+ core.Utils.writeInfo("The name acts as a domain/endpoint for your content repo and should be completely unique.");
173
+ return inquirer__namespace.prompt([
174
+ {
175
+ name: "repoName",
176
+ message: "Name your Prismic repository",
177
+ type: "input",
178
+ required: true,
179
+ transformer: (value) => prettyRepoName(address, String(value)),
180
+ async validate(name) {
181
+ const result = await core.Communication.validateRepositoryName(name, base, false);
182
+ return result === name || result;
183
+ }
184
+ }
185
+ ]).then((res) => res.repoName);
186
+ }
187
+ function makeReposPretty(base) {
188
+ return function({ name, domain, role }) {
189
+ const address = new URL(base);
190
+ address.hostname = `${domain}.${address.hostname}`;
191
+ if (core.Utils.roles.canUpdateCustomTypes(role) === false) {
192
+ return {
193
+ name: `${core.Utils.purple.dim("Use")} ${core.Utils.bold.dim(name)} ${core.Utils.purple.dim(`"${address.hostname}"`)}`,
194
+ value: domain,
195
+ disabled: "Unauthorized"
196
+ };
197
+ }
198
+ return {
199
+ name: `${core.Utils.purple("Use")} ${core.Utils.bold(name)} ${core.Utils.purple(`"${address.hostname}"`)}`,
200
+ value: name
201
+ };
202
+ };
203
+ }
204
+ function orderPrompts(maybeName) {
205
+ return (a, b) => {
206
+ if (a instanceof Separator__default["default"] || b instanceof Separator__default["default"])
207
+ return 0;
208
+ if (maybeName && (a.value === maybeName || b.value === maybeName))
209
+ return 0;
210
+ if (a.value === CREATE_REPO || b.value === CREATE_REPO)
211
+ return 0;
212
+ if (a.disabled && !b.disabled)
213
+ return 1;
214
+ if (!a.disabled && b.disabled)
215
+ return -1;
216
+ return 0;
217
+ };
218
+ }
219
+ function maybeStickTheRepoToTheTopOfTheList(repoName) {
220
+ return (acc, curr) => {
221
+ if (repoName && curr.value === repoName) {
222
+ return [curr, ...acc];
223
+ }
224
+ return [...acc, curr];
225
+ };
226
+ }
227
+ function sortReposForPrompt(repos, base, cwd) {
228
+ const createNew = {
229
+ name: `${core.Utils.purple("Create a")} ${core.Utils.bold("new")} ${core.Utils.purple("Repository")}`,
230
+ value: CREATE_REPO
231
+ };
232
+ const maybeConfiguredRepoName = core.FileSystem.maybeRepoNameFromSMFile(cwd, base);
233
+ return repos.reverse().map(makeReposPretty(base)).reduce(maybeStickTheRepoToTheTopOfTheList(maybeConfiguredRepoName), [
234
+ createNew
235
+ ]).sort(orderPrompts(maybeConfiguredRepoName));
236
+ }
237
+ async function maybeExistingRepo(cookies, cwd, base = DEFAULT_BASE) {
238
+ const token = cookie.parsePrismicAuthToken(cookies);
239
+ const repos = await core.Communication.listRepositories(token);
240
+ if (repos.length === 0) {
241
+ const name = await promptForRepoName(base);
242
+ return { existing: false, name };
243
+ }
244
+ const choices = sortReposForPrompt(repos, base, cwd);
245
+ const numberOfDisabledRepos = choices.filter((repo) => {
246
+ if (repo instanceof Separator__default["default"])
247
+ return false;
248
+ return repo.disabled;
249
+ }).length;
250
+ const res = await inquirer__namespace.prompt([
251
+ {
252
+ type: "list",
253
+ name: "repoName",
254
+ default: 0,
255
+ required: true,
256
+ message: "Connect a Prismic Repository or create a new one",
257
+ choices,
258
+ pageSize: numberOfDisabledRepos + 2 <= 7 ? 7 : numberOfDisabledRepos + 2
259
+ }
260
+ ]);
261
+ if (res.repoName === CREATE_REPO) {
262
+ const name = await promptForRepoName(base);
263
+ return { existing: false, name };
264
+ }
265
+ return { existing: true, name: res.repoName };
266
+ }
267
+
268
+ function createRepository(domain, framework, config) {
269
+ const spinner = core.Utils.spinner("Creating Prismic Repository");
270
+ spinner.start();
271
+ return core.Communication.createRepository(domain, config.cookies, framework, config.base).then((res) => {
272
+ const addressUrl = new URL(config.base);
273
+ addressUrl.hostname = `${res.data.domain || domain}.${addressUrl.hostname}`;
274
+ const address = addressUrl.toString();
275
+ spinner.succeed(`We created your new repository ${address}`);
276
+ }).catch((error) => {
277
+ spinner.fail(`Error creating repository ${domain}`);
278
+ if (error.message) {
279
+ core.Utils.writeError(error.message);
280
+ }
281
+ core.Utils.writeError(`We failed to create you new prismic repository`);
282
+ console.log(`Run ${core.Utils.bold("npx slicemachine init")} again!`);
283
+ process.exit(-1);
284
+ });
285
+ }
286
+
287
+ async function promptForFramework() {
288
+ const choices = core.Models.SupportedFrameworks.map((framework) => {
289
+ return {
290
+ name: core.Utils.Framework.fancyName(framework),
291
+ value: framework
292
+ };
293
+ });
294
+ return inquirer__namespace.prompt([
295
+ {
296
+ name: "framework",
297
+ type: "list",
298
+ message: "Select a framework to use",
299
+ required: true,
300
+ choices
301
+ }
302
+ ]).then((res) => {
303
+ return {
304
+ value: res.framework,
305
+ manuallyAdded: true
306
+ };
307
+ });
308
+ }
309
+ async function detectFramework(cwd) {
310
+ const failMessage = `Please run ${core.Utils.bold("npx slicemachine init")} in a Nuxt or Next.js project`;
311
+ const spinner = core.Utils.spinner("Detecting framework to install correct dependencies");
312
+ spinner.start();
313
+ try {
314
+ const maybeFramework = core.Utils.Framework.defineFramework({
315
+ cwd,
316
+ supportedFrameworks: Object.values(core.Models.Frameworks)
317
+ });
318
+ spinner.stop();
319
+ if (!maybeFramework || maybeFramework === core.Models.Frameworks.vanillajs) {
320
+ core.Utils.writeError("Framework not detected");
321
+ return await promptForFramework();
322
+ }
323
+ const nameToPrint = core.Utils.Framework.fancyName(maybeFramework);
324
+ if (!core.Utils.Framework.isFrameworkSupported(maybeFramework)) {
325
+ core.Utils.writeError(`${nameToPrint} is currently not supported`);
326
+ console.log(failMessage);
327
+ process.exit(1);
328
+ }
329
+ core.Utils.writeCheck(`${nameToPrint} detected`);
330
+ return {
331
+ value: maybeFramework,
332
+ manuallyAdded: false
333
+ };
334
+ } catch (error) {
335
+ spinner.fail("package.json not found");
336
+ if (error instanceof Error && error.message) {
337
+ core.Utils.writeError(error.message);
338
+ } else {
339
+ console.log(failMessage);
340
+ }
341
+ process.exit(1);
342
+ }
25
343
  }
26
- catch (error) {
27
- if (error instanceof Error)
28
- core_1.Utils.writeError(error.message);
344
+
345
+ const UserProfile = t__namespace.exact(t__namespace.type({
346
+ userId: t__namespace.string,
347
+ shortId: t__namespace.string,
348
+ email: t__namespace.string,
349
+ firstName: t__namespace.string,
350
+ lastName: t__namespace.string
351
+ }));
352
+ async function getUserProfile(cookies, base = core.Utils.CONSTS.DEFAULT_BASE) {
353
+ const url = new URL(base);
354
+ url.hostname = `user.${url.hostname}`;
355
+ url.pathname = "profile";
356
+ const endpoint = url.toString();
357
+ const token = core.Utils.Cookie.parsePrismicAuthToken(cookies);
358
+ return axios__default["default"].get(endpoint, {
359
+ headers: {
360
+ Authorization: `Bearer Token ${token}`
361
+ }
362
+ }).then((res) => _function.pipe(UserProfile.decode(res.data), Either.fold(() => {
363
+ throw new Error("Can't parse user profile");
364
+ }, (data) => data)));
365
+ }
366
+ async function validateSessionAndGetProfile(base = core.Utils.CONSTS.DEFAULT_BASE) {
367
+ const config = core.FileSystem.PrismicSharedConfigManager.get();
368
+ if (!config.cookies.length)
369
+ return Promise.resolve(null);
370
+ if (base != config.base)
371
+ return Promise.resolve(null);
372
+ try {
373
+ const info = await core.Communication.validateSession(config.cookies, base);
374
+ const profile = await getUserProfile(config.cookies, base).catch(() => null);
375
+ if (profile == null ? void 0 : profile.shortId) {
376
+ core.FileSystem.PrismicSharedConfigManager.setProperties({
377
+ shortId: profile.shortId
378
+ });
379
+ }
380
+ return { info, profile };
381
+ } catch (e) {
382
+ return null;
383
+ }
384
+ }
385
+
386
+ async function loginOrBypass(base) {
387
+ const user = await validateSessionAndGetProfile(base).catch((err) => console.log(err));
388
+ if (user) {
389
+ const email = user.info.email;
390
+ core.Utils.writeCheck(`Logged in as ${core.Utils.bold(email)}`);
391
+ return user;
392
+ } else {
393
+ await core.Auth.login(base);
394
+ const user2 = await validateSessionAndGetProfile(base);
395
+ return user2;
396
+ }
397
+ }
398
+
399
+ function configureProject(cwd, base, repository, framework, sliceLibPath = [], tracking = true) {
400
+ const spinner = core.Utils.spinner(`Configuring your ${framework.value} & Prismic project...`);
401
+ spinner.start();
402
+ try {
403
+ const manifest = core.FileSystem.retrieveManifest(cwd);
404
+ const manifestUpdated = {
405
+ ...manifest.exists && manifest.content ? manifest.content : {},
406
+ apiEndpoint: core.Utils.Endpoints.buildRepositoryEndpoint(base, repository),
407
+ libraries: ["@/slices", ...sliceLibPath],
408
+ ...framework.manuallyAdded ? { framework: framework.value } : {},
409
+ ...!tracking ? { tracking } : {}
410
+ };
411
+ if (!manifest.exists)
412
+ core.FileSystem.createManifest(cwd, manifestUpdated);
29
413
  else
30
- console.error(error);
414
+ core.FileSystem.patchManifest(cwd, manifestUpdated);
415
+ const pathToSlicesFolder = core.FileSystem.CustomPaths(cwd).library("slices").value();
416
+ if (!core.Utils.Files.exists(pathToSlicesFolder))
417
+ core.Utils.Files.mkdir(pathToSlicesFolder, { recursive: true });
418
+ core.FileSystem.addJsonPackageSmScript(cwd);
419
+ spinner.succeed("Project configured! Ready to start");
420
+ } catch (e) {
421
+ spinner.fail("Failed to configure your Prismic Local Builder");
422
+ process.exit(-1);
423
+ }
424
+ }
425
+
426
+ function displayFinalMessage(cwd) {
427
+ const yarnLock = core.Utils.Files.exists(core.FileSystem.YarnLockPath(cwd));
428
+ const command = `${yarnLock ? "yarn" : "npm"} run ${core.Utils.CONSTS.SCRIPT_NAME}`;
429
+ console.log(`${core.Utils.white("\u25A0")} Run ${core.Utils.purple(command)} to now launch your Local Builder`);
430
+ }
431
+
432
+ const Dependencies = {
433
+ fromPkgFormat(pkgDeps) {
434
+ if (!pkgDeps)
435
+ return;
436
+ return Object.entries(pkgDeps).map(([name, version]) => ({
437
+ name,
438
+ version
439
+ }));
440
+ }
441
+ };
442
+ function formatDeps(dependencies) {
443
+ return dependencies.map((dep) => {
444
+ if (typeof dep === "string")
445
+ return dep;
446
+ return `${dep.name}@${dep.version}`;
447
+ }).join(" ");
448
+ }
449
+ const PackageManager = {
450
+ get(cwd) {
451
+ if (core.Utils.Files.exists(core.FileSystem.YarnLockPath(cwd))) {
452
+ return Yarn;
453
+ }
454
+ return Npm;
455
+ }
456
+ };
457
+ const Yarn = {
458
+ install(dependencies) {
459
+ return execCommand(`yarn add ${formatDeps(dependencies)}`);
460
+ },
461
+ installDev(dependencies) {
462
+ return execCommand(`yarn add --dev ${formatDeps(dependencies)}`);
463
+ }
464
+ };
465
+ const Npm = {
466
+ install(dependencies) {
467
+ return execCommand(`npm i --save ${formatDeps(dependencies)}`);
468
+ },
469
+ installDev(dependencies) {
470
+ return execCommand(`npm i --save-dev ${formatDeps(dependencies)}`);
471
+ }
472
+ };
473
+
474
+ const downloadFile = async (reqUrl) => {
475
+ const res = await axios__default["default"].get(reqUrl, { responseType: "arraybuffer" });
476
+ return new Promise((resolve, reject) => {
477
+ if (res.status == 200) {
478
+ const tmpZipFile = tmp__default["default"].tmpNameSync();
479
+ const zip = new AdmZip__default["default"](res.data);
480
+ zip.extractAllTo(tmpZipFile);
481
+ resolve(tmpZipFile);
482
+ } else {
483
+ reject();
484
+ }
485
+ });
486
+ };
487
+ function toGithubSource(githubPath, branch) {
488
+ return `https://codeload.github.com/${githubPath}/zip/${branch}`;
489
+ }
490
+ async function installLib(tracker, cwd, libGithubPath, branch = "HEAD") {
491
+ const spinner = core.Utils.spinner(`Installing the ${libGithubPath} lib in your project...`);
492
+ try {
493
+ spinner.start();
494
+ const [githubUserName, githubProjectName] = libGithubPath.split("/");
495
+ const source = toGithubSource(libGithubPath, branch);
496
+ const zipFilePath = await downloadFile(source);
497
+ const outputFolder = `${githubProjectName}-${branch}`;
498
+ const projectPath = path__default["default"].join(zipFilePath, outputFolder);
499
+ const name = `${githubUserName}-${githubProjectName}`;
500
+ const libDestinationFolder = path__default["default"].join(cwd, name);
501
+ if (fs__default["default"].existsSync(libDestinationFolder)) {
502
+ spinner.succeed(`Lib "${libGithubPath}" was already installed (skipped)`);
503
+ return;
504
+ }
505
+ fsExtra__default["default"].moveSync(path__default["default"].join(projectPath, "src"), libDestinationFolder);
506
+ const pkgManager = PackageManager.get(cwd);
507
+ const pkgJson = PackageJson.PackageJsonHelper.fromPath(path__default["default"].join(projectPath, "package.json"));
508
+ if (pkgJson instanceof Error)
509
+ throw pkgJson;
510
+ const dependencies = Dependencies.fromPkgFormat(pkgJson.dependencies);
511
+ if (dependencies)
512
+ await pkgManager.install(dependencies);
513
+ Files__default["default"].write(path__default["default"].join(libDestinationFolder, "meta.json"), {
514
+ name: pkgJson.name
515
+ });
516
+ const manifest = Files__default["default"].readEntity(path__default["default"].join(projectPath, "sm.json"), (payload) => {
517
+ return Either.getOrElseW(() => new Error(`Unable to parse sm.json from lib ${libGithubPath}`))(Manifest.Manifest.decode(payload));
518
+ });
519
+ if (manifest instanceof Error)
520
+ throw manifest;
521
+ const localLibs = Manifest.ManifestHelper.localLibraries(manifest).map(({ path: path2 }) => {
522
+ return `~/${name}/${path2.replace("src/", "")}`;
523
+ });
524
+ spinner.succeed(`Slice library "${libGithubPath}" was installed successfully`);
525
+ tracker == null ? void 0 : tracker.Track.downloadLibrary(libGithubPath);
526
+ return localLibs;
527
+ } catch (error) {
528
+ spinner.fail(`Error installing ${libGithubPath} lib!`);
529
+ if (error instanceof Error) {
530
+ console.error(error.message);
531
+ }
532
+ process.exit(-1);
533
+ }
534
+ }
535
+
536
+ async function init() {
537
+ var _a;
538
+ const cwd = findArgument(process.argv, "cwd") || process.cwd();
539
+ const base = findArgument(process.argv, "base") || core.Utils.CONSTS.DEFAULT_BASE;
540
+ const lib = findArgument(process.argv, "library");
541
+ const branch = findArgument(process.argv, "branch");
542
+ const isTrackingAvailable = findArgument(process.argv, "tracking") === "false" ? false : true;
543
+ console.log(core.Utils.purple("You're about to configure Slicemachine... Press ctrl + C to cancel"));
544
+ validatePkg(cwd);
545
+ const user = await loginOrBypass(base);
546
+ if (!user)
547
+ throw new Error("The user should be logged in!");
548
+ const config = core.FileSystem.PrismicSharedConfigManager.get();
549
+ const frameworkResult = await detectFramework(cwd);
550
+ const { existing, name } = await maybeExistingRepo(config.cookies, cwd, config.base);
551
+ if (!existing) {
552
+ await createRepository(name, frameworkResult.value, config);
553
+ }
554
+ const tracker = ((_a = user.profile) == null ? void 0 : _a.shortId) ? Tracker.build("JfTfmHaATChc4xueS7RcCBsixI71dJIJ" , name, {
555
+ userId: user.profile.shortId
556
+ }, isTrackingAvailable) : void 0;
557
+ await installRequiredDependencies(cwd, frameworkResult.value);
558
+ const sliceLibPath = lib ? await installLib(tracker, cwd, lib, branch) : void 0;
559
+ configureProject(cwd, base, name, frameworkResult, sliceLibPath, isTrackingAvailable);
560
+ displayFinalMessage(cwd);
561
+ }
562
+ try {
563
+ void init();
564
+ } catch (error) {
565
+ if (error instanceof Error)
566
+ core.Utils.writeError(error.message);
567
+ else
568
+ console.error(error);
31
569
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkNBQXVEO0FBQ3ZELG1DQVNpQjtBQUNqQixtQ0FBdUM7QUFFdkMsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBRTdFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsWUFBSyxDQUFDLE1BQU0sQ0FDVixvRUFBb0UsQ0FDckUsQ0FDRixDQUFDO0lBR0YsSUFBQSxtQkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBR2pCLE1BQU0sSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBRzFCLE1BQU0sTUFBTSxHQUFHLGlCQUFVLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFHM0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLHVCQUFlLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFHbkQsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUEseUJBQWlCLEVBQ2hELE1BQU0sQ0FBQyxPQUFPLEVBQ2QsR0FBRyxFQUNILE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixNQUFNLElBQUEsd0JBQWdCLEVBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0Q7SUFHRCxNQUFNLElBQUEsbUNBQTJCLEVBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUc5RCxJQUFBLHdCQUFnQixFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBR25ELElBQUEsMkJBQW1CLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELElBQUk7SUFDRixLQUFLLElBQUksRUFBRSxDQUFDO0NBQ2I7QUFBQyxPQUFPLEtBQUssRUFBRTtJQUNkLElBQUksS0FBSyxZQUFZLEtBQUs7UUFBRSxZQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQiJ9
570
+ //# sourceMappingURL=index.js.map