wbfy 2.14.3 → 2.15.1

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.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"node:fs/promises";import t from"node:path";import{ignoreEnoentAsync as n,ignoreErrorAsync as i}from"@willbooster/shared-lib";import s from"yargs";import o from"node:fs";import{globby as r,globbySync as a}from"globby";import{PromisePool as c}from"minimal-promise-pool";import l from"node:child_process";import p from"deepmerge";import d from"node:os";import{Octokit as u}from"@octokit/core";import m from"lodash.clonedeep";import g from"js-yaml";import f from"dotenv";import h from"libsodium-wrappers";import{distance as y}from"fastest-levenshtein";import{simpleGit as w}from"simple-git";const b=new class{constructor(){this.isVerbose=!1}};const v=new class{async functionIgnoringException(e,t){b.isVerbose&&console.info(`--------- ${e} start ---------`);try{await t()}catch(t){console.info(`Error occurred in ${e}: ${t instanceof Error?t.stack:t}}`)}b.isVerbose&&console.info(`---------- ${e} end ----------`)}},k={async readFileIgnoringError(t){try{return await e.readFile(t,"utf8")}catch{}},async generateFile(t,n){await e.writeFile(t,n),console.log(`Generated/Updated ${t}`)}},j=new c;async function _(e){return v.functionIgnoringException("fixAbbreviations",(async()=>{const n=await r("**/*.md",{dot:!0,cwd:e,gitignore:!0});b.isVerbose&&console.info(`Found ${n.length} markdown files in ${e}`);for(const i of n){const n=t.join(e,i);await j.run((async()=>{const e=await o.promises.readFile(n,"utf8"),t=e.replaceAll("c.f.","cf.").replaceAll("eg.","e.g.").replaceAll("ie.","i.e.");e!==t&&await k.generateFile(n,t)}))}const i=await r(["{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx,cts,mts,ts,tsx}","packages/**/{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx,cts,mts,ts,tsx}"],{dot:!0,cwd:e,gitignore:!0});b.isVerbose&&console.info(`Found ${i.length} TypeScript files in ${e}`);for(const n of i){const i=t.join(e,n),s=await o.promises.readFile(i,"utf8"),r=s.replaceAll(/\/\/(.*)c\.f\./g,"//$1cf.").replaceAll(/\/\/(.*)eg\./g,"//$1e.g.").replaceAll(/\/\/(.*)ie\./g,"//$1i.e.");s!==r&&await k.generateFile(i,r)}await j.promiseAll()}))}async function x(n){return v.functionIgnoringException("fixDockerfile",(async()=>{if(!n.containingDockerfile)return;const i=t.join(n.dirPath,"Dockerfile"),s=await e.readFile(i,"utf8");let o=s.replaceAll("then(process.stdout.write)","then(t => process.stdout.write(t))");s.includes("FROM node")&&(o=o.replaceAll(/curl https:\/\/raw.githubusercontent.com\/WillBooster(\S+)/g,"node -e 'fetch(\"https://raw.githubusercontent.com/WillBooster$1\").then(r => r.text()).then(t => process.stdout.write(t))'").replaceAll("wb db","wb prisma"),o.includes("node node_modules/.bin/wb")&&!o.includes("procps")&&(o=o.replaceAll(/apt-get -qq install -y --no-install-recommends (.+)\\/g,((e,t)=>{const n=t.trim().split(/\s+/);return n.push("procps"),`apt-get -qq install -y --no-install-recommends ${n.sort().join(" ")} \\`})))),s!==o&&await e.writeFile(i,o)}))}async function P(n){return v.functionIgnoringException("fixPlaywrightConfig",(async()=>{const i=t.join(n.dirPath,"playwright.config.ts"),s=await e.readFile(i,"utf8"),o=s.replace(/retries:.+,/,"retries: process.env.PWDEBUG ? 0 : process.env.CI ? 5 : 1,");s!==o&&await e.writeFile(i,o)}))}async function F(n){return v.functionIgnoringException("fixPrismaEnvFiles",(async()=>{const i=await r(["*.env","*.env.*"],{dot:!0,cwd:n.dirPath});for(const s of i){const i=t.resolve(n.dirPath,s),o=(await e.readFile(i,"utf8")).replace(/DATABASE_URL="?(.+\.sqlite3)"?[\n$]/,'DATABASE_URL="$1?connection_limit=1"\n');await e.writeFile(i,o)}}))}async function $(e){return v.functionIgnoringException("fixTestDirectories",(async()=>{await Promise.all(e.map((async e=>{const n=t.join(e,"__tests__"),i=t.join(e,"tests");try{await o.promises.rename(n,i);const s=await o.promises.readFile(t.join(e,"package.json"),"utf8"),r=s.replaceAll("__tests__","tests");if(s===r)return;await o.promises.writeFile(t.join(e,"package.json"),r)}catch{}})))}))}async function S(i,s){return v.functionIgnoringException("fixTypeDefinitions",(async()=>{const o=t.resolve(i.dirPath,"@types"),r=i.root&&i.containingSubPackageJsons?void 0:t.resolve(i.dirPath,"src","types"),a=await n((()=>e.readdir(o,{withFileTypes:!0})));if(a)for(const i of a){const a=i.name.slice(0,-5),c=i.name.endsWith(".d.ts");let l=c?a:i.name;l.includes("__")&&(l=`@${l.replace("__","/")}`);const p=s.some((e=>e.packageJson?.dependencies?.[l]||e.packageJson?.devDependencies?.[l]));i.isFile()&&c?p?(await e.mkdir(t.join(o,a)),await j.run((()=>e.rename(t.join(o,i.name),t.join(o,a,"index.d.ts"))))):r&&(await e.mkdir(r,{recursive:!0}),await j.run((()=>e.rename(t.join(o,i.name),t.join(r,i.name))))):i.isDirectory()&&r&&!p&&(await e.mkdir(r,{recursive:!0}),await j.run((()=>n((()=>e.rename(t.join(o,i.name,"index.d.ts"),t.join(r,`${i.name}.d.ts`)))))))}}))}function E(e,t,n,i=0){do{const[i,s,o]=R(e,t,n);console.log(`$ ${i} ${s.join(" ")} at ${o.cwd}`);if(0===l.spawnSync(i,s,o).status)break}while(--i>=0)}function O(e,t,n){const[i,s,o]=R(e,t,n);o.stdio="pipe";const r=l.spawnSync(i,s,o),a=r.stderr.toString().trim();return a&&console.error(`${i} [${s.map((e=>`"${e}"`))}] caused the following error:\n ${a}`),r.stdout.toString().trim()}function R(e,t,n){const i={...process.env};return i.PATH&&i.BERRY_BIN_FOLDER&&(i.PATH=i.PATH.replace(`${i.BERRY_BIN_FOLDER}:`,"")),i.ASDF_DIR&&(t=["-l","-c",`. ${i.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:n,env:i,shell:!1,stdio:"inherit"}]}function T(e){const t=e.split(/[+.-]/).map(Number).filter(Number.isNaN);let n=0,i=1;for(const e of t)n+=e*i,i/=1e3;return n}const B="3.9.17",D="zulu-11.66.15",I="2.0.0-beta.33",A="13.4.12";async function W(e){return v.functionIgnoringException("generateVersionConfigs",(async()=>{await async function(e){if(!e.versionsText)return;const n=e.versionsText.trim().split("\n").map((e=>{const[t,n]=e.trim().split(/\s+/);return`${N.has(t)?" ":""}${t} ${n}`})).sort().map((e=>e.trim())),i=[...new Set(n)];if(e.containingPoetryLock){const e=await fetch("https://pypi.org/pypi/poetry/json"),t=await e.json(),n=t?.info?.version;n&&J(i,"poetry",t?.info?.version),J(i,"python",B,!0)}e.depending.firebase&&J(i,"java",D,!0);if(e.containingPackageJson){const t=O("npm",["show","yarn","version"],e.dirPath);J(i,"yarn",t)}for(const n of C){const i=t.resolve(e.dirPath,`.${n}-version`);o.promises.rm(i,{force:!0})}const s=t.resolve(e.dirPath,".tool-versions");await(i.length>0?j.run((()=>o.promises.writeFile(s,i.join("\n")+"\n"))):j.run((()=>o.promises.rm(s,{force:!0})))),await j.promiseAll(),E("asdf",["plugin","update","--all"],e.dirPath),E("asdf",["install"],e.dirPath)}(e)}))}const N=new Set(["java","nodejs","python"]),C=["java","node","python"];function J(e,t,n,i=!1){const s=e.findIndex((e=>e.split(/\s+/)[0]===t)),o=`${t} ${n}`;if(s>=0){const[,t]=e[s].split(/\s+/);T(n)>T(t)&&(e[s]=o)}else e.splice(i?0:e.length,0,o)}const L="# Project-specific settings",z=/# Project-specific settings[^\n]*\n/gm,G="# Generated by wbfy",H=`${L} (head)\n\n\n${G}\n`,U=`\n${L} (tail)\n`,M={separator:G,separatorPrefix:"# Generated by ",defaultHeadUserContent:H,defaultTailUserContent:U,async readGitignoreWithoutSeparators(e){try{let t=await o.promises.readFile(e,"utf8");const n=q(t);return n>0&&(t=t.slice(0,n-1)),t.replaceAll(z,"").replaceAll(/# Generated by [^\n]*\n/gm,"").replaceAll(/\r?\n\r?\n(\r?\n)+/gm,"\n\n").trim()+"\n"}catch{}},getHeadUserContent(e){const t=e.indexOf(this.separatorPrefix);return t>=0?e.slice(0,e.indexOf("\n",t)+1).replaceAll(z,`${L} (head)\n`):H},getTailUserContent(e){const t=q(e);return t>0?e.slice(t-1):U},async isBerryZeroInstallEnabled(e){try{return(await o.promises.readFile(e,"utf8")).includes("\n!.yarn/cache")}catch{return!1}}};function q(e){const t=e.indexOf(L),n=e.lastIndexOf(L);return n>t?n:-1}const Y="\n**/*.sqlite3*\n.yarn/install-state.gz\n";async function K(e){return v.functionIgnoringException("generateDockerignore",(async()=>{const n=t.resolve(e.dirPath,".dockerignore");if(e.containingDockerfile){const e=await k.readFileIgnoringError(n)??"",t=M.getHeadUserContent(e),i=M.getTailUserContent(e),s=t+Y+i;await j.run((()=>k.generateFile(n,s)))}else await o.promises.rm(n,{force:!0})}))}const V={codeWith2IndentSize:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","cpp","dart","htm","html","pu","puml","rb","vue","yaml","yml"].sort(),codeWith4IndentSize:["go","gradle","py"].sort(),codeWith8IndentSize:["sh"].sort(),markdownLike:["md"].sort(),eslint:["cjs","mjs","js","cts","mts","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()},X=`root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n${Q(V.codeWith2IndentSize)}\nindent_size = 2\nindent_style = space\n\n${Q(V.codeWith4IndentSize)}\nindent_size = 4\nindent_style = space\n\n${Q(V.codeWith8IndentSize)}\nindent_size = 8\nindent_style = space\n\n${Q(V.markdownLike)}\nmax_line_length = off\ntrim_trailing_whitespace = false\n\n[{Makefile,*.mk}]\nindent_style = tab\n`;async function Z(e){return v.functionIgnoringException("generateEditorconfig",(async()=>{const n=t.resolve(e.dirPath,".editorconfig");await j.run((()=>k.generateFile(n,X)))}))}function Q(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}const ee="\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";async function te(e){return v.functionIgnoringException("generateEslintignore",(async()=>{const n=t.resolve(e.dirPath,".eslintignore"),i=await k.readFileIgnoringError(n)??"",s=M.getHeadUserContent(i),o=M.getTailUserContent(i),r=t.resolve(e.dirPath,".gitignore"),a=await M.readGitignoreWithoutSeparators(r)||"",c=s+ee+a+o;await j.run((()=>k.generateFile(n,c)))}))}function ne(e,t){return t}function ie(e,t,n){const i=[...e];for(const[s,o]of t.entries())void 0===i[s]?i[s]=n.cloneUnlessOtherwiseSpecified(o,n):n.isMergeableObject(o)?i[s]=p(e[s],o,n):e.includes(o)||i.push(o);return i}async function se(e,n){return v.functionIgnoringException("generateEslintrc",(async()=>{const i=[];e.eslintBase&&i.push(e.eslintBase),e!==n&&i.push("../../.eslintrc.json");let s={root:!0,extends:i};const r=t.resolve(e.dirPath,".eslintrc.json");try{const t=await o.promises.readFile(r,"utf8"),n=JSON.parse(t);n.extends&&(n.extends=n.extends.filter((e=>!e.startsWith("@willbooster/")&&"../../.eslintrc.json"!==e))),0===i.length&&(n.extends=[]);const a=s.extends;s.extends=n.extends,n.extends=a,s=p.all([s,n,s],{arrayMerge:ie}),e.depending.blitz&&function(e,t){e.extends=[t,...e.extends.filter((e=>e!==t))]}(s,"./node_modules/@blitzjs/next/eslint")}catch{}const a=JSON.stringify(s);await j.run((()=>k.generateFile(r,a)))}))}const oe=`* text=auto\n\n*.vcproj text eol=crlf\n\n${[...V.codeWith2IndentSize,...V.codeWith4IndentSize,...V.markdownLike].map((e=>`*.${e} text eol=lf`)).join("\n")}\n`;async function re(e){return v.functionIgnoringException("generateGitattributes",(async()=>{const n=t.resolve(e.dirPath,".gitattributes");await j.run((()=>k.generateFile(n,oe)))}))}const ae=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],ce="\n.devcontainer/\ndist/\ntemp/\nIcon[\r]\n!.keep\n*/mount/*.hash\n\n";async function le(e,n){return v.functionIgnoringException("generateGitignore",(async()=>{const i=t.resolve(e.dirPath,".gitignore"),s=await k.readFileIgnoringError(i)??"";let o=M.getHeadUserContent(s)+ce;const r=M.getTailUserContent(s),a=[...ae];e.containingGemfile&&a.push("ruby"),e.containingGoMod&&(a.push("go"),o+=`${t.basename(e.dirPath)}\n`),e.containingPackageJson&&a.push("node"),e.containingPomXml&&(a.push("maven"),o+=".idea/google-java-format.xml\n"),e.containingPubspecYaml&&(a.push("flutter","AndroidStudio","ruby"),o+=".flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n"),e.containingTemplateYaml&&(o+=".aws-sam/\npackaged.yaml\n"),e.containingPoetryLock&&(a.push("python"),o+=".venv/\n"),e.depending.blitz&&(a.push("nextjs"),o+=".blitz/\n.blitz**\n"),(n.depending.firebase||e.depending.firebase)&&a.push("firebase"),n.depending.prisma&&(o+="*.sqlite3\n*.sqlite3-journal\n"),e.depending.playwrightTest&&(o+="test-results/\n"),(n.depending.reactNative||e.depending.reactNative)&&(a.push("reactnative"),o+="google-services.json\nandroid/app/src/main/assets/\n"),e.depending.storybook&&a.push("storybookjs");let c="";for(const e of a){let t=await ue(e)??"";if(!t){const n=`https://www.toptal.com/developers/gitignore/api/${e}`,i=await fetch(n),s=await i.text();if(s.includes("Attention Required!"))return void console.error(`Failed to fetch ${n}`);t=s.trim(),await j.run((()=>de(e,t))),b.isVerbose&&console.info(`Fetched ${n}`)}c&&(c+="\n"),c+=t+"\n"}await M.isBerryZeroInstallEnabled(i)||(c=c.replace("!.yarn/cache","# !.yarn/cache").replace("# .pnp.*",".pnp.*")),(e.containingPomXml||e.containingPubspecYaml)&&(c=c.replaceAll(/^# .idea\/artifacts$/gm,".idea/artifacts").replaceAll(/^# .idea\/compiler.xml$/gm,".idea/compiler.xml").replaceAll(/^# .idea\/jarRepositories.xml$/gm,".idea/jarRepositories.xml").replaceAll(/^# .idea\/modules.xml$/gm,".idea/modules.xml").replaceAll(/^# .idea\/*.iml$/gm,".idea/*.iml").replaceAll(/^# .idea\/modules$/gm,".idea/modules").replaceAll(/^# *.iml$/gm,"*.iml").replaceAll(/^# *.ipr$/gm,"*.ipr"),e.containingPubspecYaml&&(c=c.replaceAll(/^.idea\/modules.xml$/gm,"# .idea/modules.xml"))),c=c.replaceAll(/^.idea\/?$/gm,"# .idea"),(n.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(c=c.replaceAll(/^(.idea\/.+)$/gm,"$1\nandroid/$1"));const l=o+c+r;await j.run((()=>k.generateFile(i,l)))}))}const pe=t.join(d.homedir(),".cache","wbfy","gitignore");async function de(e,n){await o.promises.mkdir(pe,{recursive:!0}),await o.promises.writeFile(t.join(pe,e),n)}async function ue(e){try{const n=await o.promises.stat(t.join(pe,e));if(Date.now()-n.mtimeMs>216e5)return;return await o.promises.readFile(t.join(pe,e),"utf8")}catch{}}const me={getLintFixSuffix:e=>e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""},ge=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,fe=!!ge,he=new u({auth:ge});const ye=new class{getOrgAndName(e){const t=e.split(":").at(-1),n=t?.split("/");return[n?.at(-2)??"",n?.at(-1)?.replace(/.git$/,"")??""]}},we={node:["src","tests","scripts"].sort(),blitz:["src","tests","scripts","db","integrations","mailers"].sort()};function be(e){return e.depending.blitz?we.blitz:we.node}const ve=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys","eslint-plugin-unicorn"],ke=[...ve,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],je=["eslint-plugin-react","eslint-plugin-react-hooks"],_e={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...ve],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...ve,...je],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...ke],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...ke,...je],"@willbooster/eslint-config-blitz-next":["@willbooster/eslint-config-blitz-next",...ke,...je],"../../.eslintrc.json":[]};async function xe(e,n,i){return v.functionIgnoringException("generatePackageJson",(async()=>{await async function(e,n,i){const s=t.resolve(e.dirPath,"package.json"),a=await o.promises.readFile(s,"utf8"),c=JSON.parse(a);c.scripts=c.scripts||{},c.dependencies=c.dependencies||{},c.devDependencies=c.devDependencies||{},c.peerDependencies=c.peerDependencies||{},await async function(e){"WillBooster LLC"===e.author&&(e.author="WillBooster Inc.");delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],delete e.scripts["typecheck/warn"],delete e.scripts["typecheck:gen-code"],delete e.scripts["typecheck:codegen"],delete e.dependencies["@willbooster/shared-scripts"],delete e.dependencies.tslib,delete e.devDependencies["@willbooster/eslint-config"],delete e.devDependencies["@willbooster/eslint-config-react"],delete e.devDependencies["@willbooster/renovate-config"],delete e.devDependencies["@willbooster/shared-scripts"],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(const t of Object.values(_e))for(const n of t)delete e.devDependencies[n];await j.run((()=>o.promises.rm("lerna.json",{force:!0})))}(c),"@willbooster/prettier-config"!==c.name&&(c.prettier="@willbooster/prettier-config");for(const[e,t]of Object.entries(c.scripts))t.includes("git clone")||(c.scripts[e]=t.replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));c.scripts=p(c.scripts,Pe(e)),c.scripts.prettify+=await async function(e){const n=t.resolve(e,".prettierignore"),i=await o.promises.readFile(n,"utf8"),s=i.indexOf(M.separatorPrefix);if(s<0)return"";const r=i.slice(0,s);return r.split("\n").map((e=>{const t=e.trim();return t.endsWith("/")?t.slice(0,-1):t})).filter((e=>e&&!e.startsWith("#")&&!e.includes("/"))).map((e=>` "!**/${e}/**"`)).join("")}(e.dirPath);for(const[e,t]of Object.entries(c.scripts))t?.includes("yarn workspaces foreach")&&(t.includes("--all")||t.includes("--recursive")||t.includes("--since")||t.includes("--worktree")||(c.scripts[e]=t.replace("yarn workspaces foreach","yarn workspaces foreach --all")));let l=[],d=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"];const u=[];e.root&&(d.push("husky"),(e.publicRepo||e.referredByOtherRepo)&&(d.push("pinst"),c.scripts.prepack="pinst --disable",c.scripts.postpack="pinst --enable"),e.depending.semanticRelease&&(d.push("conventional-changelog-conventionalcommits@6.1.0"),c.devDependencies["semantic-release"]||c.devDependencies["multi-semantic-release"]||c.devDependencies["@qiwi/multi-semantic-release"]||d.push("semantic-release"),c.version="0.0.0-semantically-released"),e.depending.playwrightTest&&(c.dependencies["@playwright/test"]||(d.push("@playwright/test"),delete c.dependencies["@playwright/test"]),delete c.dependencies.playwright,delete c.devDependencies.playwright),e.containingSubPackageJsons?c.workspaces=["packages/*"]:delete c.workspaces);if(e.depending.wb){c.dependencies["@willbooster/shared-scripts"]||c.dependencies["@willbooster/wb"]?l.push("@willbooster/wb"):d.push("@willbooster/wb");for(const[e,t]of Object.entries(c.scripts))c.scripts[e]=t.replace(/wb\s+db/,"wb prisma")}(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(d.push("eslint","micromatch"),e.containingTypeScriptInPackages&&d.push("@typescript-eslint/parser"));(e.containingTypeScript||e.containingTypeScriptInPackages)&&d.push("typescript");e.eslintBase&&d.push(..._e[e.eslintBase]);e.willBoosterConfigs&&(l=l.filter((e=>!e.includes("@willbooster/"))),d=d.filter((e=>!e.includes("@willbooster/"))));c.name||(c.name=t.basename(e.dirPath));e.containingSubPackageJsons&&(c.private=!0);c.license||(c.license="UNLICENSED");!c.private&&"UNLICENSED"!==c.license&&n.publicRepo&&(c.publishConfig??={},c.publishConfig.access??="public");const[m]=ye.getOrgAndName(e.repository??"");"WillBooster"!==m&&"WillBoosterLab"!==m||(c.author="WillBooster Inc.");e.root||!c.private||c.main||(c.main="./src");if(delete c.resolutions?.["npm/chalk"],!e.containingSubPackageJsons){if(e.containingJavaScript||e.containingTypeScript?c.scripts["lint-fix"]+=me.getLintFixSuffix(e):(delete c.scripts.lint,delete c.scripts["lint-fix"],c.scripts.cleanup=c.scripts.cleanup?.replace(" && yarn lint-fix","")),e.containingPubspecYaml){c.scripts.lint="flutter analyze",c.scripts["lint-fix"]="yarn lint";const n=["lib","test","test_driver"].filter((n=>o.existsSync(t.resolve(e.dirPath,n))));n.length>0&&(c.scripts["format-code"]=`flutter format $(find ${n.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,c.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){"poetry install"===c.scripts.postinstall&&delete c.scripts.postinstall;const t=await r("**/*.py",{cwd:e.dirPath,dot:!0,gitignore:!0,ignore:["test-fixtures"]}),n=new Set;for(const e of t){const[t,i]=e.split(/[/\\]/);i&&n.add(t)}if(n.size>0){const e=[...n].join(" ");c.scripts["format-code"]=`poetry run isort --profile black ${e} && poetry run black ${e}`,c.scripts.lint?c.scripts.lint=`poetry run flake8 ${e} && ${c.scripts.lint}`:(c.scripts.lint=`poetry run flake8 ${e}`,c.scripts["lint-fix"]="yarn lint"),c.scripts.format+=" && yarn format-code",u.push("black","isort","flake8")}}e.repository&&(c.repository=e.repository)}e.depending.blitz?(l.push(`blitz@${I}`,`@blitzjs/auth@${I}`,`@blitzjs/next@${I}`,`@blitzjs/rpc@${I}`,`next@${A}`),d=d.filter((e=>"eslint-plugin-react"!==e&&"eslint-plugin-react-hooks"!==e)),c.scripts["gen-code"]?.startsWith("blitz codegen")?c.scripts["gen-code"].includes("blitz prisma generate")||(c.scripts["gen-code"]=c.scripts["gen-code"].replace("blitz codegen","blitz codegen && blitz prisma generate")):c.scripts["gen-code"]="blitz codegen"):e.depending.prisma&&!c.scripts["gen-code"]?.startsWith("prisma generate")&&(c.scripts["gen-code"]="prisma generate");e.depending.next&&delete c.devDependencies["@types/react"];c.dependencies?.prettier||delete c.devDependencies["@types/prettier"];0===Object.keys(c.dependencies).length&&delete c.dependencies;0===Object.keys(c.devDependencies).length&&delete c.devDependencies;0===Object.keys(c.peerDependencies).length&&delete c.peerDependencies;let g=JSON.stringify(c);g=await async function(e,n,i){const s=[];for(const[t]of Object.keys(e))":"!==t[0]&&t.includes(":")&&s.push([t,t.replaceAll(":","-")]);if(0===s.length)return n;for(const[e,t]of s)n=n.replaceAll(e,t);const a=await r(["**/*.{md,cjs,mjs,js,jsx,cts,mts,ts,tsx}","**/Dockerfile"],{cwd:i.dirPath,dot:!0,gitignore:!0});for(const e of a)await j.run((async()=>{const n=t.join(i.dirPath,e),r=await o.promises.readFile(n,"utf8");let a=r;for(const[e,t]of s)a=a.replaceAll(e,t);a!==r&&await o.promises.writeFile(n,a)}));return await j.promiseAll(),n}(c.scripts,g,e),await o.promises.writeFile(s,g),i||(l=l.filter((e=>!c.devDependencies?.[e])),l.length>0&&E("yarn",["add",...new Set(l)],e.dirPath),d=d.filter((e=>!c.dependencies?.[e])),d.length>0&&E("yarn",["add","-D",...new Set(d)],e.dirPath),u.length>0&&E("poetry",["add","--group","dev",...new Set(u)],e.dirPath))}(e,n,i)}))}function Pe(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${be(e)}}/**/*.{${V.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${V.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};if(e.containingSubPackageJsons){const e=t.test;t=p({...t},{format:"sort-package-json && yarn prettify && yarn workspaces foreach --all --parallel --verbose run format",lint:"yarn workspaces foreach --all --parallel --verbose run lint","lint-fix":"yarn workspaces foreach --all --parallel --verbose run lint-fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${V.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"CI=1 FORCE_COLOR=3 yarn workspaces foreach --all --verbose run test",typecheck:"yarn workspaces foreach --all --parallel --verbose run typecheck"}),e?.includes("wb test")&&(t.test=e)}else e.depending.pyright&&(t.typecheck=t.typecheck?`${t.typecheck} && `:"",t.typecheck+="pyright");return e.containingTypeScript||e.containingTypeScriptInPackages?e.depending.wb&&(t.typecheck="wb typecheck"):delete t.typecheck,t}const Fe="npm test",$e={preCommit:"node node_modules/.bin/lint-staged",prePush:"yarn typecheck",prePushForLab:'\nif [ $(git branch --show-current) = "main" ] && [ $(git config user.email) != "exkazuu@gmail.com" ]; then\n echo "************************************************"\n echo "*** Don\'t push main branch directly. Use PR! ***"\n echo "************************************************"\n exit 1\nfi\n\nyarn typecheck\n'.trim(),postMerge:'\nchanged_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"\n\nrun_if_changed() {\n if echo "$changed_files" | grep --quiet -E "$1"; then\n eval "$2"\n fi\n}\n'.trim()};async function Se(e){return v.functionIgnoringException("generateHuskyrc",(async()=>{await async function(e){const n=t.resolve(e.dirPath,"package.json"),i=await o.promises.readFile(n,"utf8"),s=JSON.parse(i);s.scripts||={},delete s.scripts.postinstall,delete s.scripts.postpublish,delete s.scripts.prepare,delete s.scripts.prepublishOnly,delete s.scripts.prepack,delete s.scripts.postpack;const r=t.resolve(e.dirPath,".husky");await Promise.all([o.promises.writeFile(n,JSON.stringify(s,void 0,2)),o.promises.rm(r,{force:!0,recursive:!0})]),E("yarn",["dlx","husky-init","--yarn2"],e.dirPath);const a=t.resolve(r,"pre-commit"),c=await o.promises.readFile(a,"utf8");await j.run((()=>o.promises.rm(t.resolve(e.dirPath,".huskyrc.json"),{force:!0}))),await j.run((()=>o.promises.writeFile(a,c.replace(Fe,$e.preCommit))));const{typecheck:l}=Pe(e);if(l){let n=e.repository?.startsWith("github:WillBoosterLab/")?$e.prePushForLab:$e.prePush;n=n.replace("yarn typecheck",l.replace("tsc ","node node_modules/.bin/tsc ").replace("wb ","node node_modules/.bin/wb ").replace("pyright","node node_modules/.bin/pyright")),await j.run((()=>o.promises.writeFile(t.resolve(r,"pre-push"),c.replace(Fe,n),{mode:493})))}const p=[];e.versionsText&&p.push('run_if_changed "\\..+-version" "asdf plugin update --all"');e.versionsText?.includes("python ")&&p.push('run_if_changed "\\..+-version" "asdf install python"');e.versionsText&&p.push('run_if_changed "\\..+-version" "asdf install"');const d=e.depending.blitz?" && rm -Rf .next":"";p.push(`run_if_changed "package\\.json" "yarn${d}"`),e.containingPoetryLock&&p.push('run_if_changed "poetry\\.lock" "poetry install"');e.depending.blitz?p.push('run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz prisma migrate deploy"','run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz prisma generate"','run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz codegen"'):e.depending.prisma&&p.push('run_if_changed "prisma/schema.prisma" "node node_modules/.bin/dotenv -c development -- node node_modules/.bin/prisma migrate deploy"','run_if_changed "prisma/schema.prisma" "node node_modules/.bin/dotenv -c development -- node node_modules/.bin/prisma generate"');const u=c.replace(Fe,`${$e.postMerge}\n\n${p.join("\n")}`);await j.run((()=>o.promises.writeFile(t.resolve(r,"post-merge"),u,{mode:493})))}(e)}))}const Ee='<?xml version="1.0" encoding="UTF-8"?>\n<project version="4">\n <component name="ProjectTasksOptions">\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="ts" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.ts)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="tsx" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.tsx)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="js" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.js)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="json" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.json)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="md" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.md)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="html" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.html)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n </component>\n</project>\n';async function Oe(e){return v.functionIgnoringException("generateIdeaSettings",(async()=>{const n=t.resolve(e.dirPath,".idea");if(o.existsSync(n)){const i=t.resolve(n,"watcherTasks.xml");await(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?j.run((()=>k.generateFile(i,Ee))):j.run((()=>o.promises.rm(i,{force:!0}))))}}))}async function Re(e){return v.functionIgnoringException("generateLintstagedrc",(async()=>{await async function(e){const n=e.root?"node node_modules/.bin/":"node ../../node_modules/.bin/",i=[];if(e.containingJavaScript||e.containingTypeScript){const t=`\n '${Te(e)}': [${JSON.stringify(`${n}eslint --fix${me.getLintFixSuffix(e)}`)}, '${n}prettier --cache --write'],`;i.push(t)}const s=e.root?" && !file.includes('/packages/')":"";i.push(`\n './**/*.{${V.prettier.join(",")}}': files => {\n ${e.containingJavaScript||e.containingTypeScript?function(e){return`files = micromatch.not(files, '${Te(e)}');`}(e):""}\n const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${s});\n if (filteredFiles.length === 0) return [];\n const commands = [\`${n}prettier --cache --write \${filteredFiles.join(' ')}\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('${n}sort-package-json');\n }\n return commands;\n },`),e.containingPubspecYaml&&i.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 },");e.containingPoetryLock&&i.push("\n './**/*.py': [\n 'poetry run isort --profile black --filter-files',\n 'poetry run black',\n 'poetry run flake8'\n ],");const r=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}\n\nmodule.exports = {${i.join("")}\n};\n`,a=t.resolve(e.dirPath,".lintstagedrc.cjs");await j.run((()=>o.promises.rm(t.resolve(e.dirPath,".lintstagedrc.js"),{force:!0}))),await j.run((()=>o.promises.rm(t.resolve(e.dirPath,".lintstagedrc.json"),{force:!0}))),await j.run((()=>k.generateFile(a,r)))}(e)}))}function Te(e){return`./{${be(e).join(",")}}/**/*.{${V.eslint.join(",")}}`}const Be="\n3rd-party/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.d.ts\n*.min.js\n.yarn/\n.pnp.js\n";async function De(e){return v.functionIgnoringException("generatePrettierignore",(async()=>{const n=t.resolve(e.dirPath,".prettierignore"),i=await k.readFileIgnoringError(n)??"",s=M.getHeadUserContent(i),o=M.getTailUserContent(i),r=t.resolve(e.dirPath,".gitignore"),a=await M.readGitignoreWithoutSeparators(r)||"";let c="";e.containingPubspecYaml&&(c="\nandroid/app/\nios/Runner/Assets.xcassets/\npubspec.yaml\n");const l=s+Be+c+a+o;await j.run((()=>k.generateFile(n,l)))}))}const Ie={venvPath:".",venv:".venv"};async function Ae(e){return v.functionIgnoringException("generatePyrightConfigJson",(async()=>{let n=m(Ie);const i=t.resolve(e.dirPath,"pyrightconfig.json");try{const e=await o.promises.readFile(i,"utf8"),t=JSON.parse(e);n=p.all([n,t,n],{arrayMerge:ne})}catch{}const s=JSON.stringify(n);await j.run((()=>k.generateFile(i,s)))}))}const We="[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)";async function Ne(e){return v.functionIgnoringException("generateReadme",(async()=>{const n=t.resolve(e.dirPath,"README.md");let i=await o.promises.readFile(n,"utf8");o.existsSync(t.resolve(e.dirPath,".releaserc.json"))&&(i=Ce(i,We));const s=e.repository?.slice(e.repository?.indexOf(":")+1),r=o.readdirSync(`${e.dirPath}/.github/workflows`);for(const n of r){if(!n.startsWith("test")&&!n.startsWith("deploy"))continue;let r=n;r=r[0].toUpperCase()+r.slice(1,r.indexOf(".")),r=r.replace("-"," ");const a=`[![${r}](https://github.com/${s}/actions/workflows/${n}/badge.svg)](https://github.com/${s}/actions/workflows/${n})`;o.existsSync(t.resolve(e.dirPath,`.github/workflows/${n}`))&&(i=Ce(i,a))}await j.run((()=>k.generateFile(n,i)))}))}function Ce(e,t){e=e.replace(t,"").replaceAll(/\n\n\n+/g,"\n\n");for(let n=0;n<e.length;n++)if("\n"===e[n-1]&&"\n"===e[n]){const i=e.slice(0,n+1);let s=e.slice(n+1);return s.startsWith("[")||s.startsWith("!")||(s=`\n${s}`),`${i}${t}\n${s}`}return`${e}\n${t}\n`}async function Je(e){return v.functionIgnoringException("generateReleaserc",(async()=>{const n=t.resolve(e.dirPath,".releaserc.json"),i=JSON.parse(await o.promises.readFile(n,"utf8")),s=i?.plugins||[];for(let e=0;e<s.length;e++){const t=Array.isArray(s[e])?s[e][0]:s[e],n=Array.isArray(s[e])&&s[e][1]||{};"@semantic-release/commit-analyzer"===t?s[e]=["@semantic-release/commit-analyzer",p.all([n,{preset:"conventionalcommits"}],{arrayMerge:ne})]:"@semantic-release/github"===t&&(s[e]=["@semantic-release/github",p.all([n,{successComment:!1,failComment:!1,labels:["r: semantic-release"],releasedLabels:["released :bookmark:"]}],{arrayMerge:ne})])}const r=JSON.stringify(i);await j.run((()=>k.generateFile(n,r)))}))}const Le={$schema:"https://docs.renovatebot.com/renovate-schema.json",extends:["github>WillBooster/willbooster-configs:renovate.json5"]};async function ze(e){return v.functionIgnoringException("generateRenovateJson",(async()=>{let n=m(Le);const i=t.resolve(e.dirPath,".renovaterc.json");try{const e=await o.promises.readFile(i,"utf8"),t=JSON.parse(e);n=p.all([n,t,n],{arrayMerge:ne}),n.extends=n.extends.filter((e=>"@willbooster"!==e))}catch{}e.depending.blitz&&(n.packageRules??=[],n.packageRules.some((e=>e.packageNames.includes("next")))||n.packageRules.push({packageNames:["next"],enabled:!1})),await j.run((()=>o.promises.rm(t.resolve(e.dirPath,".dependabot"),{force:!0}))),await j.run((()=>o.promises.rm(t.resolve(e.dirPath,"renovate.json"),{force:!0})));const s=JSON.stringify(n);await j.run((()=>k.generateFile(i,s)))}))}function Ge(e){const t=Object.entries(e).sort((([e],[t])=>e.localeCompare(t)));for(const[n,i]of t)delete e[n],e[n]=i;return e}const He={compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"Node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["./node_modules/@types","./@types"]},include:["src/**/*","tests/**/*","scripts/**/*","packages/*/src/**/*","packages/*/tests/**/*","packages/*/scripts/**/*"]},Ue={compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"Node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["../../node_modules/@types","../../@types","./@types"]},include:["src/**/*","tests/**/*","scripts/**/*"]};async function Me(e,n){return v.functionIgnoringException("generateTsconfig",(async()=>{if(n.depending.blitz)return;let i=m(e.root?He:Ue);e.containingJsxOrTsx||e.containingJsxOrTsxInPackages||delete i.compilerOptions?.jsx,e.root&&!e.containingSubPackageJsons&&(i.include=i.include?.filter((e=>!e.startsWith("packages/*/")))),e.esmPackage&&(i.compilerOptions={...i.compilerOptions,module:"NodeNext",moduleResolution:"NodeNext"});const s=t.resolve(e.dirPath,"tsconfig.json");try{const t=await o.promises.readFile(s,"utf8"),n=JSON.parse(t);"./node_modules/@willbooster/tsconfig/tsconfig.json"===n.extends&&delete n.extends,delete i.compilerOptions?.target,e.esmPackage||(delete i.compilerOptions?.module,delete i.compilerOptions?.moduleResolution),n.compilerOptions?.jsx&&delete i.compilerOptions?.jsx,i=p.all([i,n,i],{arrayMerge:ie}),i.include=i.include?.filter((e=>!e.includes("@types")&&!e.includes("__tests__")))}catch{}Ge(i.compilerOptions??{}),i.include?.sort();const r=JSON.stringify(i);await j.run((()=>k.generateFile(s,r)))}))}const qe=["**/.git/objects/**","**/.git/subtree-cache/**","**/node_modules/**","**/tmp/**","**/temp/**","**/dist/**"];async function Ye(e){return v.functionIgnoringException("generateVscodeSettings",(async()=>{try{const n=t.resolve(e.dirPath,".vscode","settings.json"),i=await o.promises.readFile(n,"utf8");let s=JSON.parse(i);for(const e of qe)s=p.all([s,Ke(e)]);e.containingPoetryLock&&(s=p.all([s,Ke("**/.venv/**")])),e.depending.next&&(s=p.all([s,Ke("**/.next/**")])),Ge(s??{});const r=JSON.stringify(s,void 0,2);await j.run((()=>k.generateFile(n,r)))}catch{}}))}function Ke(e){return{"files.watcherExclude":{[e]:!0}}}const Ve={test:{name:"Test",on:{pull_request:{"paths-ignore":["**.md","**/docs/**"]},push:{branches:["main","wbfy"],"paths-ignore":["**.md","**/docs/**"]}},concurrency:{group:"${{ github.workflow }}-${{ github.ref }}","cancel-in-progress":!0},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},release:{name:"Release",on:{push:{branches:[]}},concurrency:{group:"${{ github.workflow }}","cancel-in-progress":!1},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},wbfy:{name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},"wbfy-merge":{name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},"semantic-pr":{name:"Lint PR title",on:{pull_request_target:{types:["opened","edited","synchronize"]}},jobs:{"semantic-pr":{uses:"WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main"}}},sync:{name:"Sync",on:{},jobs:{sync:{uses:"WillBooster/reusable-workflows/.github/workflows/sync.yml@main"}}},"notify-ready":{name:"Notify ready",on:{issues:{types:["labeled"]}},jobs:{"notify-ready":{uses:"WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main",secrets:{DISCORD_WEBHOOK_URL:"${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}"}}}},"close-comment":{name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}},"add-issue-to-project":{name:"Add issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",secrets:{GH_PROJECT_URL:"${{ secrets.GH_PROJECT_URL }}"}}}},"add-focused-issue-to-project":{name:"Add focused issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-focused-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",with:{label:"focused :dart:"},secrets:{GH_PROJECT_URL:"https://github.com/orgs/WillBooster/projects/7"}}}},"add-ready-issue-to-project":{name:"Add ready issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-ready-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",with:{label:"ready :rocket:"},secrets:{GH_PROJECT_URL:"https://github.com/orgs/WillBoosterLab/projects/5"}}}}};async function Xe(e){return v.functionIgnoringException("generateWorkflow",(async()=>{const n=t.resolve(e.dirPath,".github","workflows");await o.promises.mkdir(n,{recursive:!0});const i=t.resolve(e.dirPath,".github","semantic.yml");await j.run((()=>o.promises.rm(i,{force:!0,recursive:!0})));const s=await o.promises.readdir(n,{withFileTypes:!0}),r=new Set(["test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml","add-issue-to-project.yml","add-focused-issue-to-project.yml",...s.filter((e=>e.isFile()&&e.name.endsWith(".yml"))).map((e=>e.name))]);e.depending.semanticRelease&&r.add("release.yml"),(e.publicRepo||e.repository?.startsWith("github:WillBoosterLab/"))&&(r.add("add-ready-issue-to-project.yml"),r.add("notify-ready.yml"));for(const i of r){const s=t.basename(i,".yml");await j.run((()=>Ze(e,n,s)))}}))}async function Ze(e,n,i){let s=m(Ve[i]??{});const r=t.join(n,`${i}.yml`);try{const e=await o.promises.readFile(r,"utf8"),t=g.load(e);s=p.all([s,t,s],{arrayMerge:ie})}catch{}i.startsWith("deploy")&&(s={...s,concurrency:{group:"${{ github.workflow }}","cancel-in-progress":!1}},s.jobs&&function(e,t){const n=e[t];delete e[t],e[t]=n}(s,"jobs"),s.on?.push&&(s.on.push["paths-ignore"]=[...new Set([...s.on.push["paths-ignore"]??[],"**.md","**/docs/**"])]));for(const t of Object.values(s.jobs)){if(!t.uses?.includes?.("/reusable-workflows/"))return;Qe(e,t,i)}switch(i){case"release":if(s.on?.schedule)delete s.on.push;else{if(!(s.on?.push&&e.release.branches.length>0))return void await o.promises.rm(t.join(n,"release.yml"),{force:!0});s.on.push.branches=e.release.branches}break;case"test":s.on?.push&&(s.on.push.branches=s.on.push.branches.filter((e=>"renovate/**"!==e)));break;case"wbfy":s.on&&et(s,20,24);break;case"wbfy-merge":et(s,1,4)}if(function(e){delete e.jobs["add-to-project"]}(s),await tt(s,r),"release"===i)await o.promises.rm(t.join(n,"semantic-release.yml"),{force:!0});else if("sync"===i){if(await o.promises.rm(t.join(n,"sync-init.yml"),{force:!0}),!s.jobs.sync||!s.jobs.sync.with)return;s.jobs["sync-force"]=s.jobs.sync;const e=s.jobs.sync.with.sync_params_without_dest;if(!e)return;s.jobs.sync.with.sync_params_without_dest=`--force ${e}`,s.name="Force to Sync",s.on={workflow_dispatch:null},delete s.jobs.sync,await tt(s,t.join(n,"sync-force.yml"))}}function Qe(e,t,n){if(t.with||={},t.secrets||={},"test"!==n&&"release"!==n&&"wbfy"!==n&&"wbfy-merge"!==n&&"add-issue-to-project"!==n&&"add-focused-issue-to-project"!==n&&"add-ready-issue-to-project"!==n||(t.secrets.GH_TOKEN=e.publicRepo?"${{ secrets.PUBLIC_GH_BOT_PAT }}":"${{ secrets.GH_BOT_PAT }}"),!e.release.npm||"release"!==n&&"test"!==n||(t.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),t.secrets.FIREBASE_TOKEN&&(t.secrets.GCP_SA_KEY_JSON_FOR_FIREBASE="${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}",delete t.secrets.FIREBASE_TOKEN),(t.secrets.DISCORD_WEBHOOK_URL&&("release"===n||n.startsWith("deploy"))||t.with.server_url&&n.startsWith("deploy"))&&(t.secrets.DISCORD_WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}"),"sync"===n){const e=t.with?.sync_params_without_dest;e&&(t.with.sync_params_without_dest=e.toString().replace("sync ",""))}if(e.repository?.startsWith("github:WillBooster/")?t.uses=t.uses.replace("WillBoosterLab/","WillBooster/"):e.repository?.startsWith("github:WillBoosterLab/")&&(t.uses=t.uses.replace("WillBooster/","WillBoosterLab/")),function(e){if(!e.with)return;delete e.with.non_self_hosted,delete e.with.notify_discord,delete e.with.require_fly,delete e.with.require_gcloud,".env"===e.with.dot_env_path&&delete e.with.dot_env_path;delete e.with.cpu_arch}(t),n.startsWith("deploy")&&t.secrets.FLY_API_TOKEN&&t.with.deploy_command&&(t.with.deploy_command=t.with.deploy_command.toString().replace(/\s+--json/,"")),e.containingDockerfile&&("extra-large"!==t.with.ci_size&&(n.startsWith("deploy")||n.startsWith("test"))&&(t.with.ci_size="large"),n.startsWith("deploy")&&(t.with.cpu_arch="X64")),"release"===n||"test"===n||"wbfy"===n||"wbfy-merge"===n||n.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length>0?Ge(t.with):delete t.with,Object.keys(t.secrets).length>0){const e=Ge(t.secrets);delete t.secrets,t.secrets=e}else delete t.secrets}function et(e,t,n){const[i,s]=(e.on.schedule?.[0]?.cron??"").split(" ").map(Number);if(0!==i&&Number.isInteger(s)){const e=(s+9)%24;if(t<n?t<=e&&e<n:t<=e||e<n)return}const o=`${1+Math.floor(59*Math.random())} ${(t+Math.floor(Math.random()*(n-t))-9+24)%24} * * *`;e.on.schedule=[{cron:o}]}async function tt(e,t){const n=g.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await o.promises.writeFile(t,n)}async function nt(e){return v.functionIgnoringException("generateYarnrcYml",(async()=>{const n=O("yarn",["--version"],e.dirPath),i=function(e,t){const n=O("npm",["show",e,"versions","--json"],t);return JSON.parse(n).at(-1)}("@yarnpkg/cli",e.dirPath);it(n)<=it(i)&&n!==i&&E("yarn",["set","version",i],e.dirPath,1);const s=t.join(e.dirPath,".yarn","releases");await o.promises.mkdir(s,{recursive:!0});for(const e of await o.promises.readdir(s))e.startsWith("yarn-")&&!e.startsWith(`yarn-${i}.`)&&(await j.run((()=>o.promises.rm(t.join(s,e)))),console.log("Removed",t.join(s,e)));const r=t.resolve(e.dirPath,".yarnrc");await j.run((()=>o.promises.rm(r,{force:!0})));const a=t.resolve(e.dirPath,".yarnrc.yml"),c=g.load(await o.promises.readFile(a,"utf8"));c.defaultSemverRangePrefix="",c.nodeLinker="node-modules",c.nmMode="hardlinks-global",0===c.injectEnvironmentFiles?.length&&delete c.injectEnvironmentFiles,c.enableGlobalCache=!0;const l=c.plugins?.length??0;if(c.plugins=c.plugins?.filter((e=>".yarn/plugins/undefined.cjs"!==e.path))??[],c.plugins.length!==l){const n=t.resolve(e.dirPath,".yarnrc","undefined.cjs");await j.run((()=>o.promises.rm(n,{force:!0})))}0===c.plugins.length&&delete c.plugins,await o.promises.writeFile(a,g.dump(c,{lineWidth:-1})),E("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)}))}function it(e){const[t]=e.split(".");return Number(t)}async function st(e){return v.functionIgnoringException("setupLabels",(async()=>{if(!fe)return;const[t,n]=ye.getOrgAndName(e.repository??"");if(t&&n&&("WillBooster"===t||"WillBoosterLab"===t))try{await ot(t,n,"d1: x-easy :hedgehog:","EDE9FE"),await ot(t,n,"d2: easy :rabbit2:","DDD6FE"),await ot(t,n,"d3: medium :ox:","C4B5FD"),await ot(t,n,"d4: hard :squid:","A78BFA"),await ot(t,n,"d5: x-hard :whale2:","8B5CF6"),await ot(t,n,"p1: critical :fire::fire::fire:","EF4444"),await ot(t,n,"p2: urgent :fire::fire:","F87171"),await ot(t,n,"p3: important :fire:","FCA5A5"),await ot(t,n,"p4: nice to have :droplet:","FECACA"),await ot(t,n,"r: blitz","5300bc"),await ot(t,n,"r: firebase","ffca28"),await ot(t,n,"r: prisma","0c344b"),await ot(t,n,"r: react","61dafb"),await ot(t,n,"r: svelte","ff3e00"),await ot(t,n,"r: semantic-release","494949"),await ot(t,n,"ready :rocket:","22C55E"),await ot(t,n,"review requested :mag:","FBCA04"),await ot(t,n,"released :bookmark:","6366F1"),await ot(t,n,"s: 0.5h :clock1230:","F3F4F6"),await ot(t,n,"s: 1h :clock1:","E5E7EB"),await ot(t,n,"s: 2h :clock2:","D1D5DB"),await ot(t,n,"s: 3h :clock3:","9CA3AF"),await ot(t,n,"s: 5h :clock5:","6B7280"),await ot(t,n,"s: 8h :clock8:","4B5563"),await ot(t,n,"s: 13h :clock1:","374151"),await ot(t,n,"t: build :hammer:","BFDBFE"),await ot(t,n,"t: chore :broom:","BFDBFE"),await ot(t,n,"t: ci :construction_worker:","BFDBFE"),await ot(t,n,"t: docs :memo:","BFDBFE"),await ot(t,n,"t: feat :sparkles:","BFDBFE"),await ot(t,n,"t: fix :bug:","BFDBFE"),await ot(t,n,"t: perf :zap:","BFDBFE"),await ot(t,n,"t: refactor :recycle:","BFDBFE"),await ot(t,n,"t: style :lipstick:","BFDBFE"),await ot(t,n,"t: test :test_tube:","BFDBFE"),await ot(t,n,"project","24292F"),await ot(t,n,"focused :dart:","22C55E"),await rt(t,n,"bug"),await rt(t,n,"documentation"),await rt(t,n,"duplicate"),await rt(t,n,"enhancement"),await rt(t,n,"good first issue"),await rt(t,n,"help wanted"),await rt(t,n,"invalid"),await rt(t,n,"question"),await rt(t,n,"wontfix"),await rt(t,n,"ready"),await rt(t,n,"review requested"),await rt(t,n,"released"),await rt(t,n,"semantic-release")}catch(e){console.warn("Skip setupLabels due to:",e?.stack??e)}}))}async function ot(e,t,n,i){try{await he.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:n,color:i})}catch{await he.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n,color:i})}}async function rt(e,t,n){try{await he.request("DELETE /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n})}catch{}}const at=["READY_DISCORD_WEBHOOK_URL"];async function ct(e){return v.functionIgnoringException("setupSecrets",(async()=>{if(!fe)return;const[t,n]=ye.getOrgAndName(e.repository??"");if(!t||!n||"WillBoosterLab"!==t)return;const i=f.config().parsed||{};if(0!==Object.keys(i).length)try{for(const e of at)try{await he.request("DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:e})}catch{}const s=await he.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:n}),{key:o,key_id:r}=s.data;await h.ready;for(const[s,a]of Object.entries(i)){if(e.publicRepo&&"GH_BOT_PAT"===s)continue;if(!e.publicRepo&&"PUBLIC_GH_BOT_PAT"===s)continue;const i=h.from_base64(o,h.base64_variants.ORIGINAL),c=h.from_string(a),l=h.crypto_box_seal(c,i),p=h.to_base64(l,h.base64_variants.ORIGINAL);await he.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:s,encrypted_value:p,key_id:r})}}catch(e){console.warn("Skip setupSecrets due to:",e?.stack??e)}}))}async function lt(e){const[t,n]=ye.getOrgAndName(e.repository??"");t&&n&&("WillBooster"!==t&&"WillBoosterLab"!==t||await he.request("PATCH /repos/{owner}/{repo}",{owner:t,repo:n,allow_merge_commit:!1,allow_squash_merge:!0,allow_rebase_merge:!1,delete_branch_on_merge:!0,squash_merge_commit_title:"PR_TITLE",squash_merge_commit_message:"BLANK",headers:{"X-GitHub-Api-Version":"2022-11-28"},...e.repository?.startsWith("github:WillBooster/")?{allow_auto_merge:!0}:{}}))}const pt={"pull_request_template.md":'\nClose #<IssueNumber>\n\n## Self Check\n\n- [ ] I\'ve confirmed `All checks have passed` on PR page. (You may leave this box unchecked due to long workflows.)\n - PR title follows [Angular\'s commit message format](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#-commit-message-format).\n - PR title doesn\'t have `WIP:`.\n - All tests are passed.\n - Test command (e.g., `yarn test`) is passed.\n - Lint command (e.g., `yarn lint`) is passed.\n- [ ] I\'ve reviewed my changes on PR\'s diff view.\n\n\x3c!-- Please add screenshots if you modify the UI. Otherwise, remove the following table. --\x3e\n| Current | In coming |\n| ------------------------ | ------------------------ |\n| <img src="" width="400"> | <img src="" width="400"> |\n'.trim()};async function dt(e){return v.functionIgnoringException("generateGitHubTemplates",(async()=>{for(const[n,i]of Object.entries(pt)){const s=t.resolve(e.dirPath,".github",n);if(o.existsSync(s)){const e=await o.promises.readFile(s,"utf8");if(y(e,i)>i.length/2)continue}await j.run((()=>k.generateFile(s,i)))}}))}async function ut(n){const i=t.resolve(n,"package.json");try{const s=o.existsSync(i);let r={},a={},c={},l=!1;if(s){const e=o.readFileSync(i,"utf8");c=JSON.parse(e),r=c.dependencies??{},a=c.devDependencies??{},l="module"===c.type}let p=[],d=[];try{const i=t.resolve(n,".releaserc.json"),s=JSON.parse(await e.readFile(i,"utf8"));p=s?.branches||[],d=s?.plugins?.flat()||[]}catch{}const u="packages"!==t.basename(t.resolve(n,".."))||!o.existsSync(t.resolve(n,"..","..","package.json"));let m;u&&(m=await async function(e,t){const n=w(e),i=(await n.getRemotes(!0)).find((e=>"origin"===e.name)),s=i?.refs?.fetch??i?.refs?.push;if("string"==typeof s){const e=await gt(s);if(e)return e}const o="string"==typeof t.repository?t.repository:t.repository?.url;if(o){const e=await gt(o);if(e&&"Not Found"!==e.message)return e}}(n,c));let g="";try{g+=(await e.readFile(t.resolve(n,".tool-versions"),"utf8")).trim()}catch{}for(const[i,s]of[["java","java"],["node","nodejs"],["python","python"]])try{const o=await e.readFile(t.resolve(n,`.${i}-version`),"utf8");g&&(g+="\n"),g+=s+" "+o.trim()}catch{}const f={dirPath:n,root:u,publicRepo:!1===m?.private,referredByOtherRepo:!!c.files,repository:m?.full_name?`github:${m?.full_name}`:void 0,esmPackage:l,willBoosterConfigs:i.includes(`${t.sep}willbooster-configs`),containingSubPackageJsons:mt("packages/**/package.json",n),containingDockerfile:o.existsSync(t.resolve(n,"Dockerfile"))||o.existsSync(t.resolve(n,"docker-compose.yml")),containingGemfile:o.existsSync(t.resolve(n,"Gemfile")),containingGoMod:o.existsSync(t.resolve(n,"go.mod")),containingPackageJson:o.existsSync(t.resolve(n,"package.json")),containingPoetryLock:o.existsSync(t.resolve(n,"poetry.lock")),containingPomXml:o.existsSync(t.resolve(n,"pom.xml")),containingPubspecYaml:o.existsSync(t.resolve(n,"pubspec.yaml")),containingTemplateYaml:o.existsSync(t.resolve(n,"template.yaml")),containingVscodeSettingsJson:o.existsSync(t.resolve(n,".vscode","settings.json")),containingJavaScript:mt("{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx}",n),containingTypeScript:mt("{app,src,tests,scripts}/**/*.{cts,mts,ts,tsx}",n),containingJsxOrTsx:mt("{app,src,tests}/**/*.{t,j}sx",n),containingJavaScriptInPackages:mt("packages/**/{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx}",n),containingTypeScriptInPackages:mt("packages/**/{app,src,tests,scripts}/**/*.{cts,mts,ts,tsx}",n),containingJsxOrTsxInPackages:mt("packages/**/{app,src,tests}/**/*.{t,j}sx",n),depending:{blitz:!!r.blitz,firebase:!!a["firebase-tools"],next:!!r.next,playwrightTest:!!r["@playwright/test"]||!!a["@playwright/test"]||!!a.playwright,prisma:!!r.prisma,pyright:!!a.pyright,reactNative:!!r["react-native"],semanticRelease:!!(a["semantic-release"]||p.length>0||d.length>0),storybook:!!a["@storybook/react"],wb:!!(r["@willbooster/wb"]||a["@willbooster/wb"]||r["@willbooster/shared-scripts"]||a["@willbooster/shared-scripts"])},release:{branches:p,github:d.includes("@semantic-release/github"),npm:d.includes("@semantic-release/npm")},versionsText:g,packageJson:c};if(f.eslintBase=function(e){if(e.depending.blitz)return"@willbooster/eslint-config-blitz-next";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"}(f),f.containingGemfile||f.containingGoMod||f.containingPackageJson||f.containingPoetryLock||f.containingPomXml||f.containingPubspecYaml||f.containingTemplateYaml)return f}catch{}}function mt(e,t){return a(e,{dot:!0,cwd:t}).length>0}async function gt(e){const[t,n]=ye.getOrgAndName(e);if(!t||!n)return;const i={full_name:`${t}/${n}`};try{const e=await he.request("GET /repos/{owner}/{repo}",{owner:t,repo:n});Object.assign(i,e.data)}catch{}return i}await async function(){const n=await s(process.argv.slice(2)).command("$0 [paths..]","Make a given project follow the WillBooster standard",(e=>{e.positional("paths",{describe:"project paths to be wbfied",array:!0,type:"string",default:["."]})})).options({skipDeps:{description:"Skip dependency installation",type:"boolean",default:!1,alias:"d"},verbose:{description:"Whether or not to enable verbose mode",type:"boolean",default:!1,alias:"v"}}).strict().argv;b.isVerbose=n.verbose;for(const s of n.paths){const o=t.join(s,"packages"),r=(await i((()=>e.readdir(o,{withFileTypes:!0})))??[]).filter((e=>e.isDirectory())).map((e=>t.join(o,e.name)));await $([s,...r]);const a=_(s),c=await ut(s);if(!c){console.error(`there is no valid package.json in ${s}`);continue}const l=(await Promise.all(r.map((e=>ut(e))))).filter((e=>!!e)),p=[c,...l];if(b.isVerbose)for(const e of p)console.info(e);await W(c),await nt(c),await Promise.all([x(c),F(c),a.then((()=>Ne(c))),K(c),Z(c),re(c),dt(c),Se(c),Oe(c),Re(c),ze(c),Je(c),Xe(c),st(c),ct(c),lt(c)]),await j.promiseAll();const d=[];for(const e of p)(e.containingTypeScript||e.containingTypeScriptInPackages)&&d.push(S(e,e.root?p:[e])),e.depending.playwrightTest&&d.push(P(c)),await le(e,c),await j.promiseAll(),(e.root||e.containingPackageJson)&&(await De(e),await xe(e,c,n.skipDeps),d.push(Re(e)),e.containingVscodeSettingsJson&&e.containingPackageJson&&d.push(Ye(e)),(e.containingTypeScript||e.containingTypeScriptInPackages)&&d.push(Me(e,c)),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(c.willBoosterConfigs||d.push(se(e,c)),d.push(te(e))),e.depending.pyright&&d.push(Ae(e)));await Promise.all(d),await j.promiseAll(),E("yarn",["cleanup"],s),E("yarn",["install"],s)}}();
1
+ import e from"node:fs/promises";import t from"node:path";import{ignoreEnoentAsync as n,withRetry as i,ignoreErrorAsync as s}from"@willbooster/shared-lib";import o from"yargs";import r from"node:fs";import{globby as a,globbySync as c}from"globby";import{PromisePool as l}from"minimal-promise-pool";import p from"node:child_process";import d from"deepmerge";import u from"node:os";import{Octokit as m}from"@octokit/core";import g from"lodash.clonedeep";import f from"js-yaml";import h from"dotenv";import y from"libsodium-wrappers";import{distance as w}from"fastest-levenshtein";import{simpleGit as b}from"simple-git";const v=new class{constructor(){this.isVerbose=!1}};const k=new class{async functionIgnoringException(e,t){v.isVerbose&&console.info(`--------- ${e} start ---------`);try{await t()}catch(t){console.info(`Error occurred in ${e}: ${t instanceof Error?t.stack:t}}`)}v.isVerbose&&console.info(`---------- ${e} end ----------`)}},j={async readFileIgnoringError(t){try{return await e.readFile(t,"utf8")}catch{}},async generateFile(t,n){await e.writeFile(t,n),console.log(`Generated/Updated ${t}`)}},x=new l;async function _(e){return k.functionIgnoringException("fixAbbreviations",(async()=>{const n=await a("**/*.md",{dot:!0,cwd:e,gitignore:!0});v.isVerbose&&console.info(`Found ${n.length} markdown files in ${e}`);for(const i of n){const n=t.join(e,i);await x.run((async()=>{const e=await r.promises.readFile(n,"utf8"),t=e.replaceAll("c.f.","cf.").replaceAll("eg.","e.g.").replaceAll("ie.","i.e.");e!==t&&await j.generateFile(n,t)}))}const i=await a(["{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx,cts,mts,ts,tsx}","packages/**/{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx,cts,mts,ts,tsx}"],{dot:!0,cwd:e,gitignore:!0});v.isVerbose&&console.info(`Found ${i.length} TypeScript files in ${e}`);for(const n of i){const i=t.join(e,n),s=await r.promises.readFile(i,"utf8"),o=s.replaceAll(/\/\/(.*)c\.f\./g,"//$1cf.").replaceAll(/\/\/(.*)eg\./g,"//$1e.g.").replaceAll(/\/\/(.*)ie\./g,"//$1i.e.");s!==o&&await j.generateFile(i,o)}await x.promiseAll()}))}async function P(n){return k.functionIgnoringException("fixDockerfile",(async()=>{if(!n.containingDockerfile)return;const i=t.join(n.dirPath,"Dockerfile"),s=await e.readFile(i,"utf8");let o=s.replaceAll("then(process.stdout.write)","then(t => process.stdout.write(t))");s.includes("FROM node")&&(o=o.replaceAll(/curl https:\/\/raw.githubusercontent.com\/WillBooster(\S+)/g,"node -e 'fetch(\"https://raw.githubusercontent.com/WillBooster$1\").then(r => r.text()).then(t => process.stdout.write(t))'").replaceAll("wb db","wb prisma"),o.includes("node node_modules/.bin/wb")&&!o.includes("procps")&&(o=o.replaceAll(/apt-get -qq install -y --no-install-recommends (.+)\\/g,((e,t)=>{const n=t.trim().split(/\s+/);return n.push("procps"),`apt-get -qq install -y --no-install-recommends ${n.sort().join(" ")} \\`})))),s!==o&&await e.writeFile(i,o)}))}async function F(n){return k.functionIgnoringException("fixPlaywrightConfig",(async()=>{const i=t.join(n.dirPath,"playwright.config.ts"),s=await e.readFile(i,"utf8"),o=s.replace(/retries:.+,/,"retries: process.env.PWDEBUG ? 0 : process.env.CI ? 5 : 1,");s!==o&&await e.writeFile(i,o)}))}async function $(n){return k.functionIgnoringException("fixPrismaEnvFiles",(async()=>{const i=await a(["*.env","*.env.*"],{dot:!0,cwd:n.dirPath});for(const s of i){const i=t.resolve(n.dirPath,s),o=(await e.readFile(i,"utf8")).replace(/DATABASE_URL="?(.+\.sqlite3)"?[\n$]/,'DATABASE_URL="$1?connection_limit=1"\n');await e.writeFile(i,o)}}))}async function S(e){return k.functionIgnoringException("fixTestDirectories",(async()=>{await Promise.all(e.map((async e=>{const n=t.join(e,"__tests__"),i=t.join(e,"tests");try{await r.promises.rename(n,i);const s=await r.promises.readFile(t.join(e,"package.json"),"utf8"),o=s.replaceAll("__tests__","tests");if(s===o)return;await r.promises.writeFile(t.join(e,"package.json"),o)}catch{}})))}))}async function E(i,s){return k.functionIgnoringException("fixTypeDefinitions",(async()=>{const o=t.resolve(i.dirPath,"@types"),r=i.root&&i.containingSubPackageJsons?void 0:t.resolve(i.dirPath,"src","types"),a=await n((()=>e.readdir(o,{withFileTypes:!0})));if(a)for(const i of a){const a=i.name.slice(0,-5),c=i.name.endsWith(".d.ts");let l=c?a:i.name;l.includes("__")&&(l=`@${l.replace("__","/")}`);const p=s.some((e=>e.packageJson?.dependencies?.[l]||e.packageJson?.devDependencies?.[l]));i.isFile()&&c?p?(await e.mkdir(t.join(o,a)),await x.run((()=>e.rename(t.join(o,i.name),t.join(o,a,"index.d.ts"))))):r&&(await e.mkdir(r,{recursive:!0}),await x.run((()=>e.rename(t.join(o,i.name),t.join(r,i.name))))):i.isDirectory()&&r&&!p&&(await e.mkdir(r,{recursive:!0}),await x.run((()=>n((()=>e.rename(t.join(o,i.name,"index.d.ts"),t.join(r,`${i.name}.d.ts`)))))))}}))}function O(e,t,n,i=0){do{const[i,s,o]=T(e,t,n);console.log(`$ ${i} ${s.join(" ")} at ${o.cwd}`);if(0===p.spawnSync(i,s,o).status)break}while(--i>=0)}function R(e,t,n){const[i,s,o]=T(e,t,n);o.stdio="pipe";const r=p.spawnSync(i,s,o),a=r.stderr.toString().trim();return a&&console.error(`${i} [${s.map((e=>`"${e}"`))}] caused the following error:\n ${a}`),r.stdout.toString().trim()}function T(e,t,n){const i={...process.env};return i.PATH&&i.BERRY_BIN_FOLDER&&(i.PATH=i.PATH.replace(`${i.BERRY_BIN_FOLDER}:`,"")),i.ASDF_DIR&&(t=["-l","-c",`. ${i.ASDF_DIR}/asdf.sh && ${e} ${t.join(" ")}`],e="bash"),[e,t,{cwd:n,env:i,shell:!1,stdio:"inherit"}]}function B(e){const t=e.split(/[+.-]/).map(Number).filter(Number.isNaN);let n=0,i=1;for(const e of t)n+=e*i,i/=1e3;return n}const D="3.9.17",I="zulu-11.66.15",A="2.0.0-beta.33",W="13.4.12";async function N(e){return k.functionIgnoringException("generateVersionConfigs",(async()=>{await async function(e){if(!e.versionsText)return;const n=e.versionsText.trim().split("\n").map((e=>{const[t,n]=e.trim().split(/\s+/);return`${C.has(t)?" ":""}${t} ${n}`})).sort().map((e=>e.trim())),i=[...new Set(n)];if(e.containingPoetryLock){const e=await fetch("https://pypi.org/pypi/poetry/json"),t=await e.json(),n=t?.info?.version;n&&L(i,"poetry",t?.info?.version),L(i,"python",D,!0)}e.depending.firebase&&L(i,"java",I,!0);if(e.containingPackageJson){const t=R("npm",["show","yarn","version"],e.dirPath);L(i,"yarn",t)}for(const n of J){const i=t.resolve(e.dirPath,`.${n}-version`);r.promises.rm(i,{force:!0})}const s=t.resolve(e.dirPath,".tool-versions");await(i.length>0?x.run((()=>r.promises.writeFile(s,i.join("\n")+"\n"))):x.run((()=>r.promises.rm(s,{force:!0})))),await x.promiseAll(),O("asdf",["plugin","update","--all"],e.dirPath),O("asdf",["install"],e.dirPath)}(e)}))}const C=new Set(["java","nodejs","python"]),J=["java","node","python"];function L(e,t,n,i=!1){const s=e.findIndex((e=>e.split(/\s+/)[0]===t)),o=`${t} ${n}`;if(s>=0){const[,t]=e[s].split(/\s+/);B(n)>B(t)&&(e[s]=o)}else e.splice(i?0:e.length,0,o)}const z="# Project-specific settings",G=/# Project-specific settings[^\n]*\n/gm,H="# Generated by wbfy",U=`${z} (head)\n\n\n${H}\n`,M=`\n${z} (tail)\n`,q={separator:H,separatorPrefix:"# Generated by ",defaultHeadUserContent:U,defaultTailUserContent:M,async readGitignoreWithoutSeparators(e){try{let t=await r.promises.readFile(e,"utf8");const n=Y(t);return n>0&&(t=t.slice(0,n-1)),t.replaceAll(G,"").replaceAll(/# Generated by [^\n]*\n/gm,"").replaceAll(/\r?\n\r?\n(\r?\n)+/gm,"\n\n").trim()+"\n"}catch{}},getHeadUserContent(e){const t=e.indexOf(this.separatorPrefix);return t>=0?e.slice(0,e.indexOf("\n",t)+1).replaceAll(G,`${z} (head)\n`):U},getTailUserContent(e){const t=Y(e);return t>0?e.slice(t-1):M},async isBerryZeroInstallEnabled(e){try{return(await r.promises.readFile(e,"utf8")).includes("\n!.yarn/cache")}catch{return!1}}};function Y(e){const t=e.indexOf(z),n=e.lastIndexOf(z);return n>t?n:-1}const K="\n**/*.sqlite3*\n.yarn/install-state.gz\n";async function V(e){return k.functionIgnoringException("generateDockerignore",(async()=>{const n=t.resolve(e.dirPath,".dockerignore");if(e.containingDockerfile){const e=await j.readFileIgnoringError(n)??"",t=q.getHeadUserContent(e),i=q.getTailUserContent(e),s=t+K+i;await x.run((()=>j.generateFile(n,s)))}else await r.promises.rm(n,{force:!0})}))}const X={codeWith2IndentSize:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","cpp","dart","htm","html","pu","puml","rb","vue","yaml","yml"].sort(),codeWith4IndentSize:["go","gradle","py"].sort(),codeWith8IndentSize:["sh"].sort(),markdownLike:["md"].sort(),eslint:["cjs","mjs","js","cts","mts","ts","tsx","jsx"].sort(),prettier:["cjs","mjs","js","jsx","cts","mts","ts","tsx","json","json5","css","htm","html","md","scss","vue","yaml","yml"].sort()},Z=`root = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n${ee(X.codeWith2IndentSize)}\nindent_size = 2\nindent_style = space\n\n${ee(X.codeWith4IndentSize)}\nindent_size = 4\nindent_style = space\n\n${ee(X.codeWith8IndentSize)}\nindent_size = 8\nindent_style = space\n\n${ee(X.markdownLike)}\nmax_line_length = off\ntrim_trailing_whitespace = false\n\n[{Makefile,*.mk}]\nindent_style = tab\n`;async function Q(e){return k.functionIgnoringException("generateEditorconfig",(async()=>{const n=t.resolve(e.dirPath,".editorconfig");await x.run((()=>j.generateFile(n,Z)))}))}function ee(e){return e.length>1?`[*.{${e.join(",")}}]`:`[*.${e[0]}]`}const te="\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";async function ne(e){return k.functionIgnoringException("generateEslintignore",(async()=>{const n=t.resolve(e.dirPath,".eslintignore"),i=await j.readFileIgnoringError(n)??"",s=q.getHeadUserContent(i),o=q.getTailUserContent(i),r=t.resolve(e.dirPath,".gitignore"),a=await q.readGitignoreWithoutSeparators(r)||"",c=s+te+a+o;await x.run((()=>j.generateFile(n,c)))}))}function ie(e,t){return t}function se(e,t,n){const i=[...e];for(const[s,o]of t.entries())void 0===i[s]?i[s]=n.cloneUnlessOtherwiseSpecified(o,n):n.isMergeableObject(o)?i[s]=d(e[s],o,n):e.includes(o)||i.push(o);return i}async function oe(e,n){return k.functionIgnoringException("generateEslintrc",(async()=>{const i=[];e.eslintBase&&i.push(e.eslintBase),e!==n&&i.push("../../.eslintrc.json");let s={root:!0,extends:i};const o=t.resolve(e.dirPath,".eslintrc.json");try{const t=await r.promises.readFile(o,"utf8"),n=JSON.parse(t);n.extends&&(n.extends=n.extends.filter((e=>!e.startsWith("@willbooster/")&&"../../.eslintrc.json"!==e))),0===i.length&&(n.extends=[]);const a=s.extends;s.extends=n.extends,n.extends=a,s=d.all([s,n,s],{arrayMerge:se}),e.depending.blitz&&(s.extends=s.extends.filter((e=>"./node_modules/@blitzjs/next/eslint"!==e)))}catch{}const a=JSON.stringify(s);await x.run((()=>j.generateFile(o,a)))}))}const re=`* text=auto\n\n*.vcproj text eol=crlf\n\n${[...X.codeWith2IndentSize,...X.codeWith4IndentSize,...X.markdownLike].map((e=>`*.${e} text eol=lf`)).join("\n")}\n`;async function ae(e){return k.functionIgnoringException("generateGitattributes",(async()=>{const n=t.resolve(e.dirPath,".gitattributes");await x.run((()=>j.generateFile(n,re)))}))}const ce=["windows","macos","linux","jetbrains","visualstudiocode","emacs","vim","yarn"],le="\n.devcontainer/\ndist/\ntemp/\nIcon[\r]\n!.keep\n*/mount/*.hash\n\n";async function pe(e,n){return k.functionIgnoringException("generateGitignore",(async()=>{const i=t.resolve(e.dirPath,".gitignore"),s=await j.readFileIgnoringError(i)??"";let o=q.getHeadUserContent(s)+le;const r=q.getTailUserContent(s),a=[...ce];e.containingGemfile&&a.push("ruby"),e.containingGoMod&&(a.push("go"),o+=`${t.basename(e.dirPath)}\n`),e.containingPackageJson&&a.push("node"),e.containingPomXml&&(a.push("maven"),o+=".idea/google-java-format.xml\n"),e.containingPubspecYaml&&(a.push("flutter","AndroidStudio","ruby"),o+=".flutter-plugins-dependencies\nandroid/key.properties\nios/.bundle\n.idea/runConfigurations.xml\n"),e.containingTemplateYaml&&(o+=".aws-sam/\npackaged.yaml\n"),e.containingPoetryLock&&(a.push("python"),o+=".venv/\n"),e.depending.blitz&&(o+=".blitz/\n.blitz**\n"),e.depending.next&&a.push("nextjs"),(n.depending.firebase||e.depending.firebase)&&a.push("firebase"),n.depending.prisma&&(o+="*.sqlite3\n*.sqlite3-journal\n"),e.depending.playwrightTest&&(o+="test-results/\n"),(n.depending.reactNative||e.depending.reactNative)&&(a.push("reactnative"),o+="google-services.json\nandroid/app/src/main/assets/\n"),e.depending.storybook&&a.push("storybookjs");let c="";for(const e of a){let t=await me(e)??"";if(!t){const n=`https://www.toptal.com/developers/gitignore/api/${e}`,i=await fetch(n),s=await i.text();if(s.includes("Attention Required!"))return void console.error(`Failed to fetch ${n}`);t=s.trim(),await x.run((()=>ue(e,t))),v.isVerbose&&console.info(`Fetched ${n}`)}c&&(c+="\n"),c+=t+"\n"}await q.isBerryZeroInstallEnabled(i)||(c=c.replace("!.yarn/cache","# !.yarn/cache").replace("# .pnp.*",".pnp.*")),(e.containingPomXml||e.containingPubspecYaml)&&(c=c.replaceAll(/^# .idea\/artifacts$/gm,".idea/artifacts").replaceAll(/^# .idea\/compiler.xml$/gm,".idea/compiler.xml").replaceAll(/^# .idea\/jarRepositories.xml$/gm,".idea/jarRepositories.xml").replaceAll(/^# .idea\/modules.xml$/gm,".idea/modules.xml").replaceAll(/^# .idea\/*.iml$/gm,".idea/*.iml").replaceAll(/^# .idea\/modules$/gm,".idea/modules").replaceAll(/^# *.iml$/gm,"*.iml").replaceAll(/^# *.ipr$/gm,"*.ipr"),e.containingPubspecYaml&&(c=c.replaceAll(/^.idea\/modules.xml$/gm,"# .idea/modules.xml"))),c=c.replaceAll(/^.idea\/?$/gm,"# .idea"),(n.depending.reactNative||e.depending.reactNative||e.containingPubspecYaml)&&(c=c.replaceAll(/^(.idea\/.+)$/gm,"$1\nandroid/$1"));const l=o+c+r;await x.run((()=>j.generateFile(i,l)))}))}const de=t.join(u.homedir(),".cache","wbfy","gitignore");async function ue(e,n){await r.promises.mkdir(de,{recursive:!0}),await r.promises.writeFile(t.join(de,e),n)}async function me(e){try{const n=await r.promises.stat(t.join(de,e));if(Date.now()-n.mtimeMs>216e5)return;return await r.promises.readFile(t.join(de,e),"utf8")}catch{}}const ge={getLintFixSuffix:e=>e.containingJsxOrTsx?' --rule "{ react-hooks/exhaustive-deps: 0 }"':""},fe=process.env.GH_BOT_PAT||process.env.PUBLIC_GH_BOT_PAT||process.env.GH_TOKEN||process.env.GITHUB_TOKEN,he=!!fe,ye=new m({auth:fe});const we=new class{getOrgAndName(e){const t=e.split(":").at(-1),n=t?.split("/");return[n?.at(-2)??"",n?.at(-1)?.replace(/.git$/,"")??""]}},be={node:["src","tests","scripts"].sort(),blitz:["src","tests","scripts","db","integrations","mailers"].sort()};function ve(e){return e.depending.blitz?be.blitz:be.node}const ke=["eslint","eslint-config-prettier","eslint-plugin-import","eslint-plugin-sort-class-members","eslint-plugin-sort-destructure-keys","eslint-plugin-unicorn"],je=[...ke,"@typescript-eslint/eslint-plugin","@typescript-eslint/parser","eslint-import-resolver-typescript"],xe=["eslint-plugin-react","eslint-plugin-react-hooks"],_e={"@willbooster/eslint-config-js":["@willbooster/eslint-config-js",...ke],"@willbooster/eslint-config-js-react":["@willbooster/eslint-config-js-react",...ke,...xe],"@willbooster/eslint-config-ts":["@willbooster/eslint-config-ts",...je],"@willbooster/eslint-config-ts-react":["@willbooster/eslint-config-ts-react",...je,...xe],"@willbooster/eslint-config-blitz-next":["@willbooster/eslint-config-blitz-next","eslint-config-next",...je,...xe],"@willbooster/eslint-config-next":["@willbooster/eslint-config-next","eslint-config-next",...je,...xe]};async function Pe(e,n,i){return k.functionIgnoringException("generatePackageJson",(async()=>{await async function(e,n,i){const s=t.resolve(e.dirPath,"package.json"),o=await r.promises.readFile(s,"utf8"),c=JSON.parse(o);c.scripts=c.scripts||{},c.dependencies=c.dependencies||{},c.devDependencies=c.devDependencies||{},c.peerDependencies=c.peerDependencies||{},await async function(e){"WillBooster LLC"===e.author&&(e.author="WillBooster Inc.");delete e.scripts["sort-package-json"],delete e.scripts["sort-all-package-json"],delete e.scripts["typecheck/warn"],delete e.scripts["typecheck:gen-code"],delete e.scripts["typecheck:codegen"],delete e.dependencies["@willbooster/shared-scripts"],delete e.dependencies.tslib,delete e.devDependencies["@willbooster/eslint-config"],delete e.devDependencies["@willbooster/eslint-config-react"],delete e.devDependencies["@willbooster/renovate-config"],delete e.devDependencies["@willbooster/shared-scripts"],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(const t of Object.values(_e))for(const n of t)delete e.devDependencies[n];await x.run((()=>r.promises.rm("lerna.json",{force:!0})))}(c),"@willbooster/prettier-config"!==c.name&&(c.prettier="@willbooster/prettier-config");for(const[e,t]of Object.entries(c.scripts))t.includes("git clone")||(c.scripts[e]=t.replace(/yarn\s*&&\s*/,"").replace(/yarn\s*install\s*&&\s*/,""));c.scripts=d(c.scripts,Fe(e)),c.scripts.prettify+=await async function(e){const n=t.resolve(e,".prettierignore"),i=await r.promises.readFile(n,"utf8"),s=i.indexOf(q.separatorPrefix);if(s<0)return"";const o=i.slice(0,s);return o.split("\n").map((e=>{const t=e.trim();return t.endsWith("/")?t.slice(0,-1):t})).filter((e=>e&&!e.startsWith("#")&&!e.includes("/"))).map((e=>` "!**/${e}/**"`)).join("")}(e.dirPath);for(const[e,t]of Object.entries(c.scripts))t?.includes("yarn workspaces foreach")&&(t.includes("--all")||t.includes("--recursive")||t.includes("--since")||t.includes("--worktree")||(c.scripts[e]=t.replace("yarn workspaces foreach","yarn workspaces foreach --all")));let l=[],p=["lint-staged","prettier","sort-package-json","@willbooster/prettier-config"];const u=[];e.root&&(p.push("husky"),(e.publicRepo||e.referredByOtherRepo)&&(p.push("pinst"),c.scripts.prepack="pinst --disable",c.scripts.postpack="pinst --enable"),e.depending.semanticRelease&&(p.push("conventional-changelog-conventionalcommits@6.1.0"),c.devDependencies["semantic-release"]||c.devDependencies["multi-semantic-release"]||c.devDependencies["@qiwi/multi-semantic-release"]||p.push("semantic-release"),c.version="0.0.0-semantically-released"),e.depending.playwrightTest&&(c.dependencies["@playwright/test"]||(p.push("@playwright/test"),delete c.dependencies["@playwright/test"]),delete c.dependencies.playwright,delete c.devDependencies.playwright),e.containingSubPackageJsons?c.workspaces=["packages/*"]:delete c.workspaces);if(e.depending.wb){c.dependencies["@willbooster/shared-scripts"]||c.dependencies["@willbooster/wb"]?l.push("@willbooster/wb"):p.push("@willbooster/wb");for(const[e,t]of Object.entries(c.scripts))c.scripts[e]=t.replace(/wb\s+db/,"wb prisma")}(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(..._e[e.eslintBase]);e.willBoosterConfigs&&(l=l.filter((e=>!e.includes("@willbooster/"))),p=p.filter((e=>!e.includes("@willbooster/"))));c.name||(c.name=t.basename(e.dirPath));e.containingSubPackageJsons&&(c.private=!0);c.license||(c.license="UNLICENSED");!c.private&&"UNLICENSED"!==c.license&&n.publicRepo&&(c.publishConfig??={},c.publishConfig.access??="public");const[m]=we.getOrgAndName(e.repository??"");"WillBooster"!==m&&"WillBoosterLab"!==m||(c.author="WillBooster Inc.");e.root||!c.private||c.main||(c.main="./src");if(delete c.resolutions?.["npm/chalk"],!e.containingSubPackageJsons){if(e.containingJavaScript||e.containingTypeScript?c.scripts["lint-fix"]+=ge.getLintFixSuffix(e):(delete c.scripts.lint,delete c.scripts["lint-fix"],c.scripts.cleanup=c.scripts.cleanup?.replace(" && yarn lint-fix","")),e.containingPubspecYaml){c.scripts.lint="flutter analyze",c.scripts["lint-fix"]="yarn lint";const n=["lib","test","test_driver"].filter((n=>r.existsSync(t.resolve(e.dirPath,n))));n.length>0&&(c.scripts["format-code"]=`flutter format $(find ${n.join(" ")} -name generated -prune -o -name '*.freezed.dart' -prune -o -name '*.g.dart' -prune -o -name '*.dart' -print)`,c.scripts.format+=" && yarn format-code")}if(e.containingPoetryLock){"poetry install"===c.scripts.postinstall&&delete c.scripts.postinstall;const t=await a("**/*.py",{cwd:e.dirPath,dot:!0,gitignore:!0,ignore:["test-fixtures"]}),n=new Set;for(const e of t){const[t,i]=e.split(/[/\\]/);i&&n.add(t)}if(n.size>0){const e=[...n].join(" ");c.scripts["format-code"]=`poetry run isort --profile black ${e} && poetry run black ${e}`,c.scripts.lint?c.scripts.lint=`poetry run flake8 ${e} && ${c.scripts.lint}`:(c.scripts.lint=`poetry run flake8 ${e}`,c.scripts["lint-fix"]="yarn lint"),c.scripts.format+=" && yarn format-code",u.push("black","isort","flake8")}}e.repository&&(c.repository=e.repository)}e.depending.blitz?(l.push(`blitz@${A}`,`@blitzjs/auth@${A}`,`@blitzjs/next@${A}`,`@blitzjs/rpc@${A}`,`next@${W}`),p=p.filter((e=>"eslint-plugin-react"!==e&&"eslint-plugin-react-hooks"!==e)),c.scripts["gen-code"]?.startsWith("blitz codegen")?c.scripts["gen-code"].includes("blitz prisma generate")||(c.scripts["gen-code"]=c.scripts["gen-code"].replace("blitz codegen","blitz codegen && blitz prisma generate")):c.scripts["gen-code"]="blitz codegen"):e.depending.prisma&&!c.scripts["gen-code"]?.startsWith("prisma generate")&&(c.scripts["gen-code"]="prisma generate");e.depending.next&&delete c.devDependencies["@types/react"];c.dependencies?.prettier||delete c.devDependencies["@types/prettier"];0===Object.keys(c.dependencies).length&&delete c.dependencies;0===Object.keys(c.devDependencies).length&&delete c.devDependencies;0===Object.keys(c.peerDependencies).length&&delete c.peerDependencies;let g=JSON.stringify(c);g=await async function(e,n,i){const s=[];for(const[t]of Object.keys(e))":"!==t[0]&&t.includes(":")&&s.push([t,t.replaceAll(":","-")]);if(0===s.length)return n;for(const[e,t]of s)n=n.replaceAll(e,t);const o=await a(["**/*.{md,cjs,mjs,js,jsx,cts,mts,ts,tsx}","**/Dockerfile"],{cwd:i.dirPath,dot:!0,gitignore:!0});for(const e of o)await x.run((async()=>{const n=t.join(i.dirPath,e),o=await r.promises.readFile(n,"utf8");let a=o;for(const[e,t]of s)a=a.replaceAll(e,t);a!==o&&await r.promises.writeFile(n,a)}));return await x.promiseAll(),n}(c.scripts,g,e),await r.promises.writeFile(s,g),i||(l=l.filter((e=>!c.devDependencies?.[e])),l.length>0&&O("yarn",["add",...new Set(l)],e.dirPath),p=p.filter((e=>!c.dependencies?.[e])),p.length>0&&O("yarn",["add","-D",...new Set(p)],e.dirPath),u.length>0&&O("poetry",["add","--group","dev",...new Set(u)],e.dirPath))}(e,n,i)}))}function Fe(e){let t={cleanup:"yarn format && yarn lint-fix",format:"sort-package-json && yarn prettify",lint:`eslint --color "./{${ve(e)}}/**/*.{${X.eslint.join(",")}}"`,"lint-fix":"yarn lint --fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${X.prettier.join(",")}}" "!**/test-fixtures/**"`,typecheck:"tsc --noEmit --Pretty"};if(e.containingSubPackageJsons){const e=t.test;t=d({...t},{format:"sort-package-json && yarn prettify && yarn workspaces foreach --all --parallel --verbose run format",lint:"yarn workspaces foreach --all --parallel --verbose run lint","lint-fix":"yarn workspaces foreach --all --parallel --verbose run lint-fix",prettify:`prettier --cache --color --write "**/{.*/,}*.{${X.prettier.join(",")}}" "!**/packages/**" "!**/test-fixtures/**"`,test:"CI=1 FORCE_COLOR=3 yarn workspaces foreach --all --verbose run test",typecheck:"yarn workspaces foreach --all --parallel --verbose run typecheck"}),e?.includes("wb test")&&(t.test=e)}else e.depending.pyright&&(t.typecheck=t.typecheck?`${t.typecheck} && `:"",t.typecheck+="pyright");return e.containingTypeScript||e.containingTypeScriptInPackages?e.depending.wb&&(t.typecheck="wb typecheck"):delete t.typecheck,t}const $e="npm test",Se={preCommit:"node node_modules/.bin/lint-staged",prePush:"yarn typecheck",prePushForLab:'\nif [ $(git branch --show-current) = "main" ] && [ $(git config user.email) != "exkazuu@gmail.com" ]; then\n echo "************************************************"\n echo "*** Don\'t push main branch directly. Use PR! ***"\n echo "************************************************"\n exit 1\nfi\n\nyarn typecheck\n'.trim(),postMerge:'\nchanged_files="$(git diff-tree -r --name-only --no-commit-id ORIG_HEAD HEAD)"\n\nrun_if_changed() {\n if echo "$changed_files" | grep --quiet -E "$1"; then\n eval "$2"\n fi\n}\n'.trim()};async function Ee(e){return k.functionIgnoringException("generateHuskyrc",(async()=>{await async function(e){const n=t.resolve(e.dirPath,"package.json"),i=await r.promises.readFile(n,"utf8"),s=JSON.parse(i);s.scripts||={},delete s.scripts.postinstall,delete s.scripts.postpublish,delete s.scripts.prepare,delete s.scripts.prepublishOnly,delete s.scripts.prepack,delete s.scripts.postpack;const o=t.resolve(e.dirPath,".husky");await Promise.all([r.promises.writeFile(n,JSON.stringify(s,void 0,2)),r.promises.rm(o,{force:!0,recursive:!0})]),O("yarn",["dlx","husky-init","--yarn2"],e.dirPath);const a=t.resolve(o,"pre-commit"),c=await r.promises.readFile(a,"utf8");await x.run((()=>r.promises.rm(t.resolve(e.dirPath,".huskyrc.json"),{force:!0}))),await x.run((()=>r.promises.writeFile(a,c.replace($e,Se.preCommit))));const{typecheck:l}=Fe(e);if(l){let n=e.repository?.startsWith("github:WillBoosterLab/")?Se.prePushForLab:Se.prePush;n=n.replace("yarn typecheck",l.replace("tsc ","node node_modules/.bin/tsc ").replace("wb ","node node_modules/.bin/wb ").replace("pyright","node node_modules/.bin/pyright")),await x.run((()=>r.promises.writeFile(t.resolve(o,"pre-push"),c.replace($e,n),{mode:493})))}const p=[];e.versionsText&&p.push('run_if_changed "\\..+-version" "asdf plugin update --all"');e.versionsText?.includes("python ")&&p.push('run_if_changed "\\..+-version" "asdf install python"');e.versionsText&&p.push('run_if_changed "\\..+-version" "asdf install"');const d=e.depending.blitz||e.depending.next?" && rm -Rf .next":"";p.push(`run_if_changed "package\\.json" "yarn${d}"`),e.containingPoetryLock&&p.push('run_if_changed "poetry\\.lock" "poetry install"');e.depending.blitz?p.push('run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz prisma migrate deploy"','run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz prisma generate"','run_if_changed "db/schema.prisma" "node node_modules/.bin/blitz codegen"'):e.depending.prisma&&p.push('run_if_changed "prisma/schema.prisma" "node node_modules/.bin/dotenv -c development -- node node_modules/.bin/prisma migrate deploy"','run_if_changed "prisma/schema.prisma" "node node_modules/.bin/dotenv -c development -- node node_modules/.bin/prisma generate"');const u=c.replace($e,`${Se.postMerge}\n\n${p.join("\n")}`);await x.run((()=>r.promises.writeFile(t.resolve(o,"post-merge"),u,{mode:493})))}(e)}))}const Oe='<?xml version="1.0" encoding="UTF-8"?>\n<project version="4">\n <component name="ProjectTasksOptions">\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="ts" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.ts)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="tsx" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.tsx)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="js" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.js)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="json" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.json)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="md" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.md)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n <TaskOptions isEnabled="true">\n <option name="arguments" value="node node_modules/.bin/prettier --cache --write $FilePathRelativeToProjectRoot$" />\n <option name="checkSyntaxErrors" value="false" />\n <option name="description" />\n <option name="exitCodeBehavior" value="ERROR" />\n <option name="fileExtension" value="html" />\n <option name="immediateSync" value="false" />\n <option name="name" value="Prettier (.html)" />\n <option name="output" value="$FilePathRelativeToProjectRoot$" />\n <option name="outputFilters">\n <array />\n </option>\n <option name="outputFromStdout" value="false" />\n <option name="program" value="yarn" />\n <option name="runOnExternalChanges" value="false" />\n <option name="scopeName" value="Project Files" />\n <option name="trackOnlyRoot" value="false" />\n <option name="workingDir" value="$ProjectFileDir$" />\n <envs />\n </TaskOptions>\n </component>\n</project>\n';async function Re(e){return k.functionIgnoringException("generateIdeaSettings",(async()=>{const n=t.resolve(e.dirPath,".idea");if(r.existsSync(n)){const i=t.resolve(n,"watcherTasks.xml");await(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages||e.containingPackageJson&&!e.containingPubspecYaml&&!e.containingGemfile&&!e.containingGoMod&&!e.containingPomXml?x.run((()=>j.generateFile(i,Oe))):x.run((()=>r.promises.rm(i,{force:!0}))))}}))}async function Te(e){return k.functionIgnoringException("generateLintstagedrc",(async()=>{await async function(e){const n=e.root?"node node_modules/.bin/":"node ../../node_modules/.bin/",i=[];if(e.containingJavaScript||e.containingTypeScript){const t=`\n '${Be(e)}': [${JSON.stringify(`${n}eslint --fix${ge.getLintFixSuffix(e)}`)}, '${n}prettier --cache --write'],`;i.push(t)}const s=e.root?" && !file.includes('/packages/')":"";i.push(`\n './**/*.{${X.prettier.join(",")}}': files => {\n ${e.containingJavaScript||e.containingTypeScript?function(e){return`files = micromatch.not(files, '${Be(e)}');`}(e):""}\n const filteredFiles = files.filter(file => !file.includes('/test-fixtures/')${s});\n if (filteredFiles.length === 0) return [];\n const commands = [\`${n}prettier --cache --write \${filteredFiles.join(' ')}\`];\n if (filteredFiles.some(file => file.endsWith('package.json'))) {\n commands.push('${n}sort-package-json');\n }\n return commands;\n },`),e.containingPubspecYaml&&i.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 },");e.containingPoetryLock&&i.push("\n './**/*.py': [\n 'poetry run isort --profile black --filter-files',\n 'poetry run black',\n 'poetry run flake8'\n ],");const o=`${e.containingJavaScript||e.containingTypeScript?"const micromatch = require('micromatch');":""}\n\nmodule.exports = {${i.join("")}\n};\n`,a=t.resolve(e.dirPath,".lintstagedrc.cjs");await x.run((()=>r.promises.rm(t.resolve(e.dirPath,".lintstagedrc.js"),{force:!0}))),await x.run((()=>r.promises.rm(t.resolve(e.dirPath,".lintstagedrc.json"),{force:!0}))),await x.run((()=>j.generateFile(a,o)))}(e)}))}function Be(e){return`./{${ve(e).join(",")}}/**/*.{${X.eslint.join(",")}}`}const De="\n3rd-party/\nandroid/\nios/\nno-format/\ntest-fixtures/\n*.d.ts\n*.min.js\n.yarn/\n.pnp.js\n";async function Ie(e){return k.functionIgnoringException("generatePrettierignore",(async()=>{const n=t.resolve(e.dirPath,".prettierignore"),i=await j.readFileIgnoringError(n)??"",s=q.getHeadUserContent(i),o=q.getTailUserContent(i),r=t.resolve(e.dirPath,".gitignore"),a=await q.readGitignoreWithoutSeparators(r)||"";let c="";e.containingPubspecYaml&&(c="\nandroid/app/\nios/Runner/Assets.xcassets/\npubspec.yaml\n");const l=s+De+c+a+o;await x.run((()=>j.generateFile(n,l)))}))}const Ae={venvPath:".",venv:".venv"};async function We(e){return k.functionIgnoringException("generatePyrightConfigJson",(async()=>{let n=g(Ae);const i=t.resolve(e.dirPath,"pyrightconfig.json");try{const e=await r.promises.readFile(i,"utf8"),t=JSON.parse(e);n=d.all([n,t,n],{arrayMerge:ie})}catch{}const s=JSON.stringify(n);await x.run((()=>j.generateFile(i,s)))}))}const Ne="[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)";async function Ce(e){return k.functionIgnoringException("generateReadme",(async()=>{const n=t.resolve(e.dirPath,"README.md");let i=await r.promises.readFile(n,"utf8");r.existsSync(t.resolve(e.dirPath,".releaserc.json"))&&(i=Je(i,Ne));const s=e.repository?.slice(e.repository?.indexOf(":")+1),o=r.readdirSync(`${e.dirPath}/.github/workflows`);for(const n of o){if(!n.startsWith("test")&&!n.startsWith("deploy"))continue;let o=n;o=o[0].toUpperCase()+o.slice(1,o.indexOf(".")),o=o.replace("-"," ");const a=`[![${o}](https://github.com/${s}/actions/workflows/${n}/badge.svg)](https://github.com/${s}/actions/workflows/${n})`;r.existsSync(t.resolve(e.dirPath,`.github/workflows/${n}`))&&(i=Je(i,a))}await x.run((()=>j.generateFile(n,i)))}))}function Je(e,t){e=e.replace(t,"").replaceAll(/\n\n\n+/g,"\n\n");for(let n=0;n<e.length;n++)if("\n"===e[n-1]&&"\n"===e[n]){const i=e.slice(0,n+1);let s=e.slice(n+1);return s.startsWith("[")||s.startsWith("!")||(s=`\n${s}`),`${i}${t}\n${s}`}return`${e}\n${t}\n`}async function Le(e){return k.functionIgnoringException("generateReleaserc",(async()=>{const n=t.resolve(e.dirPath,".releaserc.json"),i=JSON.parse(await r.promises.readFile(n,"utf8")),s=i?.plugins||[];for(let e=0;e<s.length;e++){const t=Array.isArray(s[e])?s[e][0]:s[e],n=Array.isArray(s[e])&&s[e][1]||{};"@semantic-release/commit-analyzer"===t?s[e]=["@semantic-release/commit-analyzer",d.all([n,{preset:"conventionalcommits"}],{arrayMerge:ie})]:"@semantic-release/github"===t&&(s[e]=["@semantic-release/github",d.all([n,{successComment:!1,failComment:!1,labels:["r: semantic-release"],releasedLabels:["released :bookmark:"]}],{arrayMerge:ie})])}const o=JSON.stringify(i);await x.run((()=>j.generateFile(n,o)))}))}const ze={$schema:"https://docs.renovatebot.com/renovate-schema.json",extends:["github>WillBooster/willbooster-configs:renovate.json5"]};async function Ge(e){return k.functionIgnoringException("generateRenovateJson",(async()=>{let n=g(ze);const i=t.resolve(e.dirPath,".renovaterc.json");try{const e=await r.promises.readFile(i,"utf8"),t=JSON.parse(e);n=d.all([n,t,n],{arrayMerge:ie}),n.extends=n.extends.filter((e=>"@willbooster"!==e))}catch{}e.depending.blitz&&(n.packageRules??=[],n.packageRules.some((e=>e.packageNames.includes("next")))||n.packageRules.push({packageNames:["next"],enabled:!1})),await x.run((()=>r.promises.rm(t.resolve(e.dirPath,".dependabot"),{force:!0}))),await x.run((()=>r.promises.rm(t.resolve(e.dirPath,"renovate.json"),{force:!0})));const s=JSON.stringify(n);await x.run((()=>j.generateFile(i,s)))}))}function He(e){const t=Object.entries(e).sort((([e],[t])=>e.localeCompare(t)));for(const[n,i]of t)delete e[n],e[n]=i;return e}const Ue={compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"Node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["./node_modules/@types","./@types"]},include:["src/**/*","tests/**/*","scripts/**/*","packages/*/src/**/*","packages/*/tests/**/*","packages/*/scripts/**/*"]},Me={compilerOptions:{target:"ESNext",module:"ESNext",moduleResolution:"Node",jsx:"react-jsx",alwaysStrict:!0,strict:!0,skipLibCheck:!0,allowSyntheticDefaultImports:!0,esModuleInterop:!0,resolveJsonModule:!0,declaration:!0,sourceMap:!0,importHelpers:!1,outDir:"dist",typeRoots:["../../node_modules/@types","../../@types","./@types"]},include:["src/**/*","tests/**/*","scripts/**/*"]};async function qe(e,n){return k.functionIgnoringException("generateTsconfig",(async()=>{if(n.depending.blitz||n.depending.next)return;let i=g(e.root?Ue:Me);e.containingJsxOrTsx||e.containingJsxOrTsxInPackages||delete i.compilerOptions?.jsx,e.root&&!e.containingSubPackageJsons&&(i.include=i.include?.filter((e=>!e.startsWith("packages/*/")))),e.esmPackage&&(i.compilerOptions={...i.compilerOptions,module:"NodeNext",moduleResolution:"NodeNext"});const s=t.resolve(e.dirPath,"tsconfig.json");try{const t=await r.promises.readFile(s,"utf8"),n=JSON.parse(t);"./node_modules/@willbooster/tsconfig/tsconfig.json"===n.extends&&delete n.extends,delete i.compilerOptions?.target,e.esmPackage||(delete i.compilerOptions?.module,delete i.compilerOptions?.moduleResolution),n.compilerOptions?.jsx&&delete i.compilerOptions?.jsx,i=d.all([i,n,i],{arrayMerge:se}),i.include=i.include?.filter((e=>!e.includes("@types")&&!e.includes("__tests__")))}catch{}He(i.compilerOptions??{}),i.include?.sort();const o=JSON.stringify(i);await x.run((()=>j.generateFile(s,o)))}))}const Ye=["**/.git/objects/**","**/.git/subtree-cache/**","**/node_modules/**","**/tmp/**","**/temp/**","**/dist/**"];async function Ke(e){return k.functionIgnoringException("generateVscodeSettings",(async()=>{try{const n=t.resolve(e.dirPath,".vscode","settings.json"),i=await r.promises.readFile(n,"utf8");let s=JSON.parse(i);for(const e of Ye)s=d.all([s,Ve(e)]);e.containingPoetryLock&&(s=d.all([s,Ve("**/.venv/**")])),e.depending.next&&(s=d.all([s,Ve("**/.next/**")])),He(s??{});const o=JSON.stringify(s,void 0,2);await x.run((()=>j.generateFile(n,o)))}catch{}}))}function Ve(e){return{"files.watcherExclude":{[e]:!0}}}const Xe={test:{name:"Test",on:{pull_request:{"paths-ignore":["**.md","**/docs/**"]},push:{branches:["main","wbfy"],"paths-ignore":["**.md","**/docs/**"]}},concurrency:{group:"${{ github.workflow }}-${{ github.ref }}","cancel-in-progress":!0},jobs:{test:{uses:"WillBooster/reusable-workflows/.github/workflows/test.yml@main"}}},release:{name:"Release",on:{push:{branches:[]}},concurrency:{group:"${{ github.workflow }}","cancel-in-progress":!1},jobs:{release:{uses:"WillBooster/reusable-workflows/.github/workflows/release.yml@main"}}},wbfy:{name:"Willboosterify",on:{workflow_dispatch:null},jobs:{wbfy:{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy.yml@main"}}},"wbfy-merge":{name:"Merge wbfy",on:{workflow_dispatch:null},jobs:{"wbfy-merge":{uses:"WillBooster/reusable-workflows/.github/workflows/wbfy-merge.yml@main"}}},"semantic-pr":{name:"Lint PR title",on:{pull_request_target:{types:["opened","edited","synchronize"]}},jobs:{"semantic-pr":{uses:"WillBooster/reusable-workflows/.github/workflows/semantic-pr.yml@main"}}},sync:{name:"Sync",on:{},jobs:{sync:{uses:"WillBooster/reusable-workflows/.github/workflows/sync.yml@main"}}},"notify-ready":{name:"Notify ready",on:{issues:{types:["labeled"]}},jobs:{"notify-ready":{uses:"WillBooster/reusable-workflows/.github/workflows/notify-ready.yml@main",secrets:{DISCORD_WEBHOOK_URL:"${{ secrets.DISCORD_WEBHOOK_URL_FOR_READY }}"}}}},"close-comment":{name:"Add close comment",on:{pull_request:{types:["opened"]}},jobs:{"close-comment":{uses:"WillBooster/reusable-workflows/.github/workflows/close-comment.yml@main"}}},"add-issue-to-project":{name:"Add issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",secrets:{GH_PROJECT_URL:"${{ secrets.GH_PROJECT_URL }}"}}}},"add-focused-issue-to-project":{name:"Add focused issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-focused-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",with:{label:"focused :dart:"},secrets:{GH_PROJECT_URL:"https://github.com/orgs/WillBooster/projects/7"}}}},"add-ready-issue-to-project":{name:"Add ready issue to GitHub project",on:{issues:{types:["labeled"]}},jobs:{"add-ready-issue-to-project":{uses:"WillBooster/reusable-workflows/.github/workflows/add-issue-to-project.yml@main",with:{label:"ready :rocket:"},secrets:{GH_PROJECT_URL:"https://github.com/orgs/WillBoosterLab/projects/5"}}}}};async function Ze(e){return k.functionIgnoringException("generateWorkflow",(async()=>{const n=t.resolve(e.dirPath,".github","workflows");await r.promises.mkdir(n,{recursive:!0});const i=t.resolve(e.dirPath,".github","semantic.yml");await x.run((()=>r.promises.rm(i,{force:!0,recursive:!0})));const s=await r.promises.readdir(n,{withFileTypes:!0}),o=new Set(["test.yml","wbfy.yml","wbfy-merge.yml","semantic-pr.yml","close-comment.yml","add-issue-to-project.yml","add-focused-issue-to-project.yml",...s.filter((e=>e.isFile()&&e.name.endsWith(".yml"))).map((e=>e.name))]);e.depending.semanticRelease&&o.add("release.yml"),(e.publicRepo||e.repository?.startsWith("github:WillBoosterLab/"))&&(o.add("add-ready-issue-to-project.yml"),o.add("notify-ready.yml"));for(const i of o){const s=t.basename(i,".yml");await x.run((()=>Qe(e,n,s)))}}))}async function Qe(e,n,i){let s=g(Xe[i]??{});const o=t.join(n,`${i}.yml`);try{const e=await r.promises.readFile(o,"utf8"),t=f.load(e);s=d.all([s,t,s],{arrayMerge:se})}catch{}i.startsWith("deploy")&&(s={...s,concurrency:{group:"${{ github.workflow }}","cancel-in-progress":!1}},s.jobs&&function(e,t){const n=e[t];delete e[t],e[t]=n}(s,"jobs"),s.on?.push&&(s.on.push["paths-ignore"]=[...new Set([...s.on.push["paths-ignore"]??[],"**.md","**/docs/**"])]));for(const t of Object.values(s.jobs)){if(!t.uses?.includes?.("/reusable-workflows/"))return;et(e,t,i)}switch(i){case"release":if(s.on?.schedule)delete s.on.push;else{if(!(s.on?.push&&e.release.branches.length>0))return void await r.promises.rm(t.join(n,"release.yml"),{force:!0});s.on.push.branches=e.release.branches}break;case"test":s.on?.push&&(s.on.push.branches=s.on.push.branches.filter((e=>"renovate/**"!==e)));break;case"wbfy":s.on&&tt(s,20,24);break;case"wbfy-merge":tt(s,1,4)}if(function(e){delete e.jobs["add-to-project"]}(s),await nt(s,o),"release"===i)await r.promises.rm(t.join(n,"semantic-release.yml"),{force:!0});else if("sync"===i){if(await r.promises.rm(t.join(n,"sync-init.yml"),{force:!0}),!s.jobs.sync||!s.jobs.sync.with)return;s.jobs["sync-force"]=s.jobs.sync;const e=s.jobs.sync.with.sync_params_without_dest;if(!e)return;s.jobs.sync.with.sync_params_without_dest=`--force ${e}`,s.name="Force to Sync",s.on={workflow_dispatch:null},delete s.jobs.sync,await nt(s,t.join(n,"sync-force.yml"))}}function et(e,t,n){if(t.with||={},t.secrets||={},"test"!==n&&"release"!==n&&"wbfy"!==n&&"wbfy-merge"!==n&&"add-issue-to-project"!==n&&"add-focused-issue-to-project"!==n&&"add-ready-issue-to-project"!==n||(t.secrets.GH_TOKEN=e.publicRepo?"${{ secrets.PUBLIC_GH_BOT_PAT }}":"${{ secrets.GH_BOT_PAT }}"),!e.release.npm||"release"!==n&&"test"!==n||(t.secrets.NPM_TOKEN="${{ secrets.NPM_TOKEN }}"),t.secrets.FIREBASE_TOKEN&&(t.secrets.GCP_SA_KEY_JSON_FOR_FIREBASE="${{ secrets.GCP_SA_KEY_JSON_FOR_FIREBASE }}",delete t.secrets.FIREBASE_TOKEN),(t.secrets.DISCORD_WEBHOOK_URL&&("release"===n||n.startsWith("deploy"))||t.with.server_url&&n.startsWith("deploy"))&&(t.secrets.DISCORD_WEBHOOK_URL="${{ secrets.DISCORD_WEBHOOK_URL_FOR_RELEASE }}"),"sync"===n){const e=t.with?.sync_params_without_dest;e&&(t.with.sync_params_without_dest=e.toString().replace("sync ",""))}if(e.repository?.startsWith("github:WillBooster/")?t.uses=t.uses.replace("WillBoosterLab/","WillBooster/"):e.repository?.startsWith("github:WillBoosterLab/")&&(t.uses=t.uses.replace("WillBooster/","WillBoosterLab/")),function(e){if(!e.with)return;delete e.with.non_self_hosted,delete e.with.notify_discord,delete e.with.require_fly,delete e.with.require_gcloud,".env"===e.with.dot_env_path&&delete e.with.dot_env_path;delete e.with.cpu_arch}(t),n.startsWith("deploy")&&t.secrets.FLY_API_TOKEN&&t.with.deploy_command&&(t.with.deploy_command=t.with.deploy_command.toString().replace(/\s+--json/,"")),e.containingDockerfile&&("extra-large"!==t.with.ci_size&&(n.startsWith("deploy")||n.startsWith("test"))&&(t.with.ci_size="large"),n.startsWith("deploy")&&(t.with.cpu_arch="X64")),"release"===n||"test"===n||"wbfy"===n||"wbfy-merge"===n||n.startsWith("deploy")?e.publicRepo&&(t.with.github_hosted_runner=!0):delete t.with.github_hosted_runner,Object.keys(t.with).length>0?He(t.with):delete t.with,Object.keys(t.secrets).length>0){const e=He(t.secrets);delete t.secrets,t.secrets=e}else delete t.secrets}function tt(e,t,n){const[i,s]=(e.on.schedule?.[0]?.cron??"").split(" ").map(Number);if(0!==i&&Number.isInteger(s)){const e=(s+9)%24;if(t<n?t<=e&&e<n:t<=e||e<n)return}const o=`${1+Math.floor(59*Math.random())} ${(t+Math.floor(Math.random()*(n-t))-9+24)%24} * * *`;e.on.schedule=[{cron:o}]}async function nt(e,t){const n=f.dump(e,{lineWidth:-1,noCompatMode:!0,styles:{"!!null":"empty"}});await r.promises.writeFile(t,n)}async function it(e){return k.functionIgnoringException("generateYarnrcYml",(async()=>{const n=R("yarn",["--version"],e.dirPath),i=function(e,t){const n=R("npm",["show",e,"versions","--json"],t);return JSON.parse(n).at(-1)}("@yarnpkg/cli",e.dirPath);st(n)<=st(i)&&n!==i&&O("yarn",["set","version",i],e.dirPath,1);const s=t.join(e.dirPath,".yarn","releases");await r.promises.mkdir(s,{recursive:!0});for(const e of await r.promises.readdir(s))e.startsWith("yarn-")&&!e.startsWith(`yarn-${i}.`)&&(await x.run((()=>r.promises.rm(t.join(s,e)))),console.log("Removed",t.join(s,e)));const o=t.resolve(e.dirPath,".yarnrc");await x.run((()=>r.promises.rm(o,{force:!0})));const a=t.resolve(e.dirPath,".yarnrc.yml"),c=f.load(await r.promises.readFile(a,"utf8"));c.defaultSemverRangePrefix="",c.nodeLinker="node-modules",c.nmMode="hardlinks-global",0===c.injectEnvironmentFiles?.length&&delete c.injectEnvironmentFiles,c.enableGlobalCache=!0;const l=c.plugins?.length??0;if(c.plugins=c.plugins?.filter((e=>".yarn/plugins/undefined.cjs"!==e.path))??[],c.plugins.length!==l){const n=t.resolve(e.dirPath,".yarnrc","undefined.cjs");await x.run((()=>r.promises.rm(n,{force:!0})))}0===c.plugins.length&&delete c.plugins,await r.promises.writeFile(a,f.dump(c,{lineWidth:-1})),O("yarn",["dlx","yarn-plugin-auto-install"],e.dirPath)}))}function st(e){const[t]=e.split(".");return Number(t)}async function ot(e){return k.functionIgnoringException("setupLabels",(async()=>{if(!he)return;const[t,n]=we.getOrgAndName(e.repository??"");if(t&&n&&("WillBooster"===t||"WillBoosterLab"===t))try{await rt(t,n,"d1: x-easy :hedgehog:","EDE9FE"),await rt(t,n,"d2: easy :rabbit2:","DDD6FE"),await rt(t,n,"d3: medium :ox:","C4B5FD"),await rt(t,n,"d4: hard :squid:","A78BFA"),await rt(t,n,"d5: x-hard :whale2:","8B5CF6"),await rt(t,n,"p1: critical :fire::fire::fire:","EF4444"),await rt(t,n,"p2: urgent :fire::fire:","F87171"),await rt(t,n,"p3: important :fire:","FCA5A5"),await rt(t,n,"p4: nice to have :droplet:","FECACA"),await rt(t,n,"r: blitz","5300bc"),await rt(t,n,"r: firebase","ffca28"),await rt(t,n,"r: prisma","0c344b"),await rt(t,n,"r: react","61dafb"),await rt(t,n,"r: svelte","ff3e00"),await rt(t,n,"r: semantic-release","494949"),await rt(t,n,"ready :rocket:","22C55E"),await rt(t,n,"review requested :mag:","FBCA04"),await rt(t,n,"released :bookmark:","6366F1"),await rt(t,n,"s: 0.5h :clock1230:","F3F4F6"),await rt(t,n,"s: 1h :clock1:","E5E7EB"),await rt(t,n,"s: 2h :clock2:","D1D5DB"),await rt(t,n,"s: 3h :clock3:","9CA3AF"),await rt(t,n,"s: 5h :clock5:","6B7280"),await rt(t,n,"s: 8h :clock8:","4B5563"),await rt(t,n,"s: 13h :clock1:","374151"),await rt(t,n,"t: build :hammer:","BFDBFE"),await rt(t,n,"t: chore :broom:","BFDBFE"),await rt(t,n,"t: ci :construction_worker:","BFDBFE"),await rt(t,n,"t: docs :memo:","BFDBFE"),await rt(t,n,"t: feat :sparkles:","BFDBFE"),await rt(t,n,"t: fix :bug:","BFDBFE"),await rt(t,n,"t: perf :zap:","BFDBFE"),await rt(t,n,"t: refactor :recycle:","BFDBFE"),await rt(t,n,"t: style :lipstick:","BFDBFE"),await rt(t,n,"t: test :test_tube:","BFDBFE"),await rt(t,n,"project","24292F"),await rt(t,n,"focused :dart:","22C55E"),await at(t,n,"bug"),await at(t,n,"documentation"),await at(t,n,"duplicate"),await at(t,n,"enhancement"),await at(t,n,"good first issue"),await at(t,n,"help wanted"),await at(t,n,"invalid"),await at(t,n,"question"),await at(t,n,"wontfix"),await at(t,n,"ready"),await at(t,n,"review requested"),await at(t,n,"released"),await at(t,n,"semantic-release")}catch(e){console.warn("Skip setupLabels due to:",e?.stack??e)}}))}async function rt(e,t,n,i){try{await ye.request("POST /repos/{owner}/{repo}/labels",{owner:e,repo:t,name:n,color:i})}catch{await ye.request("PATCH /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n,color:i})}}async function at(e,t,n){try{await ye.request("DELETE /repos/{owner}/{repo}/labels/{name}",{owner:e,repo:t,name:n})}catch{}}const ct=["READY_DISCORD_WEBHOOK_URL"];async function lt(e){return k.functionIgnoringException("setupSecrets",(async()=>{if(!he)return;const[t,n]=we.getOrgAndName(e.repository??"");if(!t||!n||"WillBoosterLab"!==t)return;const i=h.config().parsed||{};if(0!==Object.keys(i).length)try{for(const e of ct)try{await ye.request("DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:e})}catch{}const s=await ye.request("GET /repos/{owner}/{repo}/actions/secrets/public-key",{owner:t,repo:n}),{key:o,key_id:r}=s.data;await y.ready;for(const[s,a]of Object.entries(i)){if(e.publicRepo&&"GH_BOT_PAT"===s)continue;if(!e.publicRepo&&"PUBLIC_GH_BOT_PAT"===s)continue;const i=y.from_base64(o,y.base64_variants.ORIGINAL),c=y.from_string(a),l=y.crypto_box_seal(c,i),p=y.to_base64(l,y.base64_variants.ORIGINAL);await ye.request("PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}",{owner:t,repo:n,secret_name:s,encrypted_value:p,key_id:r})}}catch(e){console.warn("Skip setupSecrets due to:",e?.stack??e)}}))}async function pt(e){const[t,n]=we.getOrgAndName(e.repository??"");t&&n&&("WillBooster"!==t&&"WillBoosterLab"!==t||await i((()=>ye.request("PATCH /repos/{owner}/{repo}",{owner:t,repo:n,allow_merge_commit:!1,allow_squash_merge:!0,allow_rebase_merge:!1,delete_branch_on_merge:!0,squash_merge_commit_title:"PR_TITLE",squash_merge_commit_message:"BLANK",headers:{"X-GitHub-Api-Version":"2022-11-28"},...e.repository?.startsWith("github:WillBooster/")?{allow_auto_merge:!0}:{}}))))}const dt={"pull_request_template.md":'\nClose #<IssueNumber>\n\n## Self Check\n\n- [ ] I\'ve confirmed `All checks have passed` on PR page. (You may leave this box unchecked due to long workflows.)\n - PR title follows [Angular\'s commit message format](https://github.com/angular/angular/blob/main/CONTRIBUTING.md#-commit-message-format).\n - PR title doesn\'t have `WIP:`.\n - All tests are passed.\n - Test command (e.g., `yarn test`) is passed.\n - Lint command (e.g., `yarn lint`) is passed.\n- [ ] I\'ve reviewed my changes on PR\'s diff view.\n\n\x3c!-- Please add screenshots if you modify the UI. Otherwise, remove the following table. --\x3e\n| Current | In coming |\n| ------------------------ | ------------------------ |\n| <img src="" width="400"> | <img src="" width="400"> |\n'.trim()};async function ut(e){return k.functionIgnoringException("generateGitHubTemplates",(async()=>{for(const[n,i]of Object.entries(dt)){const s=t.resolve(e.dirPath,".github",n);if(r.existsSync(s)){const e=await r.promises.readFile(s,"utf8");if(w(e,i)>i.length/2)continue}await r.promises.mkdir(t.resolve(e.dirPath,".github"),{recursive:!0}),await x.run((()=>j.generateFile(s,i)))}}))}async function mt(n){const i=t.resolve(n,"package.json");try{const s=r.existsSync(i);let o={},a={},c={},l=!1;if(s){const e=r.readFileSync(i,"utf8");c=JSON.parse(e),o=c.dependencies??{},a=c.devDependencies??{},l="module"===c.type}let p=[],d=[];try{const i=t.resolve(n,".releaserc.json"),s=JSON.parse(await e.readFile(i,"utf8"));p=s?.branches||[],d=s?.plugins?.flat()||[]}catch{}const u="packages"!==t.basename(t.resolve(n,".."))||!r.existsSync(t.resolve(n,"..","..","package.json"));let m;u&&(m=await async function(e,t){const n=b(e),i=(await n.getRemotes(!0)).find((e=>"origin"===e.name)),s=i?.refs?.fetch??i?.refs?.push;if("string"==typeof s){const e=await ft(s);if(e)return e}const o="string"==typeof t.repository?t.repository:t.repository?.url;if(o){const e=await ft(o);if(e&&"Not Found"!==e.message)return e}}(n,c));let g="";try{g+=(await e.readFile(t.resolve(n,".tool-versions"),"utf8")).trim()}catch{}for(const[i,s]of[["java","java"],["node","nodejs"],["python","python"]])try{const o=await e.readFile(t.resolve(n,`.${i}-version`),"utf8");g&&(g+="\n"),g+=s+" "+o.trim()}catch{}const f={dirPath:n,root:u,publicRepo:!1===m?.private,referredByOtherRepo:!!c.files,repository:m?.full_name?`github:${m?.full_name}`:void 0,esmPackage:l,willBoosterConfigs:i.includes(`${t.sep}willbooster-configs`),containingSubPackageJsons:gt("packages/**/package.json",n),containingDockerfile:r.existsSync(t.resolve(n,"Dockerfile"))||r.existsSync(t.resolve(n,"docker-compose.yml")),containingGemfile:r.existsSync(t.resolve(n,"Gemfile")),containingGoMod:r.existsSync(t.resolve(n,"go.mod")),containingPackageJson:r.existsSync(t.resolve(n,"package.json")),containingPoetryLock:r.existsSync(t.resolve(n,"poetry.lock")),containingPomXml:r.existsSync(t.resolve(n,"pom.xml")),containingPubspecYaml:r.existsSync(t.resolve(n,"pubspec.yaml")),containingTemplateYaml:r.existsSync(t.resolve(n,"template.yaml")),containingVscodeSettingsJson:r.existsSync(t.resolve(n,".vscode","settings.json")),containingJavaScript:gt("{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx}",n),containingTypeScript:gt("{app,src,tests,scripts}/**/*.{cts,mts,ts,tsx}",n),containingJsxOrTsx:gt("{app,src,tests}/**/*.{t,j}sx",n),containingJavaScriptInPackages:gt("packages/**/{app,src,tests,scripts}/**/*.{cjs,mjs,js,jsx}",n),containingTypeScriptInPackages:gt("packages/**/{app,src,tests,scripts}/**/*.{cts,mts,ts,tsx}",n),containingJsxOrTsxInPackages:gt("packages/**/{app,src,tests}/**/*.{t,j}sx",n),depending:{blitz:!!o.blitz,firebase:!!a["firebase-tools"],next:!!o.next,playwrightTest:!!o["@playwright/test"]||!!a["@playwright/test"]||!!a.playwright,prisma:!!o.prisma,pyright:!!a.pyright,reactNative:!!o["react-native"],semanticRelease:!!(a["semantic-release"]||p.length>0||d.length>0),storybook:!!a["@storybook/react"],wb:!!(o["@willbooster/wb"]||a["@willbooster/wb"]||o["@willbooster/shared-scripts"]||a["@willbooster/shared-scripts"])},release:{branches:p,github:d.includes("@semantic-release/github"),npm:d.includes("@semantic-release/npm")},versionsText:g,packageJson:c};if(f.eslintBase=function(e){if(e.depending.blitz)return"@willbooster/eslint-config-blitz-next";if(e.depending.next)return"@willbooster/eslint-config-next";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"}(f),f.containingGemfile||f.containingGoMod||f.containingPackageJson||f.containingPoetryLock||f.containingPomXml||f.containingPubspecYaml||f.containingTemplateYaml)return f}catch{}}function gt(e,t){return c(e,{dot:!0,cwd:t}).length>0}async function ft(e){const[t,n]=we.getOrgAndName(e);if(!t||!n)return;const i={full_name:`${t}/${n}`};try{const e=await ye.request("GET /repos/{owner}/{repo}",{owner:t,repo:n});Object.assign(i,e.data)}catch{}return i}await async function(){const n=await o(process.argv.slice(2)).command("$0 [paths..]","Make a given project follow the WillBooster standard",(e=>{e.positional("paths",{describe:"project paths to be wbfied",array:!0,type:"string",default:["."]})})).options({skipDeps:{description:"Skip dependency installation",type:"boolean",default:!1,alias:"d"},verbose:{description:"Whether or not to enable verbose mode",type:"boolean",default:!1,alias:"v"}}).strict().argv;v.isVerbose=n.verbose;for(const i of n.paths){const o=t.join(i,"packages"),r=(await s((()=>e.readdir(o,{withFileTypes:!0})))??[]).filter((e=>e.isDirectory())).map((e=>t.join(o,e.name)));await S([i,...r]);const a=_(i),c=await mt(i);if(!c){console.error(`there is no valid package.json in ${i}`);continue}const l=(await Promise.all(r.map((e=>mt(e))))).filter((e=>!!e)),p=[c,...l];if(v.isVerbose)for(const e of p)console.info(e);await N(c),await it(c),await Promise.all([P(c),$(c),a.then((()=>Ce(c))),V(c),Q(c),ae(c),ut(c),Ee(c),Re(c),Te(c),Ge(c),Le(c),Ze(c),ot(c),lt(c),pt(c)]),await x.promiseAll();const d=[];for(const e of p)(e.containingTypeScript||e.containingTypeScriptInPackages)&&d.push(E(e,e.root?p:[e])),e.depending.playwrightTest&&d.push(F(c)),await pe(e,c),await x.promiseAll(),(e.root||e.containingPackageJson)&&(await Ie(e),await Pe(e,c,n.skipDeps),d.push(Te(e)),e.containingVscodeSettingsJson&&e.containingPackageJson&&d.push(Ke(e)),(e.containingTypeScript||e.containingTypeScriptInPackages)&&d.push(qe(e,c)),(e.containingJavaScript||e.containingJavaScriptInPackages||e.containingTypeScript||e.containingTypeScriptInPackages)&&(c.willBoosterConfigs||d.push(oe(e,c)),d.push(ne(e))),e.depending.pyright&&d.push(We(e)));await Promise.all(d),await x.promiseAll(),O("yarn",["cleanup"],i),O("yarn",["install"],i)}}();
2
2
  //# sourceMappingURL=index.js.map