1- /* eslint-disable @typescript-eslint/no-require-imports */
2- /* eslint-disable no-undef */
3- const fs = require ( "fs" ) ;
4- const JSZip = require ( "jszip" ) ;
5- const ChromeExtension = require ( "crx" ) ;
6- const { execSync } = require ( "child_process" ) ;
7- const semver = require ( "semver" ) ;
8- const manifest = require ( "../src/manifest .json" ) ;
9- const package = require ( "../package.json" ) ;
1+ /* global process */
2+ import { promises as fs } from "fs" ;
3+ import { createWriteStream } from "fs" ;
4+ import JSZip from "jszip" ;
5+ import ChromeExtension from "crx" ;
6+ import { execSync } from "child_process" ;
7+ import manifest from "../src/manifest.json" with { type : "json" } ;
8+ import packageInfo from "../package .json" with { type : "json" } ;
9+ import semver from "semver" ;
1010
1111// 判断是否为beta版本
12- const version = semver . parse ( package . version ) ;
12+ const version = semver . parse ( packageInfo . version ) ;
1313if ( version . prerelease . length ) {
1414 // 替换manifest中的版本
1515 let betaVersion = 1000 ;
@@ -25,27 +25,27 @@ if (version.prerelease.length) {
2525 default :
2626 throw new Error ( "未知的版本类型" ) ;
2727 }
28- manifest . version = `${ version . major . toString ( ) } .${ version . minor . toString ( ) } .${ version . patch . toString ( ) } .${ betaVersion . toString ( ) } ` ;
28+ manifest . version = `${ version . major } .${ version . minor } .${ version . patch } .${ betaVersion } ` ;
2929 manifest . name = `__MSG_scriptcat_beta__` ;
3030} else {
3131 manifest . name = `__MSG_scriptcat__` ;
32- manifest . version = package . version ;
32+ manifest . version = packageInfo . version ;
3333}
3434
3535// 处理manifest version
36- let str = fs . readFileSync ( "./src/manifest.json" ) . toString ( ) ;
36+ let str = ( await fs . readFile ( "./src/manifest.json" , { encoding : "utf8" } ) ) . toString ( ) ;
3737str = str . replace ( / " v e r s i o n " : " ( .* ?) " / , `"version": "${ manifest . version } "` ) ;
38- fs . writeFileSync ( "./src/manifest.json" , str ) ;
38+ await fs . writeFile ( "./src/manifest.json" , str ) ;
3939
4040// 处理configSystem version
41- let configSystem = fs . readFileSync ( "./src/app/const.ts" ) . toString ( ) ;
41+ let configSystem = ( await fs . readFile ( "./src/app/const.ts" , { encoding : "utf8" } ) ) . toString ( ) ;
4242// 如果是由github action的分支触发的构建,在版本中再加上commit id
4343if ( process . env . GITHUB_REF_TYPE === "branch" ) {
4444 configSystem = configSystem . replace (
4545 "ExtVersion = version;" ,
4646 `ExtVersion = \`\${version}+${ process . env . GITHUB_SHA . substring ( 0 , 7 ) } \`;`
4747 ) ;
48- fs . writeFileSync ( "./src/app/const.ts" , configSystem ) ;
48+ await fs . writeFile ( "./src/app/const.ts" , configSystem ) ;
4949}
5050
5151execSync ( "npm run build" , { stdio : "inherit" } ) ;
@@ -70,30 +70,35 @@ firefoxManifest.browser_specific_settings = {
7070const chrome = new JSZip ( ) ;
7171const firefox = new JSZip ( ) ;
7272
73- function addDir ( zip , localDir , toDir , filters ) {
74- const files = fs . readdirSync ( localDir ) ;
75- files . forEach ( ( file ) => {
76- const localPath = `${ localDir } /${ file } ` ;
77- const toPath = `${ toDir } ${ file } ` ;
78- const stats = fs . statSync ( localPath ) ;
79- if ( stats . isDirectory ( ) ) {
80- addDir ( zip , localPath , `${ toPath } /` , filters ) ;
81- } else {
82- if ( filters && filters . includes ( file ) ) {
83- return ;
73+ async function addDir ( zip , localDir , toDir , filters ) {
74+ const sub = async ( localDir , toDir ) => {
75+ const files = await fs . readdir ( localDir ) ;
76+ for ( const file of files ) {
77+ if ( filters ?. includes ( file ) ) {
78+ continue ;
79+ }
80+ const localPath = `${ localDir } /${ file } ` ;
81+ const toPath = `${ toDir } ${ file } ` ;
82+ const stats = await fs . stat ( localPath ) ;
83+ if ( stats . isDirectory ( ) ) {
84+ sub ( localPath , `${ toPath } /` ) ;
85+ } else {
86+ zip . file ( toPath , await fs . readFile ( localPath ) ) ;
8487 }
85- zip . file ( toPath , fs . readFileSync ( localPath ) ) ;
8688 }
87- } ) ;
89+ } ;
90+ await sub ( localDir , toDir ) ;
8891}
8992
9093chrome . file ( "manifest.json" , JSON . stringify ( chromeManifest ) ) ;
9194firefox . file ( "manifest.json" , JSON . stringify ( firefoxManifest ) ) ;
9295
93- addDir ( chrome , "./dist/ext" , "" , [ "manifest.json" ] ) ;
94- addDir ( firefox , "./dist/ext" , "" , [ "manifest.json" , "ts.worker.js" ] ) ;
96+ await Promise . all ( [
97+ addDir ( chrome , "./dist/ext" , "" , [ "manifest.json" ] ) ,
98+ addDir ( firefox , "./dist/ext" , "" , [ "manifest.json" , "ts.worker.js" ] ) ,
99+ ] ) ;
95100// 添加ts.worker.js名字为gz
96- firefox . file ( "src/ts.worker.js.gz" , fs . readFileSync ( "./dist/ext/src/ts.worker.js" ) ) ;
101+ firefox . file ( "src/ts.worker.js.gz" , await fs . readFile ( "./dist/ext/src/ts.worker.js" , { encoding : "utf8" } ) ) ;
97102
98103// 导出zip包
99104chrome
@@ -102,27 +107,25 @@ chrome
102107 streamFiles : true ,
103108 compression : "DEFLATE" ,
104109 } )
105- . pipe ( fs . createWriteStream ( `./dist/${ package . name } -v${ package . version } -chrome.zip` ) ) ;
110+ . pipe ( createWriteStream ( `./dist/${ packageInfo . name } -v${ packageInfo . version } -chrome.zip` ) ) ;
106111
107112// firefox
108113// .generateNodeStream({
109114// type: "nodebuffer",
110115// streamFiles: true,
111116// compression: "DEFLATE",
112117// })
113- // .pipe(fs. createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`));
118+ // .pipe(createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`));
114119
115120// 处理crx
116121const crx = new ChromeExtension ( {
117- privateKey : fs . readFileSync ( "./dist/scriptcat.pem" ) ,
122+ privateKey : await fs . readFile ( "./dist/scriptcat.pem" , { encoding : "utf8" } ) ,
118123} ) ;
119124
120- crx
125+ await crx
121126 . load ( "./dist/ext" )
122127 . then ( ( crxFile ) => crxFile . pack ( ) )
123- . then ( ( crxBuffer ) => {
124- fs . writeFileSync ( `./dist/${ package . name } -v${ package . version } -chrome.crx` , crxBuffer ) ;
125- } )
128+ . then ( ( crxBuffer ) => fs . writeFile ( `./dist/${ packageInfo . name } -v${ packageInfo . version } -chrome.crx` , crxBuffer ) )
126129 . catch ( ( err ) => {
127130 console . error ( err ) ;
128131 } ) ;
0 commit comments