@widget-js/cli 1.2.7 → 1.2.9

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.
@@ -1,23 +1,31 @@
1
+ // src/utils/PrettierUtils.ts
2
+ import { format } from "prettier";
3
+ var PrettierUtils = class {
4
+ static async format(code, parser) {
5
+ return format(code, {
6
+ parser,
7
+ tabWidth: 2,
8
+ singleQuote: true
9
+ });
10
+ }
11
+ };
12
+
1
13
  // src/utils/EJSUtils.ts
2
14
  import path from "path";
3
15
  import fs from "fs";
4
16
  import ejs from "ejs";
5
- import prettier from "prettier";
6
17
  import { dirname } from "dirname-filename-esm";
7
18
  var EJSUtils = class {
8
- static renderToFile(templateFile, outputFile, parser, renderOptions) {
19
+ static async renderToFile(templateFile, outputFile, parser, renderOptions) {
9
20
  const defineTemplatePath = path.join(dirname(import.meta), "../template", templateFile);
10
21
  let defineTemplate = fs.readFileSync(defineTemplatePath, "utf8");
11
22
  let code = ejs.render(defineTemplate, renderOptions);
12
- const formattedEJSCode = prettier.format(code, {
13
- parser,
14
- tabWidth: 2,
15
- singleQuote: true
16
- });
23
+ const formattedEJSCode = await PrettierUtils.format(code, parser);
17
24
  fs.writeFileSync(outputFile, formattedEJSCode);
18
25
  }
19
26
  };
20
27
 
21
28
  export {
29
+ PrettierUtils,
22
30
  EJSUtils
23
31
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  EJSUtils
3
- } from "./chunk-36QWOCKO.js";
3
+ } from "./chunk-PCGVPLNI.js";
4
4
  import {
5
5
  promptChecker_default
6
6
  } from "./chunk-3GPAHQ6O.js";
@@ -164,12 +164,12 @@ async function createWidget() {
164
164
  const widgetFile = path.resolve(widgetDir, `${name}Widget.vue`);
165
165
  const widgetViewFile = path.resolve(widgetDir, `${name}WidgetView.vue`);
166
166
  const widgetRoutesFile = path.resolve(widgetDir, `${name}WidgetRoutes.ts`);
167
- EJSUtils.renderToFile("WidgetDefine.ejs", widgetDefineFile, "typescript", renderOptions);
168
- EJSUtils.renderToFile("WidgetView.ejs", widgetViewFile, "vue", renderOptions);
169
- EJSUtils.renderToFile("WidgetRoutes.ejs", widgetRoutesFile, "typescript", renderOptions);
167
+ await EJSUtils.renderToFile("WidgetDefine.ejs", widgetDefineFile, "typescript", renderOptions);
168
+ await EJSUtils.renderToFile("WidgetView.ejs", widgetViewFile, "vue", renderOptions);
169
+ await EJSUtils.renderToFile("WidgetRoutes.ejs", widgetRoutesFile, "typescript", renderOptions);
170
170
  if (configurable) {
171
171
  const configFile = path.resolve(widgetDir, `${name}ConfigView.vue`);
172
- EJSUtils.renderToFile("WidgetConfig.ejs", configFile, "vue", renderOptions);
172
+ await EJSUtils.renderToFile("WidgetConfig.ejs", configFile, "vue", renderOptions);
173
173
  }
174
174
  const routeFile = path.join(widgetFolder, "widget-router.ts");
175
175
  let routeContent;
package/lib/index.js CHANGED
@@ -11,7 +11,7 @@ var cliPackage = JSON.parse(fs.readFileSync(packageJsonPath).toString());
11
11
  console.log(gradient.pastel.multiline(figlet.textSync("widget-cli", { horizontalLayout: "full" })));
12
12
  program.version(`@widget-js/cli ${cliPackage.version}`).usage("<command> [options]");
13
13
  program.command("create").description("Create new widget").action(async () => {
14
- const createWidget = await import("./createWidget-UCZL7NIF.js");
14
+ const createWidget = await import("./createWidget-MZL6DPP2.js");
15
15
  await createWidget.default();
16
16
  });
17
17
  var dependenciesOption = new Option("-t, --type <type>").choices(["remote", "local"]);
@@ -20,7 +20,7 @@ program.command("dependencies").description("Set @widget-js dependencies to loca
20
20
  await dependencies.default(options);
21
21
  });
22
22
  program.command("init").description("Initialize widget-js project").action(async () => {
23
- const init = await import("./init-2NOIC3PQ.js");
23
+ const init = await import("./init-FUMP334Y.js");
24
24
  await init.init();
25
25
  });
26
26
  var typeOption = new Option("-t, --type <type>").choices(["ftp", "oss"]);
@@ -1,6 +1,7 @@
1
1
  import {
2
- EJSUtils
3
- } from "./chunk-36QWOCKO.js";
2
+ EJSUtils,
3
+ PrettierUtils
4
+ } from "./chunk-PCGVPLNI.js";
4
5
  import {
5
6
  promptChecker_default
6
7
  } from "./chunk-3GPAHQ6O.js";
@@ -25,23 +26,24 @@ async function addWidgetTs() {
25
26
  {
26
27
  type: "input",
27
28
  name: "name",
28
- message: chalk.blue("\u8BF7\u8F93\u5165\u7EC4\u4EF6\u5305\u540D(\u4E00\u822C\u4E3A\u5012\u7F6E\u57DF\u540D\u3001\u53EA\u80FD\u5C0F\u5199\u5B57\u6BCD)\uFF0C\u5982\uFF1Acn.widget.countdown")
29
+ message: chalk.blue("\u7EC4\u4EF6\u5305\u540D \uFF08\u793A\u4F8B cn.widget.countdown\uFF09\uFF1A")
29
30
  },
30
31
  (answer) => {
31
32
  const name2 = answer.name;
32
33
  if (name2 == null || name2 === "") {
33
- consola.log(chalk.red("\u5305\u540D\u4E0D\u80FD\u4E3A\u7A7A"));
34
+ consola.log(chalk.red(`\u7EC4\u4EF6\u5305\u540D\u4E0D\u80FD\u4E3A\u7A7A`));
34
35
  return false;
35
36
  }
36
37
  return true;
37
38
  }
38
39
  );
39
- let widgetTs = path.join(process.cwd(), "widget.ts");
40
+ let widgetTs = path.join(process.cwd(), "widget.package.ts");
40
41
  if (!fs.existsSync(widgetTs)) {
41
- spinner.info("creating widget.ts");
42
- EJSUtils.renderToFile("WidgetPackage.ejs", widgetTs, "typescript", { name });
43
- spinner.succeed("Done! Be sure to replace the contents of widget.ts with your own.");
42
+ spinner.info("creating widget.package.ts");
43
+ await EJSUtils.renderToFile("WidgetPackage.ejs", widgetTs, "typescript", { name });
44
44
  }
45
+ await addVitePlugin();
46
+ spinner.succeed("Done! Be sure to replace the contents of widget.package.ts with your own.");
45
47
  }
46
48
  async function addDependencies() {
47
49
  spinner.info("Adding dependencies");
@@ -61,6 +63,19 @@ async function addDependencies() {
61
63
  packageJson["devDependencies"] = devDependencies;
62
64
  fs.writeFileSync(Utils.getPackagePath(), JSON.stringify(packageJson, null, 2));
63
65
  }
66
+ async function addVitePlugin() {
67
+ spinner.info("Adding vite plugin");
68
+ const viteConfigPath = path.join(process.cwd(), "vite.config.ts");
69
+ if (!fs.existsSync(viteConfigPath)) {
70
+ spinner.warn("vite.config.ts not exists");
71
+ return;
72
+ }
73
+ let viteConfig = fs.readFileSync(viteConfigPath).toString();
74
+ viteConfig = viteConfig.replace("import", `import widget from '@widget-js/vite-plugin-widget'
75
+ import`);
76
+ viteConfig = viteConfig.replace("vue()", `vue(),widget()`);
77
+ fs.writeFileSync(viteConfigPath, await PrettierUtils.format(viteConfig, "typescript"));
78
+ }
64
79
  async function addDependency(packageName, dependencies) {
65
80
  spinner.info(`Adding dependencies ${packageName}`);
66
81
  if (dependencies[packageName]) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@widget-js/cli",
3
- "version": "1.2.7",
3
+ "version": "1.2.9",
4
4
  "main": "lib/index.js",
5
5
  "author": "Neo Fu",
6
6
  "license": "MIT",
@@ -34,11 +34,12 @@
34
34
  "minimatch": "^9.0.3",
35
35
  "ora": "^6.2.0",
36
36
  "package-json": "^8.1.0",
37
- "prettier": "^2.8.8",
37
+ "prettier": "^3.1.1",
38
38
  "semver": "^7.3.8",
39
39
  "shelljs": "^0.8.5",
40
40
  "ssh2-sftp-client": "^9.1.0",
41
41
  "ws": "^8.11.0",
42
+ "@widget-js/core": "^0.11.20",
42
43
  "@widget-js/utils": "0.10.21"
43
44
  },
44
45
  "devDependencies": {
@@ -64,7 +65,7 @@
64
65
  "webpack": "^5.75.0",
65
66
  "webpack-cli": "^5.0.0",
66
67
  "@widget-js/vue3": "^0.11.20",
67
- "@widget-js/core": "0.11.20"
68
+ "@widget-js/core": "0.11.21"
68
69
  },
69
70
  "scripts": {
70
71
  "build": "rimraf ./lib/ && tsup-node src/index.ts --format esm",
@@ -192,13 +192,13 @@ export default async function createWidget() {
192
192
  const widgetViewFile = path.resolve(widgetDir, `${name}WidgetView.vue`)
193
193
  const widgetRoutesFile = path.resolve(widgetDir, `${name}WidgetRoutes.ts`)
194
194
 
195
- EJSUtils.renderToFile('WidgetDefine.ejs', widgetDefineFile, 'typescript', renderOptions)
195
+ await EJSUtils.renderToFile('WidgetDefine.ejs', widgetDefineFile, 'typescript', renderOptions)
196
196
  // EJSUtils.renderToFile('Widget.ejs', widgetFile, 'vue', renderOptions)
197
- EJSUtils.renderToFile('WidgetView.ejs', widgetViewFile, 'vue', renderOptions)
198
- EJSUtils.renderToFile('WidgetRoutes.ejs', widgetRoutesFile, 'typescript', renderOptions)
197
+ await EJSUtils.renderToFile('WidgetView.ejs', widgetViewFile, 'vue', renderOptions)
198
+ await EJSUtils.renderToFile('WidgetRoutes.ejs', widgetRoutesFile, 'typescript', renderOptions)
199
199
  if (configurable) {
200
200
  const configFile = path.resolve(widgetDir, `${name}ConfigView.vue`)
201
- EJSUtils.renderToFile('WidgetConfig.ejs', configFile, 'vue', renderOptions)
201
+ await EJSUtils.renderToFile('WidgetConfig.ejs', configFile, 'vue', renderOptions)
202
202
  }
203
203
  // 注册路由
204
204
  const routeFile = path.join(widgetFolder, 'widget-router.ts')
package/src/init/init.ts CHANGED
@@ -1,76 +1,93 @@
1
- import {Utils} from "../utils";
2
- import path from "path";
3
- import process from "process";
4
- import fs from "fs";
5
- import consola from "consola";
6
- import promptChecker from "../promts/promptChecker";
7
- import chalk from "chalk";
8
- import {EJSUtils} from "../utils/EJSUtils";
9
- import ora from "ora";
10
- const spinner = ora("Loading");
11
-
12
- export async function init() {
13
- await addDependencies();
14
- await addWidgetTs();
15
- }
16
-
17
- async function addWidgetTs() {
18
- let name = await promptChecker(
19
- {
20
- type: 'input',
21
- name: 'name',
22
- message: chalk.blue('请输入组件包名(一般为倒置域名、只能小写字母),如:cn.widget.countdown'),
23
- },
24
- answer => {
25
- const name = answer.name
26
- if (name == null || name === '') {
27
- consola.log(chalk.red('包名不能为空'))
28
- return false
29
- }
30
- return true
31
- },
32
- )
33
-
34
- let widgetTs = path.join(process.cwd(), "widget.ts");
35
- if (!fs.existsSync(widgetTs)) {
36
- spinner.info('creating widget.ts')
37
- EJSUtils.renderToFile('WidgetPackage.ejs', widgetTs, 'typescript', {name})
38
- spinner.succeed('Done! Be sure to replace the contents of widget.ts with your own.')
39
- }
40
- }
41
-
42
- /**
43
- * 增加widget-js依赖
44
- */
45
- async function addDependencies() {
46
- spinner.info("Adding dependencies")
47
- const packageJson = Utils.getPackageJson();
48
- let dependencies = packageJson["dependencies"];
49
- let devDependencies = packageJson["devDependencies"];
50
- if (!dependencies) {
51
- dependencies = {};
52
- }
53
- if (!devDependencies) {
54
- packageJson["devDependencies"] = {};
55
- }
56
-
57
- await addDependency('@widget-js/core', dependencies)
58
- await addDependency('@widget-js/vue3', dependencies)
59
- await addDependency('@widget-js/vite-plugin-widget', devDependencies)
60
-
61
- packageJson["dependencies"] = dependencies;
62
- packageJson["devDependencies"] = devDependencies;
63
-
64
- fs.writeFileSync(Utils.getPackagePath(), JSON.stringify(packageJson, null, 2));
65
- }
66
-
67
-
68
- async function addDependency(packageName: string, dependencies: any) {
69
- spinner.info(`Adding dependencies ${packageName}`)
70
- if (dependencies[packageName]) {
71
- return;
72
- }
73
- const remoteVersion = await Utils.getRemoteVersion(packageName);
74
- dependencies[packageName] = `^${remoteVersion}`;
75
- }
76
-
1
+ import {Utils} from '../utils'
2
+ import path from 'path'
3
+ import process from 'process'
4
+ import fs from 'fs'
5
+ import consola from 'consola'
6
+ import promptChecker from '../promts/promptChecker'
7
+ import chalk from 'chalk'
8
+ import {EJSUtils} from '../utils/EJSUtils'
9
+ import ora from 'ora'
10
+ import {vi} from 'vitest'
11
+ import {PrettierUtils} from '../utils/PrettierUtils'
12
+
13
+ const spinner = ora('Loading')
14
+
15
+ export async function init() {
16
+ await addDependencies()
17
+ await addWidgetTs()
18
+ }
19
+
20
+ async function addWidgetTs() {
21
+ let name = await promptChecker(
22
+ {
23
+ type: 'input',
24
+ name: 'name',
25
+ message: chalk.blue('组件包名 (示例 cn.widget.countdown):'),
26
+ },
27
+ answer => {
28
+ const name = answer.name
29
+ if (name == null || name === '') {
30
+ consola.log(chalk.red(`组件包名不能为空`))
31
+ return false
32
+ }
33
+ return true
34
+ },
35
+ )
36
+
37
+ let widgetTs = path.join(process.cwd(), 'widget.package.ts')
38
+ if (!fs.existsSync(widgetTs)) {
39
+ spinner.info('creating widget.package.ts')
40
+ await EJSUtils.renderToFile('WidgetPackage.ejs', widgetTs, 'typescript', {name})
41
+ }
42
+
43
+ await addVitePlugin()
44
+
45
+ spinner.succeed('Done! Be sure to replace the contents of widget.package.ts with your own.')
46
+ }
47
+
48
+ /**
49
+ * 增加widget-js依赖
50
+ */
51
+ async function addDependencies() {
52
+ spinner.info('Adding dependencies')
53
+ const packageJson = Utils.getPackageJson()
54
+ let dependencies = packageJson['dependencies']
55
+ let devDependencies = packageJson['devDependencies']
56
+ if (!dependencies) {
57
+ dependencies = {}
58
+ }
59
+ if (!devDependencies) {
60
+ packageJson['devDependencies'] = {}
61
+ }
62
+
63
+ await addDependency('@widget-js/core', dependencies)
64
+ await addDependency('@widget-js/vue3', dependencies)
65
+ await addDependency('@widget-js/vite-plugin-widget', devDependencies)
66
+
67
+ packageJson['dependencies'] = dependencies
68
+ packageJson['devDependencies'] = devDependencies
69
+
70
+ fs.writeFileSync(Utils.getPackagePath(), JSON.stringify(packageJson, null, 2))
71
+ }
72
+
73
+ async function addVitePlugin() {
74
+ spinner.info('Adding vite plugin')
75
+ const viteConfigPath = path.join(process.cwd(), 'vite.config.ts')
76
+ if (!fs.existsSync(viteConfigPath)) {
77
+ spinner.warn('vite.config.ts not exists')
78
+ return
79
+ }
80
+ let viteConfig = fs.readFileSync(viteConfigPath).toString()
81
+ viteConfig = viteConfig.replace('import', `import widget from '@widget-js/vite-plugin-widget'\nimport`)
82
+ viteConfig = viteConfig.replace('vue()', `vue(),widget()`)
83
+ fs.writeFileSync(viteConfigPath,await PrettierUtils.format(viteConfig, 'typescript'))
84
+ }
85
+
86
+ async function addDependency(packageName: string, dependencies: any) {
87
+ spinner.info(`Adding dependencies ${packageName}`)
88
+ if (dependencies[packageName]) {
89
+ return
90
+ }
91
+ const remoteVersion = await Utils.getRemoteVersion(packageName)
92
+ dependencies[packageName] = `^${remoteVersion}`
93
+ }
@@ -1,25 +1,17 @@
1
- import path from "path";
2
- import fs from "fs";
3
- import ejs, {Data} from "ejs";
4
- import prettier, {BuiltInParserName} from 'prettier'
5
- import { dirname } from 'dirname-filename-esm';
6
-
7
- export class EJSUtils{
8
- static renderToFile(
9
- templateFile: string,
10
- outputFile: string,
11
- parser: BuiltInParserName,
12
- renderOptions: Data,
13
- ) {
14
- const defineTemplatePath = path.join(dirname(import.meta),'../template', templateFile)
15
- let defineTemplate = fs.readFileSync(defineTemplatePath, 'utf8')
16
- // Format the EJS code using Prettier
17
- let code = ejs.render(defineTemplate, renderOptions)
18
- const formattedEJSCode = prettier.format(code, {
19
- parser: parser,
20
- tabWidth: 2,
21
- singleQuote: true,
22
- })
23
- fs.writeFileSync(outputFile, formattedEJSCode)
24
- }
25
- }
1
+ import path from 'path'
2
+ import fs from 'fs'
3
+ import ejs, {Data} from 'ejs'
4
+ import {BuiltInParserName} from 'prettier'
5
+ import {dirname} from 'dirname-filename-esm'
6
+ import {PrettierUtils} from './PrettierUtils'
7
+
8
+ export class EJSUtils {
9
+ static async renderToFile(templateFile: string, outputFile: string, parser: BuiltInParserName, renderOptions: Data) {
10
+ const defineTemplatePath = path.join(dirname(import.meta), '../template', templateFile)
11
+ let defineTemplate = fs.readFileSync(defineTemplatePath, 'utf8')
12
+ // Format the EJS code using Prettier
13
+ let code = ejs.render(defineTemplate, renderOptions)
14
+ const formattedEJSCode =await PrettierUtils.format(code,parser)
15
+ fs.writeFileSync(outputFile, formattedEJSCode)
16
+ }
17
+ }
@@ -0,0 +1,11 @@
1
+ import {BuiltInParserName, format} from 'prettier'
2
+
3
+ export class PrettierUtils {
4
+ static async format(code: string, parser: BuiltInParserName) {
5
+ return format(code, {
6
+ parser: parser,
7
+ tabWidth: 2,
8
+ singleQuote: true,
9
+ })
10
+ }
11
+ }
@@ -10,8 +10,6 @@ export default new WidgetPackage({
10
10
  hash: true,
11
11
  homepage: '',
12
12
  name: '<%= name %>',
13
- remoteEntry: '',
14
- remotePackage: '',
15
13
  title: {
16
14
  'zh-CN': '修改成你的组件标题',
17
15
  },
package/vite.config.ts ADDED
@@ -0,0 +1,14 @@
1
+ import { fileURLToPath, URL } from 'node:url';
2
+
3
+ import { defineConfig } from 'vite';
4
+ import vue from '@vitejs/plugin-vue';
5
+
6
+ // https://vitejs.dev/config/
7
+ export default defineConfig({
8
+ plugins: [vue()],
9
+ resolve: {
10
+ alias: {
11
+ '@': fileURLToPath(new URL('./src', import.meta.url)),
12
+ },
13
+ },
14
+ });
package/widget.package.ts DELETED
@@ -1,23 +0,0 @@
1
- import {WidgetPackage} from "@widget-js/core";
2
-
3
- export default new WidgetPackage({
4
- author: "Neo Fu",
5
- description: {
6
- "zh-CN": "包含知乎、B站、抖音、微博等平台的热搜组件。",
7
- },
8
- entry: "index.html",
9
- hash: true,
10
- homepage: "https://widgetjs.cn",
11
- name: "cn.widgetjs.widgets.hotspot",
12
- remoteEntry: "https://rtugeek.gitee.io/hotspot",
13
- remotePackage: "https://rtugeek.gitee.io/hotspot/widget.json",
14
- title: {
15
- "zh-CN": "全网热点组件",
16
- },
17
- version: "1.0.0",
18
- devOptions: {
19
- folder: "./src/widgets/",
20
- route: true,
21
- devUrl: "http://localhost:5173/hotspot"
22
- }
23
- });