@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 ADDED
@@ -0,0 +1,5 @@
1
+ # @deot/dev-adder
2
+
3
+ 可以添加包/依赖
4
+
5
+ - 使用`dependencies`,非`peerDependencies`。主要考虑仅安装`@deot/dev-adder`即可
@@ -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;
@@ -0,0 +1,5 @@
1
+ import type { Options } from '@deot/dev-shared';
2
+
3
+ export declare const run: (options: Options) => Promise<any>;
4
+
5
+ export { }
@@ -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
+ }