@slicemachine/init 1.0.2-alpha.18 → 1.0.2-alpha.21

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
@@ -7,6 +7,8 @@ const utils_1 = require("./utils");
7
7
  async function init() {
8
8
  const cwd = (0, utils_1.findArgument)(process.argv, "cwd") || process.cwd();
9
9
  const base = (0, utils_1.findArgument)(process.argv, "base") || core_1.Utils.CONSTS.DEFAULT_BASE;
10
+ const lib = (0, utils_1.findArgument)(process.argv, "library");
11
+ const branch = (0, utils_1.findArgument)(process.argv, "branch");
10
12
  console.log(core_1.Utils.purple("You're about to configure Slicemachine... Press ctrl + C to cancel"));
11
13
  (0, steps_1.validatePkg)(cwd);
12
14
  await (0, steps_1.loginOrBypass)(base);
@@ -17,7 +19,8 @@ async function init() {
17
19
  await (0, steps_1.createRepository)(name, frameworkResult.value, config);
18
20
  }
19
21
  await (0, steps_1.installRequiredDependencies)(cwd, frameworkResult.value);
20
- (0, steps_1.configureProject)(cwd, base, name, frameworkResult);
22
+ const sliceLibPath = lib ? await (0, steps_1.installLib)(cwd, lib, branch) : undefined;
23
+ (0, steps_1.configureProject)(cwd, base, name, frameworkResult, sliceLibPath);
21
24
  (0, steps_1.displayFinalMessage)(cwd);
22
25
  }
23
26
  try {
@@ -29,4 +32,4 @@ catch (error) {
29
32
  else
30
33
  console.error(error);
31
34
  }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkNBQXVEO0FBQ3ZELG1DQVNpQjtBQUNqQixtQ0FBdUM7QUFFdkMsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBRTdFLE9BQU8sQ0FBQyxHQUFHLENBQ1QsWUFBSyxDQUFDLE1BQU0sQ0FDVixvRUFBb0UsQ0FDckUsQ0FDRixDQUFDO0lBR0YsSUFBQSxtQkFBVyxFQUFDLEdBQUcsQ0FBQyxDQUFDO0lBR2pCLE1BQU0sSUFBQSxxQkFBYSxFQUFDLElBQUksQ0FBQyxDQUFDO0lBRzFCLE1BQU0sTUFBTSxHQUFHLGlCQUFVLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLENBQUM7SUFHM0QsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFBLHVCQUFlLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFHbkQsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLElBQUEseUJBQWlCLEVBQ2hELE1BQU0sQ0FBQyxPQUFPLEVBQ2QsR0FBRyxFQUNILE1BQU0sQ0FBQyxJQUFJLENBQ1osQ0FBQztJQUVGLElBQUksQ0FBQyxRQUFRLEVBQUU7UUFDYixNQUFNLElBQUEsd0JBQWdCLEVBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDN0Q7SUFHRCxNQUFNLElBQUEsbUNBQTJCLEVBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUc5RCxJQUFBLHdCQUFnQixFQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBR25ELElBQUEsMkJBQW1CLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELElBQUk7SUFDRixLQUFLLElBQUksRUFBRSxDQUFDO0NBQ2I7QUFBQyxPQUFPLEtBQUssRUFBRTtJQUNkLElBQUksS0FBSyxZQUFZLEtBQUs7UUFBRSxZQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQiJ9
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsNkNBQXVEO0FBQ3ZELG1DQVVpQjtBQUNqQixtQ0FBdUM7QUFFdkMsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxHQUFHLEdBQUcsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUEsb0JBQVksRUFBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLFlBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDO0lBQzdFLE1BQU0sR0FBRyxHQUF1QixJQUFBLG9CQUFZLEVBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0RSxNQUFNLE1BQU0sR0FBdUIsSUFBQSxvQkFBWSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFFeEUsT0FBTyxDQUFDLEdBQUcsQ0FDVCxZQUFLLENBQUMsTUFBTSxDQUNWLG9FQUFvRSxDQUNyRSxDQUNGLENBQUM7SUFHRixJQUFBLG1CQUFXLEVBQUMsR0FBRyxDQUFDLENBQUM7SUFHakIsTUFBTSxJQUFBLHFCQUFhLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFHMUIsTUFBTSxNQUFNLEdBQUcsaUJBQVUsQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUczRCxNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUEsdUJBQWUsRUFBQyxHQUFHLENBQUMsQ0FBQztJQUduRCxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sSUFBQSx5QkFBaUIsRUFDaEQsTUFBTSxDQUFDLE9BQU8sRUFDZCxHQUFHLEVBQ0gsTUFBTSxDQUFDLElBQUksQ0FDWixDQUFDO0lBRUYsSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUNiLE1BQU0sSUFBQSx3QkFBZ0IsRUFBQyxJQUFJLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztLQUM3RDtJQUdELE1BQU0sSUFBQSxtQ0FBMkIsRUFBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTlELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFBLGtCQUFVLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRzFFLElBQUEsd0JBQWdCLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBR2pFLElBQUEsMkJBQW1CLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELElBQUk7SUFDRixLQUFLLElBQUksRUFBRSxDQUFDO0NBQ2I7QUFBQyxPQUFPLEtBQUssRUFBRTtJQUNkLElBQUksS0FBSyxZQUFZLEtBQUs7UUFBRSxZQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzs7UUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUMzQiJ9
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.configureProject = void 0;
4
4
  const core_1 = require("@slicemachine/core");
5
- function configureProject(cwd, base, repository, framework) {
5
+ function configureProject(cwd, base, repository, framework, sliceLibPath = []) {
6
6
  const spinner = core_1.Utils.spinner(`Configuring your ${framework.value} & Prismic project...`);
7
7
  spinner.start();
8
8
  try {
@@ -10,7 +10,7 @@ function configureProject(cwd, base, repository, framework) {
10
10
  const manifestUpdated = {
11
11
  ...(manifest.exists && manifest.content ? manifest.content : {}),
12
12
  apiEndpoint: core_1.Utils.Endpoints.buildRepositoryEndpoint(base, repository),
13
- libraries: ["@/slices"],
13
+ libraries: ["@/slices", ...sliceLibPath],
14
14
  ...(framework.manuallyAdded ? { framework: framework.value } : {}),
15
15
  };
16
16
  if (!manifest.exists)
@@ -31,4 +31,4 @@ function configureProject(cwd, base, repository, framework) {
31
31
  }
32
32
  }
33
33
  exports.configureProject = configureProject;
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcHMvY29uZmlndXJlLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVEO0FBTXZELFNBQWdCLGdCQUFnQixDQUM5QixHQUFXLEVBQ1gsSUFBVSxFQUNWLFVBQWtCLEVBQ2xCLFNBQTBCO0lBRTFCLE1BQU0sT0FBTyxHQUFHLFlBQUssQ0FBQyxPQUFPLENBQzNCLG9CQUFvQixTQUFTLENBQUMsS0FBSyx1QkFBdUIsQ0FDM0QsQ0FBQztJQUNGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUVoQixJQUFJO1FBQ0YsTUFBTSxRQUFRLEdBQUcsaUJBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsRCxNQUFNLGVBQWUsR0FBb0I7WUFDdkMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hFLFdBQVcsRUFBRSxZQUFLLENBQUMsU0FBUyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7WUFDdEUsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUNuRSxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNO1lBQUUsaUJBQVUsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDOztZQUNqRSxpQkFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFHcEQsTUFBTSxrQkFBa0IsR0FBRyxpQkFBVSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUM7YUFDbkQsT0FBTyxDQUFDLFFBQVEsQ0FBQzthQUNqQixLQUFLLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxZQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQztZQUN6QyxZQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBRzdELGlCQUFVLENBQUMsc0JBQXNCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFdkMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDO0tBQ3ZEO0lBQUMsTUFBTTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQztRQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEI7QUFDSCxDQUFDO0FBdkNELDRDQXVDQyJ9
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJlLXByb2plY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcHMvY29uZmlndXJlLXByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVEO0FBTXZELFNBQWdCLGdCQUFnQixDQUM5QixHQUFXLEVBQ1gsSUFBVSxFQUNWLFVBQWtCLEVBQ2xCLFNBQTBCLEVBQzFCLGVBQXlCLEVBQUU7SUFFM0IsTUFBTSxPQUFPLEdBQUcsWUFBSyxDQUFDLE9BQU8sQ0FDM0Isb0JBQW9CLFNBQVMsQ0FBQyxLQUFLLHVCQUF1QixDQUMzRCxDQUFDO0lBQ0YsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBRWhCLElBQUk7UUFDRixNQUFNLFFBQVEsR0FBRyxpQkFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELE1BQU0sZUFBZSxHQUFvQjtZQUN2QyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEUsV0FBVyxFQUFFLFlBQUssQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztZQUN0RSxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxZQUFZLENBQUM7WUFDeEMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ25FLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU07WUFBRSxpQkFBVSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsZUFBZSxDQUFDLENBQUM7O1lBQ2pFLGlCQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUMsQ0FBQztRQUdwRCxNQUFNLGtCQUFrQixHQUFHLGlCQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQzthQUNuRCxPQUFPLENBQUMsUUFBUSxDQUFDO2FBQ2pCLEtBQUssRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFlBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO1lBQ3pDLFlBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFHN0QsaUJBQVUsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QyxPQUFPLENBQUMsT0FBTyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDdkQ7SUFBQyxNQUFNO1FBQ04sT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO1FBQy9ELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNsQjtBQUNILENBQUM7QUF4Q0QsNENBd0NDIn0=
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.displayFinalMessage = exports.configureProject = exports.loginOrBypass = exports.detectFramework = exports.createRepository = exports.maybeExistingRepo = exports.validatePkg = exports.installRequiredDependencies = void 0;
3
+ exports.installLib = exports.displayFinalMessage = exports.configureProject = exports.loginOrBypass = exports.detectFramework = exports.createRepository = exports.maybeExistingRepo = exports.validatePkg = exports.installRequiredDependencies = void 0;
4
4
  var install_required_dependencies_1 = require("./install-required-dependencies");
5
5
  Object.defineProperty(exports, "installRequiredDependencies", { enumerable: true, get: function () { return install_required_dependencies_1.installRequiredDependencies; } });
6
6
  var validate_pkg_1 = require("./validate-pkg");
@@ -17,4 +17,6 @@ var configure_project_1 = require("./configure-project");
17
17
  Object.defineProperty(exports, "configureProject", { enumerable: true, get: function () { return configure_project_1.configureProject; } });
18
18
  var display_final_message_1 = require("./display-final-message");
19
19
  Object.defineProperty(exports, "displayFinalMessage", { enumerable: true, get: function () { return display_final_message_1.displayFinalMessage; } });
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUZBQThFO0FBQXJFLDRJQUFBLDJCQUEyQixPQUFBO0FBQ3BDLCtDQUE2QztBQUFwQywyR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkRBQTBEO0FBQWpELHdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDZDQUFpRDtBQUF4QywrR0FBQSxnQkFBZ0IsT0FBQTtBQUN6Qix1REFBcUQ7QUFBNUMsbUhBQUEsZUFBZSxPQUFBO0FBQ3hCLGlEQUFnRDtBQUF2Qyw4R0FBQSxhQUFhLE9BQUE7QUFDdEIseURBQXVEO0FBQTlDLHFIQUFBLGdCQUFnQixPQUFBO0FBQ3pCLGlFQUE4RDtBQUFyRCw0SEFBQSxtQkFBbUIsT0FBQSJ9
20
+ var install_lib_1 = require("./install-lib");
21
+ Object.defineProperty(exports, "installLib", { enumerable: true, get: function () { return install_lib_1.installLib; } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUZBQThFO0FBQXJFLDRJQUFBLDJCQUEyQixPQUFBO0FBQ3BDLCtDQUE2QztBQUFwQywyR0FBQSxXQUFXLE9BQUE7QUFDcEIsNkRBQTBEO0FBQWpELHdIQUFBLGlCQUFpQixPQUFBO0FBQzFCLDZDQUFpRDtBQUF4QywrR0FBQSxnQkFBZ0IsT0FBQTtBQUN6Qix1REFBcUQ7QUFBNUMsbUhBQUEsZUFBZSxPQUFBO0FBQ3hCLGlEQUFnRDtBQUF2Qyw4R0FBQSxhQUFhLE9BQUE7QUFDdEIseURBQXVEO0FBQTlDLHFIQUFBLGdCQUFnQixPQUFBO0FBQ3pCLGlFQUE4RDtBQUFyRCw0SEFBQSxtQkFBbUIsT0FBQTtBQUM1Qiw2Q0FBMkM7QUFBbEMseUdBQUEsVUFBVSxPQUFBIn0=
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.installLib = void 0;
7
+ const core_1 = require("@slicemachine/core");
8
+ const tmp_1 = __importDefault(require("tmp"));
9
+ const adm_zip_1 = __importDefault(require("adm-zip"));
10
+ const fs_extra_1 = __importDefault(require("fs-extra"));
11
+ const axios_1 = __importDefault(require("axios"));
12
+ const fs_1 = __importDefault(require("fs"));
13
+ const path_1 = __importDefault(require("path"));
14
+ const Either_1 = require("fp-ts/Either");
15
+ const PackageManager_1 = require("../utils/PackageManager");
16
+ const PackageJson_1 = require("@slicemachine/core/build/src/utils/PackageJson");
17
+ const Manifest_1 = require("@slicemachine/core/build/src/models/Manifest");
18
+ const files_1 = __importDefault(require("@slicemachine/core/build/src/utils/files"));
19
+ const downloadFile = async (reqUrl) => {
20
+ const res = await (0, axios_1.default)({
21
+ method: "GET",
22
+ url: reqUrl,
23
+ responseType: "arraybuffer",
24
+ });
25
+ return new Promise((resolve, reject) => {
26
+ if (res.status == 200) {
27
+ const tmpZipFile = tmp_1.default.tmpNameSync();
28
+ const zip = new adm_zip_1.default(res.data);
29
+ zip.extractAllTo(tmpZipFile);
30
+ resolve(tmpZipFile);
31
+ }
32
+ else {
33
+ reject();
34
+ }
35
+ });
36
+ };
37
+ async function installLib(cwd, libGithubPath, branch = "main") {
38
+ const spinner = core_1.Utils.spinner(`Installing the ${libGithubPath} lib in your project...`);
39
+ try {
40
+ spinner.start();
41
+ const [githubUserName, githubProjectName] = libGithubPath.split("/");
42
+ const source = `https://codeload.github.com/${libGithubPath}/zip/${branch}`;
43
+ const zipFilePath = await downloadFile(source);
44
+ const outputFolder = `${githubProjectName}-${branch}`;
45
+ const projectPath = path_1.default.join(zipFilePath, outputFolder);
46
+ const name = `${githubUserName}-${githubProjectName}`;
47
+ const libDestinationFolder = path_1.default.join(cwd, name);
48
+ if (fs_1.default.existsSync(libDestinationFolder)) {
49
+ spinner.succeed(`Lib "${libGithubPath}" was already installed (skipped)`);
50
+ return;
51
+ }
52
+ fs_extra_1.default.moveSync(path_1.default.join(projectPath, "src"), libDestinationFolder);
53
+ const pkgManager = PackageManager_1.PackageManager.get(cwd);
54
+ const pkgJson = PackageJson_1.PackageJsonHelper.fromPath(path_1.default.join(projectPath, "package.json"));
55
+ if (pkgJson instanceof Error)
56
+ throw pkgJson;
57
+ const dependencies = PackageManager_1.Dependencies.fromPkgFormat(pkgJson.dependencies);
58
+ if (dependencies)
59
+ await pkgManager.install(dependencies);
60
+ files_1.default.write(path_1.default.join(libDestinationFolder, "meta.json"), {
61
+ name: pkgJson.name,
62
+ });
63
+ const manifest = files_1.default.readEntity(path_1.default.join(projectPath, "sm.json"), (payload) => {
64
+ return (0, Either_1.getOrElseW)(() => new Error(`Unable to parse sm.json from lib ${libGithubPath}`))(Manifest_1.Manifest.decode(payload));
65
+ });
66
+ if (manifest instanceof Error)
67
+ throw manifest;
68
+ const localLibs = Manifest_1.ManifestHelper.localLibraries(manifest).map(({ path }) => {
69
+ return `~/${name}/${path.replace("src/", "")}`;
70
+ });
71
+ spinner.succeed(`Slice library "${libGithubPath}" was installed successfully`);
72
+ return localLibs;
73
+ }
74
+ catch {
75
+ spinner.fail(`Error installing ${libGithubPath} lib!`);
76
+ process.exit(-1);
77
+ }
78
+ }
79
+ exports.installLib = installLib;
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC1saWIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RlcHMvaW5zdGFsbC1saWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNkNBQTJDO0FBQzNDLDhDQUFzQjtBQUN0QixzREFBNkI7QUFDN0Isd0RBQStCO0FBQy9CLGtEQUEwQjtBQUUxQiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBQ3hCLHlDQUEwQztBQUMxQyw0REFBdUU7QUFDdkUsZ0ZBQW1GO0FBQ25GLDJFQUdzRDtBQUN0RCxxRkFBNkQ7QUFFN0QsTUFBTSxZQUFZLEdBQUcsS0FBSyxFQUFFLE1BQWMsRUFBbUIsRUFBRTtJQUM3RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsZUFBSyxFQUFDO1FBQ3RCLE1BQU0sRUFBRSxLQUFLO1FBQ2IsR0FBRyxFQUFFLE1BQU07UUFDWCxZQUFZLEVBQUUsYUFBYTtLQUM1QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUU7WUFDckIsTUFBTSxVQUFVLEdBQUcsYUFBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sR0FBRyxHQUFHLElBQUksaUJBQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakMsR0FBRyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM3QixPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckI7YUFBTTtZQUNMLE1BQU0sRUFBRSxDQUFDO1NBQ1Y7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVLLEtBQUssVUFBVSxVQUFVLENBQzlCLEdBQVcsRUFDWCxhQUFxQixFQUNyQixTQUE2QixNQUFNO0lBRW5DLE1BQU0sT0FBTyxHQUFHLFlBQUssQ0FBQyxPQUFPLENBQzNCLGtCQUFrQixhQUFhLHlCQUF5QixDQUN6RCxDQUFDO0lBRUYsSUFBSTtRQUNGLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVoQixNQUFNLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyRSxNQUFNLE1BQU0sR0FBRywrQkFBK0IsYUFBYSxRQUFRLE1BQU0sRUFBRSxDQUFDO1FBRTVFLE1BQU0sV0FBVyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sWUFBWSxHQUFHLEdBQUcsaUJBQWlCLElBQUksTUFBTSxFQUFFLENBQUM7UUFDdEQsTUFBTSxXQUFXLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFekQsTUFBTSxJQUFJLEdBQUcsR0FBRyxjQUFjLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0RCxNQUFNLG9CQUFvQixHQUFHLGNBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBR2xELElBQUksWUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQ3ZDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxhQUFhLG1DQUFtQyxDQUFDLENBQUM7WUFDMUUsT0FBTztTQUNSO1FBR0Qsa0JBQU8sQ0FBQyxRQUFRLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUd0RSxNQUFNLFVBQVUsR0FBRywrQkFBYyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxNQUFNLE9BQU8sR0FBRywrQkFBaUIsQ0FBQyxRQUFRLENBQ3hDLGNBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxDQUN2QyxDQUFDO1FBQ0YsSUFBSSxPQUFPLFlBQVksS0FBSztZQUFFLE1BQU0sT0FBTyxDQUFDO1FBRTVDLE1BQU0sWUFBWSxHQUFHLDZCQUFZLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN0RSxJQUFJLFlBQVk7WUFBRSxNQUFNLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHekQsZUFBSyxDQUFDLEtBQUssQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLFdBQVcsQ0FBQyxFQUFFO1lBQ3hELElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtTQUNuQixDQUFDLENBQUM7UUFHSCxNQUFNLFFBQVEsR0FBRyxlQUFLLENBQUMsVUFBVSxDQUMvQixjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsRUFDakMsQ0FBQyxPQUFnQixFQUFFLEVBQUU7WUFDbkIsT0FBTyxJQUFBLG1CQUFVLEVBQ2YsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsb0NBQW9DLGFBQWEsRUFBRSxDQUFDLENBQ3JFLENBQUMsbUJBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksUUFBUSxZQUFZLEtBQUs7WUFBRSxNQUFNLFFBQVEsQ0FBQztRQUU5QyxNQUFNLFNBQVMsR0FBRyx5QkFBYyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQzNELENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ1gsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pELENBQUMsQ0FDRixDQUFDO1FBRUYsT0FBTyxDQUFDLE9BQU8sQ0FDYixrQkFBa0IsYUFBYSw4QkFBOEIsQ0FDOUQsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBQUMsTUFBTTtRQUNOLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLGFBQWEsT0FBTyxDQUFDLENBQUM7UUFDdkQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2xCO0FBQ0gsQ0FBQztBQXhFRCxnQ0F3RUMifQ==
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Npm = exports.Yarn = exports.PackageManager = exports.Dependencies = void 0;
4
+ const core_1 = require("@slicemachine/core");
5
+ const utils_1 = require("../utils");
6
+ exports.Dependencies = {
7
+ fromPkgFormat(pkgDeps) {
8
+ if (!pkgDeps)
9
+ return;
10
+ return Object.entries(pkgDeps).map(([name, version]) => ({
11
+ name,
12
+ version,
13
+ }));
14
+ },
15
+ };
16
+ function formatDeps(dependencies) {
17
+ return dependencies
18
+ .map((dep) => {
19
+ if (typeof dep === "string")
20
+ return dep;
21
+ return `${dep.name}@${dep.version}`;
22
+ })
23
+ .join(" ");
24
+ }
25
+ exports.PackageManager = {
26
+ get(cwd) {
27
+ if (core_1.Utils.Files.exists(core_1.FileSystem.YarnLockPath(cwd))) {
28
+ return exports.Yarn;
29
+ }
30
+ return exports.Npm;
31
+ },
32
+ };
33
+ exports.Yarn = {
34
+ install(dependencies) {
35
+ return (0, utils_1.execCommand)(`yarn add ${formatDeps(dependencies)}`);
36
+ },
37
+ installDev(dependencies) {
38
+ return (0, utils_1.execCommand)(`yarn add --dev ${formatDeps(dependencies)}`);
39
+ },
40
+ };
41
+ exports.Npm = {
42
+ install(dependencies) {
43
+ return (0, utils_1.execCommand)(`npm i --save ${formatDeps(dependencies)}`);
44
+ },
45
+ installDev(dependencies) {
46
+ return (0, utils_1.execCommand)(`npm i --save-dev ${formatDeps(dependencies)}`);
47
+ },
48
+ };
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvUGFja2FnZU1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXVEO0FBQ3ZELG9DQUF1QztBQUcxQixRQUFBLFlBQVksR0FBRztJQUMxQixhQUFhLENBQ1gsT0FBMkM7UUFFM0MsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBRXJCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJO1lBQ0osT0FBTztTQUNSLENBQUMsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNGLENBQUM7QUFDRixTQUFTLFVBQVUsQ0FBQyxZQUF1QztJQUN6RCxPQUFPLFlBQVk7U0FDaEIsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDWCxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVE7WUFBRSxPQUFPLEdBQUcsQ0FBQztRQUN4QyxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQVNZLFFBQUEsY0FBYyxHQUFHO0lBQzVCLEdBQUcsQ0FBQyxHQUFXO1FBQ2IsSUFBSSxZQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3BELE9BQU8sWUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLFdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRixDQUFDO0FBRVcsUUFBQSxJQUFJLEdBQW1CO0lBQ2xDLE9BQU8sQ0FDTCxZQUF1QztRQUV2QyxPQUFPLElBQUEsbUJBQVcsRUFBQyxZQUFZLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUNELFVBQVUsQ0FDUixZQUF1QztRQUV2QyxPQUFPLElBQUEsbUJBQVcsRUFBQyxrQkFBa0IsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBQ0YsQ0FBQztBQUVXLFFBQUEsR0FBRyxHQUFtQjtJQUNqQyxPQUFPLENBQ0wsWUFBdUM7UUFFdkMsT0FBTyxJQUFBLG1CQUFXLEVBQUMsZ0JBQWdCLFVBQVUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUNELFVBQVUsQ0FDUixZQUF1QztRQUV2QyxPQUFPLElBQUEsbUJBQVcsRUFBQyxvQkFBb0IsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyRSxDQUFDO0NBQ0YsQ0FBQyJ9
@@ -9,14 +9,14 @@ const child_process_1 = require("child_process");
9
9
  function findArgument(args, name) {
10
10
  const flagIndex = args.indexOf(`--${name}`);
11
11
  if (flagIndex === -1)
12
- return null;
12
+ return;
13
13
  if (args.length < flagIndex + 2)
14
- return null;
14
+ return;
15
15
  const flagValue = args[flagIndex + 1];
16
16
  if (flagValue.startsWith("--"))
17
- return null;
17
+ return;
18
18
  return flagValue;
19
19
  }
20
20
  exports.findArgument = findArgument;
21
21
  exports.execCommand = util_1.default.promisify(child_process_1.exec);
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLGlEQUFxQztBQUVyQyxTQUFnQixZQUFZLENBQUMsSUFBYyxFQUFFLElBQVk7SUFDdkQsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFFcEQsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbEMsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsR0FBRyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUV0QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQVZELG9DQVVDO0FBRVksUUFBQSxXQUFXLEdBRTJCLGNBQUksQ0FBQyxTQUFTLENBQUMsb0JBQUksQ0FBQyxDQUFDIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLGlEQUFxQztBQUVyQyxTQUFnQixZQUFZLENBQUMsSUFBYyxFQUFFLElBQVk7SUFDdkQsTUFBTSxTQUFTLEdBQVcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7SUFFcEQsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDO1FBQUUsT0FBTztJQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLEdBQUcsU0FBUyxHQUFHLENBQUM7UUFBRSxPQUFPO0lBRXhDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFFdEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU87SUFDdkMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQVZELG9DQVVDO0FBRVksUUFBQSxXQUFXLEdBRTJCLGNBQUksQ0FBQyxTQUFTLENBQUMsb0JBQUksQ0FBQyxDQUFDIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slicemachine/init",
3
- "version": "1.0.2-alpha.18",
3
+ "version": "1.0.2-alpha.21",
4
4
  "license": "MIT",
5
5
  "description": "The easiest way to add Slice Machine to your project",
6
6
  "bin": {
@@ -23,8 +23,11 @@
23
23
  "@babel/core": "^7.15.8",
24
24
  "@babel/preset-env": "^7.15.8",
25
25
  "@babel/preset-typescript": "^7.15.0",
26
+ "@types/adm-zip": "^0.4.34",
27
+ "@types/fs-extra": "^9.0.13",
26
28
  "@types/inquirer": "^8.1.3",
27
29
  "@types/jest": "^27.0.2",
30
+ "@types/tmp": "^0.2.2",
28
31
  "@typescript-eslint/eslint-plugin": "^4.29.1",
29
32
  "@typescript-eslint/parser": "^4.29.1",
30
33
  "babel-jest": "^27.0.2",
@@ -42,10 +45,14 @@
42
45
  "typescript": "^4.4.3"
43
46
  },
44
47
  "dependencies": {
45
- "@slicemachine/core": "1.0.2-alpha.18",
48
+ "@slicemachine/core": "1.0.2-alpha.21",
49
+ "adm-zip": "^0.5.9",
50
+ "axios": "^0.24.0",
46
51
  "fp-ts": "^2.11.5",
52
+ "fs-extra": "^10.0.0",
47
53
  "inquirer": "^8.2.0",
48
- "io-ts": "^2.2.16"
54
+ "io-ts": "^2.2.16",
55
+ "tmp": "^0.2.1"
49
56
  },
50
- "gitHead": "bdb5c497f8761730b48d884827936cb1a62b23f9"
57
+ "gitHead": "974272d145b3a13ca436fa5e6e57f28228c83144"
51
58
  }
package/src/index.ts CHANGED
@@ -10,12 +10,15 @@ import {
10
10
  configureProject,
11
11
  displayFinalMessage,
12
12
  detectFramework,
13
+ installLib,
13
14
  } from "./steps";
14
15
  import { findArgument } from "./utils";
15
16
 
16
17
  async function init() {
17
18
  const cwd = findArgument(process.argv, "cwd") || process.cwd();
18
19
  const base = findArgument(process.argv, "base") || Utils.CONSTS.DEFAULT_BASE;
20
+ const lib: string | undefined = findArgument(process.argv, "library");
21
+ const branch: string | undefined = findArgument(process.argv, "branch");
19
22
 
20
23
  console.log(
21
24
  Utils.purple(
@@ -49,8 +52,10 @@ async function init() {
49
52
  // install the required dependencies in the project.
50
53
  await installRequiredDependencies(cwd, frameworkResult.value);
51
54
 
55
+ const sliceLibPath = lib ? await installLib(cwd, lib, branch) : undefined;
56
+
52
57
  // configure the SM.json file and the json package file of the project..
53
- configureProject(cwd, base, name, frameworkResult);
58
+ configureProject(cwd, base, name, frameworkResult, sliceLibPath);
54
59
 
55
60
  // ask the user to run slice-machine.
56
61
  displayFinalMessage(cwd);
@@ -8,7 +8,8 @@ export function configureProject(
8
8
  cwd: string,
9
9
  base: Base,
10
10
  repository: string,
11
- framework: FrameworkResult
11
+ framework: FrameworkResult,
12
+ sliceLibPath: string[] = []
12
13
  ): void {
13
14
  const spinner = Utils.spinner(
14
15
  `Configuring your ${framework.value} & Prismic project...`
@@ -21,7 +22,7 @@ export function configureProject(
21
22
  const manifestUpdated: Models.Manifest = {
22
23
  ...(manifest.exists && manifest.content ? manifest.content : {}),
23
24
  apiEndpoint: Utils.Endpoints.buildRepositoryEndpoint(base, repository),
24
- libraries: ["@/slices"],
25
+ libraries: ["@/slices", ...sliceLibPath],
25
26
  ...(framework.manuallyAdded ? { framework: framework.value } : {}),
26
27
  };
27
28
 
@@ -6,3 +6,4 @@ export { detectFramework } from "./detect-framework";
6
6
  export { loginOrBypass } from "./loginOrBypass";
7
7
  export { configureProject } from "./configure-project";
8
8
  export { displayFinalMessage } from "./display-final-message";
9
+ export { installLib } from "./install-lib";
@@ -0,0 +1,109 @@
1
+ import { Utils } from "@slicemachine/core";
2
+ import tmp from "tmp";
3
+ import AdmZip from "adm-zip";
4
+ import fsExtra from "fs-extra";
5
+ import axios from "axios";
6
+
7
+ import fs from "fs";
8
+ import path from "path";
9
+ import { getOrElseW } from "fp-ts/Either";
10
+ import { PackageManager, Dependencies } from "../utils/PackageManager";
11
+ import { PackageJsonHelper } from "@slicemachine/core/build/src/utils/PackageJson";
12
+ import {
13
+ Manifest,
14
+ ManifestHelper,
15
+ } from "@slicemachine/core/build/src/models/Manifest";
16
+ import Files from "@slicemachine/core/build/src/utils/files";
17
+
18
+ const downloadFile = async (reqUrl: string): Promise<string> => {
19
+ const res = await axios({
20
+ method: "GET",
21
+ url: reqUrl,
22
+ responseType: "arraybuffer",
23
+ });
24
+
25
+ return new Promise((resolve, reject) => {
26
+ if (res.status == 200) {
27
+ const tmpZipFile = tmp.tmpNameSync();
28
+ const zip = new AdmZip(res.data);
29
+ zip.extractAllTo(tmpZipFile);
30
+ resolve(tmpZipFile);
31
+ } else {
32
+ reject();
33
+ }
34
+ });
35
+ };
36
+
37
+ export async function installLib(
38
+ cwd: string,
39
+ libGithubPath: string,
40
+ branch: string | undefined = "main"
41
+ ): Promise<string[] | undefined> {
42
+ const spinner = Utils.spinner(
43
+ `Installing the ${libGithubPath} lib in your project...`
44
+ );
45
+
46
+ try {
47
+ spinner.start();
48
+
49
+ const [githubUserName, githubProjectName] = libGithubPath.split("/");
50
+ const source = `https://codeload.github.com/${libGithubPath}/zip/${branch}`;
51
+
52
+ const zipFilePath = await downloadFile(source);
53
+ const outputFolder = `${githubProjectName}-${branch}`;
54
+ const projectPath = path.join(zipFilePath, outputFolder);
55
+
56
+ const name = `${githubUserName}-${githubProjectName}`;
57
+ const libDestinationFolder = path.join(cwd, name);
58
+
59
+ // We should be able to offer the ability to override or not an existing library
60
+ if (fs.existsSync(libDestinationFolder)) {
61
+ spinner.succeed(`Lib "${libGithubPath}" was already installed (skipped)`);
62
+ return;
63
+ }
64
+
65
+ // We copy all the slices into the the user project minus the src folder
66
+ fsExtra.moveSync(path.join(projectPath, "src"), libDestinationFolder);
67
+
68
+ // handle dependencies
69
+ const pkgManager = PackageManager.get(cwd);
70
+ const pkgJson = PackageJsonHelper.fromPath(
71
+ path.join(projectPath, "package.json")
72
+ );
73
+ if (pkgJson instanceof Error) throw pkgJson;
74
+
75
+ const dependencies = Dependencies.fromPkgFormat(pkgJson.dependencies);
76
+ if (dependencies) await pkgManager.install(dependencies);
77
+
78
+ // generate meta file
79
+ Files.write(path.join(libDestinationFolder, "meta.json"), {
80
+ name: pkgJson.name,
81
+ });
82
+
83
+ // retrieve all slices lib paths
84
+ const manifest = Files.readEntity<Error | Manifest>(
85
+ path.join(projectPath, "sm.json"),
86
+ (payload: unknown) => {
87
+ return getOrElseW(
88
+ () => new Error(`Unable to parse sm.json from lib ${libGithubPath}`)
89
+ )(Manifest.decode(payload));
90
+ }
91
+ );
92
+ if (manifest instanceof Error) throw manifest;
93
+
94
+ const localLibs = ManifestHelper.localLibraries(manifest).map(
95
+ ({ path }) => {
96
+ return `~/${name}/${path.replace("src/", "")}`;
97
+ }
98
+ );
99
+
100
+ spinner.succeed(
101
+ `Slice library "${libGithubPath}" was installed successfully`
102
+ );
103
+
104
+ return localLibs;
105
+ } catch {
106
+ spinner.fail(`Error installing ${libGithubPath} lib!`);
107
+ process.exit(-1);
108
+ }
109
+ }
@@ -0,0 +1,66 @@
1
+ import { Utils, FileSystem } from "@slicemachine/core";
2
+ import { execCommand } from "../utils";
3
+
4
+ export type Dependency = string | { name: string; version: string };
5
+ export const Dependencies = {
6
+ fromPkgFormat(
7
+ pkgDeps: Record<string, string> | undefined
8
+ ): ReadonlyArray<Dependency> | undefined {
9
+ if (!pkgDeps) return;
10
+
11
+ return Object.entries(pkgDeps).map(([name, version]) => ({
12
+ name,
13
+ version,
14
+ }));
15
+ },
16
+ };
17
+ function formatDeps(dependencies: ReadonlyArray<Dependency>): string {
18
+ return dependencies
19
+ .map((dep) => {
20
+ if (typeof dep === "string") return dep;
21
+ return `${dep.name}@${dep.version}`;
22
+ })
23
+ .join(" ");
24
+ }
25
+
26
+ export interface PackageManager {
27
+ install(dependencies: ReadonlyArray<Dependency>): Promise<{ stderr: string }>;
28
+ installDev(
29
+ dependencies: ReadonlyArray<Dependency>
30
+ ): Promise<{ stderr: string }>;
31
+ }
32
+
33
+ export const PackageManager = {
34
+ get(cwd: string): PackageManager {
35
+ if (Utils.Files.exists(FileSystem.YarnLockPath(cwd))) {
36
+ return Yarn;
37
+ }
38
+ return Npm;
39
+ },
40
+ };
41
+
42
+ export const Yarn: PackageManager = {
43
+ install(
44
+ dependencies: ReadonlyArray<Dependency>
45
+ ): Promise<{ stderr: string }> {
46
+ return execCommand(`yarn add ${formatDeps(dependencies)}`);
47
+ },
48
+ installDev(
49
+ dependencies: ReadonlyArray<Dependency>
50
+ ): Promise<{ stderr: string }> {
51
+ return execCommand(`yarn add --dev ${formatDeps(dependencies)}`);
52
+ },
53
+ };
54
+
55
+ export const Npm: PackageManager = {
56
+ install(
57
+ dependencies: ReadonlyArray<Dependency>
58
+ ): Promise<{ stderr: string }> {
59
+ return execCommand(`npm i --save ${formatDeps(dependencies)}`);
60
+ },
61
+ installDev(
62
+ dependencies: ReadonlyArray<Dependency>
63
+ ): Promise<{ stderr: string }> {
64
+ return execCommand(`npm i --save-dev ${formatDeps(dependencies)}`);
65
+ },
66
+ };
@@ -1,15 +1,15 @@
1
1
  import util from "util";
2
2
  import { exec } from "child_process";
3
3
 
4
- export function findArgument(args: string[], name: string): string | null {
4
+ export function findArgument(args: string[], name: string): string | undefined {
5
5
  const flagIndex: number = args.indexOf(`--${name}`);
6
6
 
7
- if (flagIndex === -1) return null;
8
- if (args.length < flagIndex + 2) return null;
7
+ if (flagIndex === -1) return;
8
+ if (args.length < flagIndex + 2) return;
9
9
 
10
10
  const flagValue = args[flagIndex + 1];
11
11
 
12
- if (flagValue.startsWith("--")) return null;
12
+ if (flagValue.startsWith("--")) return;
13
13
  return flagValue;
14
14
  }
15
15