@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.
- package/README.md +2 -3
- package/bin/create.js +2 -2
- package/dist/index.js +46 -68
- package/dist/index.js.map +1 -1
- package/dist/services/author.js +46 -72
- package/dist/services/author.js.map +1 -1
- package/dist/services/author.test.js +86 -92
- package/dist/services/author.test.js.map +1 -1
- package/dist/services/createWhook.d.ts +10 -11
- package/dist/services/createWhook.js +124 -144
- package/dist/services/createWhook.js.map +1 -1
- package/dist/services/createWhook.test.js +413 -521
- package/dist/services/createWhook.test.js.map +1 -1
- package/dist/services/project.d.ts +2 -2
- package/dist/services/project.js +40 -62
- package/dist/services/project.js.map +1 -1
- package/dist/services/project.test.js +73 -80
- package/dist/services/project.test.js.map +1 -1
- package/package.json +52 -98
- package/src/index.ts +24 -18
- package/src/services/__snapshots__/author.test.ts.snap +3 -3
- package/src/services/__snapshots__/createWhook.test.ts.snap +4 -4
- package/src/services/author.test.ts +10 -7
- package/src/services/author.ts +12 -15
- package/src/services/createWhook.test.ts +220 -329
- package/src/services/createWhook.ts +20 -20
- package/src/services/project.test.ts +13 -8
- package/src/services/project.ts +6 -5
- package/dist/index.mjs +0 -47
- package/dist/index.mjs.map +0 -1
- package/dist/services/author.mjs +0 -63
- package/dist/services/author.mjs.map +0 -1
- package/dist/services/author.test.mjs +0 -94
- package/dist/services/author.test.mjs.map +0 -1
- package/dist/services/createWhook.mjs +0 -135
- package/dist/services/createWhook.mjs.map +0 -1
- package/dist/services/createWhook.test.mjs +0 -828
- package/dist/services/createWhook.test.mjs.map +0 -1
- package/dist/services/project.mjs +0 -50
- package/dist/services/project.mjs.map +0 -1
- package/dist/services/project.test.mjs +0 -80
- 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
|
|
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 = {
|
|
9
|
-
|
|
10
|
-
|
|
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,
|
package/src/services/project.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { autoService } from 'knifecycle';
|
|
2
|
-
import {
|
|
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
|
package/dist/index.mjs.map
DELETED
|
@@ -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"}
|
package/dist/services/author.mjs
DELETED
|
@@ -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"}
|