1 | "use strict";
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.name = exports.description = void 0;
|
7 | exports.run = run;
|
8 | exports.setup = setup;
|
9 |
|
10 | var _stubUtils = require("../lib/stubUtils.js");
|
11 |
|
12 | var _flowProjectUtils = require("../lib/flowProjectUtils.js");
|
13 |
|
14 | var _npmProjectUtils = require("../lib/npm/npmProjectUtils");
|
15 |
|
16 | var _node = require("../lib/node");
|
17 |
|
18 | const name = 'create-stub <packages...>';
|
19 | exports.name = name;
|
20 | const description = 'Create a libdef stub for an untyped npm package';
|
21 | exports.description = description;
|
22 |
|
23 | function setup(yargs) {
|
24 | return yargs.usage(`$0 ${name} ...PACKAGE`).options({
|
25 | overwrite: {
|
26 | default: false,
|
27 | alias: 'o',
|
28 | describe: 'Overwrite an existing stub if it is already present in the ' + '`flow-typed` directory and has been modified',
|
29 | type: 'boolean',
|
30 | demandOption: false
|
31 | },
|
32 | typescript: {
|
33 | default: false,
|
34 | alias: 't',
|
35 | describe: 'Generate libdef from TypeScript definitions',
|
36 | type: 'boolean',
|
37 | demandOption: false
|
38 | },
|
39 | maxDepth: {
|
40 | alias: 'd',
|
41 | describe: 'Allow to generate deeper template',
|
42 | type: 'number',
|
43 | demandOption: false
|
44 | },
|
45 | libdefDir: {
|
46 | default: 'flow-typed',
|
47 | alias: 'l',
|
48 | describe: 'Use a custom directory to install libdefs',
|
49 | type: 'string',
|
50 | demandOption: false
|
51 | },
|
52 | rootDir: {
|
53 | alias: 'r',
|
54 | describe: 'Directory of .flowconfig relative to node_modules',
|
55 | type: 'string'
|
56 | }
|
57 | }).positional('packages', {
|
58 | describe: 'Please provide the names of one or more npm packages'
|
59 | }).array('packages').example('$0 create-stub foo@^1.2.0', '').example('$0 create-stub foo bar baz', '').help('h').alias('h', 'help');
|
60 | }
|
61 |
|
62 | function failWithMessage(message) {
|
63 | console.error(message);
|
64 | return 1;
|
65 | }
|
66 |
|
67 | async function run(args) {
|
68 | if (args.packages !== undefined && !Array.isArray(args.packages)) {
|
69 | throw new Error('packages is not array');
|
70 | }
|
71 |
|
72 | const packages = (args.packages || []).map(dep => {
|
73 | if (typeof dep !== 'string') {
|
74 | throw new Error('packages should be array of strings');
|
75 | }
|
76 |
|
77 | return dep;
|
78 | });
|
79 | const cwd = typeof args.rootDir === 'string' ? _node.path.resolve(args.rootDir) : process.cwd();
|
80 |
|
81 | const projectRoot = await (0, _flowProjectUtils.findFlowRoot)(cwd);
|
82 |
|
83 | if (projectRoot == null) {
|
84 | return failWithMessage(`\nERROR: Unable to find a flow project in the current dir or any of ` + `it's parents!\nPlease run this command from within a Flow project.`);
|
85 | }
|
86 |
|
87 | const pnpResolver = await (0, _npmProjectUtils.loadPnpResolver)(await (0, _npmProjectUtils.getPackageJsonData)(projectRoot));
|
88 | const plural = packages.length > 1 ? 'stubs' : 'stub';
|
89 | console.log(`• Creating ${packages.length} ${plural}...`);
|
90 | const results = await Promise.all(packages.map(pkg => {
|
91 | let version = null;
|
92 | |
93 |
|
94 |
|
95 |
|
96 |
|
97 |
|
98 |
|
99 | let parts = pkg.split(/@/);
|
100 | let packageName = parts[0];
|
101 |
|
102 | if (parts[0] === '') {
|
103 |
|
104 | packageName = '@' + parts[1];
|
105 | parts = parts.slice(1);
|
106 | }
|
107 |
|
108 | if (parts.length > 1) {
|
109 | version = parts[1];
|
110 | }
|
111 |
|
112 | return (0, _stubUtils.createStub)(projectRoot, packageName, version, Boolean(args.overwrite), pnpResolver, Boolean(args.typescript), String(args.libdefDir), Number(args.maxDepth));
|
113 | }));
|
114 | return results.every(Boolean) ? 0 : 1;
|
115 | } |
\ | No newline at end of file |