wbfy 1.45.1 → 1.46.0

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 Rt=Object.create;var Ce=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var jt=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var Dt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of jt(t))!Et.call(e,r)&&r!==n&&Ce(e,r,{get:()=>t[r],enumerable:!(o=Tt(t,r))||o.enumerable});return e};var l=(e,t,n)=>(n=e!=null?Rt(Ot(e)):{},Dt(t||!e||!e.__esModule?Ce(n,"default",{value:e,enumerable:!0}):n,e));var Ct=l(require("path")),Ft=l(require("glob")),$t=l(require("yargs"));var K=l(require("fs")),pe=l(require("path"));var ae=class{constructor(){this.isVerbose=!1}},C=new ae;var le=class{async function(t,n){C.isVerbose&&console.info(`--------- ${t} start ---------`),await n(),C.isVerbose&&console.info(`---------- ${t} end ----------`)}},f=new le;var Fe=require("minimal-promise-pool"),c=new Fe.PromisePool;var ce=l(require("child_process"));function w(e,t,n,o=0){do{let[r,i,s]=$e(e,t,n);if(console.log(`$ ${r} ${i.join(" ")} at ${s.cwd}`),ce.default.spawnSync(r,i,s).status===0)break}while(--o>=0)}function B(e,t,n){let[o,r,i]=$e(e,t,n);i.stdio="pipe";let s=ce.default.spawnSync(o,r,i),a=s.stderr.toString().trim();return a&&console.error(`${o} [${r.map(u=>`"${u}"`)}] caused the following error:
2
- ${a}`),s.stdout.toString().trim()}function $e(e,t,n){let o={...process.env};return o.PATH&&o.BERRY_BIN_FOLDER&&(o.PATH=o.PATH.replace(`${o.BERRY_BIN_FOLDER}:`,"")),o.ASDF_DIR&&(t=["-l","-c",`. ${o.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:n,env:o,shell:!1,stdio:"inherit"}]}async function Re(e){return f.function("generateVersionConfigs",async()=>{await Jt(e)})}async function Jt(e){if(!e.versionsText)return;let t=[];for(let o of e.versionsText.trim().split(`
3
- `)){let r=o.trim();if(r&&r.split(/\s+/)[0]!=="nodejs"){t.push(r);continue}let[,i]=r.split(/\s+/);await c.run(()=>K.default.promises.writeFile(pe.default.resolve(e.dirPath,".node-version"),i))}if(e.containingPoetryLock&&(Y("poetry 1.1.13",0,t),Y("python 3.9.13",0,t)),e.depending.firebase&&Y("java adoptopenjdk-17.0.2+8",0,t),e.containingPackageJson){let o=B("npm",["show","yarn","version"],e.dirPath);Y(`yarn ${o}`,t.length,t)}let n=pe.default.resolve(e.dirPath,".tool-versions");t.length?await c.run(()=>K.default.promises.writeFile(n,t.join(`
1
+ "use strict";var Tt=Object.create;var $e=Object.defineProperty;var jt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Ot=Object.getPrototypeOf,Dt=Object.prototype.hasOwnProperty;var Bt=(e,t,n,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Et(t))!Dt.call(e,r)&&r!==n&&$e(e,r,{get:()=>t[r],enumerable:!(i=jt(t,r))||i.enumerable});return e};var l=(e,t,n)=>(n=e!=null?Tt(Ot(e)):{},Bt(t||!e||!e.__esModule?$e(n,"default",{value:e,enumerable:!0}):n,e));var Ct=l(require("path")),$t=l(require("glob")),Rt=l(require("yargs"));var H=l(require("fs")),fe=l(require("path"));var ce=class{constructor(){this.isVerbose=!1}},R=new ce;var pe=class{async function(t,n){R.isVerbose&&console.info(`--------- ${t} start ---------`),await n(),R.isVerbose&&console.info(`---------- ${t} end ----------`)}},f=new pe;var Re=require("minimal-promise-pool"),c=new Re.PromisePool;var me=l(require("child_process"));function P(e,t,n,i=0){do{let[r,o,s]=Te(e,t,n);if(console.log(`$ ${r} ${o.join(" ")} at ${s.cwd}`),me.default.spawnSync(r,o,s).status===0)break}while(--i>=0)}function L(e,t,n){let[i,r,o]=Te(e,t,n);o.stdio="pipe";let s=me.default.spawnSync(i,r,o),a=s.stderr.toString().trim();return a&&console.error(`${i} [${r.map(u=>`"${u}"`)}] caused the following error:
2
+ ${a}`),s.stdout.toString().trim()}function Te(e,t,n){let i={...process.env};return i.PATH&&i.BERRY_BIN_FOLDER&&(i.PATH=i.PATH.replace(`${i.BERRY_BIN_FOLDER}:`,"")),i.ASDF_DIR&&(t=["-l","-c",`. ${i.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:n,env:i,shell:!1,stdio:"inherit"}]}async function je(e){return f.function("generateVersionConfigs",async()=>{await Jt(e)})}async function Jt(e){if(!e.versionsText)return;let t=[];for(let i of e.versionsText.trim().split(`
3
+ `)){let r=i.trim();if(r&&r.split(/\s+/)[0]!=="nodejs"){t.push(r);continue}let[,o]=r.split(/\s+/);await c.run(()=>H.default.promises.writeFile(fe.default.resolve(e.dirPath,".node-version"),o))}if(e.containingPoetryLock&&(K("poetry 1.1.13",0,t),K("python 3.9.13",0,t)),e.depending.firebase&&K("java adoptopenjdk-17.0.2+8",0,t),e.containingPackageJson){let i=L("npm",["show","yarn","version"],e.dirPath);K(`yarn ${i}`,t.length,t)}let n=fe.default.resolve(e.dirPath,".tool-versions");t.length?await c.run(()=>H.default.promises.writeFile(n,t.join(`
4
4
  `)+`
5
- `)):await c.run(()=>K.default.promises.rm(n,{force:!0})),await c.promiseAll(),w("asdf",["install"],e.dirPath)}function Y(e,t,n){let[o]=e.split(" "),r=n.findIndex(i=>i.split(/\s+/)[0]===o);r>=0?n[r]=e:n.splice(t,0,e)}var je=l(require("path"));var P={codeWith2IndentSize:["cjs","mjs","js","jsx","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","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()};var Te=l(require("fs/promises")),d={async generateFile(e,t){await Te.default.writeFile(e,t),console.log(`Generated ${e}`)}};var Nt=`root = true
5
+ `)):await c.run(()=>H.default.promises.rm(n,{force:!0})),await c.promiseAll(),P("asdf",["install"],e.dirPath)}function K(e,t,n){let[i]=e.split(" "),r=n.findIndex(o=>o.split(/\s+/)[0]===i);r>=0?n[r]=e:n.splice(t,0,e)}var Oe=l(require("path"));var v={codeWith2IndentSize:["cjs","mjs","js","jsx","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","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()};var Ee=l(require("fs/promises")),y={async generateFile(e,t){await Ee.default.writeFile(e,t),console.log(`Generated ${e}`)}};var Nt=`root = true
6
6
 
7
7
  [*]
8
8
  charset = utf-8
@@ -10,32 +10,32 @@ end_of_line = lf
10
10
  insert_final_newline = true
11
11
  trim_trailing_whitespace = true
12
12
 
13
- ${q(P.codeWith2IndentSize)}
13
+ ${V(v.codeWith2IndentSize)}
14
14
  indent_size = 2
15
15
  indent_style = space
16
16
 
17
- ${q(P.codeWith4IndentSize)}
17
+ ${V(v.codeWith4IndentSize)}
18
18
  indent_size = 4
19
19
  indent_style = space
20
20
 
21
- ${q(P.codeWith8IndentSize)}
21
+ ${V(v.codeWith8IndentSize)}
22
22
  indent_size = 8
23
23
  indent_style = space
24
24
 
25
- ${q(P.markdownLike)}
25
+ ${V(v.markdownLike)}
26
26
  max_line_length = off
27
27
  trim_trailing_whitespace = false
28
28
 
29
29
  [{Makefile,*.mk}]
30
30
  indent_style = tab
31
- `;async function Oe(e){return f.function("generateEditorconfig",async()=>{let t=je.default.resolve(e.dirPath,".editorconfig");await c.run(()=>d.generateFile(t,Nt))})}function q(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var me=l(require("path"));var H=l(require("fs")),h={header:"# Project-specific settings",separator:"# Generated by @willbooster/willboosterify",separatorPrefix:"# Generated by @willbooster",async getExistingContent(e){try{return(await H.default.promises.readFile(e,"utf-8")).replace(/# Project-specific settings[^\n]*\n/m,"").replace(/# Generated by[^\n]*\n/m,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
31
+ `;async function De(e){return f.function("generateEditorconfig",async()=>{let t=Oe.default.resolve(e.dirPath,".editorconfig");await c.run(()=>y.generateFile(t,Nt))})}function V(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var ue=l(require("path"));var X=l(require("fs")),w={header:"# Project-specific settings",separator:"# Generated by @willbooster/willboosterify",separatorPrefix:"# Generated by @willbooster",async getExistingContent(e){try{return(await X.default.promises.readFile(e,"utf-8")).replace(/# Project-specific settings[^\n]*\n/m,"").replace(/# Generated by[^\n]*\n/m,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
32
32
 
33
- `)}catch{return null}},async getUserContent(e){try{let t=await H.default.promises.readFile(e,"utf-8"),n=t.indexOf(this.separatorPrefix);if(n>=0)return t.substring(0,t.indexOf(`
34
- `,n)+1)}catch{}return null},async isBerryZeroInstallEnabled(e){try{return(await H.default.promises.readFile(e,"utf-8")).includes(`
35
- !.yarn/cache`)}catch{return!1}}};var It=`${h.header}
33
+ `)}catch{return null}},async getUserContent(e){try{let t=await X.default.promises.readFile(e,"utf-8"),n=t.indexOf(this.separatorPrefix);if(n>=0)return t.substring(0,t.indexOf(`
34
+ `,n)+1)}catch{}return null},async isBerryZeroInstallEnabled(e){try{return(await X.default.promises.readFile(e,"utf-8")).includes(`
35
+ !.yarn/cache`)}catch{return!1}}};var It=`${w.header}
36
36
 
37
37
 
38
- ${h.separator}
38
+ ${w.separator}
39
39
  `,Wt=`
40
40
  3rd-party/
41
41
  @types/
@@ -49,39 +49,39 @@ test-fixtures/
49
49
  *.min.js
50
50
  .yarn/
51
51
  .pnp.js
52
- `;async function Ee(e){return f.function("generateEslintignore",async()=>{let t=me.default.resolve(e.dirPath,".eslintignore"),n=await h.getUserContent(t)||It,o=me.default.resolve(e.dirPath,".gitignore"),r=await h.getExistingContent(o)||"",i=n+Wt+r;await c.run(()=>d.generateFile(t,i))})}var Je=l(require("fs")),Ne=l(require("path")),Ie=l(require("deepmerge"));var De=l(require("deepmerge"));function V(e,t){return t}function X(e,t,n){let o=e.slice();return t.forEach((r,i)=>{typeof o[i]>"u"?o[i]=n.cloneUnlessOtherwiseSpecified(r,n):n.isMergeableObject(r)?o[i]=(0,De.default)(e[i],r,n):e.indexOf(r)===-1&&o.push(r)}),o}async function We(e,t){return f.function("generateEslintrc",async()=>{let n=[];e.eslintBase&&n.push(e.eslintBase),e!==t&&n.push("../../.eslintrc.json");let o={root:!0,extends:n},r=Ne.default.resolve(e.dirPath,".eslintrc.json");try{let s=await Je.default.promises.readFile(r,"utf-8"),a=JSON.parse(s);a.extends&&(a.extends=a.extends.filter(m=>!m.startsWith("@willbooster/")&&m!=="../../.eslintrc.json")),n.length||(a.extends=[]);let u=o.extends;o.extends=a.extends,a.extends=u,o=Ie.default.all([o,a,o],{arrayMerge:X}),e.depending.blitz&&(o.extends=[...o.extends.filter(m=>m!=="blitz"),"blitz"])}catch{}let i=JSON.stringify(o);await c.run(()=>d.generateFile(r,i))})}var Be=l(require("path"));var Bt=`* text=auto
52
+ `;async function Be(e){return f.function("generateEslintignore",async()=>{let t=ue.default.resolve(e.dirPath,".eslintignore"),n=await w.getUserContent(t)||It,i=ue.default.resolve(e.dirPath,".gitignore"),r=await w.getExistingContent(i)||"",o=n+Wt+r;await c.run(()=>y.generateFile(t,o))})}var Ne=l(require("fs")),Ie=l(require("path")),We=l(require("deepmerge"));var Je=l(require("deepmerge"));function Z(e,t){return t}function Q(e,t,n){let i=e.slice();return t.forEach((r,o)=>{typeof i[o]>"u"?i[o]=n.cloneUnlessOtherwiseSpecified(r,n):n.isMergeableObject(r)?i[o]=(0,Je.default)(e[o],r,n):e.indexOf(r)===-1&&i.push(r)}),i}async function Ae(e,t){return f.function("generateEslintrc",async()=>{let n=[];e.eslintBase&&n.push(e.eslintBase),e!==t&&n.push("../../.eslintrc.json");let i={root:!0,extends:n},r=Ie.default.resolve(e.dirPath,".eslintrc.json");try{let s=await Ne.default.promises.readFile(r,"utf-8"),a=JSON.parse(s);a.extends&&(a.extends=a.extends.filter(m=>!m.startsWith("@willbooster/")&&m!=="../../.eslintrc.json")),n.length||(a.extends=[]);let u=i.extends;i.extends=a.extends,a.extends=u,i=We.default.all([i,a,i],{arrayMerge:Q}),e.depending.blitz&&(i.extends=[...i.extends.filter(m=>m!=="blitz"),"blitz"])}catch{}let o=JSON.stringify(i);await c.run(()=>y.generateFile(r,o))})}var Le=l(require("path"));var At=`* text=auto
53
53
 
54
54
  *.vcproj text eol=crlf
55
55
 
56
- ${P.codeWith2IndentSize.concat(P.codeWith4IndentSize).concat(P.markdownLike).map(e=>`*.${e} text eol=lf`).join(`
56
+ ${v.codeWith2IndentSize.concat(v.codeWith4IndentSize).concat(v.markdownLike).map(e=>`*.${e} text eol=lf`).join(`
57
57
  `)}
58
- `;async function Le(e){return f.function("generateGitattributes",async()=>{let t=Be.default.resolve(e.dirPath,".gitattributes");await c.run(()=>d.generateFile(t,Bt))})}var L=l(require("fs")),Ue=l(require("os")),O=l(require("path"));async function Ae(e,t){let{default:n}=await import("node-fetch");return n(e,t)}var Lt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],At=`${h.header}
58
+ `;async function Ue(e){return f.function("generateGitattributes",async()=>{let t=Le.default.resolve(e.dirPath,".gitattributes");await c.run(()=>y.generateFile(t,At))})}var U=l(require("fs")),Ge=l(require("os")),D=l(require("path"));async function ze(e,t){let{default:n}=await import("node-fetch");return n(e,t)}var Lt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],Ut=`${w.header}
59
59
 
60
60
 
61
- ${h.separator}
62
- `,Ut=`
61
+ ${w.separator}
62
+ `,zt=`
63
63
  .devcontainer/
64
64
  dist/
65
65
  temp/
66
66
  Icon[\r]
67
67
  *.sqlite3
68
68
  *.sqlite3-journal
69
- `;async function ze(e,t){return f.function("generateGitignore",async()=>{let n=O.default.resolve(e.dirPath,".gitignore"),o=(await h.getUserContent(n)||At)+Ut,r=[...Lt];e.containingGemfile&&r.push("ruby"),e.containingGoMod&&(r.push("go"),o+=`${O.default.basename(e.dirPath)}
70
- `),e.containingPackageJson&&r.push("node"),e.containingPomXml&&(r.push("maven"),o+=`.idea/google-java-format.xml
71
- `),e.containingPubspecYaml&&(r.push("flutter","AndroidStudio","ruby"),o+=`.flutter-plugins-dependencies
69
+ `;async function Me(e,t){return f.function("generateGitignore",async()=>{let n=D.default.resolve(e.dirPath,".gitignore"),i=(await w.getUserContent(n)||Ut)+zt,r=[...Lt];e.containingGemfile&&r.push("ruby"),e.containingGoMod&&(r.push("go"),i+=`${D.default.basename(e.dirPath)}
70
+ `),e.containingPackageJson&&r.push("node"),e.containingPomXml&&(r.push("maven"),i+=`.idea/google-java-format.xml
71
+ `),e.containingPubspecYaml&&(r.push("flutter","AndroidStudio","ruby"),i+=`.flutter-plugins-dependencies
72
72
  android/key.properties
73
73
  ios/.bundle
74
74
  .idea/runConfigurations.xml
75
- `),e.containingTemplateYaml&&(o+=`.aws-sam/
75
+ `),e.containingTemplateYaml&&(i+=`.aws-sam/
76
76
  packaged.yaml
77
- `),e.containingPoetryLock&&r.push("python"),(t.depending.firebase||e.depending.firebase)&&r.push("firebase"),(t.depending.reactNative||e.depending.reactNative)&&(r.push("reactnative"),o+=`google-services.json
77
+ `),e.containingPoetryLock&&r.push("python"),(t.depending.firebase||e.depending.firebase)&&r.push("firebase"),(t.depending.reactNative||e.depending.reactNative)&&(r.push("reactnative"),i+=`google-services.json
78
78
  android/app/src/main/assets/
79
- `),t.depending.storybook&&r.push("storybookjs"),t.depending.blitz&&(r.push("nextjs"),o+=`.blitz/
79
+ `),t.depending.storybook&&r.push("storybookjs"),t.depending.blitz&&(r.push("nextjs"),i+=`.blitz/
80
80
  .blitz**
81
- `);let i="";for(let a of r){let u=await Gt(a)??"";if(!u){let m=`https://www.toptal.com/developers/gitignore/api/${a}`,g=await(await Ae(m)).text();if(g.includes("Attention Required!")){console.error(`Failed to fetch ${m}`);return}u=g.trim(),await c.run(()=>zt(a,u)),C.isVerbose&&console.info(`Fetched ${m}`)}i&&(i+=`
82
- `),i+=u+`
83
- `}await h.isBerryZeroInstallEnabled(n)||(i=i.replace("!.yarn/cache","# !.yarn/cache").replace("# .pnp.*",".pnp.*")),(e.containingPomXml||e.containingPubspecYaml)&&(i=i.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&&(i=i.replace(/^.idea\/modules.xml$/gm,"# .idea/modules.xml"))),i=i.replace(/^.idea\/?$/gm,"# .idea"),(t.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(i=i.replace(/^(.idea\/.+)$/gm,`$1
84
- android/$1`));let s=o+i;await c.run(()=>d.generateFile(n,s))})}var Z=O.default.join(Ue.default.homedir(),".cache","wbfy","gitignore");async function zt(e,t){await L.default.promises.mkdir(Z,{recursive:!0}),await L.default.promises.writeFile(O.default.join(Z,e),t)}async function Gt(e){try{let t=await L.default.promises.stat(O.default.join(Z,e));return Date.now()-t.mtimeMs>6*60*60*1e3?void 0:await L.default.promises.readFile(O.default.join(Z,e),"utf-8")}catch{}}var x=l(require("fs")),E=l(require("path"));var fe="npm test",Q={preCommit:"yarn lint-staged",prePush:"yarn typecheck",prePushForLab:`
81
+ `);let o="";for(let a of r){let u=await Mt(a)??"";if(!u){let m=`https://www.toptal.com/developers/gitignore/api/${a}`,d=await(await ze(m)).text();if(d.includes("Attention Required!")){console.error(`Failed to fetch ${m}`);return}u=d.trim(),await c.run(()=>Gt(a,u)),R.isVerbose&&console.info(`Fetched ${m}`)}o&&(o+=`
82
+ `),o+=u+`
83
+ `}await w.isBerryZeroInstallEnabled(n)||(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
84
+ android/$1`));let s=i+o;await c.run(()=>y.generateFile(n,s))})}var ee=D.default.join(Ge.default.homedir(),".cache","wbfy","gitignore");async function Gt(e,t){await U.default.promises.mkdir(ee,{recursive:!0}),await U.default.promises.writeFile(D.default.join(ee,e),t)}async function Mt(e){try{let t=await U.default.promises.stat(D.default.join(ee,e));return Date.now()-t.mtimeMs>6*60*60*1e3?void 0:await U.default.promises.readFile(D.default.join(ee,e),"utf-8")}catch{}}var F=l(require("fs")),B=l(require("path"));var ge="npm test",te={preCommit:"yarn lint-staged",prePush:"yarn typecheck",prePushForLab:`
85
85
  if [ $(git branch --show-current) = "main" ] && [ $(git config user.email) != "exkazuu@gmail.com" ]; then
86
86
  echo "************************************************"
87
87
  echo "*** Don't push main branch directly. Use PR! ***"
@@ -89,7 +89,7 @@ if [ $(git branch --show-current) = "main" ] && [ $(git config user.email) != "e
89
89
  exit 1
90
90
  fi
91
91
 
92
- yarn typecheck`.trim(),postMerge:"yarn"};async function Ge(e){return f.function("generateHuskyrc",async()=>{await Mt(e)})}async function Mt(e){var m,p;let t=E.default.resolve(e.dirPath,"package.json"),n=await x.default.promises.readFile(t,"utf-8"),o=JSON.parse(n);o.scripts||(o.scripts={}),delete o.scripts.postinstall,delete o.scripts.postpublish,delete o.scripts.prepare,delete o.scripts.prepublishOnly,delete o.scripts.prepack,delete o.scripts.postpack;let r=E.default.resolve(e.dirPath,".husky");await Promise.all([x.default.promises.writeFile(t,JSON.stringify(o,void 0,2)),x.default.promises.rm(r,{force:!0,recursive:!0})]),w("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let i=E.default.resolve(r,"pre-commit"),s=await x.default.promises.readFile(i,"utf-8");if(await c.run(()=>x.default.promises.rm(E.default.resolve(e.dirPath,".huskyrc.json"),{force:!0})),await c.run(()=>x.default.promises.writeFile(i,s.replace(fe,Q.preCommit))),e.containingTypeScript||e.containingTypeScriptInPackages){let g=(m=e.repository)!=null&&m.startsWith("github:WillBoosterLab/")?Q.prePushForLab:Q.prePush;await c.run(()=>x.default.promises.writeFile(E.default.resolve(r,"pre-push"),s.replace(fe,g),{mode:493}))}let a=[];(p=e.versionsText)!=null&&p.includes("python ")&&a.push("asdf install python"),e.versionsText&&a.push("asdf install"),a.push(Q.postMerge),e.containingPoetryLock&&a.push("poetry install"),(e.depending.blitz||e.depending.prisma)&&a.push("yarn gen-code");let u=s.replace(fe,a.join(" && "));await c.run(()=>x.default.promises.writeFile(E.default.resolve(r,"post-merge"),u,{mode:493}))}var ue=l(require("fs")),ge=l(require("path"));var Yt=`<?xml version="1.0" encoding="UTF-8"?>
92
+ yarn typecheck`.trim(),postMerge:"yarn"};async function Ye(e){return f.function("generateHuskyrc",async()=>{await Yt(e)})}async function Yt(e){var m,p;let t=B.default.resolve(e.dirPath,"package.json"),n=await F.default.promises.readFile(t,"utf-8"),i=JSON.parse(n);i.scripts||(i.scripts={}),delete i.scripts.postinstall,delete i.scripts.postpublish,delete i.scripts.prepare,delete i.scripts.prepublishOnly,delete i.scripts.prepack,delete i.scripts.postpack;let r=B.default.resolve(e.dirPath,".husky");await Promise.all([F.default.promises.writeFile(t,JSON.stringify(i,void 0,2)),F.default.promises.rm(r,{force:!0,recursive:!0})]),P("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let o=B.default.resolve(r,"pre-commit"),s=await F.default.promises.readFile(o,"utf-8");if(await c.run(()=>F.default.promises.rm(B.default.resolve(e.dirPath,".huskyrc.json"),{force:!0})),await c.run(()=>F.default.promises.writeFile(o,s.replace(ge,te.preCommit))),e.containingTypeScript||e.containingTypeScriptInPackages){let d=(m=e.repository)!=null&&m.startsWith("github:WillBoosterLab/")?te.prePushForLab:te.prePush;await c.run(()=>F.default.promises.writeFile(B.default.resolve(r,"pre-push"),s.replace(ge,d),{mode:493}))}let a=[];(p=e.versionsText)!=null&&p.includes("python ")&&a.push("asdf install python"),e.versionsText&&a.push("asdf install"),a.push(te.postMerge),e.containingPoetryLock&&a.push("poetry install"),(e.depending.blitz||e.depending.prisma)&&a.push("yarn gen-code");let u=s.replace(ge,a.join(" && "));await c.run(()=>F.default.promises.writeFile(B.default.resolve(r,"post-merge"),u,{mode:493}))}var de=l(require("fs")),ye=l(require("path"));var qt=`<?xml version="1.0" encoding="UTF-8"?>
93
93
  <project version="4">
94
94
  <component name="ProjectTasksOptions">
95
95
  <TaskOptions isEnabled="true">
@@ -214,10 +214,10 @@ yarn typecheck`.trim(),postMerge:"yarn"};async function Ge(e){return f.function(
214
214
  </TaskOptions>
215
215
  </component>
216
216
  </project>
217
- `;async function Me(e){return f.function("generateIdeaSettings",async()=>{let t=ge.default.resolve(e.dirPath,".idea");if(ue.default.existsSync(t)){let n=ge.default.resolve(t,"watcherTasks.xml");e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?await c.run(()=>d.generateFile(n,Yt)):await c.run(()=>ue.default.promises.rm(n,{force:!0}))}})}var de=l(require("fs")),ne=l(require("path"));var ee={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var A={node:["src","__tests__","scripts"],blitz:["app","db","integrations","mailers","test"]};A.blitz=[...A.node,...A.blitz];function te(e){return e.depending.blitz?A.blitz:A.node}async function ye(e){return f.function("generateLintstagedrc",async()=>{await Kt(e)})}async function Kt(e){let t=[];if(e.containingJavaScript||e.containingTypeScript){let i=`
218
- '${Ye(e)}': [${JSON.stringify(`eslint --fix${ee.getLintFixSuffix(e)}`)}, 'prettier --write'],`;t.push(i)}let n=e.root?" && !file.includes('/packages/')":"";t.push(`
219
- './**/*.{${P.prettier.join(",")}}': files => {
220
- ${e.containingJavaScript||e.containingTypeScript?qt(e):""}
217
+ `;async function qe(e){return f.function("generateIdeaSettings",async()=>{let t=ye.default.resolve(e.dirPath,".idea");if(de.default.existsSync(t)){let n=ye.default.resolve(t,"watcherTasks.xml");e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?await c.run(()=>y.generateFile(n,qt)):await c.run(()=>de.default.promises.rm(n,{force:!0}))}})}var he=l(require("fs")),re=l(require("path"));var ne={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var z={node:["src","__tests__","scripts"],blitz:["app","db","integrations","mailers","test"]};z.blitz=[...z.node,...z.blitz];function ie(e){return e.depending.blitz?z.blitz:z.node}async function we(e){return f.function("generateLintstagedrc",async()=>{await Kt(e)})}async function Kt(e){let t=[];if(e.containingJavaScript||e.containingTypeScript){let o=`
218
+ '${Ke(e)}': [${JSON.stringify(`eslint --fix${ne.getLintFixSuffix(e)}`)}, 'prettier --write'],`;t.push(o)}let n=e.root?" && !file.includes('/packages/')":"";t.push(`
219
+ './**/*.{${v.prettier.join(",")}}': files => {
220
+ ${e.containingJavaScript||e.containingTypeScript?Ht(e):""}
221
221
  const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${n});
222
222
  if (filteredFiles.length === 0) return [];
223
223
  const commands = [\`prettier --write \${filteredFiles.join(' ')}\`];
@@ -236,16 +236,16 @@ yarn typecheck`.trim(),postMerge:"yarn"};async function Ge(e){return f.function(
236
236
  'poetry run isort --profile black --filter-files',
237
237
  'poetry run black',
238
238
  'poetry run flake8'
239
- ],`);let o=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}
239
+ ],`);let i=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}
240
240
 
241
241
  module.exports = {${t.join("")}
242
242
  };
243
- `,r=ne.default.resolve(e.dirPath,".lintstagedrc.cjs");await c.run(()=>de.default.promises.rm(ne.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0})),await c.run(()=>de.default.promises.rm(ne.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0})),await c.run(()=>d.generateFile(r,o))}function Ye(e){return`./{${te(e).join(",")}}/**/*.{${P.eslint.join(",")}}`}function qt(e){return`files = micromatch.not(files, '${Ye(e)}');`}var S=l(require("fs")),N=l(require("path")),we=l(require("deepmerge"));var he=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys"],Ke=[...he,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],qe=["eslint-plugin-react","eslint-plugin-react-hooks"],He={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...he],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...he,...qe],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...Ke],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...Ke,...qe],"../../.eslintrc.json":[]};async function Ve(e,t,n){return f.function("generatePackageJson",async()=>{await Ht(e,n)})}async function Ht(e,t){var u,m;let n=N.default.resolve(e.dirPath,"package.json"),o=await S.default.promises.readFile(n,"utf-8"),r=JSON.parse(o);r.scripts=r.scripts||{},r.dependencies=r.dependencies||{},r.devDependencies=r.devDependencies||{},r.peerDependencies=r.peerDependencies||{},await Vt(r),r.name!=="@willbooster/prettier-config"&&(r.prettier="@willbooster/prettier-config");for(let p of Object.keys(r.scripts))r.scripts[p].includes("git clone")||(r.scripts[p]=r.scripts[p].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));r.scripts=(0,we.default)(r.scripts,Xt(e)),r.scripts.prettify+=await Zt(e.dirPath);let i=[],s=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"],a=[];if(e.root&&(s.push("husky","pinst","@willbooster/renovate-config"),e.depending.semanticRelease&&s.push("conventional-changelog-conventionalcommits"),e.containingSubPackageJsons?r.workspaces=["packages/*"]:delete r.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(s.push("eslint","micromatch"),e.containingTypeScriptInPackages&&s.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&!e.depending.blitz&&s.push("typescript"),e.eslintBase&&s.push(...He[e.eslintBase]),e.willBoosterConfigs&&(i=i.filter(p=>!p.includes("@willbooster/")),s=s.filter(p=>!p.includes("@willbooster/"))),r.name||(r.name=N.default.basename(e.dirPath)),e.containingSubPackageJsons&&(r.private=!0),r.license||(r.license="UNLICENSED"),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete r.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(r.resolutions||(r.resolutions={}),r.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete r.scripts.lint,delete r.scripts["lint-fix"],r.scripts.cleanup=r.scripts.cleanup.replace(" && yarn lint-fix","")):r.scripts["lint-fix"]+=ee.getLintFixSuffix(e),e.containingPubspecYaml){r.scripts.lint="flutter analyze",r.scripts["lint-fix"]="yarn lint";let p=["lib","test","test_driver"].filter(g=>S.default.existsSync(N.default.resolve(e.dirPath,g)));p.length>0&&(r.scripts["format-code"]=`flutter format $(find ${p.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,r.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){r.scripts.postinstall==="poetry install"&&delete r.scripts.postinstall;let p=(await S.default.promises.readdir(e.dirPath)).filter(g=>{let J=N.default.resolve(e.dirPath,g);return S.default.lstatSync(J).isDirectory()?S.default.readdirSync(J).some(M=>M.endsWith(".py")):!1});p.length>0&&(r.scripts["format-code"]=`poetry run isort --profile black ${p.join(" ")} && poetry run black ${p.join(" ")}`,r.scripts.lint=`poetry run flake8 ${p.join(" ")}`,r.scripts["lint-fix"]="yarn lint",r.scripts.format+=" && yarn format-code",a.push("black","isort","flake8"))}e.repository&&(r.repository=e.repository)}e.depending.blitz?(s=s.filter(p=>!p.includes("@typescript-eslint/")),s=s.filter(p=>p!=="eslint-plugin-react"&&p!=="eslint-import-resolver-typescript"&&p!=="eslint-plugin-import"&&p!=="eslint-plugin-react-hooks"),(u=r.scripts["gen-code"])!=null&&u.startsWith("blitz codegen")||(r.scripts["gen-code"]="blitz codegen")):e.depending.prisma&&((m=r.scripts["gen-code"])!=null&&m.startsWith("prisma generate")||(r.scripts["gen-code"]="prisma generate")),Object.keys(r.dependencies).length||delete r.dependencies,Object.keys(r.devDependencies).length||delete r.devDependencies,Object.keys(r.peerDependencies).length||delete r.peerDependencies,await S.default.promises.writeFile(n,JSON.stringify(r)),t||(i=i.filter(p=>{var g;return!((g=r.devDependencies)!=null&&g[p])}),i.length&&w("yarn",["add",...new Set(i)],e.dirPath),s=s.filter(p=>{var g;return!((g=r.dependencies)!=null&&g[p])}),s.length&&w("yarn",["add","-D",...new Set(s)],e.dirPath),a.length&&w("poetry",["add",...new Set(a)],e.dirPath))}async function Vt(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(He))for(let n of t)delete e.devDependencies[n];await c.run(()=>S.default.promises.rm("lerna.json",{force:!0}))}function Xt(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${te(e)}}/**/*.{${P.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --color --write "**/{.*/,}*.{${P.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};return e.containingSubPackageJsons&&(t=(0,we.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 --color --write "**/{.*/,}*.{${P.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 Zt(e){let t=N.default.resolve(e,".prettierignore"),n=await S.default.promises.readFile(t,"utf-8"),o=n.indexOf(h.separatorPrefix);return o<0?"":n.substring(0,o).split(`
244
- `).map(s=>{let a=s.trim();return a.endsWith("/")?a.slice(0,-1):a}).filter(s=>s&&!s.startsWith("#")&&!s.includes("/")).map(s=>` "!**/${s}/**"`).join("")}var Pe=l(require("path"));var Qt=`${h.header}
243
+ `,r=re.default.resolve(e.dirPath,".lintstagedrc.cjs");await c.run(()=>he.default.promises.rm(re.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0})),await c.run(()=>he.default.promises.rm(re.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0})),await c.run(()=>y.generateFile(r,i))}function Ke(e){return`./{${ie(e).join(",")}}/**/*.{${v.eslint.join(",")}}`}function Ht(e){return`files = micromatch.not(files, '${Ke(e)}');`}var _=l(require("fs")),I=l(require("path")),ve=l(require("deepmerge"));var Pe=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys"],He=[...Pe,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],Ve=["eslint-plugin-react","eslint-plugin-react-hooks"],Xe={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...Pe],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...Pe,...Ve],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...He],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...He,...Ve],"../../.eslintrc.json":[]};async function Ze(e,t,n){return f.function("generatePackageJson",async()=>{await Vt(e,n)})}async function Vt(e,t){var u,m;let n=I.default.resolve(e.dirPath,"package.json"),i=await _.default.promises.readFile(n,"utf-8"),r=JSON.parse(i);r.scripts=r.scripts||{},r.dependencies=r.dependencies||{},r.devDependencies=r.devDependencies||{},r.peerDependencies=r.peerDependencies||{},await Xt(r),r.name!=="@willbooster/prettier-config"&&(r.prettier="@willbooster/prettier-config");for(let p of Object.keys(r.scripts))r.scripts[p].includes("git clone")||(r.scripts[p]=r.scripts[p].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));r.scripts=(0,ve.default)(r.scripts,Zt(e)),r.scripts.prettify+=await Qt(e.dirPath);let o=[],s=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"],a=[];if(e.root&&(s.push("husky","pinst","@willbooster/renovate-config"),e.depending.semanticRelease&&s.push("conventional-changelog-conventionalcommits"),e.containingSubPackageJsons?r.workspaces=["packages/*"]:delete r.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(s.push("eslint","micromatch"),e.containingTypeScriptInPackages&&s.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&!e.depending.blitz&&s.push("typescript"),e.eslintBase&&s.push(...Xe[e.eslintBase]),e.willBoosterConfigs&&(o=o.filter(p=>!p.includes("@willbooster/")),s=s.filter(p=>!p.includes("@willbooster/"))),r.name||(r.name=I.default.basename(e.dirPath)),e.containingSubPackageJsons&&(r.private=!0),r.license||(r.license="UNLICENSED"),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete r.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(r.resolutions||(r.resolutions={}),r.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete r.scripts.lint,delete r.scripts["lint-fix"],r.scripts.cleanup=r.scripts.cleanup.replace(" && yarn lint-fix","")):r.scripts["lint-fix"]+=ne.getLintFixSuffix(e),e.containingPubspecYaml){r.scripts.lint="flutter analyze",r.scripts["lint-fix"]="yarn lint";let p=["lib","test","test_driver"].filter(d=>_.default.existsSync(I.default.resolve(e.dirPath,d)));p.length>0&&(r.scripts["format-code"]=`flutter format $(find ${p.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,r.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){r.scripts.postinstall==="poetry install"&&delete r.scripts.postinstall;let p=(await _.default.promises.readdir(e.dirPath)).filter(d=>{let N=I.default.resolve(e.dirPath,d);return _.default.lstatSync(N).isDirectory()?_.default.readdirSync(N).some(q=>q.endsWith(".py")):!1});p.length>0&&(r.scripts["format-code"]=`poetry run isort --profile black ${p.join(" ")} && poetry run black ${p.join(" ")}`,r.scripts.lint=`poetry run flake8 ${p.join(" ")}`,r.scripts["lint-fix"]="yarn lint",r.scripts.format+=" && yarn format-code",a.push("black","isort","flake8"))}e.repository&&(r.repository=e.repository)}e.depending.blitz?(s=s.filter(p=>!p.includes("@typescript-eslint/")),s=s.filter(p=>p!=="eslint-plugin-react"&&p!=="eslint-import-resolver-typescript"&&p!=="eslint-plugin-import"&&p!=="eslint-plugin-react-hooks"),(u=r.scripts["gen-code"])!=null&&u.startsWith("blitz codegen")||(r.scripts["gen-code"]="blitz codegen")):e.depending.prisma&&((m=r.scripts["gen-code"])!=null&&m.startsWith("prisma generate")||(r.scripts["gen-code"]="prisma generate")),Object.keys(r.dependencies).length||delete r.dependencies,Object.keys(r.devDependencies).length||delete r.devDependencies,Object.keys(r.peerDependencies).length||delete r.peerDependencies,await _.default.promises.writeFile(n,JSON.stringify(r)),t||(o=o.filter(p=>{var d;return!((d=r.devDependencies)!=null&&d[p])}),o.length&&P("yarn",["add",...new Set(o)],e.dirPath),s=s.filter(p=>{var d;return!((d=r.dependencies)!=null&&d[p])}),s.length&&P("yarn",["add","-D",...new Set(s)],e.dirPath),a.length&&P("poetry",["add",...new Set(a)],e.dirPath))}async function Xt(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(Xe))for(let n of t)delete e.devDependencies[n];await c.run(()=>_.default.promises.rm("lerna.json",{force:!0}))}function Zt(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${ie(e)}}/**/*.{${v.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --color --write "**/{.*/,}*.{${v.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};return e.containingSubPackageJsons&&(t=(0,ve.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 --color --write "**/{.*/,}*.{${v.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 Qt(e){let t=I.default.resolve(e,".prettierignore"),n=await _.default.promises.readFile(t,"utf-8"),i=n.indexOf(w.separatorPrefix);return i<0?"":n.substring(0,i).split(`
244
+ `).map(s=>{let a=s.trim();return a.endsWith("/")?a.slice(0,-1):a}).filter(s=>s&&!s.startsWith("#")&&!s.includes("/")).map(s=>` "!**/${s}/**"`).join("")}var ke=l(require("path"));var en=`${w.header}
245
245
 
246
246
 
247
- ${h.separator}
248
- `,en=`
247
+ ${w.separator}
248
+ `,tn=`
249
249
  3rd-party/
250
250
  android/
251
251
  ios/
@@ -255,13 +255,13 @@ test-fixtures/
255
255
  *.min.js
256
256
  .yarn/
257
257
  .pnp.js
258
- `;async function Xe(e){return f.function("generatePrettierignore",async()=>{let t=Pe.default.resolve(e.dirPath,".prettierignore"),n=await h.getUserContent(t)||Qt,o=Pe.default.resolve(e.dirPath,".gitignore"),r=await h.getExistingContent(o)||"",i="";e.containingPubspecYaml&&(i=`
258
+ `;async function Qe(e){return f.function("generatePrettierignore",async()=>{let t=ke.default.resolve(e.dirPath,".prettierignore"),n=await w.getUserContent(t)||en,i=ke.default.resolve(e.dirPath,".gitignore"),r=await w.getExistingContent(i)||"",o="";e.containingPubspecYaml&&(o=`
259
259
  android/app/
260
260
  ios/Runner/Assets.xcassets/
261
261
  pubspec.yaml
262
- `);let s=n+en+i+r;await c.run(()=>d.generateFile(t,s))})}var ve=l(require("fs")),ke=l(require("path"));var U="[![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)";async function Ze(e){return f.function("generateReadme",async()=>{let t=ke.default.resolve(e.dirPath,"README.md"),n=await ve.default.promises.readFile(t,"utf8");if(ve.default.existsSync(ke.default.resolve(e.dirPath,".releaserc.json"))){if(n.includes(U)){let i=n.indexOf(U);n=n.substring(0,i)+n.substring(i+U.length)}let r=!1;for(let i=0;i<n.length;i++)if(n[i]===`
263
- `){r=!0,n=`${n.slice(0,i+1)}${U}
264
- ${n.slice(i+1)}`;break}r||(n=`${n}
265
- ${U}
266
- `)}await c.run(()=>d.generateFile(t,n))})}var Qe=l(require("fs")),et=l(require("path"));async function tt(e){return f.function("generateReleaserc",async()=>{let t=et.default.resolve(e.dirPath,".releaserc.json");try{let n=JSON.parse(await Qe.default.promises.readFile(t,"utf8")),o=(n==null?void 0:n.plugins)||[];for(let i=0;i<o.length;i++){let s=Array.isArray(o[i])?o[i][0]:o[i];s==="@semantic-release/commit-analyzer"?o[i]=["@semantic-release/commit-analyzer",{preset:"conventionalcommits"}]:s==="@semantic-release/github"&&!e.publicRepo&&(o[i]=["@semantic-release/github",{successComment:!1}])}let r=JSON.stringify(n);await c.run(()=>d.generateFile(t,r))}catch{}})}var re=l(require("fs")),oe=l(require("path")),nt=l(require("deepmerge")),rt=l(require("lodash.clonedeep"));var tn={extends:["@willbooster"]};async function ot(e){return f.function("generateRenovateJson",async()=>{let t=(0,rt.default)(tn),n=oe.default.resolve(e.dirPath,".renovaterc.json");try{let r=await re.default.promises.readFile(n,"utf-8"),i=JSON.parse(r);t=nt.default.all([t,i,t],{arrayMerge:V})}catch{}await c.run(()=>re.default.promises.rm(oe.default.resolve(e.dirPath,".dependabot"),{force:!0})),await c.run(()=>re.default.promises.rm(oe.default.resolve(e.dirPath,"renovate.json"),{force:!0}));let o=JSON.stringify(t);await c.run(()=>d.generateFile(n,o))})}var it=l(require("fs")),G=l(require("path")),st=l(require("deepmerge")),at=l(require("lodash.clonedeep"));function z(e){let t=Object.entries(e).sort(([n],[o])=>n.localeCompare(o));for(let[n,o]of t)delete e[n],e[n]=o;return e}var nn={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","scripts/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","packages/*/scripts/**/*","./node_modules/@types","./@types"]},rn={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","scripts/**/*","../../node_modules/@types","../../@types","./@types"]};async function lt(e,t){return f.function("generateTsconfig",async()=>{var i,s,a;if(t.depending.blitz)return;let n=(0,at.default)(e.root?nn:rn);if(!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete n.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(n.include=n.include.filter(u=>!u.startsWith("packages/*/"))),!e.root&&(e.depending.jestPlaywrightPreset||t.depending.jestPlaywrightPreset)){let u=G.default.relative(e.dirPath,t.dirPath);n.include.push(G.default.join(u,"node_modules/jest-playwright-preset/types"),G.default.join(u,"node_modules/expect-playwright"))}let o=G.default.resolve(e.dirPath,"tsconfig.json");try{let u=await it.default.promises.readFile(o,"utf-8"),m=JSON.parse(u);m.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete m.extends,(i=m.compilerOptions)==null||delete i.typeRoots,(s=n==null?void 0:n.compilerOptions)==null||delete s.target,(a=n==null?void 0:n.compilerOptions)==null||delete a.module,m.jsx&&delete n.jsx,e.depending.blitz&&delete n.include,n=st.default.all([n,m,n],{arrayMerge:V})}catch{}z(n.compilerOptions);let r=JSON.stringify(n);await c.run(()=>d.generateFile(o,r))})}var $=l(require("fs")),F=l(require("path")),mt=l(require("deepmerge")),be=l(require("js-yaml")),ft=l(require("lodash.clonedeep"));var on={name:"Test",on:{pull_request:null,push:{branches:["main","wbfy","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},sn={name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},an={name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},ln={name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},cn={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"}}},pn={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.READY_DISCORD_WEBHOOK_URL }}"}}}},mn={name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}};async function ut(e){return f.function("generateWorkflow",async()=>{var r;let t=F.default.resolve(e.dirPath,".github","workflows");await $.default.promises.mkdir(t,{recursive:!0});let n=F.default.resolve(e.dirPath,".github","semantic.yml");await c.run(()=>$.default.promises.rm(n,{force:!0,recursive:!0}));let o=(await $.default.promises.readdir(t,{withFileTypes:!0})).filter(i=>i.isFile()&&i.name.endsWith(".yml")).map(i=>i.name);e.depending.semanticRelease&&o.push("release.yml"),(e.publicRepo||((r=e.repository)==null?void 0:r.startsWith("github:WillBoosterLab/")))&&o.push("notify-ready.yml"),o.push("test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml");for(let i of o){let s=F.default.basename(i,".yml");await c.run(()=>fn(e,t,s))}})}async function fn(e,t,n){var i,s;let o={};n==="test"?o=on:n==="release"?o=sn:n==="wbfy"?o=an:n==="wbfy-merge"?o=ln:n==="semantic-pr"?o=cn:n==="notify-ready"?o=pn:n==="close-comment"&&(o=mn),o=(0,ft.default)(o);let r=F.default.join(t,`${n}.yml`);try{let a=await $.default.promises.readFile(r,"utf-8"),u=be.default.load(a);o=mt.default.all([o,u,o],{arrayMerge:X})}catch{}for(let a of Object.values(o.jobs)){if(!((s=(i=a.uses)==null?void 0:i.includes)!=null&&s.call(i,"/reusable-workflows/")))return;un(e,a,n)}if(n==="release"?o.on.schedule?delete o.on.push:o.on.push.branches=e.release.branches:n==="wbfy"?ct(o,20,24):n==="wbfy-merge"&&ct(o,0,4),await pt(o,r),n==="release")await $.default.promises.rm(F.default.join(t,"semantic-release.yml"),{force:!0});else if(n==="sync"){if(await $.default.promises.rm(F.default.join(t,"sync-init.yml"),{force:!0}),!o.jobs.sync)return;o.jobs["sync-force"]=o.jobs.sync;let a=o.jobs.sync.with.sync_params_without_dest;if(!a)return;o.jobs.sync.with.sync_params_without_dest=`--force ${a}`,o.name="Force to Sync",o.on={workflow_dispatch:null},delete o.jobs.sync,await pt(o,F.default.join(t,"sync-force.yml"))}}function un(e,t,n){var o,r,i;if(t.with||(t.with={}),t.secrets||(t.secrets={}),(e.release.github&&n==="test"||n==="release"||n==="wbfy"||n==="wbfy-merge")&&(e.publicRepo?t.secrets.GH_TOKEN="${{ secrets.PUBLIC_GH_BOT_PAT }}":t.secrets.GH_TOKEN="${{ secrets.GH_BOT_PAT }}"),e.release.npm&&(n==="release"||n==="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),n==="sync"){let s=(o=t.with)==null?void 0:o.sync_params_without_dest;s&&(t.with.sync_params_without_dest=s.replace("sync ",""))}if((r=e.repository)!=null&&r.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,e.containingDockerfile&&n.startsWith("deploy")&&(t.with.cpu_arch="X64"),n==="release"||n==="test"||n==="wbfy"||n==="wbfy-merge"||n.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length?z(t.with):delete t.with,Object.keys(t.secrets).length){let s=z(t.secrets);delete t.secrets,t.secrets=s}else delete t.secrets}function ct(e,t,n){var u,m;let[o,r]=(((m=(u=e.on.schedule)==null?void 0:u[0])==null?void 0:m.cron)??"").split(" ").map(Number);if(o!==0&&Number.isInteger(r)){let p=(r+9)%24;if(t<n?t<=p&&p<n:t<=p||p<n)return}let i=1+Math.floor(Math.random()*59),s=t+Math.floor(Math.random()*(n-t)),a=`${i} ${(s-9+24)%24} * * *`;e.on.schedule=[{cron:a}]}async function pt(e,t){let n=be.default.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await $.default.promises.writeFile(t,n)}var D=l(require("fs")),I=l(require("path")),xe=l(require("js-yaml"));async function yt(e){return f.function("generateYarnrcYml",async()=>{let t=B("yarn",["--version"],e.dirPath),n=gn("@yarnpkg/cli",e.dirPath);dt(t)<=dt(n)&&t!==n&&w("yarn",["set","version",n],e.dirPath,1);let o=I.default.join(e.dirPath,".yarn","releases");await D.default.promises.mkdir(o,{recursive:!0});for(let m of await D.default.promises.readdir(o))m.startsWith("yarn-")&&!m.startsWith(`yarn-${n}.`)&&(await c.run(()=>D.default.promises.rm(I.default.join(o,m))),console.log("Removed",I.default.join(o,m)));let r=I.default.resolve(e.dirPath,".yarnrc");await c.run(()=>D.default.promises.rm(r,{force:!0}));let i=I.default.resolve(e.dirPath,".yarnrc.yml"),s=xe.default.load(await D.default.promises.readFile(i,"utf8"));s.defaultSemverRangePrefix="",e.requiringNodeModules&&(s.nodeLinker="node-modules",s.nmMode="hardlinks-global"),await D.default.promises.writeFile(i,xe.default.dump(s,{lineWidth:-1}));let a=(s.plugins||[]).map(m=>m.spec),u=e.containingTypeScript||e.containingTypeScriptInPackages;gt(e,a,u,"@yarnpkg/plugin-typescript"),u&&!e.requiringNodeModules&&w("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),gt(e,a,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),w("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)})}function gn(e,t){let n=B("npm",["show",e,"versions","--json"],t),o=JSON.parse(n);return o[o.length-1]}function gt(e,t,n,o){n!==t.includes(o)&&w("yarn",["plugin",n?"import":"remove",o],e.dirPath)}function dt(e){let[t]=e.split(".");return Number(t)}var ht=require("@octokit/core"),wt=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,ie=!!wt,R=new ht.Octokit({auth:wt}),Se=class{getOrgAndName(t){var s;let n=t.split(":").at(-1),o=n==null?void 0:n.split("/"),r=(o==null?void 0:o.at(-2))??"",i=((s=o==null?void 0:o.at(-1))==null?void 0:s.replace(/.git$/,""))??"";return[r,i]}},W=new Se;async function vt(e){return f.function("setupLabels",async()=>{if(!ie)return;let[t,n]=W.getOrgAndName(e.repository??"");if(!(!t||!n)&&!(!e.publicRepo&&t==="WillBooster"))try{await Pt(t,n,"ready","0E8A16"),await Pt(t,n,"review requested","FBCA04")}catch(o){console.warn("Skip setupLabels due to:",(o==null?void 0:o.stack)??o)}})}async function Pt(e,t,n,o){try{await R.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:n,color:o})}catch{await R.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n,color:o})}}var kt=l(require("dotenv")),T=l(require("libsodium-wrappers"));async function bt(e){return f.function("setupSecrets",async()=>{if(!ie)return;let[t,n]=W.getOrgAndName(e.repository??"");if(!t||!n||t!=="WillBoosterLab")return;let o=kt.default.config().parsed||{};if(Object.keys(o).length!==0)try{let r=await R.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:n}),{key:i,key_id:s}=r.data;await T.default.ready;for(let[a,u]of Object.entries(o)){if(e.publicRepo&&a==="GH_BOT_PAT"||!e.publicRepo&&a==="PUBLIC_GH_BOT_PAT")continue;let m=T.default.from_base64(i,T.default.base64_variants.ORIGINAL),p=T.default.from_string(u),g=T.default.crypto_box_seal(p,m),J=T.default.to_base64(g,T.default.base64_variants.ORIGINAL);await R.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:a,encrypted_value:J,key_id:s})}}catch(r){console.warn("Skip setupSecrets due to:",(r==null?void 0:r.stack)??r)}})}var v=l(require("fs")),se=l(require("fs/promises")),y=l(require("path")),j=l(require("glob")),St=l(require("js-yaml")),_t=require("simple-git");async function _e(e){var n;let t=y.default.resolve(e,"package.json");try{let o=v.default.existsSync(t),r={},i={},s={};if(o){let _=v.default.readFileSync(t,"utf-8");s=JSON.parse(_),r=s.dependencies??{},i=s.devDependencies??{}}let a=!0;try{let _=y.default.resolve(e,".yarnrc.yml"),b=St.default.load(await se.default.readFile(_,"utf8"));a=!b.nodeLinker||b.nodeLinker==="node-modules"}catch{}let u=[],m=[];try{let _=y.default.resolve(e,".releaserc.json"),b=JSON.parse(await se.default.readFile(_,"utf8"));u=(b==null?void 0:b.branches)||[],m=((n=b==null?void 0:b.plugins)==null?void 0:n.flat())||[]}catch{}let p=y.default.basename(y.default.resolve(e,".."))!=="packages"||!v.default.existsSync(y.default.resolve(e,"..","..","package.json")),g;p&&(g=await yn(e,s));let J=y.default.resolve(e,".tool-versions"),M;try{M=await se.default.readFile(J,"utf-8")}catch{}let k={dirPath:e,root:p,publicRepo:(g==null?void 0:g.private)===!1,repository:g!=null&&g.full_name?`github:${g==null?void 0:g.full_name}`:void 0,willBoosterConfigs:t.includes(`${y.default.sep}willbooster-configs`),containingSubPackageJsons:j.default.sync("packages/**/package.json",{cwd:e}).length>0,containingDockerfile:v.default.existsSync(y.default.resolve(e,"Dockerfile"))||v.default.existsSync(y.default.resolve(e,"docker-compose.yml")),containingGemfile:v.default.existsSync(y.default.resolve(e,"Gemfile")),containingGoMod:v.default.existsSync(y.default.resolve(e,"go.mod")),containingPackageJson:v.default.existsSync(y.default.resolve(e,"package.json")),containingPoetryLock:v.default.existsSync(y.default.resolve(e,"poetry.lock")),containingPomXml:v.default.existsSync(y.default.resolve(e,"pom.xml")),containingPubspecYaml:v.default.existsSync(y.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:v.default.existsSync(y.default.resolve(e,"template.yaml")),containingJavaScript:j.default.sync("@(app|src|__tests__|scripts)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScript:j.default.sync("@(app|src|__tests__|scripts)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsx:j.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:j.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScriptInPackages:j.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsxInPackages:j.default.sync("packages/**/@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,depending:{blitz:!!(r.blitz||i.blitz),firebase:!!i["firebase-tools"],jestPlaywrightPreset:!!i["jest-playwright-preset"],prisma:!!i.prisma,reactNative:!!r["react-native"],semanticRelease:!!i["semantic-release"],storybook:!!i["@storybook/react"]},release:{branches:u,github:m.includes("@semantic-release/github"),npm:m.includes("@semantic-release/npm")},requiringNodeModules:a,versionsText:M};if(k.eslintBase=dn(k),k.containingGemfile||k.containingGoMod||k.containingPackageJson||k.containingPoetryLock||k.containingPomXml||k.containingPubspecYaml||k.containingTemplateYaml)return k}catch{}return null}function dn(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 yn(e,t){var a,u,m;let r=(await(0,_t.simpleGit)(e).getRemotes(!0)).find(p=>p.name==="origin"),i=((a=r==null?void 0:r.refs)==null?void 0:a.fetch)??((u=r==null?void 0:r.refs)==null?void 0:u.push);if(typeof i=="string"){let p=await xt(i);if(p)return p}let s=((m=t.repository)==null?void 0:m.url)??t.repository;if(typeof s=="string"){let p=await xt(s);if(p&&p.message!=="Not Found")return p}}async function xt(e){let[t,n]=W.getOrgAndName(e);if(!t||!n)return;let o={full_name:`${t}/${n}`};try{let r=await R.request("GET /repos/{owner}/{repo}",{owner:t,repo:n});Object.assign(o,r.data)}catch{}return o}async function hn(){let e=await(0,$t.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;C.isVerbose=e.verbose;for(let t of e._){if(typeof t=="number")continue;let n=await _e(t);if(n===null){console.error(`there is no valid package.json in ${t}`);continue}let o=n.containingSubPackageJsons?Ft.default.sync("packages/*",{cwd:t}).map(a=>Ct.default.resolve(t,a)):[],r=(await Promise.all(o.map(a=>_e(a)))).filter(a=>!!a),i=[n,...r];if(C.isVerbose)for(let a of i)console.info(a);await Re(n),await yt(n),await Promise.all([Oe(n),Le(n),Ge(n),Me(n),ye(n),Ze(n),ot(n),tt(n),ut(n),bt(n),vt(n)]),await c.promiseAll();let s=[];for(let a of i)await ze(a,n),await c.promiseAll(),!(!a.root&&!a.containingPackageJson)&&(await Xe(a),await Ve(a,n,e.skipDeps),s.push(ye(a)),(a.containingTypeScript||a.containingTypeScriptInPackages)&&s.push(lt(a,n)),(a.containingJavaScript||a.containingJavaScriptInPackages||a.containingTypeScript||a.containingTypeScriptInPackages)&&(n.willBoosterConfigs||s.push(We(a,n)),s.push(Ee(a))));await Promise.all(s),await c.promiseAll(),w("yarn",["cleanup"],t),w("yarn",["install"],t)}}hn().then();
262
+ `);let s=n+tn+o+r;await c.run(()=>y.generateFile(t,s))})}var be=l(require("fs")),xe=l(require("path"));var G="[![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)";async function et(e){return f.function("generateReadme",async()=>{let t=xe.default.resolve(e.dirPath,"README.md"),n=await be.default.promises.readFile(t,"utf8");if(be.default.existsSync(xe.default.resolve(e.dirPath,".releaserc.json"))){if(n.includes(G)){let o=n.indexOf(G);n=n.substring(0,o)+n.substring(o+G.length)}let r=!1;for(let o=0;o<n.length;o++)if(n[o]===`
263
+ `){r=!0,n=`${n.slice(0,o+1)}${G}
264
+ ${n.slice(o+1)}`;break}r||(n=`${n}
265
+ ${G}
266
+ `)}await c.run(()=>y.generateFile(t,n))})}var tt=l(require("fs")),nt=l(require("path"));async function it(e){return f.function("generateReleaserc",async()=>{let t=nt.default.resolve(e.dirPath,".releaserc.json");try{let n=JSON.parse(await tt.default.promises.readFile(t,"utf8")),i=(n==null?void 0:n.plugins)||[];for(let o=0;o<i.length;o++){let s=Array.isArray(i[o])?i[o][0]:i[o];s==="@semantic-release/commit-analyzer"?i[o]=["@semantic-release/commit-analyzer",{preset:"conventionalcommits"}]:s==="@semantic-release/github"&&!e.publicRepo&&(i[o]=["@semantic-release/github",{successComment:!1}])}let r=JSON.stringify(n);await c.run(()=>y.generateFile(t,r))}catch{}})}var oe=l(require("fs")),se=l(require("path")),rt=l(require("deepmerge")),ot=l(require("lodash.clonedeep"));var nn={extends:["@willbooster"]};async function st(e){return f.function("generateRenovateJson",async()=>{let t=(0,ot.default)(nn),n=se.default.resolve(e.dirPath,".renovaterc.json");try{let r=await oe.default.promises.readFile(n,"utf-8"),o=JSON.parse(r);t=rt.default.all([t,o,t],{arrayMerge:Z})}catch{}await c.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,".dependabot"),{force:!0})),await c.run(()=>oe.default.promises.rm(se.default.resolve(e.dirPath,"renovate.json"),{force:!0}));let i=JSON.stringify(t);await c.run(()=>y.generateFile(n,i))})}var at=l(require("fs")),Y=l(require("path")),lt=l(require("deepmerge")),ct=l(require("lodash.clonedeep"));function M(e){let t=Object.entries(e).sort(([n],[i])=>n.localeCompare(i));for(let[n,i]of t)delete e[n],e[n]=i;return e}var rn={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","scripts/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","packages/*/scripts/**/*","./node_modules/@types","./@types"]},on={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","scripts/**/*","../../node_modules/@types","../../@types","./@types"]};async function pt(e,t){return f.function("generateTsconfig",async()=>{var o,s,a;if(t.depending.blitz)return;let n=(0,ct.default)(e.root?rn:on);if(!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete n.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(n.include=n.include.filter(u=>!u.startsWith("packages/*/"))),!e.root&&(e.depending.jestPlaywrightPreset||t.depending.jestPlaywrightPreset)){let u=Y.default.relative(e.dirPath,t.dirPath);n.include.push(Y.default.join(u,"node_modules/jest-playwright-preset/types"),Y.default.join(u,"node_modules/expect-playwright"))}let i=Y.default.resolve(e.dirPath,"tsconfig.json");try{let u=await at.default.promises.readFile(i,"utf-8"),m=JSON.parse(u);m.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete m.extends,(o=m.compilerOptions)==null||delete o.typeRoots,(s=n==null?void 0:n.compilerOptions)==null||delete s.target,(a=n==null?void 0:n.compilerOptions)==null||delete a.module,m.jsx&&delete n.jsx,e.depending.blitz&&delete n.include,n=lt.default.all([n,m,n],{arrayMerge:Z})}catch{}M(n.compilerOptions);let r=JSON.stringify(n);await c.run(()=>y.generateFile(i,r))})}var j=l(require("fs")),T=l(require("path")),ut=l(require("deepmerge")),Se=l(require("js-yaml")),gt=l(require("lodash.clonedeep"));var sn={name:"Test",on:{pull_request:null,push:{branches:["main","wbfy","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},an={name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},ln={name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},cn={name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},pn={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"}}},mn={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.READY_DISCORD_WEBHOOK_URL }}"}}}},fn={name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}};async function dt(e){return f.function("generateWorkflow",async()=>{var r;let t=T.default.resolve(e.dirPath,".github","workflows");await j.default.promises.mkdir(t,{recursive:!0});let n=T.default.resolve(e.dirPath,".github","semantic.yml");await c.run(()=>j.default.promises.rm(n,{force:!0,recursive:!0}));let i=(await j.default.promises.readdir(t,{withFileTypes:!0})).filter(o=>o.isFile()&&o.name.endsWith(".yml")).map(o=>o.name);e.depending.semanticRelease&&i.push("release.yml"),(e.publicRepo||((r=e.repository)==null?void 0:r.startsWith("github:WillBoosterLab/")))&&i.push("notify-ready.yml"),i.push("test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml");for(let o of i){let s=T.default.basename(o,".yml");await c.run(()=>un(e,t,s))}})}async function un(e,t,n){var o,s;let i={};n==="test"?i=sn:n==="release"?i=an:n==="wbfy"?i=ln:n==="wbfy-merge"?i=cn:n==="semantic-pr"?i=pn:n==="notify-ready"?i=mn:n==="close-comment"&&(i=fn),i=(0,gt.default)(i);let r=T.default.join(t,`${n}.yml`);try{let a=await j.default.promises.readFile(r,"utf-8"),u=Se.default.load(a);i=ut.default.all([i,u,i],{arrayMerge:Q})}catch{}for(let a of Object.values(i.jobs)){if(!((s=(o=a.uses)==null?void 0:o.includes)!=null&&s.call(o,"/reusable-workflows/")))return;gn(e,a,n)}if(n==="release"?i.on.schedule?delete i.on.push:i.on.push.branches=e.release.branches:n==="wbfy"?mt(i,20,24):n==="wbfy-merge"&&mt(i,0,4),await ft(i,r),n==="release")await j.default.promises.rm(T.default.join(t,"semantic-release.yml"),{force:!0});else if(n==="sync"){if(await j.default.promises.rm(T.default.join(t,"sync-init.yml"),{force:!0}),!i.jobs.sync)return;i.jobs["sync-force"]=i.jobs.sync;let a=i.jobs.sync.with.sync_params_without_dest;if(!a)return;i.jobs.sync.with.sync_params_without_dest=`--force ${a}`,i.name="Force to Sync",i.on={workflow_dispatch:null},delete i.jobs.sync,await ft(i,T.default.join(t,"sync-force.yml"))}}function gn(e,t,n){var i,r,o;if(t.with||(t.with={}),t.secrets||(t.secrets={}),(e.release.github&&n==="test"||n==="release"||n==="wbfy"||n==="wbfy-merge")&&(e.publicRepo?t.secrets.GH_TOKEN="${{ secrets.PUBLIC_GH_BOT_PAT }}":t.secrets.GH_TOKEN="${{ secrets.GH_BOT_PAT }}"),e.release.npm&&(n==="release"||n==="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),n==="sync"){let s=(i=t.with)==null?void 0:i.sync_params_without_dest;s&&(t.with.sync_params_without_dest=s.replace("sync ",""))}if((r=e.repository)!=null&&r.startsWith("github:WillBooster/")?t.uses=t.uses.replace("WillBoosterLab/","WillBooster/"):(o=e.repository)!=null&&o.startsWith("github:WillBoosterLab/")&&(t.uses=t.uses.replace("WillBooster/","WillBoosterLab/")),delete t.with.non_self_hosted,e.containingDockerfile&&n.startsWith("deploy")&&(t.with.cpu_arch="X64"),n==="release"||n==="test"||n==="wbfy"||n==="wbfy-merge"||n.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length?M(t.with):delete t.with,Object.keys(t.secrets).length){let s=M(t.secrets);delete t.secrets,t.secrets=s}else delete t.secrets}function mt(e,t,n){var u,m;let[i,r]=(((m=(u=e.on.schedule)==null?void 0:u[0])==null?void 0:m.cron)??"").split(" ").map(Number);if(i!==0&&Number.isInteger(r)){let p=(r+9)%24;if(t<n?t<=p&&p<n:t<=p||p<n)return}let o=1+Math.floor(Math.random()*59),s=t+Math.floor(Math.random()*(n-t)),a=`${o} ${(s-9+24)%24} * * *`;e.on.schedule=[{cron:a}]}async function ft(e,t){let n=Se.default.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await j.default.promises.writeFile(t,n)}var J=l(require("fs")),W=l(require("path")),Fe=l(require("js-yaml"));async function wt(e){return f.function("generateYarnrcYml",async()=>{let t=L("yarn",["--version"],e.dirPath),n=dn("@yarnpkg/cli",e.dirPath);ht(t)<=ht(n)&&t!==n&&P("yarn",["set","version",n],e.dirPath,1);let i=W.default.join(e.dirPath,".yarn","releases");await J.default.promises.mkdir(i,{recursive:!0});for(let m of await J.default.promises.readdir(i))m.startsWith("yarn-")&&!m.startsWith(`yarn-${n}.`)&&(await c.run(()=>J.default.promises.rm(W.default.join(i,m))),console.log("Removed",W.default.join(i,m)));let r=W.default.resolve(e.dirPath,".yarnrc");await c.run(()=>J.default.promises.rm(r,{force:!0}));let o=W.default.resolve(e.dirPath,".yarnrc.yml"),s=Fe.default.load(await J.default.promises.readFile(o,"utf8"));s.defaultSemverRangePrefix="",e.requiringNodeModules&&(s.nodeLinker="node-modules",s.nmMode="hardlinks-global"),await J.default.promises.writeFile(o,Fe.default.dump(s,{lineWidth:-1}));let a=(s.plugins||[]).map(m=>m.spec),u=e.containingTypeScript||e.containingTypeScriptInPackages;yt(e,a,u,"@yarnpkg/plugin-typescript"),u&&!e.requiringNodeModules&&P("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),yt(e,a,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),P("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)})}function dn(e,t){let n=L("npm",["show",e,"versions","--json"],t),i=JSON.parse(n);return i[i.length-1]}function yt(e,t,n,i){n!==t.includes(i)&&P("yarn",["plugin",n?"import":"remove",i],e.dirPath)}function ht(e){let[t]=e.split(".");return Number(t)}var Pt=require("@octokit/core"),vt=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,ae=!!vt,C=new Pt.Octokit({auth:vt}),_e=class{getOrgAndName(t){var s;let n=t.split(":").at(-1),i=n==null?void 0:n.split("/"),r=(i==null?void 0:i.at(-2))??"",o=((s=i==null?void 0:i.at(-1))==null?void 0:s.replace(/.git$/,""))??"";return[r,o]}},A=new _e;async function kt(e){return f.function("setupLabels",async()=>{if(!ae)return;let[t,n]=A.getOrgAndName(e.repository??"");if(!(!t||!n)&&!(!e.publicRepo&&t==="WillBooster"))try{await g(t,n,"d1: x-easy :hedgehog:","EDE9FE"),await g(t,n,"d2: easy :rabbit2:","DDD6FE"),await g(t,n,"d3: medium :ox:","C4B5FD"),await g(t,n,"d4: hard :squid:","A78BFA"),await g(t,n,"d5: x-hard :whale2:","8B5CF6"),await g(t,n,"p1: critical :fire::fire::fire:","EF4444"),await g(t,n,"p2: urgent :fire::fire:","F87171"),await g(t,n,"p3: important :fire:","FCA5A5"),await g(t,n,"p4: nice to have :droplet:","FECACA"),await g(t,n,"r: blitz","5300bc"),await g(t,n,"r: prisma","0c344b"),await g(t,n,"r: react","61dafb"),await g(t,n,"r: svelte","ff3e00"),await g(t,n,"ready :rocket:","22C55E"),await g(t,n,"review requested :mag:","FBCA04"),await g(t,n,"s: 0.5h :clock1230:","F3F4F6"),await g(t,n,"s: 1h :clock1:","E5E7EB"),await g(t,n,"s: 2h :clock2:","D1D5DB"),await g(t,n,"s: 3h :clock3:","9CA3AF"),await g(t,n,"s: 5h :clock5:","6B7280"),await g(t,n,"s: 8h :clock8:","4B5563"),await g(t,n,"s: 13h :clock1:","374151"),await g(t,n,"t: build :hammer:","BFDBFE"),await g(t,n,"t: chore :broom:","BFDBFE"),await g(t,n,"t: ci :construction_worker:","BFDBFE"),await g(t,n,"t: docs :memo:","BFDBFE"),await g(t,n,"t: feat :sparkles:","BFDBFE"),await g(t,n,"t: fix :bug:","BFDBFE"),await g(t,n,"t: perf :zap:","BFDBFE"),await g(t,n,"t: refactor :recycle:","BFDBFE"),await g(t,n,"t: style :lipstick:","BFDBFE"),await g(t,n,"t: test :test_tube:","BFDBFE"),await b(t,n,"bug"),await b(t,n,"documentation"),await b(t,n,"duplicate"),await b(t,n,"enhancement"),await b(t,n,"good first issue"),await b(t,n,"help wanted"),await b(t,n,"invalid"),await b(t,n,"question"),await b(t,n,"wontfix"),await b(t,n,"ready"),await b(t,n,"review requested")}catch(i){console.warn("Skip setupLabels due to:",(i==null?void 0:i.stack)??i)}})}async function g(e,t,n,i){try{await C.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:n,color:i})}catch{await C.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n,color:i})}}async function b(e,t,n){try{await C.request("DELETE /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n})}catch{}}var bt=l(require("dotenv")),E=l(require("libsodium-wrappers"));async function xt(e){return f.function("setupSecrets",async()=>{if(!ae)return;let[t,n]=A.getOrgAndName(e.repository??"");if(!t||!n||t!=="WillBoosterLab")return;let i=bt.default.config().parsed||{};if(Object.keys(i).length!==0)try{let r=await C.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:n}),{key:o,key_id:s}=r.data;await E.default.ready;for(let[a,u]of Object.entries(i)){if(e.publicRepo&&a==="GH_BOT_PAT"||!e.publicRepo&&a==="PUBLIC_GH_BOT_PAT")continue;let m=E.default.from_base64(o,E.default.base64_variants.ORIGINAL),p=E.default.from_string(u),d=E.default.crypto_box_seal(p,m),N=E.default.to_base64(d,E.default.base64_variants.ORIGINAL);await C.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:a,encrypted_value:N,key_id:s})}}catch(r){console.warn("Skip setupSecrets due to:",(r==null?void 0:r.stack)??r)}})}var k=l(require("fs")),le=l(require("fs/promises")),h=l(require("path")),O=l(require("glob")),Ft=l(require("js-yaml")),_t=require("simple-git");async function Ce(e){var n;let t=h.default.resolve(e,"package.json");try{let i=k.default.existsSync(t),r={},o={},s={};if(i){let $=k.default.readFileSync(t,"utf-8");s=JSON.parse($),r=s.dependencies??{},o=s.devDependencies??{}}let a=!0;try{let $=h.default.resolve(e,".yarnrc.yml"),S=Ft.default.load(await le.default.readFile($,"utf8"));a=!S.nodeLinker||S.nodeLinker==="node-modules"}catch{}let u=[],m=[];try{let $=h.default.resolve(e,".releaserc.json"),S=JSON.parse(await le.default.readFile($,"utf8"));u=(S==null?void 0:S.branches)||[],m=((n=S==null?void 0:S.plugins)==null?void 0:n.flat())||[]}catch{}let p=h.default.basename(h.default.resolve(e,".."))!=="packages"||!k.default.existsSync(h.default.resolve(e,"..","..","package.json")),d;p&&(d=await hn(e,s));let N=h.default.resolve(e,".tool-versions"),q;try{q=await le.default.readFile(N,"utf-8")}catch{}let x={dirPath:e,root:p,publicRepo:(d==null?void 0:d.private)===!1,repository:d!=null&&d.full_name?`github:${d==null?void 0:d.full_name}`:void 0,willBoosterConfigs:t.includes(`${h.default.sep}willbooster-configs`),containingSubPackageJsons:O.default.sync("packages/**/package.json",{cwd:e}).length>0,containingDockerfile:k.default.existsSync(h.default.resolve(e,"Dockerfile"))||k.default.existsSync(h.default.resolve(e,"docker-compose.yml")),containingGemfile:k.default.existsSync(h.default.resolve(e,"Gemfile")),containingGoMod:k.default.existsSync(h.default.resolve(e,"go.mod")),containingPackageJson:k.default.existsSync(h.default.resolve(e,"package.json")),containingPoetryLock:k.default.existsSync(h.default.resolve(e,"poetry.lock")),containingPomXml:k.default.existsSync(h.default.resolve(e,"pom.xml")),containingPubspecYaml:k.default.existsSync(h.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:k.default.existsSync(h.default.resolve(e,"template.yaml")),containingJavaScript:O.default.sync("@(app|src|__tests__|scripts)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScript:O.default.sync("@(app|src|__tests__|scripts)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsx:O.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:O.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScriptInPackages:O.default.sync("packages/**/@(app|src|__tests__|scripts)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsxInPackages:O.default.sync("packages/**/@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,depending:{blitz:!!(r.blitz||o.blitz),firebase:!!o["firebase-tools"],jestPlaywrightPreset:!!o["jest-playwright-preset"],prisma:!!o.prisma,reactNative:!!r["react-native"],semanticRelease:!!o["semantic-release"],storybook:!!o["@storybook/react"]},release:{branches:u,github:m.includes("@semantic-release/github"),npm:m.includes("@semantic-release/npm")},requiringNodeModules:a,versionsText:q};if(x.eslintBase=yn(x),x.containingGemfile||x.containingGoMod||x.containingPackageJson||x.containingPoetryLock||x.containingPomXml||x.containingPubspecYaml||x.containingTemplateYaml)return x}catch{}return null}function yn(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 hn(e,t){var a,u,m;let r=(await(0,_t.simpleGit)(e).getRemotes(!0)).find(p=>p.name==="origin"),o=((a=r==null?void 0:r.refs)==null?void 0:a.fetch)??((u=r==null?void 0:r.refs)==null?void 0:u.push);if(typeof o=="string"){let p=await St(o);if(p)return p}let s=((m=t.repository)==null?void 0:m.url)??t.repository;if(typeof s=="string"){let p=await St(s);if(p&&p.message!=="Not Found")return p}}async function St(e){let[t,n]=A.getOrgAndName(e);if(!t||!n)return;let i={full_name:`${t}/${n}`};try{let r=await C.request("GET /repos/{owner}/{repo}",{owner:t,repo:n});Object.assign(i,r.data)}catch{}return i}async function wn(){let e=await(0,Rt.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;R.isVerbose=e.verbose;for(let t of e._){if(typeof t=="number")continue;let n=await Ce(t);if(n===null){console.error(`there is no valid package.json in ${t}`);continue}let i=n.containingSubPackageJsons?$t.default.sync("packages/*",{cwd:t}).map(a=>Ct.default.resolve(t,a)):[],r=(await Promise.all(i.map(a=>Ce(a)))).filter(a=>!!a),o=[n,...r];if(R.isVerbose)for(let a of o)console.info(a);await je(n),await wt(n),await Promise.all([De(n),Ue(n),Ye(n),qe(n),we(n),et(n),st(n),it(n),dt(n),xt(n),kt(n)]),await c.promiseAll();let s=[];for(let a of o)await Me(a,n),await c.promiseAll(),!(!a.root&&!a.containingPackageJson)&&(await Qe(a),await Ze(a,n,e.skipDeps),s.push(we(a)),(a.containingTypeScript||a.containingTypeScriptInPackages)&&s.push(pt(a,n)),(a.containingJavaScript||a.containingJavaScriptInPackages||a.containingTypeScript||a.containingTypeScriptInPackages)&&(n.willBoosterConfigs||s.push(Ae(a,n)),s.push(Be(a))));await Promise.all(s),await c.promiseAll(),P("yarn",["cleanup"],t),P("yarn",["install"],t)}}wn().then();
267
267
  //# 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/utils/fetchOnNode.ts", "../src/generators/huskyrc.ts", "../src/generators/idea.ts", "../src/generators/lintstagedrc.ts", "../src/utils/eslintUtil.ts", "../src/utils/srcDirectories.ts", "../src/generators/packageJson.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/utils/githubUtil.ts", "../src/github/label.ts", "../src/github/secret.ts", "../src/packageConfig.ts"],
4
- "sourcesContent": ["import path from '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 { 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 === null) {\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 subPackageConfigs = (await Promise.all(subDirPaths.map((subDirPath) => getPackageConfig(subDirPath)))).filter(\n (config) => !!config\n ) 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 setupSecrets(rootConfig),\n setupLabels(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 'fs';\nimport path from '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.1.13', 0, lines);\n updateLine('python 3.9.13', 0, lines);\n }\n if (config.depending.firebase) {\n updateLine('java adoptopenjdk-17.0.2+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 if (lines.length) {\n await promisePool.run(() => fs.promises.writeFile(toolVersionsPath, lines.join('\\n') + '\\n'));\n } else {\n await promisePool.run(() => fs.promises.rm(toolVersionsPath, { force: true }));\n }\n await promisePool.promiseAll();\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 from '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[], any] {\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 '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 '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', 'ts', 'tsx', 'jsx'].sort(),\n prettier: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\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 'fs/promises';\n\nexport const FsUtil = {\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 '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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\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 userContent = (await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await IgnoreFileUtil.getExistingContent(gitignoreFilePath)) || '';\n\n const newContent = userContent + commonContent + gitignoreContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\n\nexport const IgnoreFileUtil = {\n header: '# Project-specific settings',\n separator: '# Generated by @willbooster/willboosterify',\n separatorPrefix: '# Generated by @willbooster',\n async getExistingContent(filePath: string): Promise<string | null> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n return content\n .replace(/# Project-specific settings[^\\n]*\\n/m, '')\n .replace(/# Generated by[^\\n]*\\n/m, '')\n .replace(/\\r?\\n\\r?\\n(\\r?\\n)+/gm, '\\n\\n');\n } catch (_) {\n return null;\n }\n },\n async getUserContent(filePath: string): Promise<string | null> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n const index = content.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return content.substring(0, content.indexOf('\\n', index) + 1);\n }\n } catch (_) {\n // do nothing\n }\n return null;\n },\n async isBerryZeroInstallEnabled(filePath: string): Promise<boolean> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n return content.includes('\\n!.yarn/cache');\n } catch (_) {\n return false;\n }\n },\n};\n", "import fs from 'fs';\nimport path from '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 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, 'utf-8');\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) {\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) {\n newSettings.extends = [...newSettings.extends.filter((e: string) => e !== 'blitz'), 'blitz'];\n }\n } catch (e) {\n // do nothing\n }\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\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.slice();\n\n source.forEach((item, index) => {\n if (typeof 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.indexOf(item) === -1) {\n destination.push(item);\n }\n });\n return destination;\n}\n", "import path from '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\n .concat(extensions.codeWith4IndentSize)\n .concat(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 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { options } from '../options';\nimport { PackageConfig } from '../packageConfig';\nimport { fetchOnNode } from '../utils/fetchOnNode';\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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\n\nconst commonContent = `\n.devcontainer/\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 let userContent = ((await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent) + commonContent;\n\n const names = [...defaultNames];\n if (config.containingGemfile) {\n names.push('ruby');\n }\n if (config.containingGoMod) {\n names.push('go');\n userContent += `${path.basename(config.dirPath)}\n`;\n }\n if (config.containingPackageJson) {\n names.push('node');\n }\n if (config.containingPomXml) {\n names.push('maven');\n userContent += `.idea/google-java-format.xml\n`;\n }\n if (config.containingPubspecYaml) {\n names.push('flutter', 'AndroidStudio', 'ruby');\n userContent += `.flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n`;\n }\n if (config.containingTemplateYaml) {\n userContent += `.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 userContent += `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 userContent += `.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 fetchOnNode(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 = userContent + generated;\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), 'utf-8');\n } catch {\n // do nothing\n }\n}\n", "import type { RequestInfo, RequestInit, Response } from 'node-fetch';\n\nexport async function fetchOnNode(url: RequestInfo, init?: RequestInit | undefined): Promise<Response> {\n const { default: nodeFetch } = await import('node-fetch');\n return nodeFetch(url, init);\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'yarn 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`.trim(),\n postMerge: 'yarn',\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, 'utf-8');\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, 'utf-8');\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 const prePush = config.repository?.startsWith('github:WillBoosterLab/') ? settings.prePushForLab : settings.prePush;\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 // 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('asdf install python');\n }\n if (config.versionsText) {\n postMergeCommands.push('asdf install');\n }\n postMergeCommands.push(settings.postMerge);\n if (config.containingPoetryLock) {\n postMergeCommands.push('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, postMergeCommands.join(' && '));\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'post-merge'), postMergeCommand, {\n mode: 0o755,\n })\n );\n}\n", "import fs from 'fs';\nimport path from '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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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 if (\n 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 ) {\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n } else {\n await promisePool.run(() => fs.promises.rm(filePath, { force: true }));\n }\n }\n });\n}\n", "import fs from 'fs';\nimport path from '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 lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${getEslintKey(config)}': [${JSON.stringify(\n `eslint --fix${EslintUtil.getLintFixSuffix(config)}`\n )}, 'prettier --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 = [\\`prettier --write \\${filteredFiles.join(' ')}\\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('yarn 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 { 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 { PackageConfig } from '../packageConfig';\n\nconst srcDirectories = {\n node: ['src', '__tests__', 'scripts'],\n blitz: ['app', 'db', 'integrations', 'mailers', 'test'],\n};\n\nsrcDirectories.blitz = [...srcDirectories.node, ...srcDirectories.blitz];\n\nexport function getSrcDirs(config: PackageConfig): string[] {\n return config.depending.blitz ? srcDirectories.blitz : srcDirectories.node;\n}\n", "import fs from 'fs';\nimport path from '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 { 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];\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, skipAddingDeps);\n });\n}\n\nasync function core(config: PackageConfig, skipAddingDeps: boolean): Promise<void> {\n const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(filePath, 'utf-8');\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', 'pinst', '@willbooster/renovate-config');\n if (config.depending.semanticRelease) {\n devDependencies.push('conventional-changelog-conventionalcommits');\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) && !config.depending.blitz) {\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\n if (!jsonObj.license) {\n jsonObj.license = 'UNLICENSED';\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 dirNames = (await fs.promises.readdir(config.dirPath)).filter((dirName) => {\n const dirPath = path.resolve(config.dirPath, dirName);\n if (!fs.lstatSync(dirPath).isDirectory()) return false;\n return fs.readdirSync(dirPath).some((fileName) => fileName.endsWith('.py'));\n });\n if (dirNames.length > 0) {\n jsonObj.scripts['format-code'] = `poetry run isort --profile black ${dirNames.join(\n ' '\n )} && poetry run black ${dirNames.join(' ')}`;\n jsonObj.scripts.lint = `poetry run flake8 ${dirNames.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 // 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 if (!jsonObj.scripts['gen-code']?.startsWith('blitz codegen')) {\n jsonObj.scripts['gen-code'] = 'blitz codegen';\n }\n } else if (config.depending.prisma) {\n if (!jsonObj.scripts['gen-code']?.startsWith('prisma generate')) {\n jsonObj.scripts['gen-code'] = 'prisma generate';\n }\n }\n if (!Object.keys(jsonObj.dependencies).length) {\n delete jsonObj.dependencies;\n }\n if (!Object.keys(jsonObj.devDependencies).length) {\n delete jsonObj.devDependencies;\n }\n if (!Object.keys(jsonObj.peerDependencies).length) {\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) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\n devDependencies = devDependencies.filter((dep) => !jsonObj.dependencies?.[dep]);\n if (devDependencies.length) {\n spawnSync('yarn', ['add', '-D', ...new Set(devDependencies)], config.dirPath);\n }\n if (poetryDependencies.length) {\n spawnSync('poetry', ['add', ...new Set(poetryDependencies)], config.dirPath);\n }\n }\n}\n\nasync function removeDeprecatedStuff(jsonObj: any): Promise<void> {\n // TODO: remove the following migration code in future\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\nfunction 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 --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 --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 any)['typecheck/warn'] = `echo 'Please try \"yarn gen-code\" if you face unknown type errors.' && exit 1`;\n (scripts as any)['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, 'utf-8');\n const index = existingContent.indexOf(IgnoreFileUtil.separatorPrefix);\n if (index < 0) return '';\n\n const originalContent = existingContent.substring(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 path from '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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\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 userContent = (await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await IgnoreFileUtil.getExistingContent(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 = userContent + commonContent + additionalContent + gitignoreContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst badgeUrl =\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\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 const useSemanticRelease = fs.existsSync(path.resolve(config.dirPath, '.releaserc.json'));\n if (useSemanticRelease) {\n if (newContent.includes(badgeUrl)) {\n // \u65E2\u306Bbadge\u304C\u3042\u308B\u5834\u5408\u306F\u524A\u9664\n const badgePos = newContent.indexOf(badgeUrl);\n newContent = newContent.substring(0, badgePos) + newContent.substring(badgePos + badgeUrl.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)}${badgeUrl}\\n${newContent.slice(i + 1)}`;\n break;\n }\n }\n if (!inserted) newContent = `${newContent}\\n${badgeUrl}\\n`;\n }\n\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\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 if (plugin === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n {\n preset: 'conventionalcommits',\n },\n ];\n } else if (plugin === '@semantic-release/github' && !rootConfig.publicRepo) {\n plugins[i] = ['@semantic-release/github', { successComment: false }];\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 'fs';\nimport path from '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, 'utf-8');\n const oldSettings = JSON.parse(oldContent) as any;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch (e) {\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 'fs';\nimport path from '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 sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n },\n include: [\n 'src/**/*',\n '__tests__/**/*',\n 'scripts/**/*',\n 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\n 'packages/*/scripts/**/*',\n './node_modules/@types',\n './@types',\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 sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n },\n include: ['src/**/*', '__tests__/**/*', 'scripts/**/*', '../../node_modules/@types', '../../@types', './@types'],\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 if (!config.root && (config.depending.jestPlaywrightPreset || rootConfig.depending.jestPlaywrightPreset)) {\n const relativeDirPath = path.relative(config.dirPath, rootConfig.dirPath);\n newSettings.include.push(\n ...[\n path.join(relativeDirPath, 'node_modules/jest-playwright-preset/types'),\n path.join(relativeDirPath, 'node_modules/expect-playwright'),\n ]\n );\n }\n\n const filePath = path.resolve(config.dirPath, 'tsconfig.json');\n try {\n const existingContent = await fs.promises.readFile(filePath, 'utf-8');\n const oldSettings = JSON.parse(existingContent);\n if (oldSettings.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete oldSettings.extends;\n }\n delete oldSettings.compilerOptions?.typeRoots;\n delete newSettings?.compilerOptions?.target;\n delete newSettings?.compilerOptions?.module;\n if (oldSettings.jsx) {\n delete newSettings.jsx;\n }\n if (config.depending.blitz) {\n delete newSettings.include;\n }\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch (e) {\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>(obj: any): 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[key] = value;\n }\n return obj;\n}\n", "import fs from 'fs';\nimport path from '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 testWorkflow = {\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\nconst releaseWorkflow = {\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\nconst wbfyWorkflow = {\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\nconst wbfyMergeWorkflow = {\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\nconst semanticPullRequestWorkflow = {\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\nconst notifyReadyWorkflow = {\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.READY_DISCORD_WEBHOOK_URL }}',\n },\n },\n },\n};\n\nconst closeCommentWorkflow = {\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\ntype KnownKind = 'test' | 'release' | 'sync' | 'wbfy' | 'wbfy-merge' | 'semantic-pr' | 'notify-ready' | 'close-comment';\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 fileNames = (await fs.promises.readdir(workflowsPath, { withFileTypes: true }))\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('test.yml', 'wbfy.yml', 'wbfy-merge.yml', 'semantic-pr.yml', 'close-comment.yml');\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: any = {};\n if (kind === 'test') {\n newSettings = testWorkflow;\n } else if (kind === 'release') {\n newSettings = releaseWorkflow;\n } else if (kind === 'wbfy') {\n newSettings = wbfyWorkflow;\n } else if (kind === 'wbfy-merge') {\n newSettings = wbfyMergeWorkflow;\n } else if (kind === 'semantic-pr') {\n newSettings = semanticPullRequestWorkflow;\n } else if (kind === 'notify-ready') {\n newSettings = notifyReadyWorkflow;\n } else if (kind === 'close-comment') {\n newSettings = closeCommentWorkflow;\n }\n newSettings = cloneDeep(newSettings);\n\n const filePath = path.join(workflowsPath, `${kind}.yml`);\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf-8');\n const oldSettings = yaml.load(oldContent);\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n } catch (e) {\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 if (kind === 'release') {\n if (newSettings.on.schedule) {\n delete newSettings.on.push;\n } else {\n newSettings.on.push.branches = config.release.branches;\n }\n } else if (kind === 'wbfy') {\n setSchedule(newSettings, 20, 24);\n } else if (kind === 'wbfy-merge') {\n setSchedule(newSettings, 0, 4);\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 if (config.publicRepo) {\n job.secrets['GH_TOKEN'] = '${{ secrets.PUBLIC_GH_BOT_PAT }}';\n } else {\n job.secrets['GH_TOKEN'] = '${{ secrets.GH_BOT_PAT }}';\n }\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\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 delete job.with['non_self_hosted'];\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 if (Object.keys(job.with).length) {\n sortKeys(job.with);\n } else {\n delete job.with;\n }\n\n if (Object.keys(job.secrets).length) {\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 }\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 'fs';\nimport path from 'path';\n\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 }\n await fs.promises.writeFile(yarnrcYmlPath, yaml.dump(settings, { lineWidth: -1 }));\n\n const plugins = (settings.plugins || []).map((p: any) => p.spec as string);\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 { 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 { 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 (!config.publicRepo && owner === 'WillBooster') return;\n\n try {\n await setupLabel(owner, repo, 'ready', '0E8A16');\n await setupLabel(owner, repo, 'review requested', 'FBCA04');\n } catch (e) {\n console.warn('Skip setupLabels due to:', (e as Error)?.stack ?? e);\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 (e) {\n await octokit.request('PATCH /repos/{owner}/{repo}/labels/{name}', {\n owner,\n repo,\n name,\n color,\n });\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\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 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 (e) {\n console.warn('Skip setupSecrets due to:', (e as Error)?.stack ?? e);\n }\n });\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from '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 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: boolean;\n firebase: boolean;\n jestPlaywrightPreset: 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 | null> {\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, 'utf-8');\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 const toolVersionsPath = path.resolve(dirPath, '.tool-versions');\n let versionsText: string | undefined;\n try {\n versionsText = await fsp.readFile(toolVersionsPath, 'utf-8');\n } catch (_) {\n // do nothing\n }\n\n const config: PackageConfig = {\n dirPath,\n root: isRoot,\n publicRepo: repoInfo?.private === false,\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: glob.sync('@(app|src|__tests__|scripts)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScript: glob.sync('@(app|src|__tests__|scripts)/**/*.ts?(x)', { 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)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.ts?(x)', { 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']),\n firebase: !!devDependencies['firebase-tools'],\n jestPlaywrightPreset: !!devDependencies['jest-playwright-preset'],\n prisma: !!devDependencies['prisma'],\n reactNative: !!dependencies['react-native'],\n semanticRelease: !!devDependencies['semantic-release'],\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 (e) {\n // do nothing\n }\n return null;\n}\n\nfunction getEslintExtensionBase(config: PackageConfig): string | undefined {\n if (config.containingTypeScript) {\n if (config.containingJsxOrTsx) {\n return '@willbooster/eslint-config-ts-react';\n } else {\n return '@willbooster/eslint-config-ts';\n }\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 return undefined;\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 (e) {\n // do nothing\n }\n return ret;\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_path", "import_glob", "import_yargs", "import_fs", "import_path", "Options", "options", "Logger", "name", "func", "options", "logger", "import_minimal_promise_pool", "promisePool", "import_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_path", "extensions", "import_promises", "FsUtil", "filePath", "content", "fsp", "newContent", "generateExtensions", "extensions", "generateEditorconfig", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_path", "import_fs", "IgnoreFileUtil", "filePath", "fs", "content", "index", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generateEslintignore", "config", "logger", "filePath", "path", "userContent", "gitignoreFilePath", "gitignoreContent", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_deepmerge", "overwriteMerge", "destinationArray", "sourceArray", "combineMerge", "target", "source", "options", "destination", "item", "index", "merge", "generateEslintrc", "config", "rootConfig", "logger", "bases", "newSettings", "filePath", "path", "oldContent", "fs", "oldSettings", "ext", "newExtends", "merge", "combineMerge", "e", "newContent", "promisePool", "FsUtil", "import_path", "newContent", "extensions", "ext", "generateGitattributes", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_fs", "import_os", "import_path", "fetchOnNode", "url", "init", "nodeFetch", "defaultNames", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generateGitignore", "config", "rootConfig", "logger", "filePath", "path", "userContent", "names", "generated", "name", "content", "readCache", "url", "responseText", "fetchOnNode", "promisePool", "writeCache", "options", "newContent", "FsUtil", "dirPath", "os", "fs", "stat", "import_fs", "import_path", "DEFAULT_COMMAND", "settings", "generateHuskyrc", "config", "logger", "core", "_a", "_b", "packageJsonPath", "path", "jsonText", "fs", "packageJson", "dirPath", "spawnSync", "preCommitFilePath", "content", "promisePool", "prePush", "postMergeCommands", "postMergeCommand", "import_fs", "import_path", "newContent", "generateIdeaSettings", "config", "logger", "dirPath", "path", "fs", "filePath", "promisePool", "FsUtil", "import_fs", "import_path", "EslintUtil", "config", "srcDirectories", "getSrcDirs", "config", "generateLintstagedrc", "config", "logger", "core", "lines", "eslint", "getEslintKey", "EslintUtil", "packagesFilter", "extensions", "getEslintFilterForPrettier", "newContent", "filePath", "path", "promisePool", "fs", "FsUtil", "getSrcDirs", "import_fs", "import_path", "import_deepmerge", "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", "EslintUtil", "dirs", "dir", "dirNames", "dirName", "dirPath", "fileName", "d", "spawnSync", "deps", "promisePool", "scripts", "getSrcDirs", "extensions", "existingContent", "index", "IgnoreFileUtil", "line", "newLine", "l", "import_path", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generatePrettierignore", "config", "logger", "filePath", "path", "userContent", "gitignoreFilePath", "gitignoreContent", "additionalContent", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "badgeUrl", "generateReadme", "config", "logger", "filePath", "path", "newContent", "fs", "badgePos", "inserted", "promisePool", "FsUtil", "import_fs", "import_path", "generateReleaserc", "rootConfig", "logger", "filePath", "path", "settings", "fs", "plugins", "plugin", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_lodash", "jsonObj", "generateRenovateJson", "config", "logger", "newSettings", "cloneDeep", "filePath", "path", "oldContent", "fs", "oldSettings", "merge", "overwriteMerge", "promisePool", "newContent", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_lodash", "sortKeys", "obj", "keyAndValues", "key1", "key2", "key", "value", "rootJsonObj", "subJsonObj", "generateTsconfig", "config", "rootConfig", "logger", "_a", "_b", "_c", "newSettings", "cloneDeep", "dirPath", "relativeDirPath", "path", "filePath", "existingContent", "fs", "oldSettings", "merge", "overwriteMerge", "sortKeys", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_js_yaml", "import_lodash", "testWorkflow", "releaseWorkflow", "wbfyWorkflow", "wbfyMergeWorkflow", "semanticPullRequestWorkflow", "notifyReadyWorkflow", "closeCommentWorkflow", "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", "minJst", "cron", "yamlText", "import_fs", "import_path", "import_js_yaml", "generateYarnrcYml", "config", "logger", "currentVersion", "spawnSyncWithStringResult", "latestVersion", "getLatestVersion", "getMajorNumber", "spawnSync", "releasesPath", "path", "fs", "file", "promisePool", "yarnrcPath", "yarnrcYmlPath", "settings", "yaml", "plugins", "p", "requireTypeScript", "importOrRemovePlugin", "packageName", "dirPath", "versionsJson", "versions", "requirePlugin", "plugin", "version", "major", "import_core", "token", "hasGitHubToken", "octokit", "GitHubUtil", "urlOrFullName", "_a", "urlWithoutProtocol", "names", "org", "name", "gitHubUtil", "setupLabels", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "setupLabel", "e", "name", "color", "octokit", "import_dotenv", "import_libsodium_wrappers", "setupSecrets", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "parsed", "dotenv", "response", "octokit", "key", "keyId", "sodium", "name", "secret", "rawKey", "rawSec", "encBytes", "encBase64", "e", "import_fs", "import_promises", "import_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", "toolVersionsPath", "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", "setupSecrets", "setupLabels", "promisePool", "promises", "generateGitignore", "generatePrettierignore", "generatePackageJson", "generateTsconfig", "generateEslintrc", "generateEslintignore", "spawnSync"]
4
+ "sourcesContent": ["import path from '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 { 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 === null) {\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 subPackageConfigs = (await Promise.all(subDirPaths.map((subDirPath) => getPackageConfig(subDirPath)))).filter(\n (config) => !!config\n ) 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 setupSecrets(rootConfig),\n setupLabels(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 'fs';\nimport path from '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.1.13', 0, lines);\n updateLine('python 3.9.13', 0, lines);\n }\n if (config.depending.firebase) {\n updateLine('java adoptopenjdk-17.0.2+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 if (lines.length) {\n await promisePool.run(() => fs.promises.writeFile(toolVersionsPath, lines.join('\\n') + '\\n'));\n } else {\n await promisePool.run(() => fs.promises.rm(toolVersionsPath, { force: true }));\n }\n await promisePool.promiseAll();\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 from '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[], any] {\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 '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 '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', 'ts', 'tsx', 'jsx'].sort(),\n prettier: [\n 'cjs',\n 'mjs',\n 'js',\n 'jsx',\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 'fs/promises';\n\nexport const FsUtil = {\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 '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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\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 userContent = (await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await IgnoreFileUtil.getExistingContent(gitignoreFilePath)) || '';\n\n const newContent = userContent + commonContent + gitignoreContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\n\nexport const IgnoreFileUtil = {\n header: '# Project-specific settings',\n separator: '# Generated by @willbooster/willboosterify',\n separatorPrefix: '# Generated by @willbooster',\n async getExistingContent(filePath: string): Promise<string | null> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n return content\n .replace(/# Project-specific settings[^\\n]*\\n/m, '')\n .replace(/# Generated by[^\\n]*\\n/m, '')\n .replace(/\\r?\\n\\r?\\n(\\r?\\n)+/gm, '\\n\\n');\n } catch (_) {\n return null;\n }\n },\n async getUserContent(filePath: string): Promise<string | null> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n const index = content.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return content.substring(0, content.indexOf('\\n', index) + 1);\n }\n } catch (_) {\n // do nothing\n }\n return null;\n },\n async isBerryZeroInstallEnabled(filePath: string): Promise<boolean> {\n try {\n const content = await fs.promises.readFile(filePath, 'utf-8');\n return content.includes('\\n!.yarn/cache');\n } catch (_) {\n return false;\n }\n },\n};\n", "import fs from 'fs';\nimport path from '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 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, 'utf-8');\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) {\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) {\n newSettings.extends = [...newSettings.extends.filter((e: string) => e !== 'blitz'), 'blitz'];\n }\n } catch (e) {\n // do nothing\n }\n const newContent = JSON.stringify(newSettings);\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\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.slice();\n\n source.forEach((item, index) => {\n if (typeof 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.indexOf(item) === -1) {\n destination.push(item);\n }\n });\n return destination;\n}\n", "import path from '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\n .concat(extensions.codeWith4IndentSize)\n .concat(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 'fs';\nimport os from 'os';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { options } from '../options';\nimport { PackageConfig } from '../packageConfig';\nimport { fetchOnNode } from '../utils/fetchOnNode';\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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\n\nconst commonContent = `\n.devcontainer/\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 let userContent = ((await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent) + commonContent;\n\n const names = [...defaultNames];\n if (config.containingGemfile) {\n names.push('ruby');\n }\n if (config.containingGoMod) {\n names.push('go');\n userContent += `${path.basename(config.dirPath)}\n`;\n }\n if (config.containingPackageJson) {\n names.push('node');\n }\n if (config.containingPomXml) {\n names.push('maven');\n userContent += `.idea/google-java-format.xml\n`;\n }\n if (config.containingPubspecYaml) {\n names.push('flutter', 'AndroidStudio', 'ruby');\n userContent += `.flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n`;\n }\n if (config.containingTemplateYaml) {\n userContent += `.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 userContent += `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 userContent += `.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 fetchOnNode(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 = userContent + generated;\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), 'utf-8');\n } catch {\n // do nothing\n }\n}\n", "import type { RequestInfo, RequestInit, Response } from 'node-fetch';\n\nexport async function fetchOnNode(url: RequestInfo, init?: RequestInit | undefined): Promise<Response> {\n const { default: nodeFetch } = await import('node-fetch');\n return nodeFetch(url, init);\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { promisePool } from '../utils/promisePool';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'yarn 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`.trim(),\n postMerge: 'yarn',\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, 'utf-8');\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, 'utf-8');\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 const prePush = config.repository?.startsWith('github:WillBoosterLab/') ? settings.prePushForLab : settings.prePush;\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 // 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('asdf install python');\n }\n if (config.versionsText) {\n postMergeCommands.push('asdf install');\n }\n postMergeCommands.push(settings.postMerge);\n if (config.containingPoetryLock) {\n postMergeCommands.push('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, postMergeCommands.join(' && '));\n await promisePool.run(() =>\n fs.promises.writeFile(path.resolve(dirPath, 'post-merge'), postMergeCommand, {\n mode: 0o755,\n })\n );\n}\n", "import fs from 'fs';\nimport path from '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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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=\"prettier --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 if (\n 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 ) {\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n } else {\n await promisePool.run(() => fs.promises.rm(filePath, { force: true }));\n }\n }\n });\n}\n", "import fs from 'fs';\nimport path from '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 lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${getEslintKey(config)}': [${JSON.stringify(\n `eslint --fix${EslintUtil.getLintFixSuffix(config)}`\n )}, 'prettier --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 = [\\`prettier --write \\${filteredFiles.join(' ')}\\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('yarn 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 { 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 { PackageConfig } from '../packageConfig';\n\nconst srcDirectories = {\n node: ['src', '__tests__', 'scripts'],\n blitz: ['app', 'db', 'integrations', 'mailers', 'test'],\n};\n\nsrcDirectories.blitz = [...srcDirectories.node, ...srcDirectories.blitz];\n\nexport function getSrcDirs(config: PackageConfig): string[] {\n return config.depending.blitz ? srcDirectories.blitz : srcDirectories.node;\n}\n", "import fs from 'fs';\nimport path from '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 { 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];\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, skipAddingDeps);\n });\n}\n\nasync function core(config: PackageConfig, skipAddingDeps: boolean): Promise<void> {\n const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fs.promises.readFile(filePath, 'utf-8');\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', 'pinst', '@willbooster/renovate-config');\n if (config.depending.semanticRelease) {\n devDependencies.push('conventional-changelog-conventionalcommits');\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) && !config.depending.blitz) {\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\n if (!jsonObj.license) {\n jsonObj.license = 'UNLICENSED';\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 dirNames = (await fs.promises.readdir(config.dirPath)).filter((dirName) => {\n const dirPath = path.resolve(config.dirPath, dirName);\n if (!fs.lstatSync(dirPath).isDirectory()) return false;\n return fs.readdirSync(dirPath).some((fileName) => fileName.endsWith('.py'));\n });\n if (dirNames.length > 0) {\n jsonObj.scripts['format-code'] = `poetry run isort --profile black ${dirNames.join(\n ' '\n )} && poetry run black ${dirNames.join(' ')}`;\n jsonObj.scripts.lint = `poetry run flake8 ${dirNames.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 // 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 if (!jsonObj.scripts['gen-code']?.startsWith('blitz codegen')) {\n jsonObj.scripts['gen-code'] = 'blitz codegen';\n }\n } else if (config.depending.prisma) {\n if (!jsonObj.scripts['gen-code']?.startsWith('prisma generate')) {\n jsonObj.scripts['gen-code'] = 'prisma generate';\n }\n }\n if (!Object.keys(jsonObj.dependencies).length) {\n delete jsonObj.dependencies;\n }\n if (!Object.keys(jsonObj.devDependencies).length) {\n delete jsonObj.devDependencies;\n }\n if (!Object.keys(jsonObj.peerDependencies).length) {\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) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\n devDependencies = devDependencies.filter((dep) => !jsonObj.dependencies?.[dep]);\n if (devDependencies.length) {\n spawnSync('yarn', ['add', '-D', ...new Set(devDependencies)], config.dirPath);\n }\n if (poetryDependencies.length) {\n spawnSync('poetry', ['add', ...new Set(poetryDependencies)], config.dirPath);\n }\n }\n}\n\nasync function removeDeprecatedStuff(jsonObj: any): Promise<void> {\n // TODO: remove the following migration code in future\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\nfunction 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 --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 --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 any)['typecheck/warn'] = `echo 'Please try \"yarn gen-code\" if you face unknown type errors.' && exit 1`;\n (scripts as any)['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, 'utf-8');\n const index = existingContent.indexOf(IgnoreFileUtil.separatorPrefix);\n if (index < 0) return '';\n\n const originalContent = existingContent.substring(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 path from '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 defaultUserContent = `${IgnoreFileUtil.header}\n\n\n${IgnoreFileUtil.separator}\n`;\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 userContent = (await IgnoreFileUtil.getUserContent(filePath)) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = (await IgnoreFileUtil.getExistingContent(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 = userContent + commonContent + additionalContent + gitignoreContent;\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\nimport { promisePool } from '../utils/promisePool';\n\nconst badgeUrl =\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\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 const useSemanticRelease = fs.existsSync(path.resolve(config.dirPath, '.releaserc.json'));\n if (useSemanticRelease) {\n if (newContent.includes(badgeUrl)) {\n // \u65E2\u306Bbadge\u304C\u3042\u308B\u5834\u5408\u306F\u524A\u9664\n const badgePos = newContent.indexOf(badgeUrl);\n newContent = newContent.substring(0, badgePos) + newContent.substring(badgePos + badgeUrl.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)}${badgeUrl}\\n${newContent.slice(i + 1)}`;\n break;\n }\n }\n if (!inserted) newContent = `${newContent}\\n${badgeUrl}\\n`;\n }\n\n await promisePool.run(() => FsUtil.generateFile(filePath, newContent));\n });\n}\n", "import fs from 'fs';\nimport path from 'path';\n\nimport { logger } from '../logger';\nimport { PackageConfig } from '../packageConfig';\nimport { FsUtil } from '../utils/fsUtil';\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 if (plugin === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n {\n preset: 'conventionalcommits',\n },\n ];\n } else if (plugin === '@semantic-release/github' && !rootConfig.publicRepo) {\n plugins[i] = ['@semantic-release/github', { successComment: false }];\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 'fs';\nimport path from '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, 'utf-8');\n const oldSettings = JSON.parse(oldContent) as any;\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch (e) {\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 'fs';\nimport path from '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 sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n },\n include: [\n 'src/**/*',\n '__tests__/**/*',\n 'scripts/**/*',\n 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\n 'packages/*/scripts/**/*',\n './node_modules/@types',\n './@types',\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 sourceMap: true,\n importHelpers: false,\n outDir: 'dist',\n },\n include: ['src/**/*', '__tests__/**/*', 'scripts/**/*', '../../node_modules/@types', '../../@types', './@types'],\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 if (!config.root && (config.depending.jestPlaywrightPreset || rootConfig.depending.jestPlaywrightPreset)) {\n const relativeDirPath = path.relative(config.dirPath, rootConfig.dirPath);\n newSettings.include.push(\n ...[\n path.join(relativeDirPath, 'node_modules/jest-playwright-preset/types'),\n path.join(relativeDirPath, 'node_modules/expect-playwright'),\n ]\n );\n }\n\n const filePath = path.resolve(config.dirPath, 'tsconfig.json');\n try {\n const existingContent = await fs.promises.readFile(filePath, 'utf-8');\n const oldSettings = JSON.parse(existingContent);\n if (oldSettings.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete oldSettings.extends;\n }\n delete oldSettings.compilerOptions?.typeRoots;\n delete newSettings?.compilerOptions?.target;\n delete newSettings?.compilerOptions?.module;\n if (oldSettings.jsx) {\n delete newSettings.jsx;\n }\n if (config.depending.blitz) {\n delete newSettings.include;\n }\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: overwriteMerge });\n } catch (e) {\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>(obj: any): 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[key] = value;\n }\n return obj;\n}\n", "import fs from 'fs';\nimport path from '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 testWorkflow = {\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\nconst releaseWorkflow = {\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\nconst wbfyWorkflow = {\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\nconst wbfyMergeWorkflow = {\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\nconst semanticPullRequestWorkflow = {\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\nconst notifyReadyWorkflow = {\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.READY_DISCORD_WEBHOOK_URL }}',\n },\n },\n },\n};\n\nconst closeCommentWorkflow = {\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\ntype KnownKind = 'test' | 'release' | 'sync' | 'wbfy' | 'wbfy-merge' | 'semantic-pr' | 'notify-ready' | 'close-comment';\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 fileNames = (await fs.promises.readdir(workflowsPath, { withFileTypes: true }))\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('test.yml', 'wbfy.yml', 'wbfy-merge.yml', 'semantic-pr.yml', 'close-comment.yml');\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: any = {};\n if (kind === 'test') {\n newSettings = testWorkflow;\n } else if (kind === 'release') {\n newSettings = releaseWorkflow;\n } else if (kind === 'wbfy') {\n newSettings = wbfyWorkflow;\n } else if (kind === 'wbfy-merge') {\n newSettings = wbfyMergeWorkflow;\n } else if (kind === 'semantic-pr') {\n newSettings = semanticPullRequestWorkflow;\n } else if (kind === 'notify-ready') {\n newSettings = notifyReadyWorkflow;\n } else if (kind === 'close-comment') {\n newSettings = closeCommentWorkflow;\n }\n newSettings = cloneDeep(newSettings);\n\n const filePath = path.join(workflowsPath, `${kind}.yml`);\n try {\n const oldContent = await fs.promises.readFile(filePath, 'utf-8');\n const oldSettings = yaml.load(oldContent);\n newSettings = merge.all([newSettings, oldSettings, newSettings], { arrayMerge: combineMerge });\n } catch (e) {\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 if (kind === 'release') {\n if (newSettings.on.schedule) {\n delete newSettings.on.push;\n } else {\n newSettings.on.push.branches = config.release.branches;\n }\n } else if (kind === 'wbfy') {\n setSchedule(newSettings, 20, 24);\n } else if (kind === 'wbfy-merge') {\n setSchedule(newSettings, 0, 4);\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 if (config.publicRepo) {\n job.secrets['GH_TOKEN'] = '${{ secrets.PUBLIC_GH_BOT_PAT }}';\n } else {\n job.secrets['GH_TOKEN'] = '${{ secrets.GH_BOT_PAT }}';\n }\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\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 delete job.with['non_self_hosted'];\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 if (Object.keys(job.with).length) {\n sortKeys(job.with);\n } else {\n delete job.with;\n }\n\n if (Object.keys(job.secrets).length) {\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 }\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 'fs';\nimport path from 'path';\n\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 }\n await fs.promises.writeFile(yarnrcYmlPath, yaml.dump(settings, { lineWidth: -1 }));\n\n const plugins = (settings.plugins || []).map((p: any) => p.spec as string);\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 { 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 { 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 (!config.publicRepo && owner === 'WillBooster') 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: prisma', '0c344b');\n await setupLabel(owner, repo, 'r: react', '61dafb');\n await setupLabel(owner, repo, 'r: svelte', 'ff3e00');\n await setupLabel(owner, repo, 'ready :rocket:', '22C55E');\n await setupLabel(owner, repo, 'review requested :mag:', 'FBCA04');\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\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 } catch (e) {\n console.warn('Skip setupLabels due to:', (e as Error)?.stack ?? e);\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 (e) {\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 (e) {\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\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 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 (e) {\n console.warn('Skip setupSecrets due to:', (e as Error)?.stack ?? e);\n }\n });\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from '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 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: boolean;\n firebase: boolean;\n jestPlaywrightPreset: 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 | null> {\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, 'utf-8');\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 const toolVersionsPath = path.resolve(dirPath, '.tool-versions');\n let versionsText: string | undefined;\n try {\n versionsText = await fsp.readFile(toolVersionsPath, 'utf-8');\n } catch (_) {\n // do nothing\n }\n\n const config: PackageConfig = {\n dirPath,\n root: isRoot,\n publicRepo: repoInfo?.private === false,\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: glob.sync('@(app|src|__tests__|scripts)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScript: glob.sync('@(app|src|__tests__|scripts)/**/*.ts?(x)', { 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)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__|scripts)/**/*.ts?(x)', { 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']),\n firebase: !!devDependencies['firebase-tools'],\n jestPlaywrightPreset: !!devDependencies['jest-playwright-preset'],\n prisma: !!devDependencies['prisma'],\n reactNative: !!dependencies['react-native'],\n semanticRelease: !!devDependencies['semantic-release'],\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 (e) {\n // do nothing\n }\n return null;\n}\n\nfunction getEslintExtensionBase(config: PackageConfig): string | undefined {\n if (config.containingTypeScript) {\n if (config.containingJsxOrTsx) {\n return '@willbooster/eslint-config-ts-react';\n } else {\n return '@willbooster/eslint-config-ts';\n }\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 return undefined;\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 (e) {\n // do nothing\n }\n return ret;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["import_path", "import_glob", "import_yargs", "import_fs", "import_path", "Options", "options", "Logger", "name", "func", "options", "logger", "import_minimal_promise_pool", "promisePool", "import_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_path", "extensions", "import_promises", "FsUtil", "filePath", "content", "fsp", "newContent", "generateExtensions", "extensions", "generateEditorconfig", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_path", "import_fs", "IgnoreFileUtil", "filePath", "fs", "content", "index", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generateEslintignore", "config", "logger", "filePath", "path", "userContent", "gitignoreFilePath", "gitignoreContent", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_deepmerge", "overwriteMerge", "destinationArray", "sourceArray", "combineMerge", "target", "source", "options", "destination", "item", "index", "merge", "generateEslintrc", "config", "rootConfig", "logger", "bases", "newSettings", "filePath", "path", "oldContent", "fs", "oldSettings", "ext", "newExtends", "merge", "combineMerge", "e", "newContent", "promisePool", "FsUtil", "import_path", "newContent", "extensions", "ext", "generateGitattributes", "config", "logger", "filePath", "path", "promisePool", "FsUtil", "import_fs", "import_os", "import_path", "fetchOnNode", "url", "init", "nodeFetch", "defaultNames", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generateGitignore", "config", "rootConfig", "logger", "filePath", "path", "userContent", "names", "generated", "name", "content", "readCache", "url", "responseText", "fetchOnNode", "promisePool", "writeCache", "options", "newContent", "FsUtil", "dirPath", "os", "fs", "stat", "import_fs", "import_path", "DEFAULT_COMMAND", "settings", "generateHuskyrc", "config", "logger", "core", "_a", "_b", "packageJsonPath", "path", "jsonText", "fs", "packageJson", "dirPath", "spawnSync", "preCommitFilePath", "content", "promisePool", "prePush", "postMergeCommands", "postMergeCommand", "import_fs", "import_path", "newContent", "generateIdeaSettings", "config", "logger", "dirPath", "path", "fs", "filePath", "promisePool", "FsUtil", "import_fs", "import_path", "EslintUtil", "config", "srcDirectories", "getSrcDirs", "config", "generateLintstagedrc", "config", "logger", "core", "lines", "eslint", "getEslintKey", "EslintUtil", "packagesFilter", "extensions", "getEslintFilterForPrettier", "newContent", "filePath", "path", "promisePool", "fs", "FsUtil", "getSrcDirs", "import_fs", "import_path", "import_deepmerge", "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", "EslintUtil", "dirs", "dir", "dirNames", "dirName", "dirPath", "fileName", "d", "spawnSync", "deps", "promisePool", "scripts", "getSrcDirs", "extensions", "existingContent", "index", "IgnoreFileUtil", "line", "newLine", "l", "import_path", "defaultUserContent", "IgnoreFileUtil", "commonContent", "generatePrettierignore", "config", "logger", "filePath", "path", "userContent", "gitignoreFilePath", "gitignoreContent", "additionalContent", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "badgeUrl", "generateReadme", "config", "logger", "filePath", "path", "newContent", "fs", "badgePos", "inserted", "i", "promisePool", "FsUtil", "import_fs", "import_path", "generateReleaserc", "rootConfig", "logger", "filePath", "path", "settings", "fs", "plugins", "i", "plugin", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_lodash", "jsonObj", "generateRenovateJson", "config", "logger", "newSettings", "cloneDeep", "filePath", "path", "oldContent", "fs", "oldSettings", "merge", "overwriteMerge", "promisePool", "newContent", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_lodash", "sortKeys", "obj", "keyAndValues", "key1", "key2", "key", "value", "rootJsonObj", "subJsonObj", "generateTsconfig", "config", "rootConfig", "logger", "_a", "_b", "_c", "newSettings", "cloneDeep", "dirPath", "relativeDirPath", "path", "filePath", "existingContent", "fs", "oldSettings", "merge", "overwriteMerge", "sortKeys", "newContent", "promisePool", "FsUtil", "import_fs", "import_path", "import_deepmerge", "import_js_yaml", "import_lodash", "testWorkflow", "releaseWorkflow", "wbfyWorkflow", "wbfyMergeWorkflow", "semanticPullRequestWorkflow", "notifyReadyWorkflow", "closeCommentWorkflow", "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", "minJst", "cron", "yamlText", "import_fs", "import_path", "import_js_yaml", "generateYarnrcYml", "config", "logger", "currentVersion", "spawnSyncWithStringResult", "latestVersion", "getLatestVersion", "getMajorNumber", "spawnSync", "releasesPath", "path", "fs", "file", "promisePool", "yarnrcPath", "yarnrcYmlPath", "settings", "yaml", "plugins", "p", "requireTypeScript", "importOrRemovePlugin", "packageName", "dirPath", "versionsJson", "versions", "requirePlugin", "plugin", "version", "major", "import_core", "token", "hasGitHubToken", "octokit", "GitHubUtil", "urlOrFullName", "_a", "urlWithoutProtocol", "names", "org", "name", "gitHubUtil", "setupLabels", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "setupLabel", "deleteLabel", "e", "name", "color", "octokit", "import_dotenv", "import_libsodium_wrappers", "setupSecrets", "config", "logger", "hasGitHubToken", "owner", "repo", "gitHubUtil", "parsed", "dotenv", "response", "octokit", "key", "keyId", "sodium", "name", "secret", "rawKey", "rawSec", "encBytes", "encBase64", "e", "import_fs", "import_promises", "import_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", "toolVersionsPath", "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", "setupSecrets", "setupLabels", "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.45.1",
3
+ "version": "1.46.0",
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",