@rexnow/rslib-plugin 3.1.1 → 3.1.2

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.
@@ -2,4 +2,7 @@ import type { SourceFile } from "ts-morph";
2
2
  /**
3
3
  * 生成弹幕模块接口
4
4
  */
5
- export declare function generateDanmuModuleInterfaces(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule): void;
5
+ export declare function generateDanmuModuleInterfaces(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule, typeNames?: {
6
+ paramsTypeName: string;
7
+ returnTypeName: string;
8
+ }): void;
@@ -1,2 +1,5 @@
1
1
  import type { SourceFile } from "ts-morph";
2
- export declare function generateStreamModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule): void;
2
+ export declare function generateStreamModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule, typeNames?: {
3
+ paramsTypeName: string;
4
+ returnTypeName: string;
5
+ }): void;
@@ -1,2 +1,5 @@
1
1
  import type { SourceFile } from "ts-morph";
2
- export declare function generateSubtitleModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule): void;
2
+ export declare function generateSubtitleModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule, typeNames?: {
3
+ paramsTypeName: string;
4
+ returnTypeName: string;
5
+ }): void;
@@ -2,4 +2,7 @@ import type { SourceFile } from 'ts-morph';
2
2
  /**
3
3
  * 生成 Video 模块接口
4
4
  */
5
- export declare function generateVideoModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule): void;
5
+ export declare function generateVideoModuleInterface(nameSpaceName: string, sourceFile: SourceFile, module: WidgetModule, typeNames?: {
6
+ paramsTypeName: string;
7
+ returnTypeName: string;
8
+ }): void;
package/dist/index.js CHANGED
@@ -6225,9 +6225,9 @@ function generateParamType(param) {
6225
6225
  ]
6226
6226
  };
6227
6227
  }
6228
- function generateTypeName(module) {
6229
- const paramsTypeName = toPascalCase(`${module.functionName}Params`);
6230
- const returnTypeName = toPascalCase(`${module.functionName}ReturnType`);
6228
+ function generateTypeName(module, distinct = false) {
6229
+ const paramsTypeName = distinct ? `${toPascalCase(module.id)}${toPascalCase(module.functionName)}Params` : toPascalCase(`${module.functionName}Params`);
6230
+ const returnTypeName = distinct ? `${toPascalCase(module.id)}${toPascalCase(module.functionName)}ReturnType` : toPascalCase(`${module.functionName}ReturnType`);
6231
6231
  return {
6232
6232
  paramsTypeName,
6233
6233
  returnTypeName
@@ -6271,10 +6271,10 @@ function getReturnTypeExtends(moduleId) {
6271
6271
  return;
6272
6272
  }
6273
6273
  }
6274
- function generateDanmuModuleInterfaces(nameSpaceName, sourceFile, module) {
6274
+ function generateDanmuModuleInterfaces(nameSpaceName, sourceFile, module, typeNames = generateTypeName(module)) {
6275
6275
  if ("danmu" !== module.type) return;
6276
6276
  const { id, title } = module;
6277
- const { paramsTypeName, returnTypeName } = generateTypeName(module);
6277
+ const { paramsTypeName, returnTypeName } = typeNames;
6278
6278
  sourceFile.addInterface({
6279
6279
  name: paramsTypeName,
6280
6280
  docs: [
@@ -6300,10 +6300,9 @@ function generateDanmuModuleInterfaces(nameSpaceName, sourceFile, module) {
6300
6300
  }
6301
6301
  ] : []
6302
6302
  });
6303
- generateModuleFunctionType(sourceFile, module);
6304
6303
  }
6305
- function generateStreamModuleInterface(nameSpaceName, sourceFile, module) {
6306
- const { paramsTypeName, returnTypeName } = generateTypeName(module);
6304
+ function generateStreamModuleInterface(nameSpaceName, sourceFile, module, typeNames = generateTypeName(module)) {
6305
+ const { paramsTypeName, returnTypeName } = typeNames;
6307
6306
  sourceFile.addInterface({
6308
6307
  name: paramsTypeName,
6309
6308
  docs: [
@@ -6330,10 +6329,9 @@ function generateStreamModuleInterface(nameSpaceName, sourceFile, module) {
6330
6329
  if ("loadResource" === module.id) writer.write("Array<StreamSourceItem>");
6331
6330
  }
6332
6331
  });
6333
- generateModuleFunctionType(sourceFile, module);
6334
6332
  }
6335
- function generateSubtitleModuleInterface(nameSpaceName, sourceFile, module) {
6336
- const { paramsTypeName, returnTypeName } = generateTypeName(module);
6333
+ function generateSubtitleModuleInterface(nameSpaceName, sourceFile, module, typeNames = generateTypeName(module)) {
6334
+ const { paramsTypeName, returnTypeName } = typeNames;
6337
6335
  sourceFile.addInterface({
6338
6336
  name: paramsTypeName,
6339
6337
  docs: [
@@ -6360,10 +6358,9 @@ function generateSubtitleModuleInterface(nameSpaceName, sourceFile, module) {
6360
6358
  if ("loadSubtitle" === module.id) writer.write("Array<SubtitleItem>");
6361
6359
  }
6362
6360
  });
6363
- generateModuleFunctionType(sourceFile, module);
6364
6361
  }
6365
- function generateVideoModuleInterface(nameSpaceName, sourceFile, module) {
6366
- const { paramsTypeName, returnTypeName } = generateTypeName(module);
6362
+ function generateVideoModuleInterface(nameSpaceName, sourceFile, module, typeNames = generateTypeName(module)) {
6363
+ const { paramsTypeName, returnTypeName } = typeNames;
6367
6364
  sourceFile.addInterface({
6368
6365
  name: paramsTypeName,
6369
6366
  docs: [
@@ -6389,7 +6386,6 @@ function generateVideoModuleInterface(nameSpaceName, sourceFile, module) {
6389
6386
  'Array<VideoItem>'
6390
6387
  ]
6391
6388
  });
6392
- generateModuleFunctionType(sourceFile, module);
6393
6389
  }
6394
6390
  function toExecutableWidgetMetadataSource(content) {
6395
6391
  return content.replace(/\b(?:export\s+)?(?:const|let|var)\s+WidgetMetadata\b/g, 'WidgetMetadata');
@@ -6428,7 +6424,8 @@ function generateFunctionTypesFactory(api, sourceFile) {
6428
6424
  if (!widgetMetadataObject) return;
6429
6425
  const nameSpaceName = upperFirst(camelCase(widgetMetadataObject.id));
6430
6426
  const nameSpace = sourceFile.addModule({
6431
- name: nameSpaceName
6427
+ name: nameSpaceName,
6428
+ hasDeclareKeyword: true
6432
6429
  });
6433
6430
  nameSpace.addInterface({
6434
6431
  name: "GlobalParams",
@@ -6441,25 +6438,49 @@ function generateFunctionTypesFactory(api, sourceFile) {
6441
6438
  };
6442
6439
  }
6443
6440
  function generateModuleInterfaces(nameSpaceName, sourceFile, modules) {
6441
+ const modulesByFunctionName = new Map();
6442
+ for (const module of modules){
6443
+ const group = modulesByFunctionName.get(module.functionName);
6444
+ if (group) group.push(module);
6445
+ else modulesByFunctionName.set(module.functionName, [
6446
+ module
6447
+ ]);
6448
+ }
6444
6449
  for (const module of modules){
6445
6450
  const { id, type: moduleType } = module;
6451
+ const shared = (modulesByFunctionName.get(module.functionName)?.length ?? 0) > 1;
6452
+ const typeNames = generateTypeName(module, shared);
6446
6453
  sourceFile.addStatements(`\n//#region ${id}`);
6447
6454
  switch(moduleType){
6448
6455
  case "danmu":
6449
- generateDanmuModuleInterfaces(nameSpaceName, sourceFile, module);
6456
+ generateDanmuModuleInterfaces(nameSpaceName, sourceFile, module, typeNames);
6450
6457
  break;
6451
6458
  case "stream":
6452
- generateStreamModuleInterface(nameSpaceName, sourceFile, module);
6459
+ generateStreamModuleInterface(nameSpaceName, sourceFile, module, typeNames);
6453
6460
  break;
6454
6461
  case "subtitle":
6455
- generateSubtitleModuleInterface(nameSpaceName, sourceFile, module);
6462
+ generateSubtitleModuleInterface(nameSpaceName, sourceFile, module, typeNames);
6456
6463
  break;
6457
6464
  default:
6458
- generateVideoModuleInterface(nameSpaceName, sourceFile, module);
6465
+ generateVideoModuleInterface(nameSpaceName, sourceFile, module, typeNames);
6459
6466
  break;
6460
6467
  }
6468
+ if (!shared) generateModuleFunctionType(sourceFile, module);
6461
6469
  sourceFile.addStatements(`//#endregion ${id}`);
6462
6470
  }
6471
+ for (const group of modulesByFunctionName.values()){
6472
+ if (group.length < 2) continue;
6473
+ const { paramsTypeName, returnTypeName } = generateTypeName(group[0]);
6474
+ sourceFile.addTypeAlias({
6475
+ name: paramsTypeName,
6476
+ type: group.map((module)=>generateTypeName(module, true).paramsTypeName).join(" | ")
6477
+ });
6478
+ sourceFile.addTypeAlias({
6479
+ name: returnTypeName,
6480
+ type: group.map((module)=>generateTypeName(module, true).returnTypeName).join(" | ")
6481
+ });
6482
+ generateModuleFunctionType(sourceFile, group[0]);
6483
+ }
6463
6484
  }
6464
6485
  async function clearExportDeclaration(distPath) {
6465
6486
  if (!node_fs.existsSync(distPath)) return;
@@ -7,7 +7,7 @@ export declare const toPascalCase: (str: string) => string;
7
7
  * 生成参数类型
8
8
  */
9
9
  export declare function generateParamType(param: WidgetModuleParam): OptionalKind<PropertySignatureStructure>;
10
- export declare function generateTypeName(module: WidgetModule): {
10
+ export declare function generateTypeName(module: WidgetModule, distinct?: boolean): {
11
11
  paramsTypeName: string;
12
12
  returnTypeName: string;
13
13
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rexnow/rslib-plugin",
3
- "version": "3.1.1",
3
+ "version": "3.1.2",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -17,7 +17,7 @@
17
17
  "provenance": true
18
18
  },
19
19
  "devDependencies": {
20
- "@rexnow/libs": "3.1.1",
20
+ "@rexnow/libs": "3.1.2",
21
21
  "@rsbuild/core": "^2.2.5",
22
22
  "@rslib/core": "^1.0.0",
23
23
  "@rstest/adapter-rslib": "^0.11.12",