wbfy 1.3.6 → 1.4.3

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,6 +1,6 @@
1
- var rt=Object.create;var O=Object.defineProperty;var st=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames,ae=Object.getOwnPropertySymbols,lt=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty,ct=Object.prototype.propertyIsEnumerable;var ce=(e,n,t)=>n in e?O(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,F=(e,n)=>{for(var t in n||(n={}))le.call(n,t)&&ce(e,t,n[t]);if(ae)for(var t of ae(n))ct.call(n,t)&&ce(e,t,n[t]);return e};var pt=e=>O(e,"__esModule",{value:!0});var mt=(e,n,t,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of at(n))!le.call(e,r)&&(t||r!=="default")&&O(e,r,{get:()=>n[r],enumerable:!(i=st(n,r))||i.enumerable});return e},s=(e,n)=>mt(pt(O(e!=null?rt(lt(e)):{},"default",!n&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var nt=s(require("path")),it=s(require("glob")),ot=s(require("yargs"));var j=s(require("fs/promises")),U=s(require("path"));async function pe(e){try{let n=U.default.resolve(e.dirPath,".tool-versions"),t=await j.default.readFile(n,"utf-8"),i=[],r=[];for(let o of t.split(`
2
- `)){let l=o.trim();if(!l.startsWith("nodejs")){i.push(l);continue}let[,p]=l.split(/\s+/);r.push(j.default.writeFile(U.default.resolve(e.dirPath,".node-version"),p))}i.length?r.push(j.default.writeFile(n,i.join(`
3
- `))):r.push(j.default.rm(n,{force:!0})),await Promise.all(r)}catch{}}var de=s(require("path"));var d={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 me=s(require("fs/promises")),m={async generateFile(e,n){await me.default.writeFile(e,n),console.log(`Generated ${e}`)}};var dt=`root = true
1
+ var at=Object.create;var D=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var ct=Object.getOwnPropertyNames,ce=Object.getOwnPropertySymbols,pt=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty,mt=Object.prototype.propertyIsEnumerable;var pe=(e,n,t)=>n in e?D(e,n,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[n]=t,$=(e,n)=>{for(var t in n||(n={}))me.call(n,t)&&pe(e,t,n[t]);if(ce)for(var t of ce(n))mt.call(n,t)&&pe(e,t,n[t]);return e};var dt=e=>D(e,"__esModule",{value:!0});var ft=(e,n,t,o)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of ct(n))!me.call(e,r)&&(t||r!=="default")&&D(e,r,{get:()=>n[r],enumerable:!(o=lt(n,r))||o.enumerable});return e},a=(e,n)=>ft(dt(D(e!=null?at(pt(e)):{},"default",!n&&e&&e.__esModule?{get:()=>e.default,enumerable:!0}:{value:e,enumerable:!0})),e);var ot=a(require("path")),rt=a(require("glob")),st=a(require("yargs"));var I=a(require("fs/promises")),A=a(require("path"));async function de(e){if(!e.versionsText)return;let n=[],t=[];for(let r of e.versionsText.split(`
2
+ `)){let i=r.trim();if(!i.startsWith("nodejs")){n.push(i);continue}let[,l]=i.split(/\s+/);t.push(I.default.writeFile(A.default.resolve(e.dirPath,".node-version"),l))}let o=A.default.resolve(e.dirPath,".tool-versions");n.length?t.push(I.default.writeFile(o,n.join(`
3
+ `))):t.push(I.default.rm(o,{force:!0})),await Promise.all(t)}var ue=a(require("path"));var d={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 fe=a(require("fs/promises")),m={async generateFile(e,n){await fe.default.writeFile(e,n),console.log(`Generated ${e}`)}};var ut=`root = true
4
4
 
5
5
  [*]
6
6
  charset = utf-8
@@ -8,33 +8,33 @@ end_of_line = lf
8
8
  insert_final_newline = true
9
9
  trim_trailing_whitespace = true
10
10
 
11
- ${J(d.codeWith2IndentSize)}
11
+ ${N(d.codeWith2IndentSize)}
12
12
  indent_size = 2
13
13
  indent_style = space
14
14
 
15
- ${J(d.codeWith4IndentSize)}
15
+ ${N(d.codeWith4IndentSize)}
16
16
  indent_size = 4
17
17
  indent_style = space
18
18
 
19
- ${J(d.codeWith8IndentSize)}
19
+ ${N(d.codeWith8IndentSize)}
20
20
  indent_size = 8
21
21
  indent_style = space
22
22
 
23
- ${J(d.markdownLike)}
23
+ ${N(d.markdownLike)}
24
24
  max_line_length = off
25
25
  trim_trailing_whitespace = false
26
26
 
27
27
  [{Makefile,*.mk}]
28
28
  indent_style = tab
29
- `;async function fe(e){let n=de.default.resolve(e.dirPath,".editorconfig");await m.generateFile(n,dt)}function J(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var L=s(require("path"));var w=s(require("fs")),f={header:"# Project-specific settings",separator:"# Generated by @willbooster/willboosterify",separatorPrefix:"# Generated by @willbooster",getExistingContent(e){return w.default.existsSync(e)?w.default.readFileSync(e).toString().replace(/# Project-specific settings[^\n]*\n/m,"").replace(/# Generated by[^\n]*\n/m,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
29
+ `;async function ge(e){let n=ue.default.resolve(e.dirPath,".editorconfig");await m.generateFile(n,ut)}function N(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}var H=a(require("path"));var S=a(require("fs")),f={header:"# Project-specific settings",separator:"# Generated by @willbooster/willboosterify",separatorPrefix:"# Generated by @willbooster",getExistingContent(e){return S.default.existsSync(e)?S.default.readFileSync(e).toString().replace(/# Project-specific settings[^\n]*\n/m,"").replace(/# Generated by[^\n]*\n/m,"").replace(/\r?\n\r?\n(\r?\n)+/gm,`
30
30
 
31
- `):null},getUserContent(e){if(w.default.existsSync(e)){let n=w.default.readFileSync(e,"utf-8"),t=n.indexOf(this.separatorPrefix);if(t>=0)return n.substr(0,n.indexOf(`
32
- `,t)+1)}return null},isBerryZeroInstallEnabled(e){return w.default.existsSync(e)?w.default.readFileSync(e,"utf-8").includes(`
33
- !.yarn/cache`):!1}};var ft=`${f.header}
31
+ `):null},getUserContent(e){if(S.default.existsSync(e)){let n=S.default.readFileSync(e,"utf-8"),t=n.indexOf(this.separatorPrefix);if(t>=0)return n.substr(0,n.indexOf(`
32
+ `,t)+1)}return null},isBerryZeroInstallEnabled(e){return S.default.existsSync(e)?S.default.readFileSync(e,"utf-8").includes(`
33
+ !.yarn/cache`):!1}};var gt=`${f.header}
34
34
 
35
35
 
36
36
  ${f.separator}
37
- `,gt=`
37
+ `,yt=`
38
38
  3rd-party/
39
39
  @types/
40
40
  __generated__/
@@ -47,34 +47,33 @@ test-fixtures/
47
47
  *.min.js
48
48
  .yarn/
49
49
  .pnp.js
50
- `;async function ge(e){let n=L.default.resolve(e.dirPath,".eslintignore"),t=f.getUserContent(n)||ft,i=L.default.resolve(e.dirPath,".gitignore"),r=f.getExistingContent(i)||"";await m.generateFile(n,t+gt+r)}var he=s(require("fs")),ve=s(require("fs/promises")),Pe=s(require("path")),ke=s(require("deepmerge"));var ue=s(require("deepmerge"));function E(e,n){return n}function ye(e,n,t){let i=e.slice();return n.forEach((r,o)=>{typeof i[o]=="undefined"?i[o]=t.cloneUnlessOtherwiseSpecified(r,t):t.isMergeableObject(r)?i[o]=(0,ue.default)(e[o],r,t):e.indexOf(r)===-1&&i.push(r)}),i}async function xe(e,n){let t=[];e.eslintBase&&t.push(e.eslintBase),e!==n&&t.push("../../.eslintrc.json");let i={root:!0,extends:t},r=Pe.default.resolve(e.dirPath,".eslintrc.json");if(he.default.existsSync(r)){let o=await ve.default.readFile(r,"utf-8");try{let l=JSON.parse(o);l.extends&&(l.extends=l.extends.filter(a=>!a.startsWith("@willbooster/")&&a!=="../../.eslintrc.json")),t.length||(l.extends=[]);let p=i.extends;i.extends=l.extends,l.extends=p,i=ke.default.all([i,l,i],{arrayMerge:ye}),e.depending.blitz&&(i.extends=[...i.extends.filter(a=>a!=="blitz"),"blitz"])}catch{}}await m.generateFile(r,JSON.stringify(i))}var we=s(require("path"));var ut=`* text=auto
50
+ `;async function ye(e){let n=H.default.resolve(e.dirPath,".eslintignore"),t=f.getUserContent(n)||gt,o=H.default.resolve(e.dirPath,".gitignore"),r=f.getExistingContent(o)||"";await m.generateFile(n,t+yt+r)}var Pe=a(require("fs")),ke=a(require("fs/promises")),xe=a(require("path")),we=a(require("deepmerge"));var he=a(require("deepmerge"));function W(e,n){return n}function ve(e,n,t){let o=e.slice();return n.forEach((r,i)=>{typeof o[i]>"u"?o[i]=t.cloneUnlessOtherwiseSpecified(r,t):t.isMergeableObject(r)?o[i]=(0,he.default)(e[i],r,t):e.indexOf(r)===-1&&o.push(r)}),o}async function be(e,n){let t=[];e.eslintBase&&t.push(e.eslintBase),e!==n&&t.push("../../.eslintrc.json");let o={root:!0,extends:t},r=xe.default.resolve(e.dirPath,".eslintrc.json");if(Pe.default.existsSync(r)){let i=await ke.default.readFile(r,"utf-8");try{let l=JSON.parse(i);l.extends&&(l.extends=l.extends.filter(c=>!c.startsWith("@willbooster/")&&c!=="../../.eslintrc.json")),t.length||(l.extends=[]);let p=o.extends;o.extends=l.extends,l.extends=p,o=we.default.all([o,l,o],{arrayMerge:ve}),e.depending.blitz&&(o.extends=[...o.extends.filter(c=>c!=="blitz"),"blitz"])}catch{}}await m.generateFile(r,JSON.stringify(o))}var Se=a(require("path"));var ht=`* text=auto
51
51
 
52
52
  *.vcproj text eol=crlf
53
53
 
54
54
  ${d.codeWith2IndentSize.concat(d.codeWith4IndentSize).concat(d.markdownLike).map(e=>`*.${e} text eol=lf`).join(`
55
55
  `)}
56
- `;async function be(e){let n=we.default.resolve(e.dirPath,".gitattributes");await m.generateFile(n,ut)}var G=s(require("path"));async function Se(e,n){let{default:t}=await import("node-fetch");return t(e,n)}var yt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],ht=`${f.header}
56
+ `;async function je(e){let n=Se.default.resolve(e.dirPath,".gitattributes");await m.generateFile(n,ht)}var q=a(require("path"));async function Fe(e,n){let{default:t}=await import("node-fetch");return t(e,n)}var vt=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],Pt=`${f.header}
57
57
 
58
58
 
59
59
  ${f.separator}
60
- `,vt=`
60
+ `,kt=`
61
61
  .devcontainer/
62
62
  dist/
63
63
  temp/
64
64
  Icon[\r]
65
- `;async function Fe(e,n){let t=G.default.resolve(e.dirPath,".gitignore"),i=(f.getUserContent(t)||ht)+vt,r=[...yt];e.containingGemfile&&r.push("ruby"),e.containingGoMod&&(r.push("go"),i+=`${G.default.basename(e.dirPath)}
66
- `),e.containingPackageJson&&r.push("node"),e.containingPomXml&&(r.push("maven"),i+=`.idea/google-java-format.xml
67
- `),e.containingPubspecYaml&&(r.push("flutter","AndroidStudio","ruby"),i+=`.flutter-plugins-dependencies
65
+ `;async function Ce(e,n){let t=q.default.resolve(e.dirPath,".gitignore"),o=(f.getUserContent(t)||Pt)+kt,r=[...vt];e.containingGemfile&&r.push("ruby"),e.containingGoMod&&(r.push("go"),o+=`${q.default.basename(e.dirPath)}
66
+ `),e.containingPackageJson&&r.push("node"),e.containingPomXml&&(r.push("maven"),o+=`.idea/google-java-format.xml
67
+ `),e.containingPubspecYaml&&(r.push("flutter","AndroidStudio","ruby"),o+=`.flutter-plugins-dependencies
68
68
  android/key.properties
69
69
  ios/.bundle
70
70
  .idea/runConfigurations.xml
71
- `),e.containingTemplateYaml&&(i+=`.aws-sam/
71
+ `),e.containingTemplateYaml&&(o+=`.aws-sam/
72
72
  packaged.yaml
73
- `),e.containingPoetryLock&&r.push("python"),(n.depending.firebase||e.depending.firebase)&&r.push("firebase"),(n.depending.reactNative||e.depending.reactNative)&&(r.push("reactnative"),i+=`google-services.json
73
+ `),e.containingPoetryLock&&r.push("python"),(n.depending.firebase||e.depending.firebase)&&r.push("firebase"),(n.depending.reactNative||e.depending.reactNative)&&(r.push("reactnative"),o+=`google-services.json
74
74
  android/app/src/main/assets/
75
- `),n.depending.storybook&&r.push("storybookjs");let o=(await Promise.all(r.map(async l=>await(await Se(`https://www.toptal.com/developers/gitignore/api/${l}`)).text()))).join("");f.isBerryZeroInstallEnabled(t)||(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"),(n.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(o=o.replace(/^(.idea\/.+)$/gm,`$1
76
- android/$1`)),await m.generateFile(t,i+o)}var k=s(require("fs/promises")),b=s(require("path"));var Y=s(require("child_process"));function u(e,n,t){let[i,r]=je(e,n,t);console.log(`$ ${i} at ${r.cwd}`),Y.default.spawnSync(i,r)}function A(e,n,t){let[i,r]=je(e,n,t);return r.stdio="pipe",Y.default.spawnSync(i,r).stdout.toString().trim()}function je(e,n,t){let i=F({},process.env);i.PATH&&i.BERRY_BIN_FOLDER&&(i.PATH=i.PATH.replace(`${i.BERRY_BIN_FOLDER}:`,""));let r=`${e} ${n.join(" ")}`;return i.ASDF_DIR&&(r=`bash -l -c '. ${i.ASDF_DIR}/asdf.sh && ${r}'`),[r,{cwd:t,env:i,shell:!0,stdio:"inherit"}]}var H="npm test",q={preCommit:"yarn lint-staged",prePush:"yarn typecheck",postMerge:"yarn"};async function Ce(e){let n=b.default.resolve(e.dirPath,"package.json"),t=await k.default.readFile(n,"utf-8"),i=JSON.parse(t);i.scripts||(i.scripts={}),delete i.scripts.postinstall,delete i.scripts.postpublish,delete i.scripts.prepare,delete i.scripts.prepublishOnly;let r=b.default.resolve(e.dirPath,".husky");await Promise.all([k.default.writeFile(n,JSON.stringify(i,void 0,2)),k.default.rm(r,{force:!0,recursive:!0})]),u("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let o=b.default.resolve(r,"pre-commit"),l=await k.default.readFile(o,"utf-8"),p=[k.default.rm(b.default.resolve(e.dirPath,".huskyrc.json"),{force:!0}),k.default.writeFile(o,l.replace(H,q.preCommit))];(e.containingTypeScript||e.containingTypeScriptInPackages)&&p.push(k.default.writeFile(b.default.resolve(r,"pre-push"),l.replace(H,q.prePush),{mode:493}));let a=l.replace(H,q.postMerge).trim();e.depending.blitz?a+=" && yarn blitz codegen":e.depending.prisma&&(a+=" && yarn prisma generate"),a+=`
77
- `,p.push(k.default.writeFile(b.default.resolve(r,"post-merge"),a,{mode:493})),await Promise.all(p)}var $e=s(require("fs")),_e=s(require("fs/promises")),K=s(require("path"));var Pt=`<?xml version="1.0" encoding="UTF-8"?>
75
+ `),n.depending.storybook&&r.push("storybookjs");let i=(await Promise.all(r.map(async l=>await(await Fe(`https://www.toptal.com/developers/gitignore/api/${l}`)).text()))).join("");f.isBerryZeroInstallEnabled(t)||(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"),(n.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(i=i.replace(/^(.idea\/.+)$/gm,`$1
76
+ android/$1`)),await m.generateFile(t,o+i)}var x=a(require("fs/promises")),j=a(require("path"));var K=a(require("child_process"));function g(e,n,t,o=0){do{let[r,i]=$e(e,n,t);if(console.log(`$ ${r} at ${i.cwd}`),K.default.spawnSync(r,i).status===0)break}while(--o>=0)}function V(e,n,t){let[o,r]=$e(e,n,t);return r.stdio="pipe",K.default.spawnSync(o,r).stdout.toString().trim()}function $e(e,n,t){let o=$({},process.env);o.PATH&&o.BERRY_BIN_FOLDER&&(o.PATH=o.PATH.replace(`${o.BERRY_BIN_FOLDER}:`,""));let r=`${e} ${n.join(" ")}`;return o.ASDF_DIR&&(r=`bash -l -c '. ${o.ASDF_DIR}/asdf.sh && ${r}'`),[r,{cwd:t,env:o,shell:!0,stdio:"inherit"}]}var X="npm test",Z={preCommit:"yarn lint-staged",prePush:"yarn typecheck",postMerge:"yarn"};async function _e(e){var h,b;let n=j.default.resolve(e.dirPath,"package.json"),t=await x.default.readFile(n,"utf-8"),o=JSON.parse(t);o.scripts||(o.scripts={}),delete o.scripts.postinstall,delete o.scripts.postpublish,delete o.scripts.prepare,delete o.scripts.prepublishOnly;let r=j.default.resolve(e.dirPath,".husky");await Promise.all([x.default.writeFile(n,JSON.stringify(o,void 0,2)),x.default.rm(r,{force:!0,recursive:!0})]),g("yarn",["dlx","husky-init","--yarn2"],e.dirPath);let i=j.default.resolve(r,"pre-commit"),l=await x.default.readFile(i,"utf-8"),p=[x.default.rm(j.default.resolve(e.dirPath,".huskyrc.json"),{force:!0}),x.default.writeFile(i,l.replace(X,Z.preCommit))];(e.containingTypeScript||e.containingTypeScriptInPackages)&&p.push(x.default.writeFile(j.default.resolve(r,"pre-push"),l.replace(X,Z.prePush),{mode:493}));let c=[];((h=e.versionsText)==null?void 0:h.includes("python "))&&c.push("asdf install python"),e.versionsText&&c.push("asdf install"),c.push(Z.postMerge),((b=e.versionsText)==null?void 0:b.includes("poetry "))&&c.push("poetry install"),e.depending.blitz?c.push("yarn blitz codegen"):e.depending.prisma&&c.push("yarn prisma generate");let s=l.replace(X,c.join(" && "));p.push(x.default.writeFile(j.default.resolve(r,"post-merge"),s,{mode:493})),await Promise.all(p)}var Te=a(require("fs")),Re=a(require("fs/promises")),Q=a(require("path"));var xt=`<?xml version="1.0" encoding="UTF-8"?>
78
77
  <project version="4">
79
78
  <component name="ProjectTasksOptions">
80
79
  <TaskOptions isEnabled="true">
@@ -199,10 +198,10 @@ android/$1`)),await m.generateFile(t,i+o)}var k=s(require("fs/promises")),b=s(re
199
198
  </TaskOptions>
200
199
  </component>
201
200
  </project>
202
- `;async function Te(e){let n=K.default.resolve(e.dirPath,".idea");if($e.default.existsSync(n)){let t=K.default.resolve(n,"watcherTasks.xml");e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?await m.generateFile(t,Pt):await _e.default.rm(t,{force:!0})}}var X=s(require("fs/promises")),I=s(require("path"));var D={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var Re=`./{src,__tests__}/**/*.{${d.eslint.join(",")}}`,kt=`files = micromatch.not(files, '${Re}');`;async function V(e){let n=[];if(e.containingJavaScript||e.containingTypeScript){let o=`
203
- '${Re}': [${JSON.stringify(`eslint --fix${D.getLintFixSuffix(e)}`)}, 'prettier --write'],`;n.push(o)}let t=e.root?" && !file.includes('/packages/')":"";n.push(`
201
+ `;async function Oe(e){let n=Q.default.resolve(e.dirPath,".idea");if(Te.default.existsSync(n)){let t=Q.default.resolve(n,"watcherTasks.xml");e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?await m.generateFile(t,xt):await Re.default.rm(t,{force:!0})}}var ee=a(require("fs/promises")),B=a(require("path"));var M={getLintFixSuffix(e){return e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""}};var Je=`./{src,__tests__}/**/*.{${d.eslint.join(",")}}`,wt=`files = micromatch.not(files, '${Je}');`;async function te(e){let n=[];if(e.containingJavaScript||e.containingTypeScript){let i=`
202
+ '${Je}': [${JSON.stringify(`eslint --fix${M.getLintFixSuffix(e)}`)}, 'prettier --write'],`;n.push(i)}let t=e.root?" && !file.includes('/packages/')":"";n.push(`
204
203
  './**/*.{${d.prettier.join(",")}}': files => {
205
- ${e.containingJavaScript||e.containingTypeScript?kt:""}
204
+ ${e.containingJavaScript||e.containingTypeScript?wt:""}
206
205
  const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${t});
207
206
  if (filteredFiles.length === 0) return [];
208
207
  const commands = [\`prettier --write \${filteredFiles.join(' ')}\`];
@@ -221,16 +220,16 @@ android/$1`)),await m.generateFile(t,i+o)}var k=s(require("fs/promises")),b=s(re
221
220
  'poetry run isort --profile black --filter-files',
222
221
  'poetry run black',
223
222
  'poetry run flake8'
224
- ],`);let i=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}
223
+ ],`);let o=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}
225
224
 
226
225
  module.exports = {${n.join("")}
227
226
  };
228
- `,r=I.default.resolve(e.dirPath,".lintstagedrc.cjs");await Promise.all([X.default.rm(I.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0}),X.default.rm(I.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0}),m.generateFile(r,i)])}var C=s(require("fs")),$=s(require("fs/promises")),S=s(require("path")),N=s(require("deepmerge"));var Z={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{src,__tests__}/**/*.{${d.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --color --write "**/{.*/,}*.{${d.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"},xt=(0,N.default)(F({},Z),{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 "**/{.*/,}*.{${d.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"yarn workspaces foreach --verbose run test",typecheck:"yarn workspaces foreach --parallel --verbose run typecheck"}),wt=(0,N.default)(F({},Z),{lint:`eslint --color "./**/*.{${d.eslint.join(",")}}"`,typecheck:`tsc --noEmit --Pretty || echo 'Please try "yarn blitz codegen" if you face unknown type errors.'`}),Q=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys"],Oe=[...Q,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],Je=["eslint-plugin-react","eslint-plugin-react-hooks"],Ee={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...Q],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...Q,...Je],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...Oe],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...Oe,...Je],"../../.eslintrc.json":[]};async function De(e,n,t){let i=S.default.resolve(e.dirPath,"package.json"),r=await $.default.readFile(i,"utf-8"),o=JSON.parse(r);o.scripts=o.scripts||{},o.dependencies=o.dependencies||{},o.devDependencies=o.devDependencies||{},o.peerDependencies=o.peerDependencies||{},bt(o),o.name!=="@willbooster/prettier-config"&&(o.prettier="@willbooster/prettier-config");for(let a of Object.keys(o.scripts))o.scripts[a]=o.scripts[a].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,"");o.scripts=(0,N.default)(o.scripts,e.containingSubPackageJsons?xt:e.depending.blitz?wt:Z),o.scripts.prettify+=await St(e.dirPath);let l=[],p=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"];if(e.root&&(p.push("husky","pinst","@willbooster/renovate-config"),e.depending.semanticRelease&&p.push("conventional-changelog-conventionalcommits"),e.containingSubPackageJsons?o.workspaces=["packages/*"]:delete o.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(p.push("eslint","micromatch"),e.containingTypeScriptInPackages&&p.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&p.push("typescript"),e.eslintBase&&p.push(...Ee[e.eslintBase]),e.willBoosterConfigs&&(l=l.filter(a=>!a.includes("@willbooster/")),p=p.filter(a=>!a.includes("@willbooster/"))),o.name||(o.name=S.default.basename(e.dirPath)),e.containingSubPackageJsons&&(o.private=!0),o.license||(o.license="UNLICENSED"),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete o.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(o.resolutions||(o.resolutions={}),o.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete o.scripts.lint,delete o.scripts["lint-fix"],o.scripts.cleanup=o.scripts.cleanup.replace(" && yarn lint-fix","")):o.scripts["lint-fix"]+=D.getLintFixSuffix(e),e.containingPubspecYaml){o.scripts.lint="flutter analyze",o.scripts["lint-fix"]="yarn lint";let a=["lib","test","test_driver"].filter(c=>C.default.existsSync(S.default.resolve(e.dirPath,c)));a.length>0&&(o.scripts["format-code"]=`flutter format $(find ${a.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,o.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){o.scripts.postinstall="poetry install";let a=C.default.readdirSync(e.dirPath).filter(c=>{let R=S.default.resolve(e.dirPath,c);return C.default.lstatSync(R).isDirectory()?C.default.readdirSync(R).some(y=>y.endsWith(".py")):!1});a.length>0&&(o.scripts["format-code"]=`poetry run isort --profile black ${a.join(" ")} && poetry run black ${a.join(" ")}`,o.scripts.lint=`poetry run flake8 ${a.join(" ")}`,o.scripts["lint-fix"]="yarn lint",o.scripts.format+=" && yarn format-code")}}e.depending.blitz&&(p=p.filter(a=>!a.includes("@typescript-eslint/"))),Object.keys(o.dependencies).length||delete o.dependencies,Object.keys(o.devDependencies).length||delete o.devDependencies,Object.keys(o.peerDependencies).length||delete o.peerDependencies,await $.default.writeFile(i,JSON.stringify(o)),t||(l.length&&l.some(a=>{var c;return!((c=o.dependencies)==null?void 0:c[a])})&&u("yarn",["add",...new Set(l)],e.dirPath),p.length&&u("yarn",["add","-D",...new Set(p)],e.dirPath))}function bt(e){e.author==="WillBooster LLC"&&(e.author="WillBooster Inc."),delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],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 n of Object.values(Ee))for(let t of n)delete e.devDependencies[t];$.default.rm("lerna.json",{force:!0}).then()}async function St(e){let n=S.default.resolve(e,".prettierignore"),t=await $.default.readFile(n,"utf-8"),i=t.indexOf(f.separatorPrefix);return i<0?"":t.substring(0,i).split(`
229
- `).map(l=>{let p=l.trim();return p.endsWith("/")?p.slice(0,-1):p}).filter(l=>l&&!l.startsWith("#")&&!l.includes("/")).map(l=>` "!**/${l}/**"`).join("")}var ee=s(require("path"));var Ft=`${f.header}
227
+ `,r=B.default.resolve(e.dirPath,".lintstagedrc.cjs");await Promise.all([ee.default.rm(B.default.resolve(e.dirPath,".lintstagedrc.js"),{force:!0}),ee.default.rm(B.default.resolve(e.dirPath,".lintstagedrc.json"),{force:!0}),m.generateFile(r,o)])}var _=a(require("fs")),T=a(require("fs/promises")),F=a(require("path")),z=a(require("deepmerge"));var ie={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{src,__tests__}/**/*.{${d.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --color --write "**/{.*/,}*.{${d.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"},bt=(0,z.default)($({},ie),{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 "**/{.*/,}*.{${d.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"yarn workspaces foreach --verbose run test",typecheck:"yarn workspaces foreach --parallel --verbose run typecheck"}),St=(0,z.default)($({},ie),{lint:`eslint --color "./**/*.{${d.eslint.join(",")}}"`,typecheck:`tsc --noEmit --Pretty || echo 'Please try "yarn blitz codegen" if you face unknown type errors.'`}),ne=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys"],Ee=[...ne,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],De=["eslint-plugin-react","eslint-plugin-react-hooks"],Ie={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...ne],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...ne,...De],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...Ee],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...Ee,...De],"../../.eslintrc.json":[]};async function Ne(e,n,t){let o=F.default.resolve(e.dirPath,"package.json"),r=await T.default.readFile(o,"utf-8"),i=JSON.parse(r);i.scripts=i.scripts||{},i.dependencies=i.dependencies||{},i.devDependencies=i.devDependencies||{},i.peerDependencies=i.peerDependencies||{},jt(i),i.name!=="@willbooster/prettier-config"&&(i.prettier="@willbooster/prettier-config");for(let s of Object.keys(i.scripts))i.scripts[s].includes("git clone")||(i.scripts[s]=i.scripts[s].replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));i.scripts=(0,z.default)(i.scripts,e.containingSubPackageJsons?bt:e.depending.blitz?St:ie),i.scripts.prettify+=await Ft(e.dirPath);let l=[],p=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"],c=[];if(e.root&&(p.push("husky","pinst","@willbooster/renovate-config"),e.depending.semanticRelease&&p.push("conventional-changelog-conventionalcommits"),e.containingSubPackageJsons?i.workspaces=["packages/*"]:delete i.workspaces),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(p.push("eslint","micromatch"),e.containingTypeScriptInPackages&&p.push("@typescript-eslint/parser")),(e.containingTypeScript||e.containingTypeScriptInPackages)&&p.push("typescript"),e.eslintBase&&p.push(...Ie[e.eslintBase]),e.willBoosterConfigs&&(l=l.filter(s=>!s.includes("@willbooster/")),p=p.filter(s=>!s.includes("@willbooster/"))),i.name||(i.name=F.default.basename(e.dirPath)),e.containingSubPackageJsons&&(i.private=!0),i.license||(i.license="UNLICENSED"),!e.containingTypeScript&&!e.containingTypeScriptInPackages&&delete i.scripts.typecheck,e.depending.semanticRelease&&e.release.npm&&(i.resolutions||(i.resolutions={}),i.resolutions["npm/chalk"]="^4.1.2"),!e.containingSubPackageJsons){if(!e.containingJavaScript&&!e.containingTypeScript?(delete i.scripts.lint,delete i.scripts["lint-fix"],i.scripts.cleanup=i.scripts.cleanup.replace(" && yarn lint-fix","")):i.scripts["lint-fix"]+=M.getLintFixSuffix(e),e.containingPubspecYaml){i.scripts.lint="flutter analyze",i.scripts["lint-fix"]="yarn lint";let s=["lib","test","test_driver"].filter(h=>_.default.existsSync(F.default.resolve(e.dirPath,h)));s.length>0&&(i.scripts["format-code"]=`flutter format $(find ${s.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,i.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){i.scripts.postinstall==="poetry install"&&delete i.scripts.postinstall;let s=_.default.readdirSync(e.dirPath).filter(h=>{let b=F.default.resolve(e.dirPath,h);return _.default.lstatSync(b).isDirectory()?_.default.readdirSync(b).some(E=>E.endsWith(".py")):!1});s.length>0&&(i.scripts["format-code"]=`poetry run isort --profile black ${s.join(" ")} && poetry run black ${s.join(" ")}`,i.scripts.lint=`poetry run flake8 ${s.join(" ")}`,i.scripts["lint-fix"]="yarn lint",i.scripts.format+=" && yarn format-code",c.push("black","isort","flake8"))}}e.depending.blitz&&(p=p.filter(s=>!s.includes("@typescript-eslint/"))),Object.keys(i.dependencies).length||delete i.dependencies,Object.keys(i.devDependencies).length||delete i.devDependencies,Object.keys(i.peerDependencies).length||delete i.peerDependencies,await T.default.writeFile(o,JSON.stringify(i)),t||(l.length&&l.some(s=>{var h;return!((h=i.dependencies)==null?void 0:h[s])})&&g("yarn",["add",...new Set(l)],e.dirPath),p.length&&g("yarn",["add","-D",...new Set(p)],e.dirPath),c.length&&g("poetry",["add",...new Set(c)],e.dirPath))}function jt(e){e.author==="WillBooster LLC"&&(e.author="WillBooster Inc."),delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],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 n of Object.values(Ie))for(let t of n)delete e.devDependencies[t];T.default.rm("lerna.json",{force:!0}).then()}async function Ft(e){let n=F.default.resolve(e,".prettierignore"),t=await T.default.readFile(n,"utf-8"),o=t.indexOf(f.separatorPrefix);return o<0?"":t.substring(0,o).split(`
228
+ `).map(l=>{let p=l.trim();return p.endsWith("/")?p.slice(0,-1):p}).filter(l=>l&&!l.startsWith("#")&&!l.includes("/")).map(l=>` "!**/${l}/**"`).join("")}var oe=a(require("path"));var Ct=`${f.header}
230
229
 
231
230
 
232
231
  ${f.separator}
233
- `,jt=`
232
+ `,$t=`
234
233
  3rd-party/
235
234
  android/
236
235
  ios/
@@ -240,9 +239,9 @@ test-fixtures/
240
239
  *.min.js
241
240
  .yarn/
242
241
  .pnp.js
243
- `;async function Ie(e){let n=ee.default.resolve(e.dirPath,".prettierignore"),t=f.getUserContent(n)||Ft,i=ee.default.resolve(e.dirPath,".gitignore"),r=f.getExistingContent(i)||"",o="";e.containingPubspecYaml&&(o=`
242
+ `;async function We(e){let n=oe.default.resolve(e.dirPath,".prettierignore"),t=f.getUserContent(n)||Ct,o=oe.default.resolve(e.dirPath,".gitignore"),r=f.getExistingContent(o)||"",i="";e.containingPubspecYaml&&(i=`
244
243
  android/app/
245
244
  ios/Runner/Assets.xcassets/
246
245
  pubspec.yaml
247
- `),await m.generateFile(n,t+jt+o+r)}var Ne=s(require("fs")),te=s(require("fs/promises")),We=s(require("path"));async function Be(e){let n=We.default.resolve(e.dirPath,".releaserc.json");if(!Ne.default.existsSync(n))return;let t=JSON.parse(await te.default.readFile(n,"utf8")),i=(t==null?void 0:t.plugins)||[];for(let r=0;r<i.length;r++)(i[r]==="@semantic-release/commit-analyzer"||i[r][0]==="@semantic-release/commit-analyzer")&&(i[r]=["@semantic-release/commit-analyzer",{preset:"conventionalcommits"}]);return te.default.writeFile(n,JSON.stringify(t))}var Me=s(require("fs")),W=s(require("fs/promises")),B=s(require("path")),ze=s(require("deepmerge")),Ue=s(require("lodash.clonedeep"));var Ct={extends:["@willbooster"]};async function Le(e){let n=(0,Ue.default)(Ct),t=B.default.resolve(e.dirPath,".renovaterc.json");if(Me.default.existsSync(t)){let i=await W.default.readFile(t,"utf-8");try{let r=JSON.parse(i);n=ze.default.all([n,r,n],{arrayMerge:E})}catch{}}await Promise.all([W.default.rm(B.default.resolve(e.dirPath,".dependabot"),{force:!0}),W.default.rm(B.default.resolve(e.dirPath,"renovate.json"),{force:!0}),m.generateFile(t,JSON.stringify(n))])}var Ge=s(require("fs")),Ye=s(require("fs/promises")),_=s(require("path")),Ae=s(require("deepmerge")),He=s(require("lodash.clonedeep"));var $t={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","./node_modules/@types","./@types"]},_t={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","../../node_modules/@types","../../@types","./@types"]};async function qe(e,n){var o,l,p;if(n.depending.blitz)return;let t=(0,He.default)(e.root?$t:_t);if(!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete t.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(t.include=t.include.filter(a=>!a.startsWith("packages/*/"))),!e.root&&(e.depending.jestPlaywrightPreset||n.depending.jestPlaywrightPreset)){let a=_.default.relative(e.dirPath,n.dirPath);t.include.push(_.default.join(a,"node_modules/jest-playwright-preset/types"),_.default.join(a,"node_modules/expect-playwright"))}let i=_.default.resolve(e.dirPath,"tsconfig.json");if(Ge.default.existsSync(i)){let a=await Ye.default.readFile(i,"utf-8");try{let c=JSON.parse(a);c.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete c.extends,(o=c.compilerOptions)==null||delete o.typeRoots,(l=t==null?void 0:t.compilerOptions)==null||delete l.target,(p=t==null?void 0:t.compilerOptions)==null||delete p.module,c.jsx&&delete t.jsx,e.depending.blitz||delete t.include,t=Ae.default.all([t,c,t],{arrayMerge:E})}catch{}}let r={};for(let a of Object.keys(t.compilerOptions).sort())r[a]=t.compilerOptions[a];t.compilerOptions=r,await m.generateFile(i,JSON.stringify(t))}var Ke=s(require("fs")),M=s(require("fs/promises")),T=s(require("path")),Xe=s(require("js-yaml")),Ve=s(require("lodash.clonedeep")),Tt={name:"Test",on:{pull_request:{branches:["main","!renovate/**"]},push:{branches:["main","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},Rt={name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},Ot={name:"Willboosterify",on:{schedule:[{cron:"0 5 * * 0"}],workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}};function ne(e,n){let t=(0,Ve.default)(n==="test"?Tt:n==="release"?Rt:Ot);n==="release"&&(t.on.push.branches=e.release.branches);let i=t.jobs.test||t.jobs.release||t.jobs.wbfy;return e.private||(i.with||(i.with={}),i.with.non_self_hosted=!0),(e.release.github||n==="wbfy")&&(i.secrets||(i.secrets={}),e.private?i.secrets.GH_TOKEN="${{ secrets.GH_BOT_PAT }}":i.secrets.GH_TOKEN="${{ secrets.PUBLIC_GH_BOT_PAT }}"),e.release.npm&&n!=="wbfy"&&(i.secrets||(i.secrets={}),i.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),Xe.default.dump(t,{styles:{"!!null":"empty"},noCompatMode:!0})}async function Ze(e){let n=T.default.resolve(e.dirPath,".github","workflows");Ke.default.mkdirSync(n,{recursive:!0});let t=[];if(e.depending.semanticRelease){let i=ne(e,"release");t.push(M.default.writeFile(T.default.join(n,"release.yml"),i))}{let i=ne(e,"test");t.push(M.default.writeFile(T.default.join(n,"test.yml"),i))}{let i=ne(e,"wbfy");t.push(M.default.writeFile(T.default.join(n,"wbfy.yml"),i))}await Promise.all(t)}var z=s(require("fs/promises")),ie=s(require("path")),oe=s(require("js-yaml"));async function Qe(e){let n=A("yarn",["--version"],e.dirPath),t=A("npm",["show","@yarnpkg/cli","version"],e.dirPath);n!==t&&u("yarn",["set","version",t],e.dirPath);let i=ie.default.resolve(e.dirPath,".yarnrc");z.default.rm(i,{force:!0}).then();let r=ie.default.resolve(e.dirPath,".yarnrc.yml"),o=oe.default.load(await z.default.readFile(r,"utf8"));o.defaultSemverRangePrefix="",e.requiringNodeModules&&(o.nodeLinker="node-modules",o.nmMode="hardlinks-global"),await z.default.writeFile(r,oe.default.dump(o));let l=(o.plugins||[]).map(a=>a.spec),p=e.containingTypeScript||e.containingTypeScriptInPackages;et(e,l,p,"@yarnpkg/plugin-typescript"),p&&!e.requiringNodeModules&&u("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),et(e,l,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),u("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)}function et(e,n,t,i){t!==n.includes(i)&&u("yarn",["plugin",t?"import":"remove",i],e.dirPath)}var h=s(require("fs")),re=s(require("fs/promises")),g=s(require("path")),x=s(require("glob")),tt=s(require("js-yaml"));async function se(e){var t;let n=g.default.resolve(e,"package.json");try{let i=h.default.existsSync(n),r={},o={},l={};if(i){let P=h.default.readFileSync(n,"utf-8");l=JSON.parse(P),r=l.dependencies??{},o=l.devDependencies??{}}let p=!0;try{let P=g.default.resolve(e,".yarnrc.yml"),v=tt.default.load(await re.default.readFile(P,"utf8"));p=!v.nodeLinker||v.nodeLinker==="node-modules"}catch{}let a=[],c=[];try{let P=g.default.resolve(e,".releaserc.json"),v=JSON.parse(await re.default.readFile(P,"utf8"));a=(v==null?void 0:v.branches)||[],c=((t=v==null?void 0:v.plugins)==null?void 0:t.flat())||[]}catch{}let R=l.private&&x.default.sync("packages/**/package.json",{cwd:e}).map(P=>{let v=h.default.readFileSync(g.default.join(e,P),"utf-8");return JSON.parse(v).private}),y={dirPath:e,root:g.default.basename(g.default.resolve(e,".."))!=="packages"||!h.default.existsSync(g.default.resolve(e,"..","..","package.json")),private:!!R,willBoosterConfigs:n.includes(`${g.default.sep}willbooster-configs`),containingSubPackageJsons:x.default.sync("packages/**/package.json",{cwd:e}).length>0,containingGemfile:h.default.existsSync(g.default.resolve(e,"Gemfile")),containingGoMod:h.default.existsSync(g.default.resolve(e,"go.mod")),containingPackageJson:h.default.existsSync(g.default.resolve(e,"package.json")),containingPoetryLock:h.default.existsSync(g.default.resolve(e,"poetry.lock")),containingPomXml:h.default.existsSync(g.default.resolve(e,"pom.xml")),containingPubspecYaml:h.default.existsSync(g.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:h.default.existsSync(g.default.resolve(e,"template.yaml")),containingJavaScript:x.default.sync("@(app|src|__tests__)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScript:x.default.sync("@(app|src|__tests__)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsx:x.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:x.default.sync("packages/**/@(app|src|__tests__)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScriptInPackages:x.default.sync("packages/**/@(app|src|__tests__)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsxInPackages:x.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:a,github:c.includes("@semantic-release/github"),npm:c.includes("@semantic-release/npm")},requiringNodeModules:p};if(y.eslintBase=Jt(y),y.containingGemfile||y.containingGoMod||y.containingPackageJson||y.containingPoetryLock||y.containingPomXml||y.containingPubspecYaml||y.containingTemplateYaml)return y}catch{}return null}function Jt(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 Et(){let e=await(0,ot.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;for(let n of e._){if(typeof n=="number")continue;let t=await se(n);if(t===null){console.error(`there is no valid package.json in ${n}`);continue}let i=t.containingSubPackageJsons?it.default.sync("packages/*",{cwd:n}).map(c=>nt.default.resolve(n,c)):[],r=(await Promise.all(i.map(c=>se(c)))).filter(c=>!!c),o=[t,...r],l=[t,...r.filter(c=>c.containingPackageJson)];if(e.verbose)for(let c of o)console.log(c);let p=o.map(c=>Fe(c,t));await Qe(t),p.push(fe(t),be(t),Ce(t),Te(t),V(t),Le(t),Be(t),pe(t),Ze(t)),await Promise.all(p);let a=[];for(let c of l)a.push(Ie(c),V(c)),(c.containingTypeScript||c.containingTypeScriptInPackages)&&a.push(qe(c,t)),(c.containingJavaScript||c.containingJavaScriptInPackages||c.containingTypeScript||c.containingTypeScriptInPackages)&&(t.willBoosterConfigs||a.push(xe(c,t)),a.push(ge(c)));await Promise.all(a);for(let c of l)await De(c,t,e.skipDeps);u("yarn",["cleanup"],n),u("yarn",["install"],n)}}Et().then();
246
+ `),await m.generateFile(n,t+$t+i+r)}var Me=a(require("fs")),re=a(require("fs/promises")),Be=a(require("path"));async function ze(e){let n=Be.default.resolve(e.dirPath,".releaserc.json");if(!Me.default.existsSync(n))return;let t=JSON.parse(await re.default.readFile(n,"utf8")),o=(t==null?void 0:t.plugins)||[];for(let r=0;r<o.length;r++)(o[r]==="@semantic-release/commit-analyzer"||o[r][0]==="@semantic-release/commit-analyzer")&&(o[r]=["@semantic-release/commit-analyzer",{preset:"conventionalcommits"}]);return re.default.writeFile(n,JSON.stringify(t))}var Ue=a(require("fs")),U=a(require("fs/promises")),L=a(require("path")),Le=a(require("deepmerge")),Ge=a(require("lodash.clonedeep"));var _t={extends:["@willbooster"]};async function Ye(e){let n=(0,Ge.default)(_t),t=L.default.resolve(e.dirPath,".renovaterc.json");if(Ue.default.existsSync(t)){let o=await U.default.readFile(t,"utf-8");try{let r=JSON.parse(o);n=Le.default.all([n,r,n],{arrayMerge:W})}catch{}}await Promise.all([U.default.rm(L.default.resolve(e.dirPath,".dependabot"),{force:!0}),U.default.rm(L.default.resolve(e.dirPath,"renovate.json"),{force:!0}),m.generateFile(t,JSON.stringify(n))])}var Ae=a(require("fs")),He=a(require("fs/promises")),R=a(require("path")),qe=a(require("deepmerge")),Ke=a(require("lodash.clonedeep"));var Tt={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","packages/*/src/**/*","packages/*/__tests__/**/*","./node_modules/@types","./@types"]},Rt={compilerOptions:{target:"esnext",module:"esnext",moduleResolution:"node",jsx:"react",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,sourceMap:!0,importHelpers:!1,outDir:"dist"},include:["src/**/*","__tests__/**/*","../../node_modules/@types","../../@types","./@types"]};async function Ve(e,n){var i,l,p;if(n.depending.blitz)return;let t=(0,Ke.default)(e.root?Tt:Rt);if(!e.containingJsxOrTsx&&!e.containingJsxOrTsxInPackages&&delete t.compilerOptions.jsx,e.root&&!e.containingSubPackageJsons&&(t.include=t.include.filter(c=>!c.startsWith("packages/*/"))),!e.root&&(e.depending.jestPlaywrightPreset||n.depending.jestPlaywrightPreset)){let c=R.default.relative(e.dirPath,n.dirPath);t.include.push(R.default.join(c,"node_modules/jest-playwright-preset/types"),R.default.join(c,"node_modules/expect-playwright"))}let o=R.default.resolve(e.dirPath,"tsconfig.json");if(Ae.default.existsSync(o)){let c=await He.default.readFile(o,"utf-8");try{let s=JSON.parse(c);s.extends==="./node_modules/@willbooster/tsconfig/tsconfig.json"&&delete s.extends,(i=s.compilerOptions)==null||delete i.typeRoots,(l=t==null?void 0:t.compilerOptions)==null||delete l.target,(p=t==null?void 0:t.compilerOptions)==null||delete p.module,s.jsx&&delete t.jsx,e.depending.blitz||delete t.include,t=qe.default.all([t,s,t],{arrayMerge:W})}catch{}}let r={};for(let c of Object.keys(t.compilerOptions).sort())r[c]=t.compilerOptions[c];t.compilerOptions=r,await m.generateFile(o,JSON.stringify(t))}var Xe=a(require("fs")),G=a(require("fs/promises")),O=a(require("path")),Ze=a(require("js-yaml")),Qe=a(require("lodash.clonedeep")),Ot={name:"Test",on:{pull_request:{branches:["main","!renovate/**"]},push:{branches:["main","renovate/**"]}},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},Jt={name:"Release",on:{push:{branches:[]}},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},Et={name:"Willboosterify",on:{schedule:[{cron:"0 5 * * 0"}],workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}};function se(e,n){let t=(0,Qe.default)(n==="test"?Ot:n==="release"?Jt:Et);n==="release"&&(t.on.push.branches=e.release.branches);let o=t.jobs.test||t.jobs.release||t.jobs.wbfy;return e.private||(o.with||(o.with={}),o.with.non_self_hosted=!0),(e.release.github||n==="wbfy")&&(o.secrets||(o.secrets={}),e.private?o.secrets.GH_TOKEN="${{ secrets.GH_BOT_PAT }}":o.secrets.GH_TOKEN="${{ secrets.PUBLIC_GH_BOT_PAT }}"),e.release.npm&&n!=="wbfy"&&(o.secrets||(o.secrets={}),o.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),Ze.default.dump(t,{styles:{"!!null":"empty"},noCompatMode:!0})}async function et(e){let n=O.default.resolve(e.dirPath,".github","workflows");Xe.default.mkdirSync(n,{recursive:!0});let t=[];if(e.depending.semanticRelease){let o=se(e,"release");t.push(G.default.writeFile(O.default.join(n,"release.yml"),o))}{let o=se(e,"test");t.push(G.default.writeFile(O.default.join(n,"test.yml"),o))}{let o=se(e,"wbfy");t.push(G.default.writeFile(O.default.join(n,"wbfy.yml"),o))}await Promise.all(t)}var C=a(require("fs/promises")),J=a(require("path")),ae=a(require("js-yaml"));async function nt(e){let n=V("yarn",["--version"],e.dirPath),t=V("npm",["show","@yarnpkg/cli","version"],e.dirPath);n!==t&&g("yarn",["set","version",t],e.dirPath,1);let o=J.default.join(e.dirPath,".yarn","releases");try{for(let s of await C.default.readdir(o))s.startsWith("yarn-")&&!s.startsWith(`yarn-${t}`)&&C.default.rm(J.default.join(o,s)).then()}catch{}let r=J.default.resolve(e.dirPath,".yarnrc");C.default.rm(r,{force:!0}).then();let i=J.default.resolve(e.dirPath,".yarnrc.yml"),l=ae.default.load(await C.default.readFile(i,"utf8"));l.defaultSemverRangePrefix="",e.requiringNodeModules&&(l.nodeLinker="node-modules",l.nmMode="hardlinks-global"),await C.default.writeFile(i,ae.default.dump(l));let p=(l.plugins||[]).map(s=>s.spec),c=e.containingTypeScript||e.containingTypeScriptInPackages;tt(e,p,c,"@yarnpkg/plugin-typescript"),c&&!e.requiringNodeModules&&g("yarn",["dlx","@yarnpkg/sdks","vscode"],e.dirPath),tt(e,p,e.containingSubPackageJsons,"@yarnpkg/plugin-workspace-tools"),g("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)}function tt(e,n,t,o){t!==n.includes(o)&&g("yarn",["plugin",t?"import":"remove",o],e.dirPath)}var y=a(require("fs")),Y=a(require("fs/promises")),u=a(require("path")),w=a(require("glob")),it=a(require("js-yaml"));async function le(e){var t;let n=u.default.resolve(e,"package.json");try{let o=y.default.existsSync(n),r={},i={},l={};if(o){let k=y.default.readFileSync(n,"utf-8");l=JSON.parse(k),r=l.dependencies??{},i=l.devDependencies??{}}let p=!0;try{let k=u.default.resolve(e,".yarnrc.yml"),v=it.default.load(await Y.default.readFile(k,"utf8"));p=!v.nodeLinker||v.nodeLinker==="node-modules"}catch{}let c=[],s=[];try{let k=u.default.resolve(e,".releaserc.json"),v=JSON.parse(await Y.default.readFile(k,"utf8"));c=(v==null?void 0:v.branches)||[],s=((t=v==null?void 0:v.plugins)==null?void 0:t.flat())||[]}catch{}let h=l.private&&w.default.sync("packages/**/package.json",{cwd:e}).map(k=>{let v=y.default.readFileSync(u.default.join(e,k),"utf-8");return JSON.parse(v).private}),b=u.default.resolve(e,".tool-versions"),E;try{E=await Y.default.readFile(b,"utf-8")}catch{}let P={dirPath:e,root:u.default.basename(u.default.resolve(e,".."))!=="packages"||!y.default.existsSync(u.default.resolve(e,"..","..","package.json")),private:!!h,willBoosterConfigs:n.includes(`${u.default.sep}willbooster-configs`),containingSubPackageJsons:w.default.sync("packages/**/package.json",{cwd:e}).length>0,containingGemfile:y.default.existsSync(u.default.resolve(e,"Gemfile")),containingGoMod:y.default.existsSync(u.default.resolve(e,"go.mod")),containingPackageJson:y.default.existsSync(u.default.resolve(e,"package.json")),containingPoetryLock:y.default.existsSync(u.default.resolve(e,"poetry.lock")),containingPomXml:y.default.existsSync(u.default.resolve(e,"pom.xml")),containingPubspecYaml:y.default.existsSync(u.default.resolve(e,"pubspec.yaml")),containingTemplateYaml:y.default.existsSync(u.default.resolve(e,"template.yaml")),containingJavaScript:w.default.sync("@(app|src|__tests__)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScript:w.default.sync("@(app|src|__tests__)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsx:w.default.sync("@(app|src|__tests__)/**/*.{t,j}sx",{cwd:e}).length>0,containingJavaScriptInPackages:w.default.sync("packages/**/@(app|src|__tests__)/**/*.js?(x)",{cwd:e}).length>0,containingTypeScriptInPackages:w.default.sync("packages/**/@(app|src|__tests__)/**/*.ts?(x)",{cwd:e}).length>0,containingJsxOrTsxInPackages:w.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:c,github:s.includes("@semantic-release/github"),npm:s.includes("@semantic-release/npm")},requiringNodeModules:p,versionsText:E};if(P.eslintBase=Dt(P),P.containingGemfile||P.containingGoMod||P.containingPackageJson||P.containingPoetryLock||P.containingPomXml||P.containingPubspecYaml||P.containingTemplateYaml)return P}catch{}return null}function Dt(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 It(){let e=await(0,st.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;for(let n of e._){if(typeof n=="number")continue;let t=await le(n);if(t===null){console.error(`there is no valid package.json in ${n}`);continue}let o=t.containingSubPackageJsons?rt.default.sync("packages/*",{cwd:n}).map(s=>ot.default.resolve(n,s)):[],r=(await Promise.all(o.map(s=>le(s)))).filter(s=>!!s),i=[t,...r],l=[t,...r.filter(s=>s.containingPackageJson)];if(e.verbose)for(let s of i)console.log(s);let p=i.map(s=>Ce(s,t));await nt(t),p.push(ge(t),je(t),_e(t),Oe(t),te(t),Ye(t),ze(t),de(t),et(t)),await Promise.all(p);let c=[];for(let s of l)c.push(We(s),te(s)),(s.containingTypeScript||s.containingTypeScriptInPackages)&&c.push(Ve(s,t)),(s.containingJavaScript||s.containingJavaScriptInPackages||s.containingTypeScript||s.containingTypeScriptInPackages)&&(t.willBoosterConfigs||c.push(be(s,t)),c.push(ye(s)));await Promise.all(c);for(let s of l)await Ne(s,t,e.skipDeps);g("yarn",["cleanup"],n),g("yarn",["install"],n)}}It().then();
248
247
  //# 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/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/utils/spawnUtil.ts", "../src/generators/idea.ts", "../src/generators/lintstagedrc.ts", "../src/utils/eslintUtil.ts", "../src/generators/packageJson.ts", "../src/generators/prettierignore.ts", "../src/generators/releaserc.ts", "../src/generators/renovaterc.ts", "../src/generators/tsconfig.ts", "../src/generators/workflow.ts", "../src/generators/yarnrc.ts", "../src/utils/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 { 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 { getPackageConfig, PackageConfig } from './utils/packageConfig';\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\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 const allNodePackageConfigs = [rootConfig, ...subPackageConfigs.filter((config) => config.containingPackageJson)];\n\n if (argv.verbose) {\n for (const config of allPackageConfigs) {\n console.log(config);\n }\n }\n\n const rootPromises = allPackageConfigs.map((config) => generateGitignore(config, rootConfig));\n // Install yarn berry at first\n await generateYarnrcYml(rootConfig);\n rootPromises.push(\n generateEditorconfig(rootConfig),\n generateGitattributes(rootConfig),\n generateHuskyrc(rootConfig),\n generateIdeaSettings(rootConfig),\n generateLintstagedrc(rootConfig),\n generateRenovateJson(rootConfig),\n generateReleaserc(rootConfig),\n generateVersionConfigs(rootConfig),\n generateWorkflow(rootConfig)\n );\n await Promise.all(rootPromises);\n\n const promises: Promise<void>[] = [];\n for (const config of allNodePackageConfigs) {\n promises.push(generatePrettierignore(config), 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\n for (const config of allNodePackageConfigs) {\n await generatePackageJson(config, rootConfig, argv.skipDeps);\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 fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateVersionConfigs(config: PackageConfig): Promise<void> {\n try {\n const toolVersionsPath = path.resolve(config.dirPath, '.tool-versions');\n const versionsText = await fsp.readFile(toolVersionsPath, 'utf-8');\n const lines = [];\n const promises = [];\n for (const versionText of versionsText.split('\\n')) {\n const line = versionText.trim();\n if (!line.startsWith('nodejs')) {\n lines.push(line);\n continue;\n }\n\n const [, version] = line.split(/\\s+/);\n promises.push(fsp.writeFile(path.resolve(config.dirPath, '.node-version'), version));\n }\n if (lines.length) {\n promises.push(fsp.writeFile(toolVersionsPath, lines.join('\\n')));\n } else {\n promises.push(fsp.rm(toolVersionsPath, { force: true }));\n }\n await Promise.all(promises);\n } catch (_) {\n // do nothing\n }\n}\n", "import path from 'path';\n\nimport { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `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 const filePath = path.resolve(config.dirPath, '.editorconfig');\n await FsUtil.generateFile(filePath, content);\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 { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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 const filePath = path.resolve(config.dirPath, '.eslintignore');\n const userContent = IgnoreFileUtil.getUserContent(filePath) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = IgnoreFileUtil.getExistingContent(gitignoreFilePath) || '';\n\n await FsUtil.generateFile(filePath, userContent + commonContent + gitignoreContent);\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 getExistingContent(filePath: string): string | null {\n if (fs.existsSync(filePath)) {\n return fs\n .readFileSync(filePath)\n .toString()\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 }\n return null;\n },\n getUserContent(filePath: string): string | null {\n if (fs.existsSync(filePath)) {\n const existingContent = fs.readFileSync(filePath, 'utf-8');\n const index = existingContent.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return existingContent.substr(0, existingContent.indexOf('\\n', index) + 1);\n }\n }\n return null;\n },\n isBerryZeroInstallEnabled(filePath: string): boolean {\n if (fs.existsSync(filePath)) {\n const existingContent = fs.readFileSync(filePath, 'utf-8');\n return existingContent.includes('\\n!.yarn/cache');\n }\n return false;\n },\n};\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateEslintrc(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\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 newJsonObj: any = { root: true, extends: bases };\n\n const filePath = path.resolve(config.dirPath, '.eslintrc.json');\n if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent);\n if (existingJsonObj.extends) {\n existingJsonObj.extends = existingJsonObj.extends.filter(\n (ext: string) => !ext.startsWith('@willbooster/') && ext !== '../../.eslintrc.json'\n );\n }\n if (!bases.length) {\n existingJsonObj.extends = [];\n }\n const newExtends = newJsonObj.extends;\n newJsonObj.extends = existingJsonObj.extends;\n existingJsonObj.extends = newExtends;\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: combineMerge });\n if (config.depending.blitz) {\n newJsonObj.extends = [...newJsonObj.extends.filter((e: string) => e !== 'blitz'), 'blitz'];\n }\n } catch (e) {\n // do nothing\n }\n }\n await FsUtil.generateFile(filePath, JSON.stringify(newJsonObj));\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 { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `* 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 const filePath = path.resolve(config.dirPath, '.gitattributes');\n await FsUtil.generateFile(filePath, content);\n}\n", "import path from 'path';\n\nimport { fetchOnNode } from '../utils/fetchOnNode';\nimport { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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`;\n\nexport async function generateGitignore(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n const filePath = path.resolve(config.dirPath, '.gitignore');\n let userContent = (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\n let content = (\n await Promise.all(\n names.map(async (name) => {\n const response = await fetchOnNode(`https://www.toptal.com/developers/gitignore/api/${name}`);\n return await response.text();\n })\n )\n ).join('');\n if (!IgnoreFileUtil.isBerryZeroInstallEnabled(filePath)) {\n content = content.replace('!.yarn/cache', '# !.yarn/cache').replace('# .pnp.*', '.pnp.*');\n }\n if (config.containingPomXml || config.containingPubspecYaml) {\n content = content\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 content = content.replace(/^.idea\\/modules.xml$/gm, '# .idea/modules.xml');\n }\n }\n content = content.replace(/^.idea\\/?$/gm, '# .idea');\n if (rootConfig.depending.reactNative || config.depending.reactNative || config.containingPubspecYaml) {\n content = content.replace(/^(.idea\\/.+)$/gm, '$1\\nandroid/$1');\n }\n await FsUtil.generateFile(filePath, userContent + content);\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 fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'yarn lint-staged',\n prePush: 'yarn typecheck',\n postMerge: 'yarn',\n};\n\nexport async function generateHuskyrc(config: PackageConfig): Promise<void> {\n const packageJsonPath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fsp.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\n const dirPath = path.resolve(config.dirPath, '.husky');\n await Promise.all([\n fsp.writeFile(packageJsonPath, JSON.stringify(packageJson, undefined, 2)),\n fsp.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 fsp.readFile(preCommitFilePath, 'utf-8');\n\n const promises = [\n fsp.rm(path.resolve(config.dirPath, '.huskyrc.json'), { force: true }),\n fsp.writeFile(preCommitFilePath, content.replace(DEFAULT_COMMAND, settings.preCommit)),\n ];\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n promises.push(\n fsp.writeFile(path.resolve(dirPath, 'pre-push'), content.replace(DEFAULT_COMMAND, settings.prePush), {\n mode: 0o755,\n })\n );\n }\n\n let postMergeContent = content.replace(DEFAULT_COMMAND, settings.postMerge).trim();\n if (config.depending.blitz) {\n postMergeContent += ' && yarn blitz codegen';\n } else if (config.depending.prisma) {\n postMergeContent += ' && yarn prisma generate';\n }\n postMergeContent += '\\n';\n promises.push(\n fsp.writeFile(path.resolve(dirPath, 'post-merge'), postMergeContent, {\n mode: 0o755,\n })\n );\n\n await Promise.all(promises);\n}\n", "import child_process from 'child_process';\n\nexport function spawnSync(command: string, args: string[], cwd: string): void {\n const [commandAndArgs, options] = getSpawnSyncArgs(command, args, cwd);\n console.log(`$ ${commandAndArgs} at ${options.cwd}`);\n child_process.spawnSync(commandAndArgs, options);\n}\n\nexport function spawnSyncWithStringResult(command: string, args: string[], cwd: string): string {\n const [commandAndArgs, options] = getSpawnSyncArgs(command, args, cwd);\n options.stdio = 'pipe';\n const proc = child_process.spawnSync(commandAndArgs, options);\n return proc.stdout.toString().trim();\n}\n\nexport function getSpawnSyncArgs(command: string, args: string[], cwd: 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 let commandAndArgs = `${command} ${args.join(' ')}`;\n if (env.ASDF_DIR) {\n commandAndArgs = `bash -l -c '. ${env.ASDF_DIR}/asdf.sh && ${commandAndArgs}'`;\n }\n return [commandAndArgs, { cwd, env, shell: true, stdio: 'inherit' }];\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `<?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 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 FsUtil.generateFile(filePath, content);\n } else {\n await fsp.rm(filePath, { force: true });\n }\n }\n}\n", "import fsp from 'fs/promises';\nimport path from 'path';\n\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst eslintKey = `./{src,__tests__}/**/*.{${Extensions.eslint.join(',')}}`;\nconst eslintFilterForPrettier = `files = micromatch.not(files, '${eslintKey}');`;\n\nexport async function generateLintstagedrc(config: PackageConfig): Promise<void> {\n const lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${eslintKey}': [${JSON.stringify(`eslint --fix${EslintUtil.getLintFixSuffix(config)}`)}, '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 ? eslintFilterForPrettier : ''}\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 content = `${\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 Promise.all([\n fsp.rm(path.resolve(config.dirPath, '.lintstagedrc.js'), { force: true }),\n fsp.rm(path.resolve(config.dirPath, '.lintstagedrc.json'), { force: true }),\n FsUtil.generateFile(filePath, content),\n ]);\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 fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\n\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { Extensions } from '../utils/extensions';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst scriptsWithoutWorkspace = {\n cleanup: 'yarn format && yarn lint-fix',\n format: `sort-package-json && yarn prettify`,\n lint: `eslint --color \"./{src,__tests__}/**/*.{${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\nconst scriptsWithWorkspace = merge(\n { ...scriptsWithoutWorkspace },\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\nconst scriptsForBlitz = merge(\n { ...scriptsWithoutWorkspace },\n {\n lint: `eslint --color \"./**/*.{${Extensions.eslint.join(',')}}\"`,\n typecheck: `tsc --noEmit --Pretty || echo 'Please try \"yarn blitz codegen\" if you face unknown type errors.'`,\n }\n);\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 const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fsp.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 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 jsonObj.scripts[scriptKey] = jsonObj.scripts[scriptKey]\n .replace(/yarn\\s*&&\\s*/, '')\n .replace(/yarn\\s*install\\s*&&\\s*/, '');\n }\n\n jsonObj.scripts = merge(\n jsonObj.scripts,\n config.containingSubPackageJsons\n ? scriptsWithWorkspace\n : config.depending.blitz\n ? scriptsForBlitz\n : scriptsWithoutWorkspace\n );\n jsonObj.scripts.prettify += await generatePrettierSuffix(config.dirPath);\n\n let dependencies = [] as string[];\n let devDependencies = ['lint-staged', 'prettier', 'sort-package-json', '@willbooster/prettier-config'];\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 if (config.containingTypeScriptInPackages) {\n devDependencies.push('@typescript-eslint/parser');\n }\n }\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n devDependencies.push('typescript');\n }\n\n if (config.eslintBase) {\n devDependencies.push(...devDeps[config.eslintBase]);\n }\n\n if (config.willBoosterConfigs) {\n dependencies = dependencies.filter((dep) => !dep.includes('@willbooster/'));\n devDependencies = devDependencies.filter((dep) => !dep.includes('@willbooster/'));\n }\n\n if (!jsonObj.name) {\n jsonObj.name = path.basename(config.dirPath);\n }\n\n if (config.containingSubPackageJsons) {\n jsonObj.private = true;\n }\n\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 jsonObj.scripts.postinstall = 'poetry install';\n const dirNames = fs.readdirSync(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 }\n }\n }\n\n // These cause an error of eslint-plugin-import loading\n if (config.depending.blitz) {\n devDependencies = devDependencies.filter((dep) => !dep.includes('@typescript-eslint/'));\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 fsp.writeFile(filePath, JSON.stringify(jsonObj));\n\n if (!skipAddingDeps) {\n if (dependencies.length && dependencies.some((dep) => !jsonObj.dependencies?.[dep])) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\n if (devDependencies.length) {\n spawnSync('yarn', ['add', '-D', ...new Set(devDependencies)], config.dirPath);\n }\n }\n}\n\nfunction removeDeprecatedStuff(jsonObj: any): 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.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 fsp.rm('lerna.json', { force: true }).then();\n}\n\nasync function generatePrettierSuffix(dirPath: string): Promise<string> {\n const filePath = path.resolve(dirPath, '.prettierignore');\n const existingContent = await fsp.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 { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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 const filePath = path.resolve(config.dirPath, '.prettierignore');\n const userContent = IgnoreFileUtil.getUserContent(filePath) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = 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 await FsUtil.generateFile(filePath, userContent + commonContent + additionalContent + gitignoreContent);\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateReleaserc(rootConfig: PackageConfig): Promise<void> {\n const releasercJsonPath = path.resolve(rootConfig.dirPath, '.releaserc.json');\n if (!fs.existsSync(releasercJsonPath)) return;\n\n const json = JSON.parse(await fsp.readFile(releasercJsonPath, 'utf8'));\n const plugins = json?.plugins || [];\n for (let i = 0; i < plugins.length; i++) {\n if (plugins[i] === '@semantic-release/commit-analyzer' || plugins[i][0] === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n {\n preset: 'conventionalcommits',\n },\n ];\n }\n }\n return fsp.writeFile(releasercJsonPath, JSON.stringify(json));\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst jsonObj = {\n extends: ['@willbooster'],\n};\n\nexport async function generateRenovateJson(config: PackageConfig): Promise<void> {\n let newJsonObj: any = cloneDeep(jsonObj);\n\n const filePath = path.resolve(config.dirPath, '.renovaterc.json');\n if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent) as any;\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: overwriteMerge });\n } catch (e) {\n // do nothing\n }\n }\n await Promise.all([\n fsp.rm(path.resolve(config.dirPath, '.dependabot'), { force: true }),\n fsp.rm(path.resolve(config.dirPath, 'renovate.json'), { force: true }),\n FsUtil.generateFile(filePath, JSON.stringify(newJsonObj)),\n ]);\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst rootJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react',\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 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\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',\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__/**/*', '../../node_modules/@types', '../../@types', './@types'],\n};\n\nexport async function generateTsconfig(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n if (rootConfig.depending.blitz) return;\n\n let newJsonObj: any = cloneDeep(config.root ? rootJsonObj : subJsonObj);\n if (!config.containingJsxOrTsx && !config.containingJsxOrTsxInPackages) {\n delete newJsonObj.compilerOptions.jsx;\n }\n if (config.root && !config.containingSubPackageJsons) {\n newJsonObj.include = newJsonObj.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 newJsonObj.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 if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent);\n if (existingJsonObj.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete existingJsonObj.extends;\n }\n delete existingJsonObj.compilerOptions?.typeRoots;\n delete newJsonObj?.compilerOptions?.target;\n delete newJsonObj?.compilerOptions?.module;\n if (existingJsonObj.jsx) {\n delete newJsonObj.jsx;\n }\n if (!config.depending.blitz) {\n delete newJsonObj.include;\n }\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: overwriteMerge });\n } catch (e) {\n // do nothing\n }\n }\n const sortedCompilerOptions: Record<string, unknown> = {};\n for (const key of Object.keys(newJsonObj.compilerOptions).sort()) {\n sortedCompilerOptions[key] = newJsonObj.compilerOptions[key];\n }\n newJsonObj.compilerOptions = sortedCompilerOptions;\n await FsUtil.generateFile(filePath, JSON.stringify(newJsonObj));\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport yaml from 'js-yaml';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst testWorkflow = {\n name: 'Test',\n on: {\n pull_request: {\n branches: ['main', '!renovate/**'],\n },\n push: {\n branches: ['main', '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 schedule: [\n {\n cron: '0 5 * * 0',\n },\n ],\n workflow_dispatch: null,\n },\n jobs: {\n wbfy: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main',\n },\n },\n};\n\nfunction getTestWorkflow(config: PackageConfig, kind: 'test' | 'release' | 'wbfy'): string {\n const workflow = cloneDeep(\n kind === 'test' ? testWorkflow : kind === 'release' ? releaseWorkflow : wbfyWorkflow\n ) as any;\n if (kind === 'release') {\n workflow.on.push.branches = config.release.branches;\n }\n const job = workflow.jobs.test || workflow.jobs.release || workflow.jobs.wbfy;\n if (!config.private) {\n job.with ||= {};\n job.with['non_self_hosted'] = true;\n }\n if (config.release.github || kind === 'wbfy') {\n job.secrets ||= {};\n if (config.private) {\n job.secrets['GH_TOKEN'] = '${{ secrets.GH_BOT_PAT }}';\n } else {\n job.secrets['GH_TOKEN'] = '${{ secrets.PUBLIC_GH_BOT_PAT }}';\n }\n }\n if (config.release.npm && kind !== 'wbfy') {\n job.secrets ||= {};\n job.secrets['NPM_TOKEN'] = '${{ secrets.NPM_TOKEN }}';\n }\n return yaml.dump(workflow, {\n styles: {\n '!!null': 'empty',\n },\n noCompatMode: true,\n });\n}\n\nexport async function generateWorkflow(rootConfig: PackageConfig): Promise<void> {\n const workflowsPath = path.resolve(rootConfig.dirPath, '.github', 'workflows');\n fs.mkdirSync(workflowsPath, { recursive: true });\n const promises: Promise<void>[] = [];\n if (rootConfig.depending.semanticRelease) {\n const yml = getTestWorkflow(rootConfig, 'release');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'release.yml'), yml));\n }\n {\n const yml = getTestWorkflow(rootConfig, 'test');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'test.yml'), yml));\n }\n {\n const yml = getTestWorkflow(rootConfig, 'wbfy');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'wbfy.yml'), yml));\n }\n await Promise.all(promises);\n}\n", "import fsp from 'fs/promises';\nimport path from 'path';\n\nimport yaml from 'js-yaml';\n\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateYarnrcYml(config: PackageConfig): Promise<void> {\n const currentVersion = spawnSyncWithStringResult('yarn', ['--version'], config.dirPath);\n const latestVersion = spawnSyncWithStringResult('npm', ['show', '@yarnpkg/cli', 'version'], config.dirPath);\n if (currentVersion !== latestVersion) {\n spawnSync('yarn', ['set', 'version', latestVersion], config.dirPath);\n }\n\n const yarnrcPath = path.resolve(config.dirPath, '.yarnrc');\n fsp.rm(yarnrcPath, { force: true }).then();\n\n const yarnrcYmlPath = path.resolve(config.dirPath, '.yarnrc.yml');\n const settings = yaml.load(await fsp.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 fsp.writeFile(yarnrcYmlPath, yaml.dump(settings));\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\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", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport glob from 'glob';\nimport yaml from 'js-yaml';\n\nexport interface PackageConfig {\n dirPath: string;\n root: boolean;\n private: boolean;\n willBoosterConfigs: boolean;\n containingSubPackageJsons: 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}\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 isPrivate =\n packageJson.private &&\n glob.sync('packages/**/package.json', { cwd: dirPath }).map((p) => {\n const packageJsonText = fs.readFileSync(path.join(dirPath, p), 'utf-8');\n return JSON.parse(packageJsonText).private;\n });\n\n const config: PackageConfig = {\n dirPath,\n root:\n path.basename(path.resolve(dirPath, '..')) !== 'packages' ||\n !fs.existsSync(path.resolve(dirPath, '..', '..', 'package.json')),\n private: !!isPrivate,\n willBoosterConfigs: packageJsonPath.includes(`${path.sep}willbooster-configs`),\n containingSubPackageJsons: glob.sync('packages/**/package.json', { cwd: dirPath }).length > 0,\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__)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScript: glob.sync('@(app|src|__tests__)/**/*.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__)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__)/**/*.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 };\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"],
5
- "mappings": "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",
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 { 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 { getPackageConfig, PackageConfig } from './utils/packageConfig';\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\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 const allNodePackageConfigs = [rootConfig, ...subPackageConfigs.filter((config) => config.containingPackageJson)];\n\n if (argv.verbose) {\n for (const config of allPackageConfigs) {\n console.log(config);\n }\n }\n\n const rootPromises = allPackageConfigs.map((config) => generateGitignore(config, rootConfig));\n // Install yarn berry at first\n await generateYarnrcYml(rootConfig);\n rootPromises.push(\n generateEditorconfig(rootConfig),\n generateGitattributes(rootConfig),\n generateHuskyrc(rootConfig),\n generateIdeaSettings(rootConfig),\n generateLintstagedrc(rootConfig),\n generateRenovateJson(rootConfig),\n generateReleaserc(rootConfig),\n generateVersionConfigs(rootConfig),\n generateWorkflow(rootConfig)\n );\n await Promise.all(rootPromises);\n\n const promises: Promise<void>[] = [];\n for (const config of allNodePackageConfigs) {\n promises.push(generatePrettierignore(config), 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\n for (const config of allNodePackageConfigs) {\n await generatePackageJson(config, rootConfig, argv.skipDeps);\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 fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateVersionConfigs(config: PackageConfig): Promise<void> {\n if (!config.versionsText) return;\n\n const lines = [];\n const promises = [];\n for (const versionText of config.versionsText.split('\\n')) {\n const line = versionText.trim();\n if (!line.startsWith('nodejs')) {\n lines.push(line);\n continue;\n }\n\n const [, version] = line.split(/\\s+/);\n promises.push(fsp.writeFile(path.resolve(config.dirPath, '.node-version'), version));\n }\n\n const toolVersionsPath = path.resolve(config.dirPath, '.tool-versions');\n if (lines.length) {\n promises.push(fsp.writeFile(toolVersionsPath, lines.join('\\n')));\n } else {\n promises.push(fsp.rm(toolVersionsPath, { force: true }));\n }\n await Promise.all(promises);\n}\n", "import path from 'path';\n\nimport { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `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 const filePath = path.resolve(config.dirPath, '.editorconfig');\n await FsUtil.generateFile(filePath, content);\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 { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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 const filePath = path.resolve(config.dirPath, '.eslintignore');\n const userContent = IgnoreFileUtil.getUserContent(filePath) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = IgnoreFileUtil.getExistingContent(gitignoreFilePath) || '';\n\n await FsUtil.generateFile(filePath, userContent + commonContent + gitignoreContent);\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 getExistingContent(filePath: string): string | null {\n if (fs.existsSync(filePath)) {\n return fs\n .readFileSync(filePath)\n .toString()\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 }\n return null;\n },\n getUserContent(filePath: string): string | null {\n if (fs.existsSync(filePath)) {\n const existingContent = fs.readFileSync(filePath, 'utf-8');\n const index = existingContent.indexOf(this.separatorPrefix);\n if (index >= 0) {\n return existingContent.substr(0, existingContent.indexOf('\\n', index) + 1);\n }\n }\n return null;\n },\n isBerryZeroInstallEnabled(filePath: string): boolean {\n if (fs.existsSync(filePath)) {\n const existingContent = fs.readFileSync(filePath, 'utf-8');\n return existingContent.includes('\\n!.yarn/cache');\n }\n return false;\n },\n};\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { combineMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateEslintrc(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\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 newJsonObj: any = { root: true, extends: bases };\n\n const filePath = path.resolve(config.dirPath, '.eslintrc.json');\n if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent);\n if (existingJsonObj.extends) {\n existingJsonObj.extends = existingJsonObj.extends.filter(\n (ext: string) => !ext.startsWith('@willbooster/') && ext !== '../../.eslintrc.json'\n );\n }\n if (!bases.length) {\n existingJsonObj.extends = [];\n }\n const newExtends = newJsonObj.extends;\n newJsonObj.extends = existingJsonObj.extends;\n existingJsonObj.extends = newExtends;\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: combineMerge });\n if (config.depending.blitz) {\n newJsonObj.extends = [...newJsonObj.extends.filter((e: string) => e !== 'blitz'), 'blitz'];\n }\n } catch (e) {\n // do nothing\n }\n }\n await FsUtil.generateFile(filePath, JSON.stringify(newJsonObj));\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 { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `* 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 const filePath = path.resolve(config.dirPath, '.gitattributes');\n await FsUtil.generateFile(filePath, content);\n}\n", "import path from 'path';\n\nimport { fetchOnNode } from '../utils/fetchOnNode';\nimport { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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`;\n\nexport async function generateGitignore(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n const filePath = path.resolve(config.dirPath, '.gitignore');\n let userContent = (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\n let content = (\n await Promise.all(\n names.map(async (name) => {\n const response = await fetchOnNode(`https://www.toptal.com/developers/gitignore/api/${name}`);\n return await response.text();\n })\n )\n ).join('');\n if (!IgnoreFileUtil.isBerryZeroInstallEnabled(filePath)) {\n content = content.replace('!.yarn/cache', '# !.yarn/cache').replace('# .pnp.*', '.pnp.*');\n }\n if (config.containingPomXml || config.containingPubspecYaml) {\n content = content\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 content = content.replace(/^.idea\\/modules.xml$/gm, '# .idea/modules.xml');\n }\n }\n content = content.replace(/^.idea\\/?$/gm, '# .idea');\n if (rootConfig.depending.reactNative || config.depending.reactNative || config.containingPubspecYaml) {\n content = content.replace(/^(.idea\\/.+)$/gm, '$1\\nandroid/$1');\n }\n await FsUtil.generateFile(filePath, userContent + content);\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 fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst DEFAULT_COMMAND = 'npm test';\n\nconst settings = {\n preCommit: 'yarn lint-staged',\n prePush: 'yarn typecheck',\n postMerge: 'yarn',\n};\n\nexport async function generateHuskyrc(config: PackageConfig): Promise<void> {\n const packageJsonPath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fsp.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\n const dirPath = path.resolve(config.dirPath, '.husky');\n await Promise.all([\n fsp.writeFile(packageJsonPath, JSON.stringify(packageJson, undefined, 2)),\n fsp.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 fsp.readFile(preCommitFilePath, 'utf-8');\n\n const promises = [\n fsp.rm(path.resolve(config.dirPath, '.huskyrc.json'), { force: true }),\n fsp.writeFile(preCommitFilePath, content.replace(DEFAULT_COMMAND, settings.preCommit)),\n ];\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n promises.push(\n fsp.writeFile(path.resolve(dirPath, 'pre-push'), content.replace(DEFAULT_COMMAND, settings.prePush), {\n mode: 0o755,\n })\n );\n }\n\n const postMergeCommands: string[] = [];\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.versionsText?.includes('poetry ')) {\n postMergeCommands.push('poetry install');\n }\n if (config.depending.blitz) {\n postMergeCommands.push('yarn blitz codegen');\n } else if (config.depending.prisma) {\n postMergeCommands.push('yarn prisma generate');\n }\n const postMergeCommand = content.replace(DEFAULT_COMMAND, postMergeCommands.join(' && '));\n promises.push(\n fsp.writeFile(path.resolve(dirPath, 'post-merge'), postMergeCommand, {\n mode: 0o755,\n })\n );\n\n await Promise.all(promises);\n}\n", "import child_process from 'child_process';\n\nexport function spawnSync(command: string, args: string[], cwd: string, retry = 0): void {\n do {\n const [commandAndArgs, options] = getSpawnSyncArgs(command, args, cwd);\n console.log(`$ ${commandAndArgs} at ${options.cwd}`);\n const ret = child_process.spawnSync(commandAndArgs, 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 [commandAndArgs, options] = getSpawnSyncArgs(command, args, cwd);\n options.stdio = 'pipe';\n const proc = child_process.spawnSync(commandAndArgs, options);\n return proc.stdout.toString().trim();\n}\n\nexport function getSpawnSyncArgs(command: string, args: string[], cwd: 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 let commandAndArgs = `${command} ${args.join(' ')}`;\n if (env.ASDF_DIR) {\n commandAndArgs = `bash -l -c '. ${env.ASDF_DIR}/asdf.sh && ${commandAndArgs}'`;\n }\n return [commandAndArgs, { cwd, env, shell: true, stdio: 'inherit' }];\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst content = `<?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 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 FsUtil.generateFile(filePath, content);\n } else {\n await fsp.rm(filePath, { force: true });\n }\n }\n}\n", "import fsp from 'fs/promises';\nimport path from 'path';\n\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { Extensions } from '../utils/extensions';\nimport { FsUtil } from '../utils/fsUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst eslintKey = `./{src,__tests__}/**/*.{${Extensions.eslint.join(',')}}`;\nconst eslintFilterForPrettier = `files = micromatch.not(files, '${eslintKey}');`;\n\nexport async function generateLintstagedrc(config: PackageConfig): Promise<void> {\n const lines: string[] = [];\n if (config.containingJavaScript || config.containingTypeScript) {\n const eslint = `\n '${eslintKey}': [${JSON.stringify(`eslint --fix${EslintUtil.getLintFixSuffix(config)}`)}, '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 ? eslintFilterForPrettier : ''}\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 content = `${\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 Promise.all([\n fsp.rm(path.resolve(config.dirPath, '.lintstagedrc.js'), { force: true }),\n fsp.rm(path.resolve(config.dirPath, '.lintstagedrc.json'), { force: true }),\n FsUtil.generateFile(filePath, content),\n ]);\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 fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\n\nimport { EslintUtil } from '../utils/eslintUtil';\nimport { Extensions } from '../utils/extensions';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync } from '../utils/spawnUtil';\n\nconst scriptsWithoutWorkspace = {\n cleanup: 'yarn format && yarn lint-fix',\n format: `sort-package-json && yarn prettify`,\n lint: `eslint --color \"./{src,__tests__}/**/*.{${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\nconst scriptsWithWorkspace = merge(\n { ...scriptsWithoutWorkspace },\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\nconst scriptsForBlitz = merge(\n { ...scriptsWithoutWorkspace },\n {\n lint: `eslint --color \"./**/*.{${Extensions.eslint.join(',')}}\"`,\n typecheck: `tsc --noEmit --Pretty || echo 'Please try \"yarn blitz codegen\" if you face unknown type errors.'`,\n }\n);\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 const filePath = path.resolve(config.dirPath, 'package.json');\n const jsonText = await fsp.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 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(\n jsonObj.scripts,\n config.containingSubPackageJsons\n ? scriptsWithWorkspace\n : config.depending.blitz\n ? scriptsForBlitz\n : scriptsWithoutWorkspace\n );\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 if (config.containingTypeScriptInPackages) {\n devDependencies.push('@typescript-eslint/parser');\n }\n }\n\n if (config.containingTypeScript || config.containingTypeScriptInPackages) {\n devDependencies.push('typescript');\n }\n\n if (config.eslintBase) {\n devDependencies.push(...devDeps[config.eslintBase]);\n }\n\n if (config.willBoosterConfigs) {\n dependencies = dependencies.filter((dep) => !dep.includes('@willbooster/'));\n devDependencies = devDependencies.filter((dep) => !dep.includes('@willbooster/'));\n }\n\n if (!jsonObj.name) {\n jsonObj.name = path.basename(config.dirPath);\n }\n\n if (config.containingSubPackageJsons) {\n jsonObj.private = true;\n }\n\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 = fs.readdirSync(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\n // These cause an error of eslint-plugin-import loading\n if (config.depending.blitz) {\n devDependencies = devDependencies.filter((dep) => !dep.includes('@typescript-eslint/'));\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 fsp.writeFile(filePath, JSON.stringify(jsonObj));\n\n if (!skipAddingDeps) {\n if (dependencies.length && dependencies.some((dep) => !jsonObj.dependencies?.[dep])) {\n spawnSync('yarn', ['add', ...new Set(dependencies)], config.dirPath);\n }\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\nfunction removeDeprecatedStuff(jsonObj: any): 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.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 fsp.rm('lerna.json', { force: true }).then();\n}\n\nasync function generatePrettierSuffix(dirPath: string): Promise<string> {\n const filePath = path.resolve(dirPath, '.prettierignore');\n const existingContent = await fsp.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 { FsUtil } from '../utils/fsUtil';\nimport { IgnoreFileUtil } from '../utils/ignoreFileUtil';\nimport { PackageConfig } from '../utils/packageConfig';\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 const filePath = path.resolve(config.dirPath, '.prettierignore');\n const userContent = IgnoreFileUtil.getUserContent(filePath) || defaultUserContent;\n\n const gitignoreFilePath = path.resolve(config.dirPath, '.gitignore');\n const gitignoreContent = 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 await FsUtil.generateFile(filePath, userContent + commonContent + additionalContent + gitignoreContent);\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nexport async function generateReleaserc(rootConfig: PackageConfig): Promise<void> {\n const releasercJsonPath = path.resolve(rootConfig.dirPath, '.releaserc.json');\n if (!fs.existsSync(releasercJsonPath)) return;\n\n const json = JSON.parse(await fsp.readFile(releasercJsonPath, 'utf8'));\n const plugins = json?.plugins || [];\n for (let i = 0; i < plugins.length; i++) {\n if (plugins[i] === '@semantic-release/commit-analyzer' || plugins[i][0] === '@semantic-release/commit-analyzer') {\n plugins[i] = [\n '@semantic-release/commit-analyzer',\n {\n preset: 'conventionalcommits',\n },\n ];\n }\n }\n return fsp.writeFile(releasercJsonPath, JSON.stringify(json));\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst jsonObj = {\n extends: ['@willbooster'],\n};\n\nexport async function generateRenovateJson(config: PackageConfig): Promise<void> {\n let newJsonObj: any = cloneDeep(jsonObj);\n\n const filePath = path.resolve(config.dirPath, '.renovaterc.json');\n if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent) as any;\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: overwriteMerge });\n } catch (e) {\n // do nothing\n }\n }\n await Promise.all([\n fsp.rm(path.resolve(config.dirPath, '.dependabot'), { force: true }),\n fsp.rm(path.resolve(config.dirPath, 'renovate.json'), { force: true }),\n FsUtil.generateFile(filePath, JSON.stringify(newJsonObj)),\n ]);\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport merge from 'deepmerge';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { FsUtil } from '../utils/fsUtil';\nimport { overwriteMerge } from '../utils/mergeUtil';\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst rootJsonObj = {\n compilerOptions: {\n target: 'esnext',\n module: 'esnext',\n moduleResolution: 'node',\n jsx: 'react',\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 'packages/*/src/**/*',\n 'packages/*/__tests__/**/*',\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',\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__/**/*', '../../node_modules/@types', '../../@types', './@types'],\n};\n\nexport async function generateTsconfig(config: PackageConfig, rootConfig: PackageConfig): Promise<void> {\n if (rootConfig.depending.blitz) return;\n\n let newJsonObj: any = cloneDeep(config.root ? rootJsonObj : subJsonObj);\n if (!config.containingJsxOrTsx && !config.containingJsxOrTsxInPackages) {\n delete newJsonObj.compilerOptions.jsx;\n }\n if (config.root && !config.containingSubPackageJsons) {\n newJsonObj.include = newJsonObj.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 newJsonObj.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 if (fs.existsSync(filePath)) {\n const existingContent = await fsp.readFile(filePath, 'utf-8');\n try {\n const existingJsonObj = JSON.parse(existingContent);\n if (existingJsonObj.extends === './node_modules/@willbooster/tsconfig/tsconfig.json') {\n delete existingJsonObj.extends;\n }\n delete existingJsonObj.compilerOptions?.typeRoots;\n delete newJsonObj?.compilerOptions?.target;\n delete newJsonObj?.compilerOptions?.module;\n if (existingJsonObj.jsx) {\n delete newJsonObj.jsx;\n }\n if (!config.depending.blitz) {\n delete newJsonObj.include;\n }\n newJsonObj = merge.all([newJsonObj, existingJsonObj, newJsonObj], { arrayMerge: overwriteMerge });\n } catch (e) {\n // do nothing\n }\n }\n const sortedCompilerOptions: Record<string, unknown> = {};\n for (const key of Object.keys(newJsonObj.compilerOptions).sort()) {\n sortedCompilerOptions[key] = newJsonObj.compilerOptions[key];\n }\n newJsonObj.compilerOptions = sortedCompilerOptions;\n await FsUtil.generateFile(filePath, JSON.stringify(newJsonObj));\n}\n", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport yaml from 'js-yaml';\nimport cloneDeep from 'lodash.clonedeep';\n\nimport { PackageConfig } from '../utils/packageConfig';\n\nconst testWorkflow = {\n name: 'Test',\n on: {\n pull_request: {\n branches: ['main', '!renovate/**'],\n },\n push: {\n branches: ['main', '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 schedule: [\n {\n cron: '0 5 * * 0',\n },\n ],\n workflow_dispatch: null,\n },\n jobs: {\n wbfy: {\n uses: 'WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main',\n },\n },\n};\n\nfunction getTestWorkflow(config: PackageConfig, kind: 'test' | 'release' | 'wbfy'): string {\n const workflow = cloneDeep(\n kind === 'test' ? testWorkflow : kind === 'release' ? releaseWorkflow : wbfyWorkflow\n ) as any;\n if (kind === 'release') {\n workflow.on.push.branches = config.release.branches;\n }\n const job = workflow.jobs.test || workflow.jobs.release || workflow.jobs.wbfy;\n if (!config.private) {\n job.with ||= {};\n job.with['non_self_hosted'] = true;\n }\n if (config.release.github || kind === 'wbfy') {\n job.secrets ||= {};\n if (config.private) {\n job.secrets['GH_TOKEN'] = '${{ secrets.GH_BOT_PAT }}';\n } else {\n job.secrets['GH_TOKEN'] = '${{ secrets.PUBLIC_GH_BOT_PAT }}';\n }\n }\n if (config.release.npm && kind !== 'wbfy') {\n job.secrets ||= {};\n job.secrets['NPM_TOKEN'] = '${{ secrets.NPM_TOKEN }}';\n }\n return yaml.dump(workflow, {\n styles: {\n '!!null': 'empty',\n },\n noCompatMode: true,\n });\n}\n\nexport async function generateWorkflow(rootConfig: PackageConfig): Promise<void> {\n const workflowsPath = path.resolve(rootConfig.dirPath, '.github', 'workflows');\n fs.mkdirSync(workflowsPath, { recursive: true });\n const promises: Promise<void>[] = [];\n if (rootConfig.depending.semanticRelease) {\n const yml = getTestWorkflow(rootConfig, 'release');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'release.yml'), yml));\n }\n {\n const yml = getTestWorkflow(rootConfig, 'test');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'test.yml'), yml));\n }\n {\n const yml = getTestWorkflow(rootConfig, 'wbfy');\n promises.push(fsp.writeFile(path.join(workflowsPath, 'wbfy.yml'), yml));\n }\n await Promise.all(promises);\n}\n", "import fsp from 'fs/promises';\nimport path from 'path';\n\nimport yaml from 'js-yaml';\n\nimport { PackageConfig } from '../utils/packageConfig';\nimport { spawnSync, spawnSyncWithStringResult } from '../utils/spawnUtil';\n\nexport async function generateYarnrcYml(config: PackageConfig): Promise<void> {\n const currentVersion = spawnSyncWithStringResult('yarn', ['--version'], config.dirPath);\n const latestVersion = spawnSyncWithStringResult('npm', ['show', '@yarnpkg/cli', 'version'], config.dirPath);\n if (currentVersion !== latestVersion) {\n spawnSync('yarn', ['set', 'version', latestVersion], config.dirPath, 1);\n }\n\n const releasesPath = path.join(config.dirPath, '.yarn', 'releases');\n try {\n for (const file of await fsp.readdir(releasesPath)) {\n if (file.startsWith('yarn-') && !file.startsWith(`yarn-${latestVersion}`)) {\n fsp.rm(path.join(releasesPath, file)).then();\n }\n }\n } catch (_) {\n // do nothign\n }\n\n const yarnrcPath = path.resolve(config.dirPath, '.yarnrc');\n fsp.rm(yarnrcPath, { force: true }).then();\n\n const yarnrcYmlPath = path.resolve(config.dirPath, '.yarnrc.yml');\n const settings = yaml.load(await fsp.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 fsp.writeFile(yarnrcYmlPath, yaml.dump(settings));\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\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", "import fs from 'fs';\nimport fsp from 'fs/promises';\nimport path from 'path';\n\nimport glob from 'glob';\nimport yaml from 'js-yaml';\n\nexport interface PackageConfig {\n dirPath: string;\n root: boolean;\n private: boolean;\n willBoosterConfigs: boolean;\n containingSubPackageJsons: 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 isPrivate =\n packageJson.private &&\n glob.sync('packages/**/package.json', { cwd: dirPath }).map((p) => {\n const packageJsonText = fs.readFileSync(path.join(dirPath, p), 'utf-8');\n return JSON.parse(packageJsonText).private;\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:\n path.basename(path.resolve(dirPath, '..')) !== 'packages' ||\n !fs.existsSync(path.resolve(dirPath, '..', '..', 'package.json')),\n private: !!isPrivate,\n willBoosterConfigs: packageJsonPath.includes(`${path.sep}willbooster-configs`),\n containingSubPackageJsons: glob.sync('packages/**/package.json', { cwd: dirPath }).length > 0,\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__)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScript: glob.sync('@(app|src|__tests__)/**/*.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__)/**/*.js?(x)', { cwd: dirPath }).length > 0,\n containingTypeScriptInPackages:\n glob.sync('packages/**/@(app|src|__tests__)/**/*.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"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wbfy",
3
- "version": "1.3.6",
3
+ "version": "1.4.3",
4
4
  "description": "A tool for applying WillBooster's conventional configures to npm packages",
5
5
  "license": "Apache-2.0",
6
6
  "author": "WillBooster Inc.",
@@ -26,6 +26,9 @@
26
26
  "typecheck": "tsc --noEmit --Pretty"
27
27
  },
28
28
  "prettier": "@willbooster/prettier-config",
29
+ "resolutions": {
30
+ "npm/chalk": "^4.1.2"
31
+ },
29
32
  "dependencies": {
30
33
  "deepmerge": "4.2.2",
31
34
  "glob": "7.2.0",
@@ -35,13 +38,13 @@
35
38
  "yargs": "17.3.1"
36
39
  },
37
40
  "devDependencies": {
38
- "@types/eslint": "8.2.2",
41
+ "@types/eslint": "8.4.1",
39
42
  "@types/glob": "7.2.0",
40
43
  "@types/jest": "27.4.0",
41
44
  "@types/js-yaml": "4.0.5",
42
45
  "@types/lodash.clonedeep": "4.5.6",
43
46
  "@types/micromatch": "4.0.2",
44
- "@types/node": "16.11.21",
47
+ "@types/node": "16.11.24",
45
48
  "@types/node-fetch": "3.0.3",
46
49
  "@types/yargs": "17.0.8",
47
50
  "@typescript-eslint/eslint-plugin": "5.11.0",
@@ -50,7 +53,7 @@
50
53
  "@willbooster/prettier-config": "9.0.0",
51
54
  "@willbooster/renovate-config": "9.1.0",
52
55
  "conventional-changelog-conventionalcommits": "4.6.3",
53
- "esbuild": "0.14.12",
56
+ "esbuild": "0.14.21",
54
57
  "esbuild-register": "3.3.2",
55
58
  "eslint": "8.8.0",
56
59
  "eslint-config-prettier": "8.3.0",
@@ -59,17 +62,17 @@
59
62
  "eslint-plugin-sort-class-members": "1.14.1",
60
63
  "eslint-plugin-sort-destructure-keys": "1.4.0",
61
64
  "husky": "7.0.4",
62
- "jest": "27.4.7",
65
+ "jest": "27.5.1",
63
66
  "lint-staged": "12.3.3",
64
67
  "micromatch": "4.0.4",
65
68
  "pinst": "2.1.6",
66
69
  "prettier": "2.5.1",
67
- "semantic-release": "18.0.1",
70
+ "semantic-release": "19.0.2",
68
71
  "sort-package-json": "1.54.0",
69
72
  "typescript": "4.5.5"
70
73
  },
71
74
  "engines": {
72
75
  "node": ">=14.0.0"
73
76
  },
74
- "packageManager": "yarn@3.2.0-rc.14"
77
+ "packageManager": "yarn@3.2.0-rc.15"
75
78
  }