gen.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. #!/usr/bin/env node
  2. const fs = require('fs');
  3. const path = require('path');
  4. async function main() {
  5. try {
  6. console.log('🚀 Starting to generate export files...');
  7. // 1. Get the package.json path of @coze-editor/editor package
  8. const packagePath = path.resolve(__dirname, '../node_modules/@coze-editor/editor/package.json');
  9. if (!fs.existsSync(packagePath)) {
  10. console.error('❌ @coze-editor/editor package not found, please run npm install first');
  11. process.exit(1);
  12. }
  13. // 2. Read package.json content
  14. const packageContent = fs.readFileSync(packagePath, 'utf8');
  15. const packageJson = JSON.parse(packageContent);
  16. if (!packageJson.exports) {
  17. console.error('❌ No exports field found in @coze-editor/editor package.json');
  18. process.exit(1);
  19. }
  20. console.log(`📦 Found ${Object.keys(packageJson.exports).length} export items`);
  21. // 3. Process each export item
  22. const exports = packageJson.exports;
  23. const srcDir = path.resolve(__dirname, '../src');
  24. // Ensure src directory exists
  25. if (!fs.existsSync(srcDir)) {
  26. fs.mkdirSync(srcDir, { recursive: true });
  27. }
  28. // Read current package.json
  29. const currentPackagePath = path.resolve(__dirname, '../package.json');
  30. const currentPackageContent = fs.readFileSync(currentPackagePath, 'utf8');
  31. const currentPackageJson = JSON.parse(currentPackageContent);
  32. let newExportsAdded = 0;
  33. for (const [exportPath, exportConfig] of Object.entries(exports)) {
  34. // Get export name (remove leading ./, root directory uses index)
  35. const exportName = exportPath === '.' ? 'index' : exportPath.replace(/^\.\//, '');
  36. // 3.1 Create corresponding .ts file
  37. const filePath = path.join(srcDir, `${exportName}.ts`);
  38. const contentParts = [];
  39. const baseImportPath =
  40. exportPath === '.' ? '@coze-editor/editor' : `@coze-editor/editor/${exportName}`;
  41. contentParts.push(`export * from '${baseImportPath}';`);
  42. // if is preset, add default export
  43. if (exportName.startsWith('preset')) {
  44. contentParts.push(`export { default } from '@coze-editor/editor/${exportName}';`);
  45. }
  46. const fileContent = contentParts.join('\n') + '\n';
  47. // Ensure directory exists (handle subdirectory case)
  48. const fileDir = path.dirname(filePath);
  49. if (!fs.existsSync(fileDir)) {
  50. fs.mkdirSync(fileDir, { recursive: true });
  51. }
  52. // Only create file when it doesn't exist
  53. if (!fs.existsSync(filePath)) {
  54. fs.writeFileSync(filePath, fileContent);
  55. console.log(`✅ Created file: ${path.relative(process.cwd(), filePath)}`);
  56. } else {
  57. console.log(`⏭️ File already exists: ${path.relative(process.cwd(), filePath)}`);
  58. }
  59. // 3.2 Update exports field in package.json
  60. const exportKey = exportName === 'index' ? '.' : `./${exportName}`;
  61. if (!currentPackageJson.exports[exportKey]) {
  62. currentPackageJson.exports[exportKey] = {
  63. types: `./dist/types/${exportName}.d.ts`,
  64. require: `./dist/cjs/${exportName}.js`,
  65. import: `./dist/esm/${exportName}.mjs`,
  66. };
  67. newExportsAdded++;
  68. console.log(`📝 Added export configuration: ${exportKey}`);
  69. } else {
  70. console.log(`⏭️ Export configuration already exists: ${exportKey}`);
  71. }
  72. }
  73. // Save updated package.json
  74. fs.writeFileSync(currentPackagePath, JSON.stringify(currentPackageJson, null, 2) + '\n');
  75. console.log(`\n🎉 Completed!`);
  76. console.log(`📁 Created ${Object.keys(exports).length} export files`);
  77. console.log(`📦 Added ${newExportsAdded} new export configurations`);
  78. console.log(`💡 Remember to run npm run build to build new exports`);
  79. } catch (error) {
  80. console.error('❌ Error occurred:', error.message);
  81. process.exit(1);
  82. }
  83. }
  84. // Run this script directly
  85. if (require.main === module) {
  86. main();
  87. }
  88. module.exports = { main };