wbfy 1.71.4 → 1.71.6

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,8 +1,8 @@
1
- "use strict";var Ut=Object.create;var $e=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,Ht=Object.prototype.hasOwnProperty;var Yt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of zt(t))!Ht.call(e,a)&&a!==r&&$e(e,a,{get:()=>t[a],enumerable:!(n=Gt(t,a))||n.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Ut(Mt(e)):{},Yt(t||!e||!e.__esModule?$e(r,"default",{value:e,enumerable:!0}):r,e));var Wt=c(require("node:path")),It=c(require("glob")),Jt=c(require("yargs"));var G=c(require("node:fs")),q=c(require("node:path"));var ae=class{isVerbose;constructor(){this.isVerbose=!1}},j=new ae;var le=class{async function(t,r){j.isVerbose&&console.info(`--------- ${t} start ---------`),await r(),j.isVerbose&&console.info(`---------- ${t} end ----------`)}},u=new le;var Re=require("minimal-promise-pool"),p=new Re.PromisePool;var ce=c(require("node:child_process"));function v(e,t,r,n=0){do{let[a,i,s]=Te(e,t,r);if(console.log(`$ ${a} ${i.join(" ")} at ${s.cwd}`),ce.default.spawnSync(a,i,s).status===0)break}while(--n>=0)}function U(e,t,r){let[n,a,i]=Te(e,t,r);i.stdio="pipe";let s=ce.default.spawnSync(n,a,i),o=s.stderr.toString().trim();return o&&console.error(`${n} [${a.map(l=>`"${l}"`)}] caused the following error:
2
- ${o}`),s.stdout.toString().trim()}function Te(e,t,r){let n={...process.env};return n.PATH&&n.BERRY_BIN_FOLDER&&(n.PATH=n.PATH.replace(`${n.BERRY_BIN_FOLDER}:`,"")),n.ASDF_DIR&&(t=["-l","-c",`. ${n.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:r,env:n,shell:!1,stdio:"inherit"}]}async function je(e){return u.function("generateVersionConfigs",async()=>{await Kt(e)})}async function Kt(e){if(!e.versionsText)return;let t=[];for(let n of e.versionsText.trim().split(`
3
- `)){let a=n.trim();if(a&&a.split(/\s+/)[0]!=="nodejs"){t.push(a);continue}let[,i]=a.split(/\s+/);await p.run(()=>G.default.promises.writeFile(q.default.resolve(e.dirPath,".node-version"),i))}if(e.containingPoetryLock&&(K("poetry 1.2.2",0,t),G.default.existsSync(q.default.resolve(e.dirPath,".python-version"))||K("python 3.9.15",0,t)),e.depending.firebase&&K("java adoptopenjdk-17.0.5+8",0,t),e.containingPackageJson){let n=U("npm",["show","yarn","version"],e.dirPath);K(`yarn ${n}`,t.length,t)}let r=q.default.resolve(e.dirPath,".tool-versions");await(t.length>0?p.run(()=>G.default.promises.writeFile(r,t.join(`
1
+ "use strict";var Ut=Object.create;var Re=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var zt=Object.getOwnPropertyNames;var Mt=Object.getPrototypeOf,Ht=Object.prototype.hasOwnProperty;var Yt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of zt(t))!Ht.call(e,a)&&a!==r&&Re(e,a,{get:()=>t[a],enumerable:!(n=Gt(t,a))||n.enumerable});return e};var c=(e,t,r)=>(r=e!=null?Ut(Mt(e)):{},Yt(t||!e||!e.__esModule?Re(r,"default",{value:e,enumerable:!0}):r,e));var Wt=c(require("node:path")),It=c(require("glob")),Jt=c(require("yargs"));var G=c(require("node:fs")),q=c(require("node:path"));var ae=class{isVerbose;constructor(){this.isVerbose=!1}},j=new ae;var le=class{async function(t,r){j.isVerbose&&console.info(`--------- ${t} start ---------`),await r(),j.isVerbose&&console.info(`---------- ${t} end ----------`)}},d=new le;var Te=require("minimal-promise-pool"),p=new Te.PromisePool;var ce=c(require("node:child_process"));function v(e,t,r,n=0){do{let[a,i,s]=je(e,t,r);if(console.log(`$ ${a} ${i.join(" ")} at ${s.cwd}`),ce.default.spawnSync(a,i,s).status===0)break}while(--n>=0)}function U(e,t,r){let[n,a,i]=je(e,t,r);i.stdio="pipe";let s=ce.default.spawnSync(n,a,i),o=s.stderr.toString().trim();return o&&console.error(`${n} [${a.map(l=>`"${l}"`)}] caused the following error:
2
+ ${o}`),s.stdout.toString().trim()}function je(e,t,r){let n={...process.env};return n.PATH&&n.BERRY_BIN_FOLDER&&(n.PATH=n.PATH.replace(`${n.BERRY_BIN_FOLDER}:`,"")),n.ASDF_DIR&&(t=["-l","-c",`. ${n.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:r,env:n,shell:!1,stdio:"inherit"}]}async function Ee(e){return d.function("generateVersionConfigs",async()=>{await Kt(e)})}async function Kt(e){if(!e.versionsText)return;let t=[];for(let n of e.versionsText.trim().split(`
3
+ `)){let a=n.trim();if(a&&a.split(/\s+/)[0]!=="nodejs"){t.push(a);continue}let[,i]=a.split(/\s+/);await p.run(()=>G.default.promises.writeFile(q.default.resolve(e.dirPath,".node-version"),i))}if(e.containingPoetryLock&&(K("poetry 1.3.1",0,t),G.default.existsSync(q.default.resolve(e.dirPath,".python-version"))||K("python 3.9.16",0,t)),e.depending.firebase&&K("java adoptopenjdk-17.0.5+8",0,t),e.containingPackageJson){let n=U("npm",["show","yarn","version"],e.dirPath);K(`yarn ${n}`,t.length,t)}let r=q.default.resolve(e.dirPath,".tool-versions");await(t.length>0?p.run(()=>G.default.promises.writeFile(r,t.join(`
4
4
  `)+`
5
- `)):p.run(()=>G.default.promises.rm(r,{force:!0}))),await p.promiseAll(),v("asdf",["plugin","update","--all"],e.dirPath),v("asdf",["install"],e.dirPath)}function K(e,t,r){let[n]=e.split(" "),a=r.findIndex(i=>i.split(/\s+/)[0]===n);a>=0?r[a]=e:r.splice(t,0,e)}var Ee=c(require("node:path"));var k={codeWith2IndentSize:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","cpp","dart","htm","html","pu","puml","rb","vue","yaml","yml"].sort(),codeWith4IndentSize:["go","gradle","py"].sort(),codeWith8IndentSize:["sh"].sort(),markdownLike:["md"].sort(),eslint:["cjs","mjs","js","cts","mts","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()};var pe=c(require("node:fs/promises")),h={async readFileIgnoringError(e){try{return await pe.default.readFile(e,"utf8")}catch{}},async generateFile(e,t){await pe.default.writeFile(e,t),console.log(`Generated ${e}`)}};var qt=`root = true
5
+ `)):p.run(()=>G.default.promises.rm(r,{force:!0}))),await p.promiseAll(),v("asdf",["plugin","update","--all"],e.dirPath),v("asdf",["install"],e.dirPath)}function K(e,t,r){let[n]=e.split(" "),a=r.findIndex(i=>i.split(/\s+/)[0]===n);a>=0?r[a]=e:r.splice(t,0,e)}var Oe=c(require("node:path"));var k={codeWith2IndentSize:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","cpp","dart","htm","html","pu","puml","rb","vue","yaml","yml"].sort(),codeWith4IndentSize:["go","gradle","py"].sort(),codeWith8IndentSize:["sh"].sort(),markdownLike:["md"].sort(),eslint:["cjs","mjs","js","cts","mts","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()};var pe=c(require("node:fs/promises")),h={async readFileIgnoringError(e){try{return await pe.default.readFile(e,"utf8")}catch{}},async generateFile(e,t){await pe.default.writeFile(e,t),console.log(`Generated ${e}`)}};var qt=`root = true
6
6
 
7
7
  [*]
8
8
  charset = utf-8
@@ -28,19 +28,19 @@ trim_trailing_whitespace = false
28
28
 
29
29
  [{Makefile,*.mk}]
30
30
  indent_style = tab
31
- `;async function Oe(e){return u.function("generateEditorconfig",async()=>{let t=Ee.default.resolve(e.dirPath,".editorconfig");await p.run(()=>h.generateFile(t,qt))})}function V(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var ue=c(require("node:path"));var me=c(require("node:fs")),z="# Project-specific settings",De=/# Project-specific settings[^\n]*\n/gm,Ie="# Generated by wbfy",Vt="# Generated by ",Be=`${z} (head)
31
+ `;async function De(e){return d.function("generateEditorconfig",async()=>{let t=Oe.default.resolve(e.dirPath,".editorconfig");await p.run(()=>h.generateFile(t,qt))})}function V(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var de=c(require("node:path"));var me=c(require("node:fs")),z="# Project-specific settings",Be=/# Project-specific settings[^\n]*\n/gm,Je="# Generated by wbfy",Vt="# Generated by ",Ne=`${z} (head)
32
32
 
33
33
 
34
- ${Ie}
35
- `,Ne=`
34
+ ${Je}
35
+ `,We=`
36
36
  ${z} (tail)
37
- `,b={separator:Ie,separatorPrefix:Vt,defaultHeadUserContent:Be,defaultTailUserContent:Ne,async readGitignoreWithoutSeparators(e){try{let t=await me.default.promises.readFile(e,"utf8"),r=We(t);return r>0&&(t=t.slice(0,r-1)),t.replace(De,"").replace(/# Generated by [^\n]*\n/gm,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
37
+ `,b={separator:Je,separatorPrefix:Vt,defaultHeadUserContent:Ne,defaultTailUserContent:We,async readGitignoreWithoutSeparators(e){try{let t=await me.default.promises.readFile(e,"utf8"),r=Ie(t);return r>0&&(t=t.slice(0,r-1)),t.replace(Be,"").replace(/# Generated by [^\n]*\n/gm,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
38
38
 
39
39
  `).trim()+`
40
40
  `}catch{}},getHeadUserContent(e){let t=e.indexOf(this.separatorPrefix);return t>=0?e.slice(0,e.indexOf(`
41
- `,t)+1).replace(De,`${z} (head)
42
- `):Be},getTailUserContent(e){let t=We(e);return t>0?e.slice(t-1):Ne},async isBerryZeroInstallEnabled(e){try{return(await me.default.promises.readFile(e,"utf8")).includes(`
43
- !.yarn/cache`)}catch{return!1}}};function We(e){let t=e.indexOf(z),r=e.lastIndexOf(z);return r>t?r:-1}var Je=`
41
+ `,t)+1).replace(Be,`${z} (head)
42
+ `):Ne},getTailUserContent(e){let t=Ie(e);return t>0?e.slice(t-1):We},async isBerryZeroInstallEnabled(e){try{return(await me.default.promises.readFile(e,"utf8")).includes(`
43
+ !.yarn/cache`)}catch{return!1}}};function Ie(e){let t=e.indexOf(z),r=e.lastIndexOf(z);return r>t?r:-1}var Le=`
44
44
  3rd-party/
45
45
  @types/
46
46
  __generated__/
@@ -53,13 +53,13 @@ test-fixtures/
53
53
  *.min.*js
54
54
  .yarn/
55
55
  .pnp.js
56
- `;async function Le(e){return u.function("generateEslintignore",async()=>{let t=ue.default.resolve(e.dirPath,".eslintignore"),r=await h.readFileIgnoringError(t)??"",n=b.getHeadUserContent(r)+Je,a=b.getTailUserContent(r),i=ue.default.resolve(e.dirPath,".gitignore"),s=await b.readGitignoreWithoutSeparators(i)||"",o=n+Je+s+a;await p.run(()=>h.generateFile(t,o))})}var Ge=c(require("node:fs")),ze=c(require("node:path")),Me=c(require("deepmerge"));var Ae=c(require("deepmerge"));function W(e,t){return t}function X(e,t,r){let n=[...e];for(let[a,i]of t.entries())n[a]===void 0?n[a]=r.cloneUnlessOtherwiseSpecified(i,r):r.isMergeableObject(i)?n[a]=(0,Ae.default)(e[a],i,r):e.includes(i)||n.push(i);return n}async function He(e,t){return u.function("generateEslintrc",async()=>{if(t.depending.blitz==="2")return;let r=[];e.eslintBase&&r.push(e.eslintBase),e!==t&&r.push("../../.eslintrc.json");let n={root:!0,extends:r},a=ze.default.resolve(e.dirPath,".eslintrc.json");try{let s=await Ge.default.promises.readFile(a,"utf8"),o=JSON.parse(s);o.extends&&(o.extends=o.extends.filter(g=>!g.startsWith("@willbooster/")&&g!=="../../.eslintrc.json")),r.length===0&&(o.extends=[]);let l=n.extends;n.extends=o.extends,o.extends=l,n=Me.default.all([n,o,n],{arrayMerge:X}),e.depending.blitz==="0"?Ue(n,"blitz"):e.depending.blitz==="2"&&Ue(n,"@blitzjs/next/eslint")}catch{}let i=JSON.stringify(n);await p.run(()=>h.generateFile(a,i))})}function Ue(e,t){e.extends=[t,...e.extends.filter(r=>r!==t)]}var Ye=c(require("node:path"));var Xt=`* text=auto
56
+ `;async function Ae(e){return d.function("generateEslintignore",async()=>{let t=de.default.resolve(e.dirPath,".eslintignore"),r=await h.readFileIgnoringError(t)??"",n=b.getHeadUserContent(r)+Le,a=b.getTailUserContent(r),i=de.default.resolve(e.dirPath,".gitignore"),s=await b.readGitignoreWithoutSeparators(i)||"",o=n+Le+s+a;await p.run(()=>h.generateFile(t,o))})}var ze=c(require("node:fs")),Me=c(require("node:path")),He=c(require("deepmerge"));var Ue=c(require("deepmerge"));function W(e,t){return t}function X(e,t,r){let n=[...e];for(let[a,i]of t.entries())n[a]===void 0?n[a]=r.cloneUnlessOtherwiseSpecified(i,r):r.isMergeableObject(i)?n[a]=(0,Ue.default)(e[a],i,r):e.includes(i)||n.push(i);return n}async function Ye(e,t){return d.function("generateEslintrc",async()=>{if(t.depending.blitz==="2")return;let r=[];e.eslintBase&&r.push(e.eslintBase),e!==t&&r.push("../../.eslintrc.json");let n={root:!0,extends:r},a=Me.default.resolve(e.dirPath,".eslintrc.json");try{let s=await ze.default.promises.readFile(a,"utf8"),o=JSON.parse(s);o.extends&&(o.extends=o.extends.filter(g=>!g.startsWith("@willbooster/")&&g!=="../../.eslintrc.json")),r.length===0&&(o.extends=[]);let l=n.extends;n.extends=o.extends,o.extends=l,n=He.default.all([n,o,n],{arrayMerge:X}),e.depending.blitz==="0"?Ge(n,"blitz"):e.depending.blitz==="2"&&Ge(n,"@blitzjs/next/eslint")}catch{}let i=JSON.stringify(n);await p.run(()=>h.generateFile(a,i))})}function Ge(e,t){e.extends=[t,...e.extends.filter(r=>r!==t)]}var Ke=c(require("node:path"));var Xt=`* text=auto
57
57
 
58
58
  *.vcproj text eol=crlf
59
59
 
60
60
  ${[...k.codeWith2IndentSize,...k.codeWith4IndentSize,...k.markdownLike].map(e=>`*.${e} text eol=lf`).join(`
61
61
  `)}
62
- `;async function Ke(e){return u.function("generateGitattributes",async()=>{let t=Ye.default.resolve(e.dirPath,".gitattributes");await p.run(()=>h.generateFile(t,Xt))})}var M=c(require("node:fs")),qe=c(require("node:os")),I=c(require("node:path"));var Zt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],Qt=`
62
+ `;async function qe(e){return d.function("generateGitattributes",async()=>{let t=Ke.default.resolve(e.dirPath,".gitattributes");await p.run(()=>h.generateFile(t,Xt))})}var M=c(require("node:fs")),Ve=c(require("node:os")),I=c(require("node:path"));var Zt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],Qt=`
63
63
  .devcontainer/
64
64
  .venv/
65
65
  dist/
@@ -67,7 +67,7 @@ temp/
67
67
  Icon[\r]
68
68
  *.sqlite3
69
69
  *.sqlite3-journal
70
- `;async function Ve(e,t){return u.function("generateGitignore",async()=>{let r=I.default.resolve(e.dirPath,".gitignore"),n=await h.readFileIgnoringError(r)??"",a=b.getHeadUserContent(n)+Qt,i=b.getTailUserContent(n),s=[...Zt];e.containingGemfile&&s.push("ruby"),e.containingGoMod&&(s.push("go"),a+=`${I.default.basename(e.dirPath)}
70
+ `;async function Xe(e,t){return d.function("generateGitignore",async()=>{let r=I.default.resolve(e.dirPath,".gitignore"),n=await h.readFileIgnoringError(r)??"",a=b.getHeadUserContent(n)+Qt,i=b.getTailUserContent(n),s=[...Zt];e.containingGemfile&&s.push("ruby"),e.containingGoMod&&(s.push("go"),a+=`${I.default.basename(e.dirPath)}
71
71
  `),e.containingPackageJson&&s.push("node"),e.containingPomXml&&(s.push("maven"),a+=`.idea/google-java-format.xml
72
72
  `),e.containingPubspecYaml&&(s.push("flutter","AndroidStudio","ruby"),a+=`.flutter-plugins-dependencies
73
73
  android/key.properties
@@ -82,8 +82,8 @@ android/app/src/main/assets/
82
82
  `);let o="";for(let g of s){let f=await tr(g)??"";if(!f){let y=`https://www.toptal.com/developers/gitignore/api/${g}`,w=await(await fetch(y)).text();if(w.includes("Attention Required!")){console.error(`Failed to fetch ${y}`);return}f=w.trim(),await p.run(()=>er(g,f)),j.isVerbose&&console.info(`Fetched ${y}`)}o&&(o+=`
83
83
  `),o+=f+`
84
84
  `}await b.isBerryZeroInstallEnabled(r)||(o=o.replace("!.yarn/cache","# !.yarn/cache").replace("# .pnp.*",".pnp.*")),(e.containingPomXml||e.containingPubspecYaml)&&(o=o.replace(/^# .idea\/artifacts$/gm,".idea/artifacts").replace(/^# .idea\/compiler.xml$/gm,".idea/compiler.xml").replace(/^# .idea\/jarRepositories.xml$/gm,".idea/jarRepositories.xml").replace(/^# .idea\/modules.xml$/gm,".idea/modules.xml").replace(/^# .idea\/*.iml$/gm,".idea/*.iml").replace(/^# .idea\/modules$/gm,".idea/modules").replace(/^# *.iml$/gm,"*.iml").replace(/^# *.ipr$/gm,"*.ipr"),e.containingPubspecYaml&&(o=o.replace(/^.idea\/modules.xml$/gm,"# .idea/modules.xml"))),o=o.replace(/^.idea\/?$/gm,"# .idea"),(t.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(o=o.replace(/^(.idea\/.+)$/gm,`$1
85
- android/$1`));let l=a+o+i;await p.run(()=>h.generateFile(r,l))})}var Z=I.default.join(qe.default.homedir(),".cache","wbfy","gitignore");async function er(e,t){await M.default.promises.mkdir(Z,{recursive:!0}),await M.default.promises.writeFile(I.default.join(Z,e),t)}async function tr(e){try{let t=await M.default.promises.stat(I.default.join(Z,e));return Date.now()-t.mtimeMs>6*60*60*1e3?void 0:await M.default.promises.readFile(I.default.join(Z,e),"utf8")}catch{}}var $=c(require("node:fs")),J=c(require("node:path"));var O=c(require("node:fs")),A=c(require("node:path")),ge=c(require("deepmerge"));var Q={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var Xe=require("@octokit/core"),Ze=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,ee=!!Ze,C=new Xe.Octokit({auth:Ze}),de=class{getOrgAndName(t){var s;let r=t.split(":").at(-1),n=r==null?void 0:r.split("/"),a=(n==null?void 0:n.at(-2))??"",i=((s=n==null?void 0:n.at(-1))==null?void 0:s.replace(/.git$/,""))??"";return[a,i]}},E=new de;var Qe={node:["src","__tests__","scripts"].sort(),blitz:["__tests__","scripts","app","db","integrations","mailers","pages","test"].sort()};function te(e){return e.depending.blitz?Qe.blitz:Qe.node}var fe=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys","eslint-plugin-unicorn"],et=[...fe,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],tt=["eslint-plugin-react","eslint-plugin-react-hooks"],rt={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...fe],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...fe,...tt],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...et],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...et,...tt],"../../.eslintrc.json":[]};async function it(e,t,r){return u.function("generatePackageJson",async()=>{await rr(e,t,r)})}async function rr(e,t,r){var f,y;let n=A.default.resolve(e.dirPath,"package.json"),a=await O.default.promises.readFile(n,"utf8"),i=JSON.parse(a);i.scripts=i.scripts||{},i.dependencies=i.dependencies||{},i.devDependencies=i.devDependencies||{},i.peerDependencies=i.peerDependencies||{},await ir(i),i.name!=="@willbooster/prettier-config"&&(i.prettier="@willbooster/prettier-config");for(let m of Object.keys(i.scripts))i.scripts[m].includes("git clone")||(i.scripts[m]=i.scripts[m].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));i.scripts=(0,ge.default)(i.scripts,ye(e)),i.scripts.prettify+=await nr(e.dirPath);let s=[],o=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"],l=[];e.root&&(o.push("husky","@willbooster/renovate-config"),(e.publicRepo||e.referredByOtherRepo)&&(o.push("pinst"),i.scripts.prepack="pinst --disable",i.scripts.postpack="pinst --enable"),e.depending.semanticRelease&&(o.push("conventional-changelog-conventionalcommits"),!i.devDependencies["semantic-release"]&&!i.devDependencies["multi-semantic-release"]&&!i.devDependencies["@qiwi/multi-semantic-release"]&&o.push("semantic-release"),i.version="0.0.0-semantically-released"),e.containingSubPackageJsons?i.workspaces=["packages/*"]:delete i.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(o.push("eslint","micromatch"),e.containingTypeScriptInPackages&&o.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&o.push("typescript"),e.eslintBase&&o.push(...rt[e.eslintBase]),e.willBoosterConfigs&&(s=s.filter(m=>!m.includes("@willbooster/")),o=o.filter(m=>!m.includes("@willbooster/"))),i.name||(i.name=A.default.basename(e.dirPath)),e.containingSubPackageJsons&&(i.private=!0),i.license||(i.license="UNLICENSED"),!i.private&&i.license!=="UNLICENSED"&&t.publicRepo&&(i.publishConfig??={},i.publishConfig.access??="public");let[g]=E.getOrgAndName(e.repository??"");if((g==="WillBooster"||g==="WillBoosterLab")&&(i.author="WillBooster Inc."),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete i.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(i.resolutions||={},i.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete i.scripts.lint,delete i.scripts["lint-fix"],i.scripts.cleanup=i.scripts.cleanup.replace(" && yarn lint-fix","")):i.scripts["lint-fix"]+=Q.getLintFixSuffix(e),e.containingPubspecYaml){i.scripts.lint="flutter analyze",i.scripts["lint-fix"]="yarn lint";let m=["lib","test","test_driver"].filter(w=>O.default.existsSync(A.default.resolve(e.dirPath,w)));m.length>0&&(i.scripts["format-code"]=`flutter format $(find ${m.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,i.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){i.scripts.postinstall==="poetry install"&&delete i.scripts.postinstall;let m=await O.default.promises.readdir(e.dirPath,{withFileTypes:!0}),F=(await Promise.all(m.map(async x=>{if(!x.isDirectory())return"";let Lt=A.default.resolve(e.dirPath,x.name);return(await O.default.promises.readdir(Lt)).some(At=>At.endsWith(".py"))?x.name:""}))).filter(Boolean);F.length>0&&(i.scripts["format-code"]=`poetry run isort --profile black ${F.join(" ")} && poetry run black ${F.join(" ")}`,i.scripts.lint=`poetry run flake8 ${F.join(" ")}`,i.scripts["lint-fix"]="yarn lint",i.scripts.format+=" && yarn format-code",l.push("black","isort","flake8"))}e.repository&&(i.repository=e.repository)}e.depending.blitz?(e.depending.blitz==="0"&&(o=o.filter(m=>!m.includes("@typescript-eslint/")),o=o.filter(m=>m!=="eslint-plugin-react"&&m!=="eslint-import-resolver-typescript"&&m!=="eslint-plugin-import"&&m!=="eslint-plugin-react-hooks")),(f=i.scripts["gen-code"])!=null&&f.startsWith("blitz codegen")||(i.scripts["gen-code"]="blitz codegen")):e.depending.prisma&&!((y=i.scripts["gen-code"])!=null&&y.startsWith("prisma generate"))&&(i.scripts["gen-code"]="prisma generate"),Object.keys(i.dependencies).length===0&&delete i.dependencies,Object.keys(i.devDependencies).length===0&&delete i.devDependencies,Object.keys(i.peerDependencies).length===0&&delete i.peerDependencies,await O.default.promises.writeFile(n,JSON.stringify(i)),r||(s=s.filter(m=>{var w;return!((w=i.devDependencies)!=null&&w[m])}),s.length>0&&v("yarn",["add",...new Set(s)],e.dirPath),o=o.filter(m=>{var w;return!((w=i.dependencies)!=null&&w[m])}),o.length>0&&v("yarn",["add","-D",...new Set(o)],e.dirPath),l.length>0&&v("poetry",["add",...new Set(l)],e.dirPath))}async function ir(e){e.author==="WillBooster LLC"&&(e.author="WillBooster Inc."),delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],delete e.scripts["typecheck:codegen"],delete e.dependencies.tslib,delete e.devDependencies["@willbooster/eslint-config"],delete e.devDependencies["@willbooster/eslint-config-react"],delete e.devDependencies["@willbooster/tsconfig"],delete e.devDependencies["eslint-import-resolver-node"],delete e.devDependencies["eslint-plugin-prettier"],delete e.devDependencies.lerna,delete e.devDependencies.pinst,delete e.scripts["flutter-format"],delete e.scripts["format-flutter"],delete e.scripts["python-format"],delete e.scripts["format-python"],delete e.scripts.prettier;for(let t of Object.values(rt))for(let r of t)delete e.devDependencies[r];await p.run(()=>O.default.promises.rm("lerna.json",{force:!0}))}function ye(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${te(e)}}/**/*.{${k.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${k.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};return e.containingSubPackageJsons&&(t=(0,ge.default)({...t},{format:"sort-package-json && yarn prettify && yarn workspaces foreach --parallel --verbose run format",lint:"yarn workspaces foreach --parallel --verbose run lint","lint-fix":"yarn workspaces foreach --parallel --verbose run lint-fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${k.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"yarn workspaces foreach --verbose run test",typecheck:"yarn workspaces foreach --parallel --verbose run typecheck"})),e.depending.blitz&&(t.typecheck=`${t.typecheck} || yarn run typecheck/warn`,t["typecheck/warn"]=`echo 'Please try "yarn gen-code" if you face unknown type errors.' && exit 1`,t["typecheck:gen-code"]="yarn gen-code && tsc --noEmit --Pretty"),t}async function nr(e){let t=A.default.resolve(e,".prettierignore"),r=await O.default.promises.readFile(t,"utf8"),n=r.indexOf(b.separatorPrefix);return n<0?"":r.slice(0,n).split(`
86
- `).map(s=>{let o=s.trim();return o.endsWith("/")?o.slice(0,-1):o}).filter(s=>s&&!s.startsWith("#")&&!s.includes("/")).map(s=>` "!**/${s}/**"`).join("")}var he="npm test",re={preCommit:"node node_modules/.bin/lint-staged",prePush:"yarn typecheck",prePushForLab:`
85
+ android/$1`));let l=a+o+i;await p.run(()=>h.generateFile(r,l))})}var Z=I.default.join(Ve.default.homedir(),".cache","wbfy","gitignore");async function er(e,t){await M.default.promises.mkdir(Z,{recursive:!0}),await M.default.promises.writeFile(I.default.join(Z,e),t)}async function tr(e){try{let t=await M.default.promises.stat(I.default.join(Z,e));return Date.now()-t.mtimeMs>6*60*60*1e3?void 0:await M.default.promises.readFile(I.default.join(Z,e),"utf8")}catch{}}var $=c(require("node:fs")),J=c(require("node:path"));var O=c(require("node:fs")),A=c(require("node:path")),ye=c(require("deepmerge"));var Q={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var Ze=require("@octokit/core"),Qe=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,ee=!!Qe,C=new Ze.Octokit({auth:Qe}),ue=class{getOrgAndName(t){var s;let r=t.split(":").at(-1),n=r==null?void 0:r.split("/"),a=(n==null?void 0:n.at(-2))??"",i=((s=n==null?void 0:n.at(-1))==null?void 0:s.replace(/.git$/,""))??"";return[a,i]}},E=new ue;var fe={node:["src","__tests__","scripts"].sort(),blitz0:["__tests__","scripts","app","db","integrations","mailers","test"].sort(),blitz2:["src","__tests__","scripts","db","integrations","mailers"].sort()};function te(e){return e.depending.blitz?e.depending.blitz==="0"?fe.blitz0:fe.blitz2:fe.node}var ge=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys","eslint-plugin-unicorn"],et=[...ge,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],tt=["eslint-plugin-react","eslint-plugin-react-hooks"],rt={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...ge],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...ge,...tt],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...et],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...et,...tt],"../../.eslintrc.json":[]};async function it(e,t,r){return d.function("generatePackageJson",async()=>{await rr(e,t,r)})}async function rr(e,t,r){var f,y;let n=A.default.resolve(e.dirPath,"package.json"),a=await O.default.promises.readFile(n,"utf8"),i=JSON.parse(a);i.scripts=i.scripts||{},i.dependencies=i.dependencies||{},i.devDependencies=i.devDependencies||{},i.peerDependencies=i.peerDependencies||{},await ir(i),i.name!=="@willbooster/prettier-config"&&(i.prettier="@willbooster/prettier-config");for(let m of Object.keys(i.scripts))i.scripts[m].includes("git clone")||(i.scripts[m]=i.scripts[m].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));i.scripts=(0,ye.default)(i.scripts,he(e)),i.scripts.prettify+=await nr(e.dirPath);let s=[],o=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"],l=[];e.root&&(o.push("husky","@willbooster/renovate-config"),(e.publicRepo||e.referredByOtherRepo)&&(o.push("pinst"),i.scripts.prepack="pinst --disable",i.scripts.postpack="pinst --enable"),e.depending.semanticRelease&&(o.push("conventional-changelog-conventionalcommits"),!i.devDependencies["semantic-release"]&&!i.devDependencies["multi-semantic-release"]&&!i.devDependencies["@qiwi/multi-semantic-release"]&&o.push("semantic-release"),i.version="0.0.0-semantically-released"),e.containingSubPackageJsons?i.workspaces=["packages/*"]:delete i.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(o.push("eslint","micromatch"),e.containingTypeScriptInPackages&&o.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&o.push("typescript"),e.eslintBase&&o.push(...rt[e.eslintBase]),e.willBoosterConfigs&&(s=s.filter(m=>!m.includes("@willbooster/")),o=o.filter(m=>!m.includes("@willbooster/"))),i.name||(i.name=A.default.basename(e.dirPath)),e.containingSubPackageJsons&&(i.private=!0),i.license||(i.license="UNLICENSED"),!i.private&&i.license!=="UNLICENSED"&&t.publicRepo&&(i.publishConfig??={},i.publishConfig.access??="public");let[g]=E.getOrgAndName(e.repository??"");if((g==="WillBooster"||g==="WillBoosterLab")&&(i.author="WillBooster Inc."),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete i.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(i.resolutions||={},i.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete i.scripts.lint,delete i.scripts["lint-fix"],i.scripts.cleanup=i.scripts.cleanup.replace(" && yarn lint-fix","")):i.scripts["lint-fix"]+=Q.getLintFixSuffix(e),e.containingPubspecYaml){i.scripts.lint="flutter analyze",i.scripts["lint-fix"]="yarn lint";let m=["lib","test","test_driver"].filter(w=>O.default.existsSync(A.default.resolve(e.dirPath,w)));m.length>0&&(i.scripts["format-code"]=`flutter format $(find ${m.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,i.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){i.scripts.postinstall==="poetry install"&&delete i.scripts.postinstall;let m=await O.default.promises.readdir(e.dirPath,{withFileTypes:!0}),F=(await Promise.all(m.map(async x=>{if(!x.isDirectory())return"";let Lt=A.default.resolve(e.dirPath,x.name);return(await O.default.promises.readdir(Lt)).some(At=>At.endsWith(".py"))?x.name:""}))).filter(Boolean);F.length>0&&(i.scripts["format-code"]=`poetry run isort --profile black ${F.join(" ")} && poetry run black ${F.join(" ")}`,i.scripts.lint=`poetry run flake8 ${F.join(" ")}`,i.scripts["lint-fix"]="yarn lint",i.scripts.format+=" && yarn format-code",l.push("black","isort","flake8"))}e.repository&&(i.repository=e.repository)}e.depending.blitz?(e.depending.blitz==="0"&&(o=o.filter(m=>!m.includes("@typescript-eslint/")),o=o.filter(m=>m!=="eslint-plugin-react"&&m!=="eslint-import-resolver-typescript"&&m!=="eslint-plugin-import"&&m!=="eslint-plugin-react-hooks")),(f=i.scripts["gen-code"])!=null&&f.startsWith("blitz codegen")||(i.scripts["gen-code"]="blitz codegen")):e.depending.prisma&&!((y=i.scripts["gen-code"])!=null&&y.startsWith("prisma generate"))&&(i.scripts["gen-code"]="prisma generate"),Object.keys(i.dependencies).length===0&&delete i.dependencies,Object.keys(i.devDependencies).length===0&&delete i.devDependencies,Object.keys(i.peerDependencies).length===0&&delete i.peerDependencies,await O.default.promises.writeFile(n,JSON.stringify(i)),r||(s=s.filter(m=>{var w;return!((w=i.devDependencies)!=null&&w[m])}),s.length>0&&v("yarn",["add",...new Set(s)],e.dirPath),o=o.filter(m=>{var w;return!((w=i.dependencies)!=null&&w[m])}),o.length>0&&v("yarn",["add","-D",...new Set(o)],e.dirPath),l.length>0&&v("poetry",["add",...new Set(l)],e.dirPath))}async function ir(e){e.author==="WillBooster LLC"&&(e.author="WillBooster Inc."),delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],delete e.scripts["typecheck:codegen"],delete e.dependencies.tslib,delete e.devDependencies["@willbooster/eslint-config"],delete e.devDependencies["@willbooster/eslint-config-react"],delete e.devDependencies["@willbooster/tsconfig"],delete e.devDependencies["eslint-import-resolver-node"],delete e.devDependencies["eslint-plugin-prettier"],delete e.devDependencies.lerna,delete e.devDependencies.pinst,delete e.scripts["flutter-format"],delete e.scripts["format-flutter"],delete e.scripts["python-format"],delete e.scripts["format-python"],delete e.scripts.prettier;for(let t of Object.values(rt))for(let r of t)delete e.devDependencies[r];await p.run(()=>O.default.promises.rm("lerna.json",{force:!0}))}function he(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${te(e)}}/**/*.{${k.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${k.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};return e.containingSubPackageJsons&&(t=(0,ye.default)({...t},{format:"sort-package-json && yarn prettify && yarn workspaces foreach --parallel --verbose run format",lint:"yarn workspaces foreach --parallel --verbose run lint","lint-fix":"yarn workspaces foreach --parallel --verbose run lint-fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${k.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"yarn workspaces foreach --verbose run test",typecheck:"yarn workspaces foreach --parallel --verbose run typecheck"})),e.depending.blitz&&(t.typecheck=`${t.typecheck} || yarn run typecheck/warn`,t["typecheck/warn"]=`echo 'Please try "yarn gen-code" if you face unknown type errors.' && exit 1`,t["typecheck:gen-code"]="yarn gen-code && tsc --noEmit --Pretty"),t}async function nr(e){let t=A.default.resolve(e,".prettierignore"),r=await O.default.promises.readFile(t,"utf8"),n=r.indexOf(b.separatorPrefix);return n<0?"":r.slice(0,n).split(`
86
+ `).map(s=>{let o=s.trim();return o.endsWith("/")?o.slice(0,-1):o}).filter(s=>s&&!s.startsWith("#")&&!s.includes("/")).map(s=>` "!**/${s}/**"`).join("")}var we="npm test",re={preCommit:"node node_modules/.bin/lint-staged",prePush:"yarn typecheck",prePushForLab:`
87
87
  if [ $(git branch --show-current) = "main" ] && [ $(git config user.email) != "exkazuu@gmail.com" ]; then
88
88
  echo "************************************************"
89
89
  echo "*** Don't push main branch directly. Use PR! ***"
@@ -100,10 +100,10 @@ run_if_changed() {
100
100
  eval "$2"
101
101
  fi
102
102
  }
103
- `.trim()};async function nt(e){return u.function("generateHuskyrc",async()=>{await or(e)})}async function or(e){var g,f;let t=J.default.resolve(e.dirPath,"package.json"),r=await $.default.promises.readFile(t,"utf8"),n=JSON.parse(r);n.scripts||={},delete n.scripts.postinstall,delete n.scripts.postpublish,delete n.scripts.prepare,delete n.scripts.prepublishOnly,delete n.scripts.prepack,delete n.scripts.postpack;let a=J.default.resolve(e.dirPath,".husky");await Promise.all([$.default.promises.writeFile(t,JSON.stringify(n,void 0,2)),$.default.promises.rm(a,{force:!0,recursive:!0})]),v("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let i=J.default.resolve(a,"pre-commit"),s=await $.default.promises.readFile(i,"utf8");if(await p.run(()=>$.default.promises.rm(J.default.resolve(e.dirPath,".huskyrc.json"),{force:!0})),await p.run(()=>$.default.promises.writeFile(i,s.replace(he,re.preCommit))),e.containingTypeScript||e.containingTypeScriptInPackages){let y=(g=e.repository)!=null&&g.startsWith("github:WillBoosterLab/")?re.prePushForLab:re.prePush,{typecheck:m}=ye(e);y=y.replace("yarn typecheck",m.replace("tsc","node node_modules/.bin/tsc")),await p.run(()=>$.default.promises.writeFile(J.default.resolve(a,"pre-push"),s.replace(he,y),{mode:493}))}let o=[];e.versionsText&&o.push('run_if_changed "\\..+-version" "asdf plugin update --all"'),(f=e.versionsText)!=null&&f.includes("python ")&&o.push('run_if_changed "\\..+-version" "asdf install python"'),e.versionsText&&o.push('run_if_changed "\\..+-version" "asdf install"'),o.push('run_if_changed "package\\.json" "yarn"'),e.containingPoetryLock&&o.push('run_if_changed "poetry\\.lock" "poetry install"'),(e.depending.blitz||e.depending.prisma)&&o.push("yarn gen-code");let l=s.replace(he,`${re.postMerge}
103
+ `.trim()};async function nt(e){return d.function("generateHuskyrc",async()=>{await or(e)})}async function or(e){var g,f;let t=J.default.resolve(e.dirPath,"package.json"),r=await $.default.promises.readFile(t,"utf8"),n=JSON.parse(r);n.scripts||={},delete n.scripts.postinstall,delete n.scripts.postpublish,delete n.scripts.prepare,delete n.scripts.prepublishOnly,delete n.scripts.prepack,delete n.scripts.postpack;let a=J.default.resolve(e.dirPath,".husky");await Promise.all([$.default.promises.writeFile(t,JSON.stringify(n,void 0,2)),$.default.promises.rm(a,{force:!0,recursive:!0})]),v("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let i=J.default.resolve(a,"pre-commit"),s=await $.default.promises.readFile(i,"utf8");if(await p.run(()=>$.default.promises.rm(J.default.resolve(e.dirPath,".huskyrc.json"),{force:!0})),await p.run(()=>$.default.promises.writeFile(i,s.replace(we,re.preCommit))),e.containingTypeScript||e.containingTypeScriptInPackages){let y=(g=e.repository)!=null&&g.startsWith("github:WillBoosterLab/")?re.prePushForLab:re.prePush,{typecheck:m}=he(e);y=y.replace("yarn typecheck",m.replace("tsc","node node_modules/.bin/tsc")),await p.run(()=>$.default.promises.writeFile(J.default.resolve(a,"pre-push"),s.replace(we,y),{mode:493}))}let o=[];e.versionsText&&o.push('run_if_changed "\\..+-version" "asdf plugin update --all"'),(f=e.versionsText)!=null&&f.includes("python ")&&o.push('run_if_changed "\\..+-version" "asdf install python"'),e.versionsText&&o.push('run_if_changed "\\..+-version" "asdf install"'),o.push('run_if_changed "package\\.json" "yarn"'),e.containingPoetryLock&&o.push('run_if_changed "poetry\\.lock" "poetry install"'),(e.depending.blitz||e.depending.prisma)&&o.push("yarn gen-code");let l=s.replace(we,`${re.postMerge}
104
104
 
105
105
  ${o.join(`
106
- `)}`);await p.run(()=>$.default.promises.writeFile(J.default.resolve(a,"post-merge"),l,{mode:493}))}var we=c(require("node:fs")),Pe=c(require("node:path"));var sr=`<?xml version="1.0" encoding="UTF-8"?>
106
+ `)}`);await p.run(()=>$.default.promises.writeFile(J.default.resolve(a,"post-merge"),l,{mode:493}))}var Pe=c(require("node:fs")),ve=c(require("node:path"));var sr=`<?xml version="1.0" encoding="UTF-8"?>
107
107
  <project version="4">
108
108
  <component name="ProjectTasksOptions">
109
109
  <TaskOptions isEnabled="true">
@@ -228,7 +228,7 @@ ${o.join(`
228
228
  </TaskOptions>
229
229
  </component>
230
230
  </project>
231
- `;async function ot(e){return u.function("generateIdeaSettings",async()=>{let t=Pe.default.resolve(e.dirPath,".idea");if(we.default.existsSync(t)){let r=Pe.default.resolve(t,"watcherTasks.xml");await(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?p.run(()=>h.generateFile(r,sr)):p.run(()=>we.default.promises.rm(r,{force:!0})))}})}var ve=c(require("node:fs")),ie=c(require("node:path"));async function ke(e){return u.function("generateLintstagedrc",async()=>{await ar(e)})}async function ar(e){let t=e.root?"node node_modules/.bin/":"node ../../node_modules/.bin/",r=[];if(e.containingJavaScript||e.containingTypeScript){let s=`
231
+ `;async function ot(e){return d.function("generateIdeaSettings",async()=>{let t=ve.default.resolve(e.dirPath,".idea");if(Pe.default.existsSync(t)){let r=ve.default.resolve(t,"watcherTasks.xml");await(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?p.run(()=>h.generateFile(r,sr)):p.run(()=>Pe.default.promises.rm(r,{force:!0})))}})}var ke=c(require("node:fs")),ie=c(require("node:path"));async function be(e){return d.function("generateLintstagedrc",async()=>{await ar(e)})}async function ar(e){let t=e.root?"node node_modules/.bin/":"node ../../node_modules/.bin/",r=[];if(e.containingJavaScript||e.containingTypeScript){let s=`
232
232
  '${st(e)}': [${JSON.stringify(`${t}eslint --fix${Q.getLintFixSuffix(e)}`)}, '${t}prettier --cache --write'],`;r.push(s)}let n=e.root?" && !file.includes('/packages/')":"";r.push(`
233
233
  './**/*.{${k.prettier.join(",")}}': files => {
234
234
  ${e.containingJavaScript||e.containingTypeScript?lr(e):""}
@@ -254,7 +254,7 @@ ${o.join(`
254
254
 
255
255
  module.exports = {${r.join("")}
256
256
  };
257
- `,i=ie.default.resolve(e.dirPath,".lintstagedrc.cjs");await p.run(()=>ve.default.promises.rm(ie.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0})),await p.run(()=>ve.default.promises.rm(ie.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0})),await p.run(()=>h.generateFile(i,a))}function st(e){return`./{${te(e).join(",")}}/**/*.{${k.eslint.join(",")}}`}function lr(e){return`files = micromatch.not(files, '${st(e)}');`}var be=c(require("node:path"));var at=`
257
+ `,i=ie.default.resolve(e.dirPath,".lintstagedrc.cjs");await p.run(()=>ke.default.promises.rm(ie.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0})),await p.run(()=>ke.default.promises.rm(ie.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0})),await p.run(()=>h.generateFile(i,a))}function st(e){return`./{${te(e).join(",")}}/**/*.{${k.eslint.join(",")}}`}function lr(e){return`files = micromatch.not(files, '${st(e)}');`}var xe=c(require("node:path"));var at=`
258
258
  3rd-party/
259
259
  android/
260
260
  ios/
@@ -264,13 +264,13 @@ test-fixtures/
264
264
  *.min.js
265
265
  .yarn/
266
266
  .pnp.js
267
- `;async function lt(e){return u.function("generatePrettierignore",async()=>{let t=be.default.resolve(e.dirPath,".prettierignore"),r=await h.readFileIgnoringError(t)??"",n=b.getHeadUserContent(r)+at,a=b.getTailUserContent(r),i=be.default.resolve(e.dirPath,".gitignore"),s=await b.readGitignoreWithoutSeparators(i)||"",o="";e.containingPubspecYaml&&(o=`
267
+ `;async function lt(e){return d.function("generatePrettierignore",async()=>{let t=xe.default.resolve(e.dirPath,".prettierignore"),r=await h.readFileIgnoringError(t)??"",n=b.getHeadUserContent(r)+at,a=b.getTailUserContent(r),i=xe.default.resolve(e.dirPath,".gitignore"),s=await b.readGitignoreWithoutSeparators(i)||"",o="";e.containingPubspecYaml&&(o=`
268
268
  android/app/
269
269
  ios/Runner/Assets.xcassets/
270
270
  pubspec.yaml
271
- `);let l=n+at+o+s+a;await p.run(()=>h.generateFile(t,l))})}var ne=c(require("node:fs")),xe=c(require("node:path"));async function pt(e){return u.function("generateReadme",async()=>{var i,s;let t=xe.default.resolve(e.dirPath,"README.md"),r=await ne.default.promises.readFile(t,"utf8");r=ct(e,r,cr,".releaserc.json");let n=(s=e.repository)==null?void 0:s.slice(((i=e.repository)==null?void 0:i.indexOf(":"))+1),a=ne.default.readdirSync(`${e.dirPath}/.github/workflows`);for(let o of a){if(!o.startsWith("test")&&!o.startsWith("deploy"))continue;let l=o;l=l.charAt(0).toUpperCase()+l.slice(1,l.indexOf(".")),l=l.replace("-"," ");let g=`[![${l}](https://github.com/${n}/actions/workflows/${o}/badge.svg)](https://github.com/${n}/actions/workflows/${o})`;r=ct(e,r,g,`.github/workflows/${o}`)}await p.run(()=>h.generateFile(t,r))})}var cr="[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)";function ct(e,t,r,n){if(!ne.default.existsSync(xe.default.resolve(e.dirPath,n)))return t;let a=t.indexOf(r);a>=0&&(t=t.slice(0,a)+t.slice(a+r.length));let i=!1;for(let s=0;s<t.length;s++)if(t[s]===`
271
+ `);let l=n+at+o+s+a;await p.run(()=>h.generateFile(t,l))})}var ne=c(require("node:fs")),_e=c(require("node:path"));async function pt(e){return d.function("generateReadme",async()=>{var i,s;let t=_e.default.resolve(e.dirPath,"README.md"),r=await ne.default.promises.readFile(t,"utf8");r=ct(e,r,cr,".releaserc.json");let n=(s=e.repository)==null?void 0:s.slice(((i=e.repository)==null?void 0:i.indexOf(":"))+1),a=ne.default.readdirSync(`${e.dirPath}/.github/workflows`);for(let o of a){if(!o.startsWith("test")&&!o.startsWith("deploy"))continue;let l=o;l=l.charAt(0).toUpperCase()+l.slice(1,l.indexOf(".")),l=l.replace("-"," ");let g=`[![${l}](https://github.com/${n}/actions/workflows/${o}/badge.svg)](https://github.com/${n}/actions/workflows/${o})`;r=ct(e,r,g,`.github/workflows/${o}`)}await p.run(()=>h.generateFile(t,r))})}var cr="[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)";function ct(e,t,r,n){if(!ne.default.existsSync(_e.default.resolve(e.dirPath,n)))return t;let a=t.indexOf(r);a>=0&&(t=t.slice(0,a)+t.slice(a+r.length));let i=!1;for(let s=0;s<t.length;s++)if(t[s]===`
272
272
  `){i=!0,t=`${t.slice(0,s+1)}${r}
273
273
  ${t.slice(s+1)}`;break}return i||(t=`${t}
274
274
  ${r}
275
- `),t}var mt=c(require("node:fs")),ut=c(require("node:path")),_e=c(require("deepmerge"));async function dt(e){return u.function("generateReleaserc",async()=>{let t=ut.default.resolve(e.dirPath,".releaserc.json");try{let r=JSON.parse(await mt.default.promises.readFile(t,"utf8")),n=(r==null?void 0:r.plugins)||[];for(let i=0;i<n.length;i++){let s=Array.isArray(n[i])?n[i][0]:n[i],o=Array.isArray(n[i])&&n[i][1]||{};s==="@semantic-release/commit-analyzer"?n[i]=["@semantic-release/commit-analyzer",_e.default.all([o,{preset:"conventionalcommits"}],{arrayMerge:W})]:s==="@semantic-release/github"&&(n[i]=["@semantic-release/github",_e.default.all([o,{successComment:!1,labels:["r: semantic-release"],releasedLabels:["released :bookmark:"]}],{arrayMerge:W})])}let a=JSON.stringify(r);await p.run(()=>h.generateFile(t,a))}catch{}})}var oe=c(require("node:fs")),se=c(require("node:path")),ft=c(require("deepmerge")),gt=c(require("lodash.clonedeep"));var pr={extends:["@willbooster"]};async function yt(e){return u.function("generateRenovateJson",async()=>{let t=(0,gt.default)(pr),r=se.default.resolve(e.dirPath,".renovaterc.json");try{let a=await oe.default.promises.readFile(r,"utf8"),i=JSON.parse(a);t=ft.default.all([t,i,t],{arrayMerge:W})}catch{}await p.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,".dependabot"),{force:!0})),await p.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,"renovate.json"),{force:!0}));let n=JSON.stringify(t);await p.run(()=>h.generateFile(r,n))})}var ht=c(require("node:fs")),wt=c(require("node:path")),Pt=c(require("deepmerge")),vt=c(require("lodash.clonedeep"));function H(e){let t=Object.entries(e).sort(([r],[n])=>r.localeCompare(n));for(let[r,n]of t)delete e[r],e[r]=n;return e}var mr={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["./node_modules/@types","./@types"]},include:["src/**/*","__tests__/**/*","scripts/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","packages/*/scripts/**/*"]},ur={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["../../node_modules/@types","../../@types","./@types"]},include:["src/**/*","__tests__/**/*","scripts/**/*"]};async function kt(e,t){return u.function("generateTsconfig",async()=>{var i,s;if(t.depending.blitz)return;let r=(0,vt.default)(e.root?mr:ur);!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete r.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(r.include=r.include.filter(o=>!o.startsWith("packages/*/")));let n=wt.default.resolve(e.dirPath,"tsconfig.json");try{let o=await ht.default.promises.readFile(n,"utf8"),l=JSON.parse(o);l.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete l.extends,(i=r==null?void 0:r.compilerOptions)==null||delete i.target,(s=r==null?void 0:r.compilerOptions)==null||delete s.module,l.jsx&&delete r.jsx,r=Pt.default.all([r,l,r],{arrayMerge:W}),r.include=r.include.filter(g=>!g.includes("@types"))}catch{}H(r.compilerOptions);let a=JSON.stringify(r);await p.run(()=>h.generateFile(n,a))})}var T=c(require("node:fs")),R=c(require("node:path")),_t=c(require("deepmerge")),Se=c(require("js-yaml")),St=c(require("lodash.clonedeep"));var dr={test:{name:"Test",on:{pull_request:null,push:{branches:["main","wbfy","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},release:{name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},wbfy:{name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},"wbfy-merge":{name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},"semantic-pr":{name:"Lint PR title",on:{pull_request_target:{types:["opened","edited","synchronize"]}},jobs:{"semantic-pr":{uses:"WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main"}}},"notify-ready":{name:"Notify ready",on:{issues:{types:["labeled"]}},jobs:{"notify-ready":{uses:"WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main",secrets:{DISCORD_WEBHOOK_URL:"${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}"}}}},"close-comment":{name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}},"add-issue-to-project":{name:"Add issue to github project",on:{issues:{types:["labeled"]}},jobs:{"add-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",secrets:{GH_PROJECT_URL:"${{ secrets.GH_PROJECT_URL }}",GH_BOT_PAT:"${{ secrets.GH_BOT_PAT }}"}}}}};async function Ft(e){return u.function("generateWorkflow",async()=>{var i;let t=R.default.resolve(e.dirPath,".github","workflows");await T.default.promises.mkdir(t,{recursive:!0});let r=R.default.resolve(e.dirPath,".github","semantic.yml");await p.run(()=>T.default.promises.rm(r,{force:!0,recursive:!0}));let a=(await T.default.promises.readdir(t,{withFileTypes:!0})).filter(s=>s.isFile()&&s.name.endsWith(".yml")).map(s=>s.name);e.depending.semanticRelease&&a.push("release.yml"),(e.publicRepo||(i=e.repository)!=null&&i.startsWith("github:WillBoosterLab/"))&&a.push("notify-ready.yml"),a.push("test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml","add-issue-to-project.yml");for(let s of a){let o=R.default.basename(s,".yml");await p.run(()=>fr(e,t,o))}})}async function fr(e,t,r){var i,s;let n=(0,St.default)(dr[r]||{}),a=R.default.join(t,`${r}.yml`);try{let o=await T.default.promises.readFile(a,"utf8"),l=Se.default.load(o);n=_t.default.all([n,l,n],{arrayMerge:X})}catch{}for(let o of Object.values(n.jobs)){if(!((s=(i=o.uses)==null?void 0:i.includes)!=null&&s.call(i,"/reusable-workflows/")))return;gr(e,o,r)}switch(r){case"release":{if(n.on.schedule)delete n.on.push;else if(e.release.branches.length>0)n.on.push.branches=e.release.branches;else{await T.default.promises.rm(R.default.join(t,"release.yml"),{force:!0});return}break}case"wbfy":{bt(n,20,24);break}case"wbfy-merge":{bt(n,0,4);break}}if(await xt(n,a),r==="release")await T.default.promises.rm(R.default.join(t,"semantic-release.yml"),{force:!0});else if(r==="sync"){if(await T.default.promises.rm(R.default.join(t,"sync-init.yml"),{force:!0}),!n.jobs.sync)return;n.jobs["sync-force"]=n.jobs.sync;let o=n.jobs.sync.with.sync_params_without_dest;if(!o)return;n.jobs.sync.with.sync_params_without_dest=`--force ${o}`,n.name="Force to Sync",n.on={workflow_dispatch:null},delete n.jobs.sync,await xt(n,R.default.join(t,"sync-force.yml"))}}function gr(e,t,r){var n,a,i;if(t.with||={},t.secrets||={},(e.release.github&&r==="test"||r==="release"||r==="wbfy"||r==="wbfy-merge")&&(t.secrets.GH_TOKEN=e.publicRepo?"${{ secrets.PUBLIC_GH_BOT_PAT }}":"${{ secrets.GH_BOT_PAT }}"),e.release.npm&&(r==="release"||r==="test")&&(t.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),t.secrets.FIREBASE_TOKEN&&(t.secrets.GCP_SA_KEY_JSON_FOR_FIREBASE="${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}",delete t.secrets.FIREBASE_TOKEN),(t.secrets.DISCORD_WEBHOOK_URL&&(r==="release"||r.startsWith("deploy"))||t.with.server_url&&r.startsWith("deploy"))&&(t.secrets.DISCORD_WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}"),r==="sync"){let s=(n=t.with)==null?void 0:n.sync_params_without_dest;s&&(t.with.sync_params_without_dest=s.replace("sync ",""))}if((a=e.repository)!=null&&a.startsWith("github:WillBooster/")?t.uses=t.uses.replace("WillBoosterLab/","WillBooster/"):(i=e.repository)!=null&&i.startsWith("github:WillBoosterLab/")&&(t.uses=t.uses.replace("WillBooster/","WillBoosterLab/")),delete t.with.non_self_hosted,delete t.with.notify_discord,delete t.with.require_fly,delete t.with.require_gcloud,t.with.dot_env_path===".env"&&delete t.with.dot_env_path,e.containingDockerfile&&r.startsWith("deploy")&&(t.with.cpu_arch="X64"),r==="release"||r==="test"||r==="wbfy"||r==="wbfy-merge"||r.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length>0?H(t.with):delete t.with,Object.keys(t.secrets).length>0){let s=H(t.secrets);delete t.secrets,t.secrets=s}else delete t.secrets}function bt(e,t,r){var l,g;let[n,a]=(((g=(l=e.on.schedule)==null?void 0:l[0])==null?void 0:g.cron)??"").split(" ").map(Number);if(n!==0&&Number.isInteger(a)){let f=(a+9)%24,y=t<r?t<=f&&f<r:t<=f||f<r;if(y)return;console.log("setSchedule:",e,n,a,y,f,t,r)}else console.log("setSchedule:",e,n,a);let i=1+Math.floor(Math.random()*59),s=t+Math.floor(Math.random()*(r-t)),o=`${i} ${(s-9+24)%24} * * *`;e.on.schedule=[{cron:o}]}async function xt(e,t){let r=Se.default.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await T.default.promises.writeFile(t,r)}var D=c(require("node:fs")),L=c(require("node:path")),Fe=c(require("js-yaml"));async function Rt(e){return u.function("generateYarnrcYml",async()=>{var f,y;let t=U("yarn",["--version"],e.dirPath),r=yr("@yarnpkg/cli",e.dirPath);$t(t)<=$t(r)&&t!==r&&v("yarn",["set","version",r],e.dirPath,1);let n=L.default.join(e.dirPath,".yarn","releases");await D.default.promises.mkdir(n,{recursive:!0});for(let m of await D.default.promises.readdir(n))m.startsWith("yarn-")&&!m.startsWith(`yarn-${r}.`)&&(await p.run(()=>D.default.promises.rm(L.default.join(n,m))),console.log("Removed",L.default.join(n,m)));let a=L.default.resolve(e.dirPath,".yarnrc");await p.run(()=>D.default.promises.rm(a,{force:!0}));let i=L.default.resolve(e.dirPath,".yarnrc.yml"),s=Fe.default.load(await D.default.promises.readFile(i,"utf8"));s.defaultSemverRangePrefix="",e.requiringNodeModules&&(s.nodeLinker="node-modules",s.nmMode="hardlinks-global",s.enableGlobalCache=!0);let o=((f=s.plugins)==null?void 0:f.length)??0;if(s.plugins=((y=s.plugins)==null?void 0:y.filter(m=>m.path!==".yarn/plugins/undefined.cjs"))??[],s.plugins.length!==o){let m=L.default.resolve(e.dirPath,".yarnrc","undefined.cjs");await p.run(()=>D.default.promises.rm(m,{force:!0}))}s.plugins.length===0&&delete s.plugins,await D.default.promises.writeFile(i,Fe.default.dump(s,{lineWidth:-1}));let l=(s.plugins??[]).map(m=>m.spec),g=e.containingTypeScript||e.containingTypeScriptInPackages;Ct(e,l,g,"@yarnpkg/plugin-typescript"),g&&!e.requiringNodeModules&&v("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),Ct(e,l,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),v("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)})}function yr(e,t){let r=U("npm",["show",e,"versions","--json"],t),n=JSON.parse(r);return n[n.length-1]}function Ct(e,t,r,n){r!==t.includes(n)&&v("yarn",["plugin",r?"import":"remove",n],e.dirPath)}function $t(e){let[t]=e.split(".");return Number(t)}async function Tt(e){return u.function("setupLabels",async()=>{if(!ee)return;let[t,r]=E.getOrgAndName(e.repository??"");if(!(!t||!r)&&!(t!=="WillBooster"&&t!=="WillBoosterLab"))try{await d(t,r,"d1: x-easy :hedgehog:","EDE9FE"),await d(t,r,"d2: easy :rabbit2:","DDD6FE"),await d(t,r,"d3: medium :ox:","C4B5FD"),await d(t,r,"d4: hard :squid:","A78BFA"),await d(t,r,"d5: x-hard :whale2:","8B5CF6"),await d(t,r,"p1: critical :fire::fire::fire:","EF4444"),await d(t,r,"p2: urgent :fire::fire:","F87171"),await d(t,r,"p3: important :fire:","FCA5A5"),await d(t,r,"p4: nice to have :droplet:","FECACA"),await d(t,r,"r: blitz","5300bc"),await d(t,r,"r: firebase","ffca28"),await d(t,r,"r: prisma","0c344b"),await d(t,r,"r: react","61dafb"),await d(t,r,"r: svelte","ff3e00"),await d(t,r,"r: semantic-release","494949"),await d(t,r,"ready :rocket:","22C55E"),await d(t,r,"review requested :mag:","FBCA04"),await d(t,r,"released :bookmark:","6366F1"),await d(t,r,"s: 0.5h :clock1230:","F3F4F6"),await d(t,r,"s: 1h :clock1:","E5E7EB"),await d(t,r,"s: 2h :clock2:","D1D5DB"),await d(t,r,"s: 3h :clock3:","9CA3AF"),await d(t,r,"s: 5h :clock5:","6B7280"),await d(t,r,"s: 8h :clock8:","4B5563"),await d(t,r,"s: 13h :clock1:","374151"),await d(t,r,"t: build :hammer:","BFDBFE"),await d(t,r,"t: chore :broom:","BFDBFE"),await d(t,r,"t: ci :construction_worker:","BFDBFE"),await d(t,r,"t: docs :memo:","BFDBFE"),await d(t,r,"t: feat :sparkles:","BFDBFE"),await d(t,r,"t: fix :bug:","BFDBFE"),await d(t,r,"t: perf :zap:","BFDBFE"),await d(t,r,"t: refactor :recycle:","BFDBFE"),await d(t,r,"t: style :lipstick:","BFDBFE"),await d(t,r,"t: test :test_tube:","BFDBFE"),await d(t,r,"project","24292F"),await _(t,r,"bug"),await _(t,r,"documentation"),await _(t,r,"duplicate"),await _(t,r,"enhancement"),await _(t,r,"good first issue"),await _(t,r,"help wanted"),await _(t,r,"invalid"),await _(t,r,"question"),await _(t,r,"wontfix"),await _(t,r,"ready"),await _(t,r,"review requested"),await _(t,r,"released"),await _(t,r,"semantic-release")}catch(n){console.warn("Skip setupLabels due to:",(n==null?void 0:n.stack)??n)}})}async function d(e,t,r,n){try{await C.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:r,color:n})}catch{await C.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:r,color:n})}}async function _(e,t,r){try{await C.request("DELETE /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:r})}catch{}}var jt=c(require("dotenv")),B=c(require("libsodium-wrappers"));var hr=["READY_DISCORD_WEBHOOK_URL"];async function Et(e){return u.function("setupSecrets",async()=>{if(!ee)return;let[t,r]=E.getOrgAndName(e.repository??"");if(!t||!r||t!=="WillBoosterLab")return;let n=jt.default.config().parsed||{};if(Object.keys(n).length!==0)try{for(let o of hr)try{await C.request("DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:r,secret_name:o})}catch{}let a=await C.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:r}),{key:i,key_id:s}=a.data;await B.default.ready;for(let[o,l]of Object.entries(n)){if(e.publicRepo&&o==="GH_BOT_PAT"||!e.publicRepo&&o==="PUBLIC_GH_BOT_PAT")continue;let g=B.default.from_base64(i,B.default.base64_variants.ORIGINAL),f=B.default.from_string(l),y=B.default.crypto_box_seal(f,g),m=B.default.to_base64(y,B.default.base64_variants.ORIGINAL);await C.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:r,secret_name:o,encrypted_value:m,key_id:s})}}catch(a){console.warn("Skip setupSecrets due to:",(a==null?void 0:a.stack)??a)}})}async function Ot(e){}var S=c(require("node:fs")),Y=c(require("node:fs/promises")),P=c(require("node:path")),N=c(require("glob")),Bt=c(require("js-yaml")),Nt=require("simple-git");async function Ce(e){var r;let t=P.default.resolve(e,"package.json");try{let n=S.default.existsSync(t),a={},i={},s={};if(n){let F=S.default.readFileSync(t,"utf8");s=JSON.parse(F),a=s.dependencies??{},i=s.devDependencies??{}}let o=!0;try{let F=P.default.resolve(e,".yarnrc.yml"),x=Bt.default.load(await Y.default.readFile(F,"utf8"));o=!x.nodeLinker||x.nodeLinker==="node-modules"}catch{}let l=[],g=[];try{let F=P.default.resolve(e,".releaserc.json"),x=JSON.parse(await Y.default.readFile(F,"utf8"));l=(x==null?void 0:x.branches)||[],g=((r=x==null?void 0:x.plugins)==null?void 0:r.flat())||[]}catch{}let f=P.default.basename(P.default.resolve(e,".."))!=="packages"||!S.default.existsSync(P.default.resolve(e,"..","..","package.json")),y;f&&(y=await Pr(e,s));let m;try{m=await Y.default.readFile(P.default.resolve(e,".tool-versions"),"utf8")}catch{try{m="nodejs "+(await Y.default.readFile(P.default.resolve(e,".node-version"),"utf8")).trim()}catch{}}let w={dirPath:e,root:f,publicRepo:(y==null?void 0:y.private)===!1,referredByOtherRepo:!!s.files,repository:y!=null&&y.full_name?`github:${y==null?void 0:y.full_name}`:void 0,willBoosterConfigs:t.includes(`${P.default.sep}willbooster-configs`),containingSubPackageJsons:N.default.sync("packages/**/package.json",{cwd:e}).length>0,containingDockerfile:S.default.existsSync(P.default.resolve(e,"Dockerfile"))||S.default.existsSync(P.default.resolve(e,"docker-compose.yml")),containingGemfile:S.default.existsSync(P.default.resolve(e,"Gemfile")),containingGoMod:S.default.existsSync(P.default.resolve(e,"go.mod")),containingPackageJson:S.default.existsSync(P.default.resolve(e,"package.json")),containingPoetryLock:S.default.existsSync(P.default.resolve(e,"poetry.lock")),containingPomXml:S.default.existsSync(P.default.resolve(e,"pom.xml")),containingPubspecYaml:S.default.existsSync(P.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:S.default.existsSync(P.default.resolve(e,"template.yaml")),containingJavaScript:N.default.sync("@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}",{cwd:e}).length>0,containingTypeScript:N.default.sync("@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}",{cwd:e}).length>0,containingJsxOrTsx:N.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:N.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}",{cwd:e}).length>0,containingTypeScriptInPackages:N.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}",{cwd:e}).length>0,containingJsxOrTsxInPackages:N.default.sync("packages/**/@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,depending:{blitz:(a.blitz||i.blitz||"").replace("^","")[0],firebase:!!i["firebase-tools"],prisma:!!i.prisma,reactNative:!!a["react-native"],semanticRelease:!!(i["semantic-release"]||l.length>0||g.length>0),storybook:!!i["@storybook/react"]},release:{branches:l,github:g.includes("@semantic-release/github"),npm:g.includes("@semantic-release/npm")},requiringNodeModules:o,versionsText:m};if(w.eslintBase=wr(w),w.containingGemfile||w.containingGoMod||w.containingPackageJson||w.containingPoetryLock||w.containingPomXml||w.containingPubspecYaml||w.containingTemplateYaml)return w}catch{}}function wr(e){if(e.containingTypeScript)return e.containingJsxOrTsx?"@willbooster/eslint-config-ts-react":"@willbooster/eslint-config-ts";if(e.containingJsxOrTsx)return"@willbooster/eslint-config-js-react";if(e.containingJavaScript)return"@willbooster/eslint-config-js"}async function Pr(e,t){var o,l,g;let a=(await(0,Nt.simpleGit)(e).getRemotes(!0)).find(f=>f.name==="origin"),i=((o=a==null?void 0:a.refs)==null?void 0:o.fetch)??((l=a==null?void 0:a.refs)==null?void 0:l.push);if(typeof i=="string"){let f=await Dt(i);if(f)return f}let s=((g=t.repository)==null?void 0:g.url)??t.repository;if(typeof s=="string"){let f=await Dt(s);if(f&&f.message!=="Not Found")return f}}async function Dt(e){let[t,r]=E.getOrgAndName(e);if(!t||!r)return;let n={full_name:`${t}/${r}`};try{let a=await C.request("GET /repos/{owner}/{repo}",{owner:t,repo:r});Object.assign(n,a.data)}catch{}return n}async function vr(){let e=await(0,Jt.default)(process.argv.slice(2)).command("wbfy <paths...>","Generate/update project files for WillBooster").demandCommand(1).alias("d","skipDeps").boolean("skipDeps").default("skipDeps",!1).describe("skipDeps","Skip dependency installation").alias("v","verbose").boolean("verbose").default("verbose",!1).argv;j.isVerbose=e.verbose;for(let t of e._){if(typeof t=="number")continue;let r=await Ce(t);if(!r){console.error(`there is no valid package.json in ${t}`);continue}let n=r.containingSubPackageJsons?It.default.sync("packages/*",{cwd:t}).map(l=>Wt.default.resolve(t,l)):[],i=(await Promise.all(n.map(l=>Ce(l)))).filter(l=>!!l),s=[r,...i];if(j.isVerbose)for(let l of s)console.info(l);await je(r),await Rt(r),await Promise.all([Oe(r),Ke(r),nt(r),ot(r),ke(r),pt(r),yt(r),dt(r),Ft(r),Tt(r),Et(r),Ot(r)]),await p.promiseAll();let o=[];for(let l of s)await Ve(l,r),await p.promiseAll(),!(!l.root&&!l.containingPackageJson)&&(await lt(l),await it(l,r,e.skipDeps),o.push(ke(l)),(l.containingTypeScript||l.containingTypeScriptInPackages)&&o.push(kt(l,r)),(l.containingJavaScript||l.containingJavaScriptInPackages||l.containingTypeScript||l.containingTypeScriptInPackages)&&(r.willBoosterConfigs||o.push(He(l,r)),o.push(Le(l))));await Promise.all(o),await p.promiseAll(),v("yarn",["cleanup"],t),v("yarn",["install"],t)}}vr().then();
275
+ `),t}var mt=c(require("node:fs")),dt=c(require("node:path")),Se=c(require("deepmerge"));async function ut(e){return d.function("generateReleaserc",async()=>{let t=dt.default.resolve(e.dirPath,".releaserc.json");try{let r=JSON.parse(await mt.default.promises.readFile(t,"utf8")),n=(r==null?void 0:r.plugins)||[];for(let i=0;i<n.length;i++){let s=Array.isArray(n[i])?n[i][0]:n[i],o=Array.isArray(n[i])&&n[i][1]||{};s==="@semantic-release/commit-analyzer"?n[i]=["@semantic-release/commit-analyzer",Se.default.all([o,{preset:"conventionalcommits"}],{arrayMerge:W})]:s==="@semantic-release/github"&&(n[i]=["@semantic-release/github",Se.default.all([o,{successComment:!1,labels:["r: semantic-release"],releasedLabels:["released :bookmark:"]}],{arrayMerge:W})])}let a=JSON.stringify(r);await p.run(()=>h.generateFile(t,a))}catch{}})}var oe=c(require("node:fs")),se=c(require("node:path")),ft=c(require("deepmerge")),gt=c(require("lodash.clonedeep"));var pr={extends:["@willbooster"]};async function yt(e){return d.function("generateRenovateJson",async()=>{let t=(0,gt.default)(pr),r=se.default.resolve(e.dirPath,".renovaterc.json");try{let a=await oe.default.promises.readFile(r,"utf8"),i=JSON.parse(a);t=ft.default.all([t,i,t],{arrayMerge:W})}catch{}await p.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,".dependabot"),{force:!0})),await p.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,"renovate.json"),{force:!0}));let n=JSON.stringify(t);await p.run(()=>h.generateFile(r,n))})}var ht=c(require("node:fs")),wt=c(require("node:path")),Pt=c(require("deepmerge")),vt=c(require("lodash.clonedeep"));function H(e){let t=Object.entries(e).sort(([r],[n])=>r.localeCompare(n));for(let[r,n]of t)delete e[r],e[r]=n;return e}var mr={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["./node_modules/@types","./@types"]},include:["src/**/*","__tests__/**/*","scripts/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","packages/*/scripts/**/*"]},dr={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["../../node_modules/@types","../../@types","./@types"]},include:["src/**/*","__tests__/**/*","scripts/**/*"]};async function kt(e,t){return d.function("generateTsconfig",async()=>{var i,s;if(t.depending.blitz)return;let r=(0,vt.default)(e.root?mr:dr);!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete r.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(r.include=r.include.filter(o=>!o.startsWith("packages/*/")));let n=wt.default.resolve(e.dirPath,"tsconfig.json");try{let o=await ht.default.promises.readFile(n,"utf8"),l=JSON.parse(o);l.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete l.extends,(i=r==null?void 0:r.compilerOptions)==null||delete i.target,(s=r==null?void 0:r.compilerOptions)==null||delete s.module,l.jsx&&delete r.jsx,r=Pt.default.all([r,l,r],{arrayMerge:W}),r.include=r.include.filter(g=>!g.includes("@types"))}catch{}H(r.compilerOptions);let a=JSON.stringify(r);await p.run(()=>h.generateFile(n,a))})}var T=c(require("node:fs")),R=c(require("node:path")),_t=c(require("deepmerge")),Fe=c(require("js-yaml")),St=c(require("lodash.clonedeep"));var ur={test:{name:"Test",on:{pull_request:null,push:{branches:["main","wbfy","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},release:{name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},wbfy:{name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},"wbfy-merge":{name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},"semantic-pr":{name:"Lint PR title",on:{pull_request_target:{types:["opened","edited","synchronize"]}},jobs:{"semantic-pr":{uses:"WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main"}}},"notify-ready":{name:"Notify ready",on:{issues:{types:["labeled"]}},jobs:{"notify-ready":{uses:"WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main",secrets:{DISCORD_WEBHOOK_URL:"${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}"}}}},"close-comment":{name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}},"add-issue-to-project":{name:"Add issue to github project",on:{issues:{types:["labeled"]}},jobs:{"add-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",secrets:{GH_PROJECT_URL:"${{ secrets.GH_PROJECT_URL }}",GH_BOT_PAT:"${{ secrets.GH_BOT_PAT }}"}}}}};async function Ft(e){return d.function("generateWorkflow",async()=>{var i;let t=R.default.resolve(e.dirPath,".github","workflows");await T.default.promises.mkdir(t,{recursive:!0});let r=R.default.resolve(e.dirPath,".github","semantic.yml");await p.run(()=>T.default.promises.rm(r,{force:!0,recursive:!0}));let a=(await T.default.promises.readdir(t,{withFileTypes:!0})).filter(s=>s.isFile()&&s.name.endsWith(".yml")).map(s=>s.name);e.depending.semanticRelease&&a.push("release.yml"),(e.publicRepo||(i=e.repository)!=null&&i.startsWith("github:WillBoosterLab/"))&&a.push("notify-ready.yml"),a.push("test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml","add-issue-to-project.yml");for(let s of a){let o=R.default.basename(s,".yml");await p.run(()=>fr(e,t,o))}})}async function fr(e,t,r){var i,s;let n=(0,St.default)(ur[r]||{}),a=R.default.join(t,`${r}.yml`);try{let o=await T.default.promises.readFile(a,"utf8"),l=Fe.default.load(o);n=_t.default.all([n,l,n],{arrayMerge:X})}catch{}for(let o of Object.values(n.jobs)){if(!((s=(i=o.uses)==null?void 0:i.includes)!=null&&s.call(i,"/reusable-workflows/")))return;gr(e,o,r)}switch(r){case"release":{if(n.on.schedule)delete n.on.push;else if(e.release.branches.length>0)n.on.push.branches=e.release.branches;else{await T.default.promises.rm(R.default.join(t,"release.yml"),{force:!0});return}break}case"wbfy":{bt(n,20,24);break}case"wbfy-merge":{bt(n,0,4);break}}if(await xt(n,a),r==="release")await T.default.promises.rm(R.default.join(t,"semantic-release.yml"),{force:!0});else if(r==="sync"){if(await T.default.promises.rm(R.default.join(t,"sync-init.yml"),{force:!0}),!n.jobs.sync)return;n.jobs["sync-force"]=n.jobs.sync;let o=n.jobs.sync.with.sync_params_without_dest;if(!o)return;n.jobs.sync.with.sync_params_without_dest=`--force ${o}`,n.name="Force to Sync",n.on={workflow_dispatch:null},delete n.jobs.sync,await xt(n,R.default.join(t,"sync-force.yml"))}}function gr(e,t,r){var n,a,i;if(t.with||={},t.secrets||={},(e.release.github&&r==="test"||r==="release"||r==="wbfy"||r==="wbfy-merge")&&(t.secrets.GH_TOKEN=e.publicRepo?"${{ secrets.PUBLIC_GH_BOT_PAT }}":"${{ secrets.GH_BOT_PAT }}"),e.release.npm&&(r==="release"||r==="test")&&(t.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),t.secrets.FIREBASE_TOKEN&&(t.secrets.GCP_SA_KEY_JSON_FOR_FIREBASE="${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}",delete t.secrets.FIREBASE_TOKEN),(t.secrets.DISCORD_WEBHOOK_URL&&(r==="release"||r.startsWith("deploy"))||t.with.server_url&&r.startsWith("deploy"))&&(t.secrets.DISCORD_WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}"),r==="sync"){let s=(n=t.with)==null?void 0:n.sync_params_without_dest;s&&(t.with.sync_params_without_dest=s.replace("sync ",""))}if((a=e.repository)!=null&&a.startsWith("github:WillBooster/")?t.uses=t.uses.replace("WillBoosterLab/","WillBooster/"):(i=e.repository)!=null&&i.startsWith("github:WillBoosterLab/")&&(t.uses=t.uses.replace("WillBooster/","WillBoosterLab/")),delete t.with.non_self_hosted,delete t.with.notify_discord,delete t.with.require_fly,delete t.with.require_gcloud,t.with.dot_env_path===".env"&&delete t.with.dot_env_path,e.containingDockerfile&&r.startsWith("deploy")&&(t.with.cpu_arch="X64"),r==="release"||r==="test"||r==="wbfy"||r==="wbfy-merge"||r.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length>0?H(t.with):delete t.with,Object.keys(t.secrets).length>0){let s=H(t.secrets);delete t.secrets,t.secrets=s}else delete t.secrets}function bt(e,t,r){var l,g;let[n,a]=(((g=(l=e.on.schedule)==null?void 0:l[0])==null?void 0:g.cron)??"").split(" ").map(Number);if(n!==0&&Number.isInteger(a)){let f=(a+9)%24,y=t<r?t<=f&&f<r:t<=f||f<r;if(y)return;console.log("setSchedule:",e,n,a,y,f,t,r)}else console.log("setSchedule:",e,n,a);let i=1+Math.floor(Math.random()*59),s=t+Math.floor(Math.random()*(r-t)),o=`${i} ${(s-9+24)%24} * * *`;e.on.schedule=[{cron:o}]}async function xt(e,t){let r=Fe.default.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await T.default.promises.writeFile(t,r)}var D=c(require("node:fs")),L=c(require("node:path")),Ce=c(require("js-yaml"));async function Rt(e){return d.function("generateYarnrcYml",async()=>{var f,y;let t=U("yarn",["--version"],e.dirPath),r=yr("@yarnpkg/cli",e.dirPath);$t(t)<=$t(r)&&t!==r&&v("yarn",["set","version",r],e.dirPath,1);let n=L.default.join(e.dirPath,".yarn","releases");await D.default.promises.mkdir(n,{recursive:!0});for(let m of await D.default.promises.readdir(n))m.startsWith("yarn-")&&!m.startsWith(`yarn-${r}.`)&&(await p.run(()=>D.default.promises.rm(L.default.join(n,m))),console.log("Removed",L.default.join(n,m)));let a=L.default.resolve(e.dirPath,".yarnrc");await p.run(()=>D.default.promises.rm(a,{force:!0}));let i=L.default.resolve(e.dirPath,".yarnrc.yml"),s=Ce.default.load(await D.default.promises.readFile(i,"utf8"));s.defaultSemverRangePrefix="",e.requiringNodeModules&&(s.nodeLinker="node-modules",s.nmMode="hardlinks-global",s.enableGlobalCache=!0);let o=((f=s.plugins)==null?void 0:f.length)??0;if(s.plugins=((y=s.plugins)==null?void 0:y.filter(m=>m.path!==".yarn/plugins/undefined.cjs"))??[],s.plugins.length!==o){let m=L.default.resolve(e.dirPath,".yarnrc","undefined.cjs");await p.run(()=>D.default.promises.rm(m,{force:!0}))}s.plugins.length===0&&delete s.plugins,await D.default.promises.writeFile(i,Ce.default.dump(s,{lineWidth:-1}));let l=(s.plugins??[]).map(m=>m.spec),g=e.containingTypeScript||e.containingTypeScriptInPackages;Ct(e,l,g,"@yarnpkg/plugin-typescript"),g&&!e.requiringNodeModules&&v("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),Ct(e,l,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),v("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)})}function yr(e,t){let r=U("npm",["show",e,"versions","--json"],t),n=JSON.parse(r);return n[n.length-1]}function Ct(e,t,r,n){r!==t.includes(n)&&v("yarn",["plugin",r?"import":"remove",n],e.dirPath)}function $t(e){let[t]=e.split(".");return Number(t)}async function Tt(e){return d.function("setupLabels",async()=>{if(!ee)return;let[t,r]=E.getOrgAndName(e.repository??"");if(!(!t||!r)&&!(t!=="WillBooster"&&t!=="WillBoosterLab"))try{await u(t,r,"d1: x-easy :hedgehog:","EDE9FE"),await u(t,r,"d2: easy :rabbit2:","DDD6FE"),await u(t,r,"d3: medium :ox:","C4B5FD"),await u(t,r,"d4: hard :squid:","A78BFA"),await u(t,r,"d5: x-hard :whale2:","8B5CF6"),await u(t,r,"p1: critical :fire::fire::fire:","EF4444"),await u(t,r,"p2: urgent :fire::fire:","F87171"),await u(t,r,"p3: important :fire:","FCA5A5"),await u(t,r,"p4: nice to have :droplet:","FECACA"),await u(t,r,"r: blitz","5300bc"),await u(t,r,"r: firebase","ffca28"),await u(t,r,"r: prisma","0c344b"),await u(t,r,"r: react","61dafb"),await u(t,r,"r: svelte","ff3e00"),await u(t,r,"r: semantic-release","494949"),await u(t,r,"ready :rocket:","22C55E"),await u(t,r,"review requested :mag:","FBCA04"),await u(t,r,"released :bookmark:","6366F1"),await u(t,r,"s: 0.5h :clock1230:","F3F4F6"),await u(t,r,"s: 1h :clock1:","E5E7EB"),await u(t,r,"s: 2h :clock2:","D1D5DB"),await u(t,r,"s: 3h :clock3:","9CA3AF"),await u(t,r,"s: 5h :clock5:","6B7280"),await u(t,r,"s: 8h :clock8:","4B5563"),await u(t,r,"s: 13h :clock1:","374151"),await u(t,r,"t: build :hammer:","BFDBFE"),await u(t,r,"t: chore :broom:","BFDBFE"),await u(t,r,"t: ci :construction_worker:","BFDBFE"),await u(t,r,"t: docs :memo:","BFDBFE"),await u(t,r,"t: feat :sparkles:","BFDBFE"),await u(t,r,"t: fix :bug:","BFDBFE"),await u(t,r,"t: perf :zap:","BFDBFE"),await u(t,r,"t: refactor :recycle:","BFDBFE"),await u(t,r,"t: style :lipstick:","BFDBFE"),await u(t,r,"t: test :test_tube:","BFDBFE"),await u(t,r,"project","24292F"),await _(t,r,"bug"),await _(t,r,"documentation"),await _(t,r,"duplicate"),await _(t,r,"enhancement"),await _(t,r,"good first issue"),await _(t,r,"help wanted"),await _(t,r,"invalid"),await _(t,r,"question"),await _(t,r,"wontfix"),await _(t,r,"ready"),await _(t,r,"review requested"),await _(t,r,"released"),await _(t,r,"semantic-release")}catch(n){console.warn("Skip setupLabels due to:",(n==null?void 0:n.stack)??n)}})}async function u(e,t,r,n){try{await C.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:r,color:n})}catch{await C.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:r,color:n})}}async function _(e,t,r){try{await C.request("DELETE /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:r})}catch{}}var jt=c(require("dotenv")),B=c(require("libsodium-wrappers"));var hr=["READY_DISCORD_WEBHOOK_URL"];async function Et(e){return d.function("setupSecrets",async()=>{if(!ee)return;let[t,r]=E.getOrgAndName(e.repository??"");if(!t||!r||t!=="WillBoosterLab")return;let n=jt.default.config().parsed||{};if(Object.keys(n).length!==0)try{for(let o of hr)try{await C.request("DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:r,secret_name:o})}catch{}let a=await C.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:r}),{key:i,key_id:s}=a.data;await B.default.ready;for(let[o,l]of Object.entries(n)){if(e.publicRepo&&o==="GH_BOT_PAT"||!e.publicRepo&&o==="PUBLIC_GH_BOT_PAT")continue;let g=B.default.from_base64(i,B.default.base64_variants.ORIGINAL),f=B.default.from_string(l),y=B.default.crypto_box_seal(f,g),m=B.default.to_base64(y,B.default.base64_variants.ORIGINAL);await C.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:r,secret_name:o,encrypted_value:m,key_id:s})}}catch(a){console.warn("Skip setupSecrets due to:",(a==null?void 0:a.stack)??a)}})}async function Ot(e){}var S=c(require("node:fs")),Y=c(require("node:fs/promises")),P=c(require("node:path")),N=c(require("glob")),Bt=c(require("js-yaml")),Nt=require("simple-git");async function $e(e){var r;let t=P.default.resolve(e,"package.json");try{let n=S.default.existsSync(t),a={},i={},s={};if(n){let F=S.default.readFileSync(t,"utf8");s=JSON.parse(F),a=s.dependencies??{},i=s.devDependencies??{}}let o=!0;try{let F=P.default.resolve(e,".yarnrc.yml"),x=Bt.default.load(await Y.default.readFile(F,"utf8"));o=!x.nodeLinker||x.nodeLinker==="node-modules"}catch{}let l=[],g=[];try{let F=P.default.resolve(e,".releaserc.json"),x=JSON.parse(await Y.default.readFile(F,"utf8"));l=(x==null?void 0:x.branches)||[],g=((r=x==null?void 0:x.plugins)==null?void 0:r.flat())||[]}catch{}let f=P.default.basename(P.default.resolve(e,".."))!=="packages"||!S.default.existsSync(P.default.resolve(e,"..","..","package.json")),y;f&&(y=await Pr(e,s));let m;try{m=await Y.default.readFile(P.default.resolve(e,".tool-versions"),"utf8")}catch{try{m="nodejs "+(await Y.default.readFile(P.default.resolve(e,".node-version"),"utf8")).trim()}catch{}}let w={dirPath:e,root:f,publicRepo:(y==null?void 0:y.private)===!1,referredByOtherRepo:!!s.files,repository:y!=null&&y.full_name?`github:${y==null?void 0:y.full_name}`:void 0,willBoosterConfigs:t.includes(`${P.default.sep}willbooster-configs`),containingSubPackageJsons:N.default.sync("packages/**/package.json",{cwd:e}).length>0,containingDockerfile:S.default.existsSync(P.default.resolve(e,"Dockerfile"))||S.default.existsSync(P.default.resolve(e,"docker-compose.yml")),containingGemfile:S.default.existsSync(P.default.resolve(e,"Gemfile")),containingGoMod:S.default.existsSync(P.default.resolve(e,"go.mod")),containingPackageJson:S.default.existsSync(P.default.resolve(e,"package.json")),containingPoetryLock:S.default.existsSync(P.default.resolve(e,"poetry.lock")),containingPomXml:S.default.existsSync(P.default.resolve(e,"pom.xml")),containingPubspecYaml:S.default.existsSync(P.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:S.default.existsSync(P.default.resolve(e,"template.yaml")),containingJavaScript:N.default.sync("@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}",{cwd:e}).length>0,containingTypeScript:N.default.sync("@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}",{cwd:e}).length>0,containingJsxOrTsx:N.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:N.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}",{cwd:e}).length>0,containingTypeScriptInPackages:N.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}",{cwd:e}).length>0,containingJsxOrTsxInPackages:N.default.sync("packages/**/@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,depending:{blitz:(a.blitz||i.blitz||"").replace("^","")[0],firebase:!!i["firebase-tools"],prisma:!!i.prisma,reactNative:!!a["react-native"],semanticRelease:!!(i["semantic-release"]||l.length>0||g.length>0),storybook:!!i["@storybook/react"]},release:{branches:l,github:g.includes("@semantic-release/github"),npm:g.includes("@semantic-release/npm")},requiringNodeModules:o,versionsText:m};if(w.eslintBase=wr(w),w.containingGemfile||w.containingGoMod||w.containingPackageJson||w.containingPoetryLock||w.containingPomXml||w.containingPubspecYaml||w.containingTemplateYaml)return w}catch{}}function wr(e){if(e.containingTypeScript)return e.containingJsxOrTsx?"@willbooster/eslint-config-ts-react":"@willbooster/eslint-config-ts";if(e.containingJsxOrTsx)return"@willbooster/eslint-config-js-react";if(e.containingJavaScript)return"@willbooster/eslint-config-js"}async function Pr(e,t){var o,l,g;let a=(await(0,Nt.simpleGit)(e).getRemotes(!0)).find(f=>f.name==="origin"),i=((o=a==null?void 0:a.refs)==null?void 0:o.fetch)??((l=a==null?void 0:a.refs)==null?void 0:l.push);if(typeof i=="string"){let f=await Dt(i);if(f)return f}let s=((g=t.repository)==null?void 0:g.url)??t.repository;if(typeof s=="string"){let f=await Dt(s);if(f&&f.message!=="Not Found")return f}}async function Dt(e){let[t,r]=E.getOrgAndName(e);if(!t||!r)return;let n={full_name:`${t}/${r}`};try{let a=await C.request("GET /repos/{owner}/{repo}",{owner:t,repo:r});Object.assign(n,a.data)}catch{}return n}async function vr(){let e=await(0,Jt.default)(process.argv.slice(2)).command("wbfy <paths...>","Generate/update project files for WillBooster").demandCommand(1).alias("d","skipDeps").boolean("skipDeps").default("skipDeps",!1).describe("skipDeps","Skip dependency installation").alias("v","verbose").boolean("verbose").default("verbose",!1).argv;j.isVerbose=e.verbose;for(let t of e._){if(typeof t=="number")continue;let r=await $e(t);if(!r){console.error(`there is no valid package.json in ${t}`);continue}let n=r.containingSubPackageJsons?It.default.sync("packages/*",{cwd:t}).map(l=>Wt.default.resolve(t,l)):[],i=(await Promise.all(n.map(l=>$e(l)))).filter(l=>!!l),s=[r,...i];if(j.isVerbose)for(let l of s)console.info(l);await Ee(r),await Rt(r),await Promise.all([De(r),qe(r),nt(r),ot(r),be(r),pt(r),yt(r),ut(r),Ft(r),Tt(r),Et(r),Ot(r)]),await p.promiseAll();let o=[];for(let l of s)await Xe(l,r),await p.promiseAll(),!(!l.root&&!l.containingPackageJson)&&(await lt(l),await it(l,r,e.skipDeps),o.push(be(l)),(l.containingTypeScript||l.containingTypeScriptInPackages)&&o.push(kt(l,r)),(l.containingJavaScript||l.containingJavaScriptInPackages||l.containingTypeScript||l.containingTypeScriptInPackages)&&(r.willBoosterConfigs||o.push(Ye(l,r)),o.push(Ae(l))));await Promise.all(o),await p.promiseAll(),v("yarn",["cleanup"],t),v("yarn",["install"],t)}}vr().then();
276
276
  //# sourceMappingURL=index.min.cjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/generators/asdf.ts", "../src/options.ts", "../src/logger.ts", "../src/utils/promisePool.ts", "../src/utils/spawnUtil.ts", "../src/generators/editorconfig.ts", "../src/utils/extensions.ts", "../src/utils/fsUtil.ts", "../src/generators/eslintignore.ts", "../src/utils/ignoreFileUtil.ts", "../src/generators/eslintrc.ts", "../src/utils/mergeUtil.ts", "../src/generators/gitattributes.ts", "../src/generators/gitignore.ts", "../src/generators/huskyrc.ts", "../src/generators/packageJson.ts", "../src/utils/eslintUtil.ts", "../src/utils/githubUtil.ts", "../src/utils/srcDirectories.ts", "../src/generators/idea.ts", "../src/generators/lintstagedrc.ts", "../src/generators/prettierignore.ts", "../src/generators/readme.ts", "../src/generators/releaserc.ts", "../src/generators/renovaterc.ts", "../src/generators/tsconfig.ts", "../src/utils/objectUtil.ts", "../src/generators/workflow.ts", "../src/generators/yarnrc.ts", "../src/github/label.ts", "../src/github/secret.ts", "../src/github/settings.ts", "../src/packageConfig.ts"],
4
- "sourcesContent": ["import path from 'node:path';\n\nimport glob from 'glob';\nimport yargs from 'yargs';\n\nimport { generateVersionConfigs } from './generators/asdf';\nimport { generateEditorconfig } from './generators/editorconfig';\nimport { generateEslintignore } from './generators/eslintignore';\nimport { generateEslintrc } from './generators/eslintrc';\nimport { generateGitattributes } from './generators/gitattributes';\nimport { generateGitignore } from './generators/gitignore';\nimport { generateHuskyrc } from './generators/huskyrc';\nimport { generateIdeaSettings } from './generators/idea';\nimport { generateLintstagedrc } from './generators/lintstagedrc';\nimport { generatePackageJson } from './generators/packageJson';\nimport { generatePrettierignore } from './generators/prettierignore';\nimport { generateReadme } from './generators/readme';\nimport { generateReleaserc } from './generators/releaserc';\nimport { generateRenovateJson } from './generators/renovaterc';\nimport { generateTsconfig } from './generators/tsconfig';\nimport { generateWorkflow } from './generators/workflow';\nimport { generateYarnrcYml } from './generators/yarnrc';\nimport { setupLabels } from './github/label';\nimport { setupSecrets } from './github/secret';\nimport { setupSettings } from './github/settings';\nimport { options } from './options';\nimport { getPackageConfig, PackageConfig } from './packageConfig';\nimport { promisePool } from './utils/promisePool';\nimport { spawnSync } from './utils/spawnUtil';\n\nasync function main(): Promise<void> {\n const argv = await yargs(process.argv.slice(2))\n .command('wbfy <paths...>', 'Generate/update project files for WillBooster')\n .demandCommand(1)\n .alias('d', 'skipDeps')\n .boolean('skipDeps')\n .default('skipDeps', false)\n .describe('skipDeps', 'Skip dependency installation')\n .alias('v', 'verbose')\n .boolean('verbose')\n .default('verbose', false).argv;\n options.isVerbose = argv.verbose;\n\n for (const rootDirPath of argv._) {\n if (typeof rootDirPath === 'number') continue;\n\n const rootConfig = await getPackageConfig(rootDirPath);\n if (!rootConfig) {\n console.error(`there is no valid package.json in ${rootDirPath}`);\n continue;\n }\n\n const subDirPaths = rootConfig.containingSubPackageJsons\n ? glob.sync('packages/*', { cwd: rootDirPath }).map((subDirPath) => path.resolve(rootDirPath, subDirPath))\n : [];\n const nullableSubPackageConfigs = await Promise.all(subDirPaths.map((subDirPath) => getPackageConfig(subDirPath)));\n const subPackageConfigs = nullableSubPackageConfigs.filter((config) => !!config) as PackageConfig[];\n const allPackageConfigs = [rootConfig, ...subPackageConfigs];\n\n if (options.isVerbose) {\n for (const config of allPackageConfigs) {\n console.info(config);\n }\n }\n\n // Install tools via asdf at first\n await generateVersionConfigs(rootConfig);\n // Install yarn berry\n await generateYarnrcYml(rootConfig);\n await Promise.all([\n generateEditorconfig(rootConfig),\n generateGitattributes(rootConfig),\n generateHuskyrc(rootConfig),\n generateIdeaSettings(rootConfig),\n generateLintstagedrc(rootConfig),\n generateReadme(rootConfig),\n generateRenovateJson(rootConfig),\n generateReleaserc(rootConfig),\n generateWorkflow(rootConfig),\n setupLabels(rootConfig),\n setupSecrets(rootConfig),\n setupSettings(rootConfig),\n ]);\n await promisePool.promiseAll();\n\n const promises: Promise<void>[] = [];\n for (const config of allPackageConfigs) {\n await generateGitignore(config, rootConfig);\n await promisePool.promiseAll();\n if (!config.root && !config.containingPackageJson) {\n continue;\n }\n await generatePrettierignore(config);\n await generatePackageJson(config, rootConfig, argv.skipDeps);\n\n promises.push(generateLintstagedrc(config));\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n promises.push(generateTsconfig(config, rootConfig));\n }\n if (\n config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages\n ) {\n if (!rootConfig.willBoosterConfigs) {\n promises.push(generateEslintrc(config, rootConfig));\n }\n promises.push(generateEslintignore(config));\n }\n }\n await Promise.all(promises);\n await promisePool.promiseAll();\n\n spawnSync('yarn', ['cleanup'], rootDirPath);\n // 'yarn install' should be after `yarn cleanup` because yarn berry generates yarn.lock\n // corresponding to the contents of dependant sub-package in monorepo\n spawnSync('yarn', ['install'], rootDirPath);\n }\n}\n\nmain().then();\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateVersionConfigs(config: PackageConfig): Promise<void> {\n return logger.function('generateVersionConfigs', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n if (!config.versionsText) return;\n\n const lines: string[] = [];\n for (const versionText of config.versionsText.trim().split('\\n')) {\n const line = versionText.trim();\n if (line && line.split(/\\s+/)[0] !== 'nodejs') {\n lines.push(line);\n continue;\n }\n\n const [, version] = line.split(/\\s+/);\n await promisePool.run(() => fs.promises.writeFile(path.resolve(config.dirPath, '.node-version'), version));\n }\n if (config.containingPoetryLock) {\n updateLine('poetry 1.2.2', 0, lines);\n if (!fs.existsSync(path.resolve(config.dirPath, '.python-version'))) {\n updateLine('python 3.9.15', 0, lines);\n }\n }\n if (config.depending.firebase) {\n updateLine('java adoptopenjdk-17.0.5+8', 0, lines);\n }\n if (config.containingPackageJson) {\n const version = spawnSyncWithStringResult('npm', ['show', 'yarn', 'version'], config.dirPath);\n updateLine(`yarn ${version}`, lines.length, lines);\n }\n\n const toolVersionsPath = path.resolve(config.dirPath, '.tool-versions');\n await (lines.length > 0\n ? promisePool.run(() => fs.promises.writeFile(toolVersionsPath, lines.join('\\n') + '\\n'))\n : promisePool.run(() => fs.promises.rm(toolVersionsPath, { force: true })));\n await promisePool.promiseAll();\n spawnSync('asdf', ['plugin', 'update', '--all'], config.dirPath);\n spawnSync('asdf', ['install'], config.dirPath);\n}\n\nfunction updateLine(line: string, insertionIndex: number, lines: string[]): void {\n const [prefix] = line.split(' ');\n const index = lines.findIndex((l) => l.split(/\\s+/)[0] === prefix);\n if (index >= 0) {\n lines[index] = line;\n } else {\n lines.splice(insertionIndex, 0, line);\n }\n}\n", "class Options {\n isVerbose: boolean;\n\n constructor() {\n this.isVerbose = false;\n }\n}\n\nexport const options = new Options();\n", "import { options } from './options';\n\nclass Logger {\n async function(name: string, func: () => Promise<void>): Promise<void> {\n if (options.isVerbose) {\n console.info(`--------- ${name} start ---------`);\n }\n await func();\n if (options.isVerbose) {\n console.info(`---------- ${name} end ----------`);\n }\n }\n}\n\nexport const logger = new Logger();\n", "import { PromisePool } from 'minimal-promise-pool';\n\nexport const promisePool = new PromisePool();\n", "import child_process, { SpawnSyncOptions } from 'node:child_process';\n\nexport function spawnSync(command: string, args: string[], cwd: string, retry = 0): void {\n do {\n const [newCmd, newArgs, options] = getSpawnSyncArgs(command, args, cwd);\n console.log(`$ ${newCmd} ${newArgs.join(' ')} at ${options.cwd}`);\n const ret = child_process.spawnSync(newCmd, newArgs, options);\n if (ret.status === 0) break;\n } while (--retry >= 0);\n}\n\nexport function spawnSyncWithStringResult(command: string, args: string[], cwd: string): string {\n const [newCmd, newArgs, options] = getSpawnSyncArgs(command, args, cwd);\n options.stdio = 'pipe';\n const proc = child_process.spawnSync(newCmd, newArgs, options);\n const error = proc.stderr.toString().trim();\n if (error) {\n console.error(`${newCmd} [${newArgs.map((s) => `\"${s}\"`)}] caused the following error:\\n ${error}`);\n }\n return proc.stdout.toString().trim();\n}\n\nexport function getSpawnSyncArgs(command: string, args: string[], cwd: string): [string, string[], SpawnSyncOptions] {\n const env = { ...process.env };\n // Remove berry from PATH\n if (env.PATH && env.BERRY_BIN_FOLDER) {\n env.PATH = env.PATH.replace(`${env.BERRY_BIN_FOLDER}:`, '');\n }\n\n if (env.ASDF_DIR) {\n args = ['-l', '-c', `. ${env.ASDF_DIR}/asdf.sh && ${command} ${args.join(' ')}`];\n command = 'bash';\n }\n return [\n command,\n args,\n {\n cwd,\n env,\n shell: false,\n stdio: 'inherit',\n },\n ];\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n${generateExtensions(extensions.codeWith2IndentSize)}\nindent_size = 2\nindent_style = space\n\n${generateExtensions(extensions.codeWith4IndentSize)}\nindent_size = 4\nindent_style = space\n\n${generateExtensions(extensions.codeWith8IndentSize)}\nindent_size = 8\nindent_style = space\n\n${generateExtensions(extensions.markdownLike)}\nmax_line_length = off\ntrim_trailing_whitespace = false\n\n[{Makefile,*.mk}]\nindent_style = tab\n`;\n\nexport async function generateEditorconfig(config: PackageConfig): Promise<void> {\n return logger.function('generateEditorconfig', async () => {\n const filePath = path.resolve(config.dirPath, '.editorconfig');\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nfunction generateExtensions(extensions: string[]): string {\n return extensions.length > 1 ? `[*.{${extensions.join(',')}}]` : `[*.${extensions[0]}]`;\n}\n", "export const extensions = {\n codeWith2IndentSize: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\n 'cts',\n 'mts',\n 'ts',\n 'tsx',\n 'json',\n 'json5',\n 'cpp',\n 'dart',\n 'htm',\n 'html',\n 'pu',\n 'puml',\n 'rb',\n 'vue',\n 'yaml',\n 'yml',\n ].sort(),\n codeWith4IndentSize: ['go', 'gradle', 'py'].sort(),\n codeWith8IndentSize: ['sh'].sort(),\n markdownLike: ['md'].sort(),\n eslint: ['cjs', 'mjs', 'js', 'cts', 'mts', 'ts', 'tsx', 'jsx'].sort(),\n prettier: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\n 'cts',\n 'mts',\n 'ts',\n 'tsx',\n 'json',\n 'json5',\n 'css',\n 'htm',\n 'html',\n 'md',\n 'scss',\n 'vue',\n 'yaml',\n 'yml',\n ].sort(),\n};\n", "import fsp from 'node:fs/promises';\n\nexport const FsUtil = {\n async readFileIgnoringError(filePath: string): Promise<string | undefined> {\n try {\n return await fsp.readFile(filePath, 'utf8');\n } catch {\n // do nothing\n }\n },\n async generateFile(filePath: string, content: string): Promise<void> {\n await fsp.writeFile(filePath, content);\n console.log(`Generated ${filePath}`);\n },\n};\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst commonContent = `\n3rd-party/\n@types/\n__generated__/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.config.*js\n*.d.ts\n*.min.*js\n.yarn/\n.pnp.js\n`;\n\nexport async function generateEslintignore(config: PackageConfig): Promise<void> {\n return logger.function('generateEslintignore', async () => {\n const filePath = path.resolve(config.dirPath, '.eslintignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n const headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await ignoreFileUtil.readGitignoreWithoutSeparators(gitignoreFilePath)) || '';\n\n const newContent = headUserContent + commonContent + gitignoreContent + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\n\nconst userContentHeader = '# Project-specific settings';\nconst userContentHeaderRegex = /# Project-specific settings[^\\n]*\\n/gm;\nconst separator = '# Generated by wbfy';\nconst separatorPrefix = '# Generated by ';\nconst defaultHeadUserContent = `${userContentHeader} (head)\n\n\n${separator}\n`;\nconst defaultTailUserContent = `\n${userContentHeader} (tail)\n`;\n\nexport const ignoreFileUtil = {\n separator,\n separatorPrefix,\n defaultHeadUserContent,\n defaultTailUserContent,\n async readGitignoreWithoutSeparators(filePath: string): Promise<string | undefined> {\n try {\n let content = await fs.promises.readFile(filePath, 'utf8');\n const lastHeaderIndex = getIndexOfTailUserContentHeader(content);\n if (lastHeaderIndex > 0) {\n content = content.slice(0, lastHeaderIndex - 1);\n }\n return (\n content\n .replace(userContentHeaderRegex, '')\n .replace(/# Generated by [^\\n]*\\n/gm, '')\n .replace(/\\r?\\n\\r?\\n(\\r?\\n)+/gm, '\\n\\n')\n .trim() + '\\n'\n );\n } catch {\n // do nothing\n }\n },\n getHeadUserContent(content: string): string {\n const index = content.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return content\n .slice(0, content.indexOf('\\n', index) + 1)\n .replace(userContentHeaderRegex, `${userContentHeader} (head)\\n`);\n }\n return defaultHeadUserContent;\n },\n getTailUserContent(content: string): string | undefined {\n const lastHeaderIndex = getIndexOfTailUserContentHeader(content);\n if (lastHeaderIndex > 0) {\n return content.slice(lastHeaderIndex - 1);\n }\n return defaultTailUserContent;\n },\n async isBerryZeroInstallEnabled(filePath: string): Promise<boolean> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf8');\n return content.includes('\\n!.yarn/cache');\n } catch {\n return false;\n }\n },\n};\n\nfunction getIndexOfTailUserContentHeader(content: string): number {\n const index = content.indexOf(userContentHeader);\n const lastIndex = content.lastIndexOf(userContentHeader);\n return lastIndex > index ? lastIndex : -1;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateEslintrc(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateEslintrc', async () => {\n // TODO: support Blitz v2\n if (rootConfig.depending.blitz === '2') return;\n\n const bases = [];\n if (config.eslintBase) {\n bases.push(config.eslintBase);\n }\n if (config !== rootConfig) {\n bases.push('../../.eslintrc.json');\n }\n let newSettings: any = { root: true, extends: bases };\n\n const filePath = path.resolve(config.dirPath, '.eslintrc.json');\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(oldContent);\n if (oldSettings.extends) {\n oldSettings.extends = oldSettings.extends.filter(\n (ext: string) => !ext.startsWith('@willbooster/') && ext !== '../../.eslintrc.json'\n );\n }\n if (bases.length === 0) {\n oldSettings.extends = [];\n }\n const newExtends = newSettings.extends;\n newSettings.extends = oldSettings.extends;\n oldSettings.extends = newExtends;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n if (config.depending.blitz === '0') {\n addExtensionToHead(newSettings, 'blitz');\n } else if (config.depending.blitz === '2') {\n addExtensionToHead(newSettings, '@blitzjs/next/eslint');\n }\n } catch {\n // do nothing\n }\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nfunction addExtensionToHead(newSettings: any, extension: string): void {\n newSettings.extends = [extension, ...newSettings.extends.filter((e: string) => e !== extension)];\n}\n", "import merge from 'deepmerge';\n\nexport function overwriteMerge(destinationArray: any[], sourceArray: any[]): any[] {\n return sourceArray;\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function combineMerge(target: any[], source: any[], options: any): any[] {\n const destination = [...target];\n\n for (const [index, item] of source.entries()) {\n if (destination[index] === undefined) {\n destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);\n } else if (options.isMergeableObject(item)) {\n destination[index] = merge(target[index], item, options);\n } else if (!target.includes(item)) {\n destination.push(item);\n }\n }\n return destination;\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `* text=auto\n\n*.vcproj text eol=crlf\n\n${[...extensions.codeWith2IndentSize, ...extensions.codeWith4IndentSize, ...extensions.markdownLike]\n .map((ext) => `*.${ext} text eol=lf`)\n .join('\\n')}\n`;\n\nexport async function generateGitattributes(config: PackageConfig): Promise<void> {\n return logger.function('generateGitattributes', async () => {\n const filePath = path.resolve(config.dirPath, '.gitattributes');\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { options } from '../options';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst defaultNames = ['windows', 'macos', 'linux', 'jetbrains', 'visualstudiocode', 'emacs', 'vim', 'yarn'];\n\nconst commonContent = `\n.devcontainer/\n.venv/\ndist/\ntemp/\nIcon[\\r]\n*.sqlite3\n*.sqlite3-journal\n`;\n\nexport async function generateGitignore(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateGitignore', async () => {\n const filePath = path.resolve(config.dirPath, '.gitignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n let headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const names = [...defaultNames];\n if (config.containingGemfile) {\n names.push('ruby');\n }\n if (config.containingGoMod) {\n names.push('go');\n headUserContent += `${path.basename(config.dirPath)}\n`;\n }\n if (config.containingPackageJson) {\n names.push('node');\n }\n if (config.containingPomXml) {\n names.push('maven');\n headUserContent += `.idea/google-java-format.xml\n`;\n }\n if (config.containingPubspecYaml) {\n names.push('flutter', 'AndroidStudio', 'ruby');\n headUserContent += `.flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n`;\n }\n if (config.containingTemplateYaml) {\n headUserContent += `.aws-sam/\npackaged.yaml\n`;\n }\n // Because .venv should be ignored on root directory\n if (config.containingPoetryLock) {\n names.push('python');\n }\n if (rootConfig.depending.firebase || config.depending.firebase) {\n names.push('firebase');\n }\n if (rootConfig.depending.reactNative || config.depending.reactNative) {\n names.push('reactnative');\n headUserContent += `google-services.json\nandroid/app/src/main/assets/\n`;\n }\n if (rootConfig.depending.storybook) {\n names.push('storybookjs');\n }\n if (rootConfig.depending.blitz) {\n names.push('nextjs');\n headUserContent += `.blitz/\n.blitz**\n`;\n }\n\n let generated = '';\n for (const name of names) {\n let content = (await readCache(name)) ?? '';\n if (!content) {\n const url = `https://www.toptal.com/developers/gitignore/api/${name}`;\n const response = await fetch(url);\n const responseText = await response.text();\n if (responseText.includes('Attention Required!')) {\n console.error(`Failed to fetch ${url}`);\n return;\n }\n content = responseText.trim();\n await promisePool.run(() => writeCache(name, content));\n if (options.isVerbose) {\n console.info(`Fetched ${url}`);\n }\n }\n if (generated) generated += '\\n';\n generated += content + '\\n';\n }\n if (!(await ignoreFileUtil.isBerryZeroInstallEnabled(filePath))) {\n generated = generated.replace('!.yarn/cache', '# !.yarn/cache').replace('# .pnp.*', '.pnp.*');\n }\n if (config.containingPomXml || config.containingPubspecYaml) {\n generated = generated\n .replace(/^# .idea\\/artifacts$/gm, '.idea/artifacts')\n .replace(/^# .idea\\/compiler.xml$/gm, '.idea/compiler.xml')\n .replace(/^# .idea\\/jarRepositories.xml$/gm, '.idea/jarRepositories.xml')\n .replace(/^# .idea\\/modules.xml$/gm, '.idea/modules.xml')\n .replace(/^# .idea\\/*.iml$/gm, '.idea/*.iml')\n .replace(/^# .idea\\/modules$/gm, '.idea/modules')\n .replace(/^# *.iml$/gm, '*.iml')\n .replace(/^# *.ipr$/gm, '*.ipr');\n if (config.containingPubspecYaml) {\n generated = generated.replace(/^.idea\\/modules.xml$/gm, '# .idea/modules.xml');\n }\n }\n generated = generated.replace(/^.idea\\/?$/gm, '# .idea');\n if (rootConfig.depending.reactNative || config.depending.reactNative || config.containingPubspecYaml) {\n generated = generated.replace(/^(.idea\\/.+)$/gm, '$1\\nandroid/$1');\n }\n const newContent = headUserContent + generated + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nconst dirPath = path.join(os.homedir(), '.cache', 'wbfy', 'gitignore');\n\nasync function writeCache(name: string, content: string): Promise<void> {\n await fs.promises.mkdir(dirPath, { recursive: true });\n await fs.promises.writeFile(path.join(dirPath, name), content);\n}\n\nasync function readCache(name: string): Promise<string | undefined> {\n try {\n const stat = await fs.promises.stat(path.join(dirPath, name));\n if (Date.now() - stat.mtimeMs > 6 * 60 * 60 * 1000) {\n return;\n }\n return await fs.promises.readFile(path.join(dirPath, name), 'utf8');\n } catch {\n // do nothing\n }\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\n\nimport { generateScripts } from './packageJson';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'node node_modules/.bin/lint-staged',\n prePush: `yarn typecheck`,\n prePushForLab: `\nif [ $(git branch --show-current) = \"main\" ] && [ $(git config user.email) != \"exkazuu@gmail.com\" ]; then\n echo \"************************************************\"\n echo \"*** Don't push main branch directly. Use PR! ***\"\n echo \"************************************************\"\n exit 1\nfi\n\nyarn typecheck\n`.trim(),\n postMerge: `\nchanged_files=\"$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)\"\n\nrun_if_changed() {\n if echo \"$changed_files\" | grep --quiet -E \"$1\"; then\n eval \"$2\"\n fi\n}\n`.trim(),\n};\n\nexport async function generateHuskyrc(config: PackageConfig): Promise<void> {\n return logger.function('generateHuskyrc', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n const packageJsonPath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(packageJsonPath, 'utf8');\n const packageJson = JSON.parse(jsonText);\n packageJson.scripts ||= {};\n delete packageJson.scripts['postinstall'];\n delete packageJson.scripts['postpublish'];\n delete packageJson.scripts['prepare'];\n delete packageJson.scripts['prepublishOnly'];\n delete packageJson.scripts['prepack'];\n delete packageJson.scripts['postpack'];\n\n const dirPath = path.resolve(config.dirPath, '.husky');\n await Promise.all([\n fs.promises.writeFile(packageJsonPath, JSON.stringify(packageJson, undefined, 2)),\n fs.promises.rm(dirPath, { force: true, recursive: true }),\n ]);\n spawnSync('yarn', ['dlx', 'husky-init', '--yarn2'], config.dirPath);\n\n const preCommitFilePath = path.resolve(dirPath, 'pre-commit');\n const content = await fs.promises.readFile(preCommitFilePath, 'utf8');\n\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.huskyrc.json'), { force: true }));\n await promisePool.run(() =>\n fs.promises.writeFile(preCommitFilePath, content.replace(DEFAULT_COMMAND, settings.preCommit))\n );\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n let prePush = config.repository?.startsWith('github:WillBoosterLab/') ? settings.prePushForLab : settings.prePush;\n const { typecheck } = generateScripts(config);\n prePush = prePush.replace('yarn typecheck', typecheck.replace('tsc', 'node node_modules/.bin/tsc'));\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'pre-push'), content.replace(DEFAULT_COMMAND, prePush), {\n mode: 0o755,\n })\n );\n }\n\n const postMergeCommands: string[] = [];\n if (config.versionsText) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf plugin update --all\"');\n }\n // Python\u304C\u306A\u3044\u3068\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3067\u304D\u306A\u3044\u51E6\u7406\u7CFB\u304C\u5B58\u5728\u3059\u308B\u305F\u3081\u3001\u5F37\u5236\u7684\u306B\u6700\u521D\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\u3002\n if (config.versionsText?.includes('python ')) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf install python\"');\n }\n if (config.versionsText) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf install\"');\n }\n postMergeCommands.push('run_if_changed \"package\\\\.json\" \"yarn\"');\n if (config.containingPoetryLock) {\n postMergeCommands.push('run_if_changed \"poetry\\\\.lock\" \"poetry install\"');\n }\n if (config.depending.blitz || config.depending.prisma) {\n postMergeCommands.push('yarn gen-code');\n }\n const postMergeCommand = content.replace(DEFAULT_COMMAND, `${settings.postMerge}\\n\\n${postMergeCommands.join('\\n')}`);\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'post-merge'), postMergeCommand, {\n mode: 0o755,\n })\n );\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { extensions } from '../utils/extensions';\nimport { gitHubUtil } from '../utils/githubUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\nimport { getSrcDirs } from '../utils/srcDirectories';\n\nconst jsCommonDeps = [\n 'eslint',\n 'eslint-config-prettier',\n 'eslint-plugin-import',\n 'eslint-plugin-sort-class-members',\n 'eslint-plugin-sort-destructure-keys',\n 'eslint-plugin-unicorn',\n];\n\nconst tsCommonDeps = [\n ...jsCommonDeps,\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint-import-resolver-typescript',\n];\n\nconst reactCommonDeps = ['eslint-plugin-react', 'eslint-plugin-react-hooks'];\n\nconst devDeps: { [prop: string]: string[] } = {\n '@willbooster/eslint-config-js': ['@willbooster/eslint-config-js', ...jsCommonDeps],\n '@willbooster/eslint-config-js-react': ['@willbooster/eslint-config-js-react', ...jsCommonDeps, ...reactCommonDeps],\n '@willbooster/eslint-config-ts': ['@willbooster/eslint-config-ts', ...tsCommonDeps],\n '@willbooster/eslint-config-ts-react': ['@willbooster/eslint-config-ts-react', ...tsCommonDeps, ...reactCommonDeps],\n '../../.eslintrc.json': [],\n};\n\nexport async function generatePackageJson(\n config: PackageConfig,\n rootConfig: PackageConfig,\n skipAddingDeps: boolean\n): Promise<void> {\n return logger.function('generatePackageJson', async () => {\n await core(config, rootConfig, skipAddingDeps);\n });\n}\n\nasync function core(config: PackageConfig, rootConfig: PackageConfig, skipAddingDeps: boolean): Promise<void> {\n const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(filePath, 'utf8');\n const jsonObj = JSON.parse(jsonText);\n jsonObj.scripts = jsonObj.scripts || {};\n jsonObj.dependencies = jsonObj.dependencies || {};\n jsonObj.devDependencies = jsonObj.devDependencies || {};\n jsonObj.peerDependencies = jsonObj.peerDependencies || {};\n\n await removeDeprecatedStuff(jsonObj);\n\n if (jsonObj.name !== '@willbooster/prettier-config') {\n jsonObj.prettier = '@willbooster/prettier-config';\n }\n\n for (const scriptKey of Object.keys(jsonObj.scripts)) {\n // Fresh repo still requires 'yarn install'\n if (!jsonObj.scripts[scriptKey].includes('git clone')) {\n jsonObj.scripts[scriptKey] = jsonObj.scripts[scriptKey]\n .replace(/yarn\\s*&&\\s*/, '')\n .replace(/yarn\\s*install\\s*&&\\s*/, '');\n }\n }\n\n jsonObj.scripts = merge(jsonObj.scripts, generateScripts(config));\n jsonObj.scripts.prettify += await generatePrettierSuffix(config.dirPath);\n\n let dependencies: string[] = [];\n let devDependencies = ['lint-staged', 'prettier', 'sort-package-json', '@willbooster/prettier-config'];\n const poetryDependencies: string[] = [];\n\n if (config.root) {\n // To install the latest pinst\n devDependencies.push('husky', '@willbooster/renovate-config');\n if (config.publicRepo || config.referredByOtherRepo) {\n // https://typicode.github.io/husky/#/?id=install-1\n devDependencies.push('pinst');\n jsonObj.scripts['prepack'] = 'pinst --disable';\n jsonObj.scripts['postpack'] = 'pinst --enable';\n }\n if (config.depending.semanticRelease) {\n devDependencies.push('conventional-changelog-conventionalcommits');\n if (\n !jsonObj.devDependencies['semantic-release'] &&\n !jsonObj.devDependencies['multi-semantic-release'] &&\n !jsonObj.devDependencies['@qiwi/multi-semantic-release']\n ) {\n devDependencies.push('semantic-release');\n }\n jsonObj.version = '0.0.0-semantically-released';\n }\n if (config.containingSubPackageJsons) {\n jsonObj.workspaces = ['packages/*'];\n } else {\n delete jsonObj.workspaces;\n }\n }\n\n if (\n config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages\n ) {\n devDependencies.push('eslint', 'micromatch');\n // TODO: not needed anymore?\n if (config.containingTypeScriptInPackages) {\n devDependencies.push('@typescript-eslint/parser');\n }\n }\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n devDependencies.push('typescript');\n }\n\n if (config.eslintBase) {\n devDependencies.push(...devDeps[config.eslintBase]);\n }\n\n if (config.willBoosterConfigs) {\n dependencies = dependencies.filter((dep) => !dep.includes('@willbooster/'));\n devDependencies = devDependencies.filter((dep) => !dep.includes('@willbooster/'));\n }\n\n if (!jsonObj.name) {\n jsonObj.name = path.basename(config.dirPath);\n }\n\n if (config.containingSubPackageJsons) {\n jsonObj.private = true;\n }\n if (!jsonObj.license) {\n jsonObj.license = 'UNLICENSED';\n }\n if (!jsonObj.private && jsonObj.license !== 'UNLICENSED' && rootConfig.publicRepo) {\n jsonObj.publishConfig ??= {};\n jsonObj.publishConfig.access ??= 'public';\n }\n const [owner] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (owner === 'WillBooster' || owner === 'WillBoosterLab') {\n jsonObj.author = 'WillBooster Inc.';\n }\n\n if (!config.containingTypeScript && !config.containingTypeScriptInPackages) {\n delete jsonObj.scripts.typecheck;\n }\n\n // https://github.com/semantic-release/semantic-release/issues/2323#issuecomment-1032341621\n if (config.depending.semanticRelease && config.release.npm) {\n jsonObj.resolutions ||= {};\n jsonObj.resolutions['npm/chalk'] = '^4.1.2';\n }\n\n if (!config.containingSubPackageJsons) {\n if (!config.containingJavaScript && !config.containingTypeScript) {\n delete jsonObj.scripts.lint;\n delete jsonObj.scripts['lint-fix'];\n jsonObj.scripts.cleanup = jsonObj.scripts.cleanup.replace(' && yarn lint-fix', '');\n } else {\n jsonObj.scripts['lint-fix'] += EslintUtil.getLintFixSuffix(config);\n }\n\n if (config.containingPubspecYaml) {\n jsonObj.scripts.lint = 'flutter analyze';\n jsonObj.scripts['lint-fix'] = 'yarn lint';\n const dirs = ['lib', 'test', 'test_driver'].filter((dir) => fs.existsSync(path.resolve(config.dirPath, dir)));\n if (dirs.length > 0) {\n jsonObj.scripts['format-code'] = `flutter format $(find ${dirs.join(\n ' '\n )} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`;\n jsonObj.scripts.format += ` && yarn format-code`;\n }\n }\n\n if (config.containingPoetryLock) {\n if (jsonObj.scripts.postinstall === 'poetry install') {\n delete jsonObj.scripts.postinstall;\n }\n const entries = await fs.promises.readdir(config.dirPath, { withFileTypes: true });\n const dirNames = await Promise.all(\n entries.map(async (entry) => {\n if (!entry.isDirectory()) return '';\n const dirPath = path.resolve(config.dirPath, entry.name);\n const fileNames = await fs.promises.readdir(dirPath);\n return fileNames.some((fileName) => fileName.endsWith('.py')) ? entry.name : '';\n })\n );\n const filteredDirNames = dirNames.filter(Boolean);\n if (filteredDirNames.length > 0) {\n jsonObj.scripts['format-code'] = `poetry run isort --profile black ${filteredDirNames.join(\n ' '\n )} && poetry run black ${filteredDirNames.join(' ')}`;\n jsonObj.scripts.lint = `poetry run flake8 ${filteredDirNames.join(' ')}`;\n jsonObj.scripts['lint-fix'] = 'yarn lint';\n jsonObj.scripts.format += ` && yarn format-code`;\n poetryDependencies.push('black', 'isort', 'flake8');\n }\n }\n\n if (config.repository) {\n jsonObj.repository = config.repository;\n }\n }\n\n if (config.depending.blitz) {\n if (config.depending.blitz === '0') {\n // These cause an error of eslint-plugin-import loading\n devDependencies = devDependencies.filter((dep) => !dep.includes('@typescript-eslint/'));\n // This causes eslint errors\n devDependencies = devDependencies.filter(\n (d) =>\n d !== 'eslint-plugin-react' &&\n d !== 'eslint-import-resolver-typescript' &&\n d !== 'eslint-plugin-import' &&\n d !== 'eslint-plugin-react-hooks'\n );\n }\n if (!jsonObj.scripts['gen-code']?.startsWith('blitz codegen')) {\n jsonObj.scripts['gen-code'] = 'blitz codegen';\n }\n } else if (config.depending.prisma && !jsonObj.scripts['gen-code']?.startsWith('prisma generate')) {\n jsonObj.scripts['gen-code'] = 'prisma generate';\n }\n if (Object.keys(jsonObj.dependencies).length === 0) {\n delete jsonObj.dependencies;\n }\n if (Object.keys(jsonObj.devDependencies).length === 0) {\n delete jsonObj.devDependencies;\n }\n if (Object.keys(jsonObj.peerDependencies).length === 0) {\n delete jsonObj.peerDependencies;\n }\n\n await fs.promises.writeFile(filePath, JSON.stringify(jsonObj));\n\n if (!skipAddingDeps) {\n dependencies = dependencies.filter((dep) => !jsonObj.devDependencies?.[dep]);\n if (dependencies.length > 0) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\n devDependencies = devDependencies.filter((dep) => !jsonObj.dependencies?.[dep]);\n if (devDependencies.length > 0) {\n spawnSync('yarn', ['add', '-D', ...new Set(devDependencies)], config.dirPath);\n }\n if (poetryDependencies.length > 0) {\n spawnSync('poetry', ['add', ...new Set(poetryDependencies)], config.dirPath);\n }\n }\n}\n\n// TODO: remove the following migration code in future\nasync function removeDeprecatedStuff(jsonObj: any): Promise<void> {\n if (jsonObj.author === 'WillBooster LLC') {\n jsonObj.author = 'WillBooster Inc.';\n }\n delete jsonObj.scripts['sort-package-json'];\n delete jsonObj.scripts['sort-all-package-json'];\n delete jsonObj.scripts['typecheck:codegen'];\n delete jsonObj.dependencies['tslib'];\n delete jsonObj.devDependencies['@willbooster/eslint-config'];\n delete jsonObj.devDependencies['@willbooster/eslint-config-react'];\n delete jsonObj.devDependencies['@willbooster/tsconfig'];\n delete jsonObj.devDependencies['eslint-import-resolver-node'];\n delete jsonObj.devDependencies['eslint-plugin-prettier'];\n delete jsonObj.devDependencies['lerna'];\n // To install the latest pinst\n delete jsonObj.devDependencies['pinst'];\n delete jsonObj.scripts['flutter-format'];\n delete jsonObj.scripts['format-flutter'];\n delete jsonObj.scripts['python-format'];\n delete jsonObj.scripts['format-python'];\n delete jsonObj.scripts['prettier'];\n for (const deps of Object.values(devDeps)) {\n for (const dep of deps) {\n delete jsonObj.devDependencies[dep];\n }\n }\n await promisePool.run(() => fs.promises.rm('lerna.json', { force: true }));\n}\n\nexport function generateScripts(config: PackageConfig): Record<string, string> {\n let scripts = {\n cleanup: 'yarn format && yarn lint-fix',\n format: `sort-package-json && yarn prettify`,\n lint: `eslint --color \"./{${getSrcDirs(config)}}/**/*.{${extensions.eslint.join(',')}}\"`,\n 'lint-fix': 'yarn lint --fix',\n prettify: `prettier --cache --color --write \"**/{.*/,}*.{${extensions.prettier.join(',')}}\" \"!**/test-fixtures/**\"`,\n typecheck: 'tsc --noEmit --Pretty',\n };\n if (config.containingSubPackageJsons) {\n scripts = merge(\n { ...scripts },\n {\n format: `sort-package-json && yarn prettify && yarn workspaces foreach --parallel --verbose run format`,\n lint: `yarn workspaces foreach --parallel --verbose run lint`,\n 'lint-fix': 'yarn workspaces foreach --parallel --verbose run lint-fix',\n prettify: `prettier --cache --color --write \"**/{.*/,}*.{${extensions.prettier.join(\n ','\n )}}\" \"!**/packages/**\" \"!**/test-fixtures/**\"`,\n test: 'yarn workspaces foreach --verbose run test',\n typecheck: 'yarn workspaces foreach --parallel --verbose run typecheck',\n }\n );\n }\n if (config.depending.blitz) {\n scripts.typecheck = `${scripts.typecheck} || yarn run typecheck/warn`;\n (scripts as Record<string, string>)[\n 'typecheck/warn'\n ] = `echo 'Please try \"yarn gen-code\" if you face unknown type errors.' && exit 1`;\n (scripts as Record<string, string>)['typecheck:gen-code'] = 'yarn gen-code && tsc --noEmit --Pretty';\n }\n return scripts;\n}\n\nasync function generatePrettierSuffix(dirPath: string): Promise<string> {\n const filePath = path.resolve(dirPath, '.prettierignore');\n const existingContent = await fs.promises.readFile(filePath, 'utf8');\n const index = existingContent.indexOf(ignoreFileUtil.separatorPrefix);\n if (index < 0) return '';\n\n const originalContent = existingContent.slice(0, index);\n const lines = originalContent\n .split('\\n')\n .map((line) => {\n const newLine = line.trim();\n return newLine.endsWith('/') ? newLine.slice(0, -1) : newLine;\n })\n .filter((l) => l && !l.startsWith('#') && !l.includes('/'));\n\n return lines.map((line) => ` \"!**/${line}/**\"`).join('');\n}\n", "import { PackageConfig } from '../packageConfig';\n\nexport const EslintUtil = {\n getLintFixSuffix(config: PackageConfig): string {\n return config.containingJsxOrTsx ? ' --rule \"{ react-hooks/exhaustive-deps: 0 }\"' : '';\n },\n};\n", "import { Octokit } from '@octokit/core';\n\nconst token =\n process.env.GH_BOT_PAT || process.env.PUBLIC_GH_BOT_PAT || process.env.GH_TOKEN || process.env.GITHUB_TOKEN;\nexport const hasGitHubToken = !!token;\nexport const octokit = new Octokit({\n auth: token,\n});\n\nclass GitHubUtil {\n getOrgAndName(urlOrFullName: string): [string, string] {\n const urlWithoutProtocol = urlOrFullName.split(':').at(-1);\n const names = urlWithoutProtocol?.split('/');\n const org = names?.at(-2) ?? '';\n const name = names?.at(-1)?.replace(/.git$/, '') ?? '';\n return [org, name];\n }\n}\n\nexport const gitHubUtil = new GitHubUtil();\n", "import { PackageConfig } from '../packageConfig';\n\nconst srcDirectories = {\n node: ['src', '__tests__', 'scripts'].sort(),\n // pages \u306F Blitz2 \u3067\u306E\u307F\u4F7F\u7528\u3055\u308C\u3066\u3044\u308B\u3002\n blitz: ['__tests__', 'scripts', 'app', 'db', 'integrations', 'mailers', 'pages', 'test'].sort(),\n};\n\nexport function getSrcDirs(config: PackageConfig): string[] {\n return config.depending.blitz ? srcDirectories.blitz : srcDirectories.node;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectTasksOptions\">\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"ts\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.ts)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"tsx\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.tsx)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"js\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.js)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"json\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.json)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"md\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.md)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"html\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.html)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n </component>\n</project>\n`;\n\nexport async function generateIdeaSettings(config: PackageConfig): Promise<void> {\n return logger.function('generateIdeaSettings', async () => {\n const dirPath = path.resolve(config.dirPath, '.idea');\n if (fs.existsSync(dirPath)) {\n const filePath = path.resolve(dirPath, 'watcherTasks.xml');\n await (config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages ||\n (config.containingPackageJson &&\n !config.containingPubspecYaml &&\n !config.containingGemfile &&\n !config.containingGoMod &&\n !config.containingPomXml)\n ? promisePool.run(() => FsUtil.generateFile(filePath, newContent))\n : promisePool.run(() => fs.promises.rm(filePath, { force: true })));\n }\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\nimport { getSrcDirs } from '../utils/srcDirectories';\n\nexport async function generateLintstagedrc(config: PackageConfig): Promise<void> {\n return logger.function('generateLintstagedrc', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n const packagePrefix = config.root ? 'node node_modules/.bin/' : 'node ../../node_modules/.bin/';\n const lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${getEslintKey(config)}': [${JSON.stringify(\n `${packagePrefix}eslint --fix${EslintUtil.getLintFixSuffix(config)}`\n )}, '${packagePrefix}prettier --cache --write'],`;\n lines.push(eslint);\n }\n const packagesFilter = config.root ? \" && !file.includes('/packages/')\" : '';\n lines.push(`\n './**/*.{${extensions.prettier.join(',')}}': files => {\n ${config.containingJavaScript || config.containingTypeScript ? getEslintFilterForPrettier(config) : ''}\n const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${packagesFilter});\n if (filteredFiles.length === 0) return [];\n const commands = [\\`${packagePrefix}prettier --cache --write \\${filteredFiles.join(' ')}\\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('${packagePrefix}sort-package-json');\n }\n return commands;\n },`);\n if (config.containingPubspecYaml) {\n lines.push(`\n './{lib,test,test_driver}/**/*.dart': files => {\n const filteredFiles = files.filter(file => !file.includes('generated'))\n .filter(file => !file.endsWith('.freezed.dart') && !file.endsWith('.g.dart'));\n if (filteredFiles.length === 0) return [];\n return [\\`flutter format \\${filteredFiles.join(' ')}\\`];\n },`);\n }\n if (config.containingPoetryLock) {\n lines.push(`\n './**/*.py': [\n 'poetry run isort --profile black --filter-files',\n 'poetry run black',\n 'poetry run flake8'\n ],`);\n }\n\n const newContent = `${\n config.containingJavaScript || config.containingTypeScript ? \"const micromatch = require('micromatch');\" : ''\n }\n\nmodule.exports = {${lines.join('')}\n};\n`;\n\n const filePath = path.resolve(config.dirPath, '.lintstagedrc.cjs');\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.lintstagedrc.js'), { force: true }));\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.lintstagedrc.json'), { force: true }));\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n}\n\nfunction getEslintKey(config: PackageConfig): string {\n const dirs = getSrcDirs(config);\n return `./{${dirs.join(',')}}/**/*.{${extensions.eslint.join(',')}}`;\n}\n\nfunction getEslintFilterForPrettier(config: PackageConfig): string {\n return `files = micromatch.not(files, '${getEslintKey(config)}');`;\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst commonContent = `\n3rd-party/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.d.ts\n*.min.js\n.yarn/\n.pnp.js\n`;\n\nexport async function generatePrettierignore(config: PackageConfig): Promise<void> {\n return logger.function('generatePrettierignore', async () => {\n const filePath = path.resolve(config.dirPath, '.prettierignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n const headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await ignoreFileUtil.readGitignoreWithoutSeparators(gitignoreFilePath)) || '';\n\n let additionalContent = '';\n if (config.containingPubspecYaml) {\n additionalContent = `\nandroid/app/\nios/Runner/Assets.xcassets/\npubspec.yaml\n`;\n }\n\n const newContent = headUserContent + commonContent + additionalContent + gitignoreContent + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateReadme(config: PackageConfig): Promise<void> {\n return logger.function('generateReadme', async () => {\n const filePath = path.resolve(config.dirPath, 'README.md');\n let newContent = await fs.promises.readFile(filePath, 'utf8');\n\n newContent = insertBadge(config, newContent, semanticReleaseBadge, '.releaserc.json');\n\n const repository = config.repository?.slice(config.repository?.indexOf(':') + 1);\n const fileNames = fs.readdirSync(`${config.dirPath}/.github/workflows`);\n for (const fileName of fileNames) {\n if (!fileName.startsWith('test') && !fileName.startsWith('deploy')) continue;\n\n let badgeName = fileName;\n badgeName = badgeName.charAt(0).toUpperCase() + badgeName.slice(1, badgeName.indexOf('.'));\n badgeName = badgeName.replace('-', ' ');\n const badge = `[![${badgeName}](https://github.com/${repository}/actions/workflows/${fileName}/badge.svg)](https://github.com/${repository}/actions/workflows/${fileName})`;\n newContent = insertBadge(config, newContent, badge, `.github/workflows/${fileName}`);\n }\n\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nconst semanticReleaseBadge =\n '[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)';\n\nfunction insertBadge(config: PackageConfig, newContent: string, badge: string, fileName: string): string {\n if (!fs.existsSync(path.resolve(config.dirPath, fileName))) {\n return newContent;\n }\n\n // \u65E2\u306Bbadge\u304C\u3042\u308B\u5834\u5408\u306F\u524A\u9664\n const badgePos = newContent.indexOf(badge);\n if (badgePos >= 0) {\n newContent = newContent.slice(0, badgePos) + newContent.slice(badgePos + badge.length);\n }\n let inserted = false;\n for (let i = 0; i < newContent.length; i++) {\n if (newContent[i] === '\\n') {\n inserted = true;\n newContent = `${newContent.slice(0, i + 1)}${badge}\\n${newContent.slice(i + 1)}`;\n break;\n }\n }\n if (!inserted) newContent = `${newContent}\\n${badge}\\n`;\n return newContent;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateReleaserc(rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateReleaserc', async () => {\n const filePath = path.resolve(rootConfig.dirPath, '.releaserc.json');\n try {\n const settings = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n const plugins = settings?.plugins || [];\n for (let i = 0; i < plugins.length; i++) {\n const plugin = Array.isArray(plugins[i]) ? plugins[i][0] : plugins[i];\n const oldConfig = (Array.isArray(plugins[i]) && plugins[i][1]) || {};\n if (plugin === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n merge.all(\n [\n oldConfig,\n {\n preset: 'conventionalcommits',\n },\n ],\n { arrayMerge: overwriteMerge }\n ),\n ];\n } else if (plugin === '@semantic-release/github') {\n plugins[i] = [\n '@semantic-release/github',\n merge.all(\n [\n oldConfig,\n {\n successComment: false,\n labels: ['r: semantic-release'],\n releasedLabels: ['released :bookmark:'],\n },\n ],\n { arrayMerge: overwriteMerge }\n ),\n ];\n }\n }\n const newContent = JSON.stringify(settings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n } catch {\n // do nothing\n }\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst jsonObj = {\n extends: ['@willbooster'],\n};\n\nexport async function generateRenovateJson(config: PackageConfig): Promise<void> {\n return logger.function('generateRenovateJson', async () => {\n let newSettings: any = cloneDeep(jsonObj);\n const filePath = path.resolve(config.dirPath, '.renovaterc.json');\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(oldContent) as any;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch {\n // do nothing\n }\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.dependabot'), { force: true }));\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, 'renovate.json'), { force: true }));\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { sortKeys } from '../utils/objectUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst rootJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react-jsx',\n alwaysStrict: true,\n strict: true,\n skipLibCheck: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n declaration: true,\n sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n typeRoots: ['./node_modules/@types', './@types'],\n },\n include: [\n 'src/**/*',\n '__tests__/**/*',\n 'scripts/**/*',\n 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\n 'packages/*/scripts/**/*',\n ],\n};\n\nconst subJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react-jsx',\n alwaysStrict: true,\n strict: true,\n skipLibCheck: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n declaration: true,\n sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n typeRoots: ['../../node_modules/@types', '../../@types', './@types'],\n },\n include: ['src/**/*', '__tests__/**/*', 'scripts/**/*'],\n};\n\nexport async function generateTsconfig(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateTsconfig', async () => {\n if (rootConfig.depending.blitz) return;\n\n let newSettings: any = cloneDeep(config.root ? rootJsonObj : subJsonObj);\n if (!config.containingJsxOrTsx && !config.containingJsxOrTsxInPackages) {\n delete newSettings.compilerOptions.jsx;\n }\n if (config.root && !config.containingSubPackageJsons) {\n newSettings.include = newSettings.include.filter((dirPath: string) => !dirPath.startsWith('packages/*/'));\n }\n\n const filePath = path.resolve(config.dirPath, 'tsconfig.json');\n try {\n const existingContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(existingContent);\n if (oldSettings.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete oldSettings.extends;\n }\n delete newSettings?.compilerOptions?.target;\n delete newSettings?.compilerOptions?.module;\n if (oldSettings.jsx) {\n delete newSettings.jsx;\n }\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n newSettings.include = newSettings.include.filter((dirPath: string) => !dirPath.includes('@types'));\n } catch {\n // do nothing\n }\n sortKeys(newSettings.compilerOptions);\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "export function sortKeys<T extends Record<string, unknown>>(obj: T): T {\n const keyAndValues = Object.entries(obj).sort(([key1], [key2]) => key1.localeCompare(key2));\n for (const [key, value] of keyAndValues) {\n delete obj[key];\n (obj as Record<string, unknown>)[key] = value;\n }\n return obj;\n}\n", "/* eslint-disable unicorn/no-null */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport yaml from 'js-yaml';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { sortKeys } from '../utils/objectUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst workflows = {\n test: {\n name: 'Test',\n on: {\n pull_request: null,\n push: {\n branches: ['main', 'wbfy', 'renovate/**'],\n },\n },\n jobs: {\n test: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/test.yml@main',\n },\n },\n },\n release: {\n name: 'Release',\n on: {\n push: {\n branches: [],\n },\n },\n jobs: {\n release: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/release.yml@main',\n },\n },\n },\n wbfy: {\n name: 'Willboosterify',\n on: {\n workflow_dispatch: null,\n },\n jobs: {\n wbfy: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main',\n },\n },\n },\n 'wbfy-merge': {\n name: 'Merge wbfy',\n on: {\n workflow_dispatch: null,\n },\n jobs: {\n 'wbfy-merge': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main',\n },\n },\n },\n 'semantic-pr': {\n name: 'Lint PR title',\n on: {\n pull_request_target: {\n types: ['opened', 'edited', 'synchronize'],\n },\n },\n jobs: {\n 'semantic-pr': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main',\n },\n },\n },\n 'notify-ready': {\n name: 'Notify ready',\n on: {\n issues: {\n types: ['labeled'],\n },\n },\n jobs: {\n 'notify-ready': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main',\n secrets: {\n DISCORD_WEBHOOK_URL: '${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}',\n },\n },\n },\n },\n 'close-comment': {\n name: 'Add close comment',\n on: {\n pull_request: {\n types: ['opened'],\n },\n },\n jobs: {\n 'close-comment': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main',\n },\n },\n },\n 'add-issue-to-project': {\n name: 'Add issue to github project',\n on: {\n issues: {\n types: ['labeled'],\n },\n },\n jobs: {\n 'add-to-project': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main',\n secrets: {\n GH_PROJECT_URL: '${{ secrets.GH_PROJECT_URL }}',\n GH_BOT_PAT: '${{ secrets.GH_BOT_PAT }}',\n },\n },\n },\n },\n} as Record<KnownKind, any>;\n\ntype KnownKind =\n | 'test'\n | 'release'\n | 'sync'\n | 'wbfy'\n | 'wbfy-merge'\n | 'semantic-pr'\n | 'notify-ready'\n | 'close-comment'\n | 'add-issue-to-project';\n\nexport async function generateWorkflow(rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateWorkflow', async () => {\n const workflowsPath = path.resolve(rootConfig.dirPath, '.github', 'workflows');\n await fs.promises.mkdir(workflowsPath, { recursive: true });\n\n // Remove config of semantic pull request\n const semanticYmlPath = path.resolve(rootConfig.dirPath, '.github', 'semantic.yml');\n await promisePool.run(() => fs.promises.rm(semanticYmlPath, { force: true, recursive: true }));\n\n const entries = await fs.promises.readdir(workflowsPath, { withFileTypes: true });\n const fileNames = entries\n .filter((dirent) => dirent.isFile() && dirent.name.endsWith('.yml'))\n .map((dirent) => dirent.name);\n if (rootConfig.depending.semanticRelease) {\n fileNames.push('release.yml');\n }\n if (rootConfig.publicRepo || rootConfig.repository?.startsWith('github:WillBoosterLab/')) {\n fileNames.push('notify-ready.yml');\n }\n fileNames.push(\n 'test.yml',\n 'wbfy.yml',\n 'wbfy-merge.yml',\n 'semantic-pr.yml',\n 'close-comment.yml',\n 'add-issue-to-project.yml'\n );\n\n for (const fileName of fileNames) {\n // \u5B9F\u969B\u306FKnownKind\u4EE5\u5916\u306E\u5024\u3082\u4EE3\u5165\u3055\u308C\u308B\u3053\u3068\u306B\u6CE8\u610F\n const kind = path.basename(fileName, '.yml') as KnownKind;\n await promisePool.run(() => writeWorkflowYaml(rootConfig, workflowsPath, kind));\n }\n });\n}\n\nasync function writeWorkflowYaml(config: PackageConfig, workflowsPath: string, kind: KnownKind): Promise<void> {\n let newSettings = cloneDeep(workflows[kind] || {});\n const filePath = path.join(workflowsPath, `${kind}.yml`);\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = yaml.load(oldContent);\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n } catch {\n // do nothing\n }\n for (const job of Object.values(newSettings.jobs) as any[]) {\n // Ignore non-reusable workflows\n if (!job.uses?.includes?.('/reusable-workflows/')) return;\n\n normalizeJob(config, job, kind);\n }\n\n switch (kind) {\n case 'release': {\n if (newSettings.on.schedule) {\n delete newSettings.on.push;\n } else if (config.release.branches.length > 0) {\n newSettings.on.push.branches = config.release.branches;\n } else {\n // Don't use release.yml if release branch is not specified\n await fs.promises.rm(path.join(workflowsPath, 'release.yml'), { force: true });\n return;\n }\n break;\n }\n case 'wbfy': {\n setSchedule(newSettings, 20, 24);\n break;\n }\n case 'wbfy-merge': {\n setSchedule(newSettings, 0, 4);\n break;\n }\n // No default\n }\n await writeYaml(newSettings, filePath);\n\n if (kind === 'release') {\n await fs.promises.rm(path.join(workflowsPath, 'semantic-release.yml'), { force: true });\n } else if (kind === 'sync') {\n await fs.promises.rm(path.join(workflowsPath, 'sync-init.yml'), { force: true });\n if (!newSettings.jobs.sync) return;\n\n newSettings.jobs['sync-force'] = newSettings.jobs.sync;\n const params = newSettings.jobs.sync.with.sync_params_without_dest;\n if (!params) return;\n\n newSettings.jobs.sync.with.sync_params_without_dest = `--force ${params}`;\n newSettings.name = 'Force to Sync';\n newSettings.on = { workflow_dispatch: null };\n delete newSettings.jobs.sync;\n await writeYaml(newSettings, path.join(workflowsPath, 'sync-force.yml'));\n }\n}\n\nfunction normalizeJob(config: PackageConfig, job: any, kind: KnownKind): void {\n job.with ||= {};\n job.secrets ||= {};\n\n if ((config.release.github && kind === 'test') || kind === 'release' || kind === 'wbfy' || kind === 'wbfy-merge') {\n job.secrets['GH_TOKEN'] = config.publicRepo ? '${{ secrets.PUBLIC_GH_BOT_PAT }}' : '${{ secrets.GH_BOT_PAT }}';\n }\n if (config.release.npm && (kind === 'release' || kind === 'test')) {\n job.secrets['NPM_TOKEN'] = '${{ secrets.NPM_TOKEN }}';\n }\n if (job.secrets['FIREBASE_TOKEN']) {\n job.secrets['GCP_SA_KEY_JSON_FOR_FIREBASE'] = '${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}';\n delete job.secrets['FIREBASE_TOKEN'];\n }\n if (\n (job.secrets['DISCORD_WEBHOOK_URL'] && (kind === 'release' || kind.startsWith('deploy'))) ||\n (job.with.server_url && kind.startsWith('deploy'))\n ) {\n job.secrets['DISCORD_WEBHOOK_URL'] = '${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}';\n }\n\n if (kind === 'sync') {\n const params = job.with?.sync_params_without_dest;\n if (params) {\n job.with.sync_params_without_dest = params.replace('sync ', '');\n }\n }\n\n if (config.repository?.startsWith('github:WillBooster/')) {\n job.uses = job.uses.replace('WillBoosterLab/', 'WillBooster/');\n } else if (config.repository?.startsWith('github:WillBoosterLab/')) {\n job.uses = job.uses.replace('WillBooster/', 'WillBoosterLab/');\n }\n\n // Remove deprecated parameters\n delete job.with['non_self_hosted'];\n delete job.with['notify_discord'];\n delete job.with['require_fly'];\n delete job.with['require_gcloud'];\n if (job.with['dot_env_path'] === '.env') {\n delete job.with['dot_env_path'];\n }\n\n if (config.containingDockerfile && kind.startsWith('deploy')) {\n job.with['cpu_arch'] = 'X64';\n }\n // Because github.event.repository.private is always true if job is scheduled\n if (kind === 'release' || kind === 'test' || kind === 'wbfy' || kind === 'wbfy-merge' || kind.startsWith('deploy')) {\n if (config.publicRepo) {\n job.with['github_hosted_runner'] = true;\n }\n } else {\n delete job.with['github_hosted_runner'];\n }\n\n if (Object.keys(job.with).length > 0) {\n sortKeys(job.with);\n } else {\n delete job.with;\n }\n if (Object.keys(job.secrets).length > 0) {\n // Move secrets prop after with prop\n const newSecrets = sortKeys(job.secrets);\n delete job.secrets;\n job.secrets = newSecrets;\n } else {\n delete job.secrets;\n }\n}\n\nfunction setSchedule(newSettings: any, inclusiveMinHourJst: number, exclusiveMaxHourJst: number): void {\n const [minuteUtc, hourUtc] = ((newSettings.on.schedule?.[0]?.cron as string) ?? '').split(' ').map(Number);\n if (minuteUtc !== 0 && Number.isInteger(hourUtc)) {\n const hourJst = (hourUtc + 9) % 24;\n const inRange =\n inclusiveMinHourJst < exclusiveMaxHourJst\n ? inclusiveMinHourJst <= hourJst && hourJst < exclusiveMaxHourJst\n : inclusiveMinHourJst <= hourJst || hourJst < exclusiveMaxHourJst;\n if (inRange) return;\n console.log(\n 'setSchedule:',\n newSettings,\n minuteUtc,\n hourUtc,\n inRange,\n hourJst,\n inclusiveMinHourJst,\n exclusiveMaxHourJst\n );\n } else {\n console.log('setSchedule:', newSettings, minuteUtc, hourUtc);\n }\n\n const minJst = 1 + Math.floor(Math.random() * 59);\n const hourJst = inclusiveMinHourJst + Math.floor(Math.random() * (exclusiveMaxHourJst - inclusiveMinHourJst));\n const cron = `${minJst} ${(hourJst - 9 + 24) % 24} * * *`;\n newSettings.on.schedule = [{ cron }];\n}\n\nasync function writeYaml(newSettings: any, filePath: string): Promise<void> {\n const yamlText = yaml.dump(newSettings, {\n lineWidth: -1,\n noCompatMode: true,\n styles: {\n '!!null': 'empty',\n },\n });\n await fs.promises.writeFile(filePath, yamlText);\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { PluginMeta } from '@yarnpkg/core/lib/Plugin';\nimport yaml from 'js-yaml';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateYarnrcYml(config: PackageConfig): Promise<void> {\n return logger.function('generateYarnrcYml', async () => {\n const currentVersion = spawnSyncWithStringResult('yarn', ['--version'], config.dirPath);\n const latestVersion = getLatestVersion('@yarnpkg/cli', config.dirPath);\n if (getMajorNumber(currentVersion) <= getMajorNumber(latestVersion) && currentVersion !== latestVersion) {\n spawnSync('yarn', ['set', 'version', latestVersion], config.dirPath, 1);\n }\n\n const releasesPath = path.join(config.dirPath, '.yarn', 'releases');\n await fs.promises.mkdir(releasesPath, { recursive: true });\n for (const file of await fs.promises.readdir(releasesPath)) {\n if (file.startsWith('yarn-') && !file.startsWith(`yarn-${latestVersion}.`)) {\n await promisePool.run(() => fs.promises.rm(path.join(releasesPath, file)));\n console.log('Removed', path.join(releasesPath, file));\n }\n }\n\n const yarnrcPath = path.resolve(config.dirPath, '.yarnrc');\n await promisePool.run(() => fs.promises.rm(yarnrcPath, { force: true }));\n\n const yarnrcYmlPath = path.resolve(config.dirPath, '.yarnrc.yml');\n const settings = yaml.load(await fs.promises.readFile(yarnrcYmlPath, 'utf8')) as any;\n settings.defaultSemverRangePrefix = '';\n if (config.requiringNodeModules) {\n settings.nodeLinker = 'node-modules';\n settings.nmMode = 'hardlinks-global';\n // c.f. https://github.com/yarnpkg/berry/pull/4698\n settings.enableGlobalCache = true;\n }\n const originalLength = settings.plugins?.length ?? 0;\n settings.plugins = settings.plugins?.filter((p: PluginMeta) => p.path !== '.yarn/plugins/undefined.cjs') ?? [];\n if (settings.plugins.length !== originalLength) {\n const pluginPath = path.resolve(config.dirPath, '.yarnrc', 'undefined.cjs');\n await promisePool.run(() => fs.promises.rm(pluginPath, { force: true }));\n }\n if (settings.plugins.length === 0) {\n delete settings.plugins;\n }\n await fs.promises.writeFile(yarnrcYmlPath, yaml.dump(settings, { lineWidth: -1 }));\n\n const plugins = (settings.plugins ?? []).map((p: PluginMeta) => p.spec);\n const requireTypeScript = config.containingTypeScript || config.containingTypeScriptInPackages;\n importOrRemovePlugin(config, plugins, requireTypeScript, '@yarnpkg/plugin-typescript');\n if (requireTypeScript && !config.requiringNodeModules) {\n spawnSync('yarn', ['dlx', '@yarnpkg/sdks', 'vscode'], config.dirPath);\n }\n importOrRemovePlugin(config, plugins, config.containingSubPackageJsons, '@yarnpkg/plugin-workspace-tools');\n spawnSync('yarn', ['dlx', 'yarn-plugin-auto-install'], config.dirPath);\n });\n}\n\nexport function getLatestVersion(packageName: string, dirPath: string): string {\n const versionsJson = spawnSyncWithStringResult('npm', ['show', packageName, 'versions', '--json'], dirPath);\n const versions = JSON.parse(versionsJson) as string[];\n return versions[versions.length - 1];\n}\n\nfunction importOrRemovePlugin(config: PackageConfig, plugins: string[], requirePlugin: boolean, plugin: string): void {\n if (requirePlugin !== plugins.includes(plugin)) {\n spawnSync('yarn', ['plugin', requirePlugin ? 'import' : 'remove', plugin], config.dirPath);\n }\n}\n\nfunction getMajorNumber(version: string): number {\n const [major] = version.split('.');\n return Number(major);\n}\n", "import { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { gitHubUtil, hasGitHubToken, octokit } from '../utils/githubUtil';\n\nexport async function setupLabels(config: PackageConfig): Promise<void> {\n return logger.function('setupLabels', async () => {\n if (!hasGitHubToken) return;\n\n const [owner, repo] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (!owner || !repo) return;\n if (owner !== 'WillBooster' && owner !== 'WillBoosterLab') return;\n\n try {\n await setupLabel(owner, repo, 'd1: x-easy :hedgehog:', 'EDE9FE');\n await setupLabel(owner, repo, 'd2: easy :rabbit2:', 'DDD6FE');\n await setupLabel(owner, repo, 'd3: medium :ox:', 'C4B5FD');\n await setupLabel(owner, repo, 'd4: hard :squid:', 'A78BFA');\n await setupLabel(owner, repo, 'd5: x-hard :whale2:', '8B5CF6');\n await setupLabel(owner, repo, 'p1: critical :fire::fire::fire:', 'EF4444');\n await setupLabel(owner, repo, 'p2: urgent :fire::fire:', 'F87171');\n await setupLabel(owner, repo, 'p3: important :fire:', 'FCA5A5');\n await setupLabel(owner, repo, 'p4: nice to have :droplet:', 'FECACA');\n await setupLabel(owner, repo, 'r: blitz', '5300bc');\n await setupLabel(owner, repo, 'r: firebase', 'ffca28');\n await setupLabel(owner, repo, 'r: prisma', '0c344b');\n await setupLabel(owner, repo, 'r: react', '61dafb');\n await setupLabel(owner, repo, 'r: svelte', 'ff3e00');\n await setupLabel(owner, repo, 'r: semantic-release', '494949');\n await setupLabel(owner, repo, 'ready :rocket:', '22C55E');\n await setupLabel(owner, repo, 'review requested :mag:', 'FBCA04');\n await setupLabel(owner, repo, 'released :bookmark:', '6366F1');\n await setupLabel(owner, repo, 's: 0.5h :clock1230:', 'F3F4F6');\n await setupLabel(owner, repo, 's: 1h :clock1:', 'E5E7EB');\n await setupLabel(owner, repo, 's: 2h :clock2:', 'D1D5DB');\n await setupLabel(owner, repo, 's: 3h :clock3:', '9CA3AF');\n await setupLabel(owner, repo, 's: 5h :clock5:', '6B7280');\n await setupLabel(owner, repo, 's: 8h :clock8:', '4B5563');\n await setupLabel(owner, repo, 's: 13h :clock1:', '374151');\n await setupLabel(owner, repo, 't: build :hammer:', 'BFDBFE');\n await setupLabel(owner, repo, 't: chore :broom:', 'BFDBFE');\n await setupLabel(owner, repo, 't: ci :construction_worker:', 'BFDBFE');\n await setupLabel(owner, repo, 't: docs :memo:', 'BFDBFE');\n await setupLabel(owner, repo, 't: feat :sparkles:', 'BFDBFE');\n await setupLabel(owner, repo, 't: fix :bug:', 'BFDBFE');\n await setupLabel(owner, repo, 't: perf :zap:', 'BFDBFE');\n await setupLabel(owner, repo, 't: refactor :recycle:', 'BFDBFE');\n await setupLabel(owner, repo, 't: style :lipstick:', 'BFDBFE');\n await setupLabel(owner, repo, 't: test :test_tube:', 'BFDBFE');\n await setupLabel(owner, repo, 'project', '24292F');\n\n await deleteLabel(owner, repo, 'bug');\n await deleteLabel(owner, repo, 'documentation');\n await deleteLabel(owner, repo, 'duplicate');\n await deleteLabel(owner, repo, 'enhancement');\n await deleteLabel(owner, repo, 'good first issue');\n await deleteLabel(owner, repo, 'help wanted');\n await deleteLabel(owner, repo, 'invalid');\n await deleteLabel(owner, repo, 'question');\n await deleteLabel(owner, repo, 'wontfix');\n\n await deleteLabel(owner, repo, 'ready');\n await deleteLabel(owner, repo, 'review requested');\n await deleteLabel(owner, repo, 'released');\n await deleteLabel(owner, repo, 'semantic-release');\n } catch (error) {\n console.warn('Skip setupLabels due to:', (error as Error)?.stack ?? error);\n }\n });\n}\n\nasync function setupLabel(owner: string, repo: string, name: string, color: string): Promise<void> {\n try {\n await octokit.request('POST /repos/{owner}/{repo}/labels', {\n owner,\n repo,\n name,\n color,\n });\n } catch {\n await octokit.request('PATCH /repos/{owner}/{repo}/labels/{name}', {\n owner,\n repo,\n name,\n color,\n });\n }\n}\n\nasync function deleteLabel(owner: string, repo: string, name: string): Promise<void> {\n try {\n await octokit.request('DELETE /repos/{owner}/{repo}/labels/{name}', {\n owner,\n repo,\n name,\n });\n } catch {\n // do nothing\n }\n}\n", "import dotenv from 'dotenv';\nimport sodium from 'libsodium-wrappers';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { gitHubUtil, hasGitHubToken, octokit } from '../utils/githubUtil';\n\nconst deprecatedSecretNames = ['READY_DISCORD_WEBHOOK_URL'];\n\nexport async function setupSecrets(config: PackageConfig): Promise<void> {\n return logger.function('setupSecrets', async () => {\n if (!hasGitHubToken) return;\n\n const [owner, repo] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (!owner || !repo || owner !== 'WillBoosterLab') return;\n\n const parsed = dotenv.config().parsed || {};\n if (Object.keys(parsed).length === 0) return;\n\n try {\n for (const secretName of deprecatedSecretNames) {\n try {\n await octokit.request('DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}', {\n owner,\n repo,\n secret_name: secretName,\n });\n } catch {\n // do nothing\n }\n }\n\n const response = await octokit.request('GET /repos/{owner}/{repo}/actions/secrets/public-key', {\n owner,\n repo,\n });\n const { key, key_id: keyId } = response.data;\n\n await sodium.ready;\n\n for (const [name, secret] of Object.entries(parsed)) {\n if (config.publicRepo && name === 'GH_BOT_PAT') continue;\n if (!config.publicRepo && name === 'PUBLIC_GH_BOT_PAT') continue;\n\n // Convert Secret & Base64 key to Uint8Array.\n const rawKey = sodium.from_base64(key, sodium.base64_variants.ORIGINAL);\n const rawSec = sodium.from_string(secret);\n\n // Encrypt the secret using LibSodium\n const encBytes = sodium.crypto_box_seal(rawSec, rawKey);\n\n // Convert encrypted Uint8Array to Base64\n const encBase64 = sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL);\n\n await octokit.request('PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}', {\n owner,\n repo,\n secret_name: name,\n encrypted_value: encBase64,\n key_id: keyId,\n });\n }\n } catch (error) {\n console.warn('Skip setupSecrets due to:', (error as Error)?.stack ?? error);\n }\n });\n}\n", "import { PackageConfig } from '../packageConfig';\n\nexport async function setupSettings(config: PackageConfig): Promise<void> {\n // TODO: implement code for https://github.com/WillBooster/wbfy/issues/324\n}\n", "import fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\n\nimport glob from 'glob';\nimport yaml from 'js-yaml';\nimport { simpleGit } from 'simple-git';\n\nimport { gitHubUtil, octokit } from './utils/githubUtil';\n\nexport interface PackageConfig {\n dirPath: string;\n root: boolean;\n publicRepo: boolean;\n referredByOtherRepo: boolean;\n repository?: string;\n willBoosterConfigs: boolean;\n containingSubPackageJsons: boolean;\n containingDockerfile: boolean;\n containingGemfile: boolean;\n containingGoMod: boolean;\n containingPackageJson: boolean;\n containingPoetryLock: boolean;\n containingPomXml: boolean;\n containingPubspecYaml: boolean;\n containingTemplateYaml: boolean;\n\n containingJavaScript: boolean;\n containingTypeScript: boolean;\n containingJsxOrTsx: boolean;\n containingJavaScriptInPackages: boolean;\n containingTypeScriptInPackages: boolean;\n containingJsxOrTsxInPackages: boolean;\n depending: {\n blitz?: string;\n firebase: boolean;\n prisma: boolean;\n reactNative: boolean;\n semanticRelease: boolean;\n storybook: boolean;\n };\n release: {\n branches: string[];\n github: boolean;\n npm: boolean;\n };\n eslintBase?: string;\n requiringNodeModules: boolean;\n versionsText?: string;\n}\n\nexport async function getPackageConfig(dirPath: string): Promise<PackageConfig | undefined> {\n const packageJsonPath = path.resolve(dirPath, 'package.json');\n try {\n const containingPackageJson = fs.existsSync(packageJsonPath);\n let dependencies: { [key: string]: string } = {};\n let devDependencies: { [key: string]: string } = {};\n let packageJson: any = {};\n if (containingPackageJson) {\n const packageJsonText = fs.readFileSync(packageJsonPath, 'utf8');\n packageJson = JSON.parse(packageJsonText);\n dependencies = packageJson.dependencies ?? {};\n devDependencies = packageJson.devDependencies ?? {};\n }\n\n let requiringNodeModules = true;\n try {\n const yarnrcYmlPath = path.resolve(dirPath, '.yarnrc.yml');\n const doc = yaml.load(await fsp.readFile(yarnrcYmlPath, 'utf8')) as any;\n requiringNodeModules = !doc.nodeLinker || doc.nodeLinker === 'node-modules';\n } catch {\n // do nothing\n }\n\n let releaseBranches: string[] = [];\n let releasePlugins: string[] = [];\n try {\n const releasercJsonPath = path.resolve(dirPath, '.releaserc.json');\n const json = JSON.parse(await fsp.readFile(releasercJsonPath, 'utf8'));\n releaseBranches = json?.branches || [];\n releasePlugins = json?.plugins?.flat() || [];\n } catch {\n // do nothing\n }\n\n const isRoot =\n path.basename(path.resolve(dirPath, '..')) !== 'packages' ||\n !fs.existsSync(path.resolve(dirPath, '..', '..', 'package.json'));\n\n let repoInfo: Record<string, any> | undefined;\n if (isRoot) {\n repoInfo = await getRepoInfo(dirPath, packageJson);\n }\n\n let versionsText: string | undefined;\n try {\n versionsText = await fsp.readFile(path.resolve(dirPath, '.tool-versions'), 'utf8');\n } catch {\n try {\n const nodeVersionContent = await fsp.readFile(path.resolve(dirPath, '.node-version'), 'utf8');\n versionsText = 'nodejs ' + nodeVersionContent.trim();\n } catch {\n // do nothing\n }\n }\n\n const config: PackageConfig = {\n dirPath,\n root: isRoot,\n publicRepo: repoInfo?.private === false,\n referredByOtherRepo: !!packageJson.files,\n repository: repoInfo?.full_name ? `github:${repoInfo?.full_name}` : undefined,\n willBoosterConfigs: packageJsonPath.includes(`${path.sep}willbooster-configs`),\n containingSubPackageJsons: glob.sync('packages/**/package.json', { cwd: dirPath }).length > 0,\n containingDockerfile:\n fs.existsSync(path.resolve(dirPath, 'Dockerfile')) ||\n fs.existsSync(path.resolve(dirPath, 'docker-compose.yml')),\n containingGemfile: fs.existsSync(path.resolve(dirPath, 'Gemfile')),\n containingGoMod: fs.existsSync(path.resolve(dirPath, 'go.mod')),\n containingPackageJson: fs.existsSync(path.resolve(dirPath, 'package.json')),\n containingPoetryLock: fs.existsSync(path.resolve(dirPath, 'poetry.lock')),\n containingPomXml: fs.existsSync(path.resolve(dirPath, 'pom.xml')),\n containingPubspecYaml: fs.existsSync(path.resolve(dirPath, 'pubspec.yaml')),\n containingTemplateYaml: fs.existsSync(path.resolve(dirPath, 'template.yaml')),\n containingJavaScript:\n glob.sync('@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}', { cwd: dirPath }).length > 0,\n containingTypeScript:\n glob.sync('@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}', { cwd: dirPath }).length > 0,\n containingJsxOrTsx: glob.sync('@(app|src|__tests__)/**/*.{t,j}sx', { cwd: dirPath }).length > 0,\n containingJavaScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}', { cwd: dirPath }).length > 0,\n containingJsxOrTsxInPackages:\n glob.sync('packages/**/@(app|src|__tests__)/**/*.{t,j}sx', { cwd: dirPath }).length > 0,\n depending: {\n blitz: (dependencies['blitz'] || devDependencies['blitz'] || '').replace('^', '')[0],\n firebase: !!devDependencies['firebase-tools'],\n prisma: !!devDependencies['prisma'],\n reactNative: !!dependencies['react-native'],\n semanticRelease: !!(\n devDependencies['semantic-release'] ||\n releaseBranches.length > 0 ||\n releasePlugins.length > 0\n ),\n storybook: !!devDependencies['@storybook/react'],\n },\n release: {\n branches: releaseBranches,\n github: releasePlugins.includes('@semantic-release/github'),\n npm: releasePlugins.includes('@semantic-release/npm'),\n },\n requiringNodeModules,\n versionsText,\n };\n config.eslintBase = getEslintExtensionBase(config);\n if (\n config.containingGemfile ||\n config.containingGoMod ||\n config.containingPackageJson ||\n config.containingPoetryLock ||\n config.containingPomXml ||\n config.containingPubspecYaml ||\n config.containingTemplateYaml\n ) {\n return config;\n }\n } catch {\n // do nothing\n }\n}\n\nfunction getEslintExtensionBase(config: PackageConfig): string | undefined {\n if (config.containingTypeScript) {\n return config.containingJsxOrTsx ? '@willbooster/eslint-config-ts-react' : '@willbooster/eslint-config-ts';\n } else {\n if (config.containingJsxOrTsx) {\n return '@willbooster/eslint-config-js-react';\n } else if (config.containingJavaScript) {\n return '@willbooster/eslint-config-js';\n }\n }\n}\n\nasync function getRepoInfo(dirPath: string, packageJson: any): Promise<Record<string, any> | undefined> {\n const git = simpleGit(dirPath);\n const remotes = await git.getRemotes(true);\n const origin = remotes.find((r) => r.name === 'origin');\n const remoteUrl = origin?.refs?.fetch ?? origin?.refs?.push;\n if (typeof remoteUrl === 'string') {\n const json = await fetchRepoInfo(remoteUrl);\n if (json) return json;\n }\n\n const url = packageJson.repository?.url ?? packageJson.repository;\n if (typeof url === 'string') {\n const json = await fetchRepoInfo(url);\n if (json && json.message !== 'Not Found') return json;\n }\n}\n\nasync function fetchRepoInfo(urlOrFullName: string): Promise<Record<string, any> | undefined> {\n const [org, name] = gitHubUtil.getOrgAndName(urlOrFullName);\n if (!org || !name) return;\n\n const ret = { full_name: `${org}/${name}` };\n try {\n const response = await octokit.request('GET /repos/{owner}/{repo}', {\n owner: org,\n repo: name,\n });\n Object.assign(ret, response.data);\n } catch {\n // do nothing\n }\n return ret;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_node_path", "import_glob", "import_yargs", "import_node_fs", "import_node_path", "Options", "options", "Logger", "name", "func", "options", "logger", "import_minimal_promise_pool", "promisePool", "import_node_child_process", "spawnSync", "command", "args", "cwd", "retry", "newCmd", "newArgs", "options", "getSpawnSyncArgs", "child_process", "spawnSyncWithStringResult", "proc", "error", "s", "env", "generateVersionConfigs", "config", "logger", "core", "lines", "versionText", "line", "version", "promisePool", "fs", "path", "updateLine", "spawnSyncWithStringResult", "toolVersionsPath", "spawnSync", "insertionIndex", "prefix", "index", "l", "import_node_path", "extensions", "import_promises", "FsUtil", "filePath", "fsp", "content", "newContent", "generateExtensions", "extensions", "generateEditorconfig", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_node_path", "import_node_fs", "userContentHeader", "userContentHeaderRegex", "separator", "separatorPrefix", "defaultHeadUserContent", "defaultTailUserContent", "ignoreFileUtil", "filePath", "content", "fs", "lastHeaderIndex", "getIndexOfTailUserContentHeader", "index", "lastIndex", "commonContent", "generateEslintignore", "config", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "gitignoreFilePath", "gitignoreContent", "newContent", "promisePool", "import_node_fs", "import_node_path", "import_deepmerge", "import_deepmerge", "overwriteMerge", "destinationArray", "sourceArray", "combineMerge", "target", "source", "options", "destination", "index", "item", "merge", "generateEslintrc", "config", "rootConfig", "logger", "bases", "newSettings", "filePath", "path", "oldContent", "fs", "oldSettings", "ext", "newExtends", "merge", "combineMerge", "addExtensionToHead", "newContent", "promisePool", "FsUtil", "extension", "e", "import_node_path", "newContent", "extensions", "ext", "generateGitattributes", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_node_fs", "import_node_os", "import_node_path", "defaultNames", "commonContent", "generateGitignore", "config", "rootConfig", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "names", "generated", "name", "readCache", "url", "responseText", "promisePool", "writeCache", "options", "newContent", "dirPath", "os", "fs", "stat", "import_node_fs", "import_node_path", "import_node_fs", "import_node_path", "import_deepmerge", "EslintUtil", "config", "import_core", "token", "hasGitHubToken", "octokit", "GitHubUtil", "urlOrFullName", "_a", "urlWithoutProtocol", "names", "org", "name", "gitHubUtil", "srcDirectories", "getSrcDirs", "config", "jsCommonDeps", "tsCommonDeps", "reactCommonDeps", "devDeps", "generatePackageJson", "config", "rootConfig", "skipAddingDeps", "logger", "core", "_a", "_b", "filePath", "path", "jsonText", "fs", "jsonObj", "removeDeprecatedStuff", "scriptKey", "merge", "generateScripts", "generatePrettierSuffix", "dependencies", "devDependencies", "poetryDependencies", "dep", "owner", "gitHubUtil", "EslintUtil", "dirs", "dir", "entries", "filteredDirNames", "entry", "dirPath", "fileName", "d", "spawnSync", "deps", "promisePool", "scripts", "getSrcDirs", "extensions", "existingContent", "index", "ignoreFileUtil", "line", "newLine", "l", "DEFAULT_COMMAND", "settings", "generateHuskyrc", "config", "logger", "core", "_a", "_b", "packageJsonPath", "path", "jsonText", "fs", "packageJson", "dirPath", "spawnSync", "preCommitFilePath", "content", "promisePool", "prePush", "typecheck", "generateScripts", "postMergeCommands", "postMergeCommand", "import_node_fs", "import_node_path", "newContent", "generateIdeaSettings", "config", "logger", "dirPath", "path", "fs", "filePath", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "generateLintstagedrc", "config", "logger", "core", "packagePrefix", "lines", "eslint", "getEslintKey", "EslintUtil", "packagesFilter", "extensions", "getEslintFilterForPrettier", "newContent", "filePath", "path", "promisePool", "fs", "FsUtil", "getSrcDirs", "import_node_path", "commonContent", "generatePrettierignore", "config", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "gitignoreFilePath", "gitignoreContent", "additionalContent", "newContent", "promisePool", "import_node_fs", "import_node_path", "generateReadme", "config", "logger", "_a", "_b", "filePath", "path", "newContent", "fs", "insertBadge", "semanticReleaseBadge", "repository", "fileNames", "fileName", "badgeName", "badge", "promisePool", "FsUtil", "badgePos", "inserted", "i", "import_node_fs", "import_node_path", "import_deepmerge", "generateReleaserc", "rootConfig", "logger", "filePath", "path", "settings", "fs", "plugins", "plugin", "oldConfig", "merge", "overwriteMerge", "newContent", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_lodash", "jsonObj", "generateRenovateJson", "config", "logger", "newSettings", "cloneDeep", "filePath", "path", "oldContent", "fs", "oldSettings", "merge", "overwriteMerge", "promisePool", "newContent", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_lodash", "sortKeys", "obj", "keyAndValues", "key1", "key2", "key", "value", "rootJsonObj", "subJsonObj", "generateTsconfig", "config", "rootConfig", "logger", "_a", "_b", "newSettings", "cloneDeep", "dirPath", "filePath", "path", "existingContent", "fs", "oldSettings", "merge", "overwriteMerge", "sortKeys", "newContent", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_js_yaml", "import_lodash", "workflows", "generateWorkflow", "rootConfig", "logger", "_a", "workflowsPath", "path", "fs", "semanticYmlPath", "promisePool", "fileNames", "dirent", "fileName", "kind", "writeWorkflowYaml", "config", "_b", "newSettings", "cloneDeep", "filePath", "oldContent", "oldSettings", "yaml", "merge", "combineMerge", "job", "normalizeJob", "setSchedule", "writeYaml", "params", "_c", "sortKeys", "newSecrets", "inclusiveMinHourJst", "exclusiveMaxHourJst", "minuteUtc", "hourUtc", "hourJst", "inRange", "minJst", "cron", "yamlText", "import_node_fs", "import_node_path", "import_js_yaml", "generateYarnrcYml", "config", "logger", "_a", "_b", "currentVersion", "spawnSyncWithStringResult", "latestVersion", "getLatestVersion", "getMajorNumber", "spawnSync", "releasesPath", "path", "fs", "file", "promisePool", "yarnrcPath", "yarnrcYmlPath", "settings", "yaml", "originalLength", "p", "pluginPath", "plugins", "requireTypeScript", "importOrRemovePlugin", "packageName", "dirPath", "versionsJson", "versions", "requirePlugin", "plugin", "version", "major", "setupLabels", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "setupLabel", "deleteLabel", "error", "name", "color", "octokit", "import_dotenv", "import_libsodium_wrappers", "deprecatedSecretNames", "setupSecrets", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "parsed", "dotenv", "secretName", "octokit", "response", "key", "keyId", "sodium", "name", "secret", "rawKey", "rawSec", "encBytes", "encBase64", "error", "setupSettings", "config", "import_node_fs", "import_promises", "import_node_path", "import_glob", "import_js_yaml", "import_simple_git", "getPackageConfig", "dirPath", "_a", "packageJsonPath", "path", "containingPackageJson", "fs", "dependencies", "devDependencies", "packageJson", "packageJsonText", "requiringNodeModules", "yarnrcYmlPath", "doc", "yaml", "fsp", "releaseBranches", "releasePlugins", "releasercJsonPath", "json", "isRoot", "repoInfo", "getRepoInfo", "versionsText", "config", "glob", "getEslintExtensionBase", "_b", "_c", "origin", "r", "remoteUrl", "fetchRepoInfo", "url", "urlOrFullName", "org", "name", "gitHubUtil", "ret", "response", "octokit", "main", "argv", "yargs", "options", "rootDirPath", "rootConfig", "getPackageConfig", "subDirPaths", "glob", "subDirPath", "path", "subPackageConfigs", "config", "allPackageConfigs", "generateVersionConfigs", "generateYarnrcYml", "generateEditorconfig", "generateGitattributes", "generateHuskyrc", "generateIdeaSettings", "generateLintstagedrc", "generateReadme", "generateRenovateJson", "generateReleaserc", "generateWorkflow", "setupLabels", "setupSecrets", "setupSettings", "promisePool", "promises", "generateGitignore", "generatePrettierignore", "generatePackageJson", "generateTsconfig", "generateEslintrc", "generateEslintignore", "spawnSync"]
4
+ "sourcesContent": ["import path from 'node:path';\n\nimport glob from 'glob';\nimport yargs from 'yargs';\n\nimport { generateVersionConfigs } from './generators/asdf';\nimport { generateEditorconfig } from './generators/editorconfig';\nimport { generateEslintignore } from './generators/eslintignore';\nimport { generateEslintrc } from './generators/eslintrc';\nimport { generateGitattributes } from './generators/gitattributes';\nimport { generateGitignore } from './generators/gitignore';\nimport { generateHuskyrc } from './generators/huskyrc';\nimport { generateIdeaSettings } from './generators/idea';\nimport { generateLintstagedrc } from './generators/lintstagedrc';\nimport { generatePackageJson } from './generators/packageJson';\nimport { generatePrettierignore } from './generators/prettierignore';\nimport { generateReadme } from './generators/readme';\nimport { generateReleaserc } from './generators/releaserc';\nimport { generateRenovateJson } from './generators/renovaterc';\nimport { generateTsconfig } from './generators/tsconfig';\nimport { generateWorkflow } from './generators/workflow';\nimport { generateYarnrcYml } from './generators/yarnrc';\nimport { setupLabels } from './github/label';\nimport { setupSecrets } from './github/secret';\nimport { setupSettings } from './github/settings';\nimport { options } from './options';\nimport { getPackageConfig, PackageConfig } from './packageConfig';\nimport { promisePool } from './utils/promisePool';\nimport { spawnSync } from './utils/spawnUtil';\n\nasync function main(): Promise<void> {\n const argv = await yargs(process.argv.slice(2))\n .command('wbfy <paths...>', 'Generate/update project files for WillBooster')\n .demandCommand(1)\n .alias('d', 'skipDeps')\n .boolean('skipDeps')\n .default('skipDeps', false)\n .describe('skipDeps', 'Skip dependency installation')\n .alias('v', 'verbose')\n .boolean('verbose')\n .default('verbose', false).argv;\n options.isVerbose = argv.verbose;\n\n for (const rootDirPath of argv._) {\n if (typeof rootDirPath === 'number') continue;\n\n const rootConfig = await getPackageConfig(rootDirPath);\n if (!rootConfig) {\n console.error(`there is no valid package.json in ${rootDirPath}`);\n continue;\n }\n\n const subDirPaths = rootConfig.containingSubPackageJsons\n ? glob.sync('packages/*', { cwd: rootDirPath }).map((subDirPath) => path.resolve(rootDirPath, subDirPath))\n : [];\n const nullableSubPackageConfigs = await Promise.all(subDirPaths.map((subDirPath) => getPackageConfig(subDirPath)));\n const subPackageConfigs = nullableSubPackageConfigs.filter((config) => !!config) as PackageConfig[];\n const allPackageConfigs = [rootConfig, ...subPackageConfigs];\n\n if (options.isVerbose) {\n for (const config of allPackageConfigs) {\n console.info(config);\n }\n }\n\n // Install tools via asdf at first\n await generateVersionConfigs(rootConfig);\n // Install yarn berry\n await generateYarnrcYml(rootConfig);\n await Promise.all([\n generateEditorconfig(rootConfig),\n generateGitattributes(rootConfig),\n generateHuskyrc(rootConfig),\n generateIdeaSettings(rootConfig),\n generateLintstagedrc(rootConfig),\n generateReadme(rootConfig),\n generateRenovateJson(rootConfig),\n generateReleaserc(rootConfig),\n generateWorkflow(rootConfig),\n setupLabels(rootConfig),\n setupSecrets(rootConfig),\n setupSettings(rootConfig),\n ]);\n await promisePool.promiseAll();\n\n const promises: Promise<void>[] = [];\n for (const config of allPackageConfigs) {\n await generateGitignore(config, rootConfig);\n await promisePool.promiseAll();\n if (!config.root && !config.containingPackageJson) {\n continue;\n }\n await generatePrettierignore(config);\n await generatePackageJson(config, rootConfig, argv.skipDeps);\n\n promises.push(generateLintstagedrc(config));\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n promises.push(generateTsconfig(config, rootConfig));\n }\n if (\n config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages\n ) {\n if (!rootConfig.willBoosterConfigs) {\n promises.push(generateEslintrc(config, rootConfig));\n }\n promises.push(generateEslintignore(config));\n }\n }\n await Promise.all(promises);\n await promisePool.promiseAll();\n\n spawnSync('yarn', ['cleanup'], rootDirPath);\n // 'yarn install' should be after `yarn cleanup` because yarn berry generates yarn.lock\n // corresponding to the contents of dependant sub-package in monorepo\n spawnSync('yarn', ['install'], rootDirPath);\n }\n}\n\nmain().then();\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateVersionConfigs(config: PackageConfig): Promise<void> {\n return logger.function('generateVersionConfigs', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n if (!config.versionsText) return;\n\n const lines: string[] = [];\n for (const versionText of config.versionsText.trim().split('\\n')) {\n const line = versionText.trim();\n if (line && line.split(/\\s+/)[0] !== 'nodejs') {\n lines.push(line);\n continue;\n }\n const [, version] = line.split(/\\s+/);\n await promisePool.run(() => fs.promises.writeFile(path.resolve(config.dirPath, '.node-version'), version));\n }\n if (config.containingPoetryLock) {\n updateLine('poetry 1.3.1', 0, lines);\n // Don't update python in .python-version automatically\n if (!fs.existsSync(path.resolve(config.dirPath, '.python-version'))) {\n updateLine('python 3.9.16', 0, lines);\n }\n }\n if (config.depending.firebase) {\n updateLine('java adoptopenjdk-17.0.5+8', 0, lines);\n }\n if (config.containingPackageJson) {\n const version = spawnSyncWithStringResult('npm', ['show', 'yarn', 'version'], config.dirPath);\n updateLine(`yarn ${version}`, lines.length, lines);\n }\n\n const toolVersionsPath = path.resolve(config.dirPath, '.tool-versions');\n await (lines.length > 0\n ? promisePool.run(() => fs.promises.writeFile(toolVersionsPath, lines.join('\\n') + '\\n'))\n : promisePool.run(() => fs.promises.rm(toolVersionsPath, { force: true })));\n await promisePool.promiseAll();\n spawnSync('asdf', ['plugin', 'update', '--all'], config.dirPath);\n spawnSync('asdf', ['install'], config.dirPath);\n}\n\nfunction updateLine(line: string, insertionIndex: number, lines: string[]): void {\n const [toolName] = line.split(' ');\n const index = lines.findIndex((l) => l.split(/\\s+/)[0] === toolName);\n if (index >= 0) {\n lines[index] = line;\n } else {\n lines.splice(insertionIndex, 0, line);\n }\n}\n", "class Options {\n isVerbose: boolean;\n\n constructor() {\n this.isVerbose = false;\n }\n}\n\nexport const options = new Options();\n", "import { options } from './options';\n\nclass Logger {\n async function(name: string, func: () => Promise<void>): Promise<void> {\n if (options.isVerbose) {\n console.info(`--------- ${name} start ---------`);\n }\n await func();\n if (options.isVerbose) {\n console.info(`---------- ${name} end ----------`);\n }\n }\n}\n\nexport const logger = new Logger();\n", "import { PromisePool } from 'minimal-promise-pool';\n\nexport const promisePool = new PromisePool();\n", "import child_process, { SpawnSyncOptions } from 'node:child_process';\n\nexport function spawnSync(command: string, args: string[], cwd: string, retry = 0): void {\n do {\n const [newCmd, newArgs, options] = getSpawnSyncArgs(command, args, cwd);\n console.log(`$ ${newCmd} ${newArgs.join(' ')} at ${options.cwd}`);\n const ret = child_process.spawnSync(newCmd, newArgs, options);\n if (ret.status === 0) break;\n } while (--retry >= 0);\n}\n\nexport function spawnSyncWithStringResult(command: string, args: string[], cwd: string): string {\n const [newCmd, newArgs, options] = getSpawnSyncArgs(command, args, cwd);\n options.stdio = 'pipe';\n const proc = child_process.spawnSync(newCmd, newArgs, options);\n const error = proc.stderr.toString().trim();\n if (error) {\n console.error(`${newCmd} [${newArgs.map((s) => `\"${s}\"`)}] caused the following error:\\n ${error}`);\n }\n return proc.stdout.toString().trim();\n}\n\nexport function getSpawnSyncArgs(command: string, args: string[], cwd: string): [string, string[], SpawnSyncOptions] {\n const env = { ...process.env };\n // Remove berry from PATH\n if (env.PATH && env.BERRY_BIN_FOLDER) {\n env.PATH = env.PATH.replace(`${env.BERRY_BIN_FOLDER}:`, '');\n }\n\n if (env.ASDF_DIR) {\n args = ['-l', '-c', `. ${env.ASDF_DIR}/asdf.sh && ${command} ${args.join(' ')}`];\n command = 'bash';\n }\n return [\n command,\n args,\n {\n cwd,\n env,\n shell: false,\n stdio: 'inherit',\n },\n ];\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n${generateExtensions(extensions.codeWith2IndentSize)}\nindent_size = 2\nindent_style = space\n\n${generateExtensions(extensions.codeWith4IndentSize)}\nindent_size = 4\nindent_style = space\n\n${generateExtensions(extensions.codeWith8IndentSize)}\nindent_size = 8\nindent_style = space\n\n${generateExtensions(extensions.markdownLike)}\nmax_line_length = off\ntrim_trailing_whitespace = false\n\n[{Makefile,*.mk}]\nindent_style = tab\n`;\n\nexport async function generateEditorconfig(config: PackageConfig): Promise<void> {\n return logger.function('generateEditorconfig', async () => {\n const filePath = path.resolve(config.dirPath, '.editorconfig');\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nfunction generateExtensions(extensions: string[]): string {\n return extensions.length > 1 ? `[*.{${extensions.join(',')}}]` : `[*.${extensions[0]}]`;\n}\n", "export const extensions = {\n codeWith2IndentSize: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\n 'cts',\n 'mts',\n 'ts',\n 'tsx',\n 'json',\n 'json5',\n 'cpp',\n 'dart',\n 'htm',\n 'html',\n 'pu',\n 'puml',\n 'rb',\n 'vue',\n 'yaml',\n 'yml',\n ].sort(),\n codeWith4IndentSize: ['go', 'gradle', 'py'].sort(),\n codeWith8IndentSize: ['sh'].sort(),\n markdownLike: ['md'].sort(),\n eslint: ['cjs', 'mjs', 'js', 'cts', 'mts', 'ts', 'tsx', 'jsx'].sort(),\n prettier: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\n 'cts',\n 'mts',\n 'ts',\n 'tsx',\n 'json',\n 'json5',\n 'css',\n 'htm',\n 'html',\n 'md',\n 'scss',\n 'vue',\n 'yaml',\n 'yml',\n ].sort(),\n};\n", "import fsp from 'node:fs/promises';\n\nexport const FsUtil = {\n async readFileIgnoringError(filePath: string): Promise<string | undefined> {\n try {\n return await fsp.readFile(filePath, 'utf8');\n } catch {\n // do nothing\n }\n },\n async generateFile(filePath: string, content: string): Promise<void> {\n await fsp.writeFile(filePath, content);\n console.log(`Generated ${filePath}`);\n },\n};\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst commonContent = `\n3rd-party/\n@types/\n__generated__/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.config.*js\n*.d.ts\n*.min.*js\n.yarn/\n.pnp.js\n`;\n\nexport async function generateEslintignore(config: PackageConfig): Promise<void> {\n return logger.function('generateEslintignore', async () => {\n const filePath = path.resolve(config.dirPath, '.eslintignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n const headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await ignoreFileUtil.readGitignoreWithoutSeparators(gitignoreFilePath)) || '';\n\n const newContent = headUserContent + commonContent + gitignoreContent + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\n\nconst userContentHeader = '# Project-specific settings';\nconst userContentHeaderRegex = /# Project-specific settings[^\\n]*\\n/gm;\nconst separator = '# Generated by wbfy';\nconst separatorPrefix = '# Generated by ';\nconst defaultHeadUserContent = `${userContentHeader} (head)\n\n\n${separator}\n`;\nconst defaultTailUserContent = `\n${userContentHeader} (tail)\n`;\n\nexport const ignoreFileUtil = {\n separator,\n separatorPrefix,\n defaultHeadUserContent,\n defaultTailUserContent,\n async readGitignoreWithoutSeparators(filePath: string): Promise<string | undefined> {\n try {\n let content = await fs.promises.readFile(filePath, 'utf8');\n const lastHeaderIndex = getIndexOfTailUserContentHeader(content);\n if (lastHeaderIndex > 0) {\n content = content.slice(0, lastHeaderIndex - 1);\n }\n return (\n content\n .replace(userContentHeaderRegex, '')\n .replace(/# Generated by [^\\n]*\\n/gm, '')\n .replace(/\\r?\\n\\r?\\n(\\r?\\n)+/gm, '\\n\\n')\n .trim() + '\\n'\n );\n } catch {\n // do nothing\n }\n },\n getHeadUserContent(content: string): string {\n const index = content.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return content\n .slice(0, content.indexOf('\\n', index) + 1)\n .replace(userContentHeaderRegex, `${userContentHeader} (head)\\n`);\n }\n return defaultHeadUserContent;\n },\n getTailUserContent(content: string): string | undefined {\n const lastHeaderIndex = getIndexOfTailUserContentHeader(content);\n if (lastHeaderIndex > 0) {\n return content.slice(lastHeaderIndex - 1);\n }\n return defaultTailUserContent;\n },\n async isBerryZeroInstallEnabled(filePath: string): Promise<boolean> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf8');\n return content.includes('\\n!.yarn/cache');\n } catch {\n return false;\n }\n },\n};\n\nfunction getIndexOfTailUserContentHeader(content: string): number {\n const index = content.indexOf(userContentHeader);\n const lastIndex = content.lastIndexOf(userContentHeader);\n return lastIndex > index ? lastIndex : -1;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateEslintrc(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateEslintrc', async () => {\n // TODO: support Blitz v2\n if (rootConfig.depending.blitz === '2') return;\n\n const bases = [];\n if (config.eslintBase) {\n bases.push(config.eslintBase);\n }\n if (config !== rootConfig) {\n bases.push('../../.eslintrc.json');\n }\n let newSettings: any = { root: true, extends: bases };\n\n const filePath = path.resolve(config.dirPath, '.eslintrc.json');\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(oldContent);\n if (oldSettings.extends) {\n oldSettings.extends = oldSettings.extends.filter(\n (ext: string) => !ext.startsWith('@willbooster/') && ext !== '../../.eslintrc.json'\n );\n }\n if (bases.length === 0) {\n oldSettings.extends = [];\n }\n const newExtends = newSettings.extends;\n newSettings.extends = oldSettings.extends;\n oldSettings.extends = newExtends;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n if (config.depending.blitz === '0') {\n addExtensionToHead(newSettings, 'blitz');\n } else if (config.depending.blitz === '2') {\n addExtensionToHead(newSettings, '@blitzjs/next/eslint');\n }\n } catch {\n // do nothing\n }\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nfunction addExtensionToHead(newSettings: any, extension: string): void {\n newSettings.extends = [extension, ...newSettings.extends.filter((e: string) => e !== extension)];\n}\n", "import merge from 'deepmerge';\n\nexport function overwriteMerge(destinationArray: any[], sourceArray: any[]): any[] {\n return sourceArray;\n}\n\n// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\nexport function combineMerge(target: any[], source: any[], options: any): any[] {\n const destination = [...target];\n\n for (const [index, item] of source.entries()) {\n if (destination[index] === undefined) {\n destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);\n } else if (options.isMergeableObject(item)) {\n destination[index] = merge(target[index], item, options);\n } else if (!target.includes(item)) {\n destination.push(item);\n }\n }\n return destination;\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `* text=auto\n\n*.vcproj text eol=crlf\n\n${[...extensions.codeWith2IndentSize, ...extensions.codeWith4IndentSize, ...extensions.markdownLike]\n .map((ext) => `*.${ext} text eol=lf`)\n .join('\\n')}\n`;\n\nexport async function generateGitattributes(config: PackageConfig): Promise<void> {\n return logger.function('generateGitattributes', async () => {\n const filePath = path.resolve(config.dirPath, '.gitattributes');\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { options } from '../options';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst defaultNames = ['windows', 'macos', 'linux', 'jetbrains', 'visualstudiocode', 'emacs', 'vim', 'yarn'];\n\nconst commonContent = `\n.devcontainer/\n.venv/\ndist/\ntemp/\nIcon[\\r]\n*.sqlite3\n*.sqlite3-journal\n`;\n\nexport async function generateGitignore(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateGitignore', async () => {\n const filePath = path.resolve(config.dirPath, '.gitignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n let headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const names = [...defaultNames];\n if (config.containingGemfile) {\n names.push('ruby');\n }\n if (config.containingGoMod) {\n names.push('go');\n headUserContent += `${path.basename(config.dirPath)}\n`;\n }\n if (config.containingPackageJson) {\n names.push('node');\n }\n if (config.containingPomXml) {\n names.push('maven');\n headUserContent += `.idea/google-java-format.xml\n`;\n }\n if (config.containingPubspecYaml) {\n names.push('flutter', 'AndroidStudio', 'ruby');\n headUserContent += `.flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n`;\n }\n if (config.containingTemplateYaml) {\n headUserContent += `.aws-sam/\npackaged.yaml\n`;\n }\n // Because .venv should be ignored on root directory\n if (config.containingPoetryLock) {\n names.push('python');\n }\n if (rootConfig.depending.firebase || config.depending.firebase) {\n names.push('firebase');\n }\n if (rootConfig.depending.reactNative || config.depending.reactNative) {\n names.push('reactnative');\n headUserContent += `google-services.json\nandroid/app/src/main/assets/\n`;\n }\n if (rootConfig.depending.storybook) {\n names.push('storybookjs');\n }\n if (rootConfig.depending.blitz) {\n names.push('nextjs');\n headUserContent += `.blitz/\n.blitz**\n`;\n }\n\n let generated = '';\n for (const name of names) {\n let content = (await readCache(name)) ?? '';\n if (!content) {\n const url = `https://www.toptal.com/developers/gitignore/api/${name}`;\n const response = await fetch(url);\n const responseText = await response.text();\n if (responseText.includes('Attention Required!')) {\n console.error(`Failed to fetch ${url}`);\n return;\n }\n content = responseText.trim();\n await promisePool.run(() => writeCache(name, content));\n if (options.isVerbose) {\n console.info(`Fetched ${url}`);\n }\n }\n if (generated) generated += '\\n';\n generated += content + '\\n';\n }\n if (!(await ignoreFileUtil.isBerryZeroInstallEnabled(filePath))) {\n generated = generated.replace('!.yarn/cache', '# !.yarn/cache').replace('# .pnp.*', '.pnp.*');\n }\n if (config.containingPomXml || config.containingPubspecYaml) {\n generated = generated\n .replace(/^# .idea\\/artifacts$/gm, '.idea/artifacts')\n .replace(/^# .idea\\/compiler.xml$/gm, '.idea/compiler.xml')\n .replace(/^# .idea\\/jarRepositories.xml$/gm, '.idea/jarRepositories.xml')\n .replace(/^# .idea\\/modules.xml$/gm, '.idea/modules.xml')\n .replace(/^# .idea\\/*.iml$/gm, '.idea/*.iml')\n .replace(/^# .idea\\/modules$/gm, '.idea/modules')\n .replace(/^# *.iml$/gm, '*.iml')\n .replace(/^# *.ipr$/gm, '*.ipr');\n if (config.containingPubspecYaml) {\n generated = generated.replace(/^.idea\\/modules.xml$/gm, '# .idea/modules.xml');\n }\n }\n generated = generated.replace(/^.idea\\/?$/gm, '# .idea');\n if (rootConfig.depending.reactNative || config.depending.reactNative || config.containingPubspecYaml) {\n generated = generated.replace(/^(.idea\\/.+)$/gm, '$1\\nandroid/$1');\n }\n const newContent = headUserContent + generated + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nconst dirPath = path.join(os.homedir(), '.cache', 'wbfy', 'gitignore');\n\nasync function writeCache(name: string, content: string): Promise<void> {\n await fs.promises.mkdir(dirPath, { recursive: true });\n await fs.promises.writeFile(path.join(dirPath, name), content);\n}\n\nasync function readCache(name: string): Promise<string | undefined> {\n try {\n const stat = await fs.promises.stat(path.join(dirPath, name));\n if (Date.now() - stat.mtimeMs > 6 * 60 * 60 * 1000) {\n return;\n }\n return await fs.promises.readFile(path.join(dirPath, name), 'utf8');\n } catch {\n // do nothing\n }\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\n\nimport { generateScripts } from './packageJson';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'node node_modules/.bin/lint-staged',\n prePush: `yarn typecheck`,\n prePushForLab: `\nif [ $(git branch --show-current) = \"main\" ] && [ $(git config user.email) != \"exkazuu@gmail.com\" ]; then\n echo \"************************************************\"\n echo \"*** Don't push main branch directly. Use PR! ***\"\n echo \"************************************************\"\n exit 1\nfi\n\nyarn typecheck\n`.trim(),\n postMerge: `\nchanged_files=\"$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)\"\n\nrun_if_changed() {\n if echo \"$changed_files\" | grep --quiet -E \"$1\"; then\n eval \"$2\"\n fi\n}\n`.trim(),\n};\n\nexport async function generateHuskyrc(config: PackageConfig): Promise<void> {\n return logger.function('generateHuskyrc', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n const packageJsonPath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(packageJsonPath, 'utf8');\n const packageJson = JSON.parse(jsonText);\n packageJson.scripts ||= {};\n delete packageJson.scripts['postinstall'];\n delete packageJson.scripts['postpublish'];\n delete packageJson.scripts['prepare'];\n delete packageJson.scripts['prepublishOnly'];\n delete packageJson.scripts['prepack'];\n delete packageJson.scripts['postpack'];\n\n const dirPath = path.resolve(config.dirPath, '.husky');\n await Promise.all([\n fs.promises.writeFile(packageJsonPath, JSON.stringify(packageJson, undefined, 2)),\n fs.promises.rm(dirPath, { force: true, recursive: true }),\n ]);\n spawnSync('yarn', ['dlx', 'husky-init', '--yarn2'], config.dirPath);\n\n const preCommitFilePath = path.resolve(dirPath, 'pre-commit');\n const content = await fs.promises.readFile(preCommitFilePath, 'utf8');\n\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.huskyrc.json'), { force: true }));\n await promisePool.run(() =>\n fs.promises.writeFile(preCommitFilePath, content.replace(DEFAULT_COMMAND, settings.preCommit))\n );\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n let prePush = config.repository?.startsWith('github:WillBoosterLab/') ? settings.prePushForLab : settings.prePush;\n const { typecheck } = generateScripts(config);\n prePush = prePush.replace('yarn typecheck', typecheck.replace('tsc', 'node node_modules/.bin/tsc'));\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'pre-push'), content.replace(DEFAULT_COMMAND, prePush), {\n mode: 0o755,\n })\n );\n }\n\n const postMergeCommands: string[] = [];\n if (config.versionsText) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf plugin update --all\"');\n }\n // Python\u304C\u306A\u3044\u3068\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3067\u304D\u306A\u3044\u51E6\u7406\u7CFB\u304C\u5B58\u5728\u3059\u308B\u305F\u3081\u3001\u5F37\u5236\u7684\u306B\u6700\u521D\u306B\u30A4\u30F3\u30B9\u30C8\u30FC\u30EB\u3059\u308B\u3002\n if (config.versionsText?.includes('python ')) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf install python\"');\n }\n if (config.versionsText) {\n postMergeCommands.push('run_if_changed \"\\\\..+-version\" \"asdf install\"');\n }\n postMergeCommands.push('run_if_changed \"package\\\\.json\" \"yarn\"');\n if (config.containingPoetryLock) {\n postMergeCommands.push('run_if_changed \"poetry\\\\.lock\" \"poetry install\"');\n }\n if (config.depending.blitz || config.depending.prisma) {\n postMergeCommands.push('yarn gen-code');\n }\n const postMergeCommand = content.replace(DEFAULT_COMMAND, `${settings.postMerge}\\n\\n${postMergeCommands.join('\\n')}`);\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'post-merge'), postMergeCommand, {\n mode: 0o755,\n })\n );\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { extensions } from '../utils/extensions';\nimport { gitHubUtil } from '../utils/githubUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\nimport { getSrcDirs } from '../utils/srcDirectories';\n\nconst jsCommonDeps = [\n 'eslint',\n 'eslint-config-prettier',\n 'eslint-plugin-import',\n 'eslint-plugin-sort-class-members',\n 'eslint-plugin-sort-destructure-keys',\n 'eslint-plugin-unicorn',\n];\n\nconst tsCommonDeps = [\n ...jsCommonDeps,\n '@typescript-eslint/eslint-plugin',\n '@typescript-eslint/parser',\n 'eslint-import-resolver-typescript',\n];\n\nconst reactCommonDeps = ['eslint-plugin-react', 'eslint-plugin-react-hooks'];\n\nconst devDeps: { [prop: string]: string[] } = {\n '@willbooster/eslint-config-js': ['@willbooster/eslint-config-js', ...jsCommonDeps],\n '@willbooster/eslint-config-js-react': ['@willbooster/eslint-config-js-react', ...jsCommonDeps, ...reactCommonDeps],\n '@willbooster/eslint-config-ts': ['@willbooster/eslint-config-ts', ...tsCommonDeps],\n '@willbooster/eslint-config-ts-react': ['@willbooster/eslint-config-ts-react', ...tsCommonDeps, ...reactCommonDeps],\n '../../.eslintrc.json': [],\n};\n\nexport async function generatePackageJson(\n config: PackageConfig,\n rootConfig: PackageConfig,\n skipAddingDeps: boolean\n): Promise<void> {\n return logger.function('generatePackageJson', async () => {\n await core(config, rootConfig, skipAddingDeps);\n });\n}\n\nasync function core(config: PackageConfig, rootConfig: PackageConfig, skipAddingDeps: boolean): Promise<void> {\n const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(filePath, 'utf8');\n const jsonObj = JSON.parse(jsonText);\n jsonObj.scripts = jsonObj.scripts || {};\n jsonObj.dependencies = jsonObj.dependencies || {};\n jsonObj.devDependencies = jsonObj.devDependencies || {};\n jsonObj.peerDependencies = jsonObj.peerDependencies || {};\n\n await removeDeprecatedStuff(jsonObj);\n\n if (jsonObj.name !== '@willbooster/prettier-config') {\n jsonObj.prettier = '@willbooster/prettier-config';\n }\n\n for (const scriptKey of Object.keys(jsonObj.scripts)) {\n // Fresh repo still requires 'yarn install'\n if (!jsonObj.scripts[scriptKey].includes('git clone')) {\n jsonObj.scripts[scriptKey] = jsonObj.scripts[scriptKey]\n .replace(/yarn\\s*&&\\s*/, '')\n .replace(/yarn\\s*install\\s*&&\\s*/, '');\n }\n }\n\n jsonObj.scripts = merge(jsonObj.scripts, generateScripts(config));\n jsonObj.scripts.prettify += await generatePrettierSuffix(config.dirPath);\n\n let dependencies: string[] = [];\n let devDependencies = ['lint-staged', 'prettier', 'sort-package-json', '@willbooster/prettier-config'];\n const poetryDependencies: string[] = [];\n\n if (config.root) {\n // To install the latest pinst\n devDependencies.push('husky', '@willbooster/renovate-config');\n if (config.publicRepo || config.referredByOtherRepo) {\n // https://typicode.github.io/husky/#/?id=install-1\n devDependencies.push('pinst');\n jsonObj.scripts['prepack'] = 'pinst --disable';\n jsonObj.scripts['postpack'] = 'pinst --enable';\n }\n if (config.depending.semanticRelease) {\n devDependencies.push('conventional-changelog-conventionalcommits');\n if (\n !jsonObj.devDependencies['semantic-release'] &&\n !jsonObj.devDependencies['multi-semantic-release'] &&\n !jsonObj.devDependencies['@qiwi/multi-semantic-release']\n ) {\n devDependencies.push('semantic-release');\n }\n jsonObj.version = '0.0.0-semantically-released';\n }\n if (config.containingSubPackageJsons) {\n jsonObj.workspaces = ['packages/*'];\n } else {\n delete jsonObj.workspaces;\n }\n }\n\n if (\n config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages\n ) {\n devDependencies.push('eslint', 'micromatch');\n // TODO: not needed anymore?\n if (config.containingTypeScriptInPackages) {\n devDependencies.push('@typescript-eslint/parser');\n }\n }\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n devDependencies.push('typescript');\n }\n\n if (config.eslintBase) {\n devDependencies.push(...devDeps[config.eslintBase]);\n }\n\n if (config.willBoosterConfigs) {\n dependencies = dependencies.filter((dep) => !dep.includes('@willbooster/'));\n devDependencies = devDependencies.filter((dep) => !dep.includes('@willbooster/'));\n }\n\n if (!jsonObj.name) {\n jsonObj.name = path.basename(config.dirPath);\n }\n\n if (config.containingSubPackageJsons) {\n jsonObj.private = true;\n }\n if (!jsonObj.license) {\n jsonObj.license = 'UNLICENSED';\n }\n if (!jsonObj.private && jsonObj.license !== 'UNLICENSED' && rootConfig.publicRepo) {\n jsonObj.publishConfig ??= {};\n jsonObj.publishConfig.access ??= 'public';\n }\n const [owner] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (owner === 'WillBooster' || owner === 'WillBoosterLab') {\n jsonObj.author = 'WillBooster Inc.';\n }\n\n if (!config.containingTypeScript && !config.containingTypeScriptInPackages) {\n delete jsonObj.scripts.typecheck;\n }\n\n // https://github.com/semantic-release/semantic-release/issues/2323#issuecomment-1032341621\n if (config.depending.semanticRelease && config.release.npm) {\n jsonObj.resolutions ||= {};\n jsonObj.resolutions['npm/chalk'] = '^4.1.2';\n }\n\n if (!config.containingSubPackageJsons) {\n if (!config.containingJavaScript && !config.containingTypeScript) {\n delete jsonObj.scripts.lint;\n delete jsonObj.scripts['lint-fix'];\n jsonObj.scripts.cleanup = jsonObj.scripts.cleanup.replace(' && yarn lint-fix', '');\n } else {\n jsonObj.scripts['lint-fix'] += EslintUtil.getLintFixSuffix(config);\n }\n\n if (config.containingPubspecYaml) {\n jsonObj.scripts.lint = 'flutter analyze';\n jsonObj.scripts['lint-fix'] = 'yarn lint';\n const dirs = ['lib', 'test', 'test_driver'].filter((dir) => fs.existsSync(path.resolve(config.dirPath, dir)));\n if (dirs.length > 0) {\n jsonObj.scripts['format-code'] = `flutter format $(find ${dirs.join(\n ' '\n )} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`;\n jsonObj.scripts.format += ` && yarn format-code`;\n }\n }\n\n if (config.containingPoetryLock) {\n if (jsonObj.scripts.postinstall === 'poetry install') {\n delete jsonObj.scripts.postinstall;\n }\n const entries = await fs.promises.readdir(config.dirPath, { withFileTypes: true });\n const dirNames = await Promise.all(\n entries.map(async (entry) => {\n if (!entry.isDirectory()) return '';\n const dirPath = path.resolve(config.dirPath, entry.name);\n const fileNames = await fs.promises.readdir(dirPath);\n return fileNames.some((fileName) => fileName.endsWith('.py')) ? entry.name : '';\n })\n );\n const filteredDirNames = dirNames.filter(Boolean);\n if (filteredDirNames.length > 0) {\n jsonObj.scripts['format-code'] = `poetry run isort --profile black ${filteredDirNames.join(\n ' '\n )} && poetry run black ${filteredDirNames.join(' ')}`;\n jsonObj.scripts.lint = `poetry run flake8 ${filteredDirNames.join(' ')}`;\n jsonObj.scripts['lint-fix'] = 'yarn lint';\n jsonObj.scripts.format += ` && yarn format-code`;\n poetryDependencies.push('black', 'isort', 'flake8');\n }\n }\n\n if (config.repository) {\n jsonObj.repository = config.repository;\n }\n }\n\n if (config.depending.blitz) {\n if (config.depending.blitz === '0') {\n // These cause an error of eslint-plugin-import loading\n devDependencies = devDependencies.filter((dep) => !dep.includes('@typescript-eslint/'));\n // This causes eslint errors\n devDependencies = devDependencies.filter(\n (d) =>\n d !== 'eslint-plugin-react' &&\n d !== 'eslint-import-resolver-typescript' &&\n d !== 'eslint-plugin-import' &&\n d !== 'eslint-plugin-react-hooks'\n );\n }\n if (!jsonObj.scripts['gen-code']?.startsWith('blitz codegen')) {\n jsonObj.scripts['gen-code'] = 'blitz codegen';\n }\n } else if (config.depending.prisma && !jsonObj.scripts['gen-code']?.startsWith('prisma generate')) {\n jsonObj.scripts['gen-code'] = 'prisma generate';\n }\n if (Object.keys(jsonObj.dependencies).length === 0) {\n delete jsonObj.dependencies;\n }\n if (Object.keys(jsonObj.devDependencies).length === 0) {\n delete jsonObj.devDependencies;\n }\n if (Object.keys(jsonObj.peerDependencies).length === 0) {\n delete jsonObj.peerDependencies;\n }\n\n await fs.promises.writeFile(filePath, JSON.stringify(jsonObj));\n\n if (!skipAddingDeps) {\n dependencies = dependencies.filter((dep) => !jsonObj.devDependencies?.[dep]);\n if (dependencies.length > 0) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\n devDependencies = devDependencies.filter((dep) => !jsonObj.dependencies?.[dep]);\n if (devDependencies.length > 0) {\n spawnSync('yarn', ['add', '-D', ...new Set(devDependencies)], config.dirPath);\n }\n if (poetryDependencies.length > 0) {\n spawnSync('poetry', ['add', ...new Set(poetryDependencies)], config.dirPath);\n }\n }\n}\n\n// TODO: remove the following migration code in future\nasync function removeDeprecatedStuff(jsonObj: any): Promise<void> {\n if (jsonObj.author === 'WillBooster LLC') {\n jsonObj.author = 'WillBooster Inc.';\n }\n delete jsonObj.scripts['sort-package-json'];\n delete jsonObj.scripts['sort-all-package-json'];\n delete jsonObj.scripts['typecheck:codegen'];\n delete jsonObj.dependencies['tslib'];\n delete jsonObj.devDependencies['@willbooster/eslint-config'];\n delete jsonObj.devDependencies['@willbooster/eslint-config-react'];\n delete jsonObj.devDependencies['@willbooster/tsconfig'];\n delete jsonObj.devDependencies['eslint-import-resolver-node'];\n delete jsonObj.devDependencies['eslint-plugin-prettier'];\n delete jsonObj.devDependencies['lerna'];\n // To install the latest pinst\n delete jsonObj.devDependencies['pinst'];\n delete jsonObj.scripts['flutter-format'];\n delete jsonObj.scripts['format-flutter'];\n delete jsonObj.scripts['python-format'];\n delete jsonObj.scripts['format-python'];\n delete jsonObj.scripts['prettier'];\n for (const deps of Object.values(devDeps)) {\n for (const dep of deps) {\n delete jsonObj.devDependencies[dep];\n }\n }\n await promisePool.run(() => fs.promises.rm('lerna.json', { force: true }));\n}\n\nexport function generateScripts(config: PackageConfig): Record<string, string> {\n let scripts = {\n cleanup: 'yarn format && yarn lint-fix',\n format: `sort-package-json && yarn prettify`,\n lint: `eslint --color \"./{${getSrcDirs(config)}}/**/*.{${extensions.eslint.join(',')}}\"`,\n 'lint-fix': 'yarn lint --fix',\n prettify: `prettier --cache --color --write \"**/{.*/,}*.{${extensions.prettier.join(',')}}\" \"!**/test-fixtures/**\"`,\n typecheck: 'tsc --noEmit --Pretty',\n };\n if (config.containingSubPackageJsons) {\n scripts = merge(\n { ...scripts },\n {\n format: `sort-package-json && yarn prettify && yarn workspaces foreach --parallel --verbose run format`,\n lint: `yarn workspaces foreach --parallel --verbose run lint`,\n 'lint-fix': 'yarn workspaces foreach --parallel --verbose run lint-fix',\n prettify: `prettier --cache --color --write \"**/{.*/,}*.{${extensions.prettier.join(\n ','\n )}}\" \"!**/packages/**\" \"!**/test-fixtures/**\"`,\n test: 'yarn workspaces foreach --verbose run test',\n typecheck: 'yarn workspaces foreach --parallel --verbose run typecheck',\n }\n );\n }\n if (config.depending.blitz) {\n scripts.typecheck = `${scripts.typecheck} || yarn run typecheck/warn`;\n (scripts as Record<string, string>)[\n 'typecheck/warn'\n ] = `echo 'Please try \"yarn gen-code\" if you face unknown type errors.' && exit 1`;\n (scripts as Record<string, string>)['typecheck:gen-code'] = 'yarn gen-code && tsc --noEmit --Pretty';\n }\n return scripts;\n}\n\nasync function generatePrettierSuffix(dirPath: string): Promise<string> {\n const filePath = path.resolve(dirPath, '.prettierignore');\n const existingContent = await fs.promises.readFile(filePath, 'utf8');\n const index = existingContent.indexOf(ignoreFileUtil.separatorPrefix);\n if (index < 0) return '';\n\n const originalContent = existingContent.slice(0, index);\n const lines = originalContent\n .split('\\n')\n .map((line) => {\n const newLine = line.trim();\n return newLine.endsWith('/') ? newLine.slice(0, -1) : newLine;\n })\n .filter((l) => l && !l.startsWith('#') && !l.includes('/'));\n\n return lines.map((line) => ` \"!**/${line}/**\"`).join('');\n}\n", "import { PackageConfig } from '../packageConfig';\n\nexport const EslintUtil = {\n getLintFixSuffix(config: PackageConfig): string {\n return config.containingJsxOrTsx ? ' --rule \"{ react-hooks/exhaustive-deps: 0 }\"' : '';\n },\n};\n", "import { Octokit } from '@octokit/core';\n\nconst token =\n process.env.GH_BOT_PAT || process.env.PUBLIC_GH_BOT_PAT || process.env.GH_TOKEN || process.env.GITHUB_TOKEN;\nexport const hasGitHubToken = !!token;\nexport const octokit = new Octokit({\n auth: token,\n});\n\nclass GitHubUtil {\n getOrgAndName(urlOrFullName: string): [string, string] {\n const urlWithoutProtocol = urlOrFullName.split(':').at(-1);\n const names = urlWithoutProtocol?.split('/');\n const org = names?.at(-2) ?? '';\n const name = names?.at(-1)?.replace(/.git$/, '') ?? '';\n return [org, name];\n }\n}\n\nexport const gitHubUtil = new GitHubUtil();\n", "import { PackageConfig } from '../packageConfig';\n\nconst srcDirectories = {\n node: ['src', '__tests__', 'scripts'].sort(),\n blitz0: ['__tests__', 'scripts', 'app', 'db', 'integrations', 'mailers', 'test'].sort(),\n // We rename 'test' directory to '__tests__'\n blitz2: ['src', '__tests__', 'scripts', 'db', 'integrations', 'mailers'].sort(),\n};\n\nexport function getSrcDirs(config: PackageConfig): string[] {\n if (config.depending.blitz) {\n return config.depending.blitz === '0' ? srcDirectories.blitz0 : srcDirectories.blitz2;\n }\n return srcDirectories.node;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst newContent = `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project version=\"4\">\n <component name=\"ProjectTasksOptions\">\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"ts\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.ts)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"tsx\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.tsx)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"js\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.js)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"json\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.json)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"md\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.md)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled=\"true\">\n <option name=\"arguments\" value=\"node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$\" />\n <option name=\"checkSyntaxErrors\" value=\"false\" />\n <option name=\"description\" />\n <option name=\"exitCodeBehavior\" value=\"ERROR\" />\n <option name=\"fileExtension\" value=\"html\" />\n <option name=\"immediateSync\" value=\"false\" />\n <option name=\"name\" value=\"Prettier (.html)\" />\n <option name=\"output\" value=\"$FilePathRelativeToProjectRoot$\" />\n <option name=\"outputFilters\">\n <array />\n </option>\n <option name=\"outputFromStdout\" value=\"false\" />\n <option name=\"program\" value=\"yarn\" />\n <option name=\"runOnExternalChanges\" value=\"false\" />\n <option name=\"scopeName\" value=\"Project Files\" />\n <option name=\"trackOnlyRoot\" value=\"false\" />\n <option name=\"workingDir\" value=\"$ProjectFileDir$\" />\n <envs />\n </TaskOptions>\n </component>\n</project>\n`;\n\nexport async function generateIdeaSettings(config: PackageConfig): Promise<void> {\n return logger.function('generateIdeaSettings', async () => {\n const dirPath = path.resolve(config.dirPath, '.idea');\n if (fs.existsSync(dirPath)) {\n const filePath = path.resolve(dirPath, 'watcherTasks.xml');\n await (config.containingJavaScript ||\n config.containingJavaScriptInPackages ||\n config.containingTypeScript ||\n config.containingTypeScriptInPackages ||\n (config.containingPackageJson &&\n !config.containingPubspecYaml &&\n !config.containingGemfile &&\n !config.containingGoMod &&\n !config.containingPomXml)\n ? promisePool.run(() => FsUtil.generateFile(filePath, newContent))\n : promisePool.run(() => fs.promises.rm(filePath, { force: true })));\n }\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\nimport { getSrcDirs } from '../utils/srcDirectories';\n\nexport async function generateLintstagedrc(config: PackageConfig): Promise<void> {\n return logger.function('generateLintstagedrc', async () => {\n await core(config);\n });\n}\n\nasync function core(config: PackageConfig): Promise<void> {\n const packagePrefix = config.root ? 'node node_modules/.bin/' : 'node ../../node_modules/.bin/';\n const lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${getEslintKey(config)}': [${JSON.stringify(\n `${packagePrefix}eslint --fix${EslintUtil.getLintFixSuffix(config)}`\n )}, '${packagePrefix}prettier --cache --write'],`;\n lines.push(eslint);\n }\n const packagesFilter = config.root ? \" && !file.includes('/packages/')\" : '';\n lines.push(`\n './**/*.{${extensions.prettier.join(',')}}': files => {\n ${config.containingJavaScript || config.containingTypeScript ? getEslintFilterForPrettier(config) : ''}\n const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${packagesFilter});\n if (filteredFiles.length === 0) return [];\n const commands = [\\`${packagePrefix}prettier --cache --write \\${filteredFiles.join(' ')}\\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('${packagePrefix}sort-package-json');\n }\n return commands;\n },`);\n if (config.containingPubspecYaml) {\n lines.push(`\n './{lib,test,test_driver}/**/*.dart': files => {\n const filteredFiles = files.filter(file => !file.includes('generated'))\n .filter(file => !file.endsWith('.freezed.dart') && !file.endsWith('.g.dart'));\n if (filteredFiles.length === 0) return [];\n return [\\`flutter format \\${filteredFiles.join(' ')}\\`];\n },`);\n }\n if (config.containingPoetryLock) {\n lines.push(`\n './**/*.py': [\n 'poetry run isort --profile black --filter-files',\n 'poetry run black',\n 'poetry run flake8'\n ],`);\n }\n\n const newContent = `${\n config.containingJavaScript || config.containingTypeScript ? \"const micromatch = require('micromatch');\" : ''\n }\n\nmodule.exports = {${lines.join('')}\n};\n`;\n\n const filePath = path.resolve(config.dirPath, '.lintstagedrc.cjs');\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.lintstagedrc.js'), { force: true }));\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.lintstagedrc.json'), { force: true }));\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n}\n\nfunction getEslintKey(config: PackageConfig): string {\n const dirs = getSrcDirs(config);\n return `./{${dirs.join(',')}}/**/*.{${extensions.eslint.join(',')}}`;\n}\n\nfunction getEslintFilterForPrettier(config: PackageConfig): string {\n return `files = micromatch.not(files, '${getEslintKey(config)}');`;\n}\n", "import path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { ignoreFileUtil } from '../utils/ignoreFileUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst commonContent = `\n3rd-party/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.d.ts\n*.min.js\n.yarn/\n.pnp.js\n`;\n\nexport async function generatePrettierignore(config: PackageConfig): Promise<void> {\n return logger.function('generatePrettierignore', async () => {\n const filePath = path.resolve(config.dirPath, '.prettierignore');\n const content = (await FsUtil.readFileIgnoringError(filePath)) ?? '';\n const headUserContent = ignoreFileUtil.getHeadUserContent(content) + commonContent;\n const tailUserContent = ignoreFileUtil.getTailUserContent(content);\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await ignoreFileUtil.readGitignoreWithoutSeparators(gitignoreFilePath)) || '';\n\n let additionalContent = '';\n if (config.containingPubspecYaml) {\n additionalContent = `\nandroid/app/\nios/Runner/Assets.xcassets/\npubspec.yaml\n`;\n }\n\n const newContent = headUserContent + commonContent + additionalContent + gitignoreContent + tailUserContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateReadme(config: PackageConfig): Promise<void> {\n return logger.function('generateReadme', async () => {\n const filePath = path.resolve(config.dirPath, 'README.md');\n let newContent = await fs.promises.readFile(filePath, 'utf8');\n\n newContent = insertBadge(config, newContent, semanticReleaseBadge, '.releaserc.json');\n\n const repository = config.repository?.slice(config.repository?.indexOf(':') + 1);\n const fileNames = fs.readdirSync(`${config.dirPath}/.github/workflows`);\n for (const fileName of fileNames) {\n if (!fileName.startsWith('test') && !fileName.startsWith('deploy')) continue;\n\n let badgeName = fileName;\n badgeName = badgeName.charAt(0).toUpperCase() + badgeName.slice(1, badgeName.indexOf('.'));\n badgeName = badgeName.replace('-', ' ');\n const badge = `[![${badgeName}](https://github.com/${repository}/actions/workflows/${fileName}/badge.svg)](https://github.com/${repository}/actions/workflows/${fileName})`;\n newContent = insertBadge(config, newContent, badge, `.github/workflows/${fileName}`);\n }\n\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n\nconst semanticReleaseBadge =\n '[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)';\n\nfunction insertBadge(config: PackageConfig, newContent: string, badge: string, fileName: string): string {\n if (!fs.existsSync(path.resolve(config.dirPath, fileName))) {\n return newContent;\n }\n\n // \u65E2\u306Bbadge\u304C\u3042\u308B\u5834\u5408\u306F\u524A\u9664\n const badgePos = newContent.indexOf(badge);\n if (badgePos >= 0) {\n newContent = newContent.slice(0, badgePos) + newContent.slice(badgePos + badge.length);\n }\n let inserted = false;\n for (let i = 0; i < newContent.length; i++) {\n if (newContent[i] === '\\n') {\n inserted = true;\n newContent = `${newContent.slice(0, i + 1)}${badge}\\n${newContent.slice(i + 1)}`;\n break;\n }\n }\n if (!inserted) newContent = `${newContent}\\n${badge}\\n`;\n return newContent;\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nexport async function generateReleaserc(rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateReleaserc', async () => {\n const filePath = path.resolve(rootConfig.dirPath, '.releaserc.json');\n try {\n const settings = JSON.parse(await fs.promises.readFile(filePath, 'utf8'));\n const plugins = settings?.plugins || [];\n for (let i = 0; i < plugins.length; i++) {\n const plugin = Array.isArray(plugins[i]) ? plugins[i][0] : plugins[i];\n const oldConfig = (Array.isArray(plugins[i]) && plugins[i][1]) || {};\n if (plugin === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n merge.all(\n [\n oldConfig,\n {\n preset: 'conventionalcommits',\n },\n ],\n { arrayMerge: overwriteMerge }\n ),\n ];\n } else if (plugin === '@semantic-release/github') {\n plugins[i] = [\n '@semantic-release/github',\n merge.all(\n [\n oldConfig,\n {\n successComment: false,\n labels: ['r: semantic-release'],\n releasedLabels: ['released :bookmark:'],\n },\n ],\n { arrayMerge: overwriteMerge }\n ),\n ];\n }\n }\n const newContent = JSON.stringify(settings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n } catch {\n // do nothing\n }\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst jsonObj = {\n extends: ['@willbooster'],\n};\n\nexport async function generateRenovateJson(config: PackageConfig): Promise<void> {\n return logger.function('generateRenovateJson', async () => {\n let newSettings: any = cloneDeep(jsonObj);\n const filePath = path.resolve(config.dirPath, '.renovaterc.json');\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(oldContent) as any;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch {\n // do nothing\n }\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, '.dependabot'), { force: true }));\n await promisePool.run(() => fs.promises.rm(path.resolve(config.dirPath, 'renovate.json'), { force: true }));\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { sortKeys } from '../utils/objectUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst rootJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react-jsx',\n alwaysStrict: true,\n strict: true,\n skipLibCheck: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n declaration: true,\n sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n typeRoots: ['./node_modules/@types', './@types'],\n },\n include: [\n 'src/**/*',\n '__tests__/**/*',\n 'scripts/**/*',\n 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\n 'packages/*/scripts/**/*',\n ],\n};\n\nconst subJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react-jsx',\n alwaysStrict: true,\n strict: true,\n skipLibCheck: true,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n resolveJsonModule: true,\n declaration: true,\n sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n typeRoots: ['../../node_modules/@types', '../../@types', './@types'],\n },\n include: ['src/**/*', '__tests__/**/*', 'scripts/**/*'],\n};\n\nexport async function generateTsconfig(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateTsconfig', async () => {\n if (rootConfig.depending.blitz) return;\n\n let newSettings: any = cloneDeep(config.root ? rootJsonObj : subJsonObj);\n if (!config.containingJsxOrTsx && !config.containingJsxOrTsxInPackages) {\n delete newSettings.compilerOptions.jsx;\n }\n if (config.root && !config.containingSubPackageJsons) {\n newSettings.include = newSettings.include.filter((dirPath: string) => !dirPath.startsWith('packages/*/'));\n }\n\n const filePath = path.resolve(config.dirPath, 'tsconfig.json');\n try {\n const existingContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = JSON.parse(existingContent);\n if (oldSettings.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete oldSettings.extends;\n }\n delete newSettings?.compilerOptions?.target;\n delete newSettings?.compilerOptions?.module;\n if (oldSettings.jsx) {\n delete newSettings.jsx;\n }\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n newSettings.include = newSettings.include.filter((dirPath: string) => !dirPath.includes('@types'));\n } catch {\n // do nothing\n }\n sortKeys(newSettings.compilerOptions);\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "export function sortKeys<T extends Record<string, unknown>>(obj: T): T {\n const keyAndValues = Object.entries(obj).sort(([key1], [key2]) => key1.localeCompare(key2));\n for (const [key, value] of keyAndValues) {\n delete obj[key];\n (obj as Record<string, unknown>)[key] = value;\n }\n return obj;\n}\n", "/* eslint-disable unicorn/no-null */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nimport merge from 'deepmerge';\nimport yaml from 'js-yaml';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { sortKeys } from '../utils/objectUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst workflows = {\n test: {\n name: 'Test',\n on: {\n pull_request: null,\n push: {\n branches: ['main', 'wbfy', 'renovate/**'],\n },\n },\n jobs: {\n test: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/test.yml@main',\n },\n },\n },\n release: {\n name: 'Release',\n on: {\n push: {\n branches: [],\n },\n },\n jobs: {\n release: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/release.yml@main',\n },\n },\n },\n wbfy: {\n name: 'Willboosterify',\n on: {\n workflow_dispatch: null,\n },\n jobs: {\n wbfy: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main',\n },\n },\n },\n 'wbfy-merge': {\n name: 'Merge wbfy',\n on: {\n workflow_dispatch: null,\n },\n jobs: {\n 'wbfy-merge': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main',\n },\n },\n },\n 'semantic-pr': {\n name: 'Lint PR title',\n on: {\n pull_request_target: {\n types: ['opened', 'edited', 'synchronize'],\n },\n },\n jobs: {\n 'semantic-pr': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main',\n },\n },\n },\n 'notify-ready': {\n name: 'Notify ready',\n on: {\n issues: {\n types: ['labeled'],\n },\n },\n jobs: {\n 'notify-ready': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main',\n secrets: {\n DISCORD_WEBHOOK_URL: '${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}',\n },\n },\n },\n },\n 'close-comment': {\n name: 'Add close comment',\n on: {\n pull_request: {\n types: ['opened'],\n },\n },\n jobs: {\n 'close-comment': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main',\n },\n },\n },\n 'add-issue-to-project': {\n name: 'Add issue to github project',\n on: {\n issues: {\n types: ['labeled'],\n },\n },\n jobs: {\n 'add-to-project': {\n uses: 'WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main',\n secrets: {\n GH_PROJECT_URL: '${{ secrets.GH_PROJECT_URL }}',\n GH_BOT_PAT: '${{ secrets.GH_BOT_PAT }}',\n },\n },\n },\n },\n} as Record<KnownKind, any>;\n\ntype KnownKind =\n | 'test'\n | 'release'\n | 'sync'\n | 'wbfy'\n | 'wbfy-merge'\n | 'semantic-pr'\n | 'notify-ready'\n | 'close-comment'\n | 'add-issue-to-project';\n\nexport async function generateWorkflow(rootConfig: PackageConfig): Promise<void> {\n return logger.function('generateWorkflow', async () => {\n const workflowsPath = path.resolve(rootConfig.dirPath, '.github', 'workflows');\n await fs.promises.mkdir(workflowsPath, { recursive: true });\n\n // Remove config of semantic pull request\n const semanticYmlPath = path.resolve(rootConfig.dirPath, '.github', 'semantic.yml');\n await promisePool.run(() => fs.promises.rm(semanticYmlPath, { force: true, recursive: true }));\n\n const entries = await fs.promises.readdir(workflowsPath, { withFileTypes: true });\n const fileNames = entries\n .filter((dirent) => dirent.isFile() && dirent.name.endsWith('.yml'))\n .map((dirent) => dirent.name);\n if (rootConfig.depending.semanticRelease) {\n fileNames.push('release.yml');\n }\n if (rootConfig.publicRepo || rootConfig.repository?.startsWith('github:WillBoosterLab/')) {\n fileNames.push('notify-ready.yml');\n }\n fileNames.push(\n 'test.yml',\n 'wbfy.yml',\n 'wbfy-merge.yml',\n 'semantic-pr.yml',\n 'close-comment.yml',\n 'add-issue-to-project.yml'\n );\n\n for (const fileName of fileNames) {\n // \u5B9F\u969B\u306FKnownKind\u4EE5\u5916\u306E\u5024\u3082\u4EE3\u5165\u3055\u308C\u308B\u3053\u3068\u306B\u6CE8\u610F\n const kind = path.basename(fileName, '.yml') as KnownKind;\n await promisePool.run(() => writeWorkflowYaml(rootConfig, workflowsPath, kind));\n }\n });\n}\n\nasync function writeWorkflowYaml(config: PackageConfig, workflowsPath: string, kind: KnownKind): Promise<void> {\n let newSettings = cloneDeep(workflows[kind] || {});\n const filePath = path.join(workflowsPath, `${kind}.yml`);\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf8');\n const oldSettings = yaml.load(oldContent);\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n } catch {\n // do nothing\n }\n for (const job of Object.values(newSettings.jobs) as any[]) {\n // Ignore non-reusable workflows\n if (!job.uses?.includes?.('/reusable-workflows/')) return;\n\n normalizeJob(config, job, kind);\n }\n\n switch (kind) {\n case 'release': {\n if (newSettings.on.schedule) {\n delete newSettings.on.push;\n } else if (config.release.branches.length > 0) {\n newSettings.on.push.branches = config.release.branches;\n } else {\n // Don't use release.yml if release branch is not specified\n await fs.promises.rm(path.join(workflowsPath, 'release.yml'), { force: true });\n return;\n }\n break;\n }\n case 'wbfy': {\n setSchedule(newSettings, 20, 24);\n break;\n }\n case 'wbfy-merge': {\n setSchedule(newSettings, 0, 4);\n break;\n }\n // No default\n }\n await writeYaml(newSettings, filePath);\n\n if (kind === 'release') {\n await fs.promises.rm(path.join(workflowsPath, 'semantic-release.yml'), { force: true });\n } else if (kind === 'sync') {\n await fs.promises.rm(path.join(workflowsPath, 'sync-init.yml'), { force: true });\n if (!newSettings.jobs.sync) return;\n\n newSettings.jobs['sync-force'] = newSettings.jobs.sync;\n const params = newSettings.jobs.sync.with.sync_params_without_dest;\n if (!params) return;\n\n newSettings.jobs.sync.with.sync_params_without_dest = `--force ${params}`;\n newSettings.name = 'Force to Sync';\n newSettings.on = { workflow_dispatch: null };\n delete newSettings.jobs.sync;\n await writeYaml(newSettings, path.join(workflowsPath, 'sync-force.yml'));\n }\n}\n\nfunction normalizeJob(config: PackageConfig, job: any, kind: KnownKind): void {\n job.with ||= {};\n job.secrets ||= {};\n\n if ((config.release.github && kind === 'test') || kind === 'release' || kind === 'wbfy' || kind === 'wbfy-merge') {\n job.secrets['GH_TOKEN'] = config.publicRepo ? '${{ secrets.PUBLIC_GH_BOT_PAT }}' : '${{ secrets.GH_BOT_PAT }}';\n }\n if (config.release.npm && (kind === 'release' || kind === 'test')) {\n job.secrets['NPM_TOKEN'] = '${{ secrets.NPM_TOKEN }}';\n }\n if (job.secrets['FIREBASE_TOKEN']) {\n job.secrets['GCP_SA_KEY_JSON_FOR_FIREBASE'] = '${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}';\n delete job.secrets['FIREBASE_TOKEN'];\n }\n if (\n (job.secrets['DISCORD_WEBHOOK_URL'] && (kind === 'release' || kind.startsWith('deploy'))) ||\n (job.with.server_url && kind.startsWith('deploy'))\n ) {\n job.secrets['DISCORD_WEBHOOK_URL'] = '${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}';\n }\n\n if (kind === 'sync') {\n const params = job.with?.sync_params_without_dest;\n if (params) {\n job.with.sync_params_without_dest = params.replace('sync ', '');\n }\n }\n\n if (config.repository?.startsWith('github:WillBooster/')) {\n job.uses = job.uses.replace('WillBoosterLab/', 'WillBooster/');\n } else if (config.repository?.startsWith('github:WillBoosterLab/')) {\n job.uses = job.uses.replace('WillBooster/', 'WillBoosterLab/');\n }\n\n // Remove deprecated parameters\n delete job.with['non_self_hosted'];\n delete job.with['notify_discord'];\n delete job.with['require_fly'];\n delete job.with['require_gcloud'];\n if (job.with['dot_env_path'] === '.env') {\n delete job.with['dot_env_path'];\n }\n\n if (config.containingDockerfile && kind.startsWith('deploy')) {\n job.with['cpu_arch'] = 'X64';\n }\n // Because github.event.repository.private is always true if job is scheduled\n if (kind === 'release' || kind === 'test' || kind === 'wbfy' || kind === 'wbfy-merge' || kind.startsWith('deploy')) {\n if (config.publicRepo) {\n job.with['github_hosted_runner'] = true;\n }\n } else {\n delete job.with['github_hosted_runner'];\n }\n\n if (Object.keys(job.with).length > 0) {\n sortKeys(job.with);\n } else {\n delete job.with;\n }\n if (Object.keys(job.secrets).length > 0) {\n // Move secrets prop after with prop\n const newSecrets = sortKeys(job.secrets);\n delete job.secrets;\n job.secrets = newSecrets;\n } else {\n delete job.secrets;\n }\n}\n\nfunction setSchedule(newSettings: any, inclusiveMinHourJst: number, exclusiveMaxHourJst: number): void {\n const [minuteUtc, hourUtc] = ((newSettings.on.schedule?.[0]?.cron as string) ?? '').split(' ').map(Number);\n if (minuteUtc !== 0 && Number.isInteger(hourUtc)) {\n const hourJst = (hourUtc + 9) % 24;\n const inRange =\n inclusiveMinHourJst < exclusiveMaxHourJst\n ? inclusiveMinHourJst <= hourJst && hourJst < exclusiveMaxHourJst\n : inclusiveMinHourJst <= hourJst || hourJst < exclusiveMaxHourJst;\n if (inRange) return;\n console.log(\n 'setSchedule:',\n newSettings,\n minuteUtc,\n hourUtc,\n inRange,\n hourJst,\n inclusiveMinHourJst,\n exclusiveMaxHourJst\n );\n } else {\n console.log('setSchedule:', newSettings, minuteUtc, hourUtc);\n }\n\n const minJst = 1 + Math.floor(Math.random() * 59);\n const hourJst = inclusiveMinHourJst + Math.floor(Math.random() * (exclusiveMaxHourJst - inclusiveMinHourJst));\n const cron = `${minJst} ${(hourJst - 9 + 24) % 24} * * *`;\n newSettings.on.schedule = [{ cron }];\n}\n\nasync function writeYaml(newSettings: any, filePath: string): Promise<void> {\n const yamlText = yaml.dump(newSettings, {\n lineWidth: -1,\n noCompatMode: true,\n styles: {\n '!!null': 'empty',\n },\n });\n await fs.promises.writeFile(filePath, yamlText);\n}\n", "import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { PluginMeta } from '@yarnpkg/core/lib/Plugin';\nimport yaml from 'js-yaml';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateYarnrcYml(config: PackageConfig): Promise<void> {\n return logger.function('generateYarnrcYml', async () => {\n const currentVersion = spawnSyncWithStringResult('yarn', ['--version'], config.dirPath);\n const latestVersion = getLatestVersion('@yarnpkg/cli', config.dirPath);\n if (getMajorNumber(currentVersion) <= getMajorNumber(latestVersion) && currentVersion !== latestVersion) {\n spawnSync('yarn', ['set', 'version', latestVersion], config.dirPath, 1);\n }\n\n const releasesPath = path.join(config.dirPath, '.yarn', 'releases');\n await fs.promises.mkdir(releasesPath, { recursive: true });\n for (const file of await fs.promises.readdir(releasesPath)) {\n if (file.startsWith('yarn-') && !file.startsWith(`yarn-${latestVersion}.`)) {\n await promisePool.run(() => fs.promises.rm(path.join(releasesPath, file)));\n console.log('Removed', path.join(releasesPath, file));\n }\n }\n\n const yarnrcPath = path.resolve(config.dirPath, '.yarnrc');\n await promisePool.run(() => fs.promises.rm(yarnrcPath, { force: true }));\n\n const yarnrcYmlPath = path.resolve(config.dirPath, '.yarnrc.yml');\n const settings = yaml.load(await fs.promises.readFile(yarnrcYmlPath, 'utf8')) as any;\n settings.defaultSemverRangePrefix = '';\n if (config.requiringNodeModules) {\n settings.nodeLinker = 'node-modules';\n settings.nmMode = 'hardlinks-global';\n // c.f. https://github.com/yarnpkg/berry/pull/4698\n settings.enableGlobalCache = true;\n }\n const originalLength = settings.plugins?.length ?? 0;\n settings.plugins = settings.plugins?.filter((p: PluginMeta) => p.path !== '.yarn/plugins/undefined.cjs') ?? [];\n if (settings.plugins.length !== originalLength) {\n const pluginPath = path.resolve(config.dirPath, '.yarnrc', 'undefined.cjs');\n await promisePool.run(() => fs.promises.rm(pluginPath, { force: true }));\n }\n if (settings.plugins.length === 0) {\n delete settings.plugins;\n }\n await fs.promises.writeFile(yarnrcYmlPath, yaml.dump(settings, { lineWidth: -1 }));\n\n const plugins = (settings.plugins ?? []).map((p: PluginMeta) => p.spec);\n const requireTypeScript = config.containingTypeScript || config.containingTypeScriptInPackages;\n importOrRemovePlugin(config, plugins, requireTypeScript, '@yarnpkg/plugin-typescript');\n if (requireTypeScript && !config.requiringNodeModules) {\n spawnSync('yarn', ['dlx', '@yarnpkg/sdks', 'vscode'], config.dirPath);\n }\n importOrRemovePlugin(config, plugins, config.containingSubPackageJsons, '@yarnpkg/plugin-workspace-tools');\n spawnSync('yarn', ['dlx', 'yarn-plugin-auto-install'], config.dirPath);\n });\n}\n\nexport function getLatestVersion(packageName: string, dirPath: string): string {\n const versionsJson = spawnSyncWithStringResult('npm', ['show', packageName, 'versions', '--json'], dirPath);\n const versions = JSON.parse(versionsJson) as string[];\n return versions[versions.length - 1];\n}\n\nfunction importOrRemovePlugin(config: PackageConfig, plugins: string[], requirePlugin: boolean, plugin: string): void {\n if (requirePlugin !== plugins.includes(plugin)) {\n spawnSync('yarn', ['plugin', requirePlugin ? 'import' : 'remove', plugin], config.dirPath);\n }\n}\n\nfunction getMajorNumber(version: string): number {\n const [major] = version.split('.');\n return Number(major);\n}\n", "import { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { gitHubUtil, hasGitHubToken, octokit } from '../utils/githubUtil';\n\nexport async function setupLabels(config: PackageConfig): Promise<void> {\n return logger.function('setupLabels', async () => {\n if (!hasGitHubToken) return;\n\n const [owner, repo] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (!owner || !repo) return;\n if (owner !== 'WillBooster' && owner !== 'WillBoosterLab') return;\n\n try {\n await setupLabel(owner, repo, 'd1: x-easy :hedgehog:', 'EDE9FE');\n await setupLabel(owner, repo, 'd2: easy :rabbit2:', 'DDD6FE');\n await setupLabel(owner, repo, 'd3: medium :ox:', 'C4B5FD');\n await setupLabel(owner, repo, 'd4: hard :squid:', 'A78BFA');\n await setupLabel(owner, repo, 'd5: x-hard :whale2:', '8B5CF6');\n await setupLabel(owner, repo, 'p1: critical :fire::fire::fire:', 'EF4444');\n await setupLabel(owner, repo, 'p2: urgent :fire::fire:', 'F87171');\n await setupLabel(owner, repo, 'p3: important :fire:', 'FCA5A5');\n await setupLabel(owner, repo, 'p4: nice to have :droplet:', 'FECACA');\n await setupLabel(owner, repo, 'r: blitz', '5300bc');\n await setupLabel(owner, repo, 'r: firebase', 'ffca28');\n await setupLabel(owner, repo, 'r: prisma', '0c344b');\n await setupLabel(owner, repo, 'r: react', '61dafb');\n await setupLabel(owner, repo, 'r: svelte', 'ff3e00');\n await setupLabel(owner, repo, 'r: semantic-release', '494949');\n await setupLabel(owner, repo, 'ready :rocket:', '22C55E');\n await setupLabel(owner, repo, 'review requested :mag:', 'FBCA04');\n await setupLabel(owner, repo, 'released :bookmark:', '6366F1');\n await setupLabel(owner, repo, 's: 0.5h :clock1230:', 'F3F4F6');\n await setupLabel(owner, repo, 's: 1h :clock1:', 'E5E7EB');\n await setupLabel(owner, repo, 's: 2h :clock2:', 'D1D5DB');\n await setupLabel(owner, repo, 's: 3h :clock3:', '9CA3AF');\n await setupLabel(owner, repo, 's: 5h :clock5:', '6B7280');\n await setupLabel(owner, repo, 's: 8h :clock8:', '4B5563');\n await setupLabel(owner, repo, 's: 13h :clock1:', '374151');\n await setupLabel(owner, repo, 't: build :hammer:', 'BFDBFE');\n await setupLabel(owner, repo, 't: chore :broom:', 'BFDBFE');\n await setupLabel(owner, repo, 't: ci :construction_worker:', 'BFDBFE');\n await setupLabel(owner, repo, 't: docs :memo:', 'BFDBFE');\n await setupLabel(owner, repo, 't: feat :sparkles:', 'BFDBFE');\n await setupLabel(owner, repo, 't: fix :bug:', 'BFDBFE');\n await setupLabel(owner, repo, 't: perf :zap:', 'BFDBFE');\n await setupLabel(owner, repo, 't: refactor :recycle:', 'BFDBFE');\n await setupLabel(owner, repo, 't: style :lipstick:', 'BFDBFE');\n await setupLabel(owner, repo, 't: test :test_tube:', 'BFDBFE');\n await setupLabel(owner, repo, 'project', '24292F');\n\n await deleteLabel(owner, repo, 'bug');\n await deleteLabel(owner, repo, 'documentation');\n await deleteLabel(owner, repo, 'duplicate');\n await deleteLabel(owner, repo, 'enhancement');\n await deleteLabel(owner, repo, 'good first issue');\n await deleteLabel(owner, repo, 'help wanted');\n await deleteLabel(owner, repo, 'invalid');\n await deleteLabel(owner, repo, 'question');\n await deleteLabel(owner, repo, 'wontfix');\n\n await deleteLabel(owner, repo, 'ready');\n await deleteLabel(owner, repo, 'review requested');\n await deleteLabel(owner, repo, 'released');\n await deleteLabel(owner, repo, 'semantic-release');\n } catch (error) {\n console.warn('Skip setupLabels due to:', (error as Error)?.stack ?? error);\n }\n });\n}\n\nasync function setupLabel(owner: string, repo: string, name: string, color: string): Promise<void> {\n try {\n await octokit.request('POST /repos/{owner}/{repo}/labels', {\n owner,\n repo,\n name,\n color,\n });\n } catch {\n await octokit.request('PATCH /repos/{owner}/{repo}/labels/{name}', {\n owner,\n repo,\n name,\n color,\n });\n }\n}\n\nasync function deleteLabel(owner: string, repo: string, name: string): Promise<void> {\n try {\n await octokit.request('DELETE /repos/{owner}/{repo}/labels/{name}', {\n owner,\n repo,\n name,\n });\n } catch {\n // do nothing\n }\n}\n", "import dotenv from 'dotenv';\nimport sodium from 'libsodium-wrappers';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { gitHubUtil, hasGitHubToken, octokit } from '../utils/githubUtil';\n\nconst deprecatedSecretNames = ['READY_DISCORD_WEBHOOK_URL'];\n\nexport async function setupSecrets(config: PackageConfig): Promise<void> {\n return logger.function('setupSecrets', async () => {\n if (!hasGitHubToken) return;\n\n const [owner, repo] = gitHubUtil.getOrgAndName(config.repository ?? '');\n if (!owner || !repo || owner !== 'WillBoosterLab') return;\n\n const parsed = dotenv.config().parsed || {};\n if (Object.keys(parsed).length === 0) return;\n\n try {\n for (const secretName of deprecatedSecretNames) {\n try {\n await octokit.request('DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}', {\n owner,\n repo,\n secret_name: secretName,\n });\n } catch {\n // do nothing\n }\n }\n\n const response = await octokit.request('GET /repos/{owner}/{repo}/actions/secrets/public-key', {\n owner,\n repo,\n });\n const { key, key_id: keyId } = response.data;\n\n await sodium.ready;\n\n for (const [name, secret] of Object.entries(parsed)) {\n if (config.publicRepo && name === 'GH_BOT_PAT') continue;\n if (!config.publicRepo && name === 'PUBLIC_GH_BOT_PAT') continue;\n\n // Convert Secret & Base64 key to Uint8Array.\n const rawKey = sodium.from_base64(key, sodium.base64_variants.ORIGINAL);\n const rawSec = sodium.from_string(secret);\n\n // Encrypt the secret using LibSodium\n const encBytes = sodium.crypto_box_seal(rawSec, rawKey);\n\n // Convert encrypted Uint8Array to Base64\n const encBase64 = sodium.to_base64(encBytes, sodium.base64_variants.ORIGINAL);\n\n await octokit.request('PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}', {\n owner,\n repo,\n secret_name: name,\n encrypted_value: encBase64,\n key_id: keyId,\n });\n }\n } catch (error) {\n console.warn('Skip setupSecrets due to:', (error as Error)?.stack ?? error);\n }\n });\n}\n", "import { PackageConfig } from '../packageConfig';\n\nexport async function setupSettings(config: PackageConfig): Promise<void> {\n // TODO: implement code for https://github.com/WillBooster/wbfy/issues/324\n}\n", "import fs from 'node:fs';\nimport fsp from 'node:fs/promises';\nimport path from 'node:path';\n\nimport glob from 'glob';\nimport yaml from 'js-yaml';\nimport { simpleGit } from 'simple-git';\n\nimport { gitHubUtil, octokit } from './utils/githubUtil';\n\nexport interface PackageConfig {\n dirPath: string;\n root: boolean;\n publicRepo: boolean;\n referredByOtherRepo: boolean;\n repository?: string;\n willBoosterConfigs: boolean;\n containingSubPackageJsons: boolean;\n containingDockerfile: boolean;\n containingGemfile: boolean;\n containingGoMod: boolean;\n containingPackageJson: boolean;\n containingPoetryLock: boolean;\n containingPomXml: boolean;\n containingPubspecYaml: boolean;\n containingTemplateYaml: boolean;\n\n containingJavaScript: boolean;\n containingTypeScript: boolean;\n containingJsxOrTsx: boolean;\n containingJavaScriptInPackages: boolean;\n containingTypeScriptInPackages: boolean;\n containingJsxOrTsxInPackages: boolean;\n depending: {\n blitz?: string;\n firebase: boolean;\n prisma: boolean;\n reactNative: boolean;\n semanticRelease: boolean;\n storybook: boolean;\n };\n release: {\n branches: string[];\n github: boolean;\n npm: boolean;\n };\n eslintBase?: string;\n requiringNodeModules: boolean;\n versionsText?: string;\n}\n\nexport async function getPackageConfig(dirPath: string): Promise<PackageConfig | undefined> {\n const packageJsonPath = path.resolve(dirPath, 'package.json');\n try {\n const containingPackageJson = fs.existsSync(packageJsonPath);\n let dependencies: { [key: string]: string } = {};\n let devDependencies: { [key: string]: string } = {};\n let packageJson: any = {};\n if (containingPackageJson) {\n const packageJsonText = fs.readFileSync(packageJsonPath, 'utf8');\n packageJson = JSON.parse(packageJsonText);\n dependencies = packageJson.dependencies ?? {};\n devDependencies = packageJson.devDependencies ?? {};\n }\n\n let requiringNodeModules = true;\n try {\n const yarnrcYmlPath = path.resolve(dirPath, '.yarnrc.yml');\n const doc = yaml.load(await fsp.readFile(yarnrcYmlPath, 'utf8')) as any;\n requiringNodeModules = !doc.nodeLinker || doc.nodeLinker === 'node-modules';\n } catch {\n // do nothing\n }\n\n let releaseBranches: string[] = [];\n let releasePlugins: string[] = [];\n try {\n const releasercJsonPath = path.resolve(dirPath, '.releaserc.json');\n const json = JSON.parse(await fsp.readFile(releasercJsonPath, 'utf8'));\n releaseBranches = json?.branches || [];\n releasePlugins = json?.plugins?.flat() || [];\n } catch {\n // do nothing\n }\n\n const isRoot =\n path.basename(path.resolve(dirPath, '..')) !== 'packages' ||\n !fs.existsSync(path.resolve(dirPath, '..', '..', 'package.json'));\n\n let repoInfo: Record<string, any> | undefined;\n if (isRoot) {\n repoInfo = await getRepoInfo(dirPath, packageJson);\n }\n\n let versionsText: string | undefined;\n try {\n versionsText = await fsp.readFile(path.resolve(dirPath, '.tool-versions'), 'utf8');\n } catch {\n try {\n const nodeVersionContent = await fsp.readFile(path.resolve(dirPath, '.node-version'), 'utf8');\n versionsText = 'nodejs ' + nodeVersionContent.trim();\n } catch {\n // do nothing\n }\n }\n\n const config: PackageConfig = {\n dirPath,\n root: isRoot,\n publicRepo: repoInfo?.private === false,\n referredByOtherRepo: !!packageJson.files,\n repository: repoInfo?.full_name ? `github:${repoInfo?.full_name}` : undefined,\n willBoosterConfigs: packageJsonPath.includes(`${path.sep}willbooster-configs`),\n containingSubPackageJsons: glob.sync('packages/**/package.json', { cwd: dirPath }).length > 0,\n containingDockerfile:\n fs.existsSync(path.resolve(dirPath, 'Dockerfile')) ||\n fs.existsSync(path.resolve(dirPath, 'docker-compose.yml')),\n containingGemfile: fs.existsSync(path.resolve(dirPath, 'Gemfile')),\n containingGoMod: fs.existsSync(path.resolve(dirPath, 'go.mod')),\n containingPackageJson: fs.existsSync(path.resolve(dirPath, 'package.json')),\n containingPoetryLock: fs.existsSync(path.resolve(dirPath, 'poetry.lock')),\n containingPomXml: fs.existsSync(path.resolve(dirPath, 'pom.xml')),\n containingPubspecYaml: fs.existsSync(path.resolve(dirPath, 'pubspec.yaml')),\n containingTemplateYaml: fs.existsSync(path.resolve(dirPath, 'template.yaml')),\n containingJavaScript:\n glob.sync('@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}', { cwd: dirPath }).length > 0,\n containingTypeScript:\n glob.sync('@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}', { cwd: dirPath }).length > 0,\n containingJsxOrTsx: glob.sync('@(app|src|__tests__)/**/*.{t,j}sx', { cwd: dirPath }).length > 0,\n containingJavaScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.{cjs,mjs,js,jsx}', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.{cts,mts,ts,tsx}', { cwd: dirPath }).length > 0,\n containingJsxOrTsxInPackages:\n glob.sync('packages/**/@(app|src|__tests__)/**/*.{t,j}sx', { cwd: dirPath }).length > 0,\n depending: {\n blitz: (dependencies['blitz'] || devDependencies['blitz'] || '').replace('^', '')[0],\n firebase: !!devDependencies['firebase-tools'],\n prisma: !!devDependencies['prisma'],\n reactNative: !!dependencies['react-native'],\n semanticRelease: !!(\n devDependencies['semantic-release'] ||\n releaseBranches.length > 0 ||\n releasePlugins.length > 0\n ),\n storybook: !!devDependencies['@storybook/react'],\n },\n release: {\n branches: releaseBranches,\n github: releasePlugins.includes('@semantic-release/github'),\n npm: releasePlugins.includes('@semantic-release/npm'),\n },\n requiringNodeModules,\n versionsText,\n };\n config.eslintBase = getEslintExtensionBase(config);\n if (\n config.containingGemfile ||\n config.containingGoMod ||\n config.containingPackageJson ||\n config.containingPoetryLock ||\n config.containingPomXml ||\n config.containingPubspecYaml ||\n config.containingTemplateYaml\n ) {\n return config;\n }\n } catch {\n // do nothing\n }\n}\n\nfunction getEslintExtensionBase(config: PackageConfig): string | undefined {\n if (config.containingTypeScript) {\n return config.containingJsxOrTsx ? '@willbooster/eslint-config-ts-react' : '@willbooster/eslint-config-ts';\n } else {\n if (config.containingJsxOrTsx) {\n return '@willbooster/eslint-config-js-react';\n } else if (config.containingJavaScript) {\n return '@willbooster/eslint-config-js';\n }\n }\n}\n\nasync function getRepoInfo(dirPath: string, packageJson: any): Promise<Record<string, any> | undefined> {\n const git = simpleGit(dirPath);\n const remotes = await git.getRemotes(true);\n const origin = remotes.find((r) => r.name === 'origin');\n const remoteUrl = origin?.refs?.fetch ?? origin?.refs?.push;\n if (typeof remoteUrl === 'string') {\n const json = await fetchRepoInfo(remoteUrl);\n if (json) return json;\n }\n\n const url = packageJson.repository?.url ?? packageJson.repository;\n if (typeof url === 'string') {\n const json = await fetchRepoInfo(url);\n if (json && json.message !== 'Not Found') return json;\n }\n}\n\nasync function fetchRepoInfo(urlOrFullName: string): Promise<Record<string, any> | undefined> {\n const [org, name] = gitHubUtil.getOrgAndName(urlOrFullName);\n if (!org || !name) return;\n\n const ret = { full_name: `${org}/${name}` };\n try {\n const response = await octokit.request('GET /repos/{owner}/{repo}', {\n owner: org,\n repo: name,\n });\n Object.assign(ret, response.data);\n } catch {\n // do nothing\n }\n return ret;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_node_path", "import_glob", "import_yargs", "import_node_fs", "import_node_path", "Options", "options", "Logger", "name", "func", "options", "logger", "import_minimal_promise_pool", "promisePool", "import_node_child_process", "spawnSync", "command", "args", "cwd", "retry", "newCmd", "newArgs", "options", "getSpawnSyncArgs", "child_process", "spawnSyncWithStringResult", "proc", "error", "s", "env", "generateVersionConfigs", "config", "logger", "core", "lines", "versionText", "line", "version", "promisePool", "fs", "path", "updateLine", "spawnSyncWithStringResult", "toolVersionsPath", "spawnSync", "insertionIndex", "toolName", "index", "l", "import_node_path", "extensions", "import_promises", "FsUtil", "filePath", "fsp", "content", "newContent", "generateExtensions", "extensions", "generateEditorconfig", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_node_path", "import_node_fs", "userContentHeader", "userContentHeaderRegex", "separator", "separatorPrefix", "defaultHeadUserContent", "defaultTailUserContent", "ignoreFileUtil", "filePath", "content", "fs", "lastHeaderIndex", "getIndexOfTailUserContentHeader", "index", "lastIndex", "commonContent", "generateEslintignore", "config", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "gitignoreFilePath", "gitignoreContent", "newContent", "promisePool", "import_node_fs", "import_node_path", "import_deepmerge", "import_deepmerge", "overwriteMerge", "destinationArray", "sourceArray", "combineMerge", "target", "source", "options", "destination", "index", "item", "merge", "generateEslintrc", "config", "rootConfig", "logger", "bases", "newSettings", "filePath", "path", "oldContent", "fs", "oldSettings", "ext", "newExtends", "merge", "combineMerge", "addExtensionToHead", "newContent", "promisePool", "FsUtil", "extension", "e", "import_node_path", "newContent", "extensions", "ext", "generateGitattributes", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_node_fs", "import_node_os", "import_node_path", "defaultNames", "commonContent", "generateGitignore", "config", "rootConfig", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "names", "generated", "name", "readCache", "url", "responseText", "promisePool", "writeCache", "options", "newContent", "dirPath", "os", "fs", "stat", "import_node_fs", "import_node_path", "import_node_fs", "import_node_path", "import_deepmerge", "EslintUtil", "config", "import_core", "token", "hasGitHubToken", "octokit", "GitHubUtil", "urlOrFullName", "_a", "urlWithoutProtocol", "names", "org", "name", "gitHubUtil", "srcDirectories", "getSrcDirs", "config", "jsCommonDeps", "tsCommonDeps", "reactCommonDeps", "devDeps", "generatePackageJson", "config", "rootConfig", "skipAddingDeps", "logger", "core", "_a", "_b", "filePath", "path", "jsonText", "fs", "jsonObj", "removeDeprecatedStuff", "scriptKey", "merge", "generateScripts", "generatePrettierSuffix", "dependencies", "devDependencies", "poetryDependencies", "dep", "owner", "gitHubUtil", "EslintUtil", "dirs", "dir", "entries", "filteredDirNames", "entry", "dirPath", "fileName", "d", "spawnSync", "deps", "promisePool", "scripts", "getSrcDirs", "extensions", "existingContent", "index", "ignoreFileUtil", "line", "newLine", "l", "DEFAULT_COMMAND", "settings", "generateHuskyrc", "config", "logger", "core", "_a", "_b", "packageJsonPath", "path", "jsonText", "fs", "packageJson", "dirPath", "spawnSync", "preCommitFilePath", "content", "promisePool", "prePush", "typecheck", "generateScripts", "postMergeCommands", "postMergeCommand", "import_node_fs", "import_node_path", "newContent", "generateIdeaSettings", "config", "logger", "dirPath", "path", "fs", "filePath", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "generateLintstagedrc", "config", "logger", "core", "packagePrefix", "lines", "eslint", "getEslintKey", "EslintUtil", "packagesFilter", "extensions", "getEslintFilterForPrettier", "newContent", "filePath", "path", "promisePool", "fs", "FsUtil", "getSrcDirs", "import_node_path", "commonContent", "generatePrettierignore", "config", "logger", "filePath", "path", "content", "FsUtil", "headUserContent", "ignoreFileUtil", "tailUserContent", "gitignoreFilePath", "gitignoreContent", "additionalContent", "newContent", "promisePool", "import_node_fs", "import_node_path", "generateReadme", "config", "logger", "_a", "_b", "filePath", "path", "newContent", "fs", "insertBadge", "semanticReleaseBadge", "repository", "fileNames", "fileName", "badgeName", "badge", "promisePool", "FsUtil", "badgePos", "inserted", "i", "import_node_fs", "import_node_path", "import_deepmerge", "generateReleaserc", "rootConfig", "logger", "filePath", "path", "settings", "fs", "plugins", "plugin", "oldConfig", "merge", "overwriteMerge", "newContent", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_lodash", "jsonObj", "generateRenovateJson", "config", "logger", "newSettings", "cloneDeep", "filePath", "path", "oldContent", "fs", "oldSettings", "merge", "overwriteMerge", "promisePool", "newContent", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_lodash", "sortKeys", "obj", "keyAndValues", "key1", "key2", "key", "value", "rootJsonObj", "subJsonObj", "generateTsconfig", "config", "rootConfig", "logger", "_a", "_b", "newSettings", "cloneDeep", "dirPath", "filePath", "path", "existingContent", "fs", "oldSettings", "merge", "overwriteMerge", "sortKeys", "newContent", "promisePool", "FsUtil", "import_node_fs", "import_node_path", "import_deepmerge", "import_js_yaml", "import_lodash", "workflows", "generateWorkflow", "rootConfig", "logger", "_a", "workflowsPath", "path", "fs", "semanticYmlPath", "promisePool", "fileNames", "dirent", "fileName", "kind", "writeWorkflowYaml", "config", "_b", "newSettings", "cloneDeep", "filePath", "oldContent", "oldSettings", "yaml", "merge", "combineMerge", "job", "normalizeJob", "setSchedule", "writeYaml", "params", "_c", "sortKeys", "newSecrets", "inclusiveMinHourJst", "exclusiveMaxHourJst", "minuteUtc", "hourUtc", "hourJst", "inRange", "minJst", "cron", "yamlText", "import_node_fs", "import_node_path", "import_js_yaml", "generateYarnrcYml", "config", "logger", "_a", "_b", "currentVersion", "spawnSyncWithStringResult", "latestVersion", "getLatestVersion", "getMajorNumber", "spawnSync", "releasesPath", "path", "fs", "file", "promisePool", "yarnrcPath", "yarnrcYmlPath", "settings", "yaml", "originalLength", "p", "pluginPath", "plugins", "requireTypeScript", "importOrRemovePlugin", "packageName", "dirPath", "versionsJson", "versions", "requirePlugin", "plugin", "version", "major", "setupLabels", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "setupLabel", "deleteLabel", "error", "name", "color", "octokit", "import_dotenv", "import_libsodium_wrappers", "deprecatedSecretNames", "setupSecrets", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "parsed", "dotenv", "secretName", "octokit", "response", "key", "keyId", "sodium", "name", "secret", "rawKey", "rawSec", "encBytes", "encBase64", "error", "setupSettings", "config", "import_node_fs", "import_promises", "import_node_path", "import_glob", "import_js_yaml", "import_simple_git", "getPackageConfig", "dirPath", "_a", "packageJsonPath", "path", "containingPackageJson", "fs", "dependencies", "devDependencies", "packageJson", "packageJsonText", "requiringNodeModules", "yarnrcYmlPath", "doc", "yaml", "fsp", "releaseBranches", "releasePlugins", "releasercJsonPath", "json", "isRoot", "repoInfo", "getRepoInfo", "versionsText", "config", "glob", "getEslintExtensionBase", "_b", "_c", "origin", "r", "remoteUrl", "fetchRepoInfo", "url", "urlOrFullName", "org", "name", "gitHubUtil", "ret", "response", "octokit", "main", "argv", "yargs", "options", "rootDirPath", "rootConfig", "getPackageConfig", "subDirPaths", "glob", "subDirPath", "path", "subPackageConfigs", "config", "allPackageConfigs", "generateVersionConfigs", "generateYarnrcYml", "generateEditorconfig", "generateGitattributes", "generateHuskyrc", "generateIdeaSettings", "generateLintstagedrc", "generateReadme", "generateRenovateJson", "generateReleaserc", "generateWorkflow", "setupLabels", "setupSecrets", "setupSettings", "promisePool", "promises", "generateGitignore", "generatePrettierignore", "generatePackageJson", "generateTsconfig", "generateEslintrc", "generateEslintignore", "spawnSync"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wbfy",
3
- "version": "1.71.4",
3
+ "version": "1.71.6",
4
4
  "description": "A tool for applying WillBooster's conventional configures to npm packages",
5
5
  "repository": "github:WillBooster/wbfy",
6
6
  "license": "Apache-2.0",