@deot/dev-adder 1.1.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 +5 -0
- package/dist/index.cjs.js +153 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.es.js +151 -0
- package/package.json +19 -0
package/README.md
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var devShared = require('@deot/dev-shared');
|
|
4
|
+
var node_path = require('node:path');
|
|
5
|
+
var ora = require('ora');
|
|
6
|
+
var fs = require('fs-extra');
|
|
7
|
+
var inquirer = require('inquirer');
|
|
8
|
+
var autocomplete = require('inquirer-autocomplete-prompt');
|
|
9
|
+
|
|
10
|
+
const { prompt, registerPrompt, Separator } = inquirer;
|
|
11
|
+
const getOptions = async () => {
|
|
12
|
+
const { packageFolderNames } = devShared.Locals.impl();
|
|
13
|
+
const question = [
|
|
14
|
+
{
|
|
15
|
+
type: 'list',
|
|
16
|
+
name: 'mode',
|
|
17
|
+
message: 'Select Mode:',
|
|
18
|
+
choices: [
|
|
19
|
+
new Separator('选择添加的类型:'),
|
|
20
|
+
'dependent',
|
|
21
|
+
'package'
|
|
22
|
+
],
|
|
23
|
+
default: 'package'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'autocomplete',
|
|
27
|
+
message: 'Select Package To Install:',
|
|
28
|
+
when: (answers) => answers.mode === 'dependent',
|
|
29
|
+
name: 'packageFolderName',
|
|
30
|
+
default: 'index',
|
|
31
|
+
source: (_, input) => {
|
|
32
|
+
input = input || '';
|
|
33
|
+
return new Promise(($resolve => {
|
|
34
|
+
let filter = input
|
|
35
|
+
? packageFolderNames.filter(item => item.includes(input))
|
|
36
|
+
: packageFolderNames;
|
|
37
|
+
$resolve(filter);
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
type: 'input',
|
|
43
|
+
name: 'dependentName',
|
|
44
|
+
message: 'Input Dependent Name',
|
|
45
|
+
default: '',
|
|
46
|
+
when: (answers) => answers.mode === 'dependent',
|
|
47
|
+
validate: (answer) => {
|
|
48
|
+
if (!answer) {
|
|
49
|
+
return '请输入需要添加的模块名';
|
|
50
|
+
}
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'list',
|
|
56
|
+
name: 'args',
|
|
57
|
+
when: (answers) => answers.mode === 'dependent',
|
|
58
|
+
message: 'Select Install Mode:',
|
|
59
|
+
choices: [
|
|
60
|
+
'-S',
|
|
61
|
+
'-D',
|
|
62
|
+
'-O'
|
|
63
|
+
]
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'input',
|
|
67
|
+
name: 'packageFolderName',
|
|
68
|
+
message: 'Input Package Name',
|
|
69
|
+
default: '',
|
|
70
|
+
when: (answers) => answers.mode === 'package',
|
|
71
|
+
validate: (answer) => {
|
|
72
|
+
if (!answer) {
|
|
73
|
+
return '请输入需要添加的包名';
|
|
74
|
+
}
|
|
75
|
+
if (packageFolderNames.includes(answer) || answer === 'dev') {
|
|
76
|
+
return '包名已存在';
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
];
|
|
82
|
+
registerPrompt('autocomplete', autocomplete);
|
|
83
|
+
let result = await prompt(question);
|
|
84
|
+
if (result.mode == 'dependent') {
|
|
85
|
+
result.packageName = devShared.Locals.getPackageName(result.packageFolderName);
|
|
86
|
+
}
|
|
87
|
+
if (result.mode == 'package') {
|
|
88
|
+
result.packageName = devShared.Locals.getPackageName(result.packageFolderName);
|
|
89
|
+
}
|
|
90
|
+
result.args = [result.args];
|
|
91
|
+
return result;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const run = (options) => devShared.Utils.autoCatch(async () => {
|
|
95
|
+
options = {
|
|
96
|
+
dryRun: false,
|
|
97
|
+
...options
|
|
98
|
+
};
|
|
99
|
+
const locals = devShared.Locals.impl();
|
|
100
|
+
const { workspace, packageDir } = locals;
|
|
101
|
+
if (!workspace) {
|
|
102
|
+
return devShared.Logger.log(`<add> Monorepo Supported Only.`);
|
|
103
|
+
}
|
|
104
|
+
if (typeof options.dryRun === 'undefined') {
|
|
105
|
+
options.dryRun = process.env.NODE_ENV === 'UNIT';
|
|
106
|
+
}
|
|
107
|
+
const { mode, dependentName, args, packageFolderName, packageName } = await getOptions();
|
|
108
|
+
let command = mode === 'dependent'
|
|
109
|
+
? `npx pnpm add --filter ${packageName} ${dependentName} ${args.join(' ')}`
|
|
110
|
+
: `npx pnpm link ./${workspace}/${packageFolderName}`;
|
|
111
|
+
if (options.dryRun)
|
|
112
|
+
return devShared.Shell.spawn(`echo "${command}"`);
|
|
113
|
+
const spinner = ora(`${command}\n`).start();
|
|
114
|
+
if (mode === 'package') {
|
|
115
|
+
let dir = node_path.resolve(packageDir);
|
|
116
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/README.md`, '// TODO');
|
|
117
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/src/index.ts`, '// TODO');
|
|
118
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/__tests__/index.spec.ts`, '// TODO');
|
|
119
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/package.json`, JSON.stringify({
|
|
120
|
+
name: packageName,
|
|
121
|
+
version: '1.0.0',
|
|
122
|
+
main: 'dist/index.cjs.js',
|
|
123
|
+
module: 'dist/index.es.js',
|
|
124
|
+
types: "dist/index.d.ts",
|
|
125
|
+
exports: {
|
|
126
|
+
".": {
|
|
127
|
+
import: "./dist/index.es.js",
|
|
128
|
+
require: "./dist/index.cjs.js",
|
|
129
|
+
types: "./dist/index.d.ts"
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
files: [
|
|
133
|
+
"dist"
|
|
134
|
+
],
|
|
135
|
+
license: 'MIT',
|
|
136
|
+
publishConfig: {
|
|
137
|
+
access: 'public'
|
|
138
|
+
},
|
|
139
|
+
dependencies: {}
|
|
140
|
+
}, null, 2));
|
|
141
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/api-extractor.json`, JSON.stringify({
|
|
142
|
+
extends: "../../api-extractor.json",
|
|
143
|
+
mainEntryPointFilePath: `./dist/${workspace}/${packageFolderName}/src/index.d.ts`,
|
|
144
|
+
dtsRollup: {
|
|
145
|
+
publicTrimmedFilePath: "./dist/index.d.ts"
|
|
146
|
+
}
|
|
147
|
+
}, null, 2));
|
|
148
|
+
}
|
|
149
|
+
await devShared.Shell.spawn(command);
|
|
150
|
+
spinner.stop();
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
exports.run = run;
|
package/dist/index.d.ts
ADDED
package/dist/index.es.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Locals, Utils, Logger, Shell } from '@deot/dev-shared';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import fs from 'fs-extra';
|
|
5
|
+
import inquirer from 'inquirer';
|
|
6
|
+
import autocomplete from 'inquirer-autocomplete-prompt';
|
|
7
|
+
|
|
8
|
+
const { prompt, registerPrompt, Separator } = inquirer;
|
|
9
|
+
const getOptions = async () => {
|
|
10
|
+
const { packageFolderNames } = Locals.impl();
|
|
11
|
+
const question = [
|
|
12
|
+
{
|
|
13
|
+
type: 'list',
|
|
14
|
+
name: 'mode',
|
|
15
|
+
message: 'Select Mode:',
|
|
16
|
+
choices: [
|
|
17
|
+
new Separator('选择添加的类型:'),
|
|
18
|
+
'dependent',
|
|
19
|
+
'package'
|
|
20
|
+
],
|
|
21
|
+
default: 'package'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: 'autocomplete',
|
|
25
|
+
message: 'Select Package To Install:',
|
|
26
|
+
when: (answers) => answers.mode === 'dependent',
|
|
27
|
+
name: 'packageFolderName',
|
|
28
|
+
default: 'index',
|
|
29
|
+
source: (_, input) => {
|
|
30
|
+
input = input || '';
|
|
31
|
+
return new Promise(($resolve => {
|
|
32
|
+
let filter = input
|
|
33
|
+
? packageFolderNames.filter(item => item.includes(input))
|
|
34
|
+
: packageFolderNames;
|
|
35
|
+
$resolve(filter);
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
type: 'input',
|
|
41
|
+
name: 'dependentName',
|
|
42
|
+
message: 'Input Dependent Name',
|
|
43
|
+
default: '',
|
|
44
|
+
when: (answers) => answers.mode === 'dependent',
|
|
45
|
+
validate: (answer) => {
|
|
46
|
+
if (!answer) {
|
|
47
|
+
return '请输入需要添加的模块名';
|
|
48
|
+
}
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
type: 'list',
|
|
54
|
+
name: 'args',
|
|
55
|
+
when: (answers) => answers.mode === 'dependent',
|
|
56
|
+
message: 'Select Install Mode:',
|
|
57
|
+
choices: [
|
|
58
|
+
'-S',
|
|
59
|
+
'-D',
|
|
60
|
+
'-O'
|
|
61
|
+
]
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
type: 'input',
|
|
65
|
+
name: 'packageFolderName',
|
|
66
|
+
message: 'Input Package Name',
|
|
67
|
+
default: '',
|
|
68
|
+
when: (answers) => answers.mode === 'package',
|
|
69
|
+
validate: (answer) => {
|
|
70
|
+
if (!answer) {
|
|
71
|
+
return '请输入需要添加的包名';
|
|
72
|
+
}
|
|
73
|
+
if (packageFolderNames.includes(answer) || answer === 'dev') {
|
|
74
|
+
return '包名已存在';
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
];
|
|
80
|
+
registerPrompt('autocomplete', autocomplete);
|
|
81
|
+
let result = await prompt(question);
|
|
82
|
+
if (result.mode == 'dependent') {
|
|
83
|
+
result.packageName = Locals.getPackageName(result.packageFolderName);
|
|
84
|
+
}
|
|
85
|
+
if (result.mode == 'package') {
|
|
86
|
+
result.packageName = Locals.getPackageName(result.packageFolderName);
|
|
87
|
+
}
|
|
88
|
+
result.args = [result.args];
|
|
89
|
+
return result;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
const run = (options) => Utils.autoCatch(async () => {
|
|
93
|
+
options = {
|
|
94
|
+
dryRun: false,
|
|
95
|
+
...options
|
|
96
|
+
};
|
|
97
|
+
const locals = Locals.impl();
|
|
98
|
+
const { workspace, packageDir } = locals;
|
|
99
|
+
if (!workspace) {
|
|
100
|
+
return Logger.log(`<add> Monorepo Supported Only.`);
|
|
101
|
+
}
|
|
102
|
+
if (typeof options.dryRun === 'undefined') {
|
|
103
|
+
options.dryRun = process.env.NODE_ENV === 'UNIT';
|
|
104
|
+
}
|
|
105
|
+
const { mode, dependentName, args, packageFolderName, packageName } = await getOptions();
|
|
106
|
+
let command = mode === 'dependent'
|
|
107
|
+
? `npx pnpm add --filter ${packageName} ${dependentName} ${args.join(' ')}`
|
|
108
|
+
: `npx pnpm link ./${workspace}/${packageFolderName}`;
|
|
109
|
+
if (options.dryRun)
|
|
110
|
+
return Shell.spawn(`echo "${command}"`);
|
|
111
|
+
const spinner = ora(`${command}\n`).start();
|
|
112
|
+
if (mode === 'package') {
|
|
113
|
+
let dir = resolve(packageDir);
|
|
114
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/README.md`, '// TODO');
|
|
115
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/src/index.ts`, '// TODO');
|
|
116
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/__tests__/index.spec.ts`, '// TODO');
|
|
117
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/package.json`, JSON.stringify({
|
|
118
|
+
name: packageName,
|
|
119
|
+
version: '1.0.0',
|
|
120
|
+
main: 'dist/index.cjs.js',
|
|
121
|
+
module: 'dist/index.es.js',
|
|
122
|
+
types: "dist/index.d.ts",
|
|
123
|
+
exports: {
|
|
124
|
+
".": {
|
|
125
|
+
import: "./dist/index.es.js",
|
|
126
|
+
require: "./dist/index.cjs.js",
|
|
127
|
+
types: "./dist/index.d.ts"
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
files: [
|
|
131
|
+
"dist"
|
|
132
|
+
],
|
|
133
|
+
license: 'MIT',
|
|
134
|
+
publishConfig: {
|
|
135
|
+
access: 'public'
|
|
136
|
+
},
|
|
137
|
+
dependencies: {}
|
|
138
|
+
}, null, 2));
|
|
139
|
+
fs.outputFileSync(`${dir}/${packageFolderName}/api-extractor.json`, JSON.stringify({
|
|
140
|
+
extends: "../../api-extractor.json",
|
|
141
|
+
mainEntryPointFilePath: `./dist/${workspace}/${packageFolderName}/src/index.d.ts`,
|
|
142
|
+
dtsRollup: {
|
|
143
|
+
publicTrimmedFilePath: "./dist/index.d.ts"
|
|
144
|
+
}
|
|
145
|
+
}, null, 2));
|
|
146
|
+
}
|
|
147
|
+
await Shell.spawn(command);
|
|
148
|
+
spinner.stop();
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
export { run };
|
package/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@deot/dev-adder",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"main": "dist/index.es.js",
|
|
5
|
+
"module": "dist/index.es.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@deot/dev-extract": "^1.1.0",
|
|
17
|
+
"@deot/dev-shared": "^1.1.0"
|
|
18
|
+
}
|
|
19
|
+
}
|