@whook/create 8.5.1 → 10.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +2 -3
  2. package/bin/create.js +2 -2
  3. package/dist/index.js +46 -68
  4. package/dist/index.js.map +1 -1
  5. package/dist/services/author.js +46 -72
  6. package/dist/services/author.js.map +1 -1
  7. package/dist/services/author.test.js +86 -92
  8. package/dist/services/author.test.js.map +1 -1
  9. package/dist/services/createWhook.d.ts +10 -11
  10. package/dist/services/createWhook.js +124 -144
  11. package/dist/services/createWhook.js.map +1 -1
  12. package/dist/services/createWhook.test.js +413 -521
  13. package/dist/services/createWhook.test.js.map +1 -1
  14. package/dist/services/project.d.ts +2 -2
  15. package/dist/services/project.js +40 -62
  16. package/dist/services/project.js.map +1 -1
  17. package/dist/services/project.test.js +73 -80
  18. package/dist/services/project.test.js.map +1 -1
  19. package/package.json +52 -98
  20. package/src/index.ts +24 -18
  21. package/src/services/__snapshots__/author.test.ts.snap +3 -3
  22. package/src/services/__snapshots__/createWhook.test.ts.snap +4 -4
  23. package/src/services/author.test.ts +10 -7
  24. package/src/services/author.ts +12 -15
  25. package/src/services/createWhook.test.ts +220 -329
  26. package/src/services/createWhook.ts +20 -20
  27. package/src/services/project.test.ts +13 -8
  28. package/src/services/project.ts +6 -5
  29. package/dist/index.mjs +0 -47
  30. package/dist/index.mjs.map +0 -1
  31. package/dist/services/author.mjs +0 -63
  32. package/dist/services/author.mjs.map +0 -1
  33. package/dist/services/author.test.mjs +0 -94
  34. package/dist/services/author.test.mjs.map +0 -1
  35. package/dist/services/createWhook.mjs +0 -135
  36. package/dist/services/createWhook.mjs.map +0 -1
  37. package/dist/services/createWhook.test.mjs +0 -828
  38. package/dist/services/createWhook.test.mjs.map +0 -1
  39. package/dist/services/project.mjs +0 -50
  40. package/dist/services/project.mjs.map +0 -1
  41. package/dist/services/project.test.mjs +0 -80
  42. package/dist/services/project.test.mjs.map +0 -1
@@ -1,22 +1,23 @@
1
1
  import { autoService } from 'knifecycle';
2
2
  import path from 'path';
3
- import _axios from 'axios';
3
+ import { default as _axios } from 'axios';
4
4
  import _ora from 'ora';
5
- import YError from 'yerror';
5
+ import { YError } from 'yerror';
6
6
  import { exec as _exec } from 'child_process';
7
- import {
8
- writeFile as _writeFile,
9
- readFile as _readFile,
10
- copy as _copy,
11
- readdir as _readdir,
12
- } from 'fs-extra';
7
+ import { default as fsExtra } from 'fs-extra';
13
8
  import type { LogService } from 'common-services';
14
- import type { ProjectService } from './project';
15
- import type { AuthorService } from './author';
9
+ import type { ProjectService } from './project.js';
10
+ import type { AuthorService } from './author.js';
16
11
 
17
12
  const GIT_IGNORE_URL = 'https://www.gitignore.io/api/osx,node,linux';
18
13
  const README_REGEXP =
19
14
  /^(?:[^]*)\[\/\/\]: # \(::contents:start\)\r?\n\r?\n([^]*)\r?\n\r?\n\[\/\/\]: # \(::contents:end\)(?:[^]*)$/gm;
15
+ const {
16
+ writeFile: _writeFile,
17
+ readFile: _readFile,
18
+ copy: _copy,
19
+ readdir: _readdir,
20
+ } = fsExtra;
20
21
 
21
22
  export type CreateWhookService = () => Promise<void>;
22
23
 
@@ -45,7 +46,7 @@ export default autoService(async function initCreateWhook({
45
46
  copy: typeof _copy;
46
47
  axios?: typeof _axios;
47
48
  ora?: typeof _ora;
48
- log?: LogService;
49
+ log: LogService;
49
50
  }): Promise<CreateWhookService> {
50
51
  return async function createWhook() {
51
52
  log('warning', "🏁️ - Starting Whook project's creation!");
@@ -61,8 +62,8 @@ export default autoService(async function initCreateWhook({
61
62
  license: 'SEE LICENSE',
62
63
  engines: basePackageJSON.engines,
63
64
  main: basePackageJSON.main,
64
- module: basePackageJSON.module,
65
65
  types: basePackageJSON.types,
66
+ type: basePackageJSON.type,
66
67
  private: true,
67
68
  keywords: ['whook'],
68
69
  author: {
@@ -83,7 +84,6 @@ export default autoService(async function initCreateWhook({
83
84
  },
84
85
  eslintConfig: basePackageJSON.eslintConfig,
85
86
  prettier: basePackageJSON.prettier,
86
- babel: basePackageJSON.babel,
87
87
  jest: basePackageJSON.jest,
88
88
  metapak: undefined,
89
89
  };
@@ -158,7 +158,7 @@ ${author.name}
158
158
  'error',
159
159
  `⚠️ - Could not retrieve the \`.gitignore\` file contents from: "${GIT_IGNORE_URL}"`,
160
160
  );
161
- log('stack', err.stack);
161
+ log('error-stack', (err as Error).stack || 'no_stack_trace');
162
162
  }),
163
163
  new Promise((resolve, reject) =>
164
164
  exec(
@@ -168,8 +168,8 @@ ${author.name}
168
168
  },
169
169
  (err, stdout, stderr) => {
170
170
  if (err) {
171
- log('stack', stderr);
172
- reject(YError.wrap(err));
171
+ log('error-stack', stderr);
172
+ reject(YError.wrap(err as Error));
173
173
  return;
174
174
  }
175
175
  resolve(stdout.trim());
@@ -177,7 +177,7 @@ ${author.name}
177
177
  ),
178
178
  ).catch((err) => {
179
179
  log('error', '⚠️ - Could not initialize the git project!');
180
- log('stack', err.stack);
180
+ log('error-stack', (err as Error).stack || 'no_stack_trace');
181
181
  }),
182
182
  ]);
183
183
 
@@ -196,8 +196,8 @@ ${author.name}
196
196
  },
197
197
  (err, stdout, stderr) => {
198
198
  if (err) {
199
- log('stack', stderr);
200
- reject(YError.wrap(err));
199
+ log('error-stack', stderr);
200
+ reject(YError.wrap(err as Error));
201
201
  return;
202
202
  }
203
203
  resolve(stdout.trim());
@@ -213,7 +213,7 @@ ${author.name}
213
213
  symbol: '❌',
214
214
  text: 'Failed to install dependencies',
215
215
  });
216
- log('stack', err.stack);
216
+ log('error-stack', (err as Error).stack || 'no_stack_trace');
217
217
  }
218
218
 
219
219
  log(
@@ -1,13 +1,18 @@
1
+ import { jest } from '@jest/globals';
1
2
  import _inquirer from 'inquirer';
2
- import initProject from './project';
3
- import YError from 'yerror';
3
+ import initProject from './project.js';
4
+ import { YError } from 'yerror';
5
+ import type { LogService, LockService } from 'common-services';
4
6
 
5
7
  describe('initProject', () => {
6
8
  const CWD = '/home/whoiam/projects/';
7
- const inquirer = { prompt: jest.fn() };
8
- const lock = { take: jest.fn(), release: jest.fn() };
9
- const ensureDir = jest.fn();
10
- const log = jest.fn();
9
+ const inquirer = { prompt: jest.fn<any>() };
10
+ const lock = {
11
+ take: jest.fn<LockService<unknown>['take']>(),
12
+ release: jest.fn<LockService<unknown>['release']>(),
13
+ };
14
+ const ensureDir = jest.fn<any>();
15
+ const log = jest.fn<LogService>();
11
16
 
12
17
  beforeEach(() => {
13
18
  lock.take.mockReset();
@@ -68,8 +73,8 @@ describe('initProject', () => {
68
73
  throw new YError('E_UNEXPECTED_SUCCESS');
69
74
  } catch (err) {
70
75
  expect({
71
- errorCode: err.code,
72
- errorParams: err.params,
76
+ errorCode: (err as YError).code,
77
+ errorParams: (err as YError).params,
73
78
  inquirerPromptCalls: inquirer.prompt.mock.calls,
74
79
  lockTakeCalls: lock.take.mock.calls,
75
80
  lockReleaseCalls: lock.release.mock.calls,
@@ -1,10 +1,11 @@
1
1
  import { autoService } from 'knifecycle';
2
- import { ensureDir as _ensureDir } from 'fs-extra';
2
+ import { default as fsExtra } from 'fs-extra';
3
3
  import path from 'path';
4
4
  import _inquirer from 'inquirer';
5
- import YError from 'yerror';
5
+ import { YError } from 'yerror';
6
6
  import type { LockService, LogService } from 'common-services';
7
7
 
8
+ const { ensureDir: _ensureDir } = fsExtra;
8
9
  const DEFAULT_PROJECT_NAME = 'new-whook-project';
9
10
 
10
11
  export interface ProjectService {
@@ -53,8 +54,8 @@ export default autoService(async function initProject({
53
54
  'error',
54
55
  `Cannot create the project's directory: "${projectDirectory}"`,
55
56
  );
56
- log('stack', err.stack);
57
- throw YError.wrap(err, 'E_PROJECT_DIR', projectDirectory);
57
+ log('error-stack', (err as Error).stack || 'no_stack_trace');
58
+ throw YError.wrap(err as Error, 'E_PROJECT_DIR', projectDirectory);
58
59
  }
59
60
 
60
61
  return {
@@ -63,6 +64,6 @@ export default autoService(async function initProject({
63
64
  };
64
65
  } catch (err) {
65
66
  await lock.release('cli:input');
66
- throw YError.cast(err);
67
+ throw YError.cast(err as Error);
67
68
  }
68
69
  });
package/dist/index.mjs DELETED
@@ -1,47 +0,0 @@
1
- import Knifecycle, { constant } from 'knifecycle';
2
- import { exec as _exec } from 'child_process';
3
- import { writeFile as _writeFile, readFile as _readFile, copy as _copy, ensureDir as _ensureDir } from 'fs-extra';
4
- import debug from 'debug';
5
- import path from 'path';
6
- import inquirer from 'inquirer';
7
- import { initLogService, initLockService, initDelayService } from 'common-services';
8
- import initAuthor from './services/author';
9
- import initProject from './services/project';
10
- import initCreateWhook from './services/createWhook';
11
- export async function runCreateWhook() {
12
- try {
13
- const $ = new Knifecycle();
14
- $.register(constant('CWD', process.cwd()));
15
- $.register(constant('inquirer', inquirer));
16
- $.register(constant('exec', _exec));
17
- $.register(constant('writeFile', _writeFile));
18
- $.register(constant('readFile', _readFile));
19
- $.register(constant('copy', _copy));
20
- $.register(constant('ensureDir', _ensureDir));
21
- $.register(constant('SOURCE_DIR', path.resolve(path.dirname(require.resolve('@whook/example')), '..')));
22
- $.register(constant('debug', debug('whook')));
23
- $.register(constant('logger', {
24
- // eslint-disable-next-line
25
- error: console.error.bind(console),
26
- // eslint-disable-next-line
27
- info: console.info.bind(console),
28
- // eslint-disable-next-line
29
- warning: console.log.bind(console)
30
- }));
31
- $.register(initLogService);
32
- $.register(initLockService);
33
- $.register(initDelayService);
34
- $.register(initAuthor);
35
- $.register(initProject);
36
- $.register(initCreateWhook);
37
- const {
38
- createWhook
39
- } = await $.run(['createWhook']);
40
- await createWhook();
41
- } catch (err) {
42
- // eslint-disable-next-line
43
- console.error('💀 - Cannot launch the process:', err.stack);
44
- process.exit(1);
45
- }
46
- }
47
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["Knifecycle","constant","exec","_exec","writeFile","_writeFile","readFile","_readFile","copy","_copy","ensureDir","_ensureDir","debug","path","inquirer","initLogService","initLockService","initDelayService","initAuthor","initProject","initCreateWhook","runCreateWhook","$","register","process","cwd","resolve","dirname","require","error","console","bind","info","warning","log","createWhook","run","err","stack","exit"],"mappings":"AAAA,OAAOA,UAAP,IAAqBC,QAArB,QAAqC,YAArC;AACA,SAASC,IAAI,IAAIC,KAAjB,QAA8B,eAA9B;AACA,SACEC,SAAS,IAAIC,UADf,EAEEC,QAAQ,IAAIC,SAFd,EAGEC,IAAI,IAAIC,KAHV,EAIEC,SAAS,IAAIC,UAJf,QAKO,UALP;AAMA,OAAOC,KAAP,MAAkB,OAAlB;AACA,OAAOC,IAAP,MAAiB,MAAjB;AACA,OAAOC,QAAP,MAAqB,UAArB;AACA,SACEC,cADF,EAEEC,eAFF,EAGEC,gBAHF,QAIO,iBAJP;AAKA,OAAOC,UAAP,MAAuB,mBAAvB;AACA,OAAOC,WAAP,MAAwB,oBAAxB;AACA,OAAOC,eAAP,MAA4B,wBAA5B;AAGA,OAAO,eAAeC,cAAf,GAA+C;AACpD,MAAI;AACF,UAAMC,CAAC,GAAG,IAAItB,UAAJ,EAAV;AAEAsB,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,KAAD,EAAQuB,OAAO,CAACC,GAAR,EAAR,CAAnB;AACAH,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,UAAD,EAAaa,QAAb,CAAnB;AACAQ,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,MAAD,EAASE,KAAT,CAAnB;AACAmB,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,WAAD,EAAcI,UAAd,CAAnB;AACAiB,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,UAAD,EAAaM,SAAb,CAAnB;AACAe,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,MAAD,EAASQ,KAAT,CAAnB;AACAa,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,WAAD,EAAcU,UAAd,CAAnB;AACAW,IAAAA,CAAC,CAACC,QAAF,CACEtB,QAAQ,CACN,YADM,EAENY,IAAI,CAACa,OAAL,CAAab,IAAI,CAACc,OAAL,CAAaC,OAAO,CAACF,OAAR,CAAgB,gBAAhB,CAAb,CAAb,EAA8D,IAA9D,CAFM,CADV;AAMAJ,IAAAA,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,OAAD,EAAUW,KAAK,CAAC,OAAD,CAAf,CAAnB;AACAU,IAAAA,CAAC,CAACC,QAAF,CACEtB,QAAQ,CAAC,QAAD,EAAW;AACjB;AACA4B,MAAAA,KAAK,EAAEC,OAAO,CAACD,KAAR,CAAcE,IAAd,CAAmBD,OAAnB,CAFU;AAGjB;AACAE,MAAAA,IAAI,EAAEF,OAAO,CAACE,IAAR,CAAaD,IAAb,CAAkBD,OAAlB,CAJW;AAKjB;AACAG,MAAAA,OAAO,EAAEH,OAAO,CAACI,GAAR,CAAYH,IAAZ,CAAiBD,OAAjB;AANQ,KAAX,CADV;AAUAR,IAAAA,CAAC,CAACC,QAAF,CAAWR,cAAX;AACAO,IAAAA,CAAC,CAACC,QAAF,CAAWP,eAAX;AACAM,IAAAA,CAAC,CAACC,QAAF,CAAWN,gBAAX;AACAK,IAAAA,CAAC,CAACC,QAAF,CAAWL,UAAX;AACAI,IAAAA,CAAC,CAACC,QAAF,CAAWJ,WAAX;AACAG,IAAAA,CAAC,CAACC,QAAF,CAAWH,eAAX;AAEA,UAAM;AAAEe,MAAAA;AAAF,QAAkB,MAAMb,CAAC,CAACc,GAAF,CAE3B,CAAC,aAAD,CAF2B,CAA9B;AAIA,UAAMD,WAAW,EAAjB;AACD,GAvCD,CAuCE,OAAOE,GAAP,EAAY;AACZ;AACAP,IAAAA,OAAO,CAACD,KAAR,CAAc,iCAAd,EAAiDQ,GAAG,CAACC,KAArD;AACAd,IAAAA,OAAO,CAACe,IAAR,CAAa,CAAb;AACD;AACF","sourcesContent":["import Knifecycle, { constant } from 'knifecycle';\nimport { exec as _exec } from 'child_process';\nimport {\n writeFile as _writeFile,\n readFile as _readFile,\n copy as _copy,\n ensureDir as _ensureDir,\n} from 'fs-extra';\nimport debug from 'debug';\nimport path from 'path';\nimport inquirer from 'inquirer';\nimport {\n initLogService,\n initLockService,\n initDelayService,\n} from 'common-services';\nimport initAuthor from './services/author';\nimport initProject from './services/project';\nimport initCreateWhook from './services/createWhook';\nimport type { CreateWhookService } from './services/createWhook';\n\nexport async function runCreateWhook(): Promise<void> {\n try {\n const $ = new Knifecycle();\n\n $.register(constant('CWD', process.cwd()));\n $.register(constant('inquirer', inquirer));\n $.register(constant('exec', _exec));\n $.register(constant('writeFile', _writeFile));\n $.register(constant('readFile', _readFile));\n $.register(constant('copy', _copy));\n $.register(constant('ensureDir', _ensureDir));\n $.register(\n constant(\n 'SOURCE_DIR',\n path.resolve(path.dirname(require.resolve('@whook/example')), '..'),\n ),\n );\n $.register(constant('debug', debug('whook')));\n $.register(\n constant('logger', {\n // eslint-disable-next-line\n error: console.error.bind(console),\n // eslint-disable-next-line\n info: console.info.bind(console),\n // eslint-disable-next-line\n warning: console.log.bind(console),\n }),\n );\n $.register(initLogService);\n $.register(initLockService);\n $.register(initDelayService);\n $.register(initAuthor);\n $.register(initProject);\n $.register(initCreateWhook);\n\n const { createWhook } = await $.run<{\n createWhook: CreateWhookService;\n }>(['createWhook']);\n\n await createWhook();\n } catch (err) {\n // eslint-disable-next-line\n console.error('💀 - Cannot launch the process:', err.stack);\n process.exit(1);\n }\n}\n"],"file":"index.mjs"}
@@ -1,63 +0,0 @@
1
- import { service as _service } from 'knifecycle';
2
- import YError from 'yerror';
3
- export default _service(async function initAuthor({
4
- inquirer,
5
- exec,
6
- lock,
7
- log
8
- }) {
9
- log('debug', '✍️ - Initializing author...');
10
- const [userName, userEmail] = await Promise.all([readGitProperty({
11
- exec,
12
- log
13
- }, 'user.name'), readGitProperty({
14
- exec,
15
- log
16
- }, 'user.email')]).catch(err => {
17
- log('debug', 'Could not get author from Git');
18
- log('debug-stack', err.stack);
19
- return [];
20
- });
21
-
22
- try {
23
- await lock.take('cli:input');
24
- const {
25
- authorName,
26
- authorEmail
27
- } = await inquirer.prompt([{
28
- name: 'authorName',
29
- message: "What's your name?",
30
- default: userName
31
- }, {
32
- name: 'authorEmail',
33
- message: 'You email?',
34
- default: userEmail
35
- }]);
36
- await lock.release('cli:input');
37
- return {
38
- name: authorName,
39
- email: authorEmail
40
- };
41
- } catch (err) {
42
- await lock.release('cli:input');
43
- throw YError.wrap(err);
44
- }
45
- }, "author", ["inquirer", "exec", "lock", "log"]);
46
-
47
- async function readGitProperty({
48
- exec,
49
- log
50
- }, name) {
51
- return new Promise((resolve, reject) => {
52
- exec(`git config --get ${name}`, (err, stdout, stderr) => {
53
- if (err) {
54
- log('debug', 'STDERR:\n', stderr || '');
55
- reject(YError.wrap(err));
56
- return;
57
- }
58
-
59
- resolve(stdout.trim());
60
- });
61
- });
62
- }
63
- //# sourceMappingURL=author.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/author.ts"],"names":["autoService","YError","initAuthor","inquirer","exec","lock","log","userName","userEmail","Promise","all","readGitProperty","catch","err","stack","take","authorName","authorEmail","prompt","name","message","default","release","email","wrap","resolve","reject","stdout","stderr","trim"],"mappings":"AAAA,SAASA,OAAW,IAAXA,QAAT,QAA4B,YAA5B;AAEA,OAAOC,MAAP,MAAmB,QAAnB;AASA,eAAeD,QAAW,CAAC,eAAeE,UAAf,CAA0B;AACnDC,EAAAA,QADmD;AAEnDC,EAAAA,IAFmD;AAGnDC,EAAAA,IAHmD;AAInDC,EAAAA;AAJmD,CAA1B,EAUA;AACzBA,EAAAA,GAAG,CAAC,OAAD,EAAU,6BAAV,CAAH;AACA,QAAM,CAACC,QAAD,EAAWC,SAAX,IAAwB,MAAMC,OAAO,CAACC,GAAR,CAAY,CAC9CC,eAAe,CAAC;AAAEP,IAAAA,IAAF;AAAQE,IAAAA;AAAR,GAAD,EAAgB,WAAhB,CAD+B,EAE9CK,eAAe,CAAC;AAAEP,IAAAA,IAAF;AAAQE,IAAAA;AAAR,GAAD,EAAgB,YAAhB,CAF+B,CAAZ,EAGjCM,KAHiC,CAG1BC,GAAD,IAAS;AAChBP,IAAAA,GAAG,CAAC,OAAD,EAAU,+BAAV,CAAH;AACAA,IAAAA,GAAG,CAAC,aAAD,EAAgBO,GAAG,CAACC,KAApB,CAAH;AACA,WAAO,EAAP;AACD,GAPmC,CAApC;;AASA,MAAI;AACF,UAAMT,IAAI,CAACU,IAAL,CAAU,WAAV,CAAN;AAEA,UAAM;AAAEC,MAAAA,UAAF;AAAcC,MAAAA;AAAd,QAA+B,MAAMd,QAAQ,CAACe,MAAT,CAAgB,CACzD;AACEC,MAAAA,IAAI,EAAE,YADR;AAEEC,MAAAA,OAAO,EAAE,mBAFX;AAGEC,MAAAA,OAAO,EAAEd;AAHX,KADyD,EAMzD;AACEY,MAAAA,IAAI,EAAE,aADR;AAEEC,MAAAA,OAAO,EAAE,YAFX;AAGEC,MAAAA,OAAO,EAAEb;AAHX,KANyD,CAAhB,CAA3C;AAaA,UAAMH,IAAI,CAACiB,OAAL,CAAa,WAAb,CAAN;AAEA,WAAO;AACLH,MAAAA,IAAI,EAAEH,UADD;AAELO,MAAAA,KAAK,EAAEN;AAFF,KAAP;AAID,GAtBD,CAsBE,OAAOJ,GAAP,EAAY;AACZ,UAAMR,IAAI,CAACiB,OAAL,CAAa,WAAb,CAAN;AACA,UAAMrB,MAAM,CAACuB,IAAP,CAAYX,GAAZ,CAAN;AACD;AACF,CA/CyB,gDAA1B;;AAiDA,eAAeF,eAAf,CACE;AACEP,EAAAA,IADF;AAEEE,EAAAA;AAFF,CADF,EAQEa,IARF,EASmB;AACjB,SAAO,IAAIV,OAAJ,CAAY,CAACgB,OAAD,EAAUC,MAAV,KAAqB;AACtCtB,IAAAA,IAAI,CACD,oBAAmBe,IAAK,EADvB,EAEF,CAACN,GAAD,EAAac,MAAb,EAA6BC,MAA7B,KAAgD;AAC9C,UAAIf,GAAJ,EAAS;AACPP,QAAAA,GAAG,CAAC,OAAD,EAAU,WAAV,EAAuBsB,MAAM,IAAI,EAAjC,CAAH;AACAF,QAAAA,MAAM,CAACzB,MAAM,CAACuB,IAAP,CAAYX,GAAZ,CAAD,CAAN;AACA;AACD;;AACDY,MAAAA,OAAO,CAACE,MAAM,CAACE,IAAP,EAAD,CAAP;AACD,KATC,CAAJ;AAWD,GAZM,CAAP;AAaD","sourcesContent":["import { autoService } from 'knifecycle';\nimport _inquirer from 'inquirer';\nimport YError from 'yerror';\nimport { exec as _exec } from 'child_process';\nimport type { LockService, LogService } from 'common-services';\n\nexport interface AuthorService {\n name: string;\n email: string;\n}\n\nexport default autoService(async function initAuthor({\n inquirer,\n exec,\n lock,\n log,\n}: {\n inquirer: typeof _inquirer;\n exec: typeof _exec;\n lock: LockService<string>;\n log: LogService;\n}): Promise<AuthorService> {\n log('debug', '✍️ - Initializing author...');\n const [userName, userEmail] = await Promise.all([\n readGitProperty({ exec, log }, 'user.name'),\n readGitProperty({ exec, log }, 'user.email'),\n ]).catch((err) => {\n log('debug', 'Could not get author from Git');\n log('debug-stack', err.stack);\n return [];\n });\n\n try {\n await lock.take('cli:input');\n\n const { authorName, authorEmail } = (await inquirer.prompt([\n {\n name: 'authorName',\n message: \"What's your name?\",\n default: userName,\n },\n {\n name: 'authorEmail',\n message: 'You email?',\n default: userEmail,\n },\n ])) as { authorName: string; authorEmail: string };\n\n await lock.release('cli:input');\n\n return {\n name: authorName,\n email: authorEmail,\n };\n } catch (err) {\n await lock.release('cli:input');\n throw YError.wrap(err);\n }\n});\n\nasync function readGitProperty(\n {\n exec,\n log,\n }: {\n exec: typeof _exec;\n log: LogService;\n },\n name: string,\n): Promise<string> {\n return new Promise((resolve, reject) => {\n exec(\n `git config --get ${name}`,\n (err: Error, stdout: string, stderr: string) => {\n if (err) {\n log('debug', 'STDERR:\\n', stderr || '');\n reject(YError.wrap(err));\n return;\n }\n resolve(stdout.trim());\n },\n );\n });\n}\n"],"file":"author.mjs"}
@@ -1,94 +0,0 @@
1
- import initAuthor from './author';
2
- describe('initAuthor', () => {
3
- const exec = jest.fn();
4
- const lock = {
5
- take: jest.fn(),
6
- release: jest.fn()
7
- };
8
- const inquirer = {
9
- prompt: jest.fn()
10
- };
11
- const log = jest.fn();
12
- beforeEach(() => {
13
- exec.mockReset();
14
- lock.take.mockReset();
15
- inquirer.prompt.mockReset();
16
- lock.release.mockReset();
17
- log.mockReset();
18
- });
19
- it('should work', async () => {
20
- exec.mockImplementationOnce((_, cb) => cb(null, 'Wayne Campbell'));
21
- exec.mockImplementationOnce((_, cb) => cb(null, 'wayne@warner.com'));
22
- lock.take.mockResolvedValueOnce(undefined);
23
- inquirer.prompt.mockResolvedValueOnce({
24
- authorName: 'Wayne Campbell',
25
- authorEmail: 'wayne@warner.com'
26
- });
27
- lock.release.mockResolvedValueOnce(undefined);
28
- const author = await initAuthor({
29
- inquirer: inquirer,
30
- exec,
31
- lock,
32
- log
33
- });
34
- expect({
35
- author,
36
- inquirerPromptCalls: inquirer.prompt.mock.calls,
37
- lockTakeCalls: lock.take.mock.calls,
38
- lockReleaseCalls: lock.release.mock.calls,
39
- execCalls: exec.mock.calls,
40
- logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack'))
41
- }).toMatchSnapshot();
42
- });
43
- it('should handle git failures', async () => {
44
- exec.mockImplementationOnce((_, cb) => cb(new Error('E_GIT_ERROR')));
45
- exec.mockImplementationOnce((_, cb) => cb(new Error('E_GIT_ERROR')));
46
- lock.take.mockResolvedValueOnce(undefined);
47
- inquirer.prompt.mockResolvedValueOnce({
48
- authorName: 'Wayne Campbell',
49
- authorEmail: 'wayne@warner.com'
50
- });
51
- lock.release.mockResolvedValueOnce(undefined);
52
- const author = await initAuthor({
53
- inquirer: inquirer,
54
- exec,
55
- lock,
56
- log
57
- });
58
- expect({
59
- author,
60
- inquirerPromptCalls: inquirer.prompt.mock.calls,
61
- lockTakeCalls: lock.take.mock.calls,
62
- lockReleaseCalls: lock.release.mock.calls,
63
- execCalls: exec.mock.calls,
64
- logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack'))
65
- }).toMatchSnapshot();
66
- });
67
- it('should release the lock on failure', async () => {
68
- exec.mockImplementationOnce((_, cb) => cb(null, 'Wayne Campbell'));
69
- exec.mockImplementationOnce((_, cb) => cb(null, 'wayne@warner.com'));
70
- lock.take.mockResolvedValueOnce(undefined);
71
- inquirer.prompt.mockRejectedValueOnce(new Error('E_PROMPT_ERROR'));
72
- lock.release.mockResolvedValueOnce(undefined);
73
-
74
- try {
75
- await initAuthor({
76
- inquirer: inquirer,
77
- exec,
78
- lock,
79
- log
80
- });
81
- } catch (err) {
82
- expect({
83
- errorCode: err.code,
84
- errorParams: err.params,
85
- inquirerPromptCalls: inquirer.prompt.mock.calls,
86
- lockTakeCalls: lock.take.mock.calls,
87
- lockReleaseCalls: lock.release.mock.calls,
88
- execCalls: exec.mock.calls,
89
- logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack'))
90
- }).toMatchSnapshot();
91
- }
92
- });
93
- });
94
- //# sourceMappingURL=author.test.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/author.test.ts"],"names":["initAuthor","describe","exec","jest","fn","lock","take","release","inquirer","prompt","log","beforeEach","mockReset","it","mockImplementationOnce","_","cb","mockResolvedValueOnce","undefined","authorName","authorEmail","author","expect","inquirerPromptCalls","mock","calls","lockTakeCalls","lockReleaseCalls","execCalls","logCalls","filter","type","endsWith","toMatchSnapshot","Error","mockRejectedValueOnce","err","errorCode","code","errorParams","params"],"mappings":"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","sourcesContent":["import _inquirer from 'inquirer';\nimport initAuthor from './author';\n\ndescribe('initAuthor', () => {\n const exec = jest.fn() as any;\n const lock = {\n take: jest.fn() as jest.Mock<undefined>,\n release: jest.fn() as jest.Mock<undefined>,\n };\n const inquirer = { prompt: jest.fn() };\n const log = jest.fn();\n\n beforeEach(() => {\n exec.mockReset();\n lock.take.mockReset();\n inquirer.prompt.mockReset();\n lock.release.mockReset();\n log.mockReset();\n });\n\n it('should work', async () => {\n exec.mockImplementationOnce((_, cb) => cb(null, 'Wayne Campbell'));\n exec.mockImplementationOnce((_, cb) => cb(null, 'wayne@warner.com'));\n lock.take.mockResolvedValueOnce(undefined);\n inquirer.prompt.mockResolvedValueOnce({\n authorName: 'Wayne Campbell',\n authorEmail: 'wayne@warner.com',\n });\n lock.release.mockResolvedValueOnce(undefined);\n\n const author = await initAuthor({\n inquirer: inquirer as unknown as typeof _inquirer,\n exec,\n lock,\n log,\n });\n\n expect({\n author,\n inquirerPromptCalls: inquirer.prompt.mock.calls,\n lockTakeCalls: lock.take.mock.calls,\n lockReleaseCalls: lock.release.mock.calls,\n execCalls: exec.mock.calls,\n logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack')),\n }).toMatchSnapshot();\n });\n\n it('should handle git failures', async () => {\n exec.mockImplementationOnce((_, cb) => cb(new Error('E_GIT_ERROR')));\n exec.mockImplementationOnce((_, cb) => cb(new Error('E_GIT_ERROR')));\n lock.take.mockResolvedValueOnce(undefined);\n inquirer.prompt.mockResolvedValueOnce({\n authorName: 'Wayne Campbell',\n authorEmail: 'wayne@warner.com',\n });\n lock.release.mockResolvedValueOnce(undefined);\n\n const author = await initAuthor({\n inquirer: inquirer as unknown as typeof _inquirer,\n exec,\n lock,\n log,\n });\n\n expect({\n author,\n inquirerPromptCalls: inquirer.prompt.mock.calls,\n lockTakeCalls: lock.take.mock.calls,\n lockReleaseCalls: lock.release.mock.calls,\n execCalls: exec.mock.calls,\n logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack')),\n }).toMatchSnapshot();\n });\n\n it('should release the lock on failure', async () => {\n exec.mockImplementationOnce((_, cb) => cb(null, 'Wayne Campbell'));\n exec.mockImplementationOnce((_, cb) => cb(null, 'wayne@warner.com'));\n lock.take.mockResolvedValueOnce(undefined);\n inquirer.prompt.mockRejectedValueOnce(new Error('E_PROMPT_ERROR'));\n lock.release.mockResolvedValueOnce(undefined);\n\n try {\n await initAuthor({\n inquirer: inquirer as unknown as typeof _inquirer,\n exec,\n lock,\n log,\n });\n } catch (err) {\n expect({\n errorCode: err.code,\n errorParams: err.params,\n inquirerPromptCalls: inquirer.prompt.mock.calls,\n lockTakeCalls: lock.take.mock.calls,\n lockReleaseCalls: lock.release.mock.calls,\n execCalls: exec.mock.calls,\n logCalls: log.mock.calls.filter(([type]) => !type.endsWith('stack')),\n }).toMatchSnapshot();\n }\n });\n});\n"],"file":"author.test.mjs"}
@@ -1,135 +0,0 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
2
-
3
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
4
-
5
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
-
7
- import { service as _service } from 'knifecycle';
8
- import path from 'path';
9
- import _axios from 'axios';
10
- import _ora from 'ora';
11
- import YError from 'yerror';
12
- import { exec as _exec } from 'child_process';
13
- import { writeFile as _writeFile, readFile as _readFile, copy as _copy, readdir as _readdir } from 'fs-extra';
14
- const GIT_IGNORE_URL = 'https://www.gitignore.io/api/osx,node,linux';
15
- const README_REGEXP = /^(?:[^]*)\[\/\/\]: # \(::contents:start\)\r?\n\r?\n([^]*)\r?\n\r?\n\[\/\/\]: # \(::contents:end\)(?:[^]*)$/gm;
16
- export default _service(async function initCreateWhook({
17
- CWD,
18
- SOURCE_DIR,
19
- author,
20
- project,
21
- writeFile = _writeFile,
22
- readFile = _readFile,
23
- readdir = _readdir,
24
- exec = _exec,
25
- copy = _copy,
26
- axios = _axios,
27
- ora = _ora,
28
- log
29
- }) {
30
- return async function createWhook() {
31
- log('warning', "🏁️ - Starting Whook project's creation!");
32
- const basePackageJSON = JSON.parse((await readFile(path.join(SOURCE_DIR, 'package.json'))).toString());
33
- const finalPackageJSON = {
34
- name: project.name,
35
- description: 'A new Whook project',
36
- version: '0.0.0',
37
- license: 'SEE LICENSE',
38
- engines: basePackageJSON.engines,
39
- main: basePackageJSON.main,
40
- module: basePackageJSON.module,
41
- types: basePackageJSON.types,
42
- private: true,
43
- keywords: ['whook'],
44
- author: {
45
- name: author.name,
46
- email: author.email
47
- },
48
- scripts: _objectSpread(_objectSpread({}, basePackageJSON.scripts), {}, {
49
- metapak: undefined,
50
- cli: undefined
51
- }),
52
- files: basePackageJSON.files.filter(pattern => pattern !== 'src/**/*'),
53
- dependencies: basePackageJSON.dependencies,
54
- devDependencies: _objectSpread(_objectSpread({}, basePackageJSON.devDependencies), {}, {
55
- metapak: undefined,
56
- 'metapak-nfroidure': undefined
57
- }),
58
- eslintConfig: basePackageJSON.eslintConfig,
59
- prettier: basePackageJSON.prettier,
60
- babel: basePackageJSON.babel,
61
- jest: basePackageJSON.jest,
62
- metapak: undefined
63
- };
64
- await Promise.all([copy(SOURCE_DIR, project.directory, {
65
- filter: (src, dest) => {
66
- if (src.startsWith(path.join(SOURCE_DIR, 'node_modules')) || src.startsWith(path.join(SOURCE_DIR, 'dist')) || src.startsWith(path.join(SOURCE_DIR, 'coverage')) || [path.join(SOURCE_DIR, 'package.json'), path.join(SOURCE_DIR, 'package-lock.json'), path.join(SOURCE_DIR, 'LICENSE'), path.join(SOURCE_DIR, 'README.md')].includes(src)) {
67
- log('debug', `Discarding "${src}" => "${dest} ("${path.relative(src, SOURCE_DIR)}").`);
68
- return false;
69
- }
70
-
71
- log('debug', `Moving "${src}" => "${dest}".`);
72
- return true;
73
- }
74
- }), readFile(path.join(SOURCE_DIR, 'README.md')).then(data => writeFile(path.join(project.directory, 'README.md'), `# ${project.name}
75
-
76
- ${data.toString().replace(README_REGEXP, '$1')}
77
-
78
- ## Author
79
- ${author.name}
80
-
81
- `)), ...(await readdir(path.join(SOURCE_DIR, 'src', 'config'))).map(environment => environment === 'common' ? Promise.resolve() : writeFile(path.join(project.directory, `.env.${environment}`), 'JWT_SECRET=oudelali\n')), writeFile(path.join(project.directory, 'package.json'), JSON.stringify(finalPackageJSON)), writeFile(path.join(project.directory, 'LICENSE'), `Copyright ${author.name}, all rights reserved.`), axios({
82
- method: 'get',
83
- url: GIT_IGNORE_URL
84
- }).then(response => writeFile(path.join(project.directory, '.gitignore'), response.data)).catch(err => {
85
- log('error', `⚠️ - Could not retrieve the \`.gitignore\` file contents from: "${GIT_IGNORE_URL}"`);
86
- log('stack', err.stack);
87
- }), new Promise((resolve, reject) => exec('git init', {
88
- cwd: project.directory
89
- }, (err, stdout, stderr) => {
90
- if (err) {
91
- log('stack', stderr);
92
- reject(YError.wrap(err));
93
- return;
94
- }
95
-
96
- resolve(stdout.trim());
97
- })).catch(err => {
98
- log('error', '⚠️ - Could not initialize the git project!');
99
- log('stack', err.stack);
100
- })]);
101
- log('warning', '✔️ - Project created!');
102
- const spinner = ora({
103
- text: 'Installing dependencies...'
104
- }).start();
105
-
106
- try {
107
- await new Promise((resolve, reject) => exec('npm i', {
108
- cwd: project.directory
109
- }, (err, stdout, stderr) => {
110
- if (err) {
111
- log('stack', stderr);
112
- reject(YError.wrap(err));
113
- return;
114
- }
115
-
116
- resolve(stdout.trim());
117
- }));
118
- spinner.stopAndPersist({
119
- symbol: '✔️',
120
- text: 'Installed dependencies'
121
- });
122
- } catch (err) {
123
- spinner.stopAndPersist({
124
- symbol: '❌',
125
- text: 'Failed to install dependencies'
126
- });
127
- log('stack', err.stack);
128
- }
129
-
130
- log('warning', `➕ - Run \`cd ${path.relative(CWD, project.directory)}\` to enter the project.`);
131
- log('warning', `➕ - Then run \`DRY_RUN=1 npm run dev\` to check installation.`);
132
- log('warning', `➕ - And finally run \`npm run watch\` to start dev!`);
133
- };
134
- }, "createWhook", ["CWD", "SOURCE_DIR", "author", "project", "?writeFile", "?readFile", "?readdir", "?exec", "?copy", "?axios", "?ora", "log"]);
135
- //# sourceMappingURL=createWhook.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/services/createWhook.ts"],"names":["autoService","path","_axios","_ora","YError","exec","_exec","writeFile","_writeFile","readFile","_readFile","copy","_copy","readdir","_readdir","GIT_IGNORE_URL","README_REGEXP","initCreateWhook","CWD","SOURCE_DIR","author","project","axios","ora","log","createWhook","basePackageJSON","JSON","parse","join","toString","finalPackageJSON","name","description","version","license","engines","main","module","types","private","keywords","email","scripts","metapak","undefined","cli","files","filter","pattern","dependencies","devDependencies","eslintConfig","prettier","babel","jest","Promise","all","directory","src","dest","startsWith","includes","relative","then","data","replace","map","environment","resolve","stringify","method","url","response","catch","err","stack","reject","cwd","stdout","stderr","wrap","trim","spinner","text","start","stopAndPersist","symbol"],"mappings":"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","sourcesContent":["import { autoService } from 'knifecycle';\nimport path from 'path';\nimport _axios from 'axios';\nimport _ora from 'ora';\nimport YError from 'yerror';\nimport { exec as _exec } from 'child_process';\nimport {\n writeFile as _writeFile,\n readFile as _readFile,\n copy as _copy,\n readdir as _readdir,\n} from 'fs-extra';\nimport type { LogService } from 'common-services';\nimport type { ProjectService } from './project';\nimport type { AuthorService } from './author';\n\nconst GIT_IGNORE_URL = 'https://www.gitignore.io/api/osx,node,linux';\nconst README_REGEXP =\n /^(?:[^]*)\\[\\/\\/\\]: # \\(::contents:start\\)\\r?\\n\\r?\\n([^]*)\\r?\\n\\r?\\n\\[\\/\\/\\]: # \\(::contents:end\\)(?:[^]*)$/gm;\n\nexport type CreateWhookService = () => Promise<void>;\n\nexport default autoService(async function initCreateWhook({\n CWD,\n SOURCE_DIR,\n author,\n project,\n writeFile = _writeFile,\n readFile = _readFile,\n readdir = _readdir,\n exec = _exec,\n copy = _copy,\n axios = _axios,\n ora = _ora,\n log,\n}: {\n CWD: string;\n SOURCE_DIR: string;\n author: AuthorService;\n project: ProjectService;\n writeFile: typeof _writeFile;\n readFile: typeof _readFile;\n readdir: typeof _readdir;\n exec: typeof _exec;\n copy: typeof _copy;\n axios?: typeof _axios;\n ora?: typeof _ora;\n log?: LogService;\n}): Promise<CreateWhookService> {\n return async function createWhook() {\n log('warning', \"🏁️ - Starting Whook project's creation!\");\n\n const basePackageJSON = JSON.parse(\n (await readFile(path.join(SOURCE_DIR, 'package.json'))).toString(),\n );\n\n const finalPackageJSON = {\n name: project.name,\n description: 'A new Whook project',\n version: '0.0.0',\n license: 'SEE LICENSE',\n engines: basePackageJSON.engines,\n main: basePackageJSON.main,\n module: basePackageJSON.module,\n types: basePackageJSON.types,\n private: true,\n keywords: ['whook'],\n author: {\n name: author.name,\n email: author.email,\n },\n scripts: {\n ...basePackageJSON.scripts,\n metapak: undefined,\n cli: undefined,\n },\n files: basePackageJSON.files.filter((pattern) => pattern !== 'src/**/*'),\n dependencies: basePackageJSON.dependencies,\n devDependencies: {\n ...basePackageJSON.devDependencies,\n metapak: undefined,\n 'metapak-nfroidure': undefined,\n },\n eslintConfig: basePackageJSON.eslintConfig,\n prettier: basePackageJSON.prettier,\n babel: basePackageJSON.babel,\n jest: basePackageJSON.jest,\n metapak: undefined,\n };\n\n await Promise.all([\n copy(SOURCE_DIR, project.directory, {\n filter: (src, dest) => {\n if (\n src.startsWith(path.join(SOURCE_DIR, 'node_modules')) ||\n src.startsWith(path.join(SOURCE_DIR, 'dist')) ||\n src.startsWith(path.join(SOURCE_DIR, 'coverage')) ||\n [\n path.join(SOURCE_DIR, 'package.json'),\n path.join(SOURCE_DIR, 'package-lock.json'),\n path.join(SOURCE_DIR, 'LICENSE'),\n path.join(SOURCE_DIR, 'README.md'),\n ].includes(src)\n ) {\n log(\n 'debug',\n `Discarding \"${src}\" => \"${dest} (\"${path.relative(\n src,\n SOURCE_DIR,\n )}\").`,\n );\n return false;\n }\n log('debug', `Moving \"${src}\" => \"${dest}\".`);\n return true;\n },\n }),\n readFile(path.join(SOURCE_DIR, 'README.md')).then((data) =>\n writeFile(\n path.join(project.directory, 'README.md'),\n `# ${project.name}\n\n${data.toString().replace(README_REGEXP, '$1')}\n\n## Author\n${author.name}\n\n`,\n ),\n ),\n ...(\n await readdir(path.join(SOURCE_DIR, 'src', 'config'))\n ).map((environment) =>\n environment === 'common'\n ? Promise.resolve()\n : writeFile(\n path.join(project.directory, `.env.${environment}`),\n 'JWT_SECRET=oudelali\\n',\n ),\n ),\n writeFile(\n path.join(project.directory, 'package.json'),\n JSON.stringify(finalPackageJSON),\n ),\n writeFile(\n path.join(project.directory, 'LICENSE'),\n `Copyright ${author.name}, all rights reserved.`,\n ),\n axios({\n method: 'get',\n url: GIT_IGNORE_URL,\n })\n .then((response) =>\n writeFile(path.join(project.directory, '.gitignore'), response.data),\n )\n .catch((err) => {\n log(\n 'error',\n `⚠️ - Could not retrieve the \\`.gitignore\\` file contents from: \"${GIT_IGNORE_URL}\"`,\n );\n log('stack', err.stack);\n }),\n new Promise((resolve, reject) =>\n exec(\n 'git init',\n {\n cwd: project.directory,\n },\n (err, stdout, stderr) => {\n if (err) {\n log('stack', stderr);\n reject(YError.wrap(err));\n return;\n }\n resolve(stdout.trim());\n },\n ),\n ).catch((err) => {\n log('error', '⚠️ - Could not initialize the git project!');\n log('stack', err.stack);\n }),\n ]);\n\n log('warning', '✔️ - Project created!');\n\n const spinner = ora({\n text: 'Installing dependencies...',\n }).start();\n\n try {\n await new Promise((resolve, reject) =>\n exec(\n 'npm i',\n {\n cwd: project.directory,\n },\n (err, stdout, stderr) => {\n if (err) {\n log('stack', stderr);\n reject(YError.wrap(err));\n return;\n }\n resolve(stdout.trim());\n },\n ),\n );\n spinner.stopAndPersist({\n symbol: '✔️',\n text: 'Installed dependencies',\n });\n } catch (err) {\n spinner.stopAndPersist({\n symbol: '❌',\n text: 'Failed to install dependencies',\n });\n log('stack', err.stack);\n }\n\n log(\n 'warning',\n `➕ - Run \\`cd ${path.relative(\n CWD,\n project.directory,\n )}\\` to enter the project.`,\n );\n log(\n 'warning',\n `➕ - Then run \\`DRY_RUN=1 npm run dev\\` to check installation.`,\n );\n log('warning', `➕ - And finally run \\`npm run watch\\` to start dev!`);\n };\n});\n"],"file":"createWhook.mjs"}