@whook/create 9.0.0 → 10.0.1

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 -2
  2. package/bin/create.js +2 -2
  3. package/dist/index.js +47 -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 +8 -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 +392 -506
  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 +48 -93
  20. package/src/index.ts +24 -17
  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 +8 -6
  24. package/src/services/author.ts +2 -2
  25. package/src/services/createWhook.test.ts +197 -312
  26. package/src/services/createWhook.ts +12 -12
  27. package/src/services/project.test.ts +11 -6
  28. package/src/services/project.ts +3 -2
  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 -834
  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
 
@@ -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
  };
@@ -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();
@@ -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 {
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,"file":"index.mjs","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"],"sources":["../src/index.ts"],"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 as Error).stack);\n process.exit(1);\n }\n}\n"],"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;EACpD,IAAI;IACF,MAAMC,CAAC,GAAG,IAAItB,UAAJ,EAAV;IAEAsB,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,KAAD,EAAQuB,OAAO,CAACC,GAAR,EAAR,CAAnB;IACAH,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,UAAD,EAAaa,QAAb,CAAnB;IACAQ,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,MAAD,EAASE,KAAT,CAAnB;IACAmB,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,WAAD,EAAcI,UAAd,CAAnB;IACAiB,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,UAAD,EAAaM,SAAb,CAAnB;IACAe,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,MAAD,EAASQ,KAAT,CAAnB;IACAa,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,WAAD,EAAcU,UAAd,CAAnB;IACAW,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;IAMAJ,CAAC,CAACC,QAAF,CAAWtB,QAAQ,CAAC,OAAD,EAAUW,KAAK,CAAC,OAAD,CAAf,CAAnB;IACAU,CAAC,CAACC,QAAF,CACEtB,QAAQ,CAAC,QAAD,EAAW;MACjB;MACA4B,KAAK,EAAEC,OAAO,CAACD,KAAR,CAAcE,IAAd,CAAmBD,OAAnB,CAFU;MAGjB;MACAE,IAAI,EAAEF,OAAO,CAACE,IAAR,CAAaD,IAAb,CAAkBD,OAAlB,CAJW;MAKjB;MACAG,OAAO,EAAEH,OAAO,CAACI,GAAR,CAAYH,IAAZ,CAAiBD,OAAjB;IANQ,CAAX,CADV;IAUAR,CAAC,CAACC,QAAF,CAAWR,cAAX;IACAO,CAAC,CAACC,QAAF,CAAWP,eAAX;IACAM,CAAC,CAACC,QAAF,CAAWN,gBAAX;IACAK,CAAC,CAACC,QAAF,CAAWL,UAAX;IACAI,CAAC,CAACC,QAAF,CAAWJ,WAAX;IACAG,CAAC,CAACC,QAAF,CAAWH,eAAX;IAEA,MAAM;MAAEe;IAAF,IAAkB,MAAMb,CAAC,CAACc,GAAF,CAE3B,CAAC,aAAD,CAF2B,CAA9B;IAIA,MAAMD,WAAW,EAAjB;EACD,CAvCD,CAuCE,OAAOE,GAAP,EAAY;IACZ;IACAP,OAAO,CAACD,KAAR,CAAc,iCAAd,EAAkDQ,GAAD,CAAeC,KAAhE;IACAd,OAAO,CAACe,IAAR,CAAa,CAAb;EACD;AACF"}
@@ -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 || 'no_stack_trace');
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,"file":"author.mjs","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"],"sources":["../../src/services/author.ts"],"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 as Error).stack || 'no_stack_trace');\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 as Error);\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(`git config --get ${name}`, (err, stdout, stderr) => {\n if (err) {\n log('debug', 'STDERR:\\n', stderr || '');\n reject(YError.wrap(err as Error));\n return;\n }\n resolve(stdout.trim());\n });\n });\n}\n"],"mappings":"AAAA,SAASA,OAAW,IAAXA,QAAT,QAA4B,YAA5B;AAEA,OAAOC,MAAP,MAAmB,QAAnB;AASA,eAAeD,QAAW,CAAC,eAAeE,UAAf,CAA0B;EACnDC,QADmD;EAEnDC,IAFmD;EAGnDC,IAHmD;EAInDC;AAJmD,CAA1B,EAUA;EACzBA,GAAG,CAAC,OAAD,EAAU,6BAAV,CAAH;EACA,MAAM,CAACC,QAAD,EAAWC,SAAX,IAAwB,MAAMC,OAAO,CAACC,GAAR,CAAY,CAC9CC,eAAe,CAAC;IAAEP,IAAF;IAAQE;EAAR,CAAD,EAAgB,WAAhB,CAD+B,EAE9CK,eAAe,CAAC;IAAEP,IAAF;IAAQE;EAAR,CAAD,EAAgB,YAAhB,CAF+B,CAAZ,EAGjCM,KAHiC,CAG1BC,GAAD,IAAS;IAChBP,GAAG,CAAC,OAAD,EAAU,+BAAV,CAAH;IACAA,GAAG,CAAC,aAAD,EAAiBO,GAAD,CAAeC,KAAf,IAAwB,gBAAxC,CAAH;IACA,OAAO,EAAP;EACD,CAPmC,CAApC;;EASA,IAAI;IACF,MAAMT,IAAI,CAACU,IAAL,CAAU,WAAV,CAAN;IAEA,MAAM;MAAEC,UAAF;MAAcC;IAAd,IAA+B,MAAMd,QAAQ,CAACe,MAAT,CAAgB,CACzD;MACEC,IAAI,EAAE,YADR;MAEEC,OAAO,EAAE,mBAFX;MAGEC,OAAO,EAAEd;IAHX,CADyD,EAMzD;MACEY,IAAI,EAAE,aADR;MAEEC,OAAO,EAAE,YAFX;MAGEC,OAAO,EAAEb;IAHX,CANyD,CAAhB,CAA3C;IAaA,MAAMH,IAAI,CAACiB,OAAL,CAAa,WAAb,CAAN;IAEA,OAAO;MACLH,IAAI,EAAEH,UADD;MAELO,KAAK,EAAEN;IAFF,CAAP;EAID,CAtBD,CAsBE,OAAOJ,GAAP,EAAY;IACZ,MAAMR,IAAI,CAACiB,OAAL,CAAa,WAAb,CAAN;IACA,MAAMrB,MAAM,CAACuB,IAAP,CAAYX,GAAZ,CAAN;EACD;AACF,CA/CyB,gDAA1B;;AAiDA,eAAeF,eAAf,CACE;EACEP,IADF;EAEEE;AAFF,CADF,EAQEa,IARF,EASmB;EACjB,OAAO,IAAIV,OAAJ,CAAY,CAACgB,OAAD,EAAUC,MAAV,KAAqB;IACtCtB,IAAI,CAAE,oBAAmBe,IAAK,EAA1B,EAA6B,CAACN,GAAD,EAAMc,MAAN,EAAcC,MAAd,KAAyB;MACxD,IAAIf,GAAJ,EAAS;QACPP,GAAG,CAAC,OAAD,EAAU,WAAV,EAAuBsB,MAAM,IAAI,EAAjC,CAAH;QACAF,MAAM,CAACzB,MAAM,CAACuB,IAAP,CAAYX,GAAZ,CAAD,CAAN;QACA;MACD;;MACDY,OAAO,CAACE,MAAM,CAACE,IAAP,EAAD,CAAP;IACD,CAPG,CAAJ;EAQD,CATM,CAAP;AAUD"}
@@ -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,"file":"author.test.mjs","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"],"sources":["../../src/services/author.test.ts"],"sourcesContent":["import _inquirer from 'inquirer';\nimport initAuthor from './author';\nimport YError from 'yerror';\n\ndescribe('initAuthor', () => {\n const exec = jest.fn() as any;\n const lock = {\n take: jest.fn(),\n release: jest.fn(),\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 as YError).code,\n errorParams: (err as YError).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"],"mappings":"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"}
@@ -1,135 +0,0 @@
1
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : 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('error-stack', err.stack || 'no_stack_trace');
87
- }), new Promise((resolve, reject) => exec('git init', {
88
- cwd: project.directory
89
- }, (err, stdout, stderr) => {
90
- if (err) {
91
- log('error-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('error-stack', err.stack || 'no_stack_trace');
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('error-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('error-stack', err.stack || 'no_stack_trace');
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,"file":"createWhook.mjs","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"],"sources":["../../src/services/createWhook.ts"],"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('error-stack', (err as Error).stack || 'no_stack_trace');\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('error-stack', stderr);\n reject(YError.wrap(err as Error));\n return;\n }\n resolve(stdout.trim());\n },\n ),\n ).catch((err) => {\n log('error', '⚠️ - Could not initialize the git project!');\n log('error-stack', (err as Error).stack || 'no_stack_trace');\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('error-stack', stderr);\n reject(YError.wrap(err as Error));\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('error-stack', (err as Error).stack || 'no_stack_trace');\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"],"mappings":"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"}