{"version":3,"sources":["../src/package/initPackage.ts"],"names":["gitignore","copyFile","promisify","fs","initPackage","packageNameOrInfo","options","location","src","silent","git","typescript","dependencies","installTool","files","cwd","packageJson","path","packagePath","pkgFile","tsconfigFile","execScript","depend","packageName","dependencieType","hasError","installPackage","e","file","dest","vars","srcFile","destFile","destPath","srcContext","destContext","replaceVars"],"mappings":"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","file":"chunk-NKBQJFVP.mjs","sourcesContent":["/**\r\n * \r\n * 初始化包工程\r\n * \r\n */\r\n\r\nimport { execScript } from \"../misc\";\r\nimport path from \"node:path\"\r\nimport fs from \"node:fs\"\r\nimport { installPackage } from \"./installPackage\";\r\nimport { promisify } from \"../func/promisify\";\r\nimport { replaceVars } from \"../string\";\r\n\r\nconst gitignore = `\r\nnode_modules\r\nlogs\r\n*.log\r\n.idea\r\n.DS_Store\r\nnpm-debug.log*\r\nyarn-debug.log* \r\nyarn-error.log*\r\nlerna-debug.log*\r\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\r\n*.pid\r\n*.seed\r\n*.pid.lock\r\ncoverage \r\n.nyc_output\r\n.grunt\r\nbower_components\r\nnode_modules/\r\njspm_packages/\r\n*.tsbuildinfo\r\n.npm\r\ndist/\r\n.eslintcache\r\n`\r\n\r\nexport interface  PackageInfo{\r\n    name:string\r\n    version?:string\r\n    description?:string\r\n    author?:string\r\n    license?:string\r\n    main?:string\r\n    module?:string\r\n    types?:string\r\n    type?:\"module\" | \"commonjs\"\r\n    scripts?:Record<string,string>\r\n    dependencies?:Record<string,string>\r\n    devDependencies?:Record<string,string>\r\n    peerDependencies?:Record<string,string>\r\n    optionalDependencies?:Record<string,string>\r\n    bundledDependencies?:Record<string,string>\r\n    [key:string]:any\r\n}\r\nexport type DependencieType = 'dev' | 'prod' | 'peer' | 'optional'  | 'bundle'\r\nexport interface InitPackageOptions{\r\n    location?:string                                        // 初始化位置路径\r\n    src?:string                                             // 源文件路径,默认是当前目录\r\n    typescript?:boolean | string                            // 是否使用typescript,true=使用默认配置,字符串=tsconfig.json文件内容，\"file:tsconfig.json\"=使用指定的tsconfig.json文件\r\n    git?:boolean                                            // 是否初始化git              \r\n    dependencies?:(string | [string,DependencieType])[]     // 依赖包, [包名,依赖类型]\r\n    silent?:boolean                                         // 是否静默输出\r\n    // 安装依赖前的回调函数\r\n    onBeforeInstallDependent? :(packageName:string,installType:DependencieType)=>void\r\n    // 安装依赖后的回调函数\r\n    onAfterInstallDependent?:(error:null | Error,packageName:string,installType:DependencieType)=>void\r\n    installTool?: \"auto\" | \"npm\" | \"yarn\" | \"pnpm\"          // 包安装工具\r\n    // 需要复制的文件\r\n    // 源文件 , [源文件,目标文件或文件夹] , [源文件,目标文件,{插值变量}]\r\n    files?:(string | [string,string] | [string,string,Record<string,any>])[]                      \r\n    // 当复制文件后的回调函数\r\n    onBeforeCopyFile?:(src:string,desc:string)=>void\r\n    onAfterCopyFile?:(error:null | Error,src:string,desc:string)=>void\r\n}\r\n\r\nconst copyFile = promisify(fs.copyFile)\r\n\r\nexport async function initPackage(packageNameOrInfo:string | PackageInfo,options?:InitPackageOptions){        \r\n    let {location,src='src',silent=true,git=false,typescript=true,dependencies=[],installTool='pnpm',files=[]} = Object.assign({},options)\r\n    const cwd = process.cwd()\r\n    const packageJson = typeof(packageNameOrInfo) == \"string\" ? {\r\n        name:packageNameOrInfo,\r\n        verison:\"1.0.0\",\r\n    } : packageNameOrInfo\r\n    if(!packageJson.name || packageJson.name.trim()===\"\"){\r\n        throw new Error(\"package name is required\")\r\n    }\r\n    try{\r\n        if(typeof(location)!='string') location= cwd\r\n        if(!path.isAbsolute(location!)) location = path.join(cwd, location)\r\n        const packagePath = path.join(location!,packageJson.name)\r\n        if(!fs.existsSync(packagePath)){\r\n            fs.mkdirSync(packagePath,{recursive:true})\r\n        }\r\n        const pkgFile = path.join(packagePath,\"package.json\")\r\n        if(!fs.existsSync(pkgFile)){\r\n            fs.writeFileSync(pkgFile,JSON.stringify(packageJson,null,4),{encoding:\"utf-8\"})\r\n        }\r\n        process.chdir(packagePath)\r\n        // 初始化typescript\r\n        if(typescript){\r\n            if(typeof(typescript)==\"string\"){\r\n                if(typescript.startsWith(\"file:\")){\r\n                    const tsconfigFile = path.join(packagePath,typescript.substring(5))\r\n                    if(fs.existsSync(tsconfigFile)){\r\n                        fs.copyFileSync(tsconfigFile,path.join(packagePath,\"tsconfig.json\"))\r\n                    }else{\r\n                        await execScript(\"tsc --init\",{silent})\r\n                    }\r\n                }else{\r\n                    fs.writeFileSync(path.join(packagePath,\"tsconfig.json\"),typescript,{encoding:\"utf-8\"})\r\n                }\r\n            }else{\r\n                await execScript(\"tsc --init\",{silent})\r\n            }            \r\n        }\r\n        // 创建src目录\r\n        if(src){\r\n            fs.mkdirSync(path.join(packagePath,src),{recursive:true})            \r\n            fs.mkdirSync(path.join(packagePath,src,\"__tests__\"),{recursive:true})    \r\n        }\r\n        // 初始化git\r\n        if(git){\r\n            await execScript(\"git init\",{silent:true})\r\n            fs.writeFileSync(path.join(packagePath,\".gitignore\"),gitignore)\r\n        }\r\n        if(Array.isArray(dependencies)){\r\n            for(let depend of dependencies){\r\n                const [packageName,dependencieType] = (Array.isArray(depend) ? depend : [depend,\"prod\"]) as [string,DependencieType]\r\n                if(packageName){\r\n                    let hasError = null\r\n                    try{\r\n                        options?.onBeforeInstallDependent?.(packageName,dependencieType)\r\n                        await installPackage(packageName,{\r\n                            silent,\r\n                            use:installTool,\r\n                            location:packagePath,\r\n                            type:dependencieType,\r\n                            ignoreError:false\r\n                        })\r\n                    }catch(e:any){\r\n                        hasError = e\r\n                    }\r\n                    options?.onAfterInstallDependent?.(hasError,packageName,dependencieType)\r\n                }            \r\n            }\r\n        }\r\n        if(Array.isArray(files)){\r\n            for(let file of files){                \r\n                const [src,dest,vars] = Array.isArray(file) ? file : [file,\"./\",undefined]                \r\n                const srcFile =path.isAbsolute(src) ? src : path.join(cwd,src)                \r\n                const destFile = dest.trim().endsWith(\"/\") ? path.join(packagePath,dest.trim(),path.basename(srcFile)) : path.join(packagePath,dest.trim())\r\n                options?.onBeforeCopyFile?.(srcFile,destFile)\r\n                try{\r\n                    if(fs.existsSync(srcFile)){\r\n                        const destPath = path.dirname(destFile)\r\n                        if(!fs.existsSync(destPath)){\r\n                            fs.mkdirSync(destPath,{recursive:true})\r\n                        }                                   \r\n                        if(vars && typeof(vars)==\"object\"){ // 有插值变量时，需要读取文件内容，替换插值变量后再写入\r\n                            const srcContext = await promisify(fs.readFile)(srcFile)\r\n                            const destContext = replaceVars(srcContext.toString(),vars)\r\n                            await promisify(fs.writeFile)(destFile,destContext)\r\n                        }else{\r\n                            await copyFile(srcFile,destFile)\r\n                        }\r\n                    }\r\n                    options?.onAfterCopyFile?.(null,srcFile,destFile)\r\n                }catch(e:any){\r\n                    options?.onAfterCopyFile?.(e,srcFile,destFile)\r\n                }                \r\n                \r\n            }\r\n        }\r\n        return packageJson\r\n    }finally{\r\n        process.chdir(cwd)\r\n    }\r\n}\r\n\r\n\r\n// {a} {b}\r\n// const args = process.argv.slice(2)\r\n// initPackage({\r\n//     name:args[0],\r\n//     version:\"1.0.0\",\r\n// },{\r\n//     location:\"c://temp//initpackages\",\r\n//     dependencies:[\r\n//         \"nanoid\",\r\n//         [\"lodash\",'dev']\r\n//     ],\r\n//     files:[\r\n//         ['./index.ts','./src/index.ts'],\r\n//         'getPackageTool.ts',\r\n//         ['initPackage.ts','./',{a:111,b:222}],\r\n//     ],\r\n//     onBeforeInstallDependent(packageName,installType){\r\n//         console.log(`安装依赖包${packageName}(${installType})...`)\r\n//     },\r\n//     onAfterInstallDependent(error,packageName,installType){\r\n//         if(error){\r\n//             console.error(`安装依赖包${packageName}(${installType})失败,错误信息:${error.message}`)\r\n//         }else{\r\n//             console.log(`安装依赖包${packageName}(${installType})成功`)\r\n//         }\r\n//     },\r\n//     onBeforeCopyFile(src,desc){\r\n//         console.log(`复制文件${src}...`)\r\n//     },\r\n//     onAfterCopyFile(error,src,desc){\r\n//         if(error){\r\n//             console.error(`复制文件${src}失败,错误信息:${error.message}`)\r\n//         }else{\r\n//             console.log(`复制文件${src}成功`)\r\n//         }\r\n//     }\r\n// })\r\n"]}