jsrepo 2.0.4 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +80 -62
- package/dist/index.js.map +1 -1
- package/package.json +6 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../package.json","../src/utils/ascii.ts","../src/utils/blocks/ts/array.ts","../src/utils/blocks/ts/pad.ts","../src/utils/blocks/ts/lines.ts","../src/utils/blocks/package-managers/flags.ts","../src/utils/persisted.ts","../src/utils/token-manager.ts","../src/utils/ai.ts","../src/utils/context.ts","../src/utils/diff.ts","../src/utils/fetch.ts","../src/utils/get-latest-version.ts","../src/utils/parse-package-name.ts","../src/utils/package.ts","../src/utils/prompts.ts","../src/utils/dependencies.ts","../src/utils/files.ts","../src/utils/language-support/css.ts","../src/utils/language-support/html.ts","../src/utils/language-support/javascript.ts","../src/utils/language-support/json.ts","../src/utils/language-support/sass.ts","../src/utils/language-support/svelte.ts","../src/utils/language-support/svg.ts","../src/utils/language-support/vue.ts","../src/utils/language-support/yaml.ts","../src/utils/language-support/index.ts","../src/utils/build/check.ts","../src/utils/build/index.ts","../src/utils/config.ts","../src/utils/registry-providers/internal.ts","../src/utils/blocks.ts","../src/utils/blocks/commander/parsers.ts","../src/utils/blocks/ts/promises.ts","../src/utils/format.ts","../src/utils/get-watermark.ts","../src/utils/preconditions.ts","../src/commands/add.ts","../src/utils/blocks/ts/sleep.ts","../src/commands/auth.ts","../src/commands/build.ts","../src/commands/exec.ts","../src/commands/init.ts","../src/commands/publish.ts","../src/commands/test.ts","../src/commands/tokens.ts","../src/commands/update.ts","../src/cli.ts","../src/index.ts"],"names":["package_default","unicode","isUnicodeSupported","s","c","fallback","S_STEP_ACTIVE","S_STEP_CANCEL","S_SUCCESS","S_ERROR","VERTICAL_LINE","color","HORIZONTAL_LINE","TOP_RIGHT_CORNER","BOTTOM_RIGHT_CORNER","JUNCTION_RIGHT","JUNCTION_TOP","BOTTOM_LEFT_CORNER","WARN","INFO","ERROR","JSREPO","JSREPO_DOT_COM","fromMap","map","fn","items","key","value","sum","arr","total","item","leftPadMin","str","length","padWith","strippedLength","stripAsni","NEW_LINE_REGEX","get","join","lines","lineNumbers","prefix","transformed","line","i","os","bun","deno","npm","pnpm","yarn","flags","Conf","HTTP_REGISTRY_LIST_KEY","TokenManager","#storage","storage","name","token","secret","registries","registry","index","models","originalFile","newFile","loading","verbose","additionalInstructions","messages","apiKey","getApiKey","prompt","createUpdatePrompt","text","getNextCompletionAnthropic","unwrapCodeFromQuotes","getNextCompletionOpenAI","getNextCompletionOllama","maxTokens","model","first","OpenAI","anthropic","Anthropic","history","message","ollama","rePrompt","quoted","code","l","result","password","isCancel","cancel","packageJson","isWhitespace","trimSingleNewLine","formatDiff","from","to","changes","expand","maxUnchanged","colorRemoved","colorAdded","colorCharsRemoved","colorCharsAdded","onUnchanged","intro","change","lineOffset","linePrefix","hasPreviousChange","hasNextChange","prevLineOffset","ls","shownLines","count","colorLineChange","colorCharChange","sentence","diffChars","chg","iFetch","mfFetch","path","LATEST_VERSION_KEY","EXPIRATION_TIME","getLatestVersion","noCache","version","latestVersion","Ok","response","Err","ver","err","RE_SCOPED","RE_NON_SCOPED","parsePackageName","input","m","findNearestPackageJson","startDir","until","packagePath","fs","segments","getPackage","contents","cleanVersion","returnShouldInstall","dependencies","devDependencies","cwd","tempDeps","tempDevDeps","packageResult","pkg","dep","foundDep","semver","runTasks","tasks","task","runTasksConcurrently","startMessage","stopMessage","t","_spinner","spinner","msg","nextSteps","steps","box","boxen","truncatedList","maxLength","truncated","remaining","newerVersionAvailable","oldVersion","newVersion","pm","detect","installCommand","resolveCommand","_intro","MODEL_PREFERENCE_KEY","promptUpdateFile","incoming","current","config","options","acceptedChanges","updatedContent","messageHistory","diffLines","formattedDiff","totalChanges","a","confirmOptions","confirmResult","select","modelResult","val","content","log","formatFile","promptInstallDependencies","deps","devDeps","yes","no","ignoreWorkspace","install","confirm","installDependencies","taskLog","title","BAR","ACTIVE","SUCCESS","output","frame","clear","eraseTitle","terminalWidth","height","cursor","erase","print","limit","data","frameHeight","dev","args","noWorkspace","add","program","proc","x","templatePattern","resolveLocalDependencyTemplate","template","destPath","destDir","_","category","relative","transformRemoteContent","file","imports","watermark","prettierOptions","biomeOptions","lang","languages","literal","resolvedImport","literalRegex","escapeStringRegexp","formatter","newContent","matchJSDescendant","searchFilePath","MATCH_EXTENSIONS","endsWithOneOf","dir","files","parsedSearch","tryGetTsconfig","searchPath","getTsconfig","css","fileName","filePath","isSubDir","excludeDeps","dirs","containingDir","sourceCode","parseResult","resolveResult","resolveImports","imp","formatError","biome","Biome","Distribution","html","ast","walk","node","enter","n","attr","Ko","getJavascriptImports","oxc","modules","mod","exp","entry","typescript","qo","format","Qo","json","jsonc","sass","en","tn","svelte","root","plugin","nn","svg","vue","parsed","mods","ln","yaml","moduleSpecifiers","doNotInstall","errors","localDeps","specifier","builtinModules","localDep","resolveLocalImport","depInfo","validatePackageName","tryResolveLocalAlias","resolveRemoteDeps","dropExtension","alias","categoryDir","modPath","fullDir","parsePath","absPath","longestMatch","containingPath","localPath","block","rest","trimmedBlock","blockSpecifier","configResult","matcher","createPathsMatcher","paths","foundMod","searchForModule","pathResolved","shouldDropExtension","resolutionEquality","pathA","pathB","validExtensions","parsedA","parsedB","pathAWithoutExtension","pathBWithoutExtension","containing","modParsed","newPath","fileParsed","prettyPath","exemptDeps","pkgPath","packageDevDependencies","packageDependencies","FRAMEWORKS","ruleLevelSchema","ruleKeySchema","rules","manifest","depCategoryName","depBlockName","depCategory","cat","error","b","categoryName","chain","searchForDep","listedBlocks","frameworkDeps","d","frameworkDep","configFile","ruleConfigSchema","DEFAULT_CONFIG","runRules","ruleConfig","warnings","rule","conf","level","ruleErrors","search","categories","newChain","blockName","depBlock","found","isDependedOn","TEST_SUFFIXES","isTestFile","suffix","buildBlocksDirectory","blocksPath","ignore","categoryPath","dirName","shouldIncludeCategory","listCategory","shouldListCategory","blockDir","transformBlockName","listBlock","shouldListBlock","shouldIncludeBlock","resolver","testsPath","f","local","localDepsSet","depsSet","devDepsSet","hasTests","blockFiles","walkFiles","base","relativeFilePath","subFiles","imps","k","v","buildConfigFiles","configFiles","pruneUnused","pruned","catBlocks","IGNORED_DIRS","PROJECT_CONFIG_NAME","REGISTRY_CONFIG_NAME","formatterSchema","pathsSchema","projectConfigSchema","getProjectConfig","registryConfigSchema","accessLevel","manifestMeta","peerDependencySchema","configFileSchema","getRegistryConfig","resolvePaths","newPaths","p","resolved","tryResolvePath","unresolvedPath","getPathForBlock","resolvedPaths","directory","internalFetchRaw","state","resourcePath","fetchRaw","getProviderToken","internalFetchManifest","fetchManifest","provider","url","getProviderState","repo","selectProvider","http","cached","providers","forEachPathGetProviderState","repos","getProviderResult","providerState","fetchBlocks","blocksMap","getManifestResult","getRemoteBlocks","manifests","fetchManifests","resolveTree","blockSpecifiers","repoPaths","installed","blocks","repoIdent","tempBlock","subDeps","getInstalled","installedBlocks","baseDir","blockPath","preloadBlocks","preloaded","includedFiles","getBlockFilePath","parseRecord","pair","InvalidArgumentError","immediate","res","loadFormatterConfig","On","configPath","getWatermark","repoUrl","checkPreconditions","incompatible","expected","msgs","last","versionMessage","schema","L","Command","Option","blockNames","opts","_add","outro","noConfig","shouldContinue","mustResolveRepos","resolveAllRepos","repoPath","resolvedRepos","installingBlockNames","promptResult","multiselect","shortName","blockExists","label","installingBlocks","store","zeroConfigKey","zeroConfigParsed","zeroConfig","includeTests","addWatermark","defaultFormatter","updatedBlocks","overwriteAll","preloadedBlocks","updatedFiles","preloadedBlock","fullSpecifier","shortSpecifier","overwriteBlocks","installing","spec","overwrite","remoteContent","localContent","updateResult","updatedFile","folder","installResult","cmd","step","next","sleep","durationMs","Ae","auth","_auth","tokenManager","hardwareId","nodeMachineId","anonSessionId","BASE_URL","timeout","pollingTimeout","endpoint","O","build","MANIFEST_FILE","_build","mergedVal","outDir","manifestOut","oldManifest","parseManifest","newDirPath","ig","ignoreFile","dirPath","builtCategories","createManifest","warning","prunedCategories","originalPath","me","exec","Argument","script","command","_exec","tempDirBase","tempDirectoryRelative","tempDirectory","resolvedPathsResult","addedBlocks","providerInfo","getSourceFile","sourceFile","sourcePath","pathFolder","packageContent","startIndex","arg","passthroughArgs","runningBlock","K","init","_initProject","_initRegistry","initialConfig","tsconfigResult","defaultPathResult","setupRepo","promptForRegistryConfig","r","configContent","tokenKey","fullFilePath","fileContents","matchedPath","originalRemoteContent","configurePaths","configuredValue","configurePublish","nameResponse","promptForScriptKey","alreadyInstalled","buildScript","publishScript","runScript","scriptKey","placeholder","E","publish","_publish","scope","registryName","NAME_REGEX","tempOutDir","readmePath","dest","access","tarBuffer","ve","test","_test","tempTestDirectory","cleanUp","testingBlocks","testingBlocksMapped","parsedRepo","testFiles","testFile","moduleSpecifier","newModuleSpecifier","testCommand","Le","services","tokens","service","_tokens","configuredRegistries","selectedService","promptHttpLogout","serviceName","selectedRegistry","registryUrl","ne","update","_update","updatingBlockNames","updatingBlocks","cli"],"mappings":"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","file":"index.js","sourcesContent":["{\n\t\"name\": \"jsrepo\",\n\t\"description\": \"A CLI to add shared code from remote repositories.\",\n\t\"version\": \"2.0.4\",\n\t\"license\": \"MIT\",\n\t\"homepage\": \"https://jsrepo.dev\",\n\t\"author\": {\n\t\t\"name\": \"Aidan Bleser\",\n\t\t\"url\": \"https://github.com/ieedan\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/jsrepojs/jsrepo\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/jsrepojs/jsrepo/issues\"\n\t},\n\t\"keywords\": [\"repo\", \"cli\", \"svelte\", \"vue\", \"typescript\", \"javascript\", \"shadcn\", \"registry\"],\n\t\"type\": \"module\",\n\t\"packageManager\": \"pnpm@10.8.1\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/api/index.d.ts\",\n\t\t\t\"default\": \"./dist/api/index.js\"\n\t\t}\n\t},\n\t\"bin\": \"./dist/index.js\",\n\t\"main\": \"./dist/index.js\",\n\t\"files\": [\"./schemas/**/*\", \"dist/**/*\"],\n\t\"scripts\": {\n\t\t\"start\": \"tsup --silent && node ./dist/index.js\",\n\t\t\"build\": \"tsup\",\n\t\t\"run:dev\": \"node ./dist/index.js\",\n\t\t\"format\": \"biome format --write\",\n\t\t\"lint\": \"biome lint --write\",\n\t\t\"check\": \"biome check && pnpm check:types\",\n\t\t\"test\": \"vitest\",\n\t\t\"check:types\": \"tsc\",\n\t\t\"changeset:version\": \"changeset version && pnpm format\",\n\t\t\"ci:release\": \"pnpm build && changeset publish\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@biomejs/biome\": \"1.9.4\",\n\t\t\"@changesets/cli\": \"^2.29.3\",\n\t\t\"@types/diff\": \"^7.0.2\",\n\t\t\"@types/make-fetch-happen\": \"^10.0.4\",\n\t\t\"@types/node\": \"^22.15.6\",\n\t\t\"@types/semver\": \"^7.7.0\",\n\t\t\"@types/validate-npm-package-name\": \"^4.0.2\",\n\t\t\"pkg-pr-new\": \"^0.0.43\",\n\t\t\"tsup\": \"^8.4.0\",\n\t\t\"typescript\": \"^5.8.3\",\n\t\t\"vitest\": \"^3.1.3\"\n\t},\n\t\"dependencies\": {\n\t\t\"@anthropic-ai/sdk\": \"^0.40.1\",\n\t\t\"@biomejs/js-api\": \"^0.7.1\",\n\t\t\"@biomejs/wasm-nodejs\": \"^1.9.4\",\n\t\t\"@clack/prompts\": \"^0.10.1\",\n\t\t\"boxen\": \"^8.0.1\",\n\t\t\"chalk\": \"^5.4.1\",\n\t\t\"commander\": \"^13.1.0\",\n\t\t\"conf\": \"^13.1.0\",\n\t\t\"css-dependency\": \"^0.0.3\",\n\t\t\"diff\": \"^7.0.0\",\n\t\t\"escape-string-regexp\": \"^5.0.0\",\n\t\t\"estree-walker\": \"^3.0.3\",\n\t\t\"get-tsconfig\": \"^4.10.0\",\n\t\t\"ignore\": \"^7.0.4\",\n\t\t\"is-unicode-supported\": \"^2.1.0\",\n\t\t\"make-fetch-happen\": \"^14.0.3\",\n\t\t\"node-machine-id\": \"^1.1.12\",\n\t\t\"ollama\": \"^0.5.14\",\n\t\t\"openai\": \"^4.97.0\",\n\t\t\"oxc-parser\": \"^0.68.1\",\n\t\t\"package-manager-detector\": \"^1.3.0\",\n\t\t\"parse5\": \"^7.3.0\",\n\t\t\"pathe\": \"^2.0.3\",\n\t\t\"prettier\": \"^3.5.3\",\n\t\t\"semver\": \"^7.7.1\",\n\t\t\"sisteransi\": \"^1.0.5\",\n\t\t\"svelte\": \"^5.28.2\",\n\t\t\"tar\": \"^7.4.3\",\n\t\t\"tinyexec\": \"^1.0.1\",\n\t\t\"valibot\": \"1.0.0\",\n\t\t\"validate-npm-package-name\": \"^6.0.0\",\n\t\t\"vue\": \"^3.5.13\"\n\t}\n}\n","import color from 'chalk';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst unicode = isUnicodeSupported();\n\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\n\nexport const S_STEP_ACTIVE = s('◆', '*');\nexport const S_STEP_CANCEL = s('■', 'x');\nexport const S_STEP_ERROR = s('▲', 'x');\nexport const S_STEP_SUBMIT = s('◇', 'o');\nexport const S_INFO = s('●', '•');\nexport const S_SUCCESS = s('◆', '*');\nexport const S_WARN = s('▲', '!');\nexport const S_ERROR = s('■', 'x');\n\nexport const VERTICAL_LINE = color.gray(s('│', '|'));\nexport const HORIZONTAL_LINE = color.gray(s('─', '-'));\nexport const TOP_RIGHT_CORNER = color.gray(s('┐', '+'));\nexport const BOTTOM_RIGHT_CORNER = color.gray(s('┘', '+'));\nexport const JUNCTION_RIGHT = color.gray(s('├', '+'));\nexport const JUNCTION_TOP = color.gray(s('┬', '+'));\nexport const TOP_LEFT_CORNER = color.gray(s('┌', 'T'));\nexport const BOTTOM_LEFT_CORNER = color.gray(s('└', '-'));\n\nexport const WARN = color.bgRgb(245, 149, 66).black(' WARN ');\nexport const INFO = color.bgBlueBright.white(' INFO ');\nexport const ERROR = color.bgRedBright.white(' ERROR ');\n\nexport const JSREPO = color.hex('#f7df1e')('jsrepo');\nexport const JSREPO_DOT_COM = color.hex('#f7df1e').bold('jsrepo.com');\n","/*\n\tInstalled from github/ieedan/std\n*/\n\n/** Maps the provided map into an array using the provided mapping function.\n *\n * @param map Map to be entered into an array\n * @param fn A mapping function to transform each pair into an item\n * @returns\n *\n * ## Usage\n * ```ts\n * console.log(map); // Map(5) { 0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1 }\n *\n * const arr = fromMap(map, (_, value) => value);\n *\n * console.log(arr); // [5, 4, 3, 2, 1]\n * ```\n */\nexport function fromMap<K, V, T>(map: Map<K, V>, fn: (key: K, value: V) => T): T[] {\n\tconst items: T[] = [];\n\n\tfor (const [key, value] of map) {\n\t\titems.push(fn(key, value));\n\t}\n\n\treturn items;\n}\n\n/** Calculates the sum of all elements in the array based on the provided function.\n *\n * @param arr Array of items to be summed.\n * @param fn Summing function\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * const total = sum([1, 2, 3, 4, 5], (num) => num);\n *\n * console.log(total); // 15\n * ```\n */\nexport function sum<T>(arr: T[], fn: (item: T) => number): number {\n\tlet total = 0;\n\n\tfor (const item of arr) {\n\t\ttotal = total + fn(item);\n\t}\n\n\treturn total;\n}\n\n/** Maps the provided array into a map\n *\n * @param arr Array of items to be entered into a map\n * @param fn A mapping function to transform each item into a key value pair\n * @returns\n *\n * ## Usage\n * ```ts\n * const map = toMap([5, 4, 3, 2, 1], (item, i) => [i, item]);\n *\n * console.log(map); // Map(5) { 0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1 }\n * ```\n */\nexport function toMap<T, K, V>(\n\tarr: T[],\n\tfn: (item: T, index: number) => [key: K, value: V]\n): Map<K, V> {\n\tconst map = new Map<K, V>();\n\n\tfor (let i = 0; i < arr.length; i++) {\n\t\tconst [key, value] = fn(arr[i], i);\n\n\t\tmap.set(key, value);\n\t}\n\n\treturn map;\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\nimport { stripVTControlCharacters as stripAsni } from 'node:util';\n\n/** Adds the `padWith` (default `' '`) to the string the amount of times specified by the `space` argument\n *\n * @param str String to add padding to\n * @param space Whitespace to add\n * @param padWith Character to use to pad the string\n * @returns\n *\n * ## Usage\n * ```ts\n * const padded = leftPad(\"Hello\", 3, \".\");\n *\n * console.log(padded); // '...Hello'\n * ```\n */\nexport function leftPad(str: string, space: number, padWith = ' '): string {\n\treturn padWith.repeat(space) + str;\n}\n\n/** Adds the `padWith` until the string length matches the `length`\n *\n * @param str\n * @param length\n * @param padWith\n *\n * ## Usage\n * ```ts\n * const padded = leftPadMin(\"1\", 3, \".\");\n *\n * console.log(padded); // '..1'\n * ```\n */\nexport function leftPadMin(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length)\n\t\tthrow new Error('String length is greater than the length provided.');\n\n\treturn padWith.repeat(length - strippedLength) + str;\n}\n\n/** Adds the `padWith` (default `' '`) to the string the amount of times specified by the `space` argument\n *\n * @param str String to add padding to\n * @param space Whitespace to add\n * @param padWith Character to use to pad the string\n * @returns\n *\n * ## Usage\n * ```ts\n * const padded = rightPad(\"Hello\", 3, \".\");\n *\n * console.log(padded); // 'Hello...'\n * ```\n */\nexport function rightPad(str: string, space: number, padWith = ' '): string {\n\treturn str + padWith.repeat(space);\n}\n\n/** Adds the `padWith` until the string length matches the `length`\n *\n * @param str\n * @param length\n * @param padWith\n *\n * ## Usage\n * ```ts\n * const padded = rightPadMin(\"1\", 3, \".\");\n *\n * console.log(padded); // '1..'\n * ```\n */\nexport function rightPadMin(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length)\n\t\tthrow new Error('String length is greater than the length provided.');\n\n\treturn str + padWith.repeat(length - strippedLength);\n}\n\n/** Pads the string with the `padWith` so that it appears in the center of a new string with the provided length.\n *\n * @param str\n * @param length\n * @param padWith\n * @returns\n *\n * ## Usage\n * ```ts\n * const str = \"Hello, World!\";\n *\n * const padded = centerPad(str, str.length + 4);\n *\n * console.log(padded); // ' Hello, World! '\n * ```\n */\nexport function centerPad(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length) {\n\t\tthrow new Error('String length is greater than the length provided.');\n\t}\n\n\tconst overflow = length - strippedLength;\n\n\tconst paddingLeft = Math.floor(overflow / 2);\n\n\tconst paddingRight = Math.ceil(overflow / 2);\n\n\treturn padWith.repeat(paddingLeft) + str + padWith.repeat(paddingRight);\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\nimport os from 'node:os';\nimport { leftPadMin } from './pad';\n\n/** Regex used to split on new lines\n *\n * ```\n * /\\n|\\r\\n/g\n * ```\n */\nexport const NEW_LINE_REGEX = /\\n|\\r\\n/g;\n\n/** Splits str into an array of lines.\n *\n * @param str\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * lines.split(\"hello\\\\nhello\\nhello\"); // [\"hello\\\\nhello\", \"hello\"]\n * ```\n */\nexport function get(str: string): string[] {\n\treturn str.split(NEW_LINE_REGEX);\n}\n\nexport type Options = {\n\tlineNumbers: boolean;\n\tprefix: (line: number, lineCount: number) => string;\n};\n\n/** Joins the array of lines back into a string using the platform specific EOL.\n *\n * @param lines\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * lines.join([\"1\", \"2\", \"3\"]); // \"1\\n2\\n3\" or on windows \"1\\r\\n2\\r\\n3\"\n *\n * // add line numbers\n * lines.join([\"import { } from '.'\", \"console.log('test')\"], { lineNumbers: true });\n * // 1 import { } from '.'\n * // 2 console.log('test')\n *\n * // add a custom prefix\n * lines.join([\"import { } from '.'\", \"console.log('test')\"], { prefix: () => \" + \" });\n * // + import { } from '.'\n * // + console.log('test')\n * ```\n */\nexport function join(\n\tlines: string[],\n\t{ lineNumbers = false, prefix }: Partial<Options> = {}\n): string {\n\tlet transformed = lines;\n\n\tif (lineNumbers) {\n\t\tconst length = lines.length.toString().length + 1;\n\n\t\ttransformed = transformed.map((line, i) => `${leftPadMin(`${i + 1}`, length)} ${line}`);\n\t}\n\n\tif (prefix !== undefined) {\n\t\ttransformed = transformed.map((line, i) => `${prefix(i, lines.length)}${line}`);\n\t}\n\n\treturn transformed.join(os.EOL);\n}\n","import type { Agent } from 'package-manager-detector';\n\nexport type Flags = {\n\t'no-workspace'?: string;\n\t'install-as-dev-dependency': string;\n};\n\nexport const bun: Flags = {\n\t'no-workspace': '--no-workspace',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const deno: Flags = {\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const npm: Flags = {\n\t'no-workspace': '--workspaces=false',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const pnpm: Flags = {\n\t'no-workspace': '--ignore-workspace',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const yarn: Flags = {\n\t'no-workspace': '--focus',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const flags: Record<Agent, Flags> = {\n\tbun,\n\tnpm,\n\tpnpm,\n\tdeno,\n\tyarn,\n\t'yarn@berry': yarn,\n\t'pnpm@6': pnpm,\n};\n","import Conf from 'conf';\n\nfunction get() {\n\treturn new Conf({ projectName: 'jsrepo' });\n}\n\nexport { get };\n","import type Conf from 'conf';\nimport * as persisted from './persisted';\n\nconst HTTP_REGISTRY_LIST_KEY = 'http-registries-w-tokens';\n\nexport class TokenManager {\n\t#storage: Conf;\n\n\tconstructor(storage?: Conf) {\n\t\tthis.#storage = storage ?? persisted.get();\n\t}\n\n\tprivate getKey(name: string) {\n\t\treturn `${name}-token`.toLowerCase();\n\t}\n\n\tget(name: string): string | undefined {\n\t\tconst key = this.getKey(name);\n\n\t\tconst token = this.#storage.get(key, undefined) as string | undefined;\n\n\t\tif (name === 'jsrepo') {\n\t\t\treturn token ?? process.env.JSREPO_TOKEN;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tset(name: string, secret: string) {\n\t\tif (name.startsWith('http')) {\n\t\t\tlet registries = this.getHttpRegistriesWithTokens();\n\n\t\t\tconst registry = name.slice(5);\n\n\t\t\tif (!registries) {\n\t\t\t\tregistries = [];\n\t\t\t}\n\n\t\t\tif (!registries.includes(registry)) registries.push(registry);\n\n\t\t\tthis.#storage.set(HTTP_REGISTRY_LIST_KEY, registries);\n\t\t}\n\n\t\tconst key = this.getKey(name);\n\n\t\tthis.#storage.set(key, secret);\n\t}\n\n\tdelete(name: string) {\n\t\tif (name.startsWith('http')) {\n\t\t\tlet registries = this.getHttpRegistriesWithTokens();\n\n\t\t\tconst registry = name.slice(5);\n\n\t\t\tconst index = registries.indexOf(registry);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tregistries = [...registries.slice(0, index), ...registries.slice(index + 1)];\n\t\t\t}\n\n\t\t\tthis.#storage.set(HTTP_REGISTRY_LIST_KEY, registries);\n\t\t}\n\n\t\tconst key = this.getKey(name);\n\n\t\tthis.#storage.delete(key);\n\t}\n\n\tgetHttpRegistriesWithTokens(): string[] {\n\t\tconst registries = this.#storage.get(HTTP_REGISTRY_LIST_KEY);\n\n\t\tif (!registries) return [];\n\n\t\treturn registries as string[];\n\t}\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { cancel, isCancel, password, type spinner } from '@clack/prompts';\nimport ollama from 'ollama';\nimport OpenAI from 'openai';\nimport * as lines from './blocks/ts/lines';\nimport { TokenManager } from './token-manager';\n\ntype File = {\n\tpath: string;\n\tcontent: string;\n};\n\nexport type Message = {\n\trole: 'assistant' | 'user';\n\tcontent: string;\n};\n\nexport type UpdateFileResult = {\n\tcontent: string;\n\t/** Prompt constructed by the user (for context) */\n\tprompt: string;\n};\n\nexport interface Model {\n\tupdateFile: (opts: {\n\t\toriginalFile: File;\n\t\tnewFile: File;\n\t\tloading: ReturnType<typeof spinner>;\n\t\tadditionalInstructions?: string;\n\t\tmessages?: Message[];\n\t\tverbose?: (msg: string) => void;\n\t}) => Promise<UpdateFileResult>;\n}\n\nexport type ModelName = 'Claude 3.7 Sonnet' | 'OpenAI o3-mini' | 'Phi4';\n\ntype Prompt = {\n\tsystem: string;\n\tmessage: string;\n};\n\nconst models: Record<ModelName, Model> = {\n\t'Claude 3.7 Sonnet': {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tconst apiKey = await getApiKey('Anthropic');\n\n\t\t\tif (!verbose) loading.start(`Asking ${'Claude 3.7 Sonnet'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(\n\t\t\t\t`Prompting ${'Claude 3.7 Sonnet'} with:\\n${JSON.stringify(prompt, null, '\\t')}`\n\t\t\t);\n\n\t\t\tconst text = await getNextCompletionAnthropic({\n\t\t\t\tmodel: 'claude-3-7-sonnet-latest',\n\t\t\t\tprompt,\n\t\t\t\tapiKey,\n\t\t\t\tmessages,\n\t\t\t\tmaxTokens: (originalFile.content.length + newFile.content.length) * 2,\n\t\t\t});\n\n\t\t\tif (!verbose) loading.stop(`${'Claude 3.7 Sonnet'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n\t'OpenAI o3-mini': {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tconst apiKey = await getApiKey('OpenAI');\n\n\t\t\tif (!verbose) loading.start(`Asking ${'OpenAI o3-mini'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(`Prompting ${'OpenAI o3-mini'} with:\\n${JSON.stringify(prompt, null, '\\t')}`);\n\n\t\t\tconst text = await getNextCompletionOpenAI({\n\t\t\t\tmodel: 'o3-mini',\n\t\t\t\tprompt,\n\t\t\t\tapiKey,\n\t\t\t\tmessages,\n\t\t\t\tmaxTokens: (originalFile.content.length + newFile.content.length) * 2,\n\t\t\t});\n\n\t\t\tif (!verbose) loading.stop(`${'OpenAI o3-mini'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n\tPhi4: {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tif (!verbose) loading.start(`Asking ${'Phi4'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(`Prompting ${'Phi4'} with:\\n${JSON.stringify(prompt, null, '\\t')}`);\n\n\t\t\tconst text = await getNextCompletionOllama({ model: 'phi4', prompt, messages });\n\n\t\t\tif (!verbose) loading.stop(`${'Phi4'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n};\n\nasync function getNextCompletionOpenAI({\n\tprompt,\n\tmaxTokens,\n\tmodel,\n\tapiKey,\n\tmessages,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmaxTokens: number;\n\tmodel: OpenAI.Chat.ChatModel;\n\tapiKey: string;\n}): Promise<string | null> {\n\tconst openai = new OpenAI({ apiKey });\n\n\tconst msg = await openai.chat.completions.create({\n\t\tmodel,\n\t\tmax_completion_tokens: maxTokens,\n\t\tmessages: [\n\t\t\t{\n\t\t\t\trole: 'system',\n\t\t\t\tcontent: prompt.system,\n\t\t\t},\n\t\t\t...(messages ?? []),\n\t\t\t{\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\tconst first = msg.choices[0];\n\n\tif (first.message.content === null) return null;\n\n\treturn first.message.content;\n}\n\nasync function getNextCompletionAnthropic({\n\tprompt,\n\tmessages,\n\tmaxTokens,\n\tmodel,\n\tapiKey,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmaxTokens: number;\n\tmodel: Anthropic.Messages.Model;\n\tapiKey: string;\n}): Promise<string | null> {\n\tconst anthropic = new Anthropic({ apiKey });\n\n\t// didn't want to do it this way but I couldn't get `.map` to work\n\tconst history: Anthropic.Messages.MessageParam[] = [];\n\n\t// add history\n\tif (messages) {\n\t\tfor (const message of messages) {\n\t\t\thistory.push({\n\t\t\t\trole: message.role,\n\t\t\t\tcontent: [{ type: 'text', text: message.content }],\n\t\t\t});\n\t\t}\n\t}\n\n\t// add new message\n\thistory.push({\n\t\trole: 'user',\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\tconst msg = await anthropic.messages.create({\n\t\tmodel,\n\t\tmax_tokens: Math.min(maxTokens, 8192),\n\t\ttemperature: 0.5,\n\t\tsystem: prompt.system,\n\t\tmessages: history,\n\t});\n\n\tconst first = msg.content[0];\n\n\t// if we don't get it in the format you want just return the new file\n\tif (first.type !== 'text') return null;\n\n\treturn first.text;\n}\n\nasync function getNextCompletionOllama({\n\tprompt,\n\tmessages,\n\tmodel,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmodel: string;\n}): Promise<string | null> {\n\tconst resp = await ollama.chat({\n\t\tmodel,\n\t\tmessages: [\n\t\t\t{\n\t\t\t\trole: 'system',\n\t\t\t\tcontent: prompt.system,\n\t\t\t},\n\t\t\t...(messages ?? []),\n\t\t\t{\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\treturn resp.message.content;\n}\n\nfunction createUpdatePrompt({\n\toriginalFile,\n\tnewFile,\n\tadditionalInstructions,\n\trePrompt,\n}: {\n\toriginalFile: File;\n\tnewFile: File;\n\tadditionalInstructions?: string;\n\trePrompt: boolean;\n}): Prompt {\n\treturn {\n\t\tsystem: 'You will merge two files provided by the user. You will respond only with the resulting code. DO NOT format the code with markdown, DO NOT put the code inside of triple quotes, only return the code as a raw string. DO NOT make unnecessary changes.',\n\t\tmessage: rePrompt\n\t\t\t? (additionalInstructions ?? '')\n\t\t\t: `\nThis is my current file ${originalFile.path}:\n<code>\n${originalFile.content}\n</code>\n\t\nThis is the file that has changes I want to update with ${newFile.path}:\n<code>\n${newFile.content}\n</code>${additionalInstructions ? `<additional-instructions>${additionalInstructions}</additional-instructions>` : ''}\n\t`,\n\t};\n}\n\n/** The AI isn't always that smart and likes to wrap the code in quotes even though I beg it not to.\n * This function attempts to remove the quotes.\n */\nexport function unwrapCodeFromQuotes(quoted: string): string {\n\tlet code = quoted.trim();\n\n\tif (code.startsWith('```')) {\n\t\t// takes out the entire first line\n\t\t// this is because often a language will come after the triple quotes\n\t\tcode = lines.get(code).slice(1).join('\\n').trim();\n\t}\n\n\tif (code.endsWith('```')) {\n\t\tconst l = lines.get(code);\n\t\tcode = l\n\t\t\t.slice(0, l.length - 1)\n\t\t\t.join('\\n')\n\t\t\t.trim();\n\t}\n\n\treturn code;\n}\n\n/** Attempts to get the cached api key if it can't it will prompt the user\n *\n * @param name\n * @returns\n */\nasync function getApiKey(name: 'OpenAI' | 'Anthropic'): Promise<string> {\n\tconst storage = new TokenManager();\n\n\tlet apiKey = storage.get(name);\n\n\tif (!apiKey) {\n\t\t// prompt for api key\n\t\tconst result = await password({\n\t\t\tmessage: `Paste your ${name} API key:`,\n\t\t\tvalidate(value) {\n\t\t\t\tif (value.trim() === '') return 'Please provide an API key';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tapiKey = result;\n\t}\n\n\tstorage.set(name, apiKey);\n\n\treturn apiKey;\n}\n\nexport { models };\n","import pkg from '../../package.json';\nimport type { PackageJson } from './package';\n\nexport const packageJson = pkg as PackageJson;\n","import color from 'chalk';\nimport { type Change, diffChars } from 'diff';\nimport * as array from './blocks/ts/array';\nimport * as lines from './blocks/ts/lines';\nimport { leftPadMin } from './blocks/ts/pad';\n\ntype Options = {\n\t/** The source file */\n\tfrom: string;\n\t/** The destination file */\n\tto: string;\n\t/** The changes to the file */\n\tchanges: Change[];\n\t/** Expands all lines to show the entire file */\n\texpand: boolean;\n\t/** Maximum lines to show before collapsing */\n\tmaxUnchanged: number;\n\t/** Color the removed lines */\n\tcolorRemoved?: (line: string) => string;\n\t/** Color the added lines */\n\tcolorAdded?: (line: string) => string;\n\t/** Color the removed chars */\n\tcolorCharsRemoved?: (line: string) => string;\n\t/** Color the added chars */\n\tcolorCharsAdded?: (line: string) => string;\n\t/** Prefixes each line with the string returned from this function. */\n\tprefix: () => string;\n\tintro: (options: Options) => string;\n\tonUnchanged: (options: Options) => string;\n};\n\n/** Check if a character is whitespace\n *\n * @param str\n * @returns\n */\nfunction isWhitespace(str: string) {\n\treturn /^\\s+$/g.test(str);\n}\n\n/** We need to add a newline at the end of each change to make sure\n * the next change can start correctly. So we take off just 1.\n *\n * @param str\n * @returns\n */\nfunction trimSingleNewLine(str: string): string {\n\tlet i = str.length - 1;\n\twhile (isWhitespace(str[i]) && i >= 0) {\n\t\tif (str[i] === '\\n') {\n\t\t\tif (str[i - 1] === '\\r') {\n\t\t\t\treturn str.slice(0, i - 1);\n\t\t\t}\n\n\t\t\treturn str.slice(0, i);\n\t\t}\n\n\t\ti--;\n\t}\n\n\treturn str;\n}\n\nfunction formatDiff({\n\tfrom,\n\tto,\n\tchanges,\n\texpand = false,\n\tmaxUnchanged = 5,\n\tcolorRemoved = color.redBright,\n\tcolorAdded = color.greenBright,\n\tcolorCharsRemoved = color.bgRedBright,\n\tcolorCharsAdded = color.bgGreenBright,\n\tprefix,\n\tonUnchanged,\n\tintro,\n}: Options): string {\n\tlet result = '';\n\n\tconst length = array.sum(changes, (change) => change.count ?? 0).toString().length + 1;\n\n\tlet lineOffset = 0;\n\n\tif (changes.length === 1 && !changes[0].added && !changes[0].removed) {\n\t\treturn onUnchanged({\n\t\t\tfrom,\n\t\t\tto,\n\t\t\tchanges,\n\t\t\texpand,\n\t\t\tmaxUnchanged,\n\t\t\tcolorAdded,\n\t\t\tcolorRemoved,\n\t\t\tprefix,\n\t\t\tonUnchanged,\n\t\t\tintro,\n\t\t});\n\t}\n\n\tresult += intro({\n\t\tfrom,\n\t\tto,\n\t\tchanges,\n\t\texpand,\n\t\tmaxUnchanged,\n\t\tcolorAdded,\n\t\tcolorRemoved,\n\t\tprefix,\n\t\tonUnchanged,\n\t\tintro,\n\t});\n\n\t/** Provides the line number prefix */\n\tconst linePrefix = (line: number): string =>\n\t\tcolor.gray(`${prefix?.() ?? ''}${leftPadMin(`${line + 1 + lineOffset} `, length)} `);\n\n\tfor (let i = 0; i < changes.length; i++) {\n\t\tconst change = changes[i];\n\n\t\tconst hasPreviousChange = changes[i - 1]?.added || changes[i - 1]?.removed;\n\t\tconst hasNextChange = changes[i + 1]?.added || changes[i + 1]?.removed;\n\n\t\tif (!change.added && !change.removed) {\n\t\t\t// show collapsed\n\t\t\tif (!expand && change.count !== undefined && change.count > maxUnchanged) {\n\t\t\t\tconst prevLineOffset = lineOffset;\n\t\t\t\tconst ls = lines.get(trimSingleNewLine(change.value));\n\n\t\t\t\tlet shownLines = 0;\n\n\t\t\t\tif (hasNextChange) shownLines += maxUnchanged;\n\t\t\t\tif (hasPreviousChange) shownLines += maxUnchanged;\n\n\t\t\t\t// just show all if we are going to show more than we have\n\t\t\t\tif (shownLines >= ls.length) {\n\t\t\t\t\tresult += `${lines.join(ls, {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t\tlineOffset += ls.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// this writes the top few lines\n\t\t\t\tif (hasPreviousChange) {\n\t\t\t\t\tresult += `${lines.join(ls.slice(0, maxUnchanged), {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t}\n\n\t\t\t\tif (ls.length > shownLines) {\n\t\t\t\t\tconst count = ls.length - shownLines;\n\t\t\t\t\tresult += `${lines.join(\n\t\t\t\t\t\tlines.get(\n\t\t\t\t\t\t\tcolor.gray(\n\t\t\t\t\t\t\t\t`+ ${count} more unchanged (${color.italic('-E to expand')})`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprefix: () => `${prefix?.() ?? ''}${leftPadMin(' ', length)} `,\n\t\t\t\t\t\t}\n\t\t\t\t\t)}\\n`;\n\t\t\t\t}\n\n\t\t\t\tif (hasNextChange) {\n\t\t\t\t\tlineOffset = lineOffset + ls.length - maxUnchanged;\n\t\t\t\t\tresult += `${lines.join(ls.slice(ls.length - maxUnchanged), {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t}\n\n\t\t\t\t// resets the line offset\n\t\t\t\tlineOffset = prevLineOffset + change.count;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// show expanded\n\t\t\tresult += `${lines.join(lines.get(trimSingleNewLine(change.value)), {\n\t\t\t\tprefix: linePrefix,\n\t\t\t})}\\n`;\n\t\t\tlineOffset += change.count ?? 0;\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst colorLineChange = (change: Change) => {\n\t\t\tif (change.added) {\n\t\t\t\treturn colorAdded(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\tif (change.removed) {\n\t\t\t\treturn colorRemoved(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\treturn change.value;\n\t\t};\n\n\t\tconst colorCharChange = (change: Change) => {\n\t\t\tif (change.added) {\n\t\t\t\treturn colorCharsAdded(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\tif (change.removed) {\n\t\t\t\treturn colorCharsRemoved(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\treturn change.value;\n\t\t};\n\n\t\tif (\n\t\t\tchange.removed &&\n\t\t\tchange.count === 1 &&\n\t\t\tchanges[i + 1]?.added &&\n\t\t\tchanges[i + 1]?.count === 1\n\t\t) {\n\t\t\t// single line change\n\t\t\tconst diffedChars = diffChars(change.value, changes[i + 1].value);\n\n\t\t\tconst sentence = diffedChars.map((chg) => colorCharChange(chg)).join('');\n\n\t\t\tresult += `${linePrefix(0)}${sentence}`;\n\n\t\t\tlineOffset += 1;\n\n\t\t\ti++;\n\t\t} else {\n\t\t\tif (isWhitespace(change.value)) {\n\t\t\t\t// adds some spaces to make sure that you can see the change\n\t\t\t\tresult += `${lines.join(lines.get(colorCharChange(change)), {\n\t\t\t\t\tprefix: (line) =>\n\t\t\t\t\t\t`${linePrefix(line)}${colorCharChange({ removed: true, value: ' ', added: false })}`,\n\t\t\t\t})}\\n`;\n\n\t\t\t\tif (!change.removed) {\n\t\t\t\t\tlineOffset += change.count ?? 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult += `${lines.join(lines.get(colorLineChange(change)), {\n\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t})}\\n`;\n\n\t\t\t\tif (!change.removed) {\n\t\t\t\t\tlineOffset += change.count ?? 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!result.endsWith('\\n')) {\n\t\tresult = result += '\\n';\n\t}\n\n\treturn result;\n}\n\nexport { formatDiff };\n","import mfFetch from 'make-fetch-happen';\nimport path from 'pathe';\n\n/** Fetch method used for (i)nternal consumption */\nexport const iFetch = mfFetch.defaults({ cachePath: path.join(import.meta.dirname, 'cache') });\n","import { Err, Ok, type Result } from './blocks/ts/result';\nimport { iFetch } from './fetch';\nimport type { Package } from './parse-package-name';\nimport * as persisted from './persisted';\n\nconst LATEST_VERSION_KEY = 'latest-version';\nconst EXPIRATION_TIME = 60 * 60 * 1000; // 1 hour\n\ntype LatestVersion = {\n\texpiration: number;\n\tversion: string;\n};\n\n/** Checks for the latest version from the github repository. Will cache results for up to 1 hour. */\nexport async function getLatestVersion({\n\tnoCache = false,\n}: { noCache?: boolean } = {}): Promise<Result<string, string>> {\n\ttry {\n\t\t// handle caching\n\t\tconst storage = persisted.get();\n\n\t\tlet version: string;\n\n\t\tif (!noCache) {\n\t\t\tconst latestVersion = storage.get(LATEST_VERSION_KEY) as LatestVersion | null;\n\n\t\t\tif (latestVersion) {\n\t\t\t\tif (latestVersion.expiration > Date.now()) {\n\t\t\t\t\tversion = latestVersion.version;\n\n\t\t\t\t\treturn Ok(version);\n\t\t\t\t}\n\n\t\t\t\tstorage.delete(LATEST_VERSION_KEY);\n\t\t\t}\n\t\t}\n\n\t\tconst response = await iFetch(\n\t\t\t'https://raw.githubusercontent.com/jsrepojs/jsrepo/refs/heads/main/packages/cli/package.json',\n\t\t\t{\n\t\t\t\ttimeout: 1000,\n\t\t\t}\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\treturn Err('Error getting version');\n\t\t}\n\n\t\tconst { version: ver } = (await response.json()) as Package;\n\n\t\tversion = ver;\n\n\t\tstorage.set(LATEST_VERSION_KEY, {\n\t\t\texpiration: Date.now() + EXPIRATION_TIME,\n\t\t\tversion,\n\t\t} satisfies LatestVersion);\n\n\t\treturn Ok(version);\n\t} catch (err) {\n\t\treturn Err(`Error getting version: ${err}`);\n\t}\n}\n","/**\n * Adapted from https://github.com/egoist/parse-package-name/blob/main/src/index.ts\n * @module\n */\n\nimport { Err, Ok } from './blocks/ts/result';\n\n// Parsed a scoped package name into name, version, and path.\nconst RE_SCOPED = /^(@[^\\/]+\\/[^@\\/]+)(?:@([^\\/]+))?(\\/.*)?$/;\n// Parsed a non-scoped package name into name, version, path\nconst RE_NON_SCOPED = /^([^@\\/]+)(?:@([^\\/]+))?(\\/.*)?$/;\n\nexport type Package = {\n\t/** Name of the package as it would be installed from npm */\n\tname: string;\n\t/** Version of the package */\n\tversion: string;\n\tpath: string;\n};\n\nexport function parsePackageName(input: string) {\n\tconst m = RE_SCOPED.exec(input) || RE_NON_SCOPED.exec(input);\n\n\tif (!m) return Err(`invalid package name: ${input}`);\n\n\treturn Ok({\n\t\tname: m[1] || '',\n\t\tversion: m[2] || undefined,\n\t\tpath: m[3] || '',\n\t});\n}\n","import fs from 'node:fs';\nimport path from 'pathe';\nimport semver from 'semver';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { parsePackageName } from './parse-package-name';\n\nfunction findNearestPackageJson(startDir: string, until: string): string | undefined {\n\tconst packagePath = path.join(startDir, 'package.json');\n\n\tif (fs.existsSync(packagePath)) return packagePath;\n\n\tif (startDir === until) return undefined;\n\n\tconst segments = startDir.split(/[\\/\\\\]/);\n\n\treturn findNearestPackageJson(segments.slice(0, segments.length - 1).join('/'), until);\n}\n\nexport type PackageJson = {\n\tname: string;\n\tversion: string;\n\tdescription: string;\n\tscripts: Record<string, string>;\n\tdependencies: Record<string, string>;\n\tdevDependencies: Record<string, string>;\n};\n\nfunction getPackage(path: string): Result<Partial<PackageJson>, string> {\n\tif (!fs.existsSync(path)) return Err(`${path} doesn't exist`);\n\n\tconst contents = fs.readFileSync(path).toString();\n\n\ttry {\n\t\treturn Ok(JSON.parse(contents));\n\t} catch (err) {\n\t\treturn Err(`Error reading package.json: ${err}`);\n\t}\n}\n\nexport function cleanVersion(version: string) {\n\tif (version[0] === '^') {\n\t\treturn version.slice(1);\n\t}\n\n\treturn version;\n}\n\n/** Returns only the dependencies that should be installed based on what is already in the package.json */\nfunction returnShouldInstall(\n\tdependencies: Set<string>,\n\tdevDependencies: Set<string>,\n\t{ cwd }: { cwd: string }\n): { devDependencies: Set<string>; dependencies: Set<string> } {\n\t// don't mutate originals\n\tconst tempDeps = dependencies;\n\tconst tempDevDeps = devDependencies;\n\n\tconst packageResult = getPackage(path.join(cwd, 'package.json'));\n\n\tif (!packageResult.isErr()) {\n\t\tconst pkg = packageResult.unwrap();\n\n\t\tif (pkg.dependencies) {\n\t\t\tfor (const dep of tempDeps) {\n\t\t\t\t// this was already parsed when building\n\t\t\t\tconst { name, version } = parsePackageName(dep).unwrap();\n\n\t\t\t\tconst foundDep = pkg.dependencies[name];\n\n\t\t\t\t// if version isn't pinned and dep exists delete\n\t\t\t\tif (version === undefined && foundDep) {\n\t\t\t\t\ttempDeps.delete(dep);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// if the version installed satisfies the requested version remove the dep\n\t\t\t\tif (foundDep && semver.satisfies(cleanVersion(foundDep), version!)) {\n\t\t\t\t\ttempDeps.delete(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (pkg.devDependencies) {\n\t\t\tfor (const dep of tempDevDeps) {\n\t\t\t\t// this was already parsed when building\n\t\t\t\tconst { name, version } = parsePackageName(dep).unwrap();\n\n\t\t\t\tconst foundDep = pkg.devDependencies[name];\n\n\t\t\t\t// if version isn't pinned and dep exists delete\n\t\t\t\tif (version === undefined && foundDep) {\n\t\t\t\t\ttempDevDeps.delete(dep);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// if the version installed satisfies the requested version remove the dep\n\t\t\t\tif (foundDep && semver.satisfies(cleanVersion(foundDep), version!)) {\n\t\t\t\t\ttempDevDeps.delete(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { dependencies: tempDeps, devDependencies: tempDevDeps };\n}\n\nexport { findNearestPackageJson, getPackage, returnShouldInstall };\n","import { stripVTControlCharacters as stripAsni } from 'node:util';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport { cancel, confirm, intro, isCancel, log, select, spinner, text } from '@clack/prompts';\nimport boxen from 'boxen';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport { diffLines } from 'diff';\nimport { type Agent, detect, resolveCommand } from 'package-manager-detector';\nimport type * as prettier from 'prettier';\nimport semver from 'semver';\nimport { cursor, erase } from 'sisteransi';\nimport { type Message, type ModelName, models } from './ai';\nimport * as ascii from './ascii';\nimport type { ProjectConfig } from './config';\nimport { packageJson } from './context';\nimport { installDependencies } from './dependencies';\nimport { formatDiff } from './diff';\nimport { formatFile } from './files';\nimport { getLatestVersion } from './get-latest-version';\nimport { returnShouldInstall } from './package';\nimport * as persisted from './persisted';\n\nexport type Task = {\n\tloadingMessage: string;\n\tcompletedMessage: string;\n\trun: () => Promise<void>;\n};\n\ntype TaskOptions = {\n\tloading: ReturnType<typeof spinner>;\n};\n\nexport async function runTasks(tasks: Task[], { loading }: TaskOptions) {\n\tfor (const task of tasks) {\n\t\tloading.start(task.loadingMessage);\n\n\t\ttry {\n\t\t\tawait task.run();\n\t\t} catch (err) {\n\t\t\tloading.stop(`Error while ${task.loadingMessage}`);\n\t\t\tconsole.error(err);\n\t\t}\n\n\t\tloading.stop(task.completedMessage);\n\t}\n}\n\nexport type ConcurrentTask = {\n\trun: ({ message }: { message: (str: string) => void }) => Promise<void>;\n};\n\nexport type ConcurrentOptions = {\n\tloading: ReturnType<typeof spinner>;\n\tstartMessage: string;\n\tstopMessage: string;\n\ttasks: ConcurrentTask[];\n};\n\nexport async function runTasksConcurrently({\n\ttasks,\n\tstartMessage,\n\tstopMessage,\n\tloading,\n}: ConcurrentOptions) {\n\tloading.start(startMessage);\n\n\tawait Promise.all([...tasks.map((t) => t.run({ message: loading.message }))]);\n\n\tloading.stop(stopMessage);\n}\n\n/** A spinner compatible with verbose logging\n *\n * @param param0\n * @returns\n */\nfunction _spinner({\n\tverbose,\n}: { verbose?: (msg: string) => void } = {}): ReturnType<typeof spinner> {\n\tconst loading = spinner();\n\n\treturn {\n\t\tmessage: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.message(msg);\n\t\t\t}\n\t\t},\n\t\tstop: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.stop(msg);\n\t\t\t}\n\t\t},\n\t\tstart: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.start(msg);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function nextSteps(steps: string[]): string {\n\tconst box = boxen(steps.join('\\n'), {\n\t\ttitle: 'Next Steps',\n\t\ttextAlignment: 'left',\n\t\tpadding: 1,\n\t\tborderColor: 'gray',\n\t\tborderStyle: {\n\t\t\ttopLeft: stripAsni(ascii.JUNCTION_RIGHT),\n\t\t\tbottomLeft: stripAsni(ascii.JUNCTION_RIGHT),\n\t\t\ttopRight: stripAsni(ascii.TOP_RIGHT_CORNER),\n\t\t\ttop: stripAsni(ascii.HORIZONTAL_LINE),\n\t\t\tbottom: stripAsni(ascii.HORIZONTAL_LINE),\n\t\t\tbottomRight: stripAsni(ascii.BOTTOM_RIGHT_CORNER),\n\t\t\tleft: stripAsni(ascii.VERTICAL_LINE),\n\t\t\tright: stripAsni(ascii.VERTICAL_LINE),\n\t\t},\n\t});\n\n\treturn `${ascii.VERTICAL_LINE}\\n${box}\\n`;\n}\n\nexport function truncatedList(items: string[], maxLength = 3) {\n\tconst truncated = items.slice(0, maxLength);\n\n\tconst remaining = items.length - truncated.length;\n\n\treturn `${truncated.join(', ')}${remaining > 0 ? ` and ${remaining} other(s)` : ''}`;\n}\n\nasync function newerVersionAvailable(name: string, oldVersion: string, newVersion: string) {\n\tconst pm = (await detect({ cwd: process.cwd() }))?.agent ?? 'npm';\n\n\tconst installCommand = resolveCommand(pm, 'global', ['jsrepo@latest']);\n\n\tconst text: string[] = [\n\t\t`Update available! ${color.redBright(oldVersion)} -> ${color.greenBright(newVersion)}`,\n\t\t`${color.cyan('Changelog')}: https://github.com/jsrepojs/jsrepo/releases/tag/${name}@${newVersion}`,\n\t\t`Run ${color.cyan(`${installCommand?.command} ${installCommand?.args.join(' ')}`)} to update!`,\n\t\t'',\n\t\t`${color.yellowBright('Star')} on GitHub for updates: https://github.com/jsrepojs/jsrepo`,\n\t];\n\n\tconst box = boxen(text.join('\\n'), {\n\t\tborderColor: 'gray',\n\t\tpadding: 1,\n\t\tmargin: 1,\n\t\ttextAlignment: 'center',\n\t});\n\n\treturn box;\n}\n\nasync function _intro() {\n\tconsole.clear();\n\n\tconst latestVersion = await getLatestVersion();\n\n\tif (latestVersion.isOk()) {\n\t\tif (semver.lt(packageJson.version, latestVersion.unwrap())) {\n\t\t\tconsole.info(\n\t\t\t\tawait newerVersionAvailable(\n\t\t\t\t\tpackageJson.name,\n\t\t\t\t\tpackageJson.version,\n\t\t\t\t\tlatestVersion.unwrap()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tintro(\n\t\t`${color.bgHex('#f7df1e').black(` ${packageJson.name} `)}${color.gray(` v${packageJson.version} `)}`\n\t);\n}\n\ntype UpdateBlockOptions = {\n\tincoming: {\n\t\tcontent: string;\n\t\tpath: string;\n\t};\n\tcurrent: {\n\t\tcontent: string;\n\t\tpath: string;\n\t};\n\tconfig: {\n\t\tformatter: ProjectConfig['formatter'];\n\t\tprettierOptions: prettier.Options | null;\n\t\tbiomeOptions: PartialConfiguration | null;\n\t};\n\toptions: {\n\t\tyes: boolean;\n\t\tno: boolean;\n\t\texpand: boolean;\n\t\tmaxUnchanged: number;\n\t\tverbose?: (msg: string) => void;\n\t\tloading: ReturnType<typeof spinner>;\n\t};\n};\n\ntype UpdateBlockResult =\n\t| {\n\t\t\tapplyChanges: true;\n\t\t\tupdatedContent: string;\n\t }\n\t| {\n\t\t\tapplyChanges: false;\n\t };\n\nconst MODEL_PREFERENCE_KEY = 'model-preference';\n\nexport async function promptUpdateFile({\n\tincoming,\n\tcurrent,\n\tconfig,\n\toptions,\n}: UpdateBlockOptions): Promise<UpdateBlockResult> {\n\tconst storage = persisted.get();\n\n\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\tlet acceptedChanges = false;\n\n\tlet updatedContent = incoming.content;\n\n\tlet model: ModelName = storage.get(MODEL_PREFERENCE_KEY, 'Claude 3.5 Sonnet') as ModelName;\n\n\tlet messageHistory: Message[] = [];\n\n\twhile (true) {\n\t\tconst changes = diffLines(current.content, updatedContent);\n\n\t\t// print diff\n\t\tconst formattedDiff = formatDiff({\n\t\t\tfrom: incoming.path,\n\t\t\tto: current.path,\n\t\t\tchanges,\n\t\t\texpand: options.expand,\n\t\t\tmaxUnchanged: options.maxUnchanged,\n\t\t\tprefix: () => `${ascii.VERTICAL_LINE} `,\n\t\t\tonUnchanged: ({ from, to, prefix }) =>\n\t\t\t\t`${prefix?.() ?? ''}${color.cyan(from)} → ${color.gray(to)} ${color.gray('(unchanged)')}\\n`,\n\t\t\tintro: ({ from, to, changes, prefix }) => {\n\t\t\t\tconst totalChanges = changes.filter((a) => a.added || a.removed).length;\n\n\t\t\t\treturn `${prefix?.() ?? ''}${color.cyan(from)} → ${color.gray(to)} (${totalChanges} change${totalChanges === 1 ? '' : 's'})\\n${prefix?.() ?? ''}\\n`;\n\t\t\t},\n\t\t});\n\n\t\tprocess.stdout.write(formattedDiff);\n\n\t\t// if there are no changes then don't ask\n\t\tif (changes.length > 1 || current.content === '') {\n\t\t\tacceptedChanges = options.yes;\n\n\t\t\tif (!options.yes && !options.no) {\n\t\t\t\tconst confirmOptions = [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Accept',\n\t\t\t\t\t\tvalue: 'accept',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Reject',\n\t\t\t\t\t\tvalue: 'reject',\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tif (messageHistory.length > 0) {\n\t\t\t\t\tconfirmOptions.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨ ${color.gray('(Iterate)')}`,\n\t\t\t\t\t\t\tvalue: 'update-iterate',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨ ${color.gray('(Start over)')}`,\n\t\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconfirmOptions.push({\n\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨`,\n\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// prompt the user\n\t\t\t\tconst confirmResult = await select({\n\t\t\t\t\tmessage: 'Accept changes?',\n\t\t\t\t\toptions: confirmOptions,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (confirmResult === 'update' || confirmResult === 'update-iterate') {\n\t\t\t\t\t// clear chat context\n\t\t\t\t\tif (confirmResult === 'update') {\n\t\t\t\t\t\tmessageHistory = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t// prompt for model\n\t\t\t\t\tconst modelResult = await select({\n\t\t\t\t\t\tmessage: 'Select a model',\n\t\t\t\t\t\toptions: Object.keys(models).map((key) => ({\n\t\t\t\t\t\t\tlabel: key,\n\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tinitialValue: model,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isCancel(modelResult)) {\n\t\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (modelResult !== model) {\n\t\t\t\t\t\tstorage.set(MODEL_PREFERENCE_KEY, modelResult);\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = modelResult as ModelName;\n\n\t\t\t\t\tconst additionalInstructions = await text({\n\t\t\t\t\t\tmessage: 'Additional instructions:',\n\t\t\t\t\t\tdefaultValue: 'None',\n\t\t\t\t\t\tvalidate: (val) => {\n\t\t\t\t\t\t\t// don't care if no messages have been sent\n\t\t\t\t\t\t\tif (messageHistory.length === 0) return undefined;\n\n\t\t\t\t\t\t\tif (val.trim() === '') {\n\t\t\t\t\t\t\t\treturn 'Please provide additional context so that I know how I can improve.';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isCancel(additionalInstructions)) {\n\t\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { content, prompt } = await models[model].updateFile({\n\t\t\t\t\t\t\toriginalFile: current,\n\t\t\t\t\t\t\tnewFile: {\n\t\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t\tconfirmResult === 'update-iterate'\n\t\t\t\t\t\t\t\t\t\t? updatedContent\n\t\t\t\t\t\t\t\t\t\t: incoming.content,\n\t\t\t\t\t\t\t\tpath: incoming.path,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tadditionalInstructions:\n\t\t\t\t\t\t\t\tadditionalInstructions !== 'None'\n\t\t\t\t\t\t\t\t\t? additionalInstructions\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tloading: options.loading,\n\t\t\t\t\t\t\tverbose: options.verbose,\n\t\t\t\t\t\t\tmessages: messageHistory,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tupdatedContent = content;\n\n\t\t\t\t\t\t// add messages to history\n\t\t\t\t\t\tmessageHistory.push({ role: 'user', content: prompt });\n\t\t\t\t\t\tmessageHistory.push({ role: 'assistant', content: content });\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\toptions.loading.stop();\n\t\t\t\t\t\tlog.error(color.red(`Error getting completions: ${err}`));\n\t\t\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tupdatedContent = await formatFile({\n\t\t\t\t\t\tfile: {\n\t\t\t\t\t\t\tcontent: updatedContent,\n\t\t\t\t\t\t\tdestPath: current.path,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbiomeOptions: config.biomeOptions,\n\t\t\t\t\t\tprettierOptions: config.prettierOptions,\n\t\t\t\t\t\tformatter: config.formatter,\n\t\t\t\t\t});\n\n\t\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tacceptedChanges = confirmResult === 'accept';\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tbreak; // there were no changes or changes were automatically accepted\n\t}\n\n\tif (acceptedChanges) {\n\t\treturn { applyChanges: true, updatedContent };\n\t}\n\n\treturn { applyChanges: false };\n}\n\ntype InstallDependenciesOptions = {\n\tyes: boolean;\n\tno?: boolean;\n\tcwd: string;\n\tpm: Agent;\n\tignoreWorkspace?: boolean;\n};\n\ntype InstallDependenciesResult = {\n\t/** True if dependencies were installed */\n\tinstalled: boolean;\n\tdependencies: Set<string>;\n\tdevDependencies: Set<string>;\n};\n\nexport async function promptInstallDependencies(\n\tdeps: Set<string>,\n\tdevDeps: Set<string>,\n\t{ yes, no = false, cwd, pm, ignoreWorkspace = false }: InstallDependenciesOptions\n): Promise<InstallDependenciesResult> {\n\t// check if dependencies are already installed\n\tconst { dependencies, devDependencies } = returnShouldInstall(deps, devDeps, { cwd });\n\n\tconst hasDependencies = dependencies.size > 0 || devDependencies.size > 0;\n\n\tif (hasDependencies) {\n\t\tlet install = yes;\n\t\tif (!yes && !no) {\n\t\t\tconst result = await confirm({\n\t\t\t\tmessage: 'Would you like to install dependencies?',\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\n\t\t\tif (isCancel(result)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tinstall = result;\n\t\t}\n\n\t\tif (install) {\n\t\t\tif (dependencies.size > 0) {\n\t\t\t\tawait installDependencies({\n\t\t\t\t\tpm,\n\t\t\t\t\tdeps: Array.from(dependencies),\n\t\t\t\t\tdev: false,\n\t\t\t\t\tcwd,\n\t\t\t\t\tignoreWorkspace,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (devDependencies.size > 0) {\n\t\t\t\tawait installDependencies({\n\t\t\t\t\tpm,\n\t\t\t\t\tdeps: Array.from(devDependencies),\n\t\t\t\t\tdev: true,\n\t\t\t\t\tcwd,\n\t\t\t\t\tignoreWorkspace,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { installed: true, dependencies, devDependencies };\n\t\t}\n\t}\n\n\treturn { installed: false, dependencies, devDependencies };\n}\n\n// From sveltejs/cli https://github.com/sveltejs/cli/blob/main/packages/clack-prompts/index.ts#L606\nexport function taskLog(title: string) {\n\tconst BAR = color.dim(ascii.VERTICAL_LINE);\n\tconst ACTIVE = color.green(ascii.S_STEP_ACTIVE);\n\tconst SUCCESS = color.green(ascii.S_SUCCESS);\n\tconst ERROR = color.red(ascii.S_ERROR);\n\n\t// heading\n\tprocess.stdout.write(`${BAR}\\n`);\n\tprocess.stdout.write(`${ACTIVE} ${title}\\n`);\n\n\tlet output = '';\n\tlet frame = '';\n\n\t// clears previous output\n\tconst clear = (eraseTitle = false): void => {\n\t\tif (!frame) return;\n\t\tconst terminalWidth = process.stdout.columns;\n\t\tconst frameHeight = frame.split('\\n').reduce((height, line) => {\n\t\t\t// accounts for line wraps\n\t\t\treturn height + Math.ceil(line.length / terminalWidth);\n\t\t}, 0);\n\t\tconst lines = frameHeight + (eraseTitle ? 1 : 0);\n\n\t\tprocess.stdout.write(cursor.up(lines));\n\t\tprocess.stdout.write(erase.down());\n\t};\n\n\t// logs the output\n\tconst print = (limit = 0): void => {\n\t\tconst lines = output.split('\\n').slice(-limit);\n\t\t// reset frame\n\t\tframe = '';\n\t\tfor (const line of lines) {\n\t\t\tframe += `${BAR} ${line}\\n`;\n\t\t}\n\t\tprocess.stdout.write(color.dim(frame));\n\t};\n\n\treturn {\n\t\tset text(data: string) {\n\t\t\tclear();\n\t\t\toutput += data;\n\t\t\t// half the height of the terminal\n\t\t\tconst frameHeight = Math.ceil(process.stdout.rows / 2);\n\t\t\tprint(frameHeight);\n\t\t},\n\t\tfail(message: string): void {\n\t\t\tclear(true);\n\t\t\tprocess.stdout.write(`${ERROR} ${message}\\n`);\n\t\t\tprint(); // log the output on failure\n\t\t},\n\t\tsuccess(message: string): void {\n\t\t\tclear(true);\n\t\t\tprocess.stdout.write(`${SUCCESS} ${message}\\n`);\n\t\t},\n\t};\n}\n\nexport { _intro as intro, _spinner as spinner };\n","import color from 'chalk';\nimport { program } from 'commander';\nimport { type Agent, resolveCommand } from 'package-manager-detector';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport { flags } from './blocks/package-managers/flags';\nimport type { ProjectConfig } from './config';\nimport { taskLog } from './prompts';\n\nexport type Options = {\n\tpm: Agent;\n\tdeps: string[];\n\t/** Install as devDependency */\n\tdev: boolean;\n\tcwd: string;\n\tignoreWorkspace?: boolean;\n};\n\n/** Installs the provided dependencies using the provided package manager\n *\n * @param param0\n * @returns\n */\nexport async function installDependencies({\n\tpm,\n\tdeps,\n\tdev,\n\tcwd,\n\tignoreWorkspace = false,\n}: Options) {\n\tconst args = [...deps];\n\n\tif (dev) {\n\t\targs.push(flags[pm]['install-as-dev-dependency']);\n\t}\n\n\tconst noWorkspace = flags[pm]['no-workspace'];\n\n\tif (ignoreWorkspace && noWorkspace) {\n\t\targs.push(noWorkspace);\n\t}\n\n\tconst add = resolveCommand(pm, 'add', args);\n\n\tif (add == null) {\n\t\tprogram.error(color.red(`Could not resolve add command for '${pm}'.`));\n\t}\n\n\tconst task = taskLog(`Installing dependencies with ${pm}...`);\n\n\ttry {\n\t\tconst proc = x(add.command, [...add.args], { nodeOptions: { cwd } });\n\n\t\tfor await (const line of proc) {\n\t\t\ttask.text = `${line}\\n`;\n\t\t}\n\n\t\ttask.success(`Installed ${color.cyan(deps.join(', '))}`);\n\t} catch {\n\t\ttask.fail('Failed to install dependencies');\n\t\tprocess.exit(2);\n\t}\n}\n\nconst templatePattern = /\\{\\{([^\\/]+)\\/([^\\}]+)\\}\\}/g;\n\nexport type ResolveOptions = {\n\ttemplate: string;\n\tconfig: ProjectConfig;\n\tdestPath: string;\n\tcwd: string;\n};\n\n/** Takes a template and uses replaces it with an alias or relative path that resolves to the correct block\n *\n * @param param0\n * @returns\n */\nexport function resolveLocalDependencyTemplate({\n\ttemplate,\n\tconfig,\n\tdestPath,\n\tcwd,\n}: ResolveOptions) {\n\tconst destDir = path.join(destPath, '../');\n\n\treturn template.replace(templatePattern, (_, category, name) => {\n\t\tif (config.paths[category] === undefined) {\n\t\t\t// if relative make it relative\n\t\t\tif (config.paths['*'].startsWith('.')) {\n\t\t\t\tconst relative = path.relative(\n\t\t\t\t\tdestDir,\n\t\t\t\t\tpath.join(cwd, config.paths['*'], category, name)\n\t\t\t\t);\n\n\t\t\t\treturn relative.startsWith('.') ? relative : `./${relative}`;\n\t\t\t}\n\n\t\t\treturn path.join(config.paths['*'], category, name);\n\t\t}\n\n\t\t// if relative make it relative\n\t\tif (config.paths[category].startsWith('.')) {\n\t\t\tconst relative = path.relative(destDir, path.join(cwd, config.paths[category], name));\n\n\t\t\treturn relative.startsWith('.') ? relative : `./${relative}`;\n\t\t}\n\n\t\treturn path.join(config.paths[category], name);\n\t});\n}\n","import fs from 'node:fs';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport color from 'chalk';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport { type TsConfigResult, getTsconfig } from 'get-tsconfig';\nimport path from 'pathe';\nimport type * as prettier from 'prettier';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { endsWithOneOf } from './blocks/ts/strings';\nimport type { ProjectConfig } from './config';\nimport { resolveLocalDependencyTemplate } from './dependencies';\nimport { languages } from './language-support';\n\ntype TransformRemoteContentOptions = {\n\tfile: {\n\t\t/** The content of the file */\n\t\tcontent: string;\n\t\t/** The dest path of the file used to determine the language */\n\t\tdestPath: string;\n\t};\n\tconfig: ProjectConfig;\n\twatermark: string;\n\timports: Record<string, string>;\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n\tcwd: string;\n\tverbose?: (msg: string) => void;\n};\n\n/** Makes the necessary modifications to the content of the file to ensure it works properly in the users project\n *\n * @param param0\n * @returns\n */\nexport async function transformRemoteContent({\n\tfile,\n\tconfig,\n\timports,\n\twatermark,\n\tprettierOptions,\n\tbiomeOptions,\n\tcwd,\n\tverbose,\n}: TransformRemoteContentOptions): Promise<Result<string, string>> {\n\tconst lang = languages.find((lang) => lang.matches(file.destPath));\n\n\tlet content: string = file.content;\n\n\tif (lang) {\n\t\tif (config.watermark) {\n\t\t\tconst comment = lang.comment(watermark);\n\n\t\t\tcontent = `${comment}\\n\\n${content}`;\n\t\t}\n\n\t\tverbose?.(`Formatting ${color.bold(file.destPath)}`);\n\n\t\ttry {\n\t\t\tcontent = await lang.format(content, {\n\t\t\t\tfilePath: file.destPath,\n\t\t\t\tformatter: config.formatter,\n\t\t\t\tprettierOptions,\n\t\t\t\tbiomeOptions,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\treturn Err(`Error formatting ${color.bold(file.destPath)} ${err}`);\n\t\t}\n\t}\n\n\t// transform imports\n\tfor (const [literal, template] of Object.entries(imports)) {\n\t\tconst resolvedImport = resolveLocalDependencyTemplate({\n\t\t\ttemplate,\n\t\t\tconfig,\n\t\t\tdestPath: file.destPath,\n\t\t\tcwd,\n\t\t});\n\n\t\t// this way we only replace the exact import since it will be surrounded in quotes\n\t\tconst literalRegex = new RegExp(`(['\"])${escapeStringRegexp(literal)}\\\\1`, 'g');\n\n\t\tcontent = content.replaceAll(literalRegex, `$1${resolvedImport}$1`);\n\t}\n\n\treturn Ok(content);\n}\n\ntype FormatOptions = {\n\tfile: {\n\t\t/** The content of the file */\n\t\tcontent: string;\n\t\t/** The dest path of the file used to determine the language */\n\t\tdestPath: string;\n\t};\n\tformatter: ProjectConfig['formatter'];\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\n/** Auto detects the language and formats the file content.\n *\n * @param param0\n * @returns\n */\nexport async function formatFile({\n\tfile,\n\tformatter,\n\tprettierOptions,\n\tbiomeOptions,\n}: FormatOptions): Promise<string> {\n\tconst lang = languages.find((lang) => lang.matches(file.destPath));\n\n\tlet newContent = file.content;\n\n\tif (lang) {\n\t\ttry {\n\t\t\tnewContent = await lang.format(file.content, {\n\t\t\t\tfilePath: file.destPath,\n\t\t\t\tformatter,\n\t\t\t\tprettierOptions,\n\t\t\t\tbiomeOptions,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn newContent;\n\t\t}\n\t}\n\n\treturn newContent;\n}\n\nexport function matchJSDescendant(searchFilePath: string): string | undefined {\n\tconst MATCH_EXTENSIONS = ['.js', '.ts', '.cjs', '.mjs'];\n\n\tif (!endsWithOneOf(searchFilePath, MATCH_EXTENSIONS)) return undefined;\n\n\tconst dir = path.dirname(searchFilePath);\n\n\tconst files = fs.readdirSync(dir);\n\n\tconst parsedSearch = path.parse(searchFilePath);\n\n\tfor (const file of files) {\n\t\tif (!endsWithOneOf(file, MATCH_EXTENSIONS)) continue;\n\n\t\tif (path.parse(file).name === parsedSearch.name) return path.join(dir, file);\n\t}\n\n\treturn undefined;\n}\n\n/** Attempts to get the js/tsconfig file for the searched path\n *\n * @param searchPath\n * @returns\n */\nexport function tryGetTsconfig(searchPath?: string): Result<TsConfigResult | null, string> {\n\tlet config: TsConfigResult | null;\n\n\ttry {\n\t\tconfig = getTsconfig(searchPath, 'tsconfig.json');\n\n\t\tif (!config) {\n\t\t\t// if we don't find the config at first check for a jsconfig\n\t\t\tconfig = getTsconfig(searchPath, 'jsconfig.json');\n\n\t\t\tif (!config) {\n\t\t\t\treturn Ok(null);\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\treturn Err(`Error while trying to get ${color.bold('tsconfig.json')}: ${err}`);\n\t}\n\n\treturn Ok(config);\n}\n","import fs from 'node:fs';\nimport { Biome, Distribution } from '@biomejs/js-api';\nimport * as cssDependency from 'css-dependency';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.css` files. */\nexport const css: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.css'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst parseResult = cssDependency.parse(sourceCode, { allowTailwindDirectives: true });\n\n\t\tif (parseResult.isErr()) {\n\t\t\treturn Err(parseResult.unwrapErr().message);\n\t\t}\n\n\t\tconst imports = parseResult.unwrap();\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports.map((imp) => imp.module),\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, prettierOptions, biomeOptions, filePath }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t\t}\n\n\t\tconst biome = await Biome.create({\n\t\t\tdistribution: Distribution.NODE,\n\t\t});\n\n\t\tif (biomeOptions) {\n\t\t\tbiome.applyConfiguration(biomeOptions);\n\t\t}\n\n\t\treturn biome.formatContent(code, { filePath }).content;\n\t},\n};\n","import fs from 'node:fs';\nimport * as parse5 from 'parse5';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.html` files. */\nexport const html: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.html'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst ast = parse5.parse(sourceCode);\n\n\t\tconst imports: string[] = [];\n\n\t\t// @ts-ignore yeah I know\n\t\tconst walk = (node, enter: (node) => void) => {\n\t\t\tif (!node) return;\n\n\t\t\tenter(node);\n\n\t\t\tif (node.childNodes && node.childNodes.length > 0) {\n\t\t\t\tfor (const n of node.childNodes) {\n\t\t\t\t\twalk(n, enter);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const node of ast.childNodes) {\n\t\t\twalk(node, (n) => {\n\t\t\t\tif (n.tagName === 'script') {\n\t\t\t\t\tfor (const attr of n.attrs) {\n\t\t\t\t\t\tif (attr.name === 'src') {\n\t\t\t\t\t\t\timports.push(attr.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tn.tagName === 'link' &&\n\t\t\t\t\t// @ts-ignore yeah I know\n\t\t\t\t\tn.attrs.find((attr) => attr.name === 'rel' && attr.value === 'stylesheet')\n\t\t\t\t) {\n\t\t\t\t\tfor (const attr of n.attrs) {\n\t\t\t\t\t\tif (attr.name === 'href' && !attr.value.startsWith('http')) {\n\t\t\t\t\t\t\timports.push(attr.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['svelte', '@sveltejs/kit', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'html', ...prettierOptions });\n\t\t}\n\n\t\t// biome is in progress for formatting html\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { Biome, Distribution } from '@biomejs/js-api';\nimport oxc from 'oxc-parser';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Parses the provided code and returns the names of any other modules required by the module.\n *\n * @param fileName This must be provided for oxc to infer the dialect i.e. (jsx, tsx, js, ts)\n * @param code The code to be parsed\n * @returns\n */\nexport function getJavascriptImports(fileName: string, code: string): string[] {\n\tconst result = oxc.parseSync(fileName, code);\n\n\tconst modules: string[] = [];\n\n\t// handle static imports\n\tfor (const imp of result.module.staticImports) {\n\t\tmodules.push(imp.moduleRequest.value);\n\t}\n\n\t// handle dynamic imports\n\tfor (const imp of result.module.dynamicImports) {\n\t\t// trims the codes and gets the module\n\t\tconst mod = code.slice(imp.moduleRequest.start + 1, imp.moduleRequest.end - 1);\n\n\t\tmodules.push(mod);\n\t}\n\n\t// handle `export x from y` syntax\n\tfor (const exp of result.module.staticExports) {\n\t\tfor (const entry of exp.entries) {\n\t\t\tif (entry.moduleRequest) {\n\t\t\t\tmodules.push(entry.moduleRequest.value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn modules;\n}\n\n/** Language support for `*.(js|ts|jsx|tsx)` files. */\nexport const typescript: Lang = {\n\tmatches: (fileName) =>\n\t\tfileName.endsWith('.ts') ||\n\t\tfileName.endsWith('.js') ||\n\t\tfileName.endsWith('.tsx') ||\n\t\tfileName.endsWith('.jsx'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst code = fs.readFileSync(filePath).toString();\n\n\t\tconst modules = getJavascriptImports(filePath, code);\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, filePath, prettierOptions, biomeOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t\t}\n\n\t\tconst biome = await Biome.create({\n\t\t\tdistribution: Distribution.NODE,\n\t\t});\n\n\t\tif (biomeOptions) {\n\t\t\tbiome.applyConfiguration(biomeOptions);\n\t\t}\n\n\t\treturn biome.formatContent(code, { filePath }).content;\n\t},\n};\n","import { Biome, Distribution } from '@biomejs/js-api';\nimport * as prettier from 'prettier';\nimport type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\nconst format: Lang['format'] = async (\n\tcode,\n\t{ formatter, prettierOptions, biomeOptions, filePath }\n) => {\n\tif (!formatter) return code;\n\n\tif (formatter === 'prettier') {\n\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t}\n\n\tconst biome = await Biome.create({\n\t\tdistribution: Distribution.NODE,\n\t});\n\n\tif (biomeOptions) {\n\t\tbiome.applyConfiguration({\n\t\t\t...biomeOptions,\n\t\t\tjson: { parser: { allowComments: true } },\n\t\t});\n\t}\n\n\treturn biome.formatContent(code, { filePath }).content;\n};\n\n/** Language support for `*.(json)` files. */\nexport const json: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.json'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\t// json doesn't support comments\n\tcomment: (content: string) => content,\n\tformat,\n};\n\n/** Language support for `*.(jsonc)` files. */\nexport const jsonc: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.jsonc'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat,\n};\n","import fs from 'node:fs';\nimport * as cssDependency from 'css-dependency';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.(sass|scss)` files. */\nexport const sass: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.sass') || fileName.endsWith('.scss'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst parseResult = cssDependency.parse(sourceCode);\n\n\t\tif (parseResult.isErr()) {\n\t\t\treturn Err(parseResult.unwrapErr().message);\n\t\t}\n\n\t\tconst imports = parseResult.unwrap();\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports.map((imp) => imp.module),\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'scss', ...prettierOptions });\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { type Node, walk } from 'estree-walker';\nimport * as prettier from 'prettier';\nimport * as sv from 'svelte/compiler';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.svelte` files. */\nexport const svelte: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.svelte'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst root = sv.parse(sourceCode, { modern: true, filename: filePath });\n\n\t\t// if no script tag then no dependencies\n\t\tif (!root.instance && !root.module)\n\t\t\treturn Ok({ dependencies: [], devDependencies: [], local: [], imports: {} });\n\n\t\tconst modules: string[] = [];\n\n\t\tconst enter = (node: Node) => {\n\t\t\tif (\n\t\t\t\tnode.type === 'ImportDeclaration' ||\n\t\t\t\tnode.type === 'ExportAllDeclaration' ||\n\t\t\t\tnode.type === 'ExportNamedDeclaration'\n\t\t\t) {\n\t\t\t\tif (typeof node.source?.value === 'string') {\n\t\t\t\t\tmodules.push(node.source.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.type === 'ImportExpression') {\n\t\t\t\tif (node.source.type === 'Literal' && typeof node.source.value === 'string') {\n\t\t\t\t\tmodules.push(node.source.value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (root.instance) {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: The root instance is just missing the `id` prop\n\t\t\twalk(root.instance as any, { enter });\n\t\t}\n\n\t\tif (root.module) {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: The root instance is just missing the `id` prop\n\t\t\twalk(root.module as any, { enter });\n\t\t}\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['svelte', '@sveltejs/kit', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, filePath, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\t// only attempt to format if svelte plugin is included in the config.\n\t\tif (\n\t\t\tformatter === 'prettier' &&\n\t\t\tprettierOptions &&\n\t\t\tprettierOptions.plugins?.find((plugin) => plugin === 'prettier-plugin-svelte')\n\t\t) {\n\t\t\treturn await prettier.format(code, {\n\t\t\t\tfilepath: filePath,\n\t\t\t\t...prettierOptions,\n\t\t\t});\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\n/** Language support for `*.svg` files. */\nexport const svg: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.svg'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code) => code,\n};\n","import fs from 'node:fs';\nimport * as prettier from 'prettier';\nimport * as v from 'vue/compiler-sfc';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\nimport { getJavascriptImports } from './javascript';\n\n/** Language support for `*.vue` files. */\nexport const vue: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.vue'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst code = fs.readFileSync(filePath).toString();\n\n\t\tconst parsed = v.parse(code, { filename: filePath });\n\n\t\tconst modules: string[] = [];\n\n\t\tif (parsed.descriptor.script?.content) {\n\t\t\tconst mods = getJavascriptImports('noop.ts', parsed.descriptor.script.content);\n\n\t\t\tmodules.push(...mods);\n\t\t}\n\n\t\tif (parsed.descriptor.scriptSetup?.content) {\n\t\t\tconst mods = getJavascriptImports('noop.ts', parsed.descriptor.scriptSetup.content);\n\n\t\t\tmodules.push(...mods);\n\t\t}\n\n\t\tif (modules.length === 0)\n\t\t\treturn Ok({ dependencies: [], devDependencies: [], local: [], imports: {} });\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['vue', 'nuxt', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'vue', ...prettierOptions });\n\t\t}\n\n\t\t// biome has issues with vue support\n\t\treturn code;\n\t},\n};\n","import * as prettier from 'prettier';\nimport type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\n/** Language support for `*.(yaml|yml)` files. */\nexport const yaml: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.yml') || fileName.endsWith('.yaml'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content: string) => lines.join(lines.get(content), { prefix: () => '# ' }),\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'yaml', ...prettierOptions });\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { builtinModules } from 'node:module';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport color from 'chalk';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport path from 'pathe';\nimport type * as prettier from 'prettier';\nimport validatePackageName from 'validate-npm-package-name';\nimport * as ascii from '../ascii';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok, type Result } from '../blocks/ts/result';\nimport type { Formatter } from '../config';\nimport { tryGetTsconfig } from '../files';\nimport { findNearestPackageJson } from '../package';\nimport { parsePackageName } from '../parse-package-name';\nimport { css } from './css';\nimport { html } from './html';\nimport { typescript } from './javascript';\nimport { json, jsonc } from './json';\nimport { sass } from './sass';\nimport { svelte } from './svelte';\nimport { svg } from './svg';\nimport { vue } from './vue';\nimport { yaml } from './yaml';\n\nexport type ResolvedDependencies = {\n\tlocal: string[];\n\tdevDependencies: string[];\n\tdependencies: string[];\n\t/** Maps a literal import to a template import to be replaced during add/update */\n\timports: Record<string, string>;\n};\n\nexport type ResolveDependencyOptions = {\n\tfilePath: string;\n\t/** Only valid for folder based blocks. Helps identify a self dependency */\n\tcontainingDir?: string;\n\tisSubDir: boolean;\n\texcludeDeps: string[];\n\tcwd: string;\n\tdirs: string[];\n};\n\nexport type FormatOptions = {\n\tformatter?: Formatter;\n\t/** Can be used to infer the prettier parser */\n\tfilePath: string;\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\nexport type Lang = {\n\t/** Matches the supported file types */\n\tmatches: (fileName: string) => boolean;\n\t/** Reads the file and gets any dependencies from its imports */\n\tresolveDependencies: (opts: ResolveDependencyOptions) => Result<ResolvedDependencies, string>;\n\t/** Returns a multiline comment containing the content */\n\tcomment: (content: string) => string;\n\tformat: (code: string, opts: FormatOptions) => Promise<string>;\n};\n\nexport type ResolveImportOptions = {\n\tmoduleSpecifiers: string[];\n\tisSubDir: boolean;\n\tfilePath: string;\n\t/** Only valid for folder based blocks. Helps identify a self dependency */\n\tcontainingDir?: string;\n\tdoNotInstall?: string[];\n\tdirs: string[];\n\tcwd: string;\n};\n\nexport function formatError(err: string) {\n\treturn `${lines.join(lines.get(err), {\n\t\tprefix: (l) => {\n\t\t\tif (l === 0) return `${ascii.VERTICAL_LINE} ${ascii.ERROR} `;\n\n\t\t\treturn `${ascii.VERTICAL_LINE} `;\n\t\t},\n\t})}`;\n}\n\nexport function resolveImports({\n\tmoduleSpecifiers,\n\tisSubDir,\n\tfilePath,\n\tcontainingDir,\n\tdoNotInstall,\n\tdirs,\n\tcwd,\n}: ResolveImportOptions): Result<ResolvedDependencies, string[]> {\n\tconst errors: string[] = [];\n\n\tconst deps = new Set<string>();\n\tconst localDeps = new Set<string>();\n\tconst imports: Record<string, string> = {};\n\n\tfor (const specifier of moduleSpecifiers) {\n\t\t// don't add dependencies to node\n\t\tif (builtinModules.includes(specifier) || specifier.startsWith('node:')) continue;\n\n\t\t// check if specifier is a local dependency\n\t\tif (specifier.startsWith('.')) {\n\t\t\tconst localDep = resolveLocalImport(specifier, isSubDir, {\n\t\t\t\tfilePath,\n\t\t\t\tcontainingDir,\n\t\t\t\tdirs,\n\t\t\t\tcwd,\n\t\t\t});\n\n\t\t\tif (localDep.isErr()) {\n\t\t\t\terrors.push(localDep.unwrapErr());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst dep = localDep.unwrap();\n\n\t\t\tif (dep) {\n\t\t\t\tlocalDeps.add(dep.dependency);\n\t\t\t\timports[specifier] = dep.template;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\t// check if the specifier is a package\n\t\tconst parsed = parsePackageName(specifier);\n\n\t\tif (!parsed.isErr()) {\n\t\t\tconst depInfo = parsed.unwrap();\n\n\t\t\tif (validatePackageName(depInfo.name).validForNewPackages) {\n\t\t\t\tdeps.add(specifier);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// if specifier wasn't a local dependency or package then it might be a path alias\n\t\tconst localDep = tryResolveLocalAlias(specifier, isSubDir, {\n\t\t\tfilePath,\n\t\t\tcontainingDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t});\n\n\t\tif (localDep.isErr()) {\n\t\t\terrors.push(localDep.unwrapErr());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst dep = localDep.unwrap();\n\n\t\tif (dep) {\n\t\t\tlocalDeps.add(dep.dependency);\n\t\t\timports[specifier] = dep.template;\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(specifier)}\\` from ${filePath}. Reason: Not a valid package name or path alias.`\n\t\t\t);\n\t\t}\n\t}\n\n\tif (errors.length > 0) {\n\t\treturn Err(errors);\n\t}\n\n\tconst { devDependencies, dependencies } = resolveRemoteDeps(Array.from(deps), filePath, {\n\t\tdoNotInstall: doNotInstall ? doNotInstall : [],\n\t});\n\n\treturn Ok({\n\t\tdependencies,\n\t\tdevDependencies,\n\t\tlocal: Array.from(localDeps),\n\t\timports,\n\t} satisfies ResolvedDependencies);\n}\n\ntype ResolveLocalImportResult = {\n\t/** The local block that is a dependency */\n\tdependency: string;\n\t/** A template used to resolve the import during add/update */\n\ttemplate: string;\n};\n\nfunction resolveLocalImport(\n\tmod: string,\n\tisSubDir: boolean,\n\t{\n\t\tfilePath,\n\t\tcontainingDir,\n\t\tdropExtension = true,\n\t\talias,\n\t\tdirs,\n\t\tcwd,\n\t}: {\n\t\tfilePath: string;\n\t\tcontainingDir?: string;\n\t\tdirs: string[];\n\t\talias?: string;\n\t\tmodIsFile?: boolean;\n\t\tcwd: string;\n\t\tdropExtension?: boolean;\n\t}\n): Result<ResolveLocalImportResult | undefined, string> {\n\tif (isSubDir && (mod.startsWith('./') || mod === '.')) return Ok(undefined);\n\n\t// get the path to the current category\n\t// if the block is a subdirectory block then containing dir must exist\n\tconst categoryDir = isSubDir ? path.join(containingDir!, '../') : path.join(filePath, '../');\n\n\t// get the actual path to the module\n\tconst modPath = path.join(path.join(filePath, '../'), mod);\n\n\t// get the full path to the current category containing folder\n\tconst fullDir = path.join(categoryDir, '../');\n\n\t// prevent self reference in subdirectories\n\tif (containingDir && modPath.startsWith(containingDir)) return Ok(undefined);\n\n\tif (modPath.startsWith(fullDir)) {\n\t\treturn Ok(parsePath(modPath.slice(fullDir.length), dropExtension));\n\t}\n\n\tconst absPath = path.resolve(modPath);\n\n\t// Here we try and find the most specific directory that matches the module.\n\t// This fixes issues where there are 2 nested directories that both\n\t// contain the module by simply choosing the more specific path.\n\tlet longestMatch: string | null = null;\n\tfor (const dir of dirs) {\n\t\tconst containingPath = path.resolve(path.join(cwd, dir));\n\n\t\tif (absPath.startsWith(containingPath)) {\n\t\t\tif (longestMatch === null || longestMatch.length < containingPath.length) {\n\t\t\t\tlongestMatch = containingPath;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (longestMatch !== null) {\n\t\treturn Ok(parsePath(absPath.slice(longestMatch.length + 1), dropExtension));\n\t}\n\n\treturn Err(\n\t\t`${filePath}:\\n${alias ? alias : mod} references code not contained in ${color.bold(dirs.join(', '))} and cannot be resolved.`\n\t);\n}\n\nfunction parsePath(localPath: string, dropExtension = true): ResolveLocalImportResult {\n\tlet [category, block, ...rest] = localPath.split('/');\n\n\t// if undefined we assume we are pointing to the index file\n\tif (block === undefined) {\n\t\tblock = 'index';\n\t}\n\n\tlet trimmedBlock = block;\n\n\t// remove file extension\n\tif (dropExtension && trimmedBlock.includes('.')) {\n\t\ttrimmedBlock = trimmedBlock.slice(\n\t\t\t0,\n\t\t\ttrimmedBlock.length - path.parse(trimmedBlock).ext.length\n\t\t);\n\t}\n\n\tconst blockSpecifier = `${category}/${trimmedBlock}`;\n\n\tlet template = `{{${blockSpecifier}}}`;\n\n\tif (rest.length === 0) {\n\t\tif (trimmedBlock.length !== block.length) {\n\t\t\t// add extension to template\n\t\t\ttemplate += path.parse(block).ext;\n\t\t}\n\t} else {\n\t\ttemplate += `/${rest.join('/')}`;\n\t}\n\n\treturn { dependency: blockSpecifier, template };\n}\n\n/** Tries to resolve the modules as an alias using the tsconfig. */\nfunction tryResolveLocalAlias(\n\tmod: string,\n\tisSubDir: boolean,\n\t{\n\t\tfilePath,\n\t\tdirs,\n\t\tcwd,\n\t\tcontainingDir,\n\t}: { filePath: string; containingDir?: string; dirs: string[]; cwd: string }\n): Result<ResolveLocalImportResult | undefined, string> {\n\tconst configResult = tryGetTsconfig(filePath);\n\n\tif (configResult.isErr()) return Err(configResult.unwrapErr());\n\n\tconst config = configResult.unwrap();\n\n\tif (config === null) return Ok(undefined);\n\n\tconst matcher = createPathsMatcher(config);\n\n\tif (matcher) {\n\t\t// if the mod is actually remote the returns paths will be empty\n\t\tconst paths = matcher(mod);\n\n\t\tfor (const modPath of paths) {\n\t\t\tconst foundMod = searchForModule(modPath);\n\n\t\t\tif (!foundMod) continue;\n\n\t\t\tconst pathResolved = path.relative(\n\t\t\t\tpath.resolve(path.join(filePath, '../')),\n\t\t\t\tfoundMod.prettyPath\n\t\t\t);\n\n\t\t\t// if it is not equal the extension has already been dropped\n\t\t\t// we omit the '' extension because it there is no extension there is nothing to be dropped\n\t\t\tconst shouldDropExtension = resolutionEquality(foundMod.prettyPath, foundMod.path, [\n\t\t\t\t'.js',\n\t\t\t\t'.ts',\n\t\t\t]);\n\n\t\t\tconst localDep = resolveLocalImport(pathResolved, isSubDir, {\n\t\t\t\tfilePath,\n\t\t\t\tcontainingDir,\n\t\t\t\talias: mod,\n\t\t\t\tdropExtension: shouldDropExtension,\n\t\t\t\tdirs,\n\t\t\t\tcwd,\n\t\t\t\tmodIsFile: foundMod.type === 'file',\n\t\t\t});\n\n\t\t\tif (localDep.isErr()) return Err(localDep.unwrapErr());\n\n\t\t\tif (localDep.unwrap()) return Ok(localDep.unwrap()!);\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn Ok(undefined);\n}\n\n/** Node allows no extension or a .js extension or a .ts extension to all resolve to the same place because of this we employ a different method of equality.\n *\n * Basically we want to treat a path with a .js extension as equal to the same path with a .ts extension and vise versa.\n */\nfunction resolutionEquality(pathA: string, pathB: string, validExtensions = ['.ts', '.js', '']) {\n\tif (pathA === pathB) return true;\n\n\tconst parsedA = path.parse(pathA);\n\tconst parsedB = path.parse(pathB);\n\n\tconst pathAWithoutExtension = path.join(parsedA.dir, parsedA.name);\n\tconst pathBWithoutExtension = path.join(parsedB.dir, parsedB.name);\n\n\t// if paths without extension aren't equal then return false\n\tif (pathAWithoutExtension !== pathBWithoutExtension) return false;\n\n\t// as long as both paths have a .js or .ts extension we can be sure that they are equal\n\tif (validExtensions.includes(parsedA.ext) && validExtensions.includes(parsedB.ext)) return true;\n\n\treturn false;\n}\n\n/** Searches around for the module\n *\n * @param path\n */\nfunction searchForModule(\n\tmodPath: string\n): { path: string; prettyPath: string; type: 'file' | 'directory' } | undefined {\n\tif (fs.existsSync(modPath)) {\n\t\treturn {\n\t\t\tpath: modPath,\n\t\t\tprettyPath: modPath,\n\t\t\ttype: fs.statSync(modPath).isDirectory() ? 'directory' : 'file',\n\t\t};\n\t}\n\n\tconst containing = path.join(modPath, '../');\n\n\t// if containing folder doesn't exist this can't exist\n\tif (!fs.existsSync(containing)) return undefined;\n\n\tconst modParsed = path.parse(modPath);\n\n\t// sometimes it will point to .js because it will resolve in prod but not for us\n\tif (modParsed.ext === '.js') {\n\t\tconst newPath = `${modPath.slice(0, modPath.length - 3)}.ts`;\n\n\t\tif (fs.existsSync(newPath)) return { path: newPath, prettyPath: modPath, type: 'file' };\n\t}\n\n\tconst files = fs.readdirSync(containing);\n\n\tfor (const file of files) {\n\t\tconst fileParsed = path.parse(file);\n\n\t\t// this way the extension doesn't matter\n\t\tif (fileParsed.name === modParsed.base) {\n\t\t\tconst filePath = path.join(containing, file);\n\n\t\t\t// we remove the extension since it wasn't included by the user\n\t\t\tconst prettyPath = filePath.slice(0, filePath.length - fileParsed.ext.length);\n\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tprettyPath: prettyPath,\n\t\t\t\ttype: fs.statSync(filePath).isDirectory() ? 'directory' : 'file',\n\t\t\t};\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\n/** Iterates over the dependency and resolves each one using the nearest package.json file.\n * Strips node APIs and pins the version of each dependency based on what is in the package.json.\n *\n * @param deps\n * @param filePath\n * @returns\n */\nfunction resolveRemoteDeps(\n\tdeps: string[],\n\tfilePath: string,\n\t{ doNotInstall }: { doNotInstall: string[] } = {\n\t\tdoNotInstall: [],\n\t}\n) {\n\tconst exemptDeps = new Set(doNotInstall);\n\n\tconst pkgPath = findNearestPackageJson(path.dirname(filePath), '');\n\n\tconst dependencies = new Set<string>();\n\tconst devDependencies = new Set<string>();\n\n\tif (pkgPath) {\n\t\tconst { devDependencies: packageDevDependencies, dependencies: packageDependencies } =\n\t\t\tJSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n\n\t\tfor (const dep of deps) {\n\t\t\tconst parsed = parsePackageName(dep);\n\n\t\t\tif (parsed.isErr()) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(dep)}\\`. Reason: Couldn't parse package name`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst depInfo = parsed.unwrap();\n\n\t\t\tif (!validatePackageName(depInfo.name).validForNewPackages) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(dep)}\\`. Reason: Not a valid package name`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (exemptDeps.has(depInfo.name)) continue;\n\n\t\t\tlet version: string | undefined = undefined;\n\t\t\tif (packageDependencies !== undefined) {\n\t\t\t\tversion = packageDependencies[depInfo.name];\n\t\t\t}\n\n\t\t\tif (version !== undefined) {\n\t\t\t\tdependencies.add(`${depInfo.name}@${version}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (packageDevDependencies !== undefined) {\n\t\t\t\tversion = packageDevDependencies[depInfo.name];\n\t\t\t}\n\n\t\t\tif (version !== undefined) {\n\t\t\t\tdevDependencies.add(`${depInfo.name}@${version}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// if no version found just add it without a version\n\t\t\tdependencies.add(depInfo.name);\n\t\t}\n\t}\n\n\treturn {\n\t\tdependencies: Array.from(dependencies),\n\t\tdevDependencies: Array.from(devDependencies),\n\t};\n}\n\nconst languages: Lang[] = [css, html, json, jsonc, sass, svelte, svg, typescript, vue, yaml];\n\nexport {\n\tcss,\n\thtml,\n\tjson,\n\tjsonc,\n\tsass,\n\tsvelte,\n\tsvg,\n\ttypescript,\n\tvue,\n\tyaml,\n\tlanguages,\n\tresolutionEquality,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport type { Block, Category, Manifest } from '../../types';\nimport * as ascii from '../ascii';\nimport type { RegistryConfig } from '../config';\nimport { parsePackageName } from '../parse-package-name';\n\n// Update this list as needed\n// Use the name of the package not the framework\nconst FRAMEWORKS = new Set([\n\t// svelte\n\t'svelte',\n\t'@sveltejs/kit',\n\n\t// vue\n\t'vue',\n\t'nuxt',\n\n\t// react\n\t'react',\n\t'react-dom',\n\t'next',\n\t'@remix-run/react',\n\n\t// angular\n\t'@angular/core',\n\t'@angular/common',\n\t'@angular/forms',\n\t'@angular/platform-browser',\n\t'@angular/platform-browser-dynamic',\n\t'@angular/router',\n\n\t// misc\n\t'@builder.io/qwik',\n\t'astro',\n\t'solid-js',\n]);\n\nconst ruleLevelSchema = v.union([v.literal('off'), v.literal('warn'), v.literal('error')]);\n\nexport type RuleLevel = v.InferInput<typeof ruleLevelSchema>;\n\nexport type CheckOptions = {\n\tmanifest: Manifest;\n\toptions: (string | number)[];\n\tcwd: string;\n\tconfig: RegistryConfig;\n};\n\nexport type Rule = { description: string } & (\n\t| {\n\t\t\tscope: 'block';\n\t\t\tcheck: (block: Block, opts: CheckOptions) => string[] | undefined;\n\t }\n\t| {\n\t\t\tscope: 'global';\n\t\t\tcheck: (opts: CheckOptions) => string[] | undefined;\n\t }\n);\n\nconst ruleKeySchema = v.union([\n\tv.literal('no-category-index-file-dependency'),\n\tv.literal('no-unpinned-dependency'),\n\tv.literal('require-local-dependency-exists'),\n\tv.literal('max-local-dependencies'),\n\tv.literal('no-circular-dependency'),\n\tv.literal('no-unused-block'),\n\tv.literal('no-framework-dependency'),\n\tv.literal('require-config-file-exists'),\n\tv.literal('no-config-file-framework-dependency'),\n\tv.literal('no-config-file-unpinned-dependency'),\n]);\n\nexport type RuleKey = v.InferInput<typeof ruleKeySchema>;\n\nconst rules: Record<RuleKey, Rule> = {\n\t'no-unpinned-dependency': {\n\t\tdescription: 'Require all dependencies to have a pinned version.',\n\t\tscope: 'block',\n\t\tcheck: (block) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of [...block.dependencies, ...block.devDependencies]) {\n\t\t\t\tif (!dep.includes('@')) {\n\t\t\t\t\terrors.push(`Couldn't find a version to use for ${color.bold(dep)}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'require-local-dependency-exists': {\n\t\tdescription: 'Require all local dependencies to exist.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of block.localDependencies) {\n\t\t\t\tconst [depCategoryName, depBlockName] = dep.split('/');\n\n\t\t\t\tconst depCategory = manifest.categories.find(\n\t\t\t\t\t(cat) => cat.name.trim() === depCategoryName.trim()\n\t\t\t\t);\n\n\t\t\t\tconst error = `${color.bold(`${block.category}/${block.name}`)} depends on local dependency ${color.bold(dep)} which doesn't exist`;\n\n\t\t\t\tif (!depCategory) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (depCategory.blocks.find((b) => b.name === depBlockName) === undefined) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-category-index-file-dependency': {\n\t\tdescription: 'Disallow depending on the index file of a category.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of block.localDependencies) {\n\t\t\t\tconst [categoryName, name] = dep.split('/');\n\n\t\t\t\tif (name !== 'index') continue;\n\n\t\t\t\tconst category = manifest.categories.find((cat) => cat.name === categoryName);\n\n\t\t\t\tif (!category) continue;\n\n\t\t\t\tconst depBlock = category.blocks.find((b) => b.name === name);\n\n\t\t\t\tif (!depBlock) continue;\n\n\t\t\t\terrors.push(\n\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} depends on ${color.bold(`${categoryName}/${name}`)}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'max-local-dependencies': {\n\t\tdescription: 'Enforces a limit on the amount of local dependencies a block can have.',\n\t\tscope: 'block',\n\t\tcheck: (block, { options }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tlet limit: number;\n\n\t\t\tif (typeof options[0] !== 'number') {\n\t\t\t\tlimit = 5;\n\t\t\t} else {\n\t\t\t\tlimit = options[0];\n\t\t\t}\n\n\t\t\tif (block.localDependencies.length > limit) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} has too many local dependencies (${color.bold(block.localDependencies.length)}) limit (${color.bold(limit)})`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-circular-dependency': {\n\t\tdescription: 'Disallow circular dependencies.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tconst chain = searchForDep(specifier, block, manifest.categories);\n\n\t\t\tif (chain) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`There is a circular dependency in ${color.bold(specifier)}: ${color.bold(chain.join(' -> '))}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-unused-block': {\n\t\tdescription: 'Disallow unused blocks. (Not listed and not a dependency of another block)',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tif (block.list) return;\n\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tconst listedBlocks = manifest.categories\n\t\t\t\t.flatMap((cat) => cat.blocks)\n\t\t\t\t.filter((b) => b.list);\n\n\t\t\tfor (const block of listedBlocks) {\n\t\t\t\tconst chain = searchForDep(specifier, block, manifest.categories);\n\n\t\t\t\tif (chain) return;\n\t\t\t}\n\n\t\t\treturn [`${color.bold(specifier)} is unused and will be ${color.bold.red('removed')}`];\n\t\t},\n\t},\n\t'no-framework-dependency': {\n\t\tdescription: 'Disallow frameworks (Svelte, Vue, React) as dependencies.',\n\t\tscope: 'block',\n\t\tcheck: (block) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tconst frameworkDeps = [...block.devDependencies, ...block.dependencies]\n\t\t\t\t.map((d) => parsePackageName(d).unwrap().name)\n\t\t\t\t.filter((d) => FRAMEWORKS.has(d));\n\n\t\t\tif (frameworkDeps.length > 0) {\n\t\t\t\tfor (const frameworkDep of frameworkDeps) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} depends on ${color.bold(frameworkDep)} causing it to be installed when added`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'require-config-file-exists': {\n\t\tdescription: 'Require all of the paths listed in `configFiles` to exist.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest, cwd }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (manifest.configFiles === undefined) return undefined;\n\n\t\t\tfor (const file of manifest.configFiles) {\n\t\t\t\tif (fs.existsSync(path.join(cwd, file.path))) continue;\n\n\t\t\t\terrors.push(\n\t\t\t\t\t`The ${color.bold(file.name)} config file doesn't exist at ${color.bold(path.join(cwd, file.path))}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-config-file-framework-dependency': {\n\t\tdescription: 'Disallow frameworks (Svelte, Vue, React) as dependencies of config files.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (manifest.configFiles === undefined) return undefined;\n\n\t\t\tfor (const configFile of manifest.configFiles) {\n\t\t\t\tconst frameworkDeps = [\n\t\t\t\t\t...(configFile.devDependencies ?? []),\n\t\t\t\t\t...(configFile.dependencies ?? []),\n\t\t\t\t]\n\t\t\t\t\t.map((d) => parsePackageName(d).unwrap().name)\n\t\t\t\t\t.filter((d) => FRAMEWORKS.has(d));\n\n\t\t\t\tif (frameworkDeps.length > 0) {\n\t\t\t\t\tfor (const frameworkDep of frameworkDeps) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${color.bold(configFile.name)} depends on ${color.bold(frameworkDep)} causing it to be installed when added`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-config-file-unpinned-dependency': {\n\t\tdescription: 'Require all dependencies of config files to have a pinned version.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (!manifest.configFiles) return undefined;\n\n\t\t\tfor (const configFile of manifest.configFiles) {\n\t\t\t\tfor (const dep of [\n\t\t\t\t\t...(configFile.dependencies ?? []),\n\t\t\t\t\t...(configFile.devDependencies ?? []),\n\t\t\t\t]) {\n\t\t\t\t\tif (!dep.includes('@')) {\n\t\t\t\t\t\terrors.push(`Couldn't find a version to use for ${color.bold(dep)}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n} as const;\n\nconst ruleConfigSchema = v.record(\n\truleKeySchema,\n\tv.union([\n\t\truleLevelSchema,\n\t\tv.tupleWithRest(\n\t\t\t[ruleLevelSchema, v.union([v.string(), v.number()])],\n\t\t\tv.union([v.string(), v.number()])\n\t\t),\n\t])\n);\n\nexport type RuleConfig = v.InferInput<typeof ruleConfigSchema>;\n\nconst DEFAULT_CONFIG: RuleConfig = {\n\t'no-category-index-file-dependency': 'warn',\n\t'no-unpinned-dependency': 'warn',\n\t'require-local-dependency-exists': 'error',\n\t'max-local-dependencies': ['warn', 10],\n\t'no-circular-dependency': 'error',\n\t'no-unused-block': 'warn',\n\t'no-framework-dependency': 'warn',\n\t'require-config-file-exists': 'error',\n\t'no-config-file-framework-dependency': 'warn',\n\t'no-config-file-unpinned-dependency': 'warn',\n} as const;\n\n/** Runs checks on the manifest file.\n *\n * @param manifest\n * @param config\n * @param ruleConfig\n * @returns\n */\nfunction runRules(\n\tmanifest: Manifest,\n\tconfig: RegistryConfig,\n\tcwd: string,\n\truleConfig: RuleConfig = DEFAULT_CONFIG\n): { warnings: string[]; errors: string[] } {\n\tconst warnings: string[] = [];\n\tconst errors: string[] = [];\n\n\t// run global rules\n\tfor (const [name, rule] of Object.entries(rules)) {\n\t\tif (rule.scope === 'block') continue;\n\n\t\tconst conf = ruleConfig[name as RuleKey]!;\n\n\t\tlet level: RuleLevel;\n\t\tconst options: (string | number)[] = [];\n\t\tif (Array.isArray(conf)) {\n\t\t\tlevel = conf[0];\n\t\t\toptions.push(...conf.slice(1));\n\t\t} else {\n\t\t\tlevel = conf;\n\t\t}\n\n\t\tif (level === 'off') continue;\n\n\t\tconst ruleErrors = rule.check({ manifest, options, cwd, config });\n\n\t\tif (!ruleErrors) continue;\n\n\t\tif (level === 'error') {\n\t\t\terrors.push(\n\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t(err) =>\n\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.ERROR} ${color.red(err)} ${color.gray(name)}`\n\t\t\t\t)\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\twarnings.push(\n\t\t\t...ruleErrors.map(\n\t\t\t\t(err) => `${ascii.VERTICAL_LINE} ${ascii.WARN} ${err} ${color.gray(name)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// run block rules\n\tfor (const category of manifest.categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tfor (const [name, rule] of Object.entries(rules)) {\n\t\t\t\tif (rule.scope === 'global') continue;\n\n\t\t\t\tconst conf = ruleConfig[name as RuleKey]!;\n\n\t\t\t\tlet level: RuleLevel;\n\t\t\t\tconst options: (string | number)[] = [];\n\t\t\t\tif (Array.isArray(conf)) {\n\t\t\t\t\tlevel = conf[0];\n\t\t\t\t\toptions.push(...conf.slice(1));\n\t\t\t\t} else {\n\t\t\t\t\tlevel = conf;\n\t\t\t\t}\n\n\t\t\t\tif (level === 'off') continue;\n\n\t\t\t\tconst ruleErrors = rule.check(block, { manifest, options, cwd, config });\n\n\t\t\t\tif (!ruleErrors) continue;\n\n\t\t\t\tif (level === 'error') {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t\t\t(err) =>\n\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.ERROR} ${color.red(err)} ${color.gray(name)}`\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twarnings.push(\n\t\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t\t(err) => `${ascii.VERTICAL_LINE} ${ascii.WARN} ${err} ${color.gray(name)}`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { warnings, errors };\n}\n\n/** Searches for the local dependency tree for the provided specifier returns the path it took to find the dependency */\nfunction searchForDep(\n\tsearch: string,\n\tblock: Block,\n\tcategories: Category[],\n\tchain: string[] = []\n): string[] | undefined {\n\tconst newChain = [...chain, `${block.category}/${block.name}`];\n\n\tfor (const dep of block.localDependencies) {\n\t\tif (dep === search) return newChain;\n\n\t\t// it will be found in another pass but we don't want to get a stack overflow\n\t\tif (chain.includes(dep)) return undefined;\n\n\t\tconst [categoryName, blockName] = dep.split('/');\n\n\t\tconst depBlock = categories\n\t\t\t.find((cat) => cat.name === categoryName)\n\t\t\t?.blocks.find((b) => b.name === blockName);\n\n\t\tif (!depBlock) continue;\n\n\t\tconst found = searchForDep(search, depBlock, categories, newChain);\n\n\t\tif (found) return [...found, search];\n\t}\n\n\treturn undefined;\n}\n\n/** Checks if the provided block is depended on anywhere */\nfunction isDependedOn(specifier: string, categories: Category[]): boolean {\n\tfor (const category of categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tif (!block.list) continue;\n\n\t\t\tconst chain = searchForDep(specifier, block, categories);\n\n\t\t\tif (chain) return true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport {\n\trules,\n\trunRules,\n\tDEFAULT_CONFIG,\n\truleLevelSchema,\n\truleConfigSchema,\n\truleKeySchema,\n\tsearchForDep,\n\tisDependedOn,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport type { Ignore } from 'ignore';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport { type Block, type Category, type Manifest, categorySchema } from '../../types';\nimport * as ascii from '../ascii';\nimport type { RegistryConfig } from '../config';\nimport { languages } from '../language-support';\nimport { isDependedOn } from './check';\n\nconst TEST_SUFFIXES = [\n\t'.test.ts',\n\t'_test.ts',\n\t'.test.js',\n\t'_test.js',\n\t'.spec.ts',\n\t'_spec.ts',\n\t'.spec.js',\n\t'_spec.js',\n\t'.stories.jsx',\n\t'_stories.jsx',\n\t'.stories.tsx',\n\t'_stories.tsx',\n] as const;\n\nexport function isTestFile(file: string): boolean {\n\treturn TEST_SUFFIXES.find((suffix) => file.endsWith(suffix)) !== undefined;\n}\n\ntype Options = {\n\tcwd: string;\n\tignore: Ignore;\n\tconfig: RegistryConfig;\n};\n\n/** Using the provided path to the blocks folder builds the blocks into categories and also resolves dependencies\n *\n * @param blocksPath\n * @returns\n */\nexport function buildBlocksDirectory(\n\tblocksPath: string,\n\t{ cwd, ignore, config }: Options\n): Category[] {\n\tlet paths: string[];\n\n\ttry {\n\t\tpaths = fs.readdirSync(blocksPath);\n\t} catch {\n\t\tprogram.error(color.red(`Couldn't read the ${color.bold(blocksPath)} directory.`));\n\t}\n\n\tconst categories: Category[] = [];\n\n\tfor (const categoryPath of paths) {\n\t\tconst categoryDir = path.join(blocksPath, categoryPath);\n\n\t\t// we only check folders\n\t\tif (fs.statSync(categoryDir).isFile()) continue;\n\n\t\t// we append a '/' to tell ignore that this is a directory not a file\n\t\tconst dirName = `${path.relative(cwd, categoryDir)}/`;\n\n\t\tif (ignore.ignores(dirName)) continue;\n\n\t\tconst categoryName = path.basename(categoryPath);\n\n\t\tif (!shouldIncludeCategory(categoryName, config)) continue;\n\n\t\tconst listCategory = shouldListCategory(categoryName, config);\n\n\t\tconst category: Category = {\n\t\t\tname: categoryName,\n\t\t\tblocks: [],\n\t\t};\n\n\t\tconst files = fs.readdirSync(categoryDir);\n\n\t\tfor (const file of files) {\n\t\t\tconst blockDir = path.join(categoryDir, file);\n\n\t\t\tif (fs.statSync(blockDir).isFile()) {\n\t\t\t\tif (isTestFile(file)) continue;\n\n\t\t\t\tconst name = transformBlockName(file);\n\n\t\t\t\tconst listBlock = shouldListBlock(name, config);\n\n\t\t\t\tif (!shouldIncludeBlock(name, config)) continue;\n\n\t\t\t\tconst lang = languages.find((resolver) => resolver.matches(file));\n\n\t\t\t\t// warn for unsupported language\n\t\t\t\tif (!lang) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${color.bold(blockDir)}\\` \\`*${color.bold(\n\t\t\t\t\t\t\tpath.parse(file).ext\n\t\t\t\t\t\t)}\\` files are not currently supported!`\n\t\t\t\t\t);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// tries to find a test file with the same name as the file\n\t\t\t\tconst testsPath = files.find((f) =>\n\t\t\t\t\tTEST_SUFFIXES.find((suffix) => f === `${name}${suffix}`)\n\t\t\t\t);\n\n\t\t\t\tconst { dependencies, devDependencies, local, imports } = lang\n\t\t\t\t\t.resolveDependencies({\n\t\t\t\t\t\tfilePath: blockDir,\n\t\t\t\t\t\tisSubDir: false,\n\t\t\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\t\t\tdirs: config.dirs,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t})\n\t\t\t\t\t.match(\n\t\t\t\t\t\t(val) => val,\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\tconst block: Block = {\n\t\t\t\t\tname,\n\t\t\t\t\tdirectory: path.relative(cwd, categoryDir),\n\t\t\t\t\tcategory: categoryName,\n\t\t\t\t\ttests: testsPath !== undefined,\n\t\t\t\t\tsubdirectory: false,\n\t\t\t\t\tlist: listCategory ? listBlock : false,\n\t\t\t\t\tfiles: [file],\n\t\t\t\t\tlocalDependencies: local,\n\t\t\t\t\t_imports_: imports,\n\t\t\t\t\tdependencies,\n\t\t\t\t\tdevDependencies,\n\t\t\t\t};\n\n\t\t\t\t// if test file exists add the file\n\t\t\t\tif (testsPath !== undefined) {\n\t\t\t\t\tblock.files.push(testsPath);\n\t\t\t\t}\n\n\t\t\t\tcategory.blocks.push(block);\n\t\t\t} else {\n\t\t\t\tconst blockName = file;\n\n\t\t\t\tconst listBlock = shouldListBlock(blockName, config);\n\n\t\t\t\tif (!shouldIncludeBlock(blockName, config)) continue;\n\n\t\t\t\tconst localDepsSet = new Set<string>();\n\t\t\t\tconst depsSet = new Set<string>();\n\t\t\t\tconst devDepsSet = new Set<string>();\n\t\t\t\tconst imports: Record<string, string> = {};\n\n\t\t\t\tlet hasTests = false;\n\n\t\t\t\tconst blockFiles: string[] = [];\n\n\t\t\t\t// if the user has enabled allow subdirectories we recursively check each directory and resolve any dependencies\n\t\t\t\tconst walkFiles = (base: string, files: string[]) => {\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\tconst filePath = path.join(base, f);\n\t\t\t\t\t\t// relative to the block root\n\t\t\t\t\t\tconst relativeFilePath = filePath.slice(blockDir.length + 1);\n\n\t\t\t\t\t\tif (isTestFile(f)) {\n\t\t\t\t\t\t\thasTests = true;\n\n\t\t\t\t\t\t\tblockFiles.push(relativeFilePath);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fs.statSync(filePath).isDirectory()) {\n\t\t\t\t\t\t\tif (!config.allowSubdirectories) {\n\t\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${color.bold(path.join(blockDir, f))}\\` subdirectories are not allowed! Allow them with ${color.bold('--allow-subdirectories')}!`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst subFiles = fs.readdirSync(filePath);\n\n\t\t\t\t\t\t\twalkFiles(filePath, subFiles);\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lang = languages.find((resolver) => resolver.matches(f));\n\n\t\t\t\t\t\tif (!lang) {\n\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${filePath}\\` \\`*${color.bold(\n\t\t\t\t\t\t\t\t\tpath.parse(f).ext\n\t\t\t\t\t\t\t\t)}\\` files are not currently supported!`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tlocal,\n\t\t\t\t\t\t\tdependencies,\n\t\t\t\t\t\t\tdevDependencies,\n\t\t\t\t\t\t\timports: imps,\n\t\t\t\t\t\t} = lang\n\t\t\t\t\t\t\t.resolveDependencies({\n\t\t\t\t\t\t\t\tisSubDir: true,\n\t\t\t\t\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\t\t\t\t\tdirs: config.dirs,\n\t\t\t\t\t\t\t\tcontainingDir: blockDir,\n\t\t\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.match(\n\t\t\t\t\t\t\t\t(val) => val,\n\t\t\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfor (const dep of local) {\n\t\t\t\t\t\t\t// don't add self\n\t\t\t\t\t\t\tif (dep === `${categoryName}/${blockName}`) continue;\n\n\t\t\t\t\t\t\tlocalDepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const dep of dependencies) {\n\t\t\t\t\t\t\tdepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const dep of devDependencies) {\n\t\t\t\t\t\t\tdevDepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const [k, v] of Object.entries(imps)) {\n\t\t\t\t\t\t\timports[k] = v;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tblockFiles.push(relativeFilePath);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\twalkFiles(blockDir, fs.readdirSync(blockDir));\n\n\t\t\t\tconst block: Block = {\n\t\t\t\t\tname: blockName,\n\t\t\t\t\tdirectory: path.relative(cwd, blockDir),\n\t\t\t\t\tcategory: categoryName,\n\t\t\t\t\ttests: hasTests,\n\t\t\t\t\tsubdirectory: true,\n\t\t\t\t\tlist: listCategory ? listBlock : false,\n\t\t\t\t\tfiles: blockFiles,\n\t\t\t\t\tlocalDependencies: Array.from(localDepsSet.keys()),\n\t\t\t\t\tdependencies: Array.from(depsSet.keys()),\n\t\t\t\t\tdevDependencies: Array.from(devDepsSet.keys()),\n\t\t\t\t\t_imports_: imports,\n\t\t\t\t};\n\n\t\t\t\tcategory.blocks.push(block);\n\t\t\t}\n\t\t}\n\n\t\tcategories.push(category);\n\t}\n\n\treturn categories;\n}\n\nexport function buildConfigFiles(\n\tconfig: RegistryConfig,\n\t{ cwd }: { cwd: string }\n): Manifest['configFiles'] {\n\tif (!config.configFiles) return undefined;\n\n\tconst configFiles: Manifest['configFiles'] = [];\n\n\tfor (const file of config.configFiles) {\n\t\tconst lang = languages.find((lang) => lang.matches(file.path));\n\n\t\tif (!lang) {\n\t\t\t// go ahead and add the file with no dependencies\n\t\t\tconfigFiles.push(file);\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { dependencies, devDependencies, local } = lang\n\t\t\t.resolveDependencies({\n\t\t\t\tfilePath: path.join(cwd, file.path),\n\t\t\t\tisSubDir: false,\n\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\tdirs: config.dirs,\n\t\t\t\tcwd,\n\t\t\t})\n\t\t\t.match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => {\n\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t}\n\t\t\t);\n\n\t\tif (local.length > 0) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`${color.bold(file.name)} ${color.bold(file.path)} Config files cannot have local dependencies!`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconfigFiles.push({ ...file, dependencies, devDependencies });\n\t}\n\n\treturn configFiles;\n}\n\nexport function shouldListBlock(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.doNotListBlocks.length > 0 && config.doNotListBlocks.includes(name)) return false;\n\n\t// if the we only list the provided\n\t// we should only list if the name is included in that list\n\tif (config.listBlocks.length > 0) {\n\t\treturn config.listBlocks.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldIncludeBlock(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.excludeBlocks.length > 0 && config.excludeBlocks.includes(name)) return false;\n\n\t// if the we only include the provided\n\t// we should only include if the name is included in that list\n\tif (config.includeBlocks.length > 0) {\n\t\treturn config.includeBlocks.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldListCategory(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.doNotListCategories.length > 0 && config.doNotListCategories.includes(name))\n\t\treturn false;\n\n\t// if the we only list the provided\n\t// we should only list if the name is included in that list\n\tif (config.listCategories.length > 0) {\n\t\treturn config.listCategories.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldIncludeCategory(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.excludeCategories.length > 0 && config.excludeCategories.includes(name))\n\t\treturn false;\n\n\t// if the we only include the provided\n\t// we should only include if the name is included in that list\n\tif (config.includeCategories.length > 0) {\n\t\treturn config.includeCategories.includes(name);\n\t}\n\n\treturn true;\n}\n\n/** Takes the given file and returns the block name */\nfunction transformBlockName(file: string) {\n\treturn path.parse(path.basename(file)).name;\n}\n\nexport function pruneUnused(categories: Category[]): [Category[], number] {\n\tconst pruned: Category[] = [];\n\tconst prunedCount = 0;\n\n\tfor (const category of categories) {\n\t\tconst catBlocks: Block[] = [];\n\n\t\tfor (const block of category.blocks) {\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tif (!block.list) {\n\t\t\t\tconst dependedOn = isDependedOn(specifier, categories);\n\n\t\t\t\tif (!dependedOn) continue;\n\t\t\t}\n\n\t\t\tcatBlocks.push(block);\n\t\t}\n\n\t\tif (catBlocks.length > 0) pruned.push({ name: category.name, blocks: catBlocks });\n\t}\n\n\treturn [pruned, prunedCount];\n}\n\nexport function readCategories(outputFilePath: string): Category[] {\n\treturn v.parse(v.array(categorySchema), JSON.parse(fs.readFileSync(outputFilePath).toString()));\n}\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport {\n\ttype Block,\n\taccessLevel,\n\tconfigFileSchema,\n\tmanifestMeta,\n\tpeerDependencySchema,\n} from '../types';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { ruleConfigSchema } from './build/check';\nimport { tryGetTsconfig } from './files';\n\n/** sensible defaults for ignored directories */\nexport const IGNORED_DIRS = ['.git', 'node_modules'] as const;\n\nexport const PROJECT_CONFIG_NAME = 'jsrepo.json';\nexport const REGISTRY_CONFIG_NAME = 'jsrepo-build-config.json';\n\nexport const formatterSchema = v.union([v.literal('prettier'), v.literal('biome')]);\n\nexport const pathsSchema = v.objectWithRest(\n\t{\n\t\t'*': v.string(),\n\t},\n\tv.string()\n);\n\nexport type Paths = v.InferInput<typeof pathsSchema>;\n\nexport const projectConfigSchema = v.object({\n\t$schema: v.string(),\n\trepos: v.optional(v.array(v.string()), []),\n\tincludeTests: v.boolean(),\n\tpaths: pathsSchema,\n\tconfigFiles: v.optional(v.record(v.string(), v.string())),\n\twatermark: v.optional(v.boolean(), true),\n\tformatter: v.optional(formatterSchema),\n});\n\nexport function getProjectConfig(cwd: string): Result<ProjectConfig, string> {\n\tif (!fs.existsSync(path.join(cwd, PROJECT_CONFIG_NAME))) {\n\t\treturn Err('Could not find your configuration file! Please run `init`.');\n\t}\n\n\tconst config = v.safeParse(\n\t\tprojectConfigSchema,\n\t\tJSON.parse(fs.readFileSync(path.join(cwd, PROJECT_CONFIG_NAME)).toString())\n\t);\n\n\tif (!config.success) {\n\t\treturn Err(`There was an error reading your \\`${PROJECT_CONFIG_NAME}\\` file!`);\n\t}\n\n\treturn Ok(config.output);\n}\n\nexport type ProjectConfig = v.InferOutput<typeof projectConfigSchema>;\n\nexport type Formatter = v.InferOutput<typeof formatterSchema>;\n\nexport const registryConfigSchema = v.object({\n\t$schema: v.string(),\n\tname: v.optional(v.string()),\n\tversion: v.optional(v.string()),\n\treadme: v.optional(v.string(), 'README.md'),\n\taccess: v.optional(accessLevel),\n\tmeta: v.optional(manifestMeta),\n\tpeerDependencies: v.optional(peerDependencySchema),\n\tconfigFiles: v.optional(v.array(configFileSchema)),\n\tdirs: v.array(v.string()),\n\toutputDir: v.optional(v.string()),\n\tincludeBlocks: v.optional(v.array(v.string()), []),\n\tincludeCategories: v.optional(v.array(v.string()), []),\n\texcludeBlocks: v.optional(v.array(v.string()), []),\n\texcludeCategories: v.optional(v.array(v.string()), []),\n\tdoNotListBlocks: v.optional(v.array(v.string()), []),\n\tdoNotListCategories: v.optional(v.array(v.string()), []),\n\tlistBlocks: v.optional(v.array(v.string()), []),\n\tlistCategories: v.optional(v.array(v.string()), []),\n\texcludeDeps: v.optional(v.array(v.string()), []),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tpreview: v.optional(v.boolean()),\n\trules: v.optional(ruleConfigSchema),\n});\n\nexport function getRegistryConfig(cwd: string): Result<RegistryConfig | null, string> {\n\tif (!fs.existsSync(path.join(cwd, REGISTRY_CONFIG_NAME))) {\n\t\treturn Ok(null);\n\t}\n\n\tconst config = v.safeParse(\n\t\tregistryConfigSchema,\n\t\tJSON.parse(fs.readFileSync(path.join(cwd, REGISTRY_CONFIG_NAME)).toString())\n\t);\n\n\tif (!config.success) {\n\t\treturn Err(`There was an error reading your \\`${REGISTRY_CONFIG_NAME}\\` file!`);\n\t}\n\n\treturn Ok(config.output);\n}\n\nexport type RegistryConfig = v.InferOutput<typeof registryConfigSchema>;\n\n/** Resolves the paths relative to the cwd */\nexport function resolvePaths(paths: Paths, cwd: string): Result<Paths, string> {\n\tconst config = tryGetTsconfig(cwd).unwrapOr(null);\n\n\tconst matcher = config ? createPathsMatcher(config) : null;\n\n\tconst newPaths: Paths = { '*': '' };\n\n\tfor (const [category, p] of Object.entries(paths)) {\n\t\tif (p.startsWith('./')) {\n\t\t\tnewPaths[category] = path.relative(cwd, path.join(path.resolve(cwd), p));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (matcher === null) {\n\t\t\treturn Err(\n\t\t\t\t`Cannot resolve ${color.bold(`\\`\"${category}\": \"${p}\"\\``)} from paths because we couldn't find a tsconfig! If you intended to use a relative path ensure that your path starts with ${color.bold('`./`')}.`\n\t\t\t);\n\t\t}\n\n\t\tconst resolved = tryResolvePath(p, matcher, cwd);\n\n\t\tif (!resolved) {\n\t\t\treturn Err(\n\t\t\t\t`Cannot resolve ${color.bold(`\\`\"${category}\": \"${p}\"\\``)} from paths because we couldn't find a matching alias in the tsconfig. If you intended to use a relative path ensure that your path starts with ${color.bold('`./`')}.`\n\t\t\t);\n\t\t}\n\n\t\tnewPaths[category] = resolved;\n\t}\n\n\treturn Ok(newPaths);\n}\n\nfunction tryResolvePath(\n\tunresolvedPath: string,\n\tmatcher: (specifier: string) => string[],\n\tcwd: string\n): string | undefined {\n\tconst paths = matcher(unresolvedPath);\n\n\treturn paths.length > 0 ? path.relative(cwd, paths[0]) : undefined;\n}\n\n/** Gets the path where the block should be installed.\n *\n * @param block\n * @param resolvedPaths\n * @param cwd\n * @returns\n */\nexport function getPathForBlock(block: Block, resolvedPaths: Paths, cwd: string): string {\n\tlet directory: string;\n\n\tif (resolvedPaths[block.category] !== undefined) {\n\t\tdirectory = path.join(cwd, resolvedPaths[block.category]);\n\t} else {\n\t\tdirectory = path.join(cwd, resolvedPaths['*'], block.category);\n\t}\n\n\treturn directory;\n}\n","import color from 'chalk';\nimport {\n\thttp,\n\tazure,\n\tbitbucket,\n\tfetchManifest,\n\tfetchRaw,\n\tgithub,\n\tgitlab,\n\tjsrepo,\n\tproviders,\n\tselectProvider,\n} from '.';\nimport type { Block, Manifest } from '../../types';\nimport { Err, Ok, type Result } from '../blocks/ts/result';\nimport * as u from '../blocks/ts/url';\nimport { iFetch } from '../fetch';\nimport * as persisted from '../persisted';\nimport { TokenManager } from '../token-manager';\nimport type { RegistryProvider, RegistryProviderState } from './types';\n\nexport type RemoteBlock = Block & { sourceRepo: RegistryProviderState };\n\n/** Wraps the basic implementation to inject our internal fetch method and the correct token. */\nexport async function internalFetchRaw(\n\tstate: RegistryProviderState,\n\tresourcePath: string,\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n) {\n\treturn await fetchRaw(state, resourcePath, {\n\t\tverbose,\n\t\t// @ts-expect-error it's fine\n\t\tfetch: iFetch,\n\t\ttoken: getProviderToken(state.provider, state.url),\n\t});\n}\n\n/** Wraps the basic implementation to inject internal fetch method and the correct token. */\nexport async function internalFetchManifest(\n\tstate: RegistryProviderState,\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n) {\n\treturn await fetchManifest(state, {\n\t\tverbose,\n\t\t// @ts-expect-error it's fine\n\t\tfetch: iFetch,\n\t\ttoken: getProviderToken(state.provider, state.url),\n\t});\n}\n\n/** Gets the locally stored token for the given provider */\nexport function getProviderToken(provider: RegistryProvider, url: string): string | undefined {\n\tconst storage = new TokenManager();\n\n\t// there isn't an auth implementation for http\n\tif (provider.name === 'http') {\n\t\treturn storage.get(`http-${new URL(url).origin}`);\n\t}\n\n\treturn storage.get(provider.name);\n}\n\n/** Parses the provided url and returns the state.\n *\n * @param repo\n * @returns\n */\nexport async function getProviderState(\n\trepo: string,\n\t{ noCache = false }: { noCache?: boolean } = {}\n): Promise<Result<RegistryProviderState, string>> {\n\tconst provider = selectProvider(repo);\n\n\tif (provider) {\n\t\tconst storage = persisted.get();\n\n\t\t// only git providers are cached\n\t\tif (provider.name !== http.name && !noCache) {\n\t\t\tif (noCache) {\n\t\t\t\t// remove the outdated cache if it exists\n\t\t\t\tstorage.delete(`${repo}-state`);\n\t\t\t} else {\n\t\t\t\tconst cached = storage.get(`${repo}-state`);\n\n\t\t\t\tif (cached) return Ok({ ...(cached as RegistryProviderState), provider });\n\t\t\t}\n\t\t}\n\n\t\tconst parsed = provider.parse(repo, { fullyQualified: false });\n\n\t\tconst state = await provider.state(repo, {\n\t\t\ttoken: getProviderToken(provider, parsed.url),\n\t\t\t// @ts-expect-error but it does work\n\t\t\tfetch: iFetch,\n\t\t});\n\n\t\t// only cache git providers\n\t\tif (provider.name !== http.name && !noCache) {\n\t\t\tstorage.set(`${repo}-state`, state);\n\t\t}\n\n\t\treturn Ok(state);\n\t}\n\n\treturn Err(\n\t\t`Only ${providers.map((p, i) => `${i === providers.length - 1 ? 'and ' : ''}${color.bold(p.name)}`).join(', ')} registries are supported at this time!`\n\t);\n}\n\n/** Gets the provider state for each provided repo url\n *\n * @param repos\n * @returns\n */\nexport async function forEachPathGetProviderState(\n\trepos: string[],\n\t{ noCache = false }: { noCache?: boolean } = {}\n): Promise<Result<RegistryProviderState[], { message: string; repo: string }>> {\n\tconst resolvedPaths: RegistryProviderState[] = [];\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (repo) => {\n\t\t\tconst getProviderResult = await getProviderState(repo, { noCache });\n\n\t\t\tif (getProviderResult.isErr())\n\t\t\t\treturn Err({ message: getProviderResult.unwrapErr(), repo });\n\n\t\t\tconst providerState = getProviderResult.unwrap();\n\n\t\t\tresolvedPaths.push(providerState);\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(resolvedPaths);\n}\n\n/** Fetches blocks for each registry and stores them in a map by their repo as well as category and block name.\n *\n * Example Key:\n * `github/ieedan/std/utils/math`\n *\n * @param repos\n * @returns\n */\nexport async function fetchBlocks(\n\trepos: RegistryProviderState[],\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n): Promise<Result<Map<string, RemoteBlock>, { message: string; repo: string }>> {\n\tconst blocksMap = new Map<string, RemoteBlock>();\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (state) => {\n\t\t\tconst getManifestResult = await internalFetchManifest(state, { verbose });\n\n\t\t\tif (getManifestResult.isErr()) {\n\t\t\t\treturn Err({ message: getManifestResult.unwrapErr(), repo: state.url });\n\t\t\t}\n\n\t\t\tconst manifest = getManifestResult.unwrap();\n\n\t\t\tfor (const category of manifest.categories) {\n\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\tblocksMap.set(u.join(state.url, `${block.category}/${block.name}`), {\n\t\t\t\t\t\t...block,\n\t\t\t\t\t\tsourceRepo: state,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(blocksMap);\n}\n\n/** Maps the result of fetchManifests into a map of remote blocks\n *\n * @param manifests\n */\nexport function getRemoteBlocks(manifests: FetchManifestResult[]) {\n\tconst blocksMap = new Map<string, RemoteBlock>();\n\n\tfor (const manifest of manifests) {\n\t\tfor (const category of manifest.manifest.categories) {\n\t\t\tfor (const block of category.blocks) {\n\t\t\t\tblocksMap.set(u.join(manifest.state.url, `${block.category}/${block.name}`), {\n\t\t\t\t\t...block,\n\t\t\t\t\tsourceRepo: manifest.state,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn blocksMap;\n}\n\nexport type FetchManifestResult = {\n\tstate: RegistryProviderState;\n\tmanifest: Manifest;\n};\n\n/** Fetches the manifests for each provider\n *\n * @param repos\n * @returns\n */\nexport async function fetchManifests(\n\trepos: RegistryProviderState[],\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n): Promise<Result<FetchManifestResult[], { message: string; repo: string }>> {\n\tconst manifests: FetchManifestResult[] = [];\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (state) => {\n\t\t\tconst getManifestResult = await internalFetchManifest(state, { verbose });\n\n\t\t\tif (getManifestResult.isErr()) {\n\t\t\t\treturn Err({ message: getManifestResult.unwrapErr(), repo: state.url });\n\t\t\t}\n\n\t\t\tconst manifest = getManifestResult.unwrap();\n\n\t\t\tmanifests.push({ state, manifest });\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(manifests);\n}\n\nexport * from './types';\n\nexport {\n\tazure,\n\tbitbucket,\n\tgithub,\n\tgitlab,\n\thttp,\n\tjsrepo,\n\tproviders,\n\tinternalFetchManifest as fetchManifest,\n\tinternalFetchRaw as fetchRaw,\n\tselectProvider,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport path from 'pathe';\nimport type { Block } from '../types';\nimport * as array from './blocks/ts/array';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport * as url from './blocks/ts/url';\nimport { isTestFile } from './build';\nimport { type Paths, type ProjectConfig, getPathForBlock, resolvePaths } from './config';\nimport * as registry from './registry-providers/internal';\n\nexport async function resolveTree(\n\tblockSpecifiers: string[],\n\tblocksMap: Map<string, registry.RemoteBlock>,\n\trepoPaths: registry.RegistryProviderState[],\n\tinstalled: Map<string, registry.RemoteBlock> = new Map()\n): Promise<Result<registry.RemoteBlock[], string>> {\n\tconst blocks = new Map<string, registry.RemoteBlock>();\n\n\tfor (const blockSpecifier of blockSpecifiers) {\n\t\tlet block: registry.RemoteBlock | undefined = undefined;\n\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// if the block starts with github (or another provider) we know it has been resolved\n\t\tif (!provider) {\n\t\t\tif (repoPaths.length === 0) {\n\t\t\t\treturn Err(\n\t\t\t\t\tcolor.red(\n\t\t\t\t\t\t`If your config doesn't contain repos then you must provide the repo in the block specifier ex: \\`${color.bold(\n\t\t\t\t\t\t\t`github/ieedan/std/${blockSpecifier}`\n\t\t\t\t\t\t)}\\`!`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// check every repo for the block and return the first block found\n\t\t\tfor (const providerState of repoPaths) {\n\t\t\t\tconst { url: repoIdent, specifier } = providerState.provider.parse(\n\t\t\t\t\turl.join(providerState.url, blockSpecifier),\n\t\t\t\t\t{ fullyQualified: true }\n\t\t\t\t);\n\n\t\t\t\tconst tempBlock = blocksMap.get(url.join(repoIdent, specifier!));\n\n\t\t\t\tif (tempBlock === undefined) continue;\n\n\t\t\t\tblock = tempBlock;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t// get shortened name\n\t\t\tconst { url: repoIdent, specifier } = provider.parse(blockSpecifier, {\n\t\t\t\tfullyQualified: true,\n\t\t\t});\n\n\t\t\t// just beautifies name a bit\n\t\t\tblock = blocksMap.get(url.join(repoIdent, specifier!));\n\t\t}\n\n\t\tif (!block) {\n\t\t\treturn Err(`Invalid block! ${color.bold(blockSpecifier)} does not exist!`);\n\t\t}\n\n\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\tblocks.set(specifier, block);\n\n\t\tif (block.localDependencies && block.localDependencies.length > 0) {\n\t\t\tconst subDeps = await resolveTree(\n\t\t\t\tblock.localDependencies.filter((dep) => !blocks.has(dep) && !installed.has(dep)),\n\t\t\t\tblocksMap,\n\t\t\t\trepoPaths,\n\t\t\t\tblocks\n\t\t\t);\n\n\t\t\tif (subDeps.isErr()) return Err(subDeps.unwrapErr());\n\n\t\t\tfor (const dep of subDeps.unwrap()) {\n\t\t\t\tblocks.set(`${dep.category}/${dep.name}`, dep);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Ok(array.fromMap(blocks, (_, val) => val));\n}\n\ntype InstalledBlock = {\n\tspecifier: `${string}/${string}`;\n\tpath: string;\n\tblock: Block;\n};\n\n/** Finds installed blocks and returns them as `<category>/<name>`\n *\n * @param blocks\n * @param config\n * @returns\n */\nexport function getInstalled(\n\tblocks: Map<string, Block>,\n\tconfig: ProjectConfig,\n\tcwd: string\n): InstalledBlock[] {\n\tconst installedBlocks: InstalledBlock[] = [];\n\n\tconst resolvedPaths = resolvePaths(config.paths, cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tfor (const [_, block] of blocks) {\n\t\tconst baseDir = getPathForBlock(block, resolvedPaths, cwd);\n\n\t\tlet blockPath = path.join(baseDir, block.files[0]);\n\t\tif (block.subdirectory) {\n\t\t\tblockPath = path.join(baseDir, block.name);\n\t\t}\n\n\t\tif (fs.existsSync(blockPath))\n\t\t\tinstalledBlocks.push({\n\t\t\t\tspecifier: `${block.category}/${block.name}`,\n\t\t\t\tpath: blockPath,\n\t\t\t\tblock,\n\t\t\t});\n\t}\n\n\treturn installedBlocks;\n}\n\nexport type RegistryFile = {\n\tname: string;\n\tcontent: Result<string, string>;\n};\n\ntype PreloadedBlock = {\n\tblock: registry.RemoteBlock;\n\tfiles: Promise<RegistryFile[]>;\n};\n\n/** Starts loading the content of the files for each block and\n * returns the blocks mapped to a promise that contains their files and their contents.\n *\n * @param blocks\n * @returns\n */\nexport function preloadBlocks(\n\tblocks: registry.RemoteBlock[],\n\tconfig: ProjectConfig\n): PreloadedBlock[] {\n\tconst preloaded: PreloadedBlock[] = [];\n\n\tfor (const block of blocks) {\n\t\t// filters out test files if they are not supposed to be included\n\t\tconst includedFiles = block.files.filter((file) =>\n\t\t\tisTestFile(file) ? config.includeTests : true\n\t\t);\n\n\t\tconst files = Promise.all(\n\t\t\tincludedFiles.map(async (file) => {\n\t\t\t\tconst content = await registry.fetchRaw(\n\t\t\t\t\tblock.sourceRepo,\n\t\t\t\t\tpath.join(block.directory, file)\n\t\t\t\t);\n\n\t\t\t\treturn { name: file, content };\n\t\t\t})\n\t\t);\n\n\t\tpreloaded.push({\n\t\t\tblock,\n\t\t\tfiles,\n\t\t});\n\t}\n\n\treturn preloaded;\n}\n\n/** Gets the path for the file belonging to the provided block\n *\n * @param fileName\n * @param block\n * @param resolvedPaths\n * @param cwd\n * @returns\n */\nexport function getBlockFilePath(\n\tfileName: string,\n\tblock: registry.RemoteBlock,\n\tresolvedPaths: Paths,\n\tcwd: string\n) {\n\tconst directory = getPathForBlock(block, resolvedPaths, cwd);\n\n\tif (block.subdirectory) {\n\t\treturn path.join(directory, block.name, fileName);\n\t}\n\n\treturn path.join(directory, fileName);\n}\n","import { InvalidArgumentError } from 'commander';\n\n/** Handles `--x foo=bar,bar=foo`\n *\n * @param value\n * @returns\n */\nexport function parseRecord(value: string | undefined): Record<string, string> | undefined {\n\tif (value === undefined) return undefined;\n\n\tconst result: Record<string, string> = {};\n\n\tfor (const pair of value.split(',')) {\n\t\tconst [key, value] = pair.split('=');\n\n\t\tif (key === undefined || value === undefined) {\n\t\t\tthrow new InvalidArgumentError(\n\t\t\t\t'Expected map to be provided in the following format: `--option key=value,key=value`'\n\t\t\t);\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn result;\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\n/** Returns a promise that immediately resolves to `T`, useful when you need to mix sync and async code.\n *\n * @param val\n *\n * ### Usage\n * ```ts\n * const promises: Promise<number>[] = [];\n *\n * promises.push(immediate(10));\n * ```\n */\nexport function immediate<T>(val: T): Promise<T> {\n\treturn new Promise<T>((res) => res(val));\n}\n","import fs from 'node:fs';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport path from 'pathe';\nimport * as prettier from 'prettier';\nimport type { Formatter } from './config';\n\nexport type FormatterConfig = {\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\nexport async function loadFormatterConfig({\n\tformatter,\n\tcwd,\n}: { formatter?: Formatter; cwd: string }): Promise<FormatterConfig> {\n\tlet prettierOptions: prettier.Options | null = null;\n\tif (formatter === 'prettier') {\n\t\tprettierOptions = await prettier.resolveConfig(path.join(cwd, '.prettierrc'));\n\t}\n\n\tlet biomeOptions: PartialConfiguration | null = null;\n\tif (formatter === 'biome') {\n\t\tconst configPath = path.join(cwd, 'biome.json');\n\t\tif (fs.existsSync(configPath)) {\n\t\t\tbiomeOptions = JSON.parse(fs.readFileSync(configPath).toString());\n\t\t}\n\t}\n\n\treturn {\n\t\tbiomeOptions,\n\t\tprettierOptions,\n\t};\n}\n","export function getWatermark(repoUrl: string): string {\n\treturn `Installed from ${repoUrl}`;\n}\n","import color from 'chalk';\nimport { program } from 'commander';\nimport path from 'pathe';\nimport semver from 'semver';\nimport type { Manifest } from '../types';\nimport * as ASCII from './ascii';\nimport { cleanVersion, getPackage } from './package';\nimport type { RegistryProviderState } from './registry-providers';\n\n/** Checks if there are any reasons that the CLI should not proceed and logs warnings or stops execution accordingly.\n *\n * @param providerState\n * @param manifest\n * @returns\n */\nexport function checkPreconditions(\n\tproviderState: RegistryProviderState,\n\tmanifest: Manifest,\n\tcwd: string\n) {\n\tif (!manifest.peerDependencies) return;\n\n\tconst pkg = getPackage(path.join(cwd, 'package.json')).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tif (err.endsWith(\"doesn't exist\")) {\n\t\t\t\tprogram.error(\n\t\t\t\t\t`Couldn't find your ${color.bold('package.json')}. Please create one.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tprogram.error(color.red(err));\n\t\t}\n\t);\n\n\tconst dependencies = { ...pkg.dependencies, ...pkg.devDependencies };\n\n\tconst incompatible: {\n\t\tname: string;\n\t\tversion: string;\n\t\texists: boolean;\n\t\texpected: string;\n\t\tmessage?: string;\n\t}[] = [];\n\n\tfor (const [name, options] of Object.entries(manifest.peerDependencies)) {\n\t\tlet expected: string;\n\t\tlet message: string | undefined = undefined;\n\n\t\tif (typeof options === 'string') {\n\t\t\texpected = options;\n\t\t} else {\n\t\t\texpected = options.version;\n\t\t\tmessage = options.message;\n\t\t}\n\n\t\tconst version = dependencies[name];\n\n\t\tif (!version) {\n\t\t\tincompatible.push({\n\t\t\t\tname,\n\t\t\t\texpected,\n\t\t\t\tmessage,\n\t\t\t\tversion,\n\t\t\t\texists: false,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!semver.satisfies(cleanVersion(version), expected)) {\n\t\t\tincompatible.push({\n\t\t\t\tname,\n\t\t\t\texpected,\n\t\t\t\tmessage,\n\t\t\t\tversion,\n\t\t\t\texists: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (incompatible.length > 0) {\n\t\tprocess.stdout.write(\n\t\t\t`${ASCII.VERTICAL_LINE}\\n${color.yellow('▲')} ${ASCII.JUNCTION_TOP} Issues with ${color.bold(providerState.url)} peer dependencies\\n`\n\t\t);\n\t\tconst msgs = incompatible\n\t\t\t.map((dep, i) => {\n\t\t\t\tconst last = incompatible.length - 1 === i;\n\n\t\t\t\tlet message: string;\n\n\t\t\t\tif (dep.exists) {\n\t\t\t\t\tmessage = `${color.yellowBright('x unmet peer')} need ${color.bold(`${dep.name}@`)}${color.greenBright.bold(dep.expected)} >> found ${color.yellowBright.bold(dep.version)}`;\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `${color.red('x missing peer')} need ${color.bold(`${dep.name}@`)}${color.greenBright.bold(dep.expected)}`;\n\t\t\t\t}\n\n\t\t\t\tconst versionMessage = `${ASCII.VERTICAL_LINE} ${last ? ASCII.BOTTOM_LEFT_CORNER : ASCII.JUNCTION_RIGHT}${ASCII.HORIZONTAL_LINE} ${message}`;\n\n\t\t\t\tif (!dep.message) {\n\t\t\t\t\treturn versionMessage;\n\t\t\t\t}\n\n\t\t\t\treturn `${versionMessage}\\n${ASCII.VERTICAL_LINE} ${!last ? ASCII.VERTICAL_LINE : ''} ${color.gray(dep.message)}`;\n\t\t\t})\n\t\t\t.join('\\n');\n\n\t\tprocess.stdout.write(`${msgs}\\n`);\n\t}\n}\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, log, multiselect, outro, select, text } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, Option, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getBlockFilePath, getInstalled, preloadBlocks, resolveTree } from '../utils/blocks';\nimport { parseRecord } from '../utils/blocks/commander/parsers';\nimport * as promises from '../utils/blocks/ts/promises';\nimport * as url from '../utils/blocks/ts/url';\nimport {\n\ttype Formatter,\n\ttype ProjectConfig,\n\tformatterSchema,\n\tgetProjectConfig,\n\tprojectConfigSchema,\n\tresolvePaths,\n} from '../utils/config';\nimport { transformRemoteContent } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { getWatermark } from '../utils/get-watermark';\nimport * as persisted from '../utils/persisted';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\tspinner,\n\ttruncatedList,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\twatermark: v.optional(v.boolean()),\n\ttests: v.optional(v.boolean()),\n\tformatter: v.optional(v.union([v.literal('prettier'), v.literal('biome'), v.literal('none')])),\n\tpaths: v.optional(v.record(v.string(), v.string())),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const add = new Command('add')\n\t.description('Add blocks to your project.')\n\t.argument(\n\t\t'[blocks...]',\n\t\t'Names of the blocks you want to add to your project. ex: (utils/math, github/ieedan/std/utils/math)'\n\t)\n\t.addOption(\n\t\tnew Option('--formatter <choice>', 'The formatter to use when adding blocks.').choices([\n\t\t\t'prettier',\n\t\t\t'biome',\n\t\t\t'none',\n\t\t])\n\t)\n\t.addOption(\n\t\tnew Option('--watermark <choice>', 'Include a watermark at the top of added files.')\n\t\t\t.choices(['true', 'false'])\n\t\t\t.argParser((val) => val === 'true')\n\t)\n\t.addOption(\n\t\tnew Option('--tests <choice>', 'Include tests when adding blocks.')\n\t\t\t.choices(['true', 'false'])\n\t\t\t.argParser((val) => val === 'true')\n\t)\n\t.option(\n\t\t'--paths <category=path,category=path>',\n\t\t'The paths where categories should be added to your project.',\n\t\tparseRecord,\n\t\tundefined\n\t)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _add(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _add(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to add ${JSON.stringify(blockNames)}`);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst configResult = getProjectConfig(options.cwd);\n\n\t/** The user has opted for no config */\n\tconst noConfig = configResult.isErr();\n\n\tlet config: ProjectConfig;\n\n\tif (configResult.isErr()) {\n\t\tlet shouldContinue = options.yes;\n\n\t\tif (!options.yes) {\n\t\t\tconst response = await confirm({\n\t\t\t\tmessage: `You don't have ${ascii.JSREPO} initialized in your project. Do you want to continue?`,\n\t\t\t\tinitialValue: false,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tshouldContinue = response;\n\t\t}\n\n\t\tif (!shouldContinue) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// add default config used for default values in prompts\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tincludeTests: false,\n\t\t\twatermark: true,\n\t\t\tpaths: {\n\t\t\t\t'*': './src/blocks',\n\t\t\t},\n\t\t\trepos: [],\n\t\t};\n\t} else {\n\t\tconfig = configResult.unwrap();\n\t}\n\n\tconfig.formatter =\n\t\toptions.formatter !== undefined && options.formatter !== 'none'\n\t\t\t? options.formatter\n\t\t\t: config.formatter;\n\tconfig.watermark = options.watermark !== undefined ? options.watermark : config.watermark;\n\tconfig.includeTests = options.tests !== undefined ? options.tests : config.includeTests;\n\tconfig.paths =\n\t\toptions.paths !== undefined ? { ...config.paths, ...options.paths } : config.paths;\n\n\tlet repoPaths = config.repos;\n\tconst mustResolveRepos = new Set<string>();\n\tlet resolveAllRepos = false;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) {\n\t\trepoPaths = [options.repo];\n\t}\n\n\t// resolve repos for blocks\n\tfor (const blockSpecifier of blockNames) {\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// we are only getting repos for blocks that specified repos\n\t\tif (!provider) {\n\t\t\t// if a block doesn't specify a repo we must resolve all\n\t\t\tresolveAllRepos = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { url: repo } = provider.parse(blockSpecifier, { fullyQualified: true });\n\n\t\tconst alreadyExists =\n\t\t\t!config.repos.find((repoPath) => repoPath === repo) && !mustResolveRepos.has(repo);\n\n\t\tif (!alreadyExists) {\n\t\t\tif (!options.allow) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(repo)}?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result) || !result) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// only add if it doesn't exist\n\t\t\trepoPaths.push(repo);\n\t\t}\n\n\t\t// this way we add the config.repos as well\n\t\tmustResolveRepos.add(repo);\n\t}\n\n\tif (!resolveAllRepos && blockNames.length > 0) {\n\t\trepoPaths = Array.from(mustResolveRepos);\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (repoPaths.length === 0) {\n\t\tif (noConfig) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Fully quality blocks ex: (github/ieedan/std/utils/math) or provide the \\`${color.bold(\n\t\t\t\t\t\t'--repo'\n\t\t\t\t\t)}\\` flag to specify a registry.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`There were no repos present in your config and you didn't provide the \\`${color.bold(\n\t\t\t\t\t'--repo'\n\t\t\t\t)}\\` flag with a repo.`\n\t\t\t)\n\t\t);\n\t}\n\n\tverbose(`Resolving ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst manifests = (\n\t\tawait registry.fetchManifests(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(v) => v,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = registry.getRemoteBlocks(manifests);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tfor (const manifest of manifests) {\n\t\tcheckPreconditions(manifest.state, manifest.manifest, options.cwd);\n\t}\n\n\tlet installedBlocks = getInstalled(blocksMap, config, options.cwd).map((val) => val.specifier);\n\n\tlet installingBlockNames = blockNames;\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (installingBlockNames.length === 0) {\n\t\tconst promptResult = await multiselect({\n\t\t\tmessage: 'Select which blocks to add.',\n\t\t\toptions: Array.from(blocksMap.entries())\n\t\t\t\t.filter(([_, value]) => value.list)\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\tconst shortName = `${value.category}/${value.name}`;\n\n\t\t\t\t\tconst blockExists =\n\t\t\t\t\t\tinstalledBlocks.findIndex((block) => block === shortName) !== -1;\n\n\t\t\t\t\tlet label: string;\n\n\t\t\t\t\t// show the full repo if there are multiple repos\n\t\t\t\t\tif (repoPaths.length > 1) {\n\t\t\t\t\t\tlabel = `${color.cyan(url.join(value.sourceRepo.url, value.category))}/${value.name}`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = `${color.cyan(value.category)}/${value.name}`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: blockExists ? color.gray(label) : label,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t// show hint for `Installed` if block is already installed\n\t\t\t\t\t\thint: blockExists ? 'Installed' : undefined,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\trequired: true,\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tinstallingBlockNames = promptResult as string[];\n\t}\n\n\tverbose(`Installing blocks ${color.cyan(installingBlockNames.join(', '))}`);\n\n\tconst installingBlocks = (\n\t\tawait resolveTree(installingBlockNames, blocksMap, resolvedRepos)\n\t).match(\n\t\t(val) => val,\n\t\t(err) => program.error(err)\n\t);\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst store = persisted.get();\n\n\tif (noConfig) {\n\t\tconst zeroConfigKey = `${options.cwd}-zero-config`;\n\n\t\tconst zeroConfigParsed = v.safeParse(projectConfigSchema, store.get(zeroConfigKey));\n\n\t\tconst zeroConfig = zeroConfigParsed.success ? zeroConfigParsed.output : config;\n\n\t\tconst categories = Array.from(new Set(installingBlocks.map((b) => b.category)));\n\n\t\tif (options.paths === undefined) {\n\t\t\tfor (const cat of categories) {\n\t\t\t\tconst blocksPath = await text({\n\t\t\t\t\tmessage: `Where would you like to add ${color.cyan(cat)}?`,\n\t\t\t\t\tplaceholder: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tinitialValue: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tdefaultValue: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(blocksPath)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tconfig.paths[cat] = blocksPath;\n\t\t\t}\n\t\t}\n\n\t\tif (!options.yes && options.tests === undefined) {\n\t\t\tconst includeTests = await confirm({\n\t\t\t\tmessage: 'Include tests?',\n\t\t\t\tinitialValue: zeroConfig.includeTests,\n\t\t\t});\n\n\t\t\tif (isCancel(includeTests)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.includeTests = includeTests;\n\t\t}\n\n\t\tif (!options.yes && options.watermark === undefined) {\n\t\t\tconst addWatermark = await confirm({\n\t\t\t\tmessage: 'Add watermark?',\n\t\t\t\tinitialValue: zeroConfig.watermark,\n\t\t\t});\n\n\t\t\tif (isCancel(addWatermark)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.watermark = addWatermark;\n\t\t}\n\n\t\tif (options.formatter === undefined) {\n\t\t\tlet defaultFormatter = 'none';\n\n\t\t\tif (fs.existsSync(path.join(options.cwd, '.prettierrc'))) {\n\t\t\t\tdefaultFormatter = 'prettier';\n\t\t\t}\n\n\t\t\tif (fs.existsSync(path.join(options.cwd, 'biome.json'))) {\n\t\t\t\tdefaultFormatter = 'biome';\n\t\t\t}\n\n\t\t\tconst response = await select({\n\t\t\t\tmessage: 'What formatter would you like to use?',\n\t\t\t\toptions: ['Prettier', 'Biome', 'None'].map((val) => ({\n\t\t\t\t\tvalue: val.toLowerCase(),\n\t\t\t\t\tlabel: val,\n\t\t\t\t})),\n\t\t\t\tinitialValue:\n\t\t\t\t\tdefaultFormatter === 'none'\n\t\t\t\t\t\t? zeroConfig.formatter\n\t\t\t\t\t\t\t? zeroConfig.formatter\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t\t\t: defaultFormatter,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (response !== 'none') {\n\t\t\t\tconfig.formatter = response as Formatter;\n\t\t\t}\n\t\t}\n\n\t\tstore.set(zeroConfigKey, config);\n\n\t\t// re-run to get installed blocks at the provided path\n\t\tinstalledBlocks = getInstalled(blocksMap, config, options.cwd).map((val) => val.specifier);\n\t}\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst updatedBlocks = new Set<string>();\n\n\tlet overwriteAll: boolean | undefined;\n\n\tconst preloadedBlocks = preloadBlocks(installingBlocks, config);\n\n\tconst updatedFiles: Promise<{\n\t\tdestination: string;\n\t\tcontent: string;\n\t\tblock: registry.RemoteBlock;\n\t}>[] = [];\n\n\tfor (const preloadedBlock of preloadedBlocks) {\n\t\tconst fullSpecifier = url.join(\n\t\t\tpreloadedBlock.block.sourceRepo.url,\n\t\t\tpreloadedBlock.block.category,\n\t\t\tpreloadedBlock.block.name\n\t\t);\n\t\tconst shortSpecifier = `${preloadedBlock.block.category}/${preloadedBlock.block.name}`;\n\n\t\tverbose(`Setting up ${fullSpecifier}`);\n\n\t\tconst blockExists = installedBlocks.find((b) => shortSpecifier === b);\n\n\t\tif (config.includeTests && preloadedBlock.block.tests) {\n\t\t\tverbose('Trying to include tests');\n\n\t\t\tdevDeps.add('vitest');\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tif (blockExists && !options.yes && !overwriteAll) {\n\t\t\tif (overwriteAll === undefined) {\n\t\t\t\tconst overwriteBlocks = installingBlocks\n\t\t\t\t\t.map((installing) => `${installing.category}/${installing.name}`)\n\t\t\t\t\t.filter((spec) => installedBlocks.find((b) => b === spec));\n\n\t\t\t\tlog.warn(\n\t\t\t\t\t`The following components ${color.bold.yellow('already exist')}: ${color.cyan(truncatedList(overwriteBlocks))}`\n\t\t\t\t);\n\n\t\t\t\tconst overwrite = await confirm({\n\t\t\t\t\tmessage: `Would you like to ${color.bold.red('overwrite')} all existing components?`,\n\t\t\t\t\tactive: 'Yes, overwrite everything',\n\t\t\t\t\tinactive: 'No, let me decide individually',\n\t\t\t\t\tinitialValue: false,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(overwrite)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\toverwriteAll = overwrite;\n\t\t\t}\n\n\t\t\tif (!overwriteAll) {\n\t\t\t\tconst files = await preloadedBlock.files;\n\n\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE} ${fullSpecifier}\\n`);\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tconst content = file.content.match(\n\t\t\t\t\t\t(v) => v,\n\t\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t\t);\n\n\t\t\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\t\t\tfile.name,\n\t\t\t\t\t\tpreloadedBlock.block,\n\t\t\t\t\t\tresolvedPaths,\n\t\t\t\t\t\toptions.cwd\n\t\t\t\t\t);\n\n\t\t\t\t\tconst remoteContent = (\n\t\t\t\t\t\tawait transformRemoteContent({\n\t\t\t\t\t\t\tfile: {\n\t\t\t\t\t\t\t\tcontent: content,\n\t\t\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbiomeOptions,\n\t\t\t\t\t\t\tprettierOptions,\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\t\t\twatermark: getWatermark(preloadedBlock.block.sourceRepo.url),\n\t\t\t\t\t\t\tverbose,\n\t\t\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t\t\t})\n\t\t\t\t\t).match(\n\t\t\t\t\t\t(v) => v,\n\t\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t\t);\n\n\t\t\t\t\tlet localContent = '';\n\t\t\t\t\tif (fs.existsSync(destPath)) {\n\t\t\t\t\t\tlocalContent = fs.readFileSync(destPath).toString();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter: config.formatter },\n\t\t\t\t\t\tcurrent: {\n\t\t\t\t\t\t\tpath: destPath,\n\t\t\t\t\t\t\tcontent: localContent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tincoming: {\n\t\t\t\t\t\t\tpath: url.join(fullSpecifier, file.name),\n\t\t\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t\tno: false,\n\t\t\t\t\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateResult.applyChanges) {\n\t\t\t\t\t\tupdatedFiles.push(\n\t\t\t\t\t\t\tpromises.immediate({\n\t\t\t\t\t\t\t\tdestination: destPath,\n\t\t\t\t\t\t\t\tcontent: updateResult.updatedContent,\n\t\t\t\t\t\t\t\tblock: preloadedBlock.block,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tupdatedBlocks.add(shortSpecifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// once files load map over them and add them to updatedFiles\n\t\tpreloadedBlock.files.then((files) => {\n\t\t\tfiles.map(async (file) => {\n\t\t\t\tconst content = file.content.match(\n\t\t\t\t\t(v) => v,\n\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t);\n\n\t\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\t\tfile.name,\n\t\t\t\t\tpreloadedBlock.block,\n\t\t\t\t\tresolvedPaths,\n\t\t\t\t\toptions.cwd\n\t\t\t\t);\n\n\t\t\t\tconst updatedFile = transformRemoteContent({\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t},\n\t\t\t\t\tbiomeOptions,\n\t\t\t\t\tprettierOptions,\n\t\t\t\t\tconfig,\n\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\twatermark: getWatermark(preloadedBlock.block.sourceRepo.url),\n\t\t\t\t\tverbose,\n\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t}).then((remoteContent) => {\n\t\t\t\t\tif (remoteContent.isErr()) {\n\t\t\t\t\t\tprogram.error(color.red(remoteContent.unwrapErr()));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdestination: destPath,\n\t\t\t\t\t\tcontent: remoteContent.unwrap(),\n\t\t\t\t\t\tblock: preloadedBlock.block,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tupdatedFiles.push(updatedFile);\n\t\t\t});\n\t\t});\n\n\t\tupdatedBlocks.add(shortSpecifier);\n\t}\n\n\tif (updatedBlocks.size === 0) {\n\t\tlog.success('Nothing to update');\n\t} else {\n\t\tloading.start('Adding blocks');\n\n\t\t// wait for any remaining files to finish loading\n\t\tawait Promise.all(preloadedBlocks.map((p) => p.files));\n\n\t\tawait Promise.all(\n\t\t\tupdatedFiles.map(async (updatedFile) => {\n\t\t\t\tconst file = await updatedFile;\n\n\t\t\t\tconst folder = path.dirname(file.destination);\n\n\t\t\t\tif (!fs.existsSync(folder)) {\n\t\t\t\t\tverbose(`Creating directory ${color.bold(folder)}`);\n\n\t\t\t\t\tfs.mkdirSync(folder, {\n\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tverbose(`Writing to ${color.bold(file.destination)}`);\n\n\t\t\t\tfs.writeFileSync(file.destination, file.content);\n\t\t\t})\n\t\t);\n\n\t\tloading.stop(`Added blocks ${color.cyan(Array.from(updatedBlocks).join(', '))}`);\n\t}\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push('Import and use the blocks!');\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n}\n","/*\n\tInstalled from @ieedan/std\n*/\n\n/** Await this to pause execution until the duration has passed.\n *\n * @param durationMs The duration in ms until the sleep in over\n * @returns\n *\n * ## Usage\n * ```ts\n * console.log(Date.now()) // 1725739228744\n *\n * await sleep(1000);\n *\n * console.log(Date.now()) // 1725739229744\n * ```\n */\nexport function sleep(durationMs: number): Promise<void> {\n\treturn new Promise((res) => setTimeout(res, durationMs));\n}\n","import { cancel, confirm, isCancel, log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport nodeMachineId from 'node-machine-id';\nimport * as v from 'valibot';\nimport * as ASCII from '../utils/ascii';\nimport { sleep } from '../utils/blocks/ts/sleep';\nimport { iFetch } from '../utils/fetch';\nimport { intro, spinner } from '../utils/prompts';\nimport * as jsrepo from '../utils/registry-providers/jsrepo';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\ttoken: v.optional(v.string()),\n\tlogout: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const auth = new Command('auth')\n\t.description('Authenticate to jsrepo.com')\n\t.option('--logout', 'Execute the logout flow.', false)\n\t.option('--token <token>', 'The token to use for authenticating to this service.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _auth(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _auth(options: Options) {\n\tconst tokenManager = new TokenManager();\n\n\tif (options.logout) {\n\t\ttokenManager.delete('jsrepo');\n\t\tlog.success(`Logged out of ${ASCII.JSREPO_DOT_COM}!`);\n\t\treturn;\n\t}\n\n\tif (options.token !== undefined) {\n\t\ttokenManager.set('jsrepo', options.token);\n\t\tlog.success(`Logged into ${ASCII.JSREPO_DOT_COM}!`);\n\t\treturn;\n\t}\n\n\tif (tokenManager.get('jsrepo') !== undefined) {\n\t\tconst result = await confirm({\n\t\t\tmessage: 'You are currently signed into jsrepo do you want to sign out?',\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tconst hardwareId = nodeMachineId.machineIdSync(true);\n\n\tlet anonSessionId: string;\n\n\ttry {\n\t\tconst response = await iFetch(`${jsrepo.BASE_URL}/api/login/device`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ hardwareId }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error('There was an error creating the session');\n\t\t}\n\n\t\tconst res = await response.json();\n\n\t\tanonSessionId = res.id;\n\t} catch (err) {\n\t\tprogram.error(color.red(err));\n\t}\n\n\tlog.step(`Sign in at ${color.cyan(`${jsrepo.BASE_URL}/login/device/${anonSessionId}`)}`);\n\n\tconst timeout = 1000 * 60 * 60 * 15; // 15 minutes\n\n\tconst loading = spinner();\n\n\tconst pollingTimeout = setTimeout(() => {\n\t\tloading.stop('You never signed in.');\n\n\t\tprogram.error(color.red('Session timed out try again!'));\n\t}, timeout);\n\n\tloading.start('Waiting for you to sign in...');\n\n\twhile (true) {\n\t\t// wait initially cause c'mon ain't no way\n\t\tawait sleep(5000); // wait 5 seconds\n\n\t\tconst endpoint = `${jsrepo.BASE_URL}/api/login/device/${anonSessionId}`;\n\n\t\ttry {\n\t\t\tconst response = await iFetch(endpoint, {\n\t\t\t\tmethod: 'PATCH',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ hardwareId }),\n\t\t\t});\n\n\t\t\tif (!response.ok) continue;\n\n\t\t\tclearTimeout(pollingTimeout);\n\n\t\t\tconst key = await response.text();\n\n\t\t\ttokenManager.set('jsrepo', key);\n\n\t\t\tloading.stop(`Logged into ${ASCII.JSREPO_DOT_COM}!`);\n\n\t\t\tbreak;\n\t\t} catch {\n\t\t\t// continue\n\t\t}\n\t}\n}\n","import fs from 'node:fs';\nimport { log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport ignore from 'ignore';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport { MANIFEST_FILE } from '../constants';\nimport type { Category } from '../types';\nimport * as ascii from '../utils/ascii';\nimport { buildBlocksDirectory, buildConfigFiles, pruneUnused } from '../utils/build';\nimport { DEFAULT_CONFIG, runRules } from '../utils/build/check';\nimport { IGNORED_DIRS, type RegistryConfig, getRegistryConfig } from '../utils/config';\nimport { createManifest, parseManifest } from '../utils/manifest';\nimport { intro, spinner } from '../utils/prompts';\n\nconst schema = v.object({\n\tdirs: v.optional(v.array(v.string())),\n\toutputDir: v.optional(v.string()),\n\tincludeBlocks: v.optional(v.array(v.string())),\n\tincludeCategories: v.optional(v.array(v.string())),\n\texcludeBlocks: v.optional(v.array(v.string())),\n\texcludeCategories: v.optional(v.array(v.string())),\n\texcludeDeps: v.optional(v.array(v.string())),\n\tlistBlocks: v.optional(v.array(v.string())),\n\tlistCategories: v.optional(v.array(v.string())),\n\tdoNotListBlocks: v.optional(v.array(v.string())),\n\tdoNotListCategories: v.optional(v.array(v.string())),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tpreview: v.optional(v.boolean()),\n\toutput: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst build = new Command('build')\n\t.description(`Builds the provided --dirs in the project root into a \\`${MANIFEST_FILE}\\` file.`)\n\t.option('--dirs [dirs...]', 'The directories containing the blocks.')\n\t.option(\n\t\t'--output-dir <dir>',\n\t\t'The directory to output the registry to. (Copies jsrepo-manifest.json + all required files)'\n\t)\n\t.option('--include-blocks [blockNames...]', 'Include only the blocks with these names.')\n\t.option(\n\t\t'--include-categories [categoryNames...]',\n\t\t'Include only the categories with these names.'\n\t)\n\t.option('--exclude-blocks [blockNames...]', 'Do not include the blocks with these names.')\n\t.option(\n\t\t'--exclude-categories [categoryNames...]',\n\t\t'Do not include the categories with these names.'\n\t)\n\t.option('--list-blocks [blockNames...]', 'List only the blocks with these names.')\n\t.option('--list-categories [categoryNames...]', 'List only the categories with these names.')\n\t.option('--do-not-list-blocks [blockNames...]', 'Do not list the blocks with these names.')\n\t.option(\n\t\t'--do-not-list-categories [categoryNames...]',\n\t\t'Do not list the categories with these names.'\n\t)\n\t.option('--exclude-deps [deps...]', 'Dependencies that should not be added.')\n\t.option('--allow-subdirectories', 'Allow subdirectories to be built.')\n\t.option('--preview', 'Display a preview of the blocks list.')\n\t.option('--no-output', `Do not output a \\`${MANIFEST_FILE}\\` file.`)\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _build(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _build(options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst categories: Category[] = [];\n\n\tconst config: RegistryConfig = getRegistryConfig(options.cwd).match(\n\t\t(val) => {\n\t\t\tif (val === null) {\n\t\t\t\treturn {\n\t\t\t\t\t$schema: '',\n\t\t\t\t\treadme: 'README.md',\n\t\t\t\t\tdirs: options.dirs ?? [],\n\t\t\t\t\toutputDir: options.outputDir,\n\t\t\t\t\tdoNotListBlocks: options.doNotListBlocks ?? [],\n\t\t\t\t\tdoNotListCategories: options.doNotListCategories ?? [],\n\t\t\t\t\tlistBlocks: options.listBlocks ?? [],\n\t\t\t\t\tlistCategories: options.listCategories ?? [],\n\t\t\t\t\texcludeDeps: options.excludeDeps ?? [],\n\t\t\t\t\tincludeBlocks: options.includeBlocks ?? [],\n\t\t\t\t\tincludeCategories: options.includeCategories ?? [],\n\t\t\t\t\texcludeBlocks: options.excludeBlocks ?? [],\n\t\t\t\t\texcludeCategories: options.excludeCategories ?? [],\n\t\t\t\t\tallowSubdirectories: options.allowSubdirectories,\n\t\t\t\t\tpreview: options.preview,\n\t\t\t\t} satisfies RegistryConfig;\n\t\t\t}\n\n\t\t\tconst mergedVal = val;\n\n\t\t\t// overwrites config with flag values\n\n\t\t\tif (options.dirs) mergedVal.dirs = options.dirs;\n\t\t\tif (options.outputDir) mergedVal.outputDir = options.outputDir;\n\t\t\tif (options.doNotListBlocks) mergedVal.doNotListBlocks = options.doNotListBlocks;\n\t\t\tif (options.doNotListCategories)\n\t\t\t\tmergedVal.doNotListCategories = options.doNotListCategories;\n\t\t\tif (options.listBlocks) mergedVal.listBlocks = options.listBlocks;\n\t\t\tif (options.listCategories) mergedVal.listCategories = options.listCategories;\n\t\t\tif (options.includeBlocks) mergedVal.includeBlocks = options.includeBlocks;\n\t\t\tif (options.includeCategories) mergedVal.includeCategories = options.includeCategories;\n\t\t\tif (options.excludeBlocks) mergedVal.excludeBlocks = options.excludeBlocks;\n\t\t\tif (options.excludeCategories) mergedVal.excludeCategories = options.excludeCategories;\n\t\t\tif (options.excludeDeps) mergedVal.excludeDeps = options.excludeDeps;\n\t\t\tif (options.allowSubdirectories !== undefined)\n\t\t\t\tmergedVal.allowSubdirectories = options.allowSubdirectories;\n\t\t\tif (options.preview !== undefined) mergedVal.preview = options.preview;\n\n\t\t\tmergedVal.rules = { ...DEFAULT_CONFIG, ...mergedVal.rules };\n\n\t\t\treturn mergedVal;\n\t\t},\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tlet outDir: string;\n\n\tif (config.outputDir) {\n\t\toutDir = path.join(options.cwd, config.outputDir);\n\t} else {\n\t\toutDir = options.cwd;\n\t}\n\n\tconst manifestOut = path.join(outDir, MANIFEST_FILE);\n\n\tif (options.output && fs.existsSync(manifestOut)) {\n\t\t// we need to remove all previously copied directories\n\t\tif (config.outputDir) {\n\t\t\t// read old manifest to determine where the unwanted files are\n\t\t\t// we can't just rm -rf because other static files could be hosted out of the same directory\n\t\t\tconst oldManifest = parseManifest(fs.readFileSync(manifestOut).toString());\n\n\t\t\tif (oldManifest.isOk()) {\n\t\t\t\t// first just remove all the files\n\t\t\t\tfor (const category of oldManifest.unwrap().categories) {\n\t\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\t\tconst newDirPath = path.join(outDir, block.directory);\n\n\t\t\t\t\t\tif (fs.existsSync(newDirPath)) {\n\t\t\t\t\t\t\tfs.rmSync(newDirPath, { recursive: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfs.rmSync(manifestOut);\n\t}\n\n\tconst ig = ignore();\n\n\ttry {\n\t\tconst ignoreFile = fs.readFileSync(path.join(options.cwd, '.gitignore')).toString();\n\n\t\tig.add(ignoreFile);\n\t} catch {\n\t\t// just continue on\n\t}\n\n\tig.add(IGNORED_DIRS);\n\n\tfor (const dir of config.dirs) {\n\t\tconst dirPath = path.join(options.cwd, dir);\n\n\t\tloading.start(`Building ${color.cyan(dirPath)}`);\n\n\t\tconst builtCategories = buildBlocksDirectory(dirPath, {\n\t\t\tcwd: options.cwd,\n\t\t\tignore: ig,\n\t\t\tconfig,\n\t\t});\n\n\t\tfor (const category of builtCategories) {\n\t\t\tif (categories.find((cat) => cat.name === category.name) !== undefined) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding \\`${color.cyan(`${dir}/${category.name}`)}\\` because a category with the same name already exists!`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcategories.push(category);\n\t\t}\n\n\t\tloading.stop(`Built ${color.cyan(dirPath)}`);\n\t}\n\n\tconst configFiles = buildConfigFiles(config, { cwd: options.cwd });\n\n\tconst manifest = createManifest(categories, configFiles, config);\n\n\tloading.start('Checking manifest');\n\n\tconst { warnings, errors } = runRules(manifest, config, options.cwd, config.rules);\n\n\tloading.stop('Completed checking manifest.');\n\n\t// add gap for errors\n\tif (warnings.length > 0 || errors.length > 0) {\n\t\tconsole.log(ascii.VERTICAL_LINE);\n\t}\n\n\tfor (const warning of warnings) {\n\t\tconsole.log(warning);\n\t}\n\n\tif (errors.length > 0) {\n\t\tfor (const error of errors) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Completed checking manifest with ${color.bold(`${errors.length} error(s)`)} and ${color.bold(`${warnings.length} warning(s)`)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// removes any unused blocks or categories\n\tconst [prunedCategories, count] = pruneUnused(manifest.categories);\n\n\tmanifest.categories = prunedCategories;\n\n\tif (count > 0) {\n\t\tlog.step(`Removed ${count} unused block${count > 1 ? 's' : ''}.`);\n\t}\n\n\tif (config.preview) {\n\t\tconst blocks = manifest.categories.flatMap((cat) =>\n\t\t\tcat.blocks.filter((b) => b.list).map((b) => `${color.cyan(b.category)}/${b.name}`)\n\t\t);\n\n\t\tlog.message(`${color.yellow('Preview')}:`);\n\n\t\tfor (const block of blocks) {\n\t\t\tconsole.log(`${ascii.VERTICAL_LINE} ◻ ${block}`);\n\t\t}\n\t}\n\n\tif (options.output) {\n\t\tif (config.outputDir) {\n\t\t\tloading.start(`Copying registry files to \\`${color.cyan(outDir)}\\``);\n\n\t\t\t// copy config files to output directory\n\t\t\tif (manifest.configFiles) {\n\t\t\t\tfor (const file of manifest.configFiles) {\n\t\t\t\t\tconst originalPath = path.join(options.cwd, file.path);\n\t\t\t\t\tconst destPath = path.join(outDir, file.path);\n\n\t\t\t\t\tconst containing = path.join(destPath, '../');\n\n\t\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tfs.copyFileSync(originalPath, destPath);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// copy the files for each block in each category\n\t\t\tfor (const category of manifest.categories) {\n\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\tconst originalPath = path.join(options.cwd, block.directory);\n\t\t\t\t\tconst newDirPath = path.join(outDir, block.directory);\n\n\t\t\t\t\tfor (const file of block.files) {\n\t\t\t\t\t\tconst containing = path.join(newDirPath, file, '../');\n\n\t\t\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfs.copyFileSync(path.join(originalPath, file), path.join(newDirPath, file));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloading.stop(`Copied registry files to \\`${color.cyan(outDir)}\\``);\n\t\t}\n\n\t\tloading.start(`Writing output to \\`${color.cyan(manifestOut)}\\``);\n\n\t\t// write manifest\n\t\tfs.writeFileSync(manifestOut, JSON.stringify(manifest, null, '\\t'));\n\n\t\tloading.stop(`Wrote output to \\`${color.cyan(manifestOut)}\\``);\n\t}\n}\n\nexport { build };\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, select } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { resolveTree } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { isTestFile } from '../utils/build';\nimport { type ProjectConfig, getProjectConfig, resolvePaths } from '../utils/config';\nimport {\n\ttype ConcurrentTask,\n\tintro,\n\tpromptInstallDependencies,\n\trunTasksConcurrently,\n\tspinner,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.objectWithRest(\n\t{\n\t\trepo: v.optional(v.string()),\n\t\tallow: v.boolean(),\n\t\tcache: v.boolean(),\n\t\tverbose: v.boolean(),\n\t\tcwd: v.string(),\n\t},\n\tv.unknown()\n);\n\ntype Options = v.InferInput<typeof schema>;\n\nconst exec = new Command('exec')\n\t.alias('x')\n\t.description('Execute a block as a script.')\n\t.addArgument(\n\t\tnew Argument(\n\t\t\t'script',\n\t\t\t'Name of the script you want to execute. ex: (general/hello, github/ieedan/std/general/hello)'\n\t\t).argOptional()\n\t)\n\t.option('--repo <repo>', 'Repository to download and run the script from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.allowExcessArguments()\n\t.allowUnknownOption()\n\t.action(async (script, opts, command) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _exec(script, options, command);\n\t});\n\n// biome-ignore lint/suspicious/noExplicitAny: we don't have a type for command\nexport async function _exec(s: string | undefined, options: Options, command: any) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tlet script = s;\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst configResult = getProjectConfig(options.cwd);\n\n\t/** The user has opted for no config */\n\tconst noConfig = configResult.isErr();\n\n\tlet config: ProjectConfig;\n\n\tif (configResult.isErr()) {\n\t\t// add default config used for default values in prompts\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tincludeTests: false,\n\t\t\twatermark: true,\n\t\t\tpaths: {\n\t\t\t\t'*': './',\n\t\t\t},\n\t\t\trepos: [],\n\t\t};\n\t} else {\n\t\tconfig = configResult.unwrap();\n\t}\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\tconst provider = script ? registry.selectProvider(script) : undefined;\n\n\t// we are only getting repos for blocks that specified repos\n\tif (script && provider) {\n\t\tconst { url: repo } = provider.parse(script, { fullyQualified: true });\n\n\t\tif (!repoPaths.find((repoPath) => repoPath === repo)) {\n\t\t\tif (!options.allow) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(repo)}?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result) || !result) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trepoPaths = [repo];\n\t\t}\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (repoPaths.length === 0) {\n\t\tif (noConfig) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Fully quality your script ex: (github/ieedan/std/scripts/build) or provide the \\`${color.bold(\n\t\t\t\t\t\t'--repo'\n\t\t\t\t\t)}\\` flag to specify a registry.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`There were no repos present in your config and you didn't provide the \\`${color.bold(\n\t\t\t\t\t'--repo'\n\t\t\t\t)}\\` flag with a repo.`\n\t\t\t)\n\t\t);\n\t}\n\n\tloading.start(`Fetching scripts from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = (\n\t\tawait registry.fetchBlocks(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching scripts from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tloading.stop(`Retrieved scripts from ${color.cyan(repoPaths.join(', '))}`);\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (!script) {\n\t\tconst promptResult = await select({\n\t\t\tmessage: 'Select which script to run.',\n\t\t\toptions: Array.from(blocksMap.entries())\n\t\t\t\t.filter(([_, value]) => value.list)\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\tlet label: string;\n\n\t\t\t\t\t// show the full repo if there are multiple repos\n\t\t\t\t\tif (repoPaths.length > 1) {\n\t\t\t\t\t\tlabel = `${color.cyan(url.join(value.sourceRepo.url, value.category))}/${value.name}`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = `${color.cyan(value.category)}/${value.name}`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tscript = promptResult as string;\n\t}\n\n\tconst installingBlocks = (await resolveTree([script], blocksMap, resolvedRepos)).match(\n\t\t(val) => val,\n\t\t(err) => program.error(err)\n\t);\n\n\tconst tempDirBase = 'temp-jsrepo-exec';\n\n\tconst tempDirectoryRelative = `./${tempDirBase}/${encodeURIComponent(script)}`;\n\n\tconst tempDirectory = path.join(process.cwd(), tempDirectoryRelative);\n\n\tconfig.paths['*'] = tempDirectoryRelative;\n\n\tfs.mkdirSync(tempDirectory, { recursive: true });\n\n\tconst pm = (await detect({ cwd: process.cwd() }))?.agent ?? 'npm';\n\n\tconst tasks: ConcurrentTask[] = [];\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst resolvedPathsResult = resolvePaths(config.paths, options.cwd);\n\n\tif (resolvedPathsResult.isErr()) {\n\t\tprogram.error(color.red(resolvedPathsResult.unwrapErr()));\n\t}\n\n\tconst resolvedPaths = resolvedPathsResult.unwrap();\n\n\tconst addedBlocks: string[] = [];\n\n\tfor (const block of installingBlocks) {\n\t\tconst fullSpecifier = `${block.sourceRepo.url}/${block.category}/${block.name}`;\n\t\tconst shortSpecifier = `${block.category}/${block.name}`;\n\n\t\tconst providerInfo = block.sourceRepo;\n\n\t\tconst directory = path.join(options.cwd, resolvedPaths['*'], block.category);\n\n\t\taddedBlocks.push(shortSpecifier);\n\n\t\ttasks.push({\n\t\t\trun: async ({ message }) => {\n\t\t\t\tmessage(`Adding ${color.cyan(fullSpecifier)}`);\n\n\t\t\t\t// in case the directory didn't already exist\n\t\t\t\tfs.mkdirSync(directory, { recursive: true });\n\n\t\t\t\tconst files: { content: string; destPath: string }[] = [];\n\n\t\t\t\tconst getSourceFile = async (filePath: string) => {\n\t\t\t\t\tconst content = await registry.fetchRaw(providerInfo, filePath);\n\n\t\t\t\t\tif (content.isErr()) {\n\t\t\t\t\t\tloading.stop(color.red(`Error fetching ${color.bold(filePath)}`));\n\t\t\t\t\t\tprogram.error(\n\t\t\t\t\t\t\tcolor.red(`There was an error trying to get ${fullSpecifier}`)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn content.unwrap();\n\t\t\t\t};\n\n\t\t\t\tfor (const sourceFile of block.files) {\n\t\t\t\t\tif (!config.includeTests && isTestFile(sourceFile)) continue;\n\n\t\t\t\t\tconst sourcePath = path.join(block.directory, sourceFile);\n\n\t\t\t\t\tlet destPath: string;\n\t\t\t\t\tif (block.subdirectory) {\n\t\t\t\t\t\tdestPath = path.join(directory, block.name, sourceFile);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdestPath = path.join(directory, sourceFile);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = await getSourceFile(sourcePath);\n\n\t\t\t\t\tconst pathFolder = destPath.slice(0, destPath.length - sourceFile.length);\n\n\t\t\t\t\tfs.mkdirSync(pathFolder, {\n\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tfiles.push({ content, destPath });\n\t\t\t\t}\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tfs.writeFileSync(file.destPath, file.content);\n\t\t\t\t}\n\n\t\t\t\tif (config.includeTests && block.tests) {\n\t\t\t\t\tconst { devDependencies } = JSON.parse(\n\t\t\t\t\t\tfs.readFileSync(path.join(options.cwd, 'package.json')).toString()\n\t\t\t\t\t);\n\n\t\t\t\t\tif (devDependencies === undefined || devDependencies.vitest === undefined) {\n\t\t\t\t\t\tdevDeps.add('vitest');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const dep of block.devDependencies) {\n\t\t\t\t\tdevDeps.add(dep);\n\t\t\t\t}\n\n\t\t\t\tfor (const dep of block.dependencies) {\n\t\t\t\t\tdeps.add(dep);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tawait runTasksConcurrently({\n\t\tstartMessage: 'Adding blocks',\n\t\tstopMessage: `Added ${color.cyan(addedBlocks.join(', '))}`,\n\t\tloading,\n\t\ttasks,\n\t});\n\n\tconst hasDependencies = deps.size > 0 || devDeps.size > 0;\n\n\t// create temporary package.json\n\tif (hasDependencies) {\n\t\t// add package.json\n\t\tconst packageContent = {\n\t\t\tname: 'temp-package',\n\t\t\ttype: 'module',\n\t\t\tversion: '0.0.1',\n\t\t};\n\n\t\tconst packagePath = path.join(tempDirectory, 'package.json');\n\n\t\tfs.writeFileSync(packagePath, JSON.stringify(packageContent, null, '\\t'));\n\t}\n\n\tawait promptInstallDependencies(deps, devDeps, {\n\t\tyes: true,\n\t\tno: false,\n\t\tcwd: tempDirectory,\n\t\tpm,\n\t\tignoreWorkspace: true,\n\t});\n\n\tconst startIndex = (command.parent.rawArgs as string[]).findIndex((arg) => arg === '--');\n\n\tlet passthroughArgs: string[] = [];\n\n\tif (startIndex !== -1) {\n\t\tpassthroughArgs = command.parent.rawArgs.slice(startIndex + 1);\n\t}\n\n\tverbose(`Passing args ${color.cyan(passthroughArgs.join(' '))}`);\n\n\t// run the cli\n\n\tconsole.clear();\n\n\tconst runningBlock = installingBlocks[0];\n\n\tlet file: string;\n\n\t// tsx seems to be smart enough to figure out if it is a .ts file\n\tif (runningBlock.subdirectory) {\n\t\tfile = path.join(tempDirectory, `${runningBlock.category}/${runningBlock.name}/index.js`);\n\t} else {\n\t\tfile = path.join(tempDirectory, `${runningBlock.category}/${runningBlock.name}.js`);\n\t}\n\n\tconst cmd = resolveCommand(pm, 'execute', ['tsx', file, ...passthroughArgs]);\n\n\tif (!cmd) {\n\t\tprogram.error(color.red('Error resolving run command!'));\n\t}\n\n\ttry {\n\t\tconst proc = x(cmd.command, cmd.args, { nodeOptions: { cwd: process.cwd() } });\n\n\t\tfor await (const line of proc) {\n\t\t\tprocess.stdout.write(`${line}\\n`);\n\t\t}\n\t} finally {\n\t\tfs.rmSync(path.join(process.cwd(), tempDirBase), { recursive: true, force: true });\n\t}\n}\n\nexport { exec };\n","import fs from 'node:fs';\nimport {\n\tcancel,\n\tconfirm,\n\tisCancel,\n\tlog,\n\tmultiselect,\n\toutro,\n\tpassword,\n\tselect,\n\tspinner,\n\ttext,\n} from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, Option, program } from 'commander';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport * as u from '../utils/blocks/ts/url';\nimport {\n\ttype Formatter,\n\tPROJECT_CONFIG_NAME,\n\ttype Paths,\n\ttype ProjectConfig,\n\tREGISTRY_CONFIG_NAME,\n\tformatterSchema,\n\tgetProjectConfig,\n\tgetRegistryConfig,\n} from '../utils/config';\nimport { packageJson } from '../utils/context';\nimport { formatFile, matchJSDescendant, tryGetTsconfig } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { json } from '../utils/language-support';\nimport type { PackageJson } from '../utils/package';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\ttype Task,\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\trunTasks,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\trepos: v.optional(v.array(v.string())),\n\twatermark: v.boolean(),\n\ttests: v.optional(v.boolean()),\n\tformatter: v.optional(formatterSchema),\n\tproject: v.optional(v.boolean()),\n\tregistry: v.optional(v.boolean()),\n\tbuildScript: v.string(),\n\tpublishScript: v.string(),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst init = new Command('init')\n\t.description('Initializes your project with a configuration file.')\n\t.argument('[registries...]', 'Registries to install the blocks from.', [])\n\t.option('--repos [repos...]', 'Repository to install the blocks from. (DEPRECATED)')\n\t.option(\n\t\t'--no-watermark',\n\t\t'Will not add a watermark to each file upon adding it to your project.'\n\t)\n\t.option('--tests', 'Will include tests with the blocks.')\n\t.addOption(\n\t\tnew Option(\n\t\t\t'--formatter <formatter>',\n\t\t\t'What formatter to use when adding or updating blocks.'\n\t\t).choices(['prettier', 'biome'])\n\t)\n\t.option('-P, --project', 'Takes you through the steps to initialize a project.')\n\t.option('-R, --registry', 'Takes you through the steps to initialize a registry.')\n\t.option(\n\t\t'--build-script <name>',\n\t\t'The name of the build script. (For Registry setup)',\n\t\t'build:registry'\n\t)\n\t.option(\n\t\t'--publish-script <name>',\n\t\t'The name of the publish script. (For Registry setup)',\n\t\t'release:registry'\n\t)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (registries, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tif (options.registry !== undefined && options.project !== undefined) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`You cannot provide both ${color.bold('--project')} and ${color.bold('--registry')} at the same time.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tif (options.repos !== undefined) {\n\t\t\tlog.warn(\n\t\t\t\t`The ${color.gray('`--repos`')} flag is deprecated! Instead supply registries as arguments. ${color.cyan(`\\`jsrepo init ${options.repos.join(' ')}\\``)}`\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\toptions.registry === undefined &&\n\t\t\toptions.project === undefined &&\n\t\t\tregistries.length === 0\n\t\t) {\n\t\t\tconst response = await select({\n\t\t\t\tmessage: 'Initialize a project or registry?',\n\t\t\t\toptions: [\n\t\t\t\t\t{ value: 'project', label: 'project' },\n\t\t\t\t\t{ value: 'registry', label: 'registry' },\n\t\t\t\t],\n\t\t\t\tinitialValue: 'project',\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\toptions.project = response === 'project';\n\t\t}\n\n\t\tif (options.project || registries.length > 0) {\n\t\t\tawait _initProject(registries, options);\n\t\t} else {\n\t\t\tawait _initRegistry(options);\n\t\t}\n\n\t\toutro(color.green('All done!'));\n\t});\n\nconst _initProject = async (registries: string[], options: Options) => {\n\tconst initialConfig = getProjectConfig(options.cwd);\n\n\tconst loading = spinner();\n\n\tlet paths: Paths;\n\tlet configFiles: Record<string, string> = {};\n\n\tconst tsconfigResult = tryGetTsconfig(options.cwd).unwrapOr(null);\n\n\tconst defaultPathResult = await text({\n\t\tmessage: 'Please enter a default path to install the blocks',\n\t\tvalidate(value) {\n\t\t\tif (value.trim() === '') return 'Please provide a value';\n\n\t\t\tif (!value.startsWith('./')) {\n\t\t\t\tconst error =\n\t\t\t\t\t'Invalid path alias! If you are intending to use a relative path make sure it starts with `./`';\n\n\t\t\t\tif (tsconfigResult === null) {\n\t\t\t\t\treturn error;\n\t\t\t\t}\n\n\t\t\t\tconst matcher = createPathsMatcher(tsconfigResult);\n\n\t\t\t\tif (matcher) {\n\t\t\t\t\tconst found = matcher(value);\n\n\t\t\t\t\tif (found.length === 0) return error;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tplaceholder: './src/blocks',\n\t\tinitialValue: initialConfig.isOk() ? initialConfig.unwrap().paths['*'] : undefined,\n\t});\n\n\tif (isCancel(defaultPathResult)) {\n\t\tcancel('Canceled!');\n\t\tprocess.exit(0);\n\t}\n\n\tif (initialConfig.isOk()) {\n\t\tpaths = { ...initialConfig.unwrap().paths, '*': defaultPathResult };\n\t\tconfigFiles = initialConfig.unwrap().configFiles ?? {};\n\t} else {\n\t\tpaths = { '*': defaultPathResult };\n\t}\n\n\t// configure formatter\n\tif (!options.formatter) {\n\t\tlet defaultFormatter = initialConfig.isErr()\n\t\t\t? 'none'\n\t\t\t: (initialConfig.unwrap().formatter ?? 'none');\n\n\t\tif (fs.existsSync(path.join(options.cwd, '.prettierrc'))) {\n\t\t\tdefaultFormatter = 'prettier';\n\t\t}\n\n\t\tif (fs.existsSync(path.join(options.cwd, 'biome.json'))) {\n\t\t\tdefaultFormatter = 'biome';\n\t\t}\n\n\t\tconst response = await select({\n\t\t\tmessage: 'Which formatter would you like to use?',\n\t\t\toptions: ['Prettier', 'Biome', 'None'].map((val) => ({\n\t\t\t\tvalue: val.toLowerCase(),\n\t\t\t\tlabel: val,\n\t\t\t})),\n\t\t\tinitialValue: defaultFormatter,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (response !== 'none') {\n\t\t\toptions.formatter = response as Formatter;\n\t\t}\n\t}\n\n\tconst repos = Array.from(\n\t\tnew Set([\n\t\t\t...registries,\n\t\t\t...(options.repos ?? []),\n\t\t\t...(initialConfig.isOk() ? initialConfig.unwrap().repos : []),\n\t\t])\n\t);\n\n\tconst deps = new Set<string>();\n\tconst devDeps = new Set<string>();\n\n\tconst setupRepo = async (url: string) => {\n\t\tconst promptResult = await promptForRegistryConfig({\n\t\t\turl,\n\t\t\tpaths,\n\t\t\tconfigFiles,\n\t\t\toptions,\n\t\t\tformatter: options.formatter,\n\t\t});\n\n\t\tfor (const dep of promptResult.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of promptResult.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tpaths = promptResult.paths;\n\t\tconfigFiles = promptResult.configFiles;\n\t};\n\n\tif (repos.length > 0) {\n\t\tfor (const repo of repos) {\n\t\t\t// if already present in config ask if you would like to set it up\n\t\t\tif (\n\t\t\t\t!registries.find((r) => r === repo) &&\n\t\t\t\tinitialConfig.isOk() &&\n\t\t\t\tinitialConfig.unwrap().repos.find((r) => r === repo)\n\t\t\t) {\n\t\t\t\tconst confirmResult = await confirm({\n\t\t\t\t\tmessage: `Initialize ${repo}?`,\n\t\t\t\t\tinitialValue: options.yes,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (!confirmResult) continue;\n\t\t\t}\n\n\t\t\tlog.info(`Initializing ${color.cyan(repo)}`);\n\n\t\t\tawait setupRepo(repo);\n\t\t}\n\t}\n\n\twhile (true) {\n\t\tconst confirmResult = await confirm({\n\t\t\tmessage: `Add ${repos.length > 0 ? 'another' : 'a'} repo?`,\n\t\t\tinitialValue: repos.length === 0, // default to yes for first repo\n\t\t});\n\n\t\tif (isCancel(confirmResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (!confirmResult) break;\n\n\t\tconst result = await text({\n\t\t\tmessage: 'Where should we download the blocks from?',\n\t\t\tplaceholder: 'github/ieedan/std',\n\t\t\tvalidate: (val) => {\n\t\t\t\tif (val.trim().length === 0) return 'Please provide a value';\n\n\t\t\t\tif (!registry.selectProvider(val)) {\n\t\t\t\t\treturn `Invalid provider! Valid providers (${registry.providers.map((provider) => provider.name).join(', ')})`;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(result)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tawait setupRepo(result);\n\n\t\trepos.push(result);\n\t}\n\n\tconst config: ProjectConfig = {\n\t\t$schema: `https://unpkg.com/jsrepo@${packageJson.version}/schemas/project-config.json`,\n\t\trepos,\n\t\tincludeTests:\n\t\t\tinitialConfig.isOk() && options.tests === undefined\n\t\t\t\t? initialConfig.unwrap().includeTests\n\t\t\t\t: (options.tests ?? false),\n\t\twatermark: options.watermark,\n\t\tformatter: options.formatter,\n\t\tconfigFiles,\n\t\tpaths,\n\t};\n\n\tloading.start(`Writing config to \\`${PROJECT_CONFIG_NAME}\\``);\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst configPath = path.join(options.cwd, PROJECT_CONFIG_NAME);\n\n\tconst configContent = await json.format(JSON.stringify(config, null, '\\t'), {\n\t\tbiomeOptions,\n\t\tprettierOptions,\n\t\tfilePath: configPath,\n\t\tformatter: config.formatter,\n\t});\n\n\tif (!fs.existsSync(options.cwd)) {\n\t\tfs.mkdirSync(options.cwd, { recursive: true });\n\t}\n\n\tfs.writeFileSync(configPath, configContent);\n\n\tloading.stop(`Wrote config to \\`${PROJECT_CONFIG_NAME}\\`.`);\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push(`Add blocks with ${color.cyan('jsrepo add')}!`);\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n};\n\nasync function promptForRegistryConfig({\n\turl,\n\tpaths,\n\tconfigFiles,\n\tformatter,\n\toptions,\n}: {\n\turl: string;\n\tpaths: Paths;\n\tconfigFiles: Record<string, string>;\n\tformatter: ProjectConfig['formatter'];\n\toptions: Options;\n}): Promise<{\n\tpaths: Paths;\n\tconfigFiles: Record<string, string>;\n\tdependencies: string[];\n\tdevDependencies: string[];\n}> {\n\tconst loading = spinner();\n\n\tconst storage = new TokenManager();\n\n\tconst provider = registry.selectProvider(url);\n\n\tif (!provider) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Invalid provider! Valid providers (${registry.providers.map((provider) => provider.name).join(', ')})`\n\t\t\t)\n\t\t);\n\t}\n\n\tlet tokenKey: string = provider.name;\n\n\tif (provider.name === registry.http.name) {\n\t\tconst parsed = registry.http.parse(url, { fullyQualified: false });\n\n\t\t// this is safe since we had to parse the url earlier to get the provider\n\t\tconst registryUrl = new URL(parsed.url);\n\n\t\ttokenKey = `http-${registryUrl.origin}`;\n\t}\n\n\tconst token = storage.get(tokenKey);\n\n\t// don't ask if the provider is a custom domain\n\tif (!token && !options.yes) {\n\t\tconst result = await confirm({\n\t\t\tmessage: 'Would you like to add an auth token?',\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(result)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (result) {\n\t\t\tconst response = await password({\n\t\t\t\tmessage: 'Paste your token',\n\t\t\t\tvalidate(value) {\n\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tstorage.set(tokenKey, response);\n\t\t}\n\t}\n\n\tloading.start(`Fetching manifest from ${color.cyan(url)}`);\n\n\tconst providerState = (await registry.getProviderState(url, { noCache: !options.cache })).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst manifest = (await registry.fetchManifest(providerState)).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tloading.stop(`Fetched manifest from ${color.cyan(url)}`);\n\n\tcheckPreconditions(providerState, manifest, options.cwd);\n\n\tconst dependencies: string[] = [];\n\tconst devDependencies: string[] = [];\n\n\t// setup config files\n\tif (manifest.configFiles) {\n\t\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\t\tformatter: formatter,\n\t\t\tcwd: options.cwd,\n\t\t});\n\n\t\tfor (const file of manifest.configFiles) {\n\t\t\tif (file.optional && !options.yes) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Would you like to add the ${file.name} file?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (!result) continue;\n\t\t\t}\n\n\t\t\tdependencies.push(...(file.dependencies ?? []));\n\t\t\tdevDependencies.push(...(file.devDependencies ?? []));\n\n\t\t\t// get the path to the file from the user\n\t\t\tif (!configFiles[file.name]) {\n\t\t\t\tconst result = await text({\n\t\t\t\t\tmessage: `Where is your ${file.name} file?`,\n\t\t\t\t\tdefaultValue: file.expectedPath,\n\t\t\t\t\tinitialValue: file.expectedPath,\n\t\t\t\t\tplaceholder: file.expectedPath,\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tconfigFiles[file.name] = result;\n\t\t\t}\n\n\t\t\tlet fullFilePath = path.join(options.cwd, configFiles[file.name]);\n\n\t\t\tlet fileContents: string | undefined;\n\n\t\t\tif (fs.existsSync(fullFilePath)) {\n\t\t\t\tfileContents = fs.readFileSync(fullFilePath).toString();\n\t\t\t} else {\n\t\t\t\tconst dir = path.dirname(fullFilePath);\n\n\t\t\t\tif (fs.existsSync(dir)) {\n\t\t\t\t\tconst matchedPath = matchJSDescendant(fullFilePath);\n\n\t\t\t\t\tif (matchedPath) {\n\t\t\t\t\t\tfileContents = fs.readFileSync(matchedPath).toString();\n\n\t\t\t\t\t\tconst newPath = path.relative(options.cwd, matchedPath);\n\n\t\t\t\t\t\tlog.warn(\n\t\t\t\t\t\t\t`Located ${color.bold(configFiles[file.name])} at ${color.bold(newPath)}`\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// update path\n\t\t\t\t\t\tconfigFiles[file.name] = newPath;\n\n\t\t\t\t\t\tfullFilePath = path.join(options.cwd, newPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloading.start(`Fetching the ${color.cyan(file.name)} from ${color.cyan(url)}`);\n\n\t\t\tconst remoteContent = (await registry.fetchRaw(providerState, file.path)).match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst originalRemoteContent = await formatFile({\n\t\t\t\tfile: {\n\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t\tdestPath: fullFilePath,\n\t\t\t\t},\n\t\t\t\tbiomeOptions,\n\t\t\t\tprettierOptions,\n\t\t\t\tformatter,\n\t\t\t});\n\n\t\t\tloading.stop(`Fetched the ${color.cyan(file.name)} from ${color.cyan(url)}`);\n\n\t\t\tlet acceptedChanges = options.yes || fileContents === undefined;\n\n\t\t\tif (fileContents) {\n\t\t\t\tif (!options.yes) {\n\t\t\t\t\tconst from = u.join(providerState.url, file.name);\n\n\t\t\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter },\n\t\t\t\t\t\tcurrent: {\n\t\t\t\t\t\t\tcontent: fileContents,\n\t\t\t\t\t\t\tpath: fullFilePath,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tincoming: {\n\t\t\t\t\t\t\tcontent: originalRemoteContent,\n\t\t\t\t\t\t\tpath: from,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t\tno: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateResult.applyChanges) {\n\t\t\t\t\t\tacceptedChanges = true;\n\t\t\t\t\t\tfileContents = updateResult.updatedContent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst dir = path.dirname(fullFilePath);\n\n\t\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t\t}\n\n\t\t\t\tfileContents = originalRemoteContent;\n\t\t\t}\n\n\t\t\tif (acceptedChanges && fileContents) {\n\t\t\t\tloading.start(`Writing ${color.cyan(file.name)} to ${color.cyan(fullFilePath)}`);\n\n\t\t\t\tfs.writeFileSync(fullFilePath, fileContents);\n\n\t\t\t\tloading.stop(`Wrote ${color.cyan(file.name)} to ${color.cyan(fullFilePath)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// configure category paths\n\tif (!options.yes) {\n\t\tconst configurePaths = await multiselect({\n\t\t\tmessage: 'Which category paths would you like to configure?',\n\t\t\toptions: manifest.categories.map((cat) => ({ label: cat.name, value: cat.name })),\n\t\t\trequired: false,\n\t\t});\n\n\t\tif (isCancel(configurePaths)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (configurePaths.length > 0) {\n\t\t\tfor (const category of configurePaths) {\n\t\t\t\tconst configuredValue = paths[category];\n\n\t\t\t\tconst categoryPath = await text({\n\t\t\t\t\tmessage: `Where should ${category} be added in your project?`,\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: configuredValue ? configuredValue : `./src/${category}`,\n\t\t\t\t\tdefaultValue: configuredValue,\n\t\t\t\t\tinitialValue: configuredValue,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(categoryPath)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tpaths[category] = categoryPath;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { paths, configFiles, dependencies, devDependencies };\n}\n\nconst _initRegistry = async (options: Options) => {\n\tconst loading = spinner();\n\n\tconst packagePath = path.join(options.cwd, 'package.json');\n\n\tif (!fs.existsSync(packagePath)) {\n\t\tprogram.error(color.red(`Couldn't find your ${color.bold('package.json')}!`));\n\t}\n\n\tlet config = getRegistryConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tif (!config) {\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tname: undefined,\n\t\t\tversion: undefined,\n\t\t\treadme: 'README.md',\n\t\t\tdirs: [],\n\t\t\tdoNotListBlocks: [],\n\t\t\tdoNotListCategories: [],\n\t\t\tlistBlocks: [],\n\t\t\tlistCategories: [],\n\t\t\texcludeDeps: [],\n\t\t\tincludeBlocks: [],\n\t\t\tincludeCategories: [],\n\t\t\texcludeBlocks: [],\n\t\t\texcludeCategories: [],\n\t\t\tpreview: false,\n\t\t};\n\t}\n\n\tconfig.$schema = `https://unpkg.com/jsrepo@${packageJson.version}/schemas/registry-config.json`;\n\n\twhile (true) {\n\t\tif (config.dirs.length > 0) {\n\t\t\tconst confirmResult = await confirm({\n\t\t\t\tmessage: 'Add another blocks directory?',\n\t\t\t\tinitialValue: false,\n\t\t\t});\n\n\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (!confirmResult) break;\n\t\t}\n\n\t\tconst response = await text({\n\t\t\tmessage: 'Where are your blocks located?',\n\t\t\tplaceholder: './src',\n\t\t\tdefaultValue: './src',\n\t\t\tinitialValue: './src',\n\t\t\tvalidate: (val) => {\n\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tconfig.dirs.push(response);\n\t}\n\n\tconst pkg = JSON.parse(fs.readFileSync(packagePath).toString());\n\n\tlet configurePublish = !options.yes;\n\n\tif (!options.yes) {\n\t\tconst confirmResult = await confirm({\n\t\t\tmessage: `Configure to publish to ${ascii.JSREPO_DOT_COM}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(confirmResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tconfigurePublish = confirmResult;\n\t}\n\n\tif (configurePublish) {\n\t\tif (!config.name) {\n\t\t\tconst nameResponse = await text({\n\t\t\t\tmessage: \"What's the name of your registry?\",\n\t\t\t\tplaceholder: '@ieedan/std',\n\t\t\t\tvalidate: (val) => {\n\t\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(nameResponse)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.name = nameResponse;\n\t\t}\n\n\t\tif (!config.version) {\n\t\t\tconfig.version = '0.0.1';\n\t\t}\n\n\t\toptions.publishScript = await promptForScriptKey(\n\t\t\toptions.publishScript,\n\t\t\tpkg,\n\t\t\toptions,\n\t\t\t'release:registry'\n\t\t);\n\t} else {\n\t\toptions.buildScript = await promptForScriptKey(\n\t\t\toptions.buildScript,\n\t\t\tpkg,\n\t\t\toptions,\n\t\t\t'build:registry'\n\t\t);\n\t}\n\n\tconst alreadyInstalled = pkg.devDependencies && pkg.devDependencies.jsrepo !== undefined;\n\n\tconst pm = (await detect({ cwd: 'cwd' }))?.agent ?? 'npm';\n\n\tconst buildScript = 'jsrepo build';\n\tconst publishScript = 'jsrepo publish';\n\n\t// ensure we are adding to an object that exists\n\tif (pkg.scripts === undefined) {\n\t\tpkg.scripts = {};\n\t}\n\n\tif (configurePublish) {\n\t\tpkg.scripts[options.publishScript] = publishScript;\n\t} else {\n\t\tpkg.scripts[options.buildScript] = buildScript;\n\t}\n\n\tconst tasks: Task[] = [];\n\n\ttasks.push({\n\t\tloadingMessage: 'Adding script to package.json',\n\t\tcompletedMessage: 'Added script to package.json',\n\t\trun: async () => {\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(packagePath, JSON.stringify(pkg, null, '\\t'));\n\t\t\t} catch (err) {\n\t\t\t\tprogram.error(\n\t\t\t\t\tcolor.red(`Error writing to \\`${color.bold(packagePath)}\\`. Error: ${err}`)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\n\ttasks.push({\n\t\tloadingMessage: `Writing config to \\`${color.cyan(REGISTRY_CONFIG_NAME)}\\``,\n\t\tcompletedMessage: `Wrote config to \\`${color.cyan(REGISTRY_CONFIG_NAME)}\\``,\n\t\trun: async () => {\n\t\t\tconst configPath = path.join(options.cwd, REGISTRY_CONFIG_NAME);\n\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(path.join(configPath), JSON.stringify(config, null, '\\t'));\n\t\t\t} catch (err) {\n\t\t\t\tprogram.error(\n\t\t\t\t\tcolor.red(`Error writing to \\`${color.bold(configPath)}\\`. Error: ${err}`)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\n\tawait runTasks(tasks, { loading });\n\n\tlet installed = alreadyInstalled;\n\n\tif (!alreadyInstalled) {\n\t\tconst installedResult = await promptInstallDependencies(new Set(), new Set(['jsrepo']), {\n\t\t\tcwd: options.cwd,\n\t\t\tpm,\n\t\t\tyes: options.yes,\n\t\t});\n\n\t\tinstalled = installedResult.installed;\n\t}\n\n\tlet steps: string[] = [];\n\n\tif (!installed) {\n\t\tconst cmd = resolveCommand(pm, 'add', ['jsrepo', '-D']);\n\n\t\tsteps.push(\n\t\t\t`Install ${ascii.JSREPO} as a dev dependency \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t);\n\t}\n\n\tsteps.push(`Add categories to \\`${color.cyan(config.dirs.join(', '))}\\`.`);\n\n\tif (configurePublish) {\n\t\tconst runScript = resolveCommand(pm, 'run', [options.publishScript]);\n\n\t\tsteps.push(\n\t\t\t`Run \\`${color.cyan(`${runScript?.command} ${runScript?.args.join(' ')}`)}\\` to publish the registry.`\n\t\t);\n\t} else {\n\t\tconst runScript = resolveCommand(pm, 'run', [options.buildScript]);\n\n\t\tsteps.push(\n\t\t\t`Run \\`${color.cyan(`${runScript?.command} ${runScript?.args.join(' ')}`)}\\` to build the registry.`\n\t\t);\n\t}\n\n\t// put steps with numbers above here\n\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\tconst next = nextSteps(steps);\n\n\tprocess.stdout.write(next);\n};\n\nasync function promptForScriptKey(\n\tscriptKey: string,\n\tpkg: PackageJson,\n\toptions: Options,\n\tplaceholder: string\n) {\n\tlet key = scriptKey;\n\n\t// continue asking until the user either chooses to overwrite or inputs a script that doesn't exist yet\n\twhile (!options.yes && pkg.scripts && pkg.scripts[key]) {\n\t\tconst response = await confirm({\n\t\t\tmessage: `The \\`${color.cyan(key)}\\` already exists overwrite?`,\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (!response) {\n\t\t\tconst response = await text({\n\t\t\t\tmessage: 'What would you like to call the script?',\n\t\t\t\tplaceholder,\n\t\t\t\tvalidate: (val) => {\n\t\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tkey = response;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn key;\n}\n\nexport { init };\n","import fs from 'node:fs';\nimport { log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport ignore from 'ignore';\nimport path from 'pathe';\nimport semver from 'semver';\nimport * as tar from 'tar';\nimport * as v from 'valibot';\nimport type { Category } from '../types';\nimport * as ascii from '../utils/ascii';\nimport { buildBlocksDirectory, buildConfigFiles, pruneUnused } from '../utils/build';\nimport { DEFAULT_CONFIG, runRules } from '../utils/build/check';\nimport { IGNORED_DIRS, type RegistryConfig, getRegistryConfig } from '../utils/config';\nimport { iFetch } from '../utils/fetch';\nimport { createManifest } from '../utils/manifest';\nimport type { PackageJson } from '../utils/package';\nimport { intro, spinner } from '../utils/prompts';\nimport * as jsrepo from '../utils/registry-providers/jsrepo';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\tprivate: v.boolean(),\n\tdryRun: v.boolean(),\n\tname: v.optional(v.string()),\n\tver: v.optional(v.string()),\n\tdirs: v.optional(v.array(v.string())),\n\tincludeBlocks: v.optional(v.array(v.string())),\n\tincludeCategories: v.optional(v.array(v.string())),\n\texcludeBlocks: v.optional(v.array(v.string())),\n\texcludeCategories: v.optional(v.array(v.string())),\n\texcludeDeps: v.optional(v.array(v.string())),\n\tlistBlocks: v.optional(v.array(v.string())),\n\tlistCategories: v.optional(v.array(v.string())),\n\tdoNotListBlocks: v.optional(v.array(v.string())),\n\tdoNotListCategories: v.optional(v.array(v.string())),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const publish = new Command('publish')\n\t.description('Publish a registry to jsrepo.com.')\n\t.option(\n\t\t'--private',\n\t\t'When publishing the first version of the registry make it private.',\n\t\tfalse\n\t)\n\t.option('--dry-run', \"Test the publish but don't list on jsrepo.com.\", false)\n\t.option('--name <name>', 'The name of the registry. i.e. @ieedan/std')\n\t.option('--ver <version>', 'The version of the registry. i.e. 0.0.1')\n\t.option('--dirs [dirs...]', 'The directories containing the blocks.')\n\t.option('--include-blocks [blockNames...]', 'Include only the blocks with these names.')\n\t.option(\n\t\t'--include-categories [categoryNames...]',\n\t\t'Include only the categories with these names.'\n\t)\n\t.option('--exclude-blocks [blockNames...]', 'Do not include the blocks with these names.')\n\t.option(\n\t\t'--exclude-categories [categoryNames...]',\n\t\t'Do not include the categories with these names.'\n\t)\n\t.option('--list-blocks [blockNames...]', 'List only the blocks with these names.')\n\t.option('--list-categories [categoryNames...]', 'List only the categories with these names.')\n\t.option('--do-not-list-blocks [blockNames...]', 'Do not list the blocks with these names.')\n\t.option(\n\t\t'--do-not-list-categories [categoryNames...]',\n\t\t'Do not list the categories with these names.'\n\t)\n\t.option('--exclude-deps [deps...]', 'Dependencies that should not be added.')\n\t.option('--allow-subdirectories', 'Allow subdirectories to be built.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _publish(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _publish(options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst config: RegistryConfig = getRegistryConfig(options.cwd).match(\n\t\t(val) => {\n\t\t\tif (val === null) {\n\t\t\t\treturn {\n\t\t\t\t\t$schema: '',\n\t\t\t\t\taccess: 'public',\n\t\t\t\t\treadme: 'README.md',\n\t\t\t\t\tdirs: options.dirs ?? [],\n\t\t\t\t\tdoNotListBlocks: options.doNotListBlocks ?? [],\n\t\t\t\t\tdoNotListCategories: options.doNotListCategories ?? [],\n\t\t\t\t\tlistBlocks: options.listBlocks ?? [],\n\t\t\t\t\tlistCategories: options.listCategories ?? [],\n\t\t\t\t\texcludeDeps: options.excludeDeps ?? [],\n\t\t\t\t\tincludeBlocks: options.includeBlocks ?? [],\n\t\t\t\t\tincludeCategories: options.includeCategories ?? [],\n\t\t\t\t\texcludeBlocks: options.excludeBlocks ?? [],\n\t\t\t\t\texcludeCategories: options.excludeCategories ?? [],\n\t\t\t\t\tallowSubdirectories: options.allowSubdirectories,\n\t\t\t\t} satisfies RegistryConfig;\n\t\t\t}\n\n\t\t\tconst mergedVal = val;\n\n\t\t\t// overwrites config with flag values\n\n\t\t\tif (options.private) mergedVal.access = 'private';\n\t\t\tif (options.name) mergedVal.name = options.name;\n\t\t\tif (options.ver) mergedVal.version = options.ver;\n\t\t\tif (options.dirs) mergedVal.dirs = options.dirs;\n\t\t\tif (options.doNotListBlocks) mergedVal.doNotListBlocks = options.doNotListBlocks;\n\t\t\tif (options.doNotListCategories)\n\t\t\t\tmergedVal.doNotListCategories = options.doNotListCategories;\n\t\t\tif (options.listBlocks) mergedVal.listBlocks = options.listBlocks;\n\t\t\tif (options.listCategories) mergedVal.listCategories = options.listCategories;\n\t\t\tif (options.includeBlocks) mergedVal.includeBlocks = options.includeBlocks;\n\t\t\tif (options.includeCategories) mergedVal.includeCategories = options.includeCategories;\n\t\t\tif (options.excludeBlocks) mergedVal.excludeBlocks = options.excludeBlocks;\n\t\t\tif (options.excludeCategories) mergedVal.excludeCategories = options.excludeCategories;\n\t\t\tif (options.excludeDeps) mergedVal.excludeDeps = options.excludeDeps;\n\t\t\tif (options.allowSubdirectories !== undefined)\n\t\t\t\tmergedVal.allowSubdirectories = options.allowSubdirectories;\n\n\t\t\tmergedVal.rules = { ...DEFAULT_CONFIG, ...mergedVal.rules };\n\n\t\t\treturn mergedVal;\n\t\t},\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tif (options.dryRun) {\n\t\tlog.warn(color.bgYellow.black(' DRY RUN '));\n\t}\n\n\t// -- pre-flights --\n\n\t// check name\n\tif (config.name !== undefined) {\n\t\ttry {\n\t\t\tconst [scope, registryName, ...rest] = config.name.split('/');\n\n\t\t\tif (rest.length > 0) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!scope.startsWith('@')) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!scope.slice(1).match(jsrepo.NAME_REGEX)) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!registryName.match(jsrepo.NAME_REGEX)) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\t\t} catch {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`\\`${config.name}\\` is not a valid name. The name should be provided as \\`@<scope>/<registry>\\``\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} else {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`To publish to ${color.bold('jsrepo.com')} you need to provide the \\`name\\` field in the \\`jsrepo-build-config.json\\``\n\t\t\t)\n\t\t);\n\t}\n\n\t// check version\n\tif (config.version !== undefined) {\n\t\t// use version from package.json\n\t\tif (config.version === 'package') {\n\t\t\tconst packagePath = path.join(options.cwd, 'package.json');\n\n\t\t\tif (!fs.existsSync(packagePath)) {\n\t\t\t\tprogram.error(color.red(`Couldn't find your ${color.bold('package.json')}!`));\n\t\t\t}\n\n\t\t\tconst { version } = JSON.parse(fs.readFileSync(packagePath).toString()) as PackageJson;\n\n\t\t\tconfig.version = version;\n\t\t}\n\n\t\tconst valid = semver.valid(config.version);\n\n\t\tif (!valid) {\n\t\t\tprogram.error(`\\`${config.version}\\` is not a valid semver version.`);\n\t\t}\n\t} else {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`To publish to ${color.bold('jsrepo.com')} you need to provide the \\`version\\` field in the \\`jsrepo-build-config.json\\``\n\t\t\t)\n\t\t);\n\t}\n\n\tconst apiKey = new TokenManager().get('jsrepo');\n\n\tif (apiKey === undefined) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Please authenticate with ${color.cyan('jsrepo auth')} to publish to ${ascii.JSREPO_DOT_COM}.`\n\t\t\t)\n\t\t);\n\t}\n\n\t// build into temp dir\n\tconst categories: Category[] = [];\n\n\tconst ig = ignore();\n\n\ttry {\n\t\tconst ignoreFile = fs.readFileSync(path.join(options.cwd, '.gitignore')).toString();\n\n\t\tig.add(ignoreFile);\n\t} catch {\n\t\t// just continue on\n\t}\n\n\tig.add(IGNORED_DIRS);\n\n\tfor (const dir of config.dirs) {\n\t\tconst dirPath = path.join(options.cwd, dir);\n\n\t\tloading.start(`Building ${color.cyan(dirPath)}`);\n\n\t\tconst builtCategories = buildBlocksDirectory(dirPath, {\n\t\t\tcwd: options.cwd,\n\t\t\tignore: ig,\n\t\t\tconfig,\n\t\t});\n\n\t\tfor (const category of builtCategories) {\n\t\t\tif (categories.find((cat) => cat.name === category.name) !== undefined) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding \\`${color.cyan(`${dir}/${category.name}`)}\\` because a category with the same name already exists!`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcategories.push(category);\n\t\t}\n\n\t\tloading.stop(`Built ${color.cyan(dirPath)}`);\n\t}\n\n\tconst configFiles = buildConfigFiles(config, { cwd: options.cwd });\n\n\tconst manifest = createManifest(categories, configFiles, config);\n\n\tloading.start('Checking manifest');\n\n\tconst { warnings, errors } = runRules(manifest, config, options.cwd, config.rules);\n\n\tloading.stop('Completed checking manifest.');\n\n\t// add gap for errors\n\tif (warnings.length > 0 || errors.length > 0) {\n\t\tconsole.log(ascii.VERTICAL_LINE);\n\t}\n\n\tfor (const warning of warnings) {\n\t\tconsole.log(warning);\n\t}\n\n\tif (errors.length > 0) {\n\t\tfor (const error of errors) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Completed checking manifest with ${color.bold(`${errors.length} error(s)`)} and ${color.bold(`${warnings.length} warning(s)`)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// removes any unused blocks or categories\n\tconst [prunedCategories, count] = pruneUnused(manifest.categories);\n\n\tmanifest.categories = prunedCategories;\n\n\tif (count > 0) {\n\t\tlog.step(`Removed ${count} unused block${count > 1 ? 's' : ''}.`);\n\t}\n\n\tloading.start(`Packaging ${color.cyan(manifest.name)}...`);\n\n\tconst tempOutDir = path.resolve(options.cwd, `jsrepo-publish-temp-${Date.now()}`);\n\n\tverbose(`Creating temp dir: ${tempOutDir}`);\n\n\tfs.mkdirSync(tempOutDir, { recursive: true });\n\n\tverbose('Writing manifest to temp dir');\n\n\t// write manifest\n\tfs.writeFileSync(path.resolve(tempOutDir, 'jsrepo-manifest.json'), JSON.stringify(manifest));\n\n\t// try copy readme\n\tconst readmePath = path.resolve(options.cwd, config.readme);\n\n\ttry {\n\t\tverbose('Attempting to copy readme');\n\n\t\tfs.copyFileSync(readmePath, path.join(tempOutDir, 'README.md'));\n\n\t\tverbose('Copied readme');\n\t} catch {\n\t\t// do nothing it's okay\n\t\tverbose('No readme found.');\n\t}\n\n\t// copy config files to output directory\n\tif (manifest.configFiles) {\n\t\tverbose('Copying config files');\n\n\t\tfor (const file of manifest.configFiles) {\n\t\t\tconst originalPath = path.join(options.cwd, file.path);\n\t\t\tconst destPath = path.join(tempOutDir, file.path);\n\n\t\t\tconst containing = path.join(destPath, '../');\n\n\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t}\n\n\t\t\tfs.copyFileSync(originalPath, destPath);\n\t\t}\n\n\t\tverbose('Copied config files');\n\t}\n\n\tverbose('Copying registry files');\n\n\t// copy the files for each block in each category\n\tfor (const category of manifest.categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tconst originalPath = path.join(options.cwd, block.directory);\n\t\t\tconst newDirPath = path.join(tempOutDir, block.directory);\n\n\t\t\tfor (const file of block.files) {\n\t\t\t\tconst containing = path.join(newDirPath, file, '../');\n\n\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t}\n\n\t\t\t\tfs.copyFileSync(path.join(originalPath, file), path.join(newDirPath, file));\n\t\t\t}\n\t\t}\n\t}\n\n\tverbose('Copied registry files');\n\n\tconst dest = path.resolve(options.cwd, `${config.name.replace('/', '_')}-package.tar.gz`);\n\n\tconst files = fs.readdirSync(tempOutDir);\n\n\tverbose('Creating archive file');\n\n\tawait tar.create(\n\t\t{\n\t\t\tz: true,\n\t\t\tcwd: tempOutDir,\n\t\t\tfile: dest,\n\t\t},\n\t\tfiles\n\t);\n\n\tverbose('Created archive file');\n\n\tverbose('Removing temp directory');\n\n\t// remove temp directory\n\tfs.rmSync(tempOutDir, { force: true, recursive: true });\n\n\tverbose('Removed temp directory');\n\n\tloading.stop(`Created package ${color.cyan(dest)}...`);\n\n\tconst access = config.access ?? 'public';\n\n\tlog.info(`Publishing to jsrepo with the access set to ${color.cyan(access)}`);\n\n\tloading.start(`Publishing ${color.bold(manifest.name)} to ${ascii.JSREPO_DOT_COM}...`);\n\n\tconst tarBuffer = fs.readFileSync(dest);\n\n\tverbose('Removing archive file');\n\n\t// remove archive file\n\tfs.rmSync(dest, { force: true, recursive: true });\n\n\tverbose('Removed archive file');\n\n\tverbose(`Publishing to ${`${jsrepo.BASE_URL}/api/publish`}`);\n\n\tconst response = await iFetch(`${jsrepo.BASE_URL}/api/publish`, {\n\t\tbody: tarBuffer,\n\t\theaders: {\n\t\t\t'content-type': 'application/gzip',\n\t\t\t'content-encoding': 'gzip',\n\t\t\t'x-api-key': apiKey,\n\t\t\t'x-dry-run': options.dryRun ? '1' : '0',\n\t\t\t'x-access': access,\n\t\t},\n\t\tmethod: 'POST',\n\t});\n\n\tloading.stop(`Got response from ${ascii.JSREPO_DOT_COM}.`);\n\n\tif (!response.ok) {\n\t\tconst res = (await response.json()) as { message: string };\n\n\t\tprogram.error(\n\t\t\tcolor.red(`${color.bold('[jsrepo.com]')} ${color.bold(response.status)} ${res.message}`)\n\t\t);\n\t} else {\n\t\tconst res = (await response.json()) as PublishResponse;\n\n\t\tif (res.status === 'dry-run') {\n\t\t\tlog.success(`${color.hex('#f7df1e').bold('[jsrepo.com]')} Completed dry run!`);\n\t\t} else {\n\t\t\tlog.success(\n\t\t\t\t`${color.hex('#f7df1e').bold('[jsrepo.com]')} published ${color.greenBright(`@${res.scope}`)}/${res.registry}${color.greenBright(`@${res.version}`)}!`\n\t\t\t);\n\t\t}\n\t}\n}\n\ntype PublishResponse =\n\t| {\n\t\t\tstatus: 'published';\n\t\t\tscope: string;\n\t\t\tregistry: string;\n\t\t\tversion: string;\n\t\t\ttag: string | null;\n\t\t\tprivate: boolean;\n\t }\n\t| {\n\t\t\tstatus: 'dry-run';\n\t };\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command, program } from 'commander';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport oxc from 'oxc-parser';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getInstalled } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { isTestFile } from '../utils/build';\nimport { getPathForBlock, getProjectConfig, resolvePaths } from '../utils/config';\nimport { intro, spinner } from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tdebug: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst test = new Command('test')\n\t.description('Tests local blocks against most recent remote tests.')\n\t.addArgument(new Argument('[blocks...]', 'The blocks you want to test.').default([]))\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('--debug', 'Leaves the temp test file around for debugging upon failure.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _test(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _test(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to test ${JSON.stringify(blockNames)}`);\n\n\tconst config = getProjectConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${color.cyan('jsrepo')} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst blocksMap = (\n\t\tawait registry.fetchBlocks(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst tempTestDirectory = path.resolve(\n\t\tpath.join(options.cwd, `blocks-tests-temp-${Date.now()}`)\n\t);\n\n\tverbose(`Trying to create the temp directory ${color.bold(tempTestDirectory)}.`);\n\n\tfs.mkdirSync(tempTestDirectory, { recursive: true });\n\n\tconst cleanUp = () => {\n\t\tfs.rmSync(tempTestDirectory, { recursive: true, force: true });\n\t};\n\n\tconst installedBlocks = getInstalled(blocksMap, config, options.cwd).map(\n\t\t(val) => val.specifier\n\t);\n\n\tlet testingBlocks = blockNames;\n\n\t// in the case that we want to test all files\n\tif (blockNames.length === 0) {\n\t\ttestingBlocks = installedBlocks;\n\t}\n\n\tif (testingBlocks.length === 0) {\n\t\tcleanUp();\n\t\tprogram.error(color.red('There were no blocks found in your project!'));\n\t}\n\n\tconst testingBlocksMapped: { name: string; block: registry.RemoteBlock }[] = [];\n\n\tfor (const blockSpecifier of testingBlocks) {\n\t\tlet block: registry.RemoteBlock | undefined = undefined;\n\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// if the block starts with github (or another provider) we know it has been resolved\n\t\tif (!provider) {\n\t\t\tfor (const repo of repoPaths) {\n\t\t\t\t// we unwrap because we already checked this\n\t\t\t\tconst provider = registry.selectProvider(repo);\n\n\t\t\t\tif (!provider) continue;\n\n\t\t\t\tconst { url: parsedRepo, specifier } = provider.parse(\n\t\t\t\t\turl.join(repo, blockSpecifier),\n\t\t\t\t\t{\n\t\t\t\t\t\tfullyQualified: true,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst tempBlock = blocksMap.get(url.join(parsedRepo, specifier!));\n\n\t\t\t\tif (tempBlock === undefined) continue;\n\n\t\t\t\tblock = tempBlock;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tconst { url: repo } = provider.parse(blockSpecifier, { fullyQualified: true });\n\n\t\t\tconst providerState = (await registry.getProviderState(repo)).match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst map = (await registry.fetchBlocks([providerState])).match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\tblocksMap.set(k, v);\n\t\t\t}\n\n\t\t\tblock = blocksMap.get(blockSpecifier);\n\t\t}\n\n\t\tif (!block) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(`Invalid block! ${color.bold(blockSpecifier)} does not exist!`)\n\t\t\t);\n\t\t}\n\n\t\ttestingBlocksMapped.push({ name: blockSpecifier, block });\n\t}\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tfor (const { block } of testingBlocksMapped) {\n\t\tconst providerState = block.sourceRepo;\n\n\t\tconst fullSpecifier = url.join(block.sourceRepo.url, block.category, block.name);\n\n\t\tif (!options.verbose) {\n\t\t\tloading.start(`Setting up test file for ${color.cyan(fullSpecifier)}`);\n\t\t}\n\n\t\tif (!block.tests) {\n\t\t\tloading.stop(`No tests found for ${color.cyan(fullSpecifier)}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet directory = getPathForBlock(block, resolvedPaths, options.cwd);\n\n\t\tdirectory = path.relative(tempTestDirectory, directory);\n\n\t\tconst getSourceFile = async (filePath: string) => {\n\t\t\tconst content = await registry.fetchRaw(providerState, filePath);\n\n\t\t\tif (content.isErr()) {\n\t\t\t\tloading.stop(color.red(`Error fetching ${color.bold(filePath)}`));\n\t\t\t\tprogram.error(color.red(`There was an error trying to get ${fullSpecifier}`));\n\t\t\t}\n\n\t\t\treturn content.unwrap();\n\t\t};\n\n\t\tverbose(`Downloading and copying test files for ${fullSpecifier}`);\n\n\t\tconst testFiles: string[] = [];\n\n\t\tfor (const testFile of block.files.filter((file) => isTestFile(file))) {\n\t\t\tconst content = await getSourceFile(path.join(block.directory, testFile));\n\n\t\t\tconst destPath = path.join(tempTestDirectory, testFile);\n\n\t\t\tfs.writeFileSync(destPath, content);\n\n\t\t\ttestFiles.push(destPath);\n\t\t}\n\n\t\t// resolve imports for the block\n\t\tfor (const file of testFiles) {\n\t\t\tverbose(`Opening test file ${file}`);\n\n\t\t\tlet code = fs.readFileSync(file).toString();\n\n\t\t\tconst result = oxc.parseSync(file, code);\n\n\t\t\tfor (const mod of result.module.staticImports) {\n\t\t\t\tconst moduleSpecifier = mod.moduleRequest.value;\n\n\t\t\t\tlet newModuleSpecifier: string | undefined = undefined;\n\n\t\t\t\tif (moduleSpecifier.startsWith('.')) {\n\t\t\t\t\tif (block.subdirectory) {\n\t\t\t\t\t\tnewModuleSpecifier = path.join(directory, block.name, moduleSpecifier);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewModuleSpecifier = path.join(directory, moduleSpecifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newModuleSpecifier) {\n\t\t\t\t\t// this way we only replace the exact import since it will be surrounded in quotes\n\t\t\t\t\tconst literalRegex = new RegExp(\n\t\t\t\t\t\t`(['\"])${escapeStringRegexp(moduleSpecifier)}\\\\1`,\n\t\t\t\t\t\t'g'\n\t\t\t\t\t);\n\n\t\t\t\t\tcode = code.replaceAll(literalRegex, `$1${newModuleSpecifier}$1`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfs.writeFileSync(file, code);\n\t\t}\n\n\t\tverbose(`Completed ${color.cyan.bold(fullSpecifier)} test file`);\n\n\t\tif (!options.verbose) {\n\t\t\tloading.stop(`Completed setup for ${color.bold(fullSpecifier)}`);\n\t\t}\n\t}\n\n\tverbose('Beginning testing');\n\n\tconst pm = await detect({ cwd: options.cwd });\n\n\tif (pm == null) {\n\t\tprogram.error(color.red('Could not detect package manager'));\n\t}\n\n\tconst resolved = resolveCommand(pm.agent, 'execute', ['vitest', 'run', tempTestDirectory]);\n\n\tif (resolved == null) {\n\t\tprogram.error(color.red(`Could not resolve add command for '${pm.agent}'.`));\n\t}\n\n\tconst testCommand = `${resolved.command} ${resolved.args.join(' ')}`;\n\n\tverbose(`Running ${color.cyan(testCommand)} on ${color.cyan(options.cwd)}`);\n\n\ttry {\n\t\tconst proc = x(resolved.command, resolved.args, { nodeOptions: { cwd: options.cwd } });\n\n\t\tfor await (const line of proc) {\n\t\t\tprocess.stdout.write(`${line}\\n`);\n\t\t}\n\n\t\tcleanUp();\n\t} catch (err) {\n\t\tif (options.debug) {\n\t\t\tconsole.info(\n\t\t\t\t`${color.bold('--debug')} flag provided. Skipping cleanup. Run '${color.bold(\n\t\t\t\t\ttestCommand\n\t\t\t\t)}' to retry tests.\\n`\n\t\t\t);\n\t\t} else {\n\t\t\tcleanUp();\n\t\t}\n\n\t\tprogram.error(color.red(`Tests failed! Error ${err}`));\n\t}\n}\n\nexport { test };\n","import { cancel, confirm, isCancel, log, outro, password, select, text } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command } from 'commander';\nimport * as v from 'valibot';\nimport { getProjectConfig } from '../utils/config';\nimport { intro } from '../utils/prompts';\nimport { http } from '../utils/registry-providers';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\ttoken: v.optional(v.string()),\n\tlogout: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst services = ['Anthropic', 'Azure', 'BitBucket', 'GitHub', 'GitLab', 'OpenAI', 'http'].sort();\n\nexport const tokens = new Command('tokens')\n\t.description('Provide a token for access to private repositories.')\n\t.addArgument(\n\t\tnew Argument('service', 'The service you want to authenticate to.')\n\t\t\t.choices(services.map((s) => s.toLowerCase()))\n\t\t\t.argOptional()\n\t)\n\t.option('--logout', 'Execute the logout flow.', false)\n\t.option('--token <token>', 'The token to use for authenticating to this service.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (service, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _tokens(service, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _tokens(service: string | undefined, options: Options) {\n\tconst configuredRegistries: string[] = getProjectConfig(options.cwd).match(\n\t\t(v) => v.repos.filter(http.matches),\n\t\t() => []\n\t);\n\n\tlet selectedService = services.find((s) => s.toLowerCase() === service?.toLowerCase());\n\n\tconst storage = new TokenManager();\n\n\t// logout flow\n\tif (options.logout) {\n\t\tif (selectedService !== undefined) {\n\t\t\tif (selectedService === 'http') {\n\t\t\t\tawait promptHttpLogout(storage);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstorage.delete(selectedService);\n\t\t\tlog.success(`Logged out of ${selectedService}.`);\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const serviceName of services) {\n\t\t\tif (serviceName === 'http') {\n\t\t\t\tawait promptHttpLogout(storage);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (storage.get(serviceName) === undefined) {\n\t\t\t\tlog.step(color.gray(`Already logged out of ${color.bold(serviceName)}.`));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst response = await confirm({\n\t\t\t\tmessage: `Logout of ${color.bold(serviceName)}?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (!response) continue;\n\n\t\t\tstorage.delete(serviceName);\n\t\t}\n\n\t\treturn;\n\t}\n\n\t// login flow\n\tif (selectedService === undefined) {\n\t\tconst response = await select({\n\t\t\tmessage: 'Which service do you want to authenticate to?',\n\t\t\toptions: services.map((serviceName) => ({\n\t\t\t\tlabel: serviceName,\n\t\t\t\tvalue: serviceName,\n\t\t\t})),\n\t\t\tinitialValue: services[0],\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tselectedService = response;\n\n\t\tif (selectedService === 'http') {\n\t\t\tlet selectedRegistry = 'Other';\n\n\t\t\tif (configuredRegistries.length > 0) {\n\t\t\t\tconfiguredRegistries.push('Other');\n\n\t\t\t\tconst response = await select({\n\t\t\t\t\tmessage: 'Which registry do you want to authenticate to?',\n\t\t\t\t\toptions: configuredRegistries.map((serviceName) => ({\n\t\t\t\t\t\tlabel: serviceName,\n\t\t\t\t\t\tvalue: serviceName,\n\t\t\t\t\t})),\n\t\t\t\t\tinitialValue: services[0],\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(response)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tselectedRegistry = new URL(response).origin;\n\t\t\t}\n\n\t\t\t// prompt for registry\n\t\t\tif (selectedRegistry === 'Other') {\n\t\t\t\tconst response = await text({\n\t\t\t\t\tmessage: 'Please enter the registry url you want to authenticate to:',\n\t\t\t\t\tplaceholder: 'https://example.com',\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// try to parse the url\n\t\t\t\t\t\t\tnew URL(value);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// if parsing fails return the error\n\t\t\t\t\t\t\treturn 'Please provide a valid url';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(response)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tselectedRegistry = new URL(response).origin;\n\t\t\t}\n\n\t\t\tselectedService = `http-${selectedRegistry}`;\n\t\t}\n\t}\n\n\tlet serviceName = selectedService;\n\n\tif (serviceName.startsWith('http')) {\n\t\tserviceName = serviceName.slice(5);\n\t}\n\n\tif (options.token === undefined) {\n\t\tconst response = await password({\n\t\t\tmessage: `Paste your token for ${color.bold(serviceName)}:`,\n\t\t\tvalidate(value) {\n\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(response) || !response) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\toptions.token = response;\n\t}\n\n\tstorage.set(selectedService, options.token);\n\n\tlog.success(`Logged into ${color.bold(serviceName)}.`);\n}\n\nasync function promptHttpLogout(storage: TokenManager) {\n\t// list all providers for logout\n\tconst registries = storage.getHttpRegistriesWithTokens();\n\n\tif (registries.length === 0) {\n\t\tlog.step(color.gray(`Already logged out of ${color.bold('http')}.`));\n\t}\n\n\tfor (const registry of registries) {\n\t\tlet registryUrl: URL;\n\n\t\ttry {\n\t\t\tregistryUrl = new URL(registry);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst response = await confirm({\n\t\t\tmessage: `Logout of ${color.bold(registryUrl.origin)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (!response) continue;\n\n\t\tstorage.delete(`http-${registryUrl.origin}`);\n\t}\n}\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, multiselect, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getBlockFilePath, getInstalled, preloadBlocks, resolveTree } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { getProjectConfig, resolvePaths } from '../utils/config';\nimport { transformRemoteContent } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { getWatermark } from '../utils/get-watermark';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\tspinner,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\tall: v.boolean(),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\tno: v.boolean(),\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst update = new Command('update')\n\t.description('Update blocks to the code in the remote repository.')\n\t.argument('[blocks...]', 'Names of the blocks you want to update. ex: (utils/math)')\n\t.option('--all', 'Update all installed components.', false)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('-n, --no', 'Do update any blocks.', false)\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _update(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _update(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to update ${JSON.stringify(blockNames)}`);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst config = getProjectConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\t// ensure blocks do not provide repos\n\tfor (const blockSpecifier of blockNames) {\n\t\tif (registry.providers.find((p) => blockSpecifier.startsWith(p.name))) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Invalid value provided for block names \\`${color.bold(blockSpecifier)}\\`. Block names are expected to be provided in the format of \\`${color.bold('<category>/<name>')}\\``\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${color.cyan('jsrepo')} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tverbose(`Resolving ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst manifests = (await registry.fetchManifests(resolvedRepos)).match(\n\t\t(v) => v,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = registry.getRemoteBlocks(manifests);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tfor (const manifest of manifests) {\n\t\tcheckPreconditions(manifest.state, manifest.manifest, options.cwd);\n\t}\n\n\tconst installedBlocks = getInstalled(blocksMap, config, options.cwd);\n\n\tif (installedBlocks.length === 0) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`You haven't installed any blocks yet. Did you mean to \\`${color.bold('add')}\\`?`\n\t\t\t)\n\t\t);\n\t}\n\n\tlet updatingBlockNames = blockNames;\n\n\tif (options.all) {\n\t\tupdatingBlockNames = installedBlocks.map((block) => block.specifier);\n\t}\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (updatingBlockNames.length === 0) {\n\t\tconst promptResult = await multiselect({\n\t\t\tmessage: `Which blocks would you like to ${options.no ? 'diff' : 'update'}?`,\n\t\t\toptions: installedBlocks\n\t\t\t\t.filter((b) => b.block.list)\n\t\t\t\t.map((block) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: `${color.cyan(block.block.category)}/${block.block.name}`,\n\t\t\t\t\t\tvalue: block.specifier,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\trequired: true,\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tupdatingBlockNames = promptResult as string[];\n\t}\n\n\tverbose(`Preparing to update ${color.cyan(updatingBlockNames.join(', '))}`);\n\n\tconst updatingBlocks = (await resolveTree(updatingBlockNames, blocksMap, resolvedRepos)).match(\n\t\t(val) => val,\n\t\tprogram.error\n\t);\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst preloadedBlocks = preloadBlocks(updatingBlocks, config);\n\n\tfor (const preloadedBlock of preloadedBlocks) {\n\t\tconst fullSpecifier = url.join(\n\t\t\tpreloadedBlock.block.sourceRepo.url,\n\t\t\tpreloadedBlock.block.category,\n\t\t\tpreloadedBlock.block.name\n\t\t);\n\n\t\tconst watermark = getWatermark(preloadedBlock.block.sourceRepo.url);\n\n\t\tverbose(`Attempting to update ${fullSpecifier}`);\n\n\t\tif (config.includeTests && preloadedBlock.block.tests) {\n\t\t\tverbose('Trying to include tests');\n\n\t\t\tdevDeps.add('vitest');\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tconst files = await preloadedBlock.files;\n\n\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE} ${fullSpecifier}\\n`);\n\n\t\tfor (const file of files) {\n\t\t\tconst content = file.content.match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\tfile.name,\n\t\t\t\tpreloadedBlock.block,\n\t\t\t\tresolvedPaths,\n\t\t\t\toptions.cwd\n\t\t\t);\n\n\t\t\tconst remoteContent = (\n\t\t\t\tawait transformRemoteContent({\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t},\n\t\t\t\t\tbiomeOptions,\n\t\t\t\t\tprettierOptions,\n\t\t\t\t\tconfig,\n\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\twatermark,\n\t\t\t\t\tverbose,\n\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t})\n\t\t\t).match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tlet localContent = '';\n\t\t\tif (fs.existsSync(destPath)) {\n\t\t\t\tlocalContent = fs.readFileSync(destPath).toString();\n\t\t\t}\n\n\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter: config.formatter },\n\t\t\t\tcurrent: {\n\t\t\t\t\tpath: destPath,\n\t\t\t\t\tcontent: localContent,\n\t\t\t\t},\n\t\t\t\tincoming: {\n\t\t\t\t\tpath: url.join(fullSpecifier, file.name),\n\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\t...options,\n\t\t\t\t\tloading,\n\t\t\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (updateResult.applyChanges) {\n\t\t\t\tloading.start(`Writing changes to ${color.cyan(destPath)}`);\n\n\t\t\t\tfs.writeFileSync(destPath, updateResult.updatedContent);\n\n\t\t\t\tloading.stop(`Wrote changes to ${color.cyan(destPath)}.`);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tno: options.no,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push('Import and use the blocks!');\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n}\n\nexport { update };\n","import { program } from 'commander';\nimport pkg from '../package.json';\nimport * as commands from './commands';\n\nconst cli = program\n\t.name(pkg.name)\n\t.description(pkg.description)\n\t.version(pkg.version)\n\t.addCommand(commands.add)\n\t.addCommand(commands.auth)\n\t.addCommand(commands.build)\n\t.addCommand(commands.exec)\n\t.addCommand(commands.init)\n\t.addCommand(commands.publish)\n\t.addCommand(commands.test)\n\t.addCommand(commands.tokens)\n\t.addCommand(commands.update);\n\nexport { cli };\n","#!/usr/bin/env node\n\nimport { cli } from './cli';\n\ncli.parse();\n"]}
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/commands/add.ts","../src/utils/ascii.ts","../src/utils/blocks/ts/array.ts","../src/utils/blocks/ts/pad.ts","../src/utils/blocks/ts/lines.ts","../src/utils/blocks/package-managers/flags.ts","../src/utils/prompts.ts","../src/utils/persisted.ts","../src/utils/token-manager.ts","../src/utils/ai.ts","../src/utils/context.ts","../src/utils/diff.ts","../src/utils/fetch.ts","../src/utils/get-latest-version.ts","../src/utils/parse-package-name.ts","../src/utils/package.ts","../src/utils/dependencies.ts","../src/utils/files.ts","../src/utils/language-support/css.ts","../src/utils/language-support/html.ts","../src/utils/language-support/javascript.ts","../src/utils/language-support/json.ts","../src/utils/language-support/sass.ts","../src/utils/language-support/svelte.ts","../src/utils/language-support/svg.ts","../src/utils/language-support/vue.ts","../src/utils/language-support/yaml.ts","../src/utils/language-support/index.ts","../src/utils/build/check.ts","../src/utils/build/index.ts","../src/utils/config.ts","../src/utils/registry-providers/internal.ts","../src/utils/blocks.ts","../src/utils/blocks/commander/parsers.ts","../src/utils/blocks/ts/promises.ts","../src/utils/format.ts","../src/utils/get-watermark.ts","../src/utils/preconditions.ts","../src/utils/blocks/ts/sleep.ts","../src/commands/auth.ts","../src/commands/build.ts","../src/commands/exec.ts","../src/commands/info.ts","../src/commands/init.ts","../src/utils/mcp.ts","../src/commands/mcp.ts","../src/commands/publish.ts","../src/commands/test.ts","../src/commands/tokens.ts","../src/commands/update.ts","../src/cli.ts","../src/index.ts"],"names":["package_default","unicode","isUnicodeSupported","s","c","fallback","S_STEP_ACTIVE","S_SUCCESS","S_ERROR","VERTICAL_LINE","color","HORIZONTAL_LINE","TOP_RIGHT_CORNER","BOTTOM_RIGHT_CORNER","JUNCTION_RIGHT","JUNCTION_TOP","BOTTOM_LEFT_CORNER","WARN","INFO","ERROR","JSREPO","JSREPO_DOT_COM","fromMap","map","fn","items","key","value","sum","arr","total","item","maxLength","max","str","stripVTControlCharacters","leftPadMin","length","padWith","strippedLength","stripAsni","rightPadMin","NEW_LINE_REGEX","get","join","lines","lineNumbers","prefix","transformed","line","i","os","bun","deno","npm","pnpm","yarn","flags","Conf","HTTP_REGISTRY_LIST_KEY","TokenManager","#storage","storage","name","token","secret","registries","registry","index","models","originalFile","newFile","loading","verbose","additionalInstructions","messages","apiKey","getApiKey","prompt","createUpdatePrompt","text","getNextCompletionAnthropic","unwrapCodeFromQuotes","getNextCompletionOpenAI","getNextCompletionOllama","maxTokens","model","first","OpenAI","anthropic","Anthropic","history","message","ollama","rePrompt","quoted","code","l","result","password","isCancel","cancel","packageJson","isWhitespace","trimSingleNewLine","formatDiff","from","to","changes","expand","maxUnchanged","colorRemoved","colorAdded","colorCharsRemoved","colorCharsAdded","onUnchanged","intro","change","lineOffset","linePrefix","hasPreviousChange","hasNextChange","prevLineOffset","ls","shownLines","count","colorLineChange","colorCharChange","sentence","diffChars","chg","iFetch","mfFetch","path","LATEST_VERSION_KEY","EXPIRATION_TIME","getLatestVersion","noCache","version","latestVersion","Ok","response","Err","ver","err","RE_SCOPED","RE_NON_SCOPED","parsePackageName","input","m","findNearestPackageJson","startDir","until","packagePath","fs","segments","getPackage","contents","cleanVersion","returnShouldInstall","dependencies","devDependencies","cwd","tempDeps","tempDevDeps","packageResult","pkg","dep","foundDep","semver","runTasks","tasks","task","runTasksConcurrently","startMessage","stopMessage","t","_spinner","spinner","msg","nextSteps","steps","box","boxen","truncatedList","truncated","remaining","newerVersionAvailable","oldVersion","newVersion","pm","detect","installCommand","resolveCommand","_intro","MODEL_PREFERENCE_KEY","promptUpdateFile","incoming","current","config","options","acceptedChanges","updatedContent","messageHistory","diffLines","formattedDiff","totalChanges","a","confirmOptions","confirmResult","select","modelResult","val","content","log","formatFile","promptInstallDependencies","deps","devDeps","yes","no","ignoreWorkspace","install","confirm","installDependencies","taskLog","title","BAR","ACTIVE","SUCCESS","output","frame","clear","eraseTitle","terminalWidth","height","cursor","erase","print","limit","data","frameHeight","dev","args","noWorkspace","add","program","proc","x","templatePattern","resolveLocalDependencyTemplate","template","destPath","destDir","_","category","relative","transformRemoteContent","file","imports","watermark","prettierOptions","biomeOptions","lang","languages","literal","resolvedImport","literalRegex","escapeStringRegexp","formatter","newContent","matchJSDescendant","searchFilePath","MATCH_EXTENSIONS","endsWithOneOf","dir","files","parsedSearch","tryGetTsconfig","searchPath","getTsconfig","css","fileName","filePath","isSubDir","excludeDeps","dirs","containingDir","sourceCode","parseResult","resolveResult","resolveImports","imp","formatError","biome","Biome","Distribution","html","ast","walk","node","enter","n","attr","an","getJavascriptImports","oxc","modules","mod","exp","entry","typescript","ln","format","dn","json","jsonc","sass","un","gn","svelte","root","plugin","vn","svg","vue","parsed","mods","$n","yaml","Rn","moduleSpecifiers","doNotInstall","errors","localDeps","specifier","builtinModules","localDep","resolveLocalImport","depInfo","validatePackageName","tryResolveLocalAlias","resolveRemoteDeps","dropExtension","alias","categoryDir","modPath","fullDir","parsePath","absPath","longestMatch","containingPath","localPath","block","rest","trimmedBlock","blockSpecifier","configResult","matcher","createPathsMatcher","paths","foundMod","searchForModule","pathResolved","shouldDropExtension","resolutionEquality","pathA","pathB","validExtensions","parsedA","parsedB","pathAWithoutExtension","pathBWithoutExtension","containing","modParsed","newPath","fileParsed","prettyPath","exemptDeps","pkgPath","packageDevDependencies","packageDependencies","FRAMEWORKS","ruleLevelSchema","M","ruleKeySchema","rules","manifest","depCategoryName","depBlockName","depCategory","cat","error","b","categoryName","chain","searchForDep","listedBlocks","frameworkDeps","d","frameworkDep","configFile","ruleConfigSchema","DEFAULT_CONFIG","runRules","ruleConfig","warnings","rule","conf","level","ruleErrors","search","categories","newChain","blockName","depBlock","found","isDependedOn","TEST_SUFFIXES","isTestFile","suffix","buildBlocksDirectory","blocksPath","ignore","categoryPath","dirName","shouldIncludeCategory","listCategory","shouldListCategory","blockDir","transformBlockName","listBlock","shouldListBlock","shouldIncludeBlock","resolver","testsPath","f","local","localDepsSet","depsSet","devDepsSet","hasTests","blockFiles","walkFiles","base","relativeFilePath","subFiles","imps","k","v","buildConfigFiles","configFiles","pruneUnused","pruned","catBlocks","IGNORED_DIRS","PROJECT_CONFIG_NAME","REGISTRY_CONFIG_NAME","formatterSchema","pathsSchema","projectConfigSchema","getProjectConfig","registryConfigSchema","accessLevel","manifestMeta","peerDependencySchema","configFileSchema","getRegistryConfig","resolvePaths","newPaths","p","resolved","tryResolvePath","unresolvedPath","getPathForBlock","resolvedPaths","directory","internalFetchRaw","state","resourcePath","fetchRaw","getProviderToken","internalFetchManifest","fetchManifest","provider","url","getProviderState","repo","selectProvider","http","cached","providers","forEachPathGetProviderState","repos","getProviderResult","providerState","fetchBlocks","blocksMap","getManifestResult","getRemoteBlocks","manifests","fetchManifests","resolveTree","blockSpecifiers","repoPaths","installed","blocks","repoIdent","tempBlock","subDeps","getInstalled","installedBlocks","baseDir","blockPath","preloadBlocks","preloaded","includedFiles","getBlockFilePath","parseRecord","pair","InvalidArgumentError","immediate","res","loadFormatterConfig","Jn","configPath","getWatermark","repoUrl","checkPreconditions","incompatible","expected","msgs","last","versionMessage","schema","B","Command","Option","blockNames","opts","_add","outro","noConfig","shouldContinue","mustResolveRepos","resolveAllRepos","repoPath","resolvedRepos","installingBlockNames","promptResult","multiselect","shortName","blockExists","label","installingBlocks","store","zeroConfigKey","zeroConfigParsed","zeroConfig","includeTests","addWatermark","defaultFormatter","updatedBlocks","overwriteAll","preloadedBlocks","updatedFiles","preloadedBlock","fullSpecifier","shortSpecifier","overwriteBlocks","installing","spec","overwrite","remoteContent","localContent","updateResult","updatedFile","folder","installResult","cmd","step","next","sleep","durationMs","Le","auth","_auth","tokenManager","hardwareId","nodeMachineId","anonSessionId","BASE_URL","timeout","pollingTimeout","endpoint","O","build","MANIFEST_FILE","_build","mergedVal","outDir","manifestOut","oldManifest","parseManifest","newDirPath","ig","ignoreFile","dirPath","builtCategories","createManifest","warning","prunedCategories","originalPath","ge","exec","Argument","script","command","_exec","tempDirBase","tempDirectoryRelative","tempDirectory","resolvedPathsResult","addedBlocks","providerInfo","getSourceFile","sourceFile","sourcePath","pathFolder","packageContent","startIndex","arg","passthroughArgs","runningBlock","Vt","info","_info","jsrepo","headers","fetch","formattedOutput","registryInfo","out","multipleOfThree","num","blockTitles","minBlockTitleLength","isMultipleOfThree","isLast","tag","F","init","_initProject","_initRegistry","initialConfig","tsconfigResult","defaultPath","defaultPathResult","setupRepo","promptForRegistryConfig","r","configContent","tokenKey","fullFilePath","fileContents","matchedPath","originalRemoteContent","configurePaths","configuredValue","configurePublish","nameResponse","promptForScriptKey","alreadyInstalled","buildScript","publishScript","runScript","scriptKey","placeholder","listComponentsTool","listComponents","states","components","fullName","getComponentCodeTool","getComponentCode","component","getConfigFilesTool","getConfigFiles","requiredOnly","discoverRegistriesTool","discoverRegistries","primaryLanguage","cliReferenceTool","cliReference","cli","o","connectServer","server","Server","CallToolRequestSchema","request","ListToolsRequestSchema","transport","StdioServerTransport","mcp","I","publish","_publish","scope","registryName","NAME_REGEX","tempOutDir","readmePath","dest","access","tarBuffer","ve","test","_test","tempTestDirectory","cleanUp","testingBlocks","testingBlocksMapped","parsedRepo","testFiles","testFile","moduleSpecifier","newModuleSpecifier","testCommand","Me","services","tokens","service","_tokens","configuredRegistries","selectedService","promptHttpLogout","serviceName","selectedRegistry","registryUrl","ne","update","_update","updatingBlockNames","updatingBlocks"],"mappings":"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","file":"index.js","sourcesContent":["{\n\t\"name\": \"jsrepo\",\n\t\"description\": \"A CLI to add shared code from remote repositories.\",\n\t\"version\": \"2.2.0\",\n\t\"license\": \"MIT\",\n\t\"homepage\": \"https://jsrepo.dev\",\n\t\"author\": {\n\t\t\"name\": \"Aidan Bleser\",\n\t\t\"url\": \"https://github.com/ieedan\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/jsrepojs/jsrepo\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/jsrepojs/jsrepo/issues\"\n\t},\n\t\"keywords\": [\"repo\", \"cli\", \"svelte\", \"vue\", \"typescript\", \"javascript\", \"shadcn\", \"registry\"],\n\t\"type\": \"module\",\n\t\"packageManager\": \"pnpm@10.8.1\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/api/index.d.ts\",\n\t\t\t\"default\": \"./dist/api/index.js\"\n\t\t}\n\t},\n\t\"bin\": \"./dist/index.js\",\n\t\"main\": \"./dist/index.js\",\n\t\"files\": [\"./schemas/**/*\", \"dist/**/*\"],\n\t\"scripts\": {\n\t\t\"start\": \"tsup --silent && node ./dist/index.js\",\n\t\t\"build\": \"tsup\",\n\t\t\"generate:reference\": \"pnpm dlx tsx ./scripts/generate-reference.ts \",\n\t\t\"run:dev\": \"node ./dist/index.js\",\n\t\t\"format\": \"biome format --write\",\n\t\t\"lint\": \"biome lint --write\",\n\t\t\"check\": \"biome check && pnpm check:types\",\n\t\t\"test\": \"vitest\",\n\t\t\"check:types\": \"tsc\",\n\t\t\"changeset:version\": \"changeset version && pnpm generate:reference && pnpm format\",\n\t\t\"ci:release\": \"pnpm build && changeset publish\",\n\t\t\"mcp:inspector\": \"pnpm build && pnpm dlx @modelcontextprotocol/inspector node ./dist/index.js mcp\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@biomejs/biome\": \"1.9.4\",\n\t\t\"@changesets/cli\": \"^2.29.3\",\n\t\t\"@types/diff\": \"^7.0.2\",\n\t\t\"@types/make-fetch-happen\": \"^10.0.4\",\n\t\t\"@types/node\": \"^22.15.6\",\n\t\t\"@types/semver\": \"^7.7.0\",\n\t\t\"@types/validate-npm-package-name\": \"^4.0.2\",\n\t\t\"pkg-pr-new\": \"^0.0.43\",\n\t\t\"tsup\": \"^8.4.0\",\n\t\t\"typescript\": \"^5.8.3\",\n\t\t\"vitest\": \"^3.1.3\"\n\t},\n\t\"dependencies\": {\n\t\t\"@anthropic-ai/sdk\": \"^0.40.1\",\n\t\t\"@biomejs/js-api\": \"^0.7.1\",\n\t\t\"@biomejs/wasm-nodejs\": \"^1.9.4\",\n\t\t\"@clack/prompts\": \"^0.10.1\",\n\t\t\"@modelcontextprotocol/sdk\": \"^1.12.0\",\n\t\t\"boxen\": \"^8.0.1\",\n\t\t\"chalk\": \"^5.4.1\",\n\t\t\"commander\": \"^13.1.0\",\n\t\t\"conf\": \"^13.1.0\",\n\t\t\"css-dependency\": \"^0.0.3\",\n\t\t\"diff\": \"^7.0.0\",\n\t\t\"escape-string-regexp\": \"^5.0.0\",\n\t\t\"estree-walker\": \"^3.0.3\",\n\t\t\"get-tsconfig\": \"^4.10.0\",\n\t\t\"ignore\": \"^7.0.4\",\n\t\t\"is-unicode-supported\": \"^2.1.0\",\n\t\t\"make-fetch-happen\": \"^14.0.3\",\n\t\t\"node-machine-id\": \"^1.1.12\",\n\t\t\"ollama\": \"^0.5.14\",\n\t\t\"openai\": \"^4.97.0\",\n\t\t\"oxc-parser\": \"^0.68.1\",\n\t\t\"package-manager-detector\": \"^1.3.0\",\n\t\t\"parse5\": \"^7.3.0\",\n\t\t\"pathe\": \"^2.0.3\",\n\t\t\"prettier\": \"^3.5.3\",\n\t\t\"semver\": \"^7.7.1\",\n\t\t\"sisteransi\": \"^1.0.5\",\n\t\t\"svelte\": \"^5.28.2\",\n\t\t\"tar\": \"^7.4.3\",\n\t\t\"tinyexec\": \"^1.0.1\",\n\t\t\"valibot\": \"1.0.0\",\n\t\t\"validate-npm-package-name\": \"^6.0.0\",\n\t\t\"vue\": \"^3.5.13\"\n\t}\n}\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, log, multiselect, outro, select, text } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, Option, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getBlockFilePath, getInstalled, preloadBlocks, resolveTree } from '../utils/blocks';\nimport { parseRecord } from '../utils/blocks/commander/parsers';\nimport * as promises from '../utils/blocks/ts/promises';\nimport * as url from '../utils/blocks/ts/url';\nimport {\n\ttype Formatter,\n\ttype ProjectConfig,\n\tgetProjectConfig,\n\tprojectConfigSchema,\n\tresolvePaths,\n} from '../utils/config';\nimport { transformRemoteContent } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { getWatermark } from '../utils/get-watermark';\nimport * as persisted from '../utils/persisted';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\tspinner,\n\ttruncatedList,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\twatermark: v.optional(v.boolean()),\n\ttests: v.optional(v.boolean()),\n\tformatter: v.optional(v.union([v.literal('prettier'), v.literal('biome'), v.literal('none')])),\n\tpaths: v.optional(v.record(v.string(), v.string())),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const add = new Command('add')\n\t.description('Add blocks to your project.')\n\t.argument(\n\t\t'[blocks...]',\n\t\t'Names of the blocks you want to add to your project. ex: (utils/math, github/ieedan/std/utils/math)'\n\t)\n\t.addOption(\n\t\tnew Option('--formatter <choice>', 'The formatter to use when adding blocks.').choices([\n\t\t\t'prettier',\n\t\t\t'biome',\n\t\t\t'none',\n\t\t])\n\t)\n\t.addOption(\n\t\tnew Option('--watermark <choice>', 'Include a watermark at the top of added files.')\n\t\t\t.choices(['true', 'false'])\n\t\t\t.argParser((val) => val === 'true')\n\t)\n\t.addOption(\n\t\tnew Option('--tests <choice>', 'Include tests when adding blocks.')\n\t\t\t.choices(['true', 'false'])\n\t\t\t.argParser((val) => val === 'true')\n\t)\n\t.option(\n\t\t'--paths <category=path,category=path>',\n\t\t'The paths where categories should be added to your project.',\n\t\tparseRecord,\n\t\tundefined\n\t)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _add(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _add(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to add ${JSON.stringify(blockNames)}`);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst configResult = getProjectConfig(options.cwd);\n\n\t/** The user has opted for no config */\n\tconst noConfig = configResult.isErr();\n\n\tlet config: ProjectConfig;\n\n\tif (configResult.isErr()) {\n\t\tlet shouldContinue = options.yes;\n\n\t\tif (!options.yes) {\n\t\t\tconst response = await confirm({\n\t\t\t\tmessage: `You don't have ${ascii.JSREPO} initialized in your project. Do you want to continue?`,\n\t\t\t\tinitialValue: false,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tshouldContinue = response;\n\t\t}\n\n\t\tif (!shouldContinue) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\t// add default config used for default values in prompts\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tincludeTests: false,\n\t\t\twatermark: true,\n\t\t\tpaths: {\n\t\t\t\t'*': './src/blocks',\n\t\t\t},\n\t\t\trepos: [],\n\t\t};\n\t} else {\n\t\tconfig = configResult.unwrap();\n\t}\n\n\tconfig.formatter =\n\t\toptions.formatter !== undefined && options.formatter !== 'none'\n\t\t\t? options.formatter\n\t\t\t: config.formatter;\n\tconfig.watermark = options.watermark !== undefined ? options.watermark : config.watermark;\n\tconfig.includeTests = options.tests !== undefined ? options.tests : config.includeTests;\n\tconfig.paths =\n\t\toptions.paths !== undefined ? { ...config.paths, ...options.paths } : config.paths;\n\n\tlet repoPaths = config.repos;\n\tconst mustResolveRepos = new Set<string>();\n\tlet resolveAllRepos = false;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) {\n\t\trepoPaths = [options.repo];\n\t}\n\n\t// resolve repos for blocks\n\tfor (const blockSpecifier of blockNames) {\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// we are only getting repos for blocks that specified repos\n\t\tif (!provider) {\n\t\t\t// if a block doesn't specify a repo we must resolve all\n\t\t\tresolveAllRepos = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { url: repo } = provider.parse(blockSpecifier, { fullyQualified: true });\n\n\t\tconst alreadyExists =\n\t\t\t!config.repos.find((repoPath) => repoPath === repo) && !mustResolveRepos.has(repo);\n\n\t\tif (!alreadyExists) {\n\t\t\tif (!options.allow) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(repo)}?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result) || !result) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// only add if it doesn't exist\n\t\t\trepoPaths.push(repo);\n\t\t}\n\n\t\t// this way we add the config.repos as well\n\t\tmustResolveRepos.add(repo);\n\t}\n\n\tif (!resolveAllRepos && blockNames.length > 0) {\n\t\trepoPaths = Array.from(mustResolveRepos);\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (repoPaths.length === 0) {\n\t\tif (noConfig) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Fully quality blocks ex: (github/ieedan/std/utils/math) or provide the \\`${color.bold(\n\t\t\t\t\t\t'--repo'\n\t\t\t\t\t)}\\` flag to specify a registry.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`There were no repos present in your config and you didn't provide the \\`${color.bold(\n\t\t\t\t\t'--repo'\n\t\t\t\t)}\\` flag with a repo.`\n\t\t\t)\n\t\t);\n\t}\n\n\tverbose(`Resolving ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst manifests = (\n\t\tawait registry.fetchManifests(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(v) => v,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = registry.getRemoteBlocks(manifests);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tfor (const manifest of manifests) {\n\t\tcheckPreconditions(manifest.state, manifest.manifest, options.cwd);\n\t}\n\n\tlet installedBlocks = getInstalled(blocksMap, config, options.cwd).map((val) => val.specifier);\n\n\tlet installingBlockNames = blockNames;\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (installingBlockNames.length === 0) {\n\t\tconst promptResult = await multiselect({\n\t\t\tmessage: 'Select which blocks to add.',\n\t\t\toptions: Array.from(blocksMap.entries())\n\t\t\t\t.filter(([_, value]) => value.list)\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\tconst shortName = `${value.category}/${value.name}`;\n\n\t\t\t\t\tconst blockExists =\n\t\t\t\t\t\tinstalledBlocks.findIndex((block) => block === shortName) !== -1;\n\n\t\t\t\t\tlet label: string;\n\n\t\t\t\t\t// show the full repo if there are multiple repos\n\t\t\t\t\tif (repoPaths.length > 1) {\n\t\t\t\t\t\tlabel = `${color.cyan(url.join(value.sourceRepo.url, value.category))}/${value.name}`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = `${color.cyan(value.category)}/${value.name}`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: blockExists ? color.gray(label) : label,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t// show hint for `Installed` if block is already installed\n\t\t\t\t\t\thint: blockExists ? 'Installed' : undefined,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\trequired: true,\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tinstallingBlockNames = promptResult as string[];\n\t}\n\n\tverbose(`Installing blocks ${color.cyan(installingBlockNames.join(', '))}`);\n\n\tconst installingBlocks = (\n\t\tawait resolveTree(installingBlockNames, blocksMap, resolvedRepos)\n\t).match(\n\t\t(val) => val,\n\t\t(err) => program.error(err)\n\t);\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst store = persisted.get();\n\n\tif (noConfig) {\n\t\tconst zeroConfigKey = `${options.cwd}-zero-config`;\n\n\t\tconst zeroConfigParsed = v.safeParse(projectConfigSchema, store.get(zeroConfigKey));\n\n\t\tconst zeroConfig = zeroConfigParsed.success ? zeroConfigParsed.output : config;\n\n\t\tconst categories = Array.from(new Set(installingBlocks.map((b) => b.category)));\n\n\t\tif (options.paths === undefined) {\n\t\t\tfor (const cat of categories) {\n\t\t\t\tconst blocksPath = await text({\n\t\t\t\t\tmessage: `Where would you like to add ${color.cyan(cat)}?`,\n\t\t\t\t\tplaceholder: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tinitialValue: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tdefaultValue: zeroConfig ? zeroConfig.paths[cat] : `./src/${cat}`,\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(blocksPath)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tconfig.paths[cat] = blocksPath;\n\t\t\t}\n\t\t}\n\n\t\tif (!options.yes && options.tests === undefined) {\n\t\t\tconst includeTests = await confirm({\n\t\t\t\tmessage: 'Include tests?',\n\t\t\t\tinitialValue: zeroConfig.includeTests,\n\t\t\t});\n\n\t\t\tif (isCancel(includeTests)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.includeTests = includeTests;\n\t\t}\n\n\t\tif (!options.yes && options.watermark === undefined) {\n\t\t\tconst addWatermark = await confirm({\n\t\t\t\tmessage: 'Add watermark?',\n\t\t\t\tinitialValue: zeroConfig.watermark,\n\t\t\t});\n\n\t\t\tif (isCancel(addWatermark)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.watermark = addWatermark;\n\t\t}\n\n\t\tif (options.formatter === undefined) {\n\t\t\tlet defaultFormatter = 'none';\n\n\t\t\tif (fs.existsSync(path.join(options.cwd, '.prettierrc'))) {\n\t\t\t\tdefaultFormatter = 'prettier';\n\t\t\t}\n\n\t\t\tif (fs.existsSync(path.join(options.cwd, 'biome.json'))) {\n\t\t\t\tdefaultFormatter = 'biome';\n\t\t\t}\n\n\t\t\tconst response = await select({\n\t\t\t\tmessage: 'What formatter would you like to use?',\n\t\t\t\toptions: ['Prettier', 'Biome', 'None'].map((val) => ({\n\t\t\t\t\tvalue: val.toLowerCase(),\n\t\t\t\t\tlabel: val,\n\t\t\t\t})),\n\t\t\t\tinitialValue:\n\t\t\t\t\tdefaultFormatter === 'none'\n\t\t\t\t\t\t? zeroConfig.formatter\n\t\t\t\t\t\t\t? zeroConfig.formatter\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t\t\t: defaultFormatter,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (response !== 'none') {\n\t\t\t\tconfig.formatter = response as Formatter;\n\t\t\t}\n\t\t}\n\n\t\tstore.set(zeroConfigKey, config);\n\n\t\t// re-run to get installed blocks at the provided path\n\t\tinstalledBlocks = getInstalled(blocksMap, config, options.cwd).map((val) => val.specifier);\n\t}\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst updatedBlocks = new Set<string>();\n\n\tlet overwriteAll: boolean | undefined;\n\n\tconst preloadedBlocks = preloadBlocks(installingBlocks, config);\n\n\tconst updatedFiles: Promise<{\n\t\tdestination: string;\n\t\tcontent: string;\n\t\tblock: registry.RemoteBlock;\n\t}>[] = [];\n\n\tfor (const preloadedBlock of preloadedBlocks) {\n\t\tconst fullSpecifier = url.join(\n\t\t\tpreloadedBlock.block.sourceRepo.url,\n\t\t\tpreloadedBlock.block.category,\n\t\t\tpreloadedBlock.block.name\n\t\t);\n\t\tconst shortSpecifier = `${preloadedBlock.block.category}/${preloadedBlock.block.name}`;\n\n\t\tverbose(`Setting up ${fullSpecifier}`);\n\n\t\tconst blockExists = installedBlocks.find((b) => shortSpecifier === b);\n\n\t\tif (config.includeTests && preloadedBlock.block.tests) {\n\t\t\tverbose('Trying to include tests');\n\n\t\t\tdevDeps.add('vitest');\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tif (blockExists && !options.yes && !overwriteAll) {\n\t\t\tif (overwriteAll === undefined) {\n\t\t\t\tconst overwriteBlocks = installingBlocks\n\t\t\t\t\t.map((installing) => `${installing.category}/${installing.name}`)\n\t\t\t\t\t.filter((spec) => installedBlocks.find((b) => b === spec));\n\n\t\t\t\tlog.warn(\n\t\t\t\t\t`The following components ${color.bold.yellow('already exist')}: ${color.cyan(truncatedList(overwriteBlocks))}`\n\t\t\t\t);\n\n\t\t\t\tconst overwrite = await confirm({\n\t\t\t\t\tmessage: `Would you like to ${color.bold.red('overwrite')} all existing components?`,\n\t\t\t\t\tactive: 'Yes, overwrite everything',\n\t\t\t\t\tinactive: 'No, let me decide individually',\n\t\t\t\t\tinitialValue: false,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(overwrite)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\toverwriteAll = overwrite;\n\t\t\t}\n\n\t\t\tif (!overwriteAll) {\n\t\t\t\tconst files = await preloadedBlock.files;\n\n\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE} ${fullSpecifier}\\n`);\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tconst content = file.content.match(\n\t\t\t\t\t\t(v) => v,\n\t\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t\t);\n\n\t\t\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\t\t\tfile.name,\n\t\t\t\t\t\tpreloadedBlock.block,\n\t\t\t\t\t\tresolvedPaths,\n\t\t\t\t\t\toptions.cwd\n\t\t\t\t\t);\n\n\t\t\t\t\tconst remoteContent = (\n\t\t\t\t\t\tawait transformRemoteContent({\n\t\t\t\t\t\t\tfile: {\n\t\t\t\t\t\t\t\tcontent: content,\n\t\t\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbiomeOptions,\n\t\t\t\t\t\t\tprettierOptions,\n\t\t\t\t\t\t\tconfig,\n\t\t\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\t\t\twatermark: getWatermark(preloadedBlock.block.sourceRepo.url),\n\t\t\t\t\t\t\tverbose,\n\t\t\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t\t\t})\n\t\t\t\t\t).match(\n\t\t\t\t\t\t(v) => v,\n\t\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t\t);\n\n\t\t\t\t\tlet localContent = '';\n\t\t\t\t\tif (fs.existsSync(destPath)) {\n\t\t\t\t\t\tlocalContent = fs.readFileSync(destPath).toString();\n\t\t\t\t\t}\n\n\t\t\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter: config.formatter },\n\t\t\t\t\t\tcurrent: {\n\t\t\t\t\t\t\tpath: destPath,\n\t\t\t\t\t\t\tcontent: localContent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tincoming: {\n\t\t\t\t\t\t\tpath: url.join(fullSpecifier, file.name),\n\t\t\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t\tno: false,\n\t\t\t\t\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateResult.applyChanges) {\n\t\t\t\t\t\tupdatedFiles.push(\n\t\t\t\t\t\t\tpromises.immediate({\n\t\t\t\t\t\t\t\tdestination: destPath,\n\t\t\t\t\t\t\t\tcontent: updateResult.updatedContent,\n\t\t\t\t\t\t\t\tblock: preloadedBlock.block,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tupdatedBlocks.add(shortSpecifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// once files load map over them and add them to updatedFiles\n\t\tpreloadedBlock.files.then((files) => {\n\t\t\tfiles.map(async (file) => {\n\t\t\t\tconst content = file.content.match(\n\t\t\t\t\t(v) => v,\n\t\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t\t);\n\n\t\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\t\tfile.name,\n\t\t\t\t\tpreloadedBlock.block,\n\t\t\t\t\tresolvedPaths,\n\t\t\t\t\toptions.cwd\n\t\t\t\t);\n\n\t\t\t\tconst updatedFile = transformRemoteContent({\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t},\n\t\t\t\t\tbiomeOptions,\n\t\t\t\t\tprettierOptions,\n\t\t\t\t\tconfig,\n\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\twatermark: getWatermark(preloadedBlock.block.sourceRepo.url),\n\t\t\t\t\tverbose,\n\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t}).then((remoteContent) => {\n\t\t\t\t\tif (remoteContent.isErr()) {\n\t\t\t\t\t\tprogram.error(color.red(remoteContent.unwrapErr()));\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdestination: destPath,\n\t\t\t\t\t\tcontent: remoteContent.unwrap(),\n\t\t\t\t\t\tblock: preloadedBlock.block,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\tupdatedFiles.push(updatedFile);\n\t\t\t});\n\t\t});\n\n\t\tupdatedBlocks.add(shortSpecifier);\n\t}\n\n\tif (updatedBlocks.size === 0) {\n\t\tlog.success('Nothing to update');\n\t} else {\n\t\tloading.start('Adding blocks');\n\n\t\t// wait for any remaining files to finish loading\n\t\tawait Promise.all(preloadedBlocks.map((p) => p.files));\n\n\t\tawait Promise.all(\n\t\t\tupdatedFiles.map(async (updatedFile) => {\n\t\t\t\tconst file = await updatedFile;\n\n\t\t\t\tconst folder = path.dirname(file.destination);\n\n\t\t\t\tif (!fs.existsSync(folder)) {\n\t\t\t\t\tverbose(`Creating directory ${color.bold(folder)}`);\n\n\t\t\t\t\tfs.mkdirSync(folder, {\n\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tverbose(`Writing to ${color.bold(file.destination)}`);\n\n\t\t\t\tfs.writeFileSync(file.destination, file.content);\n\t\t\t})\n\t\t);\n\n\t\tloading.stop(`Added blocks ${color.cyan(Array.from(updatedBlocks).join(', '))}`);\n\t}\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push('Import and use the blocks!');\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n}\n","import color from 'chalk';\nimport isUnicodeSupported from 'is-unicode-supported';\n\nconst unicode = isUnicodeSupported();\n\nconst s = (c: string, fallback: string) => (unicode ? c : fallback);\n\nexport const S_STEP_ACTIVE = s('◆', '*');\nexport const S_STEP_CANCEL = s('■', 'x');\nexport const S_STEP_ERROR = s('▲', 'x');\nexport const S_STEP_SUBMIT = s('◇', 'o');\nexport const S_INFO = s('●', '•');\nexport const S_SUCCESS = s('◆', '*');\nexport const S_WARN = s('▲', '!');\nexport const S_ERROR = s('■', 'x');\n\nexport const VERTICAL_LINE = color.gray(s('│', '|'));\nexport const HORIZONTAL_LINE = color.gray(s('─', '-'));\nexport const TOP_RIGHT_CORNER = color.gray(s('┐', '+'));\nexport const BOTTOM_RIGHT_CORNER = color.gray(s('┘', '+'));\nexport const JUNCTION_RIGHT = color.gray(s('├', '+'));\nexport const JUNCTION_TOP = color.gray(s('┬', '+'));\nexport const TOP_LEFT_CORNER = color.gray(s('┌', 'T'));\nexport const BOTTOM_LEFT_CORNER = color.gray(s('└', '-'));\n\nexport const WARN = color.bgRgb(245, 149, 66).black(' WARN ');\nexport const INFO = color.bgBlueBright.white(' INFO ');\nexport const ERROR = color.bgRedBright.white(' ERROR ');\n\nexport const JSREPO = color.hex('#f7df1e')('jsrepo');\nexport const JSREPO_DOT_COM = color.hex('#f7df1e').bold('jsrepo.com');\n","/*\n\tInstalled from github/ieedan/std\n*/\n\nimport { stripVTControlCharacters } from 'node:util';\n\n/** Maps the provided map into an array using the provided mapping function.\n *\n * @param map Map to be entered into an array\n * @param fn A mapping function to transform each pair into an item\n * @returns\n *\n * ## Usage\n * ```ts\n * console.log(map); // Map(5) { 0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1 }\n *\n * const arr = fromMap(map, (_, value) => value);\n *\n * console.log(arr); // [5, 4, 3, 2, 1]\n * ```\n */\nexport function fromMap<K, V, T>(map: Map<K, V>, fn: (key: K, value: V) => T): T[] {\n\tconst items: T[] = [];\n\n\tfor (const [key, value] of map) {\n\t\titems.push(fn(key, value));\n\t}\n\n\treturn items;\n}\n\n/** Calculates the sum of all elements in the array based on the provided function.\n *\n * @param arr Array of items to be summed.\n * @param fn Summing function\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * const total = sum([1, 2, 3, 4, 5], (num) => num);\n *\n * console.log(total); // 15\n * ```\n */\nexport function sum<T>(arr: T[], fn: (item: T) => number): number {\n\tlet total = 0;\n\n\tfor (const item of arr) {\n\t\ttotal = total + fn(item);\n\t}\n\n\treturn total;\n}\n\n/** Maps the provided array into a map\n *\n * @param arr Array of items to be entered into a map\n * @param fn A mapping function to transform each item into a key value pair\n * @returns\n *\n * ## Usage\n * ```ts\n * const map = toMap([5, 4, 3, 2, 1], (item, i) => [i, item]);\n *\n * console.log(map); // Map(5) { 0 => 5, 1 => 4, 2 => 3, 3 => 2, 4 => 1 }\n * ```\n */\nexport function toMap<T, K, V>(\n\tarr: T[],\n\tfn: (item: T, index: number) => [key: K, value: V]\n): Map<K, V> {\n\tconst map = new Map<K, V>();\n\n\tfor (let i = 0; i < arr.length; i++) {\n\t\tconst [key, value] = fn(arr[i], i);\n\n\t\tmap.set(key, value);\n\t}\n\n\treturn map;\n}\n\nexport function maxLength(arr: string[]): number {\n\tlet max = 0;\n\n\tfor (const item of arr) {\n\t\tconst str = stripVTControlCharacters(item);\n\t\tif (str.length > max) {\n\t\t\tmax = str.length;\n\t\t}\n\t}\n\n\treturn max;\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\nimport { stripVTControlCharacters as stripAsni } from 'node:util';\n\n/** Adds the `padWith` (default `' '`) to the string the amount of times specified by the `space` argument\n *\n * @param str String to add padding to\n * @param space Whitespace to add\n * @param padWith Character to use to pad the string\n * @returns\n *\n * ## Usage\n * ```ts\n * const padded = leftPad(\"Hello\", 3, \".\");\n *\n * console.log(padded); // '...Hello'\n * ```\n */\nexport function leftPad(str: string, space: number, padWith = ' '): string {\n\treturn padWith.repeat(space) + str;\n}\n\n/** Adds the `padWith` until the string length matches the `length`\n *\n * @param str\n * @param length\n * @param padWith\n *\n * ## Usage\n * ```ts\n * const padded = leftPadMin(\"1\", 3, \".\");\n *\n * console.log(padded); // '..1'\n * ```\n */\nexport function leftPadMin(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length)\n\t\tthrow new Error('String length is greater than the length provided.');\n\n\treturn padWith.repeat(length - strippedLength) + str;\n}\n\n/** Adds the `padWith` (default `' '`) to the string the amount of times specified by the `space` argument\n *\n * @param str String to add padding to\n * @param space Whitespace to add\n * @param padWith Character to use to pad the string\n * @returns\n *\n * ## Usage\n * ```ts\n * const padded = rightPad(\"Hello\", 3, \".\");\n *\n * console.log(padded); // 'Hello...'\n * ```\n */\nexport function rightPad(str: string, space: number, padWith = ' '): string {\n\treturn str + padWith.repeat(space);\n}\n\n/** Adds the `padWith` until the string length matches the `length`\n *\n * @param str\n * @param length\n * @param padWith\n *\n * ## Usage\n * ```ts\n * const padded = rightPadMin(\"1\", 3, \".\");\n *\n * console.log(padded); // '1..'\n * ```\n */\nexport function rightPadMin(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length)\n\t\tthrow new Error('String length is greater than the length provided.');\n\n\treturn str + padWith.repeat(length - strippedLength);\n}\n\n/** Pads the string with the `padWith` so that it appears in the center of a new string with the provided length.\n *\n * @param str\n * @param length\n * @param padWith\n * @returns\n *\n * ## Usage\n * ```ts\n * const str = \"Hello, World!\";\n *\n * const padded = centerPad(str, str.length + 4);\n *\n * console.log(padded); // ' Hello, World! '\n * ```\n */\nexport function centerPad(str: string, length: number, padWith = ' '): string {\n\tconst strippedLength = stripAsni(str).length;\n\n\tif (strippedLength > length) {\n\t\tthrow new Error('String length is greater than the length provided.');\n\t}\n\n\tconst overflow = length - strippedLength;\n\n\tconst paddingLeft = Math.floor(overflow / 2);\n\n\tconst paddingRight = Math.ceil(overflow / 2);\n\n\treturn padWith.repeat(paddingLeft) + str + padWith.repeat(paddingRight);\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\nimport os from 'node:os';\nimport { leftPadMin } from './pad';\n\n/** Regex used to split on new lines\n *\n * ```\n * /\\n|\\r\\n/g\n * ```\n */\nexport const NEW_LINE_REGEX = /\\n|\\r\\n/g;\n\n/** Splits str into an array of lines.\n *\n * @param str\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * lines.split(\"hello\\\\nhello\\nhello\"); // [\"hello\\\\nhello\", \"hello\"]\n * ```\n */\nexport function get(str: string): string[] {\n\treturn str.split(NEW_LINE_REGEX);\n}\n\nexport type Options = {\n\tlineNumbers: boolean;\n\tprefix: (line: number, lineCount: number) => string;\n};\n\n/** Joins the array of lines back into a string using the platform specific EOL.\n *\n * @param lines\n * @returns\n *\n * ## Usage\n *\n * ```ts\n * lines.join([\"1\", \"2\", \"3\"]); // \"1\\n2\\n3\" or on windows \"1\\r\\n2\\r\\n3\"\n *\n * // add line numbers\n * lines.join([\"import { } from '.'\", \"console.log('test')\"], { lineNumbers: true });\n * // 1 import { } from '.'\n * // 2 console.log('test')\n *\n * // add a custom prefix\n * lines.join([\"import { } from '.'\", \"console.log('test')\"], { prefix: () => \" + \" });\n * // + import { } from '.'\n * // + console.log('test')\n * ```\n */\nexport function join(\n\tlines: string[],\n\t{ lineNumbers = false, prefix }: Partial<Options> = {}\n): string {\n\tlet transformed = lines;\n\n\tif (lineNumbers) {\n\t\tconst length = lines.length.toString().length + 1;\n\n\t\ttransformed = transformed.map((line, i) => `${leftPadMin(`${i + 1}`, length)} ${line}`);\n\t}\n\n\tif (prefix !== undefined) {\n\t\ttransformed = transformed.map((line, i) => `${prefix(i, lines.length)}${line}`);\n\t}\n\n\treturn transformed.join(os.EOL);\n}\n","import type { Agent } from 'package-manager-detector';\n\nexport type Flags = {\n\t'no-workspace'?: string;\n\t'install-as-dev-dependency': string;\n};\n\nexport const bun: Flags = {\n\t'no-workspace': '--no-workspace',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const deno: Flags = {\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const npm: Flags = {\n\t'no-workspace': '--workspaces=false',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const pnpm: Flags = {\n\t'no-workspace': '--ignore-workspace',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const yarn: Flags = {\n\t'no-workspace': '--focus',\n\t'install-as-dev-dependency': '-D',\n};\n\nexport const flags: Record<Agent, Flags> = {\n\tbun,\n\tnpm,\n\tpnpm,\n\tdeno,\n\tyarn,\n\t'yarn@berry': yarn,\n\t'pnpm@6': pnpm,\n};\n","import { stripVTControlCharacters as stripAsni } from 'node:util';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport { cancel, confirm, intro, isCancel, log, select, spinner, text } from '@clack/prompts';\nimport boxen from 'boxen';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport { diffLines } from 'diff';\nimport { type Agent, detect, resolveCommand } from 'package-manager-detector';\nimport type * as prettier from 'prettier';\nimport semver from 'semver';\nimport { cursor, erase } from 'sisteransi';\nimport { type Message, type ModelName, models } from './ai';\nimport * as ascii from './ascii';\nimport type { ProjectConfig } from './config';\nimport { packageJson } from './context';\nimport { installDependencies } from './dependencies';\nimport { formatDiff } from './diff';\nimport { formatFile } from './files';\nimport { getLatestVersion } from './get-latest-version';\nimport { returnShouldInstall } from './package';\nimport * as persisted from './persisted';\n\nexport type Task = {\n\tloadingMessage: string;\n\tcompletedMessage: string;\n\trun: () => Promise<void>;\n};\n\ntype TaskOptions = {\n\tloading: ReturnType<typeof spinner>;\n};\n\nexport async function runTasks(tasks: Task[], { loading }: TaskOptions) {\n\tfor (const task of tasks) {\n\t\tloading.start(task.loadingMessage);\n\n\t\ttry {\n\t\t\tawait task.run();\n\t\t} catch (err) {\n\t\t\tloading.stop(`Error while ${task.loadingMessage}`);\n\t\t\tconsole.error(err);\n\t\t}\n\n\t\tloading.stop(task.completedMessage);\n\t}\n}\n\nexport type ConcurrentTask = {\n\trun: ({ message }: { message: (str: string) => void }) => Promise<void>;\n};\n\nexport type ConcurrentOptions = {\n\tloading: ReturnType<typeof spinner>;\n\tstartMessage: string;\n\tstopMessage: string;\n\ttasks: ConcurrentTask[];\n};\n\nexport async function runTasksConcurrently({\n\ttasks,\n\tstartMessage,\n\tstopMessage,\n\tloading,\n}: ConcurrentOptions) {\n\tloading.start(startMessage);\n\n\tawait Promise.all([...tasks.map((t) => t.run({ message: loading.message }))]);\n\n\tloading.stop(stopMessage);\n}\n\n/** A spinner compatible with verbose logging\n *\n * @param param0\n * @returns\n */\nfunction _spinner({\n\tverbose,\n}: { verbose?: (msg: string) => void } = {}): ReturnType<typeof spinner> {\n\tconst loading = spinner();\n\n\treturn {\n\t\tmessage: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.message(msg);\n\t\t\t}\n\t\t},\n\t\tstop: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.stop(msg);\n\t\t\t}\n\t\t},\n\t\tstart: (msg) => {\n\t\t\tif (verbose) {\n\t\t\t\tverbose(msg ?? '');\n\t\t\t} else {\n\t\t\t\tloading.start(msg);\n\t\t\t}\n\t\t},\n\t};\n}\n\nexport function nextSteps(steps: string[]): string {\n\tconst box = boxen(steps.join('\\n'), {\n\t\ttitle: 'Next Steps',\n\t\ttextAlignment: 'left',\n\t\tpadding: 1,\n\t\tborderColor: 'gray',\n\t\tborderStyle: {\n\t\t\ttopLeft: stripAsni(ascii.JUNCTION_RIGHT),\n\t\t\tbottomLeft: stripAsni(ascii.JUNCTION_RIGHT),\n\t\t\ttopRight: stripAsni(ascii.TOP_RIGHT_CORNER),\n\t\t\ttop: stripAsni(ascii.HORIZONTAL_LINE),\n\t\t\tbottom: stripAsni(ascii.HORIZONTAL_LINE),\n\t\t\tbottomRight: stripAsni(ascii.BOTTOM_RIGHT_CORNER),\n\t\t\tleft: stripAsni(ascii.VERTICAL_LINE),\n\t\t\tright: stripAsni(ascii.VERTICAL_LINE),\n\t\t},\n\t});\n\n\treturn `${ascii.VERTICAL_LINE}\\n${box}\\n`;\n}\n\nexport function truncatedList(items: string[], maxLength = 3) {\n\tconst truncated = items.slice(0, maxLength);\n\n\tconst remaining = items.length - truncated.length;\n\n\treturn `${truncated.join(', ')}${remaining > 0 ? ` and ${remaining} other(s)` : ''}`;\n}\n\nasync function newerVersionAvailable(name: string, oldVersion: string, newVersion: string) {\n\tconst pm = (await detect({ cwd: process.cwd() }))?.agent ?? 'npm';\n\n\tconst installCommand = resolveCommand(pm, 'global', ['jsrepo@latest']);\n\n\tconst text: string[] = [\n\t\t`Update available! ${color.redBright(oldVersion)} -> ${color.greenBright(newVersion)}`,\n\t\t`${color.cyan('Changelog')}: https://github.com/jsrepojs/jsrepo/releases/tag/${name}@${newVersion}`,\n\t\t`Run ${color.cyan(`${installCommand?.command} ${installCommand?.args.join(' ')}`)} to update!`,\n\t\t'',\n\t\t`${color.yellowBright('Star')} on GitHub for updates: https://github.com/jsrepojs/jsrepo`,\n\t];\n\n\tconst box = boxen(text.join('\\n'), {\n\t\tborderColor: 'gray',\n\t\tpadding: 1,\n\t\tmargin: 1,\n\t\ttextAlignment: 'center',\n\t});\n\n\treturn box;\n}\n\nasync function _intro() {\n\tconsole.clear();\n\n\tconst latestVersion = await getLatestVersion();\n\n\tif (latestVersion.isOk()) {\n\t\tif (semver.lt(packageJson.version, latestVersion.unwrap())) {\n\t\t\tconsole.info(\n\t\t\t\tawait newerVersionAvailable(\n\t\t\t\t\tpackageJson.name,\n\t\t\t\t\tpackageJson.version,\n\t\t\t\t\tlatestVersion.unwrap()\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tintro(\n\t\t`${color.bgHex('#f7df1e').black(` ${packageJson.name} `)}${color.gray(` v${packageJson.version} `)}`\n\t);\n}\n\ntype UpdateBlockOptions = {\n\tincoming: {\n\t\tcontent: string;\n\t\tpath: string;\n\t};\n\tcurrent: {\n\t\tcontent: string;\n\t\tpath: string;\n\t};\n\tconfig: {\n\t\tformatter: ProjectConfig['formatter'];\n\t\tprettierOptions: prettier.Options | null;\n\t\tbiomeOptions: PartialConfiguration | null;\n\t};\n\toptions: {\n\t\tyes: boolean;\n\t\tno: boolean;\n\t\texpand: boolean;\n\t\tmaxUnchanged: number;\n\t\tverbose?: (msg: string) => void;\n\t\tloading: ReturnType<typeof spinner>;\n\t};\n};\n\ntype UpdateBlockResult =\n\t| {\n\t\t\tapplyChanges: true;\n\t\t\tupdatedContent: string;\n\t }\n\t| {\n\t\t\tapplyChanges: false;\n\t };\n\nconst MODEL_PREFERENCE_KEY = 'model-preference';\n\nexport async function promptUpdateFile({\n\tincoming,\n\tcurrent,\n\tconfig,\n\toptions,\n}: UpdateBlockOptions): Promise<UpdateBlockResult> {\n\tconst storage = persisted.get();\n\n\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\tlet acceptedChanges = false;\n\n\tlet updatedContent = incoming.content;\n\n\tlet model: ModelName = storage.get(MODEL_PREFERENCE_KEY, 'Claude 3.5 Sonnet') as ModelName;\n\n\tlet messageHistory: Message[] = [];\n\n\twhile (true) {\n\t\tconst changes = diffLines(current.content, updatedContent);\n\n\t\t// print diff\n\t\tconst formattedDiff = formatDiff({\n\t\t\tfrom: incoming.path,\n\t\t\tto: current.path,\n\t\t\tchanges,\n\t\t\texpand: options.expand,\n\t\t\tmaxUnchanged: options.maxUnchanged,\n\t\t\tprefix: () => `${ascii.VERTICAL_LINE} `,\n\t\t\tonUnchanged: ({ from, to, prefix }) =>\n\t\t\t\t`${prefix?.() ?? ''}${color.cyan(from)} → ${color.gray(to)} ${color.gray('(unchanged)')}\\n`,\n\t\t\tintro: ({ from, to, changes, prefix }) => {\n\t\t\t\tconst totalChanges = changes.filter((a) => a.added || a.removed).length;\n\n\t\t\t\treturn `${prefix?.() ?? ''}${color.cyan(from)} → ${color.gray(to)} (${totalChanges} change${totalChanges === 1 ? '' : 's'})\\n${prefix?.() ?? ''}\\n`;\n\t\t\t},\n\t\t});\n\n\t\tprocess.stdout.write(formattedDiff);\n\n\t\t// if there are no changes then don't ask\n\t\tif (changes.length > 1 || current.content === '') {\n\t\t\tacceptedChanges = options.yes;\n\n\t\t\tif (!options.yes && !options.no) {\n\t\t\t\tconst confirmOptions = [\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Accept',\n\t\t\t\t\t\tvalue: 'accept',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tlabel: 'Reject',\n\t\t\t\t\t\tvalue: 'reject',\n\t\t\t\t\t},\n\t\t\t\t];\n\n\t\t\t\tif (messageHistory.length > 0) {\n\t\t\t\t\tconfirmOptions.push(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨ ${color.gray('(Iterate)')}`,\n\t\t\t\t\t\t\tvalue: 'update-iterate',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨ ${color.gray('(Start over)')}`,\n\t\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tconfirmOptions.push({\n\t\t\t\t\t\tlabel: `✨ ${color.yellow('Update with AI')} ✨`,\n\t\t\t\t\t\tvalue: 'update',\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// prompt the user\n\t\t\t\tconst confirmResult = await select({\n\t\t\t\t\tmessage: 'Accept changes?',\n\t\t\t\t\toptions: confirmOptions,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (confirmResult === 'update' || confirmResult === 'update-iterate') {\n\t\t\t\t\t// clear chat context\n\t\t\t\t\tif (confirmResult === 'update') {\n\t\t\t\t\t\tmessageHistory = [];\n\t\t\t\t\t}\n\n\t\t\t\t\t// prompt for model\n\t\t\t\t\tconst modelResult = await select({\n\t\t\t\t\t\tmessage: 'Select a model',\n\t\t\t\t\t\toptions: Object.keys(models).map((key) => ({\n\t\t\t\t\t\t\tlabel: key,\n\t\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tinitialValue: model,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isCancel(modelResult)) {\n\t\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (modelResult !== model) {\n\t\t\t\t\t\tstorage.set(MODEL_PREFERENCE_KEY, modelResult);\n\t\t\t\t\t}\n\n\t\t\t\t\tmodel = modelResult as ModelName;\n\n\t\t\t\t\tconst additionalInstructions = await text({\n\t\t\t\t\t\tmessage: 'Additional instructions:',\n\t\t\t\t\t\tdefaultValue: 'None',\n\t\t\t\t\t\tvalidate: (val) => {\n\t\t\t\t\t\t\t// don't care if no messages have been sent\n\t\t\t\t\t\t\tif (messageHistory.length === 0) return undefined;\n\n\t\t\t\t\t\t\tif (val.trim() === '') {\n\t\t\t\t\t\t\t\treturn 'Please provide additional context so that I know how I can improve.';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isCancel(additionalInstructions)) {\n\t\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst { content, prompt } = await models[model].updateFile({\n\t\t\t\t\t\t\toriginalFile: current,\n\t\t\t\t\t\t\tnewFile: {\n\t\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t\tconfirmResult === 'update-iterate'\n\t\t\t\t\t\t\t\t\t\t? updatedContent\n\t\t\t\t\t\t\t\t\t\t: incoming.content,\n\t\t\t\t\t\t\t\tpath: incoming.path,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tadditionalInstructions:\n\t\t\t\t\t\t\t\tadditionalInstructions !== 'None'\n\t\t\t\t\t\t\t\t\t? additionalInstructions\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\tloading: options.loading,\n\t\t\t\t\t\t\tverbose: options.verbose,\n\t\t\t\t\t\t\tmessages: messageHistory,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tupdatedContent = content;\n\n\t\t\t\t\t\t// add messages to history\n\t\t\t\t\t\tmessageHistory.push({ role: 'user', content: prompt });\n\t\t\t\t\t\tmessageHistory.push({ role: 'assistant', content: content });\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\toptions.loading.stop();\n\t\t\t\t\t\tlog.error(color.red(`Error getting completions: ${err}`));\n\t\t\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tupdatedContent = await formatFile({\n\t\t\t\t\t\tfile: {\n\t\t\t\t\t\t\tcontent: updatedContent,\n\t\t\t\t\t\t\tdestPath: current.path,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbiomeOptions: config.biomeOptions,\n\t\t\t\t\t\tprettierOptions: config.prettierOptions,\n\t\t\t\t\t\tformatter: config.formatter,\n\t\t\t\t\t});\n\n\t\t\t\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tacceptedChanges = confirmResult === 'accept';\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tbreak; // there were no changes or changes were automatically accepted\n\t}\n\n\tif (acceptedChanges) {\n\t\treturn { applyChanges: true, updatedContent };\n\t}\n\n\treturn { applyChanges: false };\n}\n\ntype InstallDependenciesOptions = {\n\tyes: boolean;\n\tno?: boolean;\n\tcwd: string;\n\tpm: Agent;\n\tignoreWorkspace?: boolean;\n};\n\ntype InstallDependenciesResult = {\n\t/** True if dependencies were installed */\n\tinstalled: boolean;\n\tdependencies: Set<string>;\n\tdevDependencies: Set<string>;\n};\n\nexport async function promptInstallDependencies(\n\tdeps: Set<string>,\n\tdevDeps: Set<string>,\n\t{ yes, no = false, cwd, pm, ignoreWorkspace = false }: InstallDependenciesOptions\n): Promise<InstallDependenciesResult> {\n\t// check if dependencies are already installed\n\tconst { dependencies, devDependencies } = returnShouldInstall(deps, devDeps, { cwd });\n\n\tconst hasDependencies = dependencies.size > 0 || devDependencies.size > 0;\n\n\tif (hasDependencies) {\n\t\tlet install = yes;\n\t\tif (!yes && !no) {\n\t\t\tconst result = await confirm({\n\t\t\t\tmessage: 'Would you like to install dependencies?',\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\n\t\t\tif (isCancel(result)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tinstall = result;\n\t\t}\n\n\t\tif (install) {\n\t\t\tif (dependencies.size > 0) {\n\t\t\t\tawait installDependencies({\n\t\t\t\t\tpm,\n\t\t\t\t\tdeps: Array.from(dependencies),\n\t\t\t\t\tdev: false,\n\t\t\t\t\tcwd,\n\t\t\t\t\tignoreWorkspace,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (devDependencies.size > 0) {\n\t\t\t\tawait installDependencies({\n\t\t\t\t\tpm,\n\t\t\t\t\tdeps: Array.from(devDependencies),\n\t\t\t\t\tdev: true,\n\t\t\t\t\tcwd,\n\t\t\t\t\tignoreWorkspace,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn { installed: true, dependencies, devDependencies };\n\t\t}\n\t}\n\n\treturn { installed: false, dependencies, devDependencies };\n}\n\n// From sveltejs/cli https://github.com/sveltejs/cli/blob/main/packages/clack-prompts/index.ts#L606\nexport function taskLog(title: string) {\n\tconst BAR = color.dim(ascii.VERTICAL_LINE);\n\tconst ACTIVE = color.green(ascii.S_STEP_ACTIVE);\n\tconst SUCCESS = color.green(ascii.S_SUCCESS);\n\tconst ERROR = color.red(ascii.S_ERROR);\n\n\t// heading\n\tprocess.stdout.write(`${BAR}\\n`);\n\tprocess.stdout.write(`${ACTIVE} ${title}\\n`);\n\n\tlet output = '';\n\tlet frame = '';\n\n\t// clears previous output\n\tconst clear = (eraseTitle = false): void => {\n\t\tif (!frame) return;\n\t\tconst terminalWidth = process.stdout.columns;\n\t\tconst frameHeight = frame.split('\\n').reduce((height, line) => {\n\t\t\t// accounts for line wraps\n\t\t\treturn height + Math.ceil(line.length / terminalWidth);\n\t\t}, 0);\n\t\tconst lines = frameHeight + (eraseTitle ? 1 : 0);\n\n\t\tprocess.stdout.write(cursor.up(lines));\n\t\tprocess.stdout.write(erase.down());\n\t};\n\n\t// logs the output\n\tconst print = (limit = 0): void => {\n\t\tconst lines = output.split('\\n').slice(-limit);\n\t\t// reset frame\n\t\tframe = '';\n\t\tfor (const line of lines) {\n\t\t\tframe += `${BAR} ${line}\\n`;\n\t\t}\n\t\tprocess.stdout.write(color.dim(frame));\n\t};\n\n\treturn {\n\t\tset text(data: string) {\n\t\t\tclear();\n\t\t\toutput += data;\n\t\t\t// half the height of the terminal\n\t\t\tconst frameHeight = Math.ceil(process.stdout.rows / 2);\n\t\t\tprint(frameHeight);\n\t\t},\n\t\tfail(message: string): void {\n\t\t\tclear(true);\n\t\t\tprocess.stdout.write(`${ERROR} ${message}\\n`);\n\t\t\tprint(); // log the output on failure\n\t\t},\n\t\tsuccess(message: string): void {\n\t\t\tclear(true);\n\t\t\tprocess.stdout.write(`${SUCCESS} ${message}\\n`);\n\t\t},\n\t};\n}\n\nexport { _intro as intro, _spinner as spinner };\n","import Conf from 'conf';\n\nfunction get() {\n\treturn new Conf({ projectName: 'jsrepo' });\n}\n\nexport { get };\n","import type Conf from 'conf';\nimport * as persisted from './persisted';\n\nconst HTTP_REGISTRY_LIST_KEY = 'http-registries-w-tokens';\n\nexport class TokenManager {\n\t#storage: Conf;\n\n\tconstructor(storage?: Conf) {\n\t\tthis.#storage = storage ?? persisted.get();\n\t}\n\n\tprivate getKey(name: string) {\n\t\treturn `${name}-token`.toLowerCase();\n\t}\n\n\tget(name: string): string | undefined {\n\t\tconst key = this.getKey(name);\n\n\t\tconst token = this.#storage.get(key, undefined) as string | undefined;\n\n\t\tif (name === 'jsrepo') {\n\t\t\treturn token ?? process.env.JSREPO_TOKEN;\n\t\t}\n\n\t\treturn token;\n\t}\n\n\tset(name: string, secret: string) {\n\t\tif (name.startsWith('http')) {\n\t\t\tlet registries = this.getHttpRegistriesWithTokens();\n\n\t\t\tconst registry = name.slice(5);\n\n\t\t\tif (!registries) {\n\t\t\t\tregistries = [];\n\t\t\t}\n\n\t\t\tif (!registries.includes(registry)) registries.push(registry);\n\n\t\t\tthis.#storage.set(HTTP_REGISTRY_LIST_KEY, registries);\n\t\t}\n\n\t\tconst key = this.getKey(name);\n\n\t\tthis.#storage.set(key, secret);\n\t}\n\n\tdelete(name: string) {\n\t\tif (name.startsWith('http')) {\n\t\t\tlet registries = this.getHttpRegistriesWithTokens();\n\n\t\t\tconst registry = name.slice(5);\n\n\t\t\tconst index = registries.indexOf(registry);\n\n\t\t\tif (index !== -1) {\n\t\t\t\tregistries = [...registries.slice(0, index), ...registries.slice(index + 1)];\n\t\t\t}\n\n\t\t\tthis.#storage.set(HTTP_REGISTRY_LIST_KEY, registries);\n\t\t}\n\n\t\tconst key = this.getKey(name);\n\n\t\tthis.#storage.delete(key);\n\t}\n\n\tgetHttpRegistriesWithTokens(): string[] {\n\t\tconst registries = this.#storage.get(HTTP_REGISTRY_LIST_KEY);\n\n\t\tif (!registries) return [];\n\n\t\treturn registries as string[];\n\t}\n}\n","import Anthropic from '@anthropic-ai/sdk';\nimport { cancel, isCancel, password, type spinner } from '@clack/prompts';\nimport ollama from 'ollama';\nimport OpenAI from 'openai';\nimport * as lines from './blocks/ts/lines';\nimport { TokenManager } from './token-manager';\n\ntype File = {\n\tpath: string;\n\tcontent: string;\n};\n\nexport type Message = {\n\trole: 'assistant' | 'user';\n\tcontent: string;\n};\n\nexport type UpdateFileResult = {\n\tcontent: string;\n\t/** Prompt constructed by the user (for context) */\n\tprompt: string;\n};\n\nexport interface Model {\n\tupdateFile: (opts: {\n\t\toriginalFile: File;\n\t\tnewFile: File;\n\t\tloading: ReturnType<typeof spinner>;\n\t\tadditionalInstructions?: string;\n\t\tmessages?: Message[];\n\t\tverbose?: (msg: string) => void;\n\t}) => Promise<UpdateFileResult>;\n}\n\nexport type ModelName = 'Claude 3.7 Sonnet' | 'OpenAI o3-mini' | 'Phi4';\n\ntype Prompt = {\n\tsystem: string;\n\tmessage: string;\n};\n\nconst models: Record<ModelName, Model> = {\n\t'Claude 3.7 Sonnet': {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tconst apiKey = await getApiKey('Anthropic');\n\n\t\t\tif (!verbose) loading.start(`Asking ${'Claude 3.7 Sonnet'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(\n\t\t\t\t`Prompting ${'Claude 3.7 Sonnet'} with:\\n${JSON.stringify(prompt, null, '\\t')}`\n\t\t\t);\n\n\t\t\tconst text = await getNextCompletionAnthropic({\n\t\t\t\tmodel: 'claude-3-7-sonnet-latest',\n\t\t\t\tprompt,\n\t\t\t\tapiKey,\n\t\t\t\tmessages,\n\t\t\t\tmaxTokens: (originalFile.content.length + newFile.content.length) * 2,\n\t\t\t});\n\n\t\t\tif (!verbose) loading.stop(`${'Claude 3.7 Sonnet'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n\t'OpenAI o3-mini': {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tconst apiKey = await getApiKey('OpenAI');\n\n\t\t\tif (!verbose) loading.start(`Asking ${'OpenAI o3-mini'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(`Prompting ${'OpenAI o3-mini'} with:\\n${JSON.stringify(prompt, null, '\\t')}`);\n\n\t\t\tconst text = await getNextCompletionOpenAI({\n\t\t\t\tmodel: 'o3-mini',\n\t\t\t\tprompt,\n\t\t\t\tapiKey,\n\t\t\t\tmessages,\n\t\t\t\tmaxTokens: (originalFile.content.length + newFile.content.length) * 2,\n\t\t\t});\n\n\t\t\tif (!verbose) loading.stop(`${'OpenAI o3-mini'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n\tPhi4: {\n\t\tupdateFile: async ({\n\t\t\toriginalFile,\n\t\t\tnewFile,\n\t\t\tloading,\n\t\t\tverbose,\n\t\t\tadditionalInstructions,\n\t\t\tmessages,\n\t\t}) => {\n\t\t\tif (!verbose) loading.start(`Asking ${'Phi4'}`);\n\n\t\t\tconst prompt = createUpdatePrompt({\n\t\t\t\toriginalFile,\n\t\t\t\tnewFile,\n\t\t\t\tadditionalInstructions,\n\t\t\t\trePrompt: messages !== undefined && messages.length > 0,\n\t\t\t});\n\n\t\t\tverbose?.(`Prompting ${'Phi4'} with:\\n${JSON.stringify(prompt, null, '\\t')}`);\n\n\t\t\tconst text = await getNextCompletionOllama({ model: 'phi4', prompt, messages });\n\n\t\t\tif (!verbose) loading.stop(`${'Phi4'} updated the file`);\n\n\t\t\tif (!text) return { content: newFile.content, prompt: prompt.message };\n\n\t\t\treturn { content: unwrapCodeFromQuotes(text), prompt: prompt.message };\n\t\t},\n\t},\n};\n\nasync function getNextCompletionOpenAI({\n\tprompt,\n\tmaxTokens,\n\tmodel,\n\tapiKey,\n\tmessages,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmaxTokens: number;\n\tmodel: OpenAI.Chat.ChatModel;\n\tapiKey: string;\n}): Promise<string | null> {\n\tconst openai = new OpenAI({ apiKey });\n\n\tconst msg = await openai.chat.completions.create({\n\t\tmodel,\n\t\tmax_completion_tokens: maxTokens,\n\t\tmessages: [\n\t\t\t{\n\t\t\t\trole: 'system',\n\t\t\t\tcontent: prompt.system,\n\t\t\t},\n\t\t\t...(messages ?? []),\n\t\t\t{\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\tconst first = msg.choices[0];\n\n\tif (first.message.content === null) return null;\n\n\treturn first.message.content;\n}\n\nasync function getNextCompletionAnthropic({\n\tprompt,\n\tmessages,\n\tmaxTokens,\n\tmodel,\n\tapiKey,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmaxTokens: number;\n\tmodel: Anthropic.Messages.Model;\n\tapiKey: string;\n}): Promise<string | null> {\n\tconst anthropic = new Anthropic({ apiKey });\n\n\t// didn't want to do it this way but I couldn't get `.map` to work\n\tconst history: Anthropic.Messages.MessageParam[] = [];\n\n\t// add history\n\tif (messages) {\n\t\tfor (const message of messages) {\n\t\t\thistory.push({\n\t\t\t\trole: message.role,\n\t\t\t\tcontent: [{ type: 'text', text: message.content }],\n\t\t\t});\n\t\t}\n\t}\n\n\t// add new message\n\thistory.push({\n\t\trole: 'user',\n\t\tcontent: [\n\t\t\t{\n\t\t\t\ttype: 'text',\n\t\t\t\ttext: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\tconst msg = await anthropic.messages.create({\n\t\tmodel,\n\t\tmax_tokens: Math.min(maxTokens, 8192),\n\t\ttemperature: 0.5,\n\t\tsystem: prompt.system,\n\t\tmessages: history,\n\t});\n\n\tconst first = msg.content[0];\n\n\t// if we don't get it in the format you want just return the new file\n\tif (first.type !== 'text') return null;\n\n\treturn first.text;\n}\n\nasync function getNextCompletionOllama({\n\tprompt,\n\tmessages,\n\tmodel,\n}: {\n\tprompt: Prompt;\n\tmessages?: Message[];\n\tmodel: string;\n}): Promise<string | null> {\n\tconst resp = await ollama.chat({\n\t\tmodel,\n\t\tmessages: [\n\t\t\t{\n\t\t\t\trole: 'system',\n\t\t\t\tcontent: prompt.system,\n\t\t\t},\n\t\t\t...(messages ?? []),\n\t\t\t{\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: prompt.message,\n\t\t\t},\n\t\t],\n\t});\n\n\treturn resp.message.content;\n}\n\nfunction createUpdatePrompt({\n\toriginalFile,\n\tnewFile,\n\tadditionalInstructions,\n\trePrompt,\n}: {\n\toriginalFile: File;\n\tnewFile: File;\n\tadditionalInstructions?: string;\n\trePrompt: boolean;\n}): Prompt {\n\treturn {\n\t\tsystem: 'You will merge two files provided by the user. You will respond only with the resulting code. DO NOT format the code with markdown, DO NOT put the code inside of triple quotes, only return the code as a raw string. DO NOT make unnecessary changes.',\n\t\tmessage: rePrompt\n\t\t\t? (additionalInstructions ?? '')\n\t\t\t: `\nThis is my current file ${originalFile.path}:\n<code>\n${originalFile.content}\n</code>\n\t\nThis is the file that has changes I want to update with ${newFile.path}:\n<code>\n${newFile.content}\n</code>${additionalInstructions ? `<additional-instructions>${additionalInstructions}</additional-instructions>` : ''}\n\t`,\n\t};\n}\n\n/** The AI isn't always that smart and likes to wrap the code in quotes even though I beg it not to.\n * This function attempts to remove the quotes.\n */\nexport function unwrapCodeFromQuotes(quoted: string): string {\n\tlet code = quoted.trim();\n\n\tif (code.startsWith('```')) {\n\t\t// takes out the entire first line\n\t\t// this is because often a language will come after the triple quotes\n\t\tcode = lines.get(code).slice(1).join('\\n').trim();\n\t}\n\n\tif (code.endsWith('```')) {\n\t\tconst l = lines.get(code);\n\t\tcode = l\n\t\t\t.slice(0, l.length - 1)\n\t\t\t.join('\\n')\n\t\t\t.trim();\n\t}\n\n\treturn code;\n}\n\n/** Attempts to get the cached api key if it can't it will prompt the user\n *\n * @param name\n * @returns\n */\nasync function getApiKey(name: 'OpenAI' | 'Anthropic'): Promise<string> {\n\tconst storage = new TokenManager();\n\n\tlet apiKey = storage.get(name);\n\n\tif (!apiKey) {\n\t\t// prompt for api key\n\t\tconst result = await password({\n\t\t\tmessage: `Paste your ${name} API key:`,\n\t\t\tvalidate(value) {\n\t\t\t\tif (value.trim() === '') return 'Please provide an API key';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tapiKey = result;\n\t}\n\n\tstorage.set(name, apiKey);\n\n\treturn apiKey;\n}\n\nexport { models };\n","import pkg from '../../package.json';\nimport type { PackageJson } from './package';\n\nexport const packageJson = pkg as PackageJson;\n","import color from 'chalk';\nimport { type Change, diffChars } from 'diff';\nimport * as array from './blocks/ts/array';\nimport * as lines from './blocks/ts/lines';\nimport { leftPadMin } from './blocks/ts/pad';\n\ntype Options = {\n\t/** The source file */\n\tfrom: string;\n\t/** The destination file */\n\tto: string;\n\t/** The changes to the file */\n\tchanges: Change[];\n\t/** Expands all lines to show the entire file */\n\texpand: boolean;\n\t/** Maximum lines to show before collapsing */\n\tmaxUnchanged: number;\n\t/** Color the removed lines */\n\tcolorRemoved?: (line: string) => string;\n\t/** Color the added lines */\n\tcolorAdded?: (line: string) => string;\n\t/** Color the removed chars */\n\tcolorCharsRemoved?: (line: string) => string;\n\t/** Color the added chars */\n\tcolorCharsAdded?: (line: string) => string;\n\t/** Prefixes each line with the string returned from this function. */\n\tprefix: () => string;\n\tintro: (options: Options) => string;\n\tonUnchanged: (options: Options) => string;\n};\n\n/** Check if a character is whitespace\n *\n * @param str\n * @returns\n */\nfunction isWhitespace(str: string) {\n\treturn /^\\s+$/g.test(str);\n}\n\n/** We need to add a newline at the end of each change to make sure\n * the next change can start correctly. So we take off just 1.\n *\n * @param str\n * @returns\n */\nfunction trimSingleNewLine(str: string): string {\n\tlet i = str.length - 1;\n\twhile (isWhitespace(str[i]) && i >= 0) {\n\t\tif (str[i] === '\\n') {\n\t\t\tif (str[i - 1] === '\\r') {\n\t\t\t\treturn str.slice(0, i - 1);\n\t\t\t}\n\n\t\t\treturn str.slice(0, i);\n\t\t}\n\n\t\ti--;\n\t}\n\n\treturn str;\n}\n\nfunction formatDiff({\n\tfrom,\n\tto,\n\tchanges,\n\texpand = false,\n\tmaxUnchanged = 5,\n\tcolorRemoved = color.redBright,\n\tcolorAdded = color.greenBright,\n\tcolorCharsRemoved = color.bgRedBright,\n\tcolorCharsAdded = color.bgGreenBright,\n\tprefix,\n\tonUnchanged,\n\tintro,\n}: Options): string {\n\tlet result = '';\n\n\tconst length = array.sum(changes, (change) => change.count ?? 0).toString().length + 1;\n\n\tlet lineOffset = 0;\n\n\tif (changes.length === 1 && !changes[0].added && !changes[0].removed) {\n\t\treturn onUnchanged({\n\t\t\tfrom,\n\t\t\tto,\n\t\t\tchanges,\n\t\t\texpand,\n\t\t\tmaxUnchanged,\n\t\t\tcolorAdded,\n\t\t\tcolorRemoved,\n\t\t\tprefix,\n\t\t\tonUnchanged,\n\t\t\tintro,\n\t\t});\n\t}\n\n\tresult += intro({\n\t\tfrom,\n\t\tto,\n\t\tchanges,\n\t\texpand,\n\t\tmaxUnchanged,\n\t\tcolorAdded,\n\t\tcolorRemoved,\n\t\tprefix,\n\t\tonUnchanged,\n\t\tintro,\n\t});\n\n\t/** Provides the line number prefix */\n\tconst linePrefix = (line: number): string =>\n\t\tcolor.gray(`${prefix?.() ?? ''}${leftPadMin(`${line + 1 + lineOffset} `, length)} `);\n\n\tfor (let i = 0; i < changes.length; i++) {\n\t\tconst change = changes[i];\n\n\t\tconst hasPreviousChange = changes[i - 1]?.added || changes[i - 1]?.removed;\n\t\tconst hasNextChange = changes[i + 1]?.added || changes[i + 1]?.removed;\n\n\t\tif (!change.added && !change.removed) {\n\t\t\t// show collapsed\n\t\t\tif (!expand && change.count !== undefined && change.count > maxUnchanged) {\n\t\t\t\tconst prevLineOffset = lineOffset;\n\t\t\t\tconst ls = lines.get(trimSingleNewLine(change.value));\n\n\t\t\t\tlet shownLines = 0;\n\n\t\t\t\tif (hasNextChange) shownLines += maxUnchanged;\n\t\t\t\tif (hasPreviousChange) shownLines += maxUnchanged;\n\n\t\t\t\t// just show all if we are going to show more than we have\n\t\t\t\tif (shownLines >= ls.length) {\n\t\t\t\t\tresult += `${lines.join(ls, {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t\tlineOffset += ls.length;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// this writes the top few lines\n\t\t\t\tif (hasPreviousChange) {\n\t\t\t\t\tresult += `${lines.join(ls.slice(0, maxUnchanged), {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t}\n\n\t\t\t\tif (ls.length > shownLines) {\n\t\t\t\t\tconst count = ls.length - shownLines;\n\t\t\t\t\tresult += `${lines.join(\n\t\t\t\t\t\tlines.get(\n\t\t\t\t\t\t\tcolor.gray(\n\t\t\t\t\t\t\t\t`+ ${count} more unchanged (${color.italic('-E to expand')})`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t),\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tprefix: () => `${prefix?.() ?? ''}${leftPadMin(' ', length)} `,\n\t\t\t\t\t\t}\n\t\t\t\t\t)}\\n`;\n\t\t\t\t}\n\n\t\t\t\tif (hasNextChange) {\n\t\t\t\t\tlineOffset = lineOffset + ls.length - maxUnchanged;\n\t\t\t\t\tresult += `${lines.join(ls.slice(ls.length - maxUnchanged), {\n\t\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t\t})}\\n`;\n\t\t\t\t}\n\n\t\t\t\t// resets the line offset\n\t\t\t\tlineOffset = prevLineOffset + change.count;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// show expanded\n\t\t\tresult += `${lines.join(lines.get(trimSingleNewLine(change.value)), {\n\t\t\t\tprefix: linePrefix,\n\t\t\t})}\\n`;\n\t\t\tlineOffset += change.count ?? 0;\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst colorLineChange = (change: Change) => {\n\t\t\tif (change.added) {\n\t\t\t\treturn colorAdded(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\tif (change.removed) {\n\t\t\t\treturn colorRemoved(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\treturn change.value;\n\t\t};\n\n\t\tconst colorCharChange = (change: Change) => {\n\t\t\tif (change.added) {\n\t\t\t\treturn colorCharsAdded(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\tif (change.removed) {\n\t\t\t\treturn colorCharsRemoved(trimSingleNewLine(change.value));\n\t\t\t}\n\n\t\t\treturn change.value;\n\t\t};\n\n\t\tif (\n\t\t\tchange.removed &&\n\t\t\tchange.count === 1 &&\n\t\t\tchanges[i + 1]?.added &&\n\t\t\tchanges[i + 1]?.count === 1\n\t\t) {\n\t\t\t// single line change\n\t\t\tconst diffedChars = diffChars(change.value, changes[i + 1].value);\n\n\t\t\tconst sentence = diffedChars.map((chg) => colorCharChange(chg)).join('');\n\n\t\t\tresult += `${linePrefix(0)}${sentence}`;\n\n\t\t\tlineOffset += 1;\n\n\t\t\ti++;\n\t\t} else {\n\t\t\tif (isWhitespace(change.value)) {\n\t\t\t\t// adds some spaces to make sure that you can see the change\n\t\t\t\tresult += `${lines.join(lines.get(colorCharChange(change)), {\n\t\t\t\t\tprefix: (line) =>\n\t\t\t\t\t\t`${linePrefix(line)}${colorCharChange({ removed: true, value: ' ', added: false })}`,\n\t\t\t\t})}\\n`;\n\n\t\t\t\tif (!change.removed) {\n\t\t\t\t\tlineOffset += change.count ?? 0;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tresult += `${lines.join(lines.get(colorLineChange(change)), {\n\t\t\t\t\tprefix: linePrefix,\n\t\t\t\t})}\\n`;\n\n\t\t\t\tif (!change.removed) {\n\t\t\t\t\tlineOffset += change.count ?? 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!result.endsWith('\\n')) {\n\t\tresult = result += '\\n';\n\t}\n\n\treturn result;\n}\n\nexport { formatDiff };\n","import mfFetch from 'make-fetch-happen';\nimport path from 'pathe';\n\n/** Fetch method used for (i)nternal consumption */\nexport const iFetch = mfFetch.defaults({ cachePath: path.join(import.meta.dirname, 'cache') });\n","import { Err, Ok, type Result } from './blocks/ts/result';\nimport { iFetch } from './fetch';\nimport type { Package } from './parse-package-name';\nimport * as persisted from './persisted';\n\nconst LATEST_VERSION_KEY = 'latest-version';\nconst EXPIRATION_TIME = 60 * 60 * 1000; // 1 hour\n\ntype LatestVersion = {\n\texpiration: number;\n\tversion: string;\n};\n\n/** Checks for the latest version from the github repository. Will cache results for up to 1 hour. */\nexport async function getLatestVersion({\n\tnoCache = false,\n}: { noCache?: boolean } = {}): Promise<Result<string, string>> {\n\ttry {\n\t\t// handle caching\n\t\tconst storage = persisted.get();\n\n\t\tlet version: string;\n\n\t\tif (!noCache) {\n\t\t\tconst latestVersion = storage.get(LATEST_VERSION_KEY) as LatestVersion | null;\n\n\t\t\tif (latestVersion) {\n\t\t\t\tif (latestVersion.expiration > Date.now()) {\n\t\t\t\t\tversion = latestVersion.version;\n\n\t\t\t\t\treturn Ok(version);\n\t\t\t\t}\n\n\t\t\t\tstorage.delete(LATEST_VERSION_KEY);\n\t\t\t}\n\t\t}\n\n\t\tconst response = await iFetch(\n\t\t\t'https://raw.githubusercontent.com/jsrepojs/jsrepo/refs/heads/main/packages/cli/package.json',\n\t\t\t{\n\t\t\t\ttimeout: 1000,\n\t\t\t}\n\t\t);\n\n\t\tif (!response.ok) {\n\t\t\treturn Err('Error getting version');\n\t\t}\n\n\t\tconst { version: ver } = (await response.json()) as Package;\n\n\t\tversion = ver;\n\n\t\tstorage.set(LATEST_VERSION_KEY, {\n\t\t\texpiration: Date.now() + EXPIRATION_TIME,\n\t\t\tversion,\n\t\t} satisfies LatestVersion);\n\n\t\treturn Ok(version);\n\t} catch (err) {\n\t\treturn Err(`Error getting version: ${err}`);\n\t}\n}\n","/**\n * Adapted from https://github.com/egoist/parse-package-name/blob/main/src/index.ts\n * @module\n */\n\nimport { Err, Ok } from './blocks/ts/result';\n\n// Parsed a scoped package name into name, version, and path.\nconst RE_SCOPED = /^(@[^\\/]+\\/[^@\\/]+)(?:@([^\\/]+))?(\\/.*)?$/;\n// Parsed a non-scoped package name into name, version, path\nconst RE_NON_SCOPED = /^([^@\\/]+)(?:@([^\\/]+))?(\\/.*)?$/;\n\nexport type Package = {\n\t/** Name of the package as it would be installed from npm */\n\tname: string;\n\t/** Version of the package */\n\tversion: string;\n\tpath: string;\n};\n\nexport function parsePackageName(input: string) {\n\tconst m = RE_SCOPED.exec(input) || RE_NON_SCOPED.exec(input);\n\n\tif (!m) return Err(`invalid package name: ${input}`);\n\n\treturn Ok({\n\t\tname: m[1] || '',\n\t\tversion: m[2] || undefined,\n\t\tpath: m[3] || '',\n\t});\n}\n","import fs from 'node:fs';\nimport path from 'pathe';\nimport semver from 'semver';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { parsePackageName } from './parse-package-name';\n\nfunction findNearestPackageJson(startDir: string, until: string): string | undefined {\n\tconst packagePath = path.join(startDir, 'package.json');\n\n\tif (fs.existsSync(packagePath)) return packagePath;\n\n\tif (startDir === until) return undefined;\n\n\tconst segments = startDir.split(/[\\/\\\\]/);\n\n\treturn findNearestPackageJson(segments.slice(0, segments.length - 1).join('/'), until);\n}\n\nexport type PackageJson = {\n\tname: string;\n\tversion: string;\n\tdescription: string;\n\tscripts: Record<string, string>;\n\tdependencies: Record<string, string>;\n\tdevDependencies: Record<string, string>;\n};\n\nfunction getPackage(path: string): Result<Partial<PackageJson>, string> {\n\tif (!fs.existsSync(path)) return Err(`${path} doesn't exist`);\n\n\tconst contents = fs.readFileSync(path).toString();\n\n\ttry {\n\t\treturn Ok(JSON.parse(contents));\n\t} catch (err) {\n\t\treturn Err(`Error reading package.json: ${err}`);\n\t}\n}\n\nexport function cleanVersion(version: string) {\n\tif (version[0] === '^') {\n\t\treturn version.slice(1);\n\t}\n\n\treturn version;\n}\n\n/** Returns only the dependencies that should be installed based on what is already in the package.json */\nfunction returnShouldInstall(\n\tdependencies: Set<string>,\n\tdevDependencies: Set<string>,\n\t{ cwd }: { cwd: string }\n): { devDependencies: Set<string>; dependencies: Set<string> } {\n\t// don't mutate originals\n\tconst tempDeps = dependencies;\n\tconst tempDevDeps = devDependencies;\n\n\tconst packageResult = getPackage(path.join(cwd, 'package.json'));\n\n\tif (!packageResult.isErr()) {\n\t\tconst pkg = packageResult.unwrap();\n\n\t\tif (pkg.dependencies) {\n\t\t\tfor (const dep of tempDeps) {\n\t\t\t\t// this was already parsed when building\n\t\t\t\tconst { name, version } = parsePackageName(dep).unwrap();\n\n\t\t\t\tconst foundDep = pkg.dependencies[name];\n\n\t\t\t\t// if version isn't pinned and dep exists delete\n\t\t\t\tif (version === undefined && foundDep) {\n\t\t\t\t\ttempDeps.delete(dep);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// if the version installed satisfies the requested version remove the dep\n\t\t\t\tif (foundDep && semver.satisfies(cleanVersion(foundDep), version!)) {\n\t\t\t\t\ttempDeps.delete(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (pkg.devDependencies) {\n\t\t\tfor (const dep of tempDevDeps) {\n\t\t\t\t// this was already parsed when building\n\t\t\t\tconst { name, version } = parsePackageName(dep).unwrap();\n\n\t\t\t\tconst foundDep = pkg.devDependencies[name];\n\n\t\t\t\t// if version isn't pinned and dep exists delete\n\t\t\t\tif (version === undefined && foundDep) {\n\t\t\t\t\ttempDevDeps.delete(dep);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// if the version installed satisfies the requested version remove the dep\n\t\t\t\tif (foundDep && semver.satisfies(cleanVersion(foundDep), version!)) {\n\t\t\t\t\ttempDevDeps.delete(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { dependencies: tempDeps, devDependencies: tempDevDeps };\n}\n\nexport { findNearestPackageJson, getPackage, returnShouldInstall };\n","import color from 'chalk';\nimport { program } from 'commander';\nimport { type Agent, resolveCommand } from 'package-manager-detector';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport { flags } from './blocks/package-managers/flags';\nimport type { ProjectConfig } from './config';\nimport { taskLog } from './prompts';\n\nexport type Options = {\n\tpm: Agent;\n\tdeps: string[];\n\t/** Install as devDependency */\n\tdev: boolean;\n\tcwd: string;\n\tignoreWorkspace?: boolean;\n};\n\n/** Installs the provided dependencies using the provided package manager\n *\n * @param param0\n * @returns\n */\nexport async function installDependencies({\n\tpm,\n\tdeps,\n\tdev,\n\tcwd,\n\tignoreWorkspace = false,\n}: Options) {\n\tconst args = [...deps];\n\n\tif (dev) {\n\t\targs.push(flags[pm]['install-as-dev-dependency']);\n\t}\n\n\tconst noWorkspace = flags[pm]['no-workspace'];\n\n\tif (ignoreWorkspace && noWorkspace) {\n\t\targs.push(noWorkspace);\n\t}\n\n\tconst add = resolveCommand(pm, 'add', args);\n\n\tif (add == null) {\n\t\tprogram.error(color.red(`Could not resolve add command for '${pm}'.`));\n\t}\n\n\tconst task = taskLog(`Installing dependencies with ${pm}...`);\n\n\ttry {\n\t\tconst proc = x(add.command, [...add.args], { nodeOptions: { cwd } });\n\n\t\tfor await (const line of proc) {\n\t\t\ttask.text = `${line}\\n`;\n\t\t}\n\n\t\ttask.success(`Installed ${color.cyan(deps.join(', '))}`);\n\t} catch {\n\t\ttask.fail('Failed to install dependencies');\n\t\tprocess.exit(2);\n\t}\n}\n\nconst templatePattern = /\\{\\{([^\\/]+)\\/([^\\}]+)\\}\\}/g;\n\nexport type ResolveOptions = {\n\ttemplate: string;\n\tconfig: ProjectConfig;\n\tdestPath: string;\n\tcwd: string;\n};\n\n/** Takes a template and uses replaces it with an alias or relative path that resolves to the correct block\n *\n * @param param0\n * @returns\n */\nexport function resolveLocalDependencyTemplate({\n\ttemplate,\n\tconfig,\n\tdestPath,\n\tcwd,\n}: ResolveOptions) {\n\tconst destDir = path.join(destPath, '../');\n\n\treturn template.replace(templatePattern, (_, category, name) => {\n\t\tif (config.paths[category] === undefined) {\n\t\t\t// if relative make it relative\n\t\t\tif (config.paths['*'].startsWith('.')) {\n\t\t\t\tconst relative = path.relative(\n\t\t\t\t\tdestDir,\n\t\t\t\t\tpath.join(cwd, config.paths['*'], category, name)\n\t\t\t\t);\n\n\t\t\t\treturn relative.startsWith('.') ? relative : `./${relative}`;\n\t\t\t}\n\n\t\t\treturn path.join(config.paths['*'], category, name);\n\t\t}\n\n\t\t// if relative make it relative\n\t\tif (config.paths[category].startsWith('.')) {\n\t\t\tconst relative = path.relative(destDir, path.join(cwd, config.paths[category], name));\n\n\t\t\treturn relative.startsWith('.') ? relative : `./${relative}`;\n\t\t}\n\n\t\treturn path.join(config.paths[category], name);\n\t});\n}\n","import fs from 'node:fs';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport color from 'chalk';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport { type TsConfigResult, getTsconfig } from 'get-tsconfig';\nimport path from 'pathe';\nimport type * as prettier from 'prettier';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { endsWithOneOf } from './blocks/ts/strings';\nimport type { ProjectConfig } from './config';\nimport { resolveLocalDependencyTemplate } from './dependencies';\nimport { languages } from './language-support';\n\ntype TransformRemoteContentOptions = {\n\tfile: {\n\t\t/** The content of the file */\n\t\tcontent: string;\n\t\t/** The dest path of the file used to determine the language */\n\t\tdestPath: string;\n\t};\n\tconfig: ProjectConfig;\n\twatermark: string;\n\timports: Record<string, string>;\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n\tcwd: string;\n\tverbose?: (msg: string) => void;\n};\n\n/** Makes the necessary modifications to the content of the file to ensure it works properly in the users project\n *\n * @param param0\n * @returns\n */\nexport async function transformRemoteContent({\n\tfile,\n\tconfig,\n\timports,\n\twatermark,\n\tprettierOptions,\n\tbiomeOptions,\n\tcwd,\n\tverbose,\n}: TransformRemoteContentOptions): Promise<Result<string, string>> {\n\tconst lang = languages.find((lang) => lang.matches(file.destPath));\n\n\tlet content: string = file.content;\n\n\tif (lang) {\n\t\tif (config.watermark) {\n\t\t\tconst comment = lang.comment(watermark);\n\n\t\t\tcontent = `${comment}\\n\\n${content}`;\n\t\t}\n\n\t\tverbose?.(`Formatting ${color.bold(file.destPath)}`);\n\n\t\ttry {\n\t\t\tcontent = await lang.format(content, {\n\t\t\t\tfilePath: file.destPath,\n\t\t\t\tformatter: config.formatter,\n\t\t\t\tprettierOptions,\n\t\t\t\tbiomeOptions,\n\t\t\t});\n\t\t} catch (err) {\n\t\t\treturn Err(`Error formatting ${color.bold(file.destPath)} ${err}`);\n\t\t}\n\t}\n\n\t// transform imports\n\tfor (const [literal, template] of Object.entries(imports)) {\n\t\tconst resolvedImport = resolveLocalDependencyTemplate({\n\t\t\ttemplate,\n\t\t\tconfig,\n\t\t\tdestPath: file.destPath,\n\t\t\tcwd,\n\t\t});\n\n\t\t// this way we only replace the exact import since it will be surrounded in quotes\n\t\tconst literalRegex = new RegExp(`(['\"])${escapeStringRegexp(literal)}\\\\1`, 'g');\n\n\t\tcontent = content.replaceAll(literalRegex, `$1${resolvedImport}$1`);\n\t}\n\n\treturn Ok(content);\n}\n\ntype FormatOptions = {\n\tfile: {\n\t\t/** The content of the file */\n\t\tcontent: string;\n\t\t/** The dest path of the file used to determine the language */\n\t\tdestPath: string;\n\t};\n\tformatter: ProjectConfig['formatter'];\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\n/** Auto detects the language and formats the file content.\n *\n * @param param0\n * @returns\n */\nexport async function formatFile({\n\tfile,\n\tformatter,\n\tprettierOptions,\n\tbiomeOptions,\n}: FormatOptions): Promise<string> {\n\tconst lang = languages.find((lang) => lang.matches(file.destPath));\n\n\tlet newContent = file.content;\n\n\tif (lang) {\n\t\ttry {\n\t\t\tnewContent = await lang.format(file.content, {\n\t\t\t\tfilePath: file.destPath,\n\t\t\t\tformatter,\n\t\t\t\tprettierOptions,\n\t\t\t\tbiomeOptions,\n\t\t\t});\n\t\t} catch {\n\t\t\treturn newContent;\n\t\t}\n\t}\n\n\treturn newContent;\n}\n\nexport function matchJSDescendant(searchFilePath: string): string | undefined {\n\tconst MATCH_EXTENSIONS = ['.js', '.ts', '.cjs', '.mjs'];\n\n\tif (!endsWithOneOf(searchFilePath, MATCH_EXTENSIONS)) return undefined;\n\n\tconst dir = path.dirname(searchFilePath);\n\n\tconst files = fs.readdirSync(dir);\n\n\tconst parsedSearch = path.parse(searchFilePath);\n\n\tfor (const file of files) {\n\t\tif (!endsWithOneOf(file, MATCH_EXTENSIONS)) continue;\n\n\t\tif (path.parse(file).name === parsedSearch.name) return path.join(dir, file);\n\t}\n\n\treturn undefined;\n}\n\n/** Attempts to get the js/tsconfig file for the searched path\n *\n * @param searchPath\n * @returns\n */\nexport function tryGetTsconfig(searchPath?: string): Result<TsConfigResult | null, string> {\n\tlet config: TsConfigResult | null;\n\n\ttry {\n\t\tconfig = getTsconfig(searchPath, 'tsconfig.json');\n\n\t\tif (!config) {\n\t\t\t// if we don't find the config at first check for a jsconfig\n\t\t\tconfig = getTsconfig(searchPath, 'jsconfig.json');\n\n\t\t\tif (!config) {\n\t\t\t\treturn Ok(null);\n\t\t\t}\n\t\t}\n\t} catch (err) {\n\t\treturn Err(`Error while trying to get ${color.bold('tsconfig.json')}: ${err}`);\n\t}\n\n\treturn Ok(config);\n}\n","import fs from 'node:fs';\nimport { Biome, Distribution } from '@biomejs/js-api';\nimport * as cssDependency from 'css-dependency';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.css` files. */\nexport const css: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.css'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst parseResult = cssDependency.parse(sourceCode, { allowTailwindDirectives: true });\n\n\t\tif (parseResult.isErr()) {\n\t\t\treturn Err(parseResult.unwrapErr().message);\n\t\t}\n\n\t\tconst imports = parseResult.unwrap();\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports.map((imp) => imp.module),\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, prettierOptions, biomeOptions, filePath }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t\t}\n\n\t\tconst biome = await Biome.create({\n\t\t\tdistribution: Distribution.NODE,\n\t\t});\n\n\t\tif (biomeOptions) {\n\t\t\tbiome.applyConfiguration(biomeOptions);\n\t\t}\n\n\t\treturn biome.formatContent(code, { filePath }).content;\n\t},\n};\n","import fs from 'node:fs';\nimport * as parse5 from 'parse5';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.html` files. */\nexport const html: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.html'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst ast = parse5.parse(sourceCode);\n\n\t\tconst imports: string[] = [];\n\n\t\t// @ts-ignore yeah I know\n\t\tconst walk = (node, enter: (node) => void) => {\n\t\t\tif (!node) return;\n\n\t\t\tenter(node);\n\n\t\t\tif (node.childNodes && node.childNodes.length > 0) {\n\t\t\t\tfor (const n of node.childNodes) {\n\t\t\t\t\twalk(n, enter);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const node of ast.childNodes) {\n\t\t\twalk(node, (n) => {\n\t\t\t\tif (n.tagName === 'script') {\n\t\t\t\t\tfor (const attr of n.attrs) {\n\t\t\t\t\t\tif (attr.name === 'src') {\n\t\t\t\t\t\t\timports.push(attr.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\tn.tagName === 'link' &&\n\t\t\t\t\t// @ts-ignore yeah I know\n\t\t\t\t\tn.attrs.find((attr) => attr.name === 'rel' && attr.value === 'stylesheet')\n\t\t\t\t) {\n\t\t\t\t\tfor (const attr of n.attrs) {\n\t\t\t\t\t\tif (attr.name === 'href' && !attr.value.startsWith('http')) {\n\t\t\t\t\t\t\timports.push(attr.value);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['svelte', '@sveltejs/kit', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'html', ...prettierOptions });\n\t\t}\n\n\t\t// biome is in progress for formatting html\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { Biome, Distribution } from '@biomejs/js-api';\nimport oxc from 'oxc-parser';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Parses the provided code and returns the names of any other modules required by the module.\n *\n * @param fileName This must be provided for oxc to infer the dialect i.e. (jsx, tsx, js, ts)\n * @param code The code to be parsed\n * @returns\n */\nexport function getJavascriptImports(fileName: string, code: string): string[] {\n\tconst result = oxc.parseSync(fileName, code);\n\n\tconst modules: string[] = [];\n\n\t// handle static imports\n\tfor (const imp of result.module.staticImports) {\n\t\tmodules.push(imp.moduleRequest.value);\n\t}\n\n\t// handle dynamic imports\n\tfor (const imp of result.module.dynamicImports) {\n\t\t// trims the codes and gets the module\n\t\tconst mod = code.slice(imp.moduleRequest.start + 1, imp.moduleRequest.end - 1);\n\n\t\tmodules.push(mod);\n\t}\n\n\t// handle `export x from y` syntax\n\tfor (const exp of result.module.staticExports) {\n\t\tfor (const entry of exp.entries) {\n\t\t\tif (entry.moduleRequest) {\n\t\t\t\tmodules.push(entry.moduleRequest.value);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn modules;\n}\n\n/** Language support for `*.(js|ts|jsx|tsx)` files. */\nexport const typescript: Lang = {\n\tmatches: (fileName) =>\n\t\tfileName.endsWith('.ts') ||\n\t\tfileName.endsWith('.js') ||\n\t\tfileName.endsWith('.tsx') ||\n\t\tfileName.endsWith('.jsx'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst code = fs.readFileSync(filePath).toString();\n\n\t\tconst modules = getJavascriptImports(filePath, code);\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, filePath, prettierOptions, biomeOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t\t}\n\n\t\tconst biome = await Biome.create({\n\t\t\tdistribution: Distribution.NODE,\n\t\t});\n\n\t\tif (biomeOptions) {\n\t\t\tbiome.applyConfiguration(biomeOptions);\n\t\t}\n\n\t\treturn biome.formatContent(code, { filePath }).content;\n\t},\n};\n","import { Biome, Distribution } from '@biomejs/js-api';\nimport * as prettier from 'prettier';\nimport type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\nconst format: Lang['format'] = async (\n\tcode,\n\t{ formatter, prettierOptions, biomeOptions, filePath }\n) => {\n\tif (!formatter) return code;\n\n\tif (formatter === 'prettier') {\n\t\treturn await prettier.format(code, { filepath: filePath, ...prettierOptions });\n\t}\n\n\tconst biome = await Biome.create({\n\t\tdistribution: Distribution.NODE,\n\t});\n\n\tif (biomeOptions) {\n\t\tbiome.applyConfiguration({\n\t\t\t...biomeOptions,\n\t\t\tjson: { parser: { allowComments: true } },\n\t\t});\n\t}\n\n\treturn biome.formatContent(code, { filePath }).content;\n};\n\n/** Language support for `*.(json)` files. */\nexport const json: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.json'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\t// json doesn't support comments\n\tcomment: (content: string) => content,\n\tformat,\n};\n\n/** Language support for `*.(jsonc)` files. */\nexport const jsonc: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.jsonc'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat,\n};\n","import fs from 'node:fs';\nimport * as cssDependency from 'css-dependency';\nimport * as prettier from 'prettier';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.(sass|scss)` files. */\nexport const sass: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.sass') || fileName.endsWith('.scss'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst parseResult = cssDependency.parse(sourceCode);\n\n\t\tif (parseResult.isErr()) {\n\t\t\treturn Err(parseResult.unwrapErr().message);\n\t\t}\n\n\t\tconst imports = parseResult.unwrap();\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: imports.map((imp) => imp.module),\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: excludeDeps,\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `/*\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n*/`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'scss', ...prettierOptions });\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { type Node, walk } from 'estree-walker';\nimport * as prettier from 'prettier';\nimport * as sv from 'svelte/compiler';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\n\n/** Language support for `*.svelte` files. */\nexport const svelte: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.svelte'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst sourceCode = fs.readFileSync(filePath).toString();\n\n\t\tconst root = sv.parse(sourceCode, { modern: true, filename: filePath });\n\n\t\t// if no script tag then no dependencies\n\t\tif (!root.instance && !root.module)\n\t\t\treturn Ok({ dependencies: [], devDependencies: [], local: [], imports: {} });\n\n\t\tconst modules: string[] = [];\n\n\t\tconst enter = (node: Node) => {\n\t\t\tif (\n\t\t\t\tnode.type === 'ImportDeclaration' ||\n\t\t\t\tnode.type === 'ExportAllDeclaration' ||\n\t\t\t\tnode.type === 'ExportNamedDeclaration'\n\t\t\t) {\n\t\t\t\tif (typeof node.source?.value === 'string') {\n\t\t\t\t\tmodules.push(node.source.value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node.type === 'ImportExpression') {\n\t\t\t\tif (node.source.type === 'Literal' && typeof node.source.value === 'string') {\n\t\t\t\t\tmodules.push(node.source.value);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif (root.instance) {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: The root instance is just missing the `id` prop\n\t\t\twalk(root.instance as any, { enter });\n\t\t}\n\n\t\tif (root.module) {\n\t\t\t// biome-ignore lint/suspicious/noExplicitAny: The root instance is just missing the `id` prop\n\t\t\twalk(root.module as any, { enter });\n\t\t}\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['svelte', '@sveltejs/kit', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, filePath, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\t// only attempt to format if svelte plugin is included in the config.\n\t\tif (\n\t\t\tformatter === 'prettier' &&\n\t\t\tprettierOptions &&\n\t\t\tprettierOptions.plugins?.find((plugin) => plugin === 'prettier-plugin-svelte')\n\t\t) {\n\t\t\treturn await prettier.format(code, {\n\t\t\t\tfilepath: filePath,\n\t\t\t\t...prettierOptions,\n\t\t\t});\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\n/** Language support for `*.svg` files. */\nexport const svg: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.svg'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code) => code,\n};\n","import fs from 'node:fs';\nimport * as prettier from 'prettier';\nimport * as v from 'vue/compiler-sfc';\nimport { type Lang, formatError, resolveImports } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok } from '../blocks/ts/result';\nimport { getJavascriptImports } from './javascript';\n\n/** Language support for `*.vue` files. */\nexport const vue: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.vue'),\n\tresolveDependencies: ({ filePath, isSubDir, excludeDeps, dirs, cwd, containingDir }) => {\n\t\tconst code = fs.readFileSync(filePath).toString();\n\n\t\tconst parsed = v.parse(code, { filename: filePath });\n\n\t\tconst modules: string[] = [];\n\n\t\tif (parsed.descriptor.script?.content) {\n\t\t\tconst mods = getJavascriptImports('noop.ts', parsed.descriptor.script.content);\n\n\t\t\tmodules.push(...mods);\n\t\t}\n\n\t\tif (parsed.descriptor.scriptSetup?.content) {\n\t\t\tconst mods = getJavascriptImports('noop.ts', parsed.descriptor.scriptSetup.content);\n\n\t\t\tmodules.push(...mods);\n\t\t}\n\n\t\tif (modules.length === 0)\n\t\t\treturn Ok({ dependencies: [], devDependencies: [], local: [], imports: {} });\n\n\t\tconst resolveResult = resolveImports({\n\t\t\tmoduleSpecifiers: modules,\n\t\t\tfilePath,\n\t\t\tisSubDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t\tcontainingDir,\n\t\t\tdoNotInstall: ['vue', 'nuxt', ...excludeDeps],\n\t\t});\n\n\t\tif (resolveResult.isErr()) {\n\t\t\treturn Err(\n\t\t\t\tresolveResult\n\t\t\t\t\t.unwrapErr()\n\t\t\t\t\t.map((err) => formatError(err))\n\t\t\t\t\t.join('\\n')\n\t\t\t);\n\t\t}\n\n\t\treturn Ok(resolveResult.unwrap());\n\t},\n\tcomment: (content) => `<!--\\n${lines.join(lines.get(content), { prefix: () => '\\t' })}\\n-->`,\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'vue', ...prettierOptions });\n\t\t}\n\n\t\t// biome has issues with vue support\n\t\treturn code;\n\t},\n};\n","import * as prettier from 'prettier';\nimport type { Lang } from '.';\nimport * as lines from '../blocks/ts/lines';\nimport { Ok } from '../blocks/ts/result';\n\n/** Language support for `*.(yaml|yml)` files. */\nexport const yaml: Lang = {\n\tmatches: (fileName) => fileName.endsWith('.yml') || fileName.endsWith('.yaml'),\n\tresolveDependencies: () =>\n\t\tOk({ dependencies: [], local: [], devDependencies: [], imports: {} }),\n\tcomment: (content: string) => lines.join(lines.get(content), { prefix: () => '# ' }),\n\tformat: async (code, { formatter, prettierOptions }) => {\n\t\tif (!formatter) return code;\n\n\t\tif (formatter === 'prettier') {\n\t\t\treturn await prettier.format(code, { parser: 'yaml', ...prettierOptions });\n\t\t}\n\n\t\treturn code;\n\t},\n};\n","import fs from 'node:fs';\nimport { builtinModules } from 'node:module';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport color from 'chalk';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport path from 'pathe';\nimport type * as prettier from 'prettier';\nimport validatePackageName from 'validate-npm-package-name';\nimport * as ascii from '../ascii';\nimport * as lines from '../blocks/ts/lines';\nimport { Err, Ok, type Result } from '../blocks/ts/result';\nimport type { Formatter } from '../config';\nimport { tryGetTsconfig } from '../files';\nimport { findNearestPackageJson } from '../package';\nimport { parsePackageName } from '../parse-package-name';\nimport { css } from './css';\nimport { html } from './html';\nimport { typescript } from './javascript';\nimport { json, jsonc } from './json';\nimport { sass } from './sass';\nimport { svelte } from './svelte';\nimport { svg } from './svg';\nimport { vue } from './vue';\nimport { yaml } from './yaml';\n\nexport type ResolvedDependencies = {\n\tlocal: string[];\n\tdevDependencies: string[];\n\tdependencies: string[];\n\t/** Maps a literal import to a template import to be replaced during add/update */\n\timports: Record<string, string>;\n};\n\nexport type ResolveDependencyOptions = {\n\tfilePath: string;\n\t/** Only valid for folder based blocks. Helps identify a self dependency */\n\tcontainingDir?: string;\n\tisSubDir: boolean;\n\texcludeDeps: string[];\n\tcwd: string;\n\tdirs: string[];\n};\n\nexport type FormatOptions = {\n\tformatter?: Formatter;\n\t/** Can be used to infer the prettier parser */\n\tfilePath: string;\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\nexport type Lang = {\n\t/** Matches the supported file types */\n\tmatches: (fileName: string) => boolean;\n\t/** Reads the file and gets any dependencies from its imports */\n\tresolveDependencies: (opts: ResolveDependencyOptions) => Result<ResolvedDependencies, string>;\n\t/** Returns a multiline comment containing the content */\n\tcomment: (content: string) => string;\n\tformat: (code: string, opts: FormatOptions) => Promise<string>;\n};\n\nexport type ResolveImportOptions = {\n\tmoduleSpecifiers: string[];\n\tisSubDir: boolean;\n\tfilePath: string;\n\t/** Only valid for folder based blocks. Helps identify a self dependency */\n\tcontainingDir?: string;\n\tdoNotInstall?: string[];\n\tdirs: string[];\n\tcwd: string;\n};\n\nexport function formatError(err: string) {\n\treturn `${lines.join(lines.get(err), {\n\t\tprefix: (l) => {\n\t\t\tif (l === 0) return `${ascii.VERTICAL_LINE} ${ascii.ERROR} `;\n\n\t\t\treturn `${ascii.VERTICAL_LINE} `;\n\t\t},\n\t})}`;\n}\n\nexport function resolveImports({\n\tmoduleSpecifiers,\n\tisSubDir,\n\tfilePath,\n\tcontainingDir,\n\tdoNotInstall,\n\tdirs,\n\tcwd,\n}: ResolveImportOptions): Result<ResolvedDependencies, string[]> {\n\tconst errors: string[] = [];\n\n\tconst deps = new Set<string>();\n\tconst localDeps = new Set<string>();\n\tconst imports: Record<string, string> = {};\n\n\tfor (const specifier of moduleSpecifiers) {\n\t\t// don't add dependencies to node\n\t\tif (builtinModules.includes(specifier) || specifier.startsWith('node:')) continue;\n\n\t\t// check if specifier is a local dependency\n\t\tif (specifier.startsWith('.')) {\n\t\t\tconst localDep = resolveLocalImport(specifier, isSubDir, {\n\t\t\t\tfilePath,\n\t\t\t\tcontainingDir,\n\t\t\t\tdirs,\n\t\t\t\tcwd,\n\t\t\t});\n\n\t\t\tif (localDep.isErr()) {\n\t\t\t\terrors.push(localDep.unwrapErr());\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst dep = localDep.unwrap();\n\n\t\t\tif (dep) {\n\t\t\t\tlocalDeps.add(dep.dependency);\n\t\t\t\timports[specifier] = dep.template;\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\t// check if the specifier is a package\n\t\tconst parsed = parsePackageName(specifier);\n\n\t\tif (!parsed.isErr()) {\n\t\t\tconst depInfo = parsed.unwrap();\n\n\t\t\tif (validatePackageName(depInfo.name).validForNewPackages) {\n\t\t\t\tdeps.add(specifier);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t}\n\n\t\t// if specifier wasn't a local dependency or package then it might be a path alias\n\t\tconst localDep = tryResolveLocalAlias(specifier, isSubDir, {\n\t\t\tfilePath,\n\t\t\tcontainingDir,\n\t\t\tdirs,\n\t\t\tcwd,\n\t\t});\n\n\t\tif (localDep.isErr()) {\n\t\t\terrors.push(localDep.unwrapErr());\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst dep = localDep.unwrap();\n\n\t\tif (dep) {\n\t\t\tlocalDeps.add(dep.dependency);\n\t\t\timports[specifier] = dep.template;\n\t\t} else {\n\t\t\tconsole.warn(\n\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(specifier)}\\` from ${filePath}. Reason: Not a valid package name or path alias.`\n\t\t\t);\n\t\t}\n\t}\n\n\tif (errors.length > 0) {\n\t\treturn Err(errors);\n\t}\n\n\tconst { devDependencies, dependencies } = resolveRemoteDeps(Array.from(deps), filePath, {\n\t\tdoNotInstall: doNotInstall ? doNotInstall : [],\n\t});\n\n\treturn Ok({\n\t\tdependencies,\n\t\tdevDependencies,\n\t\tlocal: Array.from(localDeps),\n\t\timports,\n\t} satisfies ResolvedDependencies);\n}\n\ntype ResolveLocalImportResult = {\n\t/** The local block that is a dependency */\n\tdependency: string;\n\t/** A template used to resolve the import during add/update */\n\ttemplate: string;\n};\n\nfunction resolveLocalImport(\n\tmod: string,\n\tisSubDir: boolean,\n\t{\n\t\tfilePath,\n\t\tcontainingDir,\n\t\tdropExtension = true,\n\t\talias,\n\t\tdirs,\n\t\tcwd,\n\t}: {\n\t\tfilePath: string;\n\t\tcontainingDir?: string;\n\t\tdirs: string[];\n\t\talias?: string;\n\t\tmodIsFile?: boolean;\n\t\tcwd: string;\n\t\tdropExtension?: boolean;\n\t}\n): Result<ResolveLocalImportResult | undefined, string> {\n\tif (isSubDir && (mod.startsWith('./') || mod === '.')) return Ok(undefined);\n\n\t// get the path to the current category\n\t// if the block is a subdirectory block then containing dir must exist\n\tconst categoryDir = isSubDir ? path.join(containingDir!, '../') : path.join(filePath, '../');\n\n\t// get the actual path to the module\n\tconst modPath = path.join(path.join(filePath, '../'), mod);\n\n\t// get the full path to the current category containing folder\n\tconst fullDir = path.join(categoryDir, '../');\n\n\t// prevent self reference in subdirectories\n\tif (containingDir && modPath.startsWith(containingDir)) return Ok(undefined);\n\n\tif (modPath.startsWith(fullDir)) {\n\t\treturn Ok(parsePath(modPath.slice(fullDir.length), dropExtension));\n\t}\n\n\tconst absPath = path.resolve(modPath);\n\n\t// Here we try and find the most specific directory that matches the module.\n\t// This fixes issues where there are 2 nested directories that both\n\t// contain the module by simply choosing the more specific path.\n\tlet longestMatch: string | null = null;\n\tfor (const dir of dirs) {\n\t\tconst containingPath = path.resolve(path.join(cwd, dir));\n\n\t\tif (absPath.startsWith(containingPath)) {\n\t\t\tif (longestMatch === null || longestMatch.length < containingPath.length) {\n\t\t\t\tlongestMatch = containingPath;\n\t\t\t}\n\t\t}\n\t}\n\n\tif (longestMatch !== null) {\n\t\treturn Ok(parsePath(absPath.slice(longestMatch.length + 1), dropExtension));\n\t}\n\n\treturn Err(\n\t\t`${filePath}:\\n${alias ? alias : mod} references code not contained in ${color.bold(dirs.join(', '))} and cannot be resolved.`\n\t);\n}\n\nfunction parsePath(localPath: string, dropExtension = true): ResolveLocalImportResult {\n\tlet [category, block, ...rest] = localPath.split('/');\n\n\t// if undefined we assume we are pointing to the index file\n\tif (block === undefined) {\n\t\tblock = 'index';\n\t}\n\n\tlet trimmedBlock = block;\n\n\t// remove file extension\n\tif (dropExtension && trimmedBlock.includes('.')) {\n\t\ttrimmedBlock = trimmedBlock.slice(\n\t\t\t0,\n\t\t\ttrimmedBlock.length - path.parse(trimmedBlock).ext.length\n\t\t);\n\t}\n\n\tconst blockSpecifier = `${category}/${trimmedBlock}`;\n\n\tlet template = `{{${blockSpecifier}}}`;\n\n\tif (rest.length === 0) {\n\t\tif (trimmedBlock.length !== block.length) {\n\t\t\t// add extension to template\n\t\t\ttemplate += path.parse(block).ext;\n\t\t}\n\t} else {\n\t\ttemplate += `/${rest.join('/')}`;\n\t}\n\n\treturn { dependency: blockSpecifier, template };\n}\n\n/** Tries to resolve the modules as an alias using the tsconfig. */\nfunction tryResolveLocalAlias(\n\tmod: string,\n\tisSubDir: boolean,\n\t{\n\t\tfilePath,\n\t\tdirs,\n\t\tcwd,\n\t\tcontainingDir,\n\t}: { filePath: string; containingDir?: string; dirs: string[]; cwd: string }\n): Result<ResolveLocalImportResult | undefined, string> {\n\tconst configResult = tryGetTsconfig(filePath);\n\n\tif (configResult.isErr()) return Err(configResult.unwrapErr());\n\n\tconst config = configResult.unwrap();\n\n\tif (config === null) return Ok(undefined);\n\n\tconst matcher = createPathsMatcher(config);\n\n\tif (matcher) {\n\t\t// if the mod is actually remote the returns paths will be empty\n\t\tconst paths = matcher(mod);\n\n\t\tfor (const modPath of paths) {\n\t\t\tconst foundMod = searchForModule(modPath);\n\n\t\t\tif (!foundMod) continue;\n\n\t\t\tconst pathResolved = path.relative(\n\t\t\t\tpath.resolve(path.join(filePath, '../')),\n\t\t\t\tfoundMod.prettyPath\n\t\t\t);\n\n\t\t\t// if it is not equal the extension has already been dropped\n\t\t\t// we omit the '' extension because it there is no extension there is nothing to be dropped\n\t\t\tconst shouldDropExtension = resolutionEquality(foundMod.prettyPath, foundMod.path, [\n\t\t\t\t'.js',\n\t\t\t\t'.ts',\n\t\t\t]);\n\n\t\t\tconst localDep = resolveLocalImport(pathResolved, isSubDir, {\n\t\t\t\tfilePath,\n\t\t\t\tcontainingDir,\n\t\t\t\talias: mod,\n\t\t\t\tdropExtension: shouldDropExtension,\n\t\t\t\tdirs,\n\t\t\t\tcwd,\n\t\t\t\tmodIsFile: foundMod.type === 'file',\n\t\t\t});\n\n\t\t\tif (localDep.isErr()) return Err(localDep.unwrapErr());\n\n\t\t\tif (localDep.unwrap()) return Ok(localDep.unwrap()!);\n\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn Ok(undefined);\n}\n\n/** Node allows no extension or a .js extension or a .ts extension to all resolve to the same place because of this we employ a different method of equality.\n *\n * Basically we want to treat a path with a .js extension as equal to the same path with a .ts extension and vise versa.\n */\nfunction resolutionEquality(pathA: string, pathB: string, validExtensions = ['.ts', '.js', '']) {\n\tif (pathA === pathB) return true;\n\n\tconst parsedA = path.parse(pathA);\n\tconst parsedB = path.parse(pathB);\n\n\tconst pathAWithoutExtension = path.join(parsedA.dir, parsedA.name);\n\tconst pathBWithoutExtension = path.join(parsedB.dir, parsedB.name);\n\n\t// if paths without extension aren't equal then return false\n\tif (pathAWithoutExtension !== pathBWithoutExtension) return false;\n\n\t// as long as both paths have a .js or .ts extension we can be sure that they are equal\n\tif (validExtensions.includes(parsedA.ext) && validExtensions.includes(parsedB.ext)) return true;\n\n\treturn false;\n}\n\n/** Searches around for the module\n *\n * @param path\n */\nfunction searchForModule(\n\tmodPath: string\n): { path: string; prettyPath: string; type: 'file' | 'directory' } | undefined {\n\tif (fs.existsSync(modPath)) {\n\t\treturn {\n\t\t\tpath: modPath,\n\t\t\tprettyPath: modPath,\n\t\t\ttype: fs.statSync(modPath).isDirectory() ? 'directory' : 'file',\n\t\t};\n\t}\n\n\tconst containing = path.join(modPath, '../');\n\n\t// if containing folder doesn't exist this can't exist\n\tif (!fs.existsSync(containing)) return undefined;\n\n\tconst modParsed = path.parse(modPath);\n\n\t// sometimes it will point to .js because it will resolve in prod but not for us\n\tif (modParsed.ext === '.js') {\n\t\tconst newPath = `${modPath.slice(0, modPath.length - 3)}.ts`;\n\n\t\tif (fs.existsSync(newPath)) return { path: newPath, prettyPath: modPath, type: 'file' };\n\t}\n\n\tconst files = fs.readdirSync(containing);\n\n\tfor (const file of files) {\n\t\tconst fileParsed = path.parse(file);\n\n\t\t// this way the extension doesn't matter\n\t\tif (fileParsed.name === modParsed.base) {\n\t\t\tconst filePath = path.join(containing, file);\n\n\t\t\t// we remove the extension since it wasn't included by the user\n\t\t\tconst prettyPath = filePath.slice(0, filePath.length - fileParsed.ext.length);\n\n\t\t\treturn {\n\t\t\t\tpath: filePath,\n\t\t\t\tprettyPath: prettyPath,\n\t\t\t\ttype: fs.statSync(filePath).isDirectory() ? 'directory' : 'file',\n\t\t\t};\n\t\t}\n\t}\n\n\treturn undefined;\n}\n\n/** Iterates over the dependency and resolves each one using the nearest package.json file.\n * Strips node APIs and pins the version of each dependency based on what is in the package.json.\n *\n * @param deps\n * @param filePath\n * @returns\n */\nfunction resolveRemoteDeps(\n\tdeps: string[],\n\tfilePath: string,\n\t{ doNotInstall }: { doNotInstall: string[] } = {\n\t\tdoNotInstall: [],\n\t}\n) {\n\tconst exemptDeps = new Set(doNotInstall);\n\n\tconst pkgPath = findNearestPackageJson(path.dirname(filePath), '');\n\n\tconst dependencies = new Set<string>();\n\tconst devDependencies = new Set<string>();\n\n\tif (pkgPath) {\n\t\tconst { devDependencies: packageDevDependencies, dependencies: packageDependencies } =\n\t\t\tJSON.parse(fs.readFileSync(pkgPath, 'utf-8'));\n\n\t\tfor (const dep of deps) {\n\t\t\tconst parsed = parsePackageName(dep);\n\n\t\t\tif (parsed.isErr()) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(dep)}\\`. Reason: Couldn't parse package name`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst depInfo = parsed.unwrap();\n\n\t\t\tif (!validatePackageName(depInfo.name).validForNewPackages) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding import \\`${color.cyan(dep)}\\`. Reason: Not a valid package name`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (exemptDeps.has(depInfo.name)) continue;\n\n\t\t\tlet version: string | undefined = undefined;\n\t\t\tif (packageDependencies !== undefined) {\n\t\t\t\tversion = packageDependencies[depInfo.name];\n\t\t\t}\n\n\t\t\tif (version !== undefined) {\n\t\t\t\tdependencies.add(`${depInfo.name}@${version}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (packageDevDependencies !== undefined) {\n\t\t\t\tversion = packageDevDependencies[depInfo.name];\n\t\t\t}\n\n\t\t\tif (version !== undefined) {\n\t\t\t\tdevDependencies.add(`${depInfo.name}@${version}`);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// if no version found just add it without a version\n\t\t\tdependencies.add(depInfo.name);\n\t\t}\n\t}\n\n\treturn {\n\t\tdependencies: Array.from(dependencies),\n\t\tdevDependencies: Array.from(devDependencies),\n\t};\n}\n\nconst languages: Lang[] = [css, html, json, jsonc, sass, svelte, svg, typescript, vue, yaml];\n\nexport {\n\tcss,\n\thtml,\n\tjson,\n\tjsonc,\n\tsass,\n\tsvelte,\n\tsvg,\n\ttypescript,\n\tvue,\n\tyaml,\n\tlanguages,\n\tresolutionEquality,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport type { Block, Category, Manifest } from '../../types';\nimport * as ascii from '../ascii';\nimport type { RegistryConfig } from '../config';\nimport { parsePackageName } from '../parse-package-name';\n\n// Update this list as needed\n// Use the name of the package not the framework\nconst FRAMEWORKS = new Set([\n\t// svelte\n\t'svelte',\n\t'@sveltejs/kit',\n\n\t// vue\n\t'vue',\n\t'nuxt',\n\n\t// react\n\t'react',\n\t'react-dom',\n\t'next',\n\t'@remix-run/react',\n\n\t// angular\n\t'@angular/core',\n\t'@angular/common',\n\t'@angular/forms',\n\t'@angular/platform-browser',\n\t'@angular/platform-browser-dynamic',\n\t'@angular/router',\n\n\t// misc\n\t'@builder.io/qwik',\n\t'astro',\n\t'solid-js',\n]);\n\nconst ruleLevelSchema = v.union([v.literal('off'), v.literal('warn'), v.literal('error')]);\n\nexport type RuleLevel = v.InferInput<typeof ruleLevelSchema>;\n\nexport type CheckOptions = {\n\tmanifest: Manifest;\n\toptions: (string | number)[];\n\tcwd: string;\n\tconfig: RegistryConfig;\n};\n\nexport type Rule = { description: string } & (\n\t| {\n\t\t\tscope: 'block';\n\t\t\tcheck: (block: Block, opts: CheckOptions) => string[] | undefined;\n\t }\n\t| {\n\t\t\tscope: 'global';\n\t\t\tcheck: (opts: CheckOptions) => string[] | undefined;\n\t }\n);\n\nconst ruleKeySchema = v.union([\n\tv.literal('no-category-index-file-dependency'),\n\tv.literal('no-unpinned-dependency'),\n\tv.literal('require-local-dependency-exists'),\n\tv.literal('max-local-dependencies'),\n\tv.literal('no-circular-dependency'),\n\tv.literal('no-unused-block'),\n\tv.literal('no-framework-dependency'),\n\tv.literal('require-config-file-exists'),\n\tv.literal('no-config-file-framework-dependency'),\n\tv.literal('no-config-file-unpinned-dependency'),\n]);\n\nexport type RuleKey = v.InferInput<typeof ruleKeySchema>;\n\nconst rules: Record<RuleKey, Rule> = {\n\t'no-unpinned-dependency': {\n\t\tdescription: 'Require all dependencies to have a pinned version.',\n\t\tscope: 'block',\n\t\tcheck: (block) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of [...block.dependencies, ...block.devDependencies]) {\n\t\t\t\tif (!dep.includes('@')) {\n\t\t\t\t\terrors.push(`Couldn't find a version to use for ${color.bold(dep)}`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'require-local-dependency-exists': {\n\t\tdescription: 'Require all local dependencies to exist.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of block.localDependencies) {\n\t\t\t\tconst [depCategoryName, depBlockName] = dep.split('/');\n\n\t\t\t\tconst depCategory = manifest.categories.find(\n\t\t\t\t\t(cat) => cat.name.trim() === depCategoryName.trim()\n\t\t\t\t);\n\n\t\t\t\tconst error = `${color.bold(`${block.category}/${block.name}`)} depends on local dependency ${color.bold(dep)} which doesn't exist`;\n\n\t\t\t\tif (!depCategory) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (depCategory.blocks.find((b) => b.name === depBlockName) === undefined) {\n\t\t\t\t\terrors.push(error);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-category-index-file-dependency': {\n\t\tdescription: 'Disallow depending on the index file of a category.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tfor (const dep of block.localDependencies) {\n\t\t\t\tconst [categoryName, name] = dep.split('/');\n\n\t\t\t\tif (name !== 'index') continue;\n\n\t\t\t\tconst category = manifest.categories.find((cat) => cat.name === categoryName);\n\n\t\t\t\tif (!category) continue;\n\n\t\t\t\tconst depBlock = category.blocks.find((b) => b.name === name);\n\n\t\t\t\tif (!depBlock) continue;\n\n\t\t\t\terrors.push(\n\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} depends on ${color.bold(`${categoryName}/${name}`)}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'max-local-dependencies': {\n\t\tdescription: 'Enforces a limit on the amount of local dependencies a block can have.',\n\t\tscope: 'block',\n\t\tcheck: (block, { options }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tlet limit: number;\n\n\t\t\tif (typeof options[0] !== 'number') {\n\t\t\t\tlimit = 5;\n\t\t\t} else {\n\t\t\t\tlimit = options[0];\n\t\t\t}\n\n\t\t\tif (block.localDependencies.length > limit) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} has too many local dependencies (${color.bold(block.localDependencies.length)}) limit (${color.bold(limit)})`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-circular-dependency': {\n\t\tdescription: 'Disallow circular dependencies.',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tconst chain = searchForDep(specifier, block, manifest.categories);\n\n\t\t\tif (chain) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`There is a circular dependency in ${color.bold(specifier)}: ${color.bold(chain.join(' -> '))}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-unused-block': {\n\t\tdescription: 'Disallow unused blocks. (Not listed and not a dependency of another block)',\n\t\tscope: 'block',\n\t\tcheck: (block, { manifest }) => {\n\t\t\tif (block.list) return;\n\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tconst listedBlocks = manifest.categories\n\t\t\t\t.flatMap((cat) => cat.blocks)\n\t\t\t\t.filter((b) => b.list);\n\n\t\t\tfor (const block of listedBlocks) {\n\t\t\t\tconst chain = searchForDep(specifier, block, manifest.categories);\n\n\t\t\t\tif (chain) return;\n\t\t\t}\n\n\t\t\treturn [`${color.bold(specifier)} is unused and will be ${color.bold.red('removed')}`];\n\t\t},\n\t},\n\t'no-framework-dependency': {\n\t\tdescription: 'Disallow frameworks (Svelte, Vue, React) as dependencies.',\n\t\tscope: 'block',\n\t\tcheck: (block) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tconst frameworkDeps = [...block.devDependencies, ...block.dependencies]\n\t\t\t\t.map((d) => parsePackageName(d).unwrap().name)\n\t\t\t\t.filter((d) => FRAMEWORKS.has(d));\n\n\t\t\tif (frameworkDeps.length > 0) {\n\t\t\t\tfor (const frameworkDep of frameworkDeps) {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t`${color.bold(`${block.category}/${block.name}`)} depends on ${color.bold(frameworkDep)} causing it to be installed when added`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'require-config-file-exists': {\n\t\tdescription: 'Require all of the paths listed in `configFiles` to exist.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest, cwd }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (manifest.configFiles === undefined) return undefined;\n\n\t\t\tfor (const file of manifest.configFiles) {\n\t\t\t\tif (fs.existsSync(path.join(cwd, file.path))) continue;\n\n\t\t\t\terrors.push(\n\t\t\t\t\t`The ${color.bold(file.name)} config file doesn't exist at ${color.bold(path.join(cwd, file.path))}`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-config-file-framework-dependency': {\n\t\tdescription: 'Disallow frameworks (Svelte, Vue, React) as dependencies of config files.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (manifest.configFiles === undefined) return undefined;\n\n\t\t\tfor (const configFile of manifest.configFiles) {\n\t\t\t\tconst frameworkDeps = [\n\t\t\t\t\t...(configFile.devDependencies ?? []),\n\t\t\t\t\t...(configFile.dependencies ?? []),\n\t\t\t\t]\n\t\t\t\t\t.map((d) => parsePackageName(d).unwrap().name)\n\t\t\t\t\t.filter((d) => FRAMEWORKS.has(d));\n\n\t\t\t\tif (frameworkDeps.length > 0) {\n\t\t\t\t\tfor (const frameworkDep of frameworkDeps) {\n\t\t\t\t\t\terrors.push(\n\t\t\t\t\t\t\t`${color.bold(configFile.name)} depends on ${color.bold(frameworkDep)} causing it to be installed when added`\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n\t'no-config-file-unpinned-dependency': {\n\t\tdescription: 'Require all dependencies of config files to have a pinned version.',\n\t\tscope: 'global',\n\t\tcheck: ({ manifest }) => {\n\t\t\tconst errors: string[] = [];\n\n\t\t\tif (!manifest.configFiles) return undefined;\n\n\t\t\tfor (const configFile of manifest.configFiles) {\n\t\t\t\tfor (const dep of [\n\t\t\t\t\t...(configFile.dependencies ?? []),\n\t\t\t\t\t...(configFile.devDependencies ?? []),\n\t\t\t\t]) {\n\t\t\t\t\tif (!dep.includes('@')) {\n\t\t\t\t\t\terrors.push(`Couldn't find a version to use for ${color.bold(dep)}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn errors.length > 0 ? errors : undefined;\n\t\t},\n\t},\n} as const;\n\nconst ruleConfigSchema = v.record(\n\truleKeySchema,\n\tv.union([\n\t\truleLevelSchema,\n\t\tv.tupleWithRest(\n\t\t\t[ruleLevelSchema, v.union([v.string(), v.number()])],\n\t\t\tv.union([v.string(), v.number()])\n\t\t),\n\t])\n);\n\nexport type RuleConfig = v.InferInput<typeof ruleConfigSchema>;\n\nconst DEFAULT_CONFIG: RuleConfig = {\n\t'no-category-index-file-dependency': 'warn',\n\t'no-unpinned-dependency': 'warn',\n\t'require-local-dependency-exists': 'error',\n\t'max-local-dependencies': ['warn', 10],\n\t'no-circular-dependency': 'error',\n\t'no-unused-block': 'warn',\n\t'no-framework-dependency': 'warn',\n\t'require-config-file-exists': 'error',\n\t'no-config-file-framework-dependency': 'warn',\n\t'no-config-file-unpinned-dependency': 'warn',\n} as const;\n\n/** Runs checks on the manifest file.\n *\n * @param manifest\n * @param config\n * @param ruleConfig\n * @returns\n */\nfunction runRules(\n\tmanifest: Manifest,\n\tconfig: RegistryConfig,\n\tcwd: string,\n\truleConfig: RuleConfig = DEFAULT_CONFIG\n): { warnings: string[]; errors: string[] } {\n\tconst warnings: string[] = [];\n\tconst errors: string[] = [];\n\n\t// run global rules\n\tfor (const [name, rule] of Object.entries(rules)) {\n\t\tif (rule.scope === 'block') continue;\n\n\t\tconst conf = ruleConfig[name as RuleKey]!;\n\n\t\tlet level: RuleLevel;\n\t\tconst options: (string | number)[] = [];\n\t\tif (Array.isArray(conf)) {\n\t\t\tlevel = conf[0];\n\t\t\toptions.push(...conf.slice(1));\n\t\t} else {\n\t\t\tlevel = conf;\n\t\t}\n\n\t\tif (level === 'off') continue;\n\n\t\tconst ruleErrors = rule.check({ manifest, options, cwd, config });\n\n\t\tif (!ruleErrors) continue;\n\n\t\tif (level === 'error') {\n\t\t\terrors.push(\n\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t(err) =>\n\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.ERROR} ${color.red(err)} ${color.gray(name)}`\n\t\t\t\t)\n\t\t\t);\n\t\t\tcontinue;\n\t\t}\n\n\t\twarnings.push(\n\t\t\t...ruleErrors.map(\n\t\t\t\t(err) => `${ascii.VERTICAL_LINE} ${ascii.WARN} ${err} ${color.gray(name)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// run block rules\n\tfor (const category of manifest.categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tfor (const [name, rule] of Object.entries(rules)) {\n\t\t\t\tif (rule.scope === 'global') continue;\n\n\t\t\t\tconst conf = ruleConfig[name as RuleKey]!;\n\n\t\t\t\tlet level: RuleLevel;\n\t\t\t\tconst options: (string | number)[] = [];\n\t\t\t\tif (Array.isArray(conf)) {\n\t\t\t\t\tlevel = conf[0];\n\t\t\t\t\toptions.push(...conf.slice(1));\n\t\t\t\t} else {\n\t\t\t\t\tlevel = conf;\n\t\t\t\t}\n\n\t\t\t\tif (level === 'off') continue;\n\n\t\t\t\tconst ruleErrors = rule.check(block, { manifest, options, cwd, config });\n\n\t\t\t\tif (!ruleErrors) continue;\n\n\t\t\t\tif (level === 'error') {\n\t\t\t\t\terrors.push(\n\t\t\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t\t\t(err) =>\n\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.ERROR} ${color.red(err)} ${color.gray(name)}`\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\twarnings.push(\n\t\t\t\t\t...ruleErrors.map(\n\t\t\t\t\t\t(err) => `${ascii.VERTICAL_LINE} ${ascii.WARN} ${err} ${color.gray(name)}`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { warnings, errors };\n}\n\n/** Searches for the local dependency tree for the provided specifier returns the path it took to find the dependency */\nfunction searchForDep(\n\tsearch: string,\n\tblock: Block,\n\tcategories: Category[],\n\tchain: string[] = []\n): string[] | undefined {\n\tconst newChain = [...chain, `${block.category}/${block.name}`];\n\n\tfor (const dep of block.localDependencies) {\n\t\tif (dep === search) return newChain;\n\n\t\t// it will be found in another pass but we don't want to get a stack overflow\n\t\tif (chain.includes(dep)) return undefined;\n\n\t\tconst [categoryName, blockName] = dep.split('/');\n\n\t\tconst depBlock = categories\n\t\t\t.find((cat) => cat.name === categoryName)\n\t\t\t?.blocks.find((b) => b.name === blockName);\n\n\t\tif (!depBlock) continue;\n\n\t\tconst found = searchForDep(search, depBlock, categories, newChain);\n\n\t\tif (found) return [...found, search];\n\t}\n\n\treturn undefined;\n}\n\n/** Checks if the provided block is depended on anywhere */\nfunction isDependedOn(specifier: string, categories: Category[]): boolean {\n\tfor (const category of categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tif (!block.list) continue;\n\n\t\t\tconst chain = searchForDep(specifier, block, categories);\n\n\t\t\tif (chain) return true;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport {\n\trules,\n\trunRules,\n\tDEFAULT_CONFIG,\n\truleLevelSchema,\n\truleConfigSchema,\n\truleKeySchema,\n\tsearchForDep,\n\tisDependedOn,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport type { Ignore } from 'ignore';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport { type Block, type Category, type Manifest, categorySchema } from '../../types';\nimport * as ascii from '../ascii';\nimport type { RegistryConfig } from '../config';\nimport { languages } from '../language-support';\nimport { isDependedOn } from './check';\n\nconst TEST_SUFFIXES = [\n\t'.test.ts',\n\t'_test.ts',\n\t'.test.js',\n\t'_test.js',\n\t'.spec.ts',\n\t'_spec.ts',\n\t'.spec.js',\n\t'_spec.js',\n\t'.stories.jsx',\n\t'_stories.jsx',\n\t'.stories.tsx',\n\t'_stories.tsx',\n] as const;\n\nexport function isTestFile(file: string): boolean {\n\treturn TEST_SUFFIXES.find((suffix) => file.endsWith(suffix)) !== undefined;\n}\n\ntype Options = {\n\tcwd: string;\n\tignore: Ignore;\n\tconfig: RegistryConfig;\n};\n\n/** Using the provided path to the blocks folder builds the blocks into categories and also resolves dependencies\n *\n * @param blocksPath\n * @returns\n */\nexport function buildBlocksDirectory(\n\tblocksPath: string,\n\t{ cwd, ignore, config }: Options\n): Category[] {\n\tlet paths: string[];\n\n\ttry {\n\t\tpaths = fs.readdirSync(blocksPath);\n\t} catch {\n\t\tprogram.error(color.red(`Couldn't read the ${color.bold(blocksPath)} directory.`));\n\t}\n\n\tconst categories: Category[] = [];\n\n\tfor (const categoryPath of paths) {\n\t\tconst categoryDir = path.join(blocksPath, categoryPath);\n\n\t\t// we only check folders\n\t\tif (fs.statSync(categoryDir).isFile()) continue;\n\n\t\t// we append a '/' to tell ignore that this is a directory not a file\n\t\tconst dirName = `${path.relative(cwd, categoryDir)}/`;\n\n\t\tif (ignore.ignores(dirName)) continue;\n\n\t\tconst categoryName = path.basename(categoryPath);\n\n\t\tif (!shouldIncludeCategory(categoryName, config)) continue;\n\n\t\tconst listCategory = shouldListCategory(categoryName, config);\n\n\t\tconst category: Category = {\n\t\t\tname: categoryName,\n\t\t\tblocks: [],\n\t\t};\n\n\t\tconst files = fs.readdirSync(categoryDir);\n\n\t\tfor (const file of files) {\n\t\t\tconst blockDir = path.join(categoryDir, file);\n\n\t\t\tif (fs.statSync(blockDir).isFile()) {\n\t\t\t\tif (isTestFile(file)) continue;\n\n\t\t\t\tconst name = transformBlockName(file);\n\n\t\t\t\tconst listBlock = shouldListBlock(name, config);\n\n\t\t\t\tif (!shouldIncludeBlock(name, config)) continue;\n\n\t\t\t\tconst lang = languages.find((resolver) => resolver.matches(file));\n\n\t\t\t\t// warn for unsupported language\n\t\t\t\tif (!lang) {\n\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${color.bold(blockDir)}\\` \\`*${color.bold(\n\t\t\t\t\t\t\tpath.parse(file).ext\n\t\t\t\t\t\t)}\\` files are not currently supported!`\n\t\t\t\t\t);\n\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// tries to find a test file with the same name as the file\n\t\t\t\tconst testsPath = files.find((f) =>\n\t\t\t\t\tTEST_SUFFIXES.find((suffix) => f === `${name}${suffix}`)\n\t\t\t\t);\n\n\t\t\t\tconst { dependencies, devDependencies, local, imports } = lang\n\t\t\t\t\t.resolveDependencies({\n\t\t\t\t\t\tfilePath: blockDir,\n\t\t\t\t\t\tisSubDir: false,\n\t\t\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\t\t\tdirs: config.dirs,\n\t\t\t\t\t\tcwd,\n\t\t\t\t\t})\n\t\t\t\t\t.match(\n\t\t\t\t\t\t(val) => val,\n\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\n\t\t\t\tconst block: Block = {\n\t\t\t\t\tname,\n\t\t\t\t\tdirectory: path.relative(cwd, categoryDir),\n\t\t\t\t\tcategory: categoryName,\n\t\t\t\t\ttests: testsPath !== undefined,\n\t\t\t\t\tsubdirectory: false,\n\t\t\t\t\tlist: listCategory ? listBlock : false,\n\t\t\t\t\tfiles: [file],\n\t\t\t\t\tlocalDependencies: local,\n\t\t\t\t\t_imports_: imports,\n\t\t\t\t\tdependencies,\n\t\t\t\t\tdevDependencies,\n\t\t\t\t};\n\n\t\t\t\t// if test file exists add the file\n\t\t\t\tif (testsPath !== undefined) {\n\t\t\t\t\tblock.files.push(testsPath);\n\t\t\t\t}\n\n\t\t\t\tcategory.blocks.push(block);\n\t\t\t} else {\n\t\t\t\tconst blockName = file;\n\n\t\t\t\tconst listBlock = shouldListBlock(blockName, config);\n\n\t\t\t\tif (!shouldIncludeBlock(blockName, config)) continue;\n\n\t\t\t\tconst localDepsSet = new Set<string>();\n\t\t\t\tconst depsSet = new Set<string>();\n\t\t\t\tconst devDepsSet = new Set<string>();\n\t\t\t\tconst imports: Record<string, string> = {};\n\n\t\t\t\tlet hasTests = false;\n\n\t\t\t\tconst blockFiles: string[] = [];\n\n\t\t\t\t// if the user has enabled allow subdirectories we recursively check each directory and resolve any dependencies\n\t\t\t\tconst walkFiles = (base: string, files: string[]) => {\n\t\t\t\t\tfor (const f of files) {\n\t\t\t\t\t\tconst filePath = path.join(base, f);\n\t\t\t\t\t\t// relative to the block root\n\t\t\t\t\t\tconst relativeFilePath = filePath.slice(blockDir.length + 1);\n\n\t\t\t\t\t\tif (isTestFile(f)) {\n\t\t\t\t\t\t\thasTests = true;\n\n\t\t\t\t\t\t\tblockFiles.push(relativeFilePath);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (fs.statSync(filePath).isDirectory()) {\n\t\t\t\t\t\t\tif (!config.allowSubdirectories) {\n\t\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${color.bold(path.join(blockDir, f))}\\` subdirectories are not allowed! Allow them with ${color.bold('--allow-subdirectories')}!`\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst subFiles = fs.readdirSync(filePath);\n\n\t\t\t\t\t\t\twalkFiles(filePath, subFiles);\n\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst lang = languages.find((resolver) => resolver.matches(f));\n\n\t\t\t\t\t\tif (!lang) {\n\t\t\t\t\t\t\tconsole.warn(\n\t\t\t\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped \\`${filePath}\\` \\`*${color.bold(\n\t\t\t\t\t\t\t\t\tpath.parse(f).ext\n\t\t\t\t\t\t\t\t)}\\` files are not currently supported!`\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tlocal,\n\t\t\t\t\t\t\tdependencies,\n\t\t\t\t\t\t\tdevDependencies,\n\t\t\t\t\t\t\timports: imps,\n\t\t\t\t\t\t} = lang\n\t\t\t\t\t\t\t.resolveDependencies({\n\t\t\t\t\t\t\t\tisSubDir: true,\n\t\t\t\t\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\t\t\t\t\tdirs: config.dirs,\n\t\t\t\t\t\t\t\tcontainingDir: blockDir,\n\t\t\t\t\t\t\t\tfilePath,\n\t\t\t\t\t\t\t\tcwd,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.match(\n\t\t\t\t\t\t\t\t(val) => val,\n\t\t\t\t\t\t\t\t(err) => {\n\t\t\t\t\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfor (const dep of local) {\n\t\t\t\t\t\t\t// don't add self\n\t\t\t\t\t\t\tif (dep === `${categoryName}/${blockName}`) continue;\n\n\t\t\t\t\t\t\tlocalDepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const dep of dependencies) {\n\t\t\t\t\t\t\tdepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const dep of devDependencies) {\n\t\t\t\t\t\t\tdevDepsSet.add(dep);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor (const [k, v] of Object.entries(imps)) {\n\t\t\t\t\t\t\timports[k] = v;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tblockFiles.push(relativeFilePath);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\twalkFiles(blockDir, fs.readdirSync(blockDir));\n\n\t\t\t\tconst block: Block = {\n\t\t\t\t\tname: blockName,\n\t\t\t\t\tdirectory: path.relative(cwd, blockDir),\n\t\t\t\t\tcategory: categoryName,\n\t\t\t\t\ttests: hasTests,\n\t\t\t\t\tsubdirectory: true,\n\t\t\t\t\tlist: listCategory ? listBlock : false,\n\t\t\t\t\tfiles: blockFiles,\n\t\t\t\t\tlocalDependencies: Array.from(localDepsSet.keys()),\n\t\t\t\t\tdependencies: Array.from(depsSet.keys()),\n\t\t\t\t\tdevDependencies: Array.from(devDepsSet.keys()),\n\t\t\t\t\t_imports_: imports,\n\t\t\t\t};\n\n\t\t\t\tcategory.blocks.push(block);\n\t\t\t}\n\t\t}\n\n\t\tcategories.push(category);\n\t}\n\n\treturn categories;\n}\n\nexport function buildConfigFiles(\n\tconfig: RegistryConfig,\n\t{ cwd }: { cwd: string }\n): Manifest['configFiles'] {\n\tif (!config.configFiles) return undefined;\n\n\tconst configFiles: Manifest['configFiles'] = [];\n\n\tfor (const file of config.configFiles) {\n\t\tconst lang = languages.find((lang) => lang.matches(file.path));\n\n\t\tif (!lang) {\n\t\t\t// go ahead and add the file with no dependencies\n\t\t\tconfigFiles.push(file);\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst { dependencies, devDependencies, local } = lang\n\t\t\t.resolveDependencies({\n\t\t\t\tfilePath: path.join(cwd, file.path),\n\t\t\t\tisSubDir: false,\n\t\t\t\texcludeDeps: config.excludeDeps,\n\t\t\t\tdirs: config.dirs,\n\t\t\t\tcwd,\n\t\t\t})\n\t\t\t.match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => {\n\t\t\t\t\tprogram.error(color.red(err));\n\t\t\t\t}\n\t\t\t);\n\n\t\tif (local.length > 0) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`${color.bold(file.name)} ${color.bold(file.path)} Config files cannot have local dependencies!`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconfigFiles.push({ ...file, dependencies, devDependencies });\n\t}\n\n\treturn configFiles;\n}\n\nexport function shouldListBlock(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.doNotListBlocks.length > 0 && config.doNotListBlocks.includes(name)) return false;\n\n\t// if the we only list the provided\n\t// we should only list if the name is included in that list\n\tif (config.listBlocks.length > 0) {\n\t\treturn config.listBlocks.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldIncludeBlock(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.excludeBlocks.length > 0 && config.excludeBlocks.includes(name)) return false;\n\n\t// if the we only include the provided\n\t// we should only include if the name is included in that list\n\tif (config.includeBlocks.length > 0) {\n\t\treturn config.includeBlocks.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldListCategory(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.doNotListCategories.length > 0 && config.doNotListCategories.includes(name))\n\t\treturn false;\n\n\t// if the we only list the provided\n\t// we should only list if the name is included in that list\n\tif (config.listCategories.length > 0) {\n\t\treturn config.listCategories.includes(name);\n\t}\n\n\treturn true;\n}\n\nexport function shouldIncludeCategory(name: string, config: RegistryConfig) {\n\t// the length check is just a short circuit here\n\tif (config.excludeCategories.length > 0 && config.excludeCategories.includes(name))\n\t\treturn false;\n\n\t// if the we only include the provided\n\t// we should only include if the name is included in that list\n\tif (config.includeCategories.length > 0) {\n\t\treturn config.includeCategories.includes(name);\n\t}\n\n\treturn true;\n}\n\n/** Takes the given file and returns the block name */\nfunction transformBlockName(file: string) {\n\treturn path.parse(path.basename(file)).name;\n}\n\nexport function pruneUnused(categories: Category[]): [Category[], number] {\n\tconst pruned: Category[] = [];\n\tconst prunedCount = 0;\n\n\tfor (const category of categories) {\n\t\tconst catBlocks: Block[] = [];\n\n\t\tfor (const block of category.blocks) {\n\t\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\t\tif (!block.list) {\n\t\t\t\tconst dependedOn = isDependedOn(specifier, categories);\n\n\t\t\t\tif (!dependedOn) continue;\n\t\t\t}\n\n\t\t\tcatBlocks.push(block);\n\t\t}\n\n\t\tif (catBlocks.length > 0) pruned.push({ name: category.name, blocks: catBlocks });\n\t}\n\n\treturn [pruned, prunedCount];\n}\n\nexport function readCategories(outputFilePath: string): Category[] {\n\treturn v.parse(v.array(categorySchema), JSON.parse(fs.readFileSync(outputFilePath).toString()));\n}\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport {\n\ttype Block,\n\taccessLevel,\n\tconfigFileSchema,\n\tmanifestMeta,\n\tpeerDependencySchema,\n} from '../types';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport { ruleConfigSchema } from './build/check';\nimport { tryGetTsconfig } from './files';\n\n/** sensible defaults for ignored directories */\nexport const IGNORED_DIRS = ['.git', 'node_modules'] as const;\n\nexport const PROJECT_CONFIG_NAME = 'jsrepo.json';\nexport const REGISTRY_CONFIG_NAME = 'jsrepo-build-config.json';\n\nexport const formatterSchema = v.union([v.literal('prettier'), v.literal('biome')]);\n\nexport const pathsSchema = v.objectWithRest(\n\t{\n\t\t'*': v.string(),\n\t},\n\tv.string()\n);\n\nexport type Paths = v.InferInput<typeof pathsSchema>;\n\nexport const projectConfigSchema = v.object({\n\t$schema: v.string(),\n\trepos: v.optional(v.array(v.string()), []),\n\tincludeTests: v.boolean(),\n\tpaths: pathsSchema,\n\tconfigFiles: v.optional(v.record(v.string(), v.string())),\n\twatermark: v.optional(v.boolean(), true),\n\tformatter: v.optional(formatterSchema),\n});\n\nexport function getProjectConfig(cwd: string): Result<ProjectConfig, string> {\n\tif (!fs.existsSync(path.join(cwd, PROJECT_CONFIG_NAME))) {\n\t\treturn Err('Could not find your configuration file! Please run `init`.');\n\t}\n\n\tconst config = v.safeParse(\n\t\tprojectConfigSchema,\n\t\tJSON.parse(fs.readFileSync(path.join(cwd, PROJECT_CONFIG_NAME)).toString())\n\t);\n\n\tif (!config.success) {\n\t\treturn Err(`There was an error reading your \\`${PROJECT_CONFIG_NAME}\\` file!`);\n\t}\n\n\treturn Ok(config.output);\n}\n\nexport type ProjectConfig = v.InferOutput<typeof projectConfigSchema>;\n\nexport type Formatter = v.InferOutput<typeof formatterSchema>;\n\nexport const registryConfigSchema = v.object({\n\t$schema: v.string(),\n\tname: v.optional(v.string()),\n\tversion: v.optional(v.string()),\n\treadme: v.optional(v.string(), 'README.md'),\n\taccess: v.optional(accessLevel),\n\tmeta: v.optional(manifestMeta),\n\tpeerDependencies: v.optional(peerDependencySchema),\n\tconfigFiles: v.optional(v.array(configFileSchema)),\n\tdirs: v.array(v.string()),\n\toutputDir: v.optional(v.string()),\n\tincludeBlocks: v.optional(v.array(v.string()), []),\n\tincludeCategories: v.optional(v.array(v.string()), []),\n\texcludeBlocks: v.optional(v.array(v.string()), []),\n\texcludeCategories: v.optional(v.array(v.string()), []),\n\tdoNotListBlocks: v.optional(v.array(v.string()), []),\n\tdoNotListCategories: v.optional(v.array(v.string()), []),\n\tlistBlocks: v.optional(v.array(v.string()), []),\n\tlistCategories: v.optional(v.array(v.string()), []),\n\texcludeDeps: v.optional(v.array(v.string()), []),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tpreview: v.optional(v.boolean()),\n\trules: v.optional(ruleConfigSchema),\n});\n\nexport function getRegistryConfig(cwd: string): Result<RegistryConfig | null, string> {\n\tif (!fs.existsSync(path.join(cwd, REGISTRY_CONFIG_NAME))) {\n\t\treturn Ok(null);\n\t}\n\n\tconst config = v.safeParse(\n\t\tregistryConfigSchema,\n\t\tJSON.parse(fs.readFileSync(path.join(cwd, REGISTRY_CONFIG_NAME)).toString())\n\t);\n\n\tif (!config.success) {\n\t\treturn Err(`There was an error reading your \\`${REGISTRY_CONFIG_NAME}\\` file!`);\n\t}\n\n\treturn Ok(config.output);\n}\n\nexport type RegistryConfig = v.InferOutput<typeof registryConfigSchema>;\n\n/** Resolves the paths relative to the cwd */\nexport function resolvePaths(paths: Paths, cwd: string): Result<Paths, string> {\n\tconst config = tryGetTsconfig(cwd).unwrapOr(null);\n\n\tconst matcher = config ? createPathsMatcher(config) : null;\n\n\tconst newPaths: Paths = { '*': '' };\n\n\tfor (const [category, p] of Object.entries(paths)) {\n\t\tif (p.startsWith('./')) {\n\t\t\tnewPaths[category] = path.relative(cwd, path.join(path.resolve(cwd), p));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (matcher === null) {\n\t\t\treturn Err(\n\t\t\t\t`Cannot resolve ${color.bold(`\\`\"${category}\": \"${p}\"\\``)} from paths because we couldn't find a tsconfig! If you intended to use a relative path ensure that your path starts with ${color.bold('`./`')}.`\n\t\t\t);\n\t\t}\n\n\t\tconst resolved = tryResolvePath(p, matcher, cwd);\n\n\t\tif (!resolved) {\n\t\t\treturn Err(\n\t\t\t\t`Cannot resolve ${color.bold(`\\`\"${category}\": \"${p}\"\\``)} from paths because we couldn't find a matching alias in the tsconfig. If you intended to use a relative path ensure that your path starts with ${color.bold('`./`')}.`\n\t\t\t);\n\t\t}\n\n\t\tnewPaths[category] = resolved;\n\t}\n\n\treturn Ok(newPaths);\n}\n\nfunction tryResolvePath(\n\tunresolvedPath: string,\n\tmatcher: (specifier: string) => string[],\n\tcwd: string\n): string | undefined {\n\tconst paths = matcher(unresolvedPath);\n\n\treturn paths.length > 0 ? path.relative(cwd, paths[0]) : undefined;\n}\n\n/** Gets the path where the block should be installed.\n *\n * @param block\n * @param resolvedPaths\n * @param cwd\n * @returns\n */\nexport function getPathForBlock(block: Block, resolvedPaths: Paths, cwd: string): string {\n\tlet directory: string;\n\n\tif (resolvedPaths[block.category] !== undefined) {\n\t\tdirectory = path.join(cwd, resolvedPaths[block.category]);\n\t} else {\n\t\tdirectory = path.join(cwd, resolvedPaths['*'], block.category);\n\t}\n\n\treturn directory;\n}\n","import color from 'chalk';\nimport {\n\thttp,\n\tazure,\n\tbitbucket,\n\tfetchManifest,\n\tfetchRaw,\n\tgithub,\n\tgitlab,\n\tjsrepo,\n\tproviders,\n\tselectProvider,\n} from '.';\nimport type { Block, Manifest } from '../../types';\nimport { Err, Ok, type Result } from '../blocks/ts/result';\nimport * as u from '../blocks/ts/url';\nimport { iFetch } from '../fetch';\nimport * as persisted from '../persisted';\nimport { TokenManager } from '../token-manager';\nimport type { RegistryProvider, RegistryProviderState } from './types';\n\nexport type RemoteBlock = Block & { sourceRepo: RegistryProviderState };\n\n/** Wraps the basic implementation to inject our internal fetch method and the correct token. */\nexport async function internalFetchRaw(\n\tstate: RegistryProviderState,\n\tresourcePath: string,\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n) {\n\treturn await fetchRaw(state, resourcePath, {\n\t\tverbose,\n\t\t// @ts-expect-error it's fine\n\t\tfetch: iFetch,\n\t\ttoken: getProviderToken(state.provider, state.url),\n\t});\n}\n\n/** Wraps the basic implementation to inject internal fetch method and the correct token. */\nexport async function internalFetchManifest(\n\tstate: RegistryProviderState,\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n) {\n\treturn await fetchManifest(state, {\n\t\tverbose,\n\t\t// @ts-expect-error it's fine\n\t\tfetch: iFetch,\n\t\ttoken: getProviderToken(state.provider, state.url),\n\t});\n}\n\n/** Gets the locally stored token for the given provider */\nexport function getProviderToken(provider: RegistryProvider, url: string): string | undefined {\n\tconst storage = new TokenManager();\n\n\t// there isn't an auth implementation for http\n\tif (provider.name === 'http') {\n\t\treturn storage.get(`http-${new URL(url).origin}`);\n\t}\n\n\treturn storage.get(provider.name);\n}\n\n/** Parses the provided url and returns the state.\n *\n * @param repo\n * @returns\n */\nexport async function getProviderState(\n\trepo: string,\n\t{ noCache = false }: { noCache?: boolean } = {}\n): Promise<Result<RegistryProviderState, string>> {\n\tconst provider = selectProvider(repo);\n\n\tif (provider) {\n\t\tconst storage = persisted.get();\n\n\t\t// only git providers are cached\n\t\tif (provider.name !== http.name && !noCache) {\n\t\t\tif (noCache) {\n\t\t\t\t// remove the outdated cache if it exists\n\t\t\t\tstorage.delete(`${repo}-state`);\n\t\t\t} else {\n\t\t\t\tconst cached = storage.get(`${repo}-state`);\n\n\t\t\t\tif (cached) return Ok({ ...(cached as RegistryProviderState), provider });\n\t\t\t}\n\t\t}\n\n\t\tconst parsed = provider.parse(repo, { fullyQualified: false });\n\n\t\tconst state = await provider.state(repo, {\n\t\t\ttoken: getProviderToken(provider, parsed.url),\n\t\t\t// @ts-expect-error but it does work\n\t\t\tfetch: iFetch,\n\t\t});\n\n\t\t// only cache git providers\n\t\tif (provider.name !== http.name && !noCache) {\n\t\t\tstorage.set(`${repo}-state`, state);\n\t\t}\n\n\t\treturn Ok(state);\n\t}\n\n\treturn Err(\n\t\t`Only ${providers.map((p, i) => `${i === providers.length - 1 ? 'and ' : ''}${color.bold(p.name)}`).join(', ')} registries are supported at this time!`\n\t);\n}\n\n/** Gets the provider state for each provided repo url\n *\n * @param repos\n * @returns\n */\nexport async function forEachPathGetProviderState(\n\trepos: string[],\n\t{ noCache = false }: { noCache?: boolean } = {}\n): Promise<Result<RegistryProviderState[], { message: string; repo: string }>> {\n\tconst resolvedPaths: RegistryProviderState[] = [];\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (repo) => {\n\t\t\tconst getProviderResult = await getProviderState(repo, { noCache });\n\n\t\t\tif (getProviderResult.isErr())\n\t\t\t\treturn Err({ message: getProviderResult.unwrapErr(), repo });\n\n\t\t\tconst providerState = getProviderResult.unwrap();\n\n\t\t\tresolvedPaths.push(providerState);\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(resolvedPaths);\n}\n\n/** Fetches blocks for each registry and stores them in a map by their repo as well as category and block name.\n *\n * Example Key:\n * `github/ieedan/std/utils/math`\n *\n * @param repos\n * @returns\n */\nexport async function fetchBlocks(\n\trepos: RegistryProviderState[],\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n): Promise<Result<Map<string, RemoteBlock>, { message: string; repo: string }>> {\n\tconst blocksMap = new Map<string, RemoteBlock>();\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (state) => {\n\t\t\tconst getManifestResult = await internalFetchManifest(state, { verbose });\n\n\t\t\tif (getManifestResult.isErr()) {\n\t\t\t\treturn Err({ message: getManifestResult.unwrapErr(), repo: state.url });\n\t\t\t}\n\n\t\t\tconst manifest = getManifestResult.unwrap();\n\n\t\t\tfor (const category of manifest.categories) {\n\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\tblocksMap.set(u.join(state.url, `${block.category}/${block.name}`), {\n\t\t\t\t\t\t...block,\n\t\t\t\t\t\tsourceRepo: state,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(blocksMap);\n}\n\n/** Maps the result of fetchManifests into a map of remote blocks\n *\n * @param manifests\n */\nexport function getRemoteBlocks(manifests: FetchManifestResult[]) {\n\tconst blocksMap = new Map<string, RemoteBlock>();\n\n\tfor (const manifest of manifests) {\n\t\tfor (const category of manifest.manifest.categories) {\n\t\t\tfor (const block of category.blocks) {\n\t\t\t\tblocksMap.set(u.join(manifest.state.url, `${block.category}/${block.name}`), {\n\t\t\t\t\t...block,\n\t\t\t\t\tsourceRepo: manifest.state,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn blocksMap;\n}\n\nexport type FetchManifestResult = {\n\tstate: RegistryProviderState;\n\tmanifest: Manifest;\n};\n\n/** Fetches the manifests for each provider\n *\n * @param repos\n * @returns\n */\nexport async function fetchManifests(\n\trepos: RegistryProviderState[],\n\t{ verbose }: { verbose?: (msg: string) => void } = {}\n): Promise<Result<FetchManifestResult[], { message: string; repo: string }>> {\n\tconst manifests: FetchManifestResult[] = [];\n\n\tconst errors = await Promise.all(\n\t\trepos.map(async (state) => {\n\t\t\tconst getManifestResult = await internalFetchManifest(state, { verbose });\n\n\t\t\tif (getManifestResult.isErr()) {\n\t\t\t\treturn Err({ message: getManifestResult.unwrapErr(), repo: state.url });\n\t\t\t}\n\n\t\t\tconst manifest = getManifestResult.unwrap();\n\n\t\t\tmanifests.push({ state, manifest });\n\t\t})\n\t);\n\n\tconst err = errors.find((err) => err !== undefined);\n\n\tif (err) return err;\n\n\treturn Ok(manifests);\n}\n\nexport * from './types';\n\nexport {\n\tazure,\n\tbitbucket,\n\tgithub,\n\tgitlab,\n\thttp,\n\tjsrepo,\n\tproviders,\n\tinternalFetchManifest as fetchManifest,\n\tinternalFetchRaw as fetchRaw,\n\tselectProvider,\n};\n","import fs from 'node:fs';\nimport color from 'chalk';\nimport { program } from 'commander';\nimport path from 'pathe';\nimport type { Block } from '../types';\nimport * as array from './blocks/ts/array';\nimport { Err, Ok, type Result } from './blocks/ts/result';\nimport * as url from './blocks/ts/url';\nimport { isTestFile } from './build';\nimport { type Paths, type ProjectConfig, getPathForBlock, resolvePaths } from './config';\nimport * as registry from './registry-providers/internal';\n\nexport async function resolveTree(\n\tblockSpecifiers: string[],\n\tblocksMap: Map<string, registry.RemoteBlock>,\n\trepoPaths: registry.RegistryProviderState[],\n\tinstalled: Map<string, registry.RemoteBlock> = new Map()\n): Promise<Result<registry.RemoteBlock[], string>> {\n\tconst blocks = new Map<string, registry.RemoteBlock>();\n\n\tfor (const blockSpecifier of blockSpecifiers) {\n\t\tlet block: registry.RemoteBlock | undefined = undefined;\n\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// if the block starts with github (or another provider) we know it has been resolved\n\t\tif (!provider) {\n\t\t\tif (repoPaths.length === 0) {\n\t\t\t\treturn Err(\n\t\t\t\t\tcolor.red(\n\t\t\t\t\t\t`If your config doesn't contain repos then you must provide the repo in the block specifier ex: \\`${color.bold(\n\t\t\t\t\t\t\t`github/ieedan/std/${blockSpecifier}`\n\t\t\t\t\t\t)}\\`!`\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// check every repo for the block and return the first block found\n\t\t\tfor (const providerState of repoPaths) {\n\t\t\t\tconst { url: repoIdent, specifier } = providerState.provider.parse(\n\t\t\t\t\turl.join(providerState.url, blockSpecifier),\n\t\t\t\t\t{ fullyQualified: true }\n\t\t\t\t);\n\n\t\t\t\tconst tempBlock = blocksMap.get(url.join(repoIdent, specifier!));\n\n\t\t\t\tif (tempBlock === undefined) continue;\n\n\t\t\t\tblock = tempBlock;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\t// get shortened name\n\t\t\tconst { url: repoIdent, specifier } = provider.parse(blockSpecifier, {\n\t\t\t\tfullyQualified: true,\n\t\t\t});\n\n\t\t\t// just beautifies name a bit\n\t\t\tblock = blocksMap.get(url.join(repoIdent, specifier!));\n\t\t}\n\n\t\tif (!block) {\n\t\t\treturn Err(`Invalid block! ${color.bold(blockSpecifier)} does not exist!`);\n\t\t}\n\n\t\tconst specifier = `${block.category}/${block.name}`;\n\n\t\tblocks.set(specifier, block);\n\n\t\tif (block.localDependencies && block.localDependencies.length > 0) {\n\t\t\tconst subDeps = await resolveTree(\n\t\t\t\tblock.localDependencies.filter((dep) => !blocks.has(dep) && !installed.has(dep)),\n\t\t\t\tblocksMap,\n\t\t\t\trepoPaths,\n\t\t\t\tblocks\n\t\t\t);\n\n\t\t\tif (subDeps.isErr()) return Err(subDeps.unwrapErr());\n\n\t\t\tfor (const dep of subDeps.unwrap()) {\n\t\t\t\tblocks.set(`${dep.category}/${dep.name}`, dep);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn Ok(array.fromMap(blocks, (_, val) => val));\n}\n\ntype InstalledBlock = {\n\tspecifier: `${string}/${string}`;\n\tpath: string;\n\tblock: Block;\n};\n\n/** Finds installed blocks and returns them as `<category>/<name>`\n *\n * @param blocks\n * @param config\n * @returns\n */\nexport function getInstalled(\n\tblocks: Map<string, Block>,\n\tconfig: ProjectConfig,\n\tcwd: string\n): InstalledBlock[] {\n\tconst installedBlocks: InstalledBlock[] = [];\n\n\tconst resolvedPaths = resolvePaths(config.paths, cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tfor (const [_, block] of blocks) {\n\t\tconst baseDir = getPathForBlock(block, resolvedPaths, cwd);\n\n\t\tlet blockPath = path.join(baseDir, block.files[0]);\n\t\tif (block.subdirectory) {\n\t\t\tblockPath = path.join(baseDir, block.name);\n\t\t}\n\n\t\tif (fs.existsSync(blockPath))\n\t\t\tinstalledBlocks.push({\n\t\t\t\tspecifier: `${block.category}/${block.name}`,\n\t\t\t\tpath: blockPath,\n\t\t\t\tblock,\n\t\t\t});\n\t}\n\n\treturn installedBlocks;\n}\n\nexport type RegistryFile = {\n\tname: string;\n\tcontent: Result<string, string>;\n};\n\ntype PreloadedBlock = {\n\tblock: registry.RemoteBlock;\n\tfiles: Promise<RegistryFile[]>;\n};\n\n/** Starts loading the content of the files for each block and\n * returns the blocks mapped to a promise that contains their files and their contents.\n *\n * @param blocks\n * @returns\n */\nexport function preloadBlocks(\n\tblocks: registry.RemoteBlock[],\n\tconfig: Pick<ProjectConfig, 'includeTests'>\n): PreloadedBlock[] {\n\tconst preloaded: PreloadedBlock[] = [];\n\n\tfor (const block of blocks) {\n\t\t// filters out test files if they are not supposed to be included\n\t\tconst includedFiles = block.files.filter((file) =>\n\t\t\tisTestFile(file) ? config.includeTests : true\n\t\t);\n\n\t\tconst files = Promise.all(\n\t\t\tincludedFiles.map(async (file) => {\n\t\t\t\tconst content = await registry.fetchRaw(\n\t\t\t\t\tblock.sourceRepo,\n\t\t\t\t\tpath.join(block.directory, file)\n\t\t\t\t);\n\n\t\t\t\treturn { name: file, content };\n\t\t\t})\n\t\t);\n\n\t\tpreloaded.push({\n\t\t\tblock,\n\t\t\tfiles,\n\t\t});\n\t}\n\n\treturn preloaded;\n}\n\n/** Gets the path for the file belonging to the provided block\n *\n * @param fileName\n * @param block\n * @param resolvedPaths\n * @param cwd\n * @returns\n */\nexport function getBlockFilePath(\n\tfileName: string,\n\tblock: registry.RemoteBlock,\n\tresolvedPaths: Paths,\n\tcwd: string\n) {\n\tconst directory = getPathForBlock(block, resolvedPaths, cwd);\n\n\tif (block.subdirectory) {\n\t\treturn path.join(directory, block.name, fileName);\n\t}\n\n\treturn path.join(directory, fileName);\n}\n","import { InvalidArgumentError } from 'commander';\n\n/** Handles `--x foo=bar,bar=foo`\n *\n * @param value\n * @returns\n */\nexport function parseRecord(value: string | undefined): Record<string, string> | undefined {\n\tif (value === undefined) return undefined;\n\n\tconst result: Record<string, string> = {};\n\n\tfor (const pair of value.split(',')) {\n\t\tconst [key, value] = pair.split('=');\n\n\t\tif (key === undefined || value === undefined) {\n\t\t\tthrow new InvalidArgumentError(\n\t\t\t\t'Expected map to be provided in the following format: `--option key=value,key=value`'\n\t\t\t);\n\t\t}\n\n\t\tresult[key] = value;\n\t}\n\n\treturn result;\n}\n","/*\n\tInstalled from github/ieedan/std\n*/\n\n/** Returns a promise that immediately resolves to `T`, useful when you need to mix sync and async code.\n *\n * @param val\n *\n * ### Usage\n * ```ts\n * const promises: Promise<number>[] = [];\n *\n * promises.push(immediate(10));\n * ```\n */\nexport function immediate<T>(val: T): Promise<T> {\n\treturn new Promise<T>((res) => res(val));\n}\n","import fs from 'node:fs';\nimport type { PartialConfiguration } from '@biomejs/wasm-nodejs';\nimport path from 'pathe';\nimport * as prettier from 'prettier';\nimport type { Formatter } from './config';\n\nexport type FormatterConfig = {\n\tprettierOptions: prettier.Options | null;\n\tbiomeOptions: PartialConfiguration | null;\n};\n\nexport async function loadFormatterConfig({\n\tformatter,\n\tcwd,\n}: { formatter?: Formatter; cwd: string }): Promise<FormatterConfig> {\n\tlet prettierOptions: prettier.Options | null = null;\n\tif (formatter === 'prettier') {\n\t\tprettierOptions = await prettier.resolveConfig(path.join(cwd, '.prettierrc'));\n\t}\n\n\tlet biomeOptions: PartialConfiguration | null = null;\n\tif (formatter === 'biome') {\n\t\tconst configPath = path.join(cwd, 'biome.json');\n\t\tif (fs.existsSync(configPath)) {\n\t\t\tbiomeOptions = JSON.parse(fs.readFileSync(configPath).toString());\n\t\t}\n\t}\n\n\treturn {\n\t\tbiomeOptions,\n\t\tprettierOptions,\n\t};\n}\n","export function getWatermark(repoUrl: string): string {\n\treturn `Installed from ${repoUrl}`;\n}\n","import color from 'chalk';\nimport { program } from 'commander';\nimport path from 'pathe';\nimport semver from 'semver';\nimport type { Manifest } from '../types';\nimport * as ASCII from './ascii';\nimport { cleanVersion, getPackage } from './package';\nimport type { RegistryProviderState } from './registry-providers';\n\n/** Checks if there are any reasons that the CLI should not proceed and logs warnings or stops execution accordingly.\n *\n * @param providerState\n * @param manifest\n * @returns\n */\nexport function checkPreconditions(\n\tproviderState: RegistryProviderState,\n\tmanifest: Manifest,\n\tcwd: string\n) {\n\tif (!manifest.peerDependencies) return;\n\n\tconst pkg = getPackage(path.join(cwd, 'package.json')).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tif (err.endsWith(\"doesn't exist\")) {\n\t\t\t\tprogram.error(\n\t\t\t\t\t`Couldn't find your ${color.bold('package.json')}. Please create one.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tprogram.error(color.red(err));\n\t\t}\n\t);\n\n\tconst dependencies = { ...pkg.dependencies, ...pkg.devDependencies };\n\n\tconst incompatible: {\n\t\tname: string;\n\t\tversion: string;\n\t\texists: boolean;\n\t\texpected: string;\n\t\tmessage?: string;\n\t}[] = [];\n\n\tfor (const [name, options] of Object.entries(manifest.peerDependencies)) {\n\t\tlet expected: string;\n\t\tlet message: string | undefined = undefined;\n\n\t\tif (typeof options === 'string') {\n\t\t\texpected = options;\n\t\t} else {\n\t\t\texpected = options.version;\n\t\t\tmessage = options.message;\n\t\t}\n\n\t\tconst version = dependencies[name];\n\n\t\tif (!version) {\n\t\t\tincompatible.push({\n\t\t\t\tname,\n\t\t\t\texpected,\n\t\t\t\tmessage,\n\t\t\t\tversion,\n\t\t\t\texists: false,\n\t\t\t});\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!semver.satisfies(cleanVersion(version), expected)) {\n\t\t\tincompatible.push({\n\t\t\t\tname,\n\t\t\t\texpected,\n\t\t\t\tmessage,\n\t\t\t\tversion,\n\t\t\t\texists: true,\n\t\t\t});\n\t\t}\n\t}\n\n\tif (incompatible.length > 0) {\n\t\tprocess.stdout.write(\n\t\t\t`${ASCII.VERTICAL_LINE}\\n${color.yellow('▲')} ${ASCII.JUNCTION_TOP} Issues with ${color.bold(providerState.url)} peer dependencies\\n`\n\t\t);\n\t\tconst msgs = incompatible\n\t\t\t.map((dep, i) => {\n\t\t\t\tconst last = incompatible.length - 1 === i;\n\n\t\t\t\tlet message: string;\n\n\t\t\t\tif (dep.exists) {\n\t\t\t\t\tmessage = `${color.yellowBright('x unmet peer')} need ${color.bold(`${dep.name}@`)}${color.greenBright.bold(dep.expected)} >> found ${color.yellowBright.bold(dep.version)}`;\n\t\t\t\t} else {\n\t\t\t\t\tmessage = `${color.red('x missing peer')} need ${color.bold(`${dep.name}@`)}${color.greenBright.bold(dep.expected)}`;\n\t\t\t\t}\n\n\t\t\t\tconst versionMessage = `${ASCII.VERTICAL_LINE} ${last ? ASCII.BOTTOM_LEFT_CORNER : ASCII.JUNCTION_RIGHT}${ASCII.HORIZONTAL_LINE} ${message}`;\n\n\t\t\t\tif (!dep.message) {\n\t\t\t\t\treturn versionMessage;\n\t\t\t\t}\n\n\t\t\t\treturn `${versionMessage}\\n${ASCII.VERTICAL_LINE} ${!last ? ASCII.VERTICAL_LINE : ''} ${color.gray(dep.message)}`;\n\t\t\t})\n\t\t\t.join('\\n');\n\n\t\tprocess.stdout.write(`${msgs}\\n`);\n\t}\n}\n","/*\n\tInstalled from @ieedan/std\n*/\n\n/** Await this to pause execution until the duration has passed.\n *\n * @param durationMs The duration in ms until the sleep in over\n * @returns\n *\n * ## Usage\n * ```ts\n * console.log(Date.now()) // 1725739228744\n *\n * await sleep(1000);\n *\n * console.log(Date.now()) // 1725739229744\n * ```\n */\nexport function sleep(durationMs: number): Promise<void> {\n\treturn new Promise((res) => setTimeout(res, durationMs));\n}\n","import { cancel, confirm, isCancel, log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport nodeMachineId from 'node-machine-id';\nimport * as v from 'valibot';\nimport * as ASCII from '../utils/ascii';\nimport { sleep } from '../utils/blocks/ts/sleep';\nimport { iFetch } from '../utils/fetch';\nimport { intro, spinner } from '../utils/prompts';\nimport * as jsrepo from '../utils/registry-providers/jsrepo';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\ttoken: v.optional(v.string()),\n\tlogout: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const auth = new Command('auth')\n\t.description('Authenticate to jsrepo.com')\n\t.option('--logout', 'Execute the logout flow.', false)\n\t.option('--token <token>', 'The token to use for authenticating to this service.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _auth(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _auth(options: Options) {\n\tconst tokenManager = new TokenManager();\n\n\tif (options.logout) {\n\t\ttokenManager.delete('jsrepo');\n\t\tlog.success(`Logged out of ${ASCII.JSREPO_DOT_COM}!`);\n\t\treturn;\n\t}\n\n\tif (options.token !== undefined) {\n\t\ttokenManager.set('jsrepo', options.token);\n\t\tlog.success(`Logged into ${ASCII.JSREPO_DOT_COM}!`);\n\t\treturn;\n\t}\n\n\tif (tokenManager.get('jsrepo') !== undefined) {\n\t\tconst result = await confirm({\n\t\t\tmessage: 'You are currently signed into jsrepo do you want to sign out?',\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tconst hardwareId = nodeMachineId.machineIdSync(true);\n\n\tlet anonSessionId: string;\n\n\ttry {\n\t\tconst response = await iFetch(`${jsrepo.BASE_URL}/api/login/device`, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\tbody: JSON.stringify({ hardwareId }),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error('There was an error creating the session');\n\t\t}\n\n\t\tconst res = await response.json();\n\n\t\tanonSessionId = res.id;\n\t} catch (err) {\n\t\tprogram.error(color.red(err));\n\t}\n\n\tlog.step(`Sign in at ${color.cyan(`${jsrepo.BASE_URL}/login/device/${anonSessionId}`)}`);\n\n\tconst timeout = 1000 * 60 * 60 * 15; // 15 minutes\n\n\tconst loading = spinner();\n\n\tconst pollingTimeout = setTimeout(() => {\n\t\tloading.stop('You never signed in.');\n\n\t\tprogram.error(color.red('Session timed out try again!'));\n\t}, timeout);\n\n\tloading.start('Waiting for you to sign in...');\n\n\twhile (true) {\n\t\t// wait initially cause c'mon ain't no way\n\t\tawait sleep(5000); // wait 5 seconds\n\n\t\tconst endpoint = `${jsrepo.BASE_URL}/api/login/device/${anonSessionId}`;\n\n\t\ttry {\n\t\t\tconst response = await iFetch(endpoint, {\n\t\t\t\tmethod: 'PATCH',\n\t\t\t\theaders: { 'content-type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ hardwareId }),\n\t\t\t});\n\n\t\t\tif (!response.ok) continue;\n\n\t\t\tclearTimeout(pollingTimeout);\n\n\t\t\tconst key = await response.text();\n\n\t\t\ttokenManager.set('jsrepo', key);\n\n\t\t\tloading.stop(`Logged into ${ASCII.JSREPO_DOT_COM}!`);\n\n\t\t\tbreak;\n\t\t} catch {\n\t\t\t// continue\n\t\t}\n\t}\n}\n","import fs from 'node:fs';\nimport { log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport ignore from 'ignore';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport { MANIFEST_FILE } from '../constants';\nimport type { Category } from '../types';\nimport * as ascii from '../utils/ascii';\nimport { buildBlocksDirectory, buildConfigFiles, pruneUnused } from '../utils/build';\nimport { DEFAULT_CONFIG, runRules } from '../utils/build/check';\nimport { IGNORED_DIRS, type RegistryConfig, getRegistryConfig } from '../utils/config';\nimport { createManifest, parseManifest } from '../utils/manifest';\nimport { intro, spinner } from '../utils/prompts';\n\nconst schema = v.object({\n\tdirs: v.optional(v.array(v.string())),\n\toutputDir: v.optional(v.string()),\n\tincludeBlocks: v.optional(v.array(v.string())),\n\tincludeCategories: v.optional(v.array(v.string())),\n\texcludeBlocks: v.optional(v.array(v.string())),\n\texcludeCategories: v.optional(v.array(v.string())),\n\texcludeDeps: v.optional(v.array(v.string())),\n\tlistBlocks: v.optional(v.array(v.string())),\n\tlistCategories: v.optional(v.array(v.string())),\n\tdoNotListBlocks: v.optional(v.array(v.string())),\n\tdoNotListCategories: v.optional(v.array(v.string())),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tpreview: v.optional(v.boolean()),\n\toutput: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst build = new Command('build')\n\t.description(`Builds the provided --dirs in the project root into a \\`${MANIFEST_FILE}\\` file.`)\n\t.option('--dirs [dirs...]', 'The directories containing the blocks.')\n\t.option(\n\t\t'--output-dir <dir>',\n\t\t'The directory to output the registry to. (Copies jsrepo-manifest.json + all required files)'\n\t)\n\t.option('--include-blocks [blockNames...]', 'Include only the blocks with these names.')\n\t.option(\n\t\t'--include-categories [categoryNames...]',\n\t\t'Include only the categories with these names.'\n\t)\n\t.option('--exclude-blocks [blockNames...]', 'Do not include the blocks with these names.')\n\t.option(\n\t\t'--exclude-categories [categoryNames...]',\n\t\t'Do not include the categories with these names.'\n\t)\n\t.option('--list-blocks [blockNames...]', 'List only the blocks with these names.')\n\t.option('--list-categories [categoryNames...]', 'List only the categories with these names.')\n\t.option('--do-not-list-blocks [blockNames...]', 'Do not list the blocks with these names.')\n\t.option(\n\t\t'--do-not-list-categories [categoryNames...]',\n\t\t'Do not list the categories with these names.'\n\t)\n\t.option('--exclude-deps [deps...]', 'Dependencies that should not be added.')\n\t.option('--allow-subdirectories', 'Allow subdirectories to be built.')\n\t.option('--preview', 'Display a preview of the blocks list.')\n\t.option('--no-output', `Do not output a \\`${MANIFEST_FILE}\\` file.`)\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _build(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _build(options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst categories: Category[] = [];\n\n\tconst config: RegistryConfig = getRegistryConfig(options.cwd).match(\n\t\t(val) => {\n\t\t\tif (val === null) {\n\t\t\t\treturn {\n\t\t\t\t\t$schema: '',\n\t\t\t\t\treadme: 'README.md',\n\t\t\t\t\tdirs: options.dirs ?? [],\n\t\t\t\t\toutputDir: options.outputDir,\n\t\t\t\t\tdoNotListBlocks: options.doNotListBlocks ?? [],\n\t\t\t\t\tdoNotListCategories: options.doNotListCategories ?? [],\n\t\t\t\t\tlistBlocks: options.listBlocks ?? [],\n\t\t\t\t\tlistCategories: options.listCategories ?? [],\n\t\t\t\t\texcludeDeps: options.excludeDeps ?? [],\n\t\t\t\t\tincludeBlocks: options.includeBlocks ?? [],\n\t\t\t\t\tincludeCategories: options.includeCategories ?? [],\n\t\t\t\t\texcludeBlocks: options.excludeBlocks ?? [],\n\t\t\t\t\texcludeCategories: options.excludeCategories ?? [],\n\t\t\t\t\tallowSubdirectories: options.allowSubdirectories,\n\t\t\t\t\tpreview: options.preview,\n\t\t\t\t} satisfies RegistryConfig;\n\t\t\t}\n\n\t\t\tconst mergedVal = val;\n\n\t\t\t// overwrites config with flag values\n\n\t\t\tif (options.dirs) mergedVal.dirs = options.dirs;\n\t\t\tif (options.outputDir) mergedVal.outputDir = options.outputDir;\n\t\t\tif (options.doNotListBlocks) mergedVal.doNotListBlocks = options.doNotListBlocks;\n\t\t\tif (options.doNotListCategories)\n\t\t\t\tmergedVal.doNotListCategories = options.doNotListCategories;\n\t\t\tif (options.listBlocks) mergedVal.listBlocks = options.listBlocks;\n\t\t\tif (options.listCategories) mergedVal.listCategories = options.listCategories;\n\t\t\tif (options.includeBlocks) mergedVal.includeBlocks = options.includeBlocks;\n\t\t\tif (options.includeCategories) mergedVal.includeCategories = options.includeCategories;\n\t\t\tif (options.excludeBlocks) mergedVal.excludeBlocks = options.excludeBlocks;\n\t\t\tif (options.excludeCategories) mergedVal.excludeCategories = options.excludeCategories;\n\t\t\tif (options.excludeDeps) mergedVal.excludeDeps = options.excludeDeps;\n\t\t\tif (options.allowSubdirectories !== undefined)\n\t\t\t\tmergedVal.allowSubdirectories = options.allowSubdirectories;\n\t\t\tif (options.preview !== undefined) mergedVal.preview = options.preview;\n\n\t\t\tmergedVal.rules = { ...DEFAULT_CONFIG, ...mergedVal.rules };\n\n\t\t\treturn mergedVal;\n\t\t},\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tlet outDir: string;\n\n\tif (config.outputDir) {\n\t\toutDir = path.join(options.cwd, config.outputDir);\n\t} else {\n\t\toutDir = options.cwd;\n\t}\n\n\tconst manifestOut = path.join(outDir, MANIFEST_FILE);\n\n\tif (options.output && fs.existsSync(manifestOut)) {\n\t\t// we need to remove all previously copied directories\n\t\tif (config.outputDir) {\n\t\t\t// read old manifest to determine where the unwanted files are\n\t\t\t// we can't just rm -rf because other static files could be hosted out of the same directory\n\t\t\tconst oldManifest = parseManifest(fs.readFileSync(manifestOut).toString());\n\n\t\t\tif (oldManifest.isOk()) {\n\t\t\t\t// first just remove all the files\n\t\t\t\tfor (const category of oldManifest.unwrap().categories) {\n\t\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\t\tconst newDirPath = path.join(outDir, block.directory);\n\n\t\t\t\t\t\tif (fs.existsSync(newDirPath)) {\n\t\t\t\t\t\t\tfs.rmSync(newDirPath, { recursive: true });\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfs.rmSync(manifestOut);\n\t}\n\n\tconst ig = ignore();\n\n\ttry {\n\t\tconst ignoreFile = fs.readFileSync(path.join(options.cwd, '.gitignore')).toString();\n\n\t\tig.add(ignoreFile);\n\t} catch {\n\t\t// just continue on\n\t}\n\n\tig.add(IGNORED_DIRS);\n\n\tfor (const dir of config.dirs) {\n\t\tconst dirPath = path.join(options.cwd, dir);\n\n\t\tloading.start(`Building ${color.cyan(dirPath)}`);\n\n\t\tconst builtCategories = buildBlocksDirectory(dirPath, {\n\t\t\tcwd: options.cwd,\n\t\t\tignore: ig,\n\t\t\tconfig,\n\t\t});\n\n\t\tfor (const category of builtCategories) {\n\t\t\tif (categories.find((cat) => cat.name === category.name) !== undefined) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding \\`${color.cyan(`${dir}/${category.name}`)}\\` because a category with the same name already exists!`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcategories.push(category);\n\t\t}\n\n\t\tloading.stop(`Built ${color.cyan(dirPath)}`);\n\t}\n\n\tconst configFiles = buildConfigFiles(config, { cwd: options.cwd });\n\n\tconst manifest = createManifest(categories, configFiles, config);\n\n\tloading.start('Checking manifest');\n\n\tconst { warnings, errors } = runRules(manifest, config, options.cwd, config.rules);\n\n\tloading.stop('Completed checking manifest.');\n\n\t// add gap for errors\n\tif (warnings.length > 0 || errors.length > 0) {\n\t\tconsole.log(ascii.VERTICAL_LINE);\n\t}\n\n\tfor (const warning of warnings) {\n\t\tconsole.log(warning);\n\t}\n\n\tif (errors.length > 0) {\n\t\tfor (const error of errors) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Completed checking manifest with ${color.bold(`${errors.length} error(s)`)} and ${color.bold(`${warnings.length} warning(s)`)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// removes any unused blocks or categories\n\tconst [prunedCategories, count] = pruneUnused(manifest.categories);\n\n\tmanifest.categories = prunedCategories;\n\n\tif (count > 0) {\n\t\tlog.step(`Removed ${count} unused block${count > 1 ? 's' : ''}.`);\n\t}\n\n\tif (config.preview) {\n\t\tconst blocks = manifest.categories.flatMap((cat) =>\n\t\t\tcat.blocks.filter((b) => b.list).map((b) => `${color.cyan(b.category)}/${b.name}`)\n\t\t);\n\n\t\tlog.message(`${color.yellow('Preview')}:`);\n\n\t\tfor (const block of blocks) {\n\t\t\tconsole.log(`${ascii.VERTICAL_LINE} ◻ ${block}`);\n\t\t}\n\t}\n\n\tif (options.output) {\n\t\tif (config.outputDir) {\n\t\t\tloading.start(`Copying registry files to \\`${color.cyan(outDir)}\\``);\n\n\t\t\t// copy config files to output directory\n\t\t\tif (manifest.configFiles) {\n\t\t\t\tfor (const file of manifest.configFiles) {\n\t\t\t\t\tconst originalPath = path.join(options.cwd, file.path);\n\t\t\t\t\tconst destPath = path.join(outDir, file.path);\n\n\t\t\t\t\tconst containing = path.join(destPath, '../');\n\n\t\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tfs.copyFileSync(originalPath, destPath);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// copy the files for each block in each category\n\t\t\tfor (const category of manifest.categories) {\n\t\t\t\tfor (const block of category.blocks) {\n\t\t\t\t\tconst originalPath = path.join(options.cwd, block.directory);\n\t\t\t\t\tconst newDirPath = path.join(outDir, block.directory);\n\n\t\t\t\t\tfor (const file of block.files) {\n\t\t\t\t\t\tconst containing = path.join(newDirPath, file, '../');\n\n\t\t\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfs.copyFileSync(path.join(originalPath, file), path.join(newDirPath, file));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloading.stop(`Copied registry files to \\`${color.cyan(outDir)}\\``);\n\t\t}\n\n\t\tloading.start(`Writing output to \\`${color.cyan(manifestOut)}\\``);\n\n\t\t// write manifest\n\t\tfs.writeFileSync(manifestOut, JSON.stringify(manifest, null, '\\t'));\n\n\t\tloading.stop(`Wrote output to \\`${color.cyan(manifestOut)}\\``);\n\t}\n}\n\nexport { build };\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, select } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { resolveTree } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { isTestFile } from '../utils/build';\nimport { type ProjectConfig, getProjectConfig, resolvePaths } from '../utils/config';\nimport {\n\ttype ConcurrentTask,\n\tintro,\n\tpromptInstallDependencies,\n\trunTasksConcurrently,\n\tspinner,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.objectWithRest(\n\t{\n\t\trepo: v.optional(v.string()),\n\t\tallow: v.boolean(),\n\t\tcache: v.boolean(),\n\t\tverbose: v.boolean(),\n\t\tcwd: v.string(),\n\t},\n\tv.unknown()\n);\n\ntype Options = v.InferInput<typeof schema>;\n\nconst exec = new Command('exec')\n\t.alias('x')\n\t.description('Execute a block as a script.')\n\t.addArgument(\n\t\tnew Argument(\n\t\t\t'script',\n\t\t\t'Name of the script you want to execute. ex: (general/hello, github/ieedan/std/general/hello)'\n\t\t).argOptional()\n\t)\n\t.option('--repo <repo>', 'Repository to download and run the script from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.allowExcessArguments()\n\t.allowUnknownOption()\n\t.action(async (script, opts, command) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _exec(script, options, command);\n\t});\n\n// biome-ignore lint/suspicious/noExplicitAny: we don't have a type for command\nexport async function _exec(s: string | undefined, options: Options, command: any) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tlet script = s;\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst configResult = getProjectConfig(options.cwd);\n\n\t/** The user has opted for no config */\n\tconst noConfig = configResult.isErr();\n\n\tlet config: ProjectConfig;\n\n\tif (configResult.isErr()) {\n\t\t// add default config used for default values in prompts\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tincludeTests: false,\n\t\t\twatermark: true,\n\t\t\tpaths: {\n\t\t\t\t'*': './',\n\t\t\t},\n\t\t\trepos: [],\n\t\t};\n\t} else {\n\t\tconfig = configResult.unwrap();\n\t}\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\tconst provider = script ? registry.selectProvider(script) : undefined;\n\n\t// we are only getting repos for blocks that specified repos\n\tif (script && provider) {\n\t\tconst { url: repo } = provider.parse(script, { fullyQualified: true });\n\n\t\tif (!repoPaths.find((repoPath) => repoPath === repo)) {\n\t\t\tif (!options.allow) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(repo)}?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result) || !result) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trepoPaths = [repo];\n\t\t}\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${ascii.JSREPO} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (repoPaths.length === 0) {\n\t\tif (noConfig) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Fully quality your script ex: (github/ieedan/std/scripts/build) or provide the \\`${color.bold(\n\t\t\t\t\t\t'--repo'\n\t\t\t\t\t)}\\` flag to specify a registry.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`There were no repos present in your config and you didn't provide the \\`${color.bold(\n\t\t\t\t\t'--repo'\n\t\t\t\t)}\\` flag with a repo.`\n\t\t\t)\n\t\t);\n\t}\n\n\tloading.start(`Fetching scripts from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = (\n\t\tawait registry.fetchBlocks(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching scripts from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tloading.stop(`Retrieved scripts from ${color.cyan(repoPaths.join(', '))}`);\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (!script) {\n\t\tconst promptResult = await select({\n\t\t\tmessage: 'Select which script to run.',\n\t\t\toptions: Array.from(blocksMap.entries())\n\t\t\t\t.filter(([_, value]) => value.list)\n\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\tlet label: string;\n\n\t\t\t\t\t// show the full repo if there are multiple repos\n\t\t\t\t\tif (repoPaths.length > 1) {\n\t\t\t\t\t\tlabel = `${color.cyan(url.join(value.sourceRepo.url, value.category))}/${value.name}`;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel = `${color.cyan(value.category)}/${value.name}`;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tscript = promptResult as string;\n\t}\n\n\tconst installingBlocks = (await resolveTree([script], blocksMap, resolvedRepos)).match(\n\t\t(val) => val,\n\t\t(err) => program.error(err)\n\t);\n\n\tconst tempDirBase = 'temp-jsrepo-exec';\n\n\tconst tempDirectoryRelative = `./${tempDirBase}/${encodeURIComponent(script)}`;\n\n\tconst tempDirectory = path.join(process.cwd(), tempDirectoryRelative);\n\n\tconfig.paths['*'] = tempDirectoryRelative;\n\n\tfs.mkdirSync(tempDirectory, { recursive: true });\n\n\tconst pm = (await detect({ cwd: process.cwd() }))?.agent ?? 'npm';\n\n\tconst tasks: ConcurrentTask[] = [];\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst resolvedPathsResult = resolvePaths(config.paths, options.cwd);\n\n\tif (resolvedPathsResult.isErr()) {\n\t\tprogram.error(color.red(resolvedPathsResult.unwrapErr()));\n\t}\n\n\tconst resolvedPaths = resolvedPathsResult.unwrap();\n\n\tconst addedBlocks: string[] = [];\n\n\tfor (const block of installingBlocks) {\n\t\tconst fullSpecifier = `${block.sourceRepo.url}/${block.category}/${block.name}`;\n\t\tconst shortSpecifier = `${block.category}/${block.name}`;\n\n\t\tconst providerInfo = block.sourceRepo;\n\n\t\tconst directory = path.join(options.cwd, resolvedPaths['*'], block.category);\n\n\t\taddedBlocks.push(shortSpecifier);\n\n\t\ttasks.push({\n\t\t\trun: async ({ message }) => {\n\t\t\t\tmessage(`Adding ${color.cyan(fullSpecifier)}`);\n\n\t\t\t\t// in case the directory didn't already exist\n\t\t\t\tfs.mkdirSync(directory, { recursive: true });\n\n\t\t\t\tconst files: { content: string; destPath: string }[] = [];\n\n\t\t\t\tconst getSourceFile = async (filePath: string) => {\n\t\t\t\t\tconst content = await registry.fetchRaw(providerInfo, filePath);\n\n\t\t\t\t\tif (content.isErr()) {\n\t\t\t\t\t\tloading.stop(color.red(`Error fetching ${color.bold(filePath)}`));\n\t\t\t\t\t\tprogram.error(\n\t\t\t\t\t\t\tcolor.red(`There was an error trying to get ${fullSpecifier}`)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn content.unwrap();\n\t\t\t\t};\n\n\t\t\t\tfor (const sourceFile of block.files) {\n\t\t\t\t\tif (!config.includeTests && isTestFile(sourceFile)) continue;\n\n\t\t\t\t\tconst sourcePath = path.join(block.directory, sourceFile);\n\n\t\t\t\t\tlet destPath: string;\n\t\t\t\t\tif (block.subdirectory) {\n\t\t\t\t\t\tdestPath = path.join(directory, block.name, sourceFile);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdestPath = path.join(directory, sourceFile);\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = await getSourceFile(sourcePath);\n\n\t\t\t\t\tconst pathFolder = destPath.slice(0, destPath.length - sourceFile.length);\n\n\t\t\t\t\tfs.mkdirSync(pathFolder, {\n\t\t\t\t\t\trecursive: true,\n\t\t\t\t\t});\n\n\t\t\t\t\tfiles.push({ content, destPath });\n\t\t\t\t}\n\n\t\t\t\tfor (const file of files) {\n\t\t\t\t\tfs.writeFileSync(file.destPath, file.content);\n\t\t\t\t}\n\n\t\t\t\tif (config.includeTests && block.tests) {\n\t\t\t\t\tconst { devDependencies } = JSON.parse(\n\t\t\t\t\t\tfs.readFileSync(path.join(options.cwd, 'package.json')).toString()\n\t\t\t\t\t);\n\n\t\t\t\t\tif (devDependencies === undefined || devDependencies.vitest === undefined) {\n\t\t\t\t\t\tdevDeps.add('vitest');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tfor (const dep of block.devDependencies) {\n\t\t\t\t\tdevDeps.add(dep);\n\t\t\t\t}\n\n\t\t\t\tfor (const dep of block.dependencies) {\n\t\t\t\t\tdeps.add(dep);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tawait runTasksConcurrently({\n\t\tstartMessage: 'Adding blocks',\n\t\tstopMessage: `Added ${color.cyan(addedBlocks.join(', '))}`,\n\t\tloading,\n\t\ttasks,\n\t});\n\n\tconst hasDependencies = deps.size > 0 || devDeps.size > 0;\n\n\t// create temporary package.json\n\tif (hasDependencies) {\n\t\t// add package.json\n\t\tconst packageContent = {\n\t\t\tname: 'temp-package',\n\t\t\ttype: 'module',\n\t\t\tversion: '0.0.1',\n\t\t};\n\n\t\tconst packagePath = path.join(tempDirectory, 'package.json');\n\n\t\tfs.writeFileSync(packagePath, JSON.stringify(packageContent, null, '\\t'));\n\t}\n\n\tawait promptInstallDependencies(deps, devDeps, {\n\t\tyes: true,\n\t\tno: false,\n\t\tcwd: tempDirectory,\n\t\tpm,\n\t\tignoreWorkspace: true,\n\t});\n\n\tconst startIndex = (command.parent.rawArgs as string[]).findIndex((arg) => arg === '--');\n\n\tlet passthroughArgs: string[] = [];\n\n\tif (startIndex !== -1) {\n\t\tpassthroughArgs = command.parent.rawArgs.slice(startIndex + 1);\n\t}\n\n\tverbose(`Passing args ${color.cyan(passthroughArgs.join(' '))}`);\n\n\t// run the cli\n\n\tconsole.clear();\n\n\tconst runningBlock = installingBlocks[0];\n\n\tlet file: string;\n\n\t// tsx seems to be smart enough to figure out if it is a .ts file\n\tif (runningBlock.subdirectory) {\n\t\tfile = path.join(tempDirectory, `${runningBlock.category}/${runningBlock.name}/index.js`);\n\t} else {\n\t\tfile = path.join(tempDirectory, `${runningBlock.category}/${runningBlock.name}.js`);\n\t}\n\n\tconst cmd = resolveCommand(pm, 'execute', ['tsx', file, ...passthroughArgs]);\n\n\tif (!cmd) {\n\t\tprogram.error(color.red('Error resolving run command!'));\n\t}\n\n\ttry {\n\t\tconst proc = x(cmd.command, cmd.args, { nodeOptions: { cwd: process.cwd() } });\n\n\t\tfor await (const line of proc) {\n\t\t\tprocess.stdout.write(`${line}\\n`);\n\t\t}\n\t} finally {\n\t\tfs.rmSync(path.join(process.cwd(), tempDirBase), { recursive: true, force: true });\n\t}\n}\n\nexport { exec };\n","import color from 'chalk';\nimport { Command, program } from 'commander';\nimport fetch from 'make-fetch-happen';\nimport * as v from 'valibot';\nimport type { Category, Manifest } from '../types';\nimport * as array from '../utils/blocks/ts/array';\nimport * as pad from '../utils/blocks/ts/pad';\nimport * as jsrepo from '../utils/registry-providers/jsrepo';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\tjson: v.boolean(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const info = new Command('info')\n\t.description('Get info about a registry on jsrepo.com')\n\t.argument('registry', 'Name of the registry to get the info for i.e. @ieedan/std')\n\t.option('--json', 'Output the response in formatted JSON.', false)\n\t.action(async (registry, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait _info(registry, options);\n\t});\n\nasync function _info(registry: string, options: Options) {\n\tconst tokenManager = new TokenManager();\n\n\tconst token = tokenManager.get(jsrepo.jsrepo.name);\n\n\tconst headers: Record<string, string> = {};\n\n\tif (token) {\n\t\tconst [key, value] = jsrepo.jsrepo.authHeader!(token);\n\n\t\theaders[key] = value;\n\t}\n\n\tconst url = new URL(`/api/scopes/${registry}`, jsrepo.BASE_URL).toString();\n\n\tconst response = await fetch(url, { headers });\n\n\tif (!response.ok) {\n\t\tif (response.status === 404) {\n\t\t\tprogram.error(color.red('Registry not found!'));\n\t\t} else {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Error fetching registry! Error: ${response.status} - ${response.statusText}`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tconst result = (await response.json()) as RegistryInfoResponse;\n\n\tif (options.json) {\n\t\treturn process.stdout.write(JSON.stringify(result, null, ' '));\n\t}\n\n\tprocess.stdout.write(formattedOutput(result));\n}\n\nfunction formattedOutput(registryInfo: RegistryInfoResponse) {\n\tlet out = `${color.cyan(`${registryInfo.name}@${registryInfo.version}`)} | versions: ${color.cyan(registryInfo.versions.length.toString())}\\n`;\n\n\tif (registryInfo.meta.description) {\n\t\tout += `${registryInfo.meta.description}\\n`;\n\t}\n\n\tif (registryInfo.meta.homepage) {\n\t\tout += `${color.blue(registryInfo.meta.homepage)}\\n`;\n\t}\n\n\tout += '\\n';\n\n\tif (registryInfo.meta.tags) {\n\t\tout += `keywords: ${registryInfo.meta.tags.map((t) => color.cyan(t)).join(', ')}\\n\\n`;\n\t}\n\n\tconst multipleOfThree = (num: number) => num % 3 === 0;\n\n\tconst blockTitles = registryInfo.categories\n\t\t.flatMap((c) => c.blocks)\n\t\t.map((b) =>\n\t\t\tb.list ? color.blue(`${b.category}/${b.name}`) : color.dim(`${b.category}/${b.name}`)\n\t\t);\n\n\tconst minBlockTitleLength = array.maxLength(blockTitles) + 4;\n\n\tout += `blocks:\n${blockTitles\n\t.map((b, i) => {\n\t\tconst isMultipleOfThree = multipleOfThree(i + 1);\n\t\tconst isLast = i + 1 >= blockTitles.length;\n\n\t\tif (isMultipleOfThree) {\n\t\t\treturn `${b}\\n`;\n\t\t}\n\n\t\treturn `${pad.rightPadMin(b, minBlockTitleLength, ' ')}${isLast ? '\\n' : ''}`;\n\t})\n\t.join('')}\n`;\n\n\tif (registryInfo.meta.authors) {\n\t\tout += `authors:\n${registryInfo.meta.authors.map((a) => `- ${color.blue(a)}`).join('\\n')}\\n\\n`;\n\t}\n\n\tout += `tags:\n${Object.entries(registryInfo.tags)\n\t.map(([tag, version]) => `${color.blue(tag)}: ${version}`)\n\t.join('\\n')}\\n\\n`;\n\n\treturn out;\n}\n\ntype MinUser = {\n\tname: string;\n\tusername: string;\n\temail: string;\n};\n\ntype RegistryInfoResponse = {\n\tname: string;\n\tversion: string;\n\treleasedBy: MinUser;\n\tprimaryLanguage: string;\n\tfirstPublishedAt: Date;\n\tmeta: {\n\t\tauthors: string[] | undefined;\n\t\tbugs: string | undefined;\n\t\tdescription: string | undefined;\n\t\thomepage: string | undefined;\n\t\trepository: string | undefined;\n\t\ttags: string[] | undefined;\n\t};\n\taccess: NonNullable<Manifest['access']>;\n\tpeerDependencies: NonNullable<Manifest['peerDependencies']> | null;\n\tconfigFiles: NonNullable<Manifest['configFiles']> | null;\n\tcategories: Category[];\n\ttags: Record<string, string>;\n\tversions: string[];\n\ttime: Record<string, Date>;\n};\n","import fs from 'node:fs';\nimport {\n\tcancel,\n\tconfirm,\n\tisCancel,\n\tlog,\n\tmultiselect,\n\toutro,\n\tpassword,\n\tselect,\n\tspinner,\n\ttext,\n} from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, Option, program } from 'commander';\nimport { createPathsMatcher } from 'get-tsconfig';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport path from 'pathe';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { parseRecord } from '../utils/blocks/commander/parsers';\nimport * as u from '../utils/blocks/ts/url';\nimport {\n\ttype Formatter,\n\tPROJECT_CONFIG_NAME,\n\ttype Paths,\n\ttype ProjectConfig,\n\tREGISTRY_CONFIG_NAME,\n\tformatterSchema,\n\tgetProjectConfig,\n\tgetRegistryConfig,\n} from '../utils/config';\nimport { packageJson } from '../utils/context';\nimport { formatFile, matchJSDescendant, tryGetTsconfig } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { json } from '../utils/language-support';\nimport type { PackageJson } from '../utils/package';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\ttype Task,\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\trunTasks,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\trepos: v.optional(v.array(v.string())),\n\twatermark: v.boolean(),\n\ttests: v.optional(v.boolean()),\n\tformatter: v.optional(formatterSchema),\n\tpaths: v.optional(v.record(v.string(), v.string())),\n\tconfigFiles: v.optional(v.record(v.string(), v.string())),\n\tproject: v.optional(v.boolean()),\n\tregistry: v.optional(v.boolean()),\n\tbuildScript: v.string(),\n\tpublishScript: v.string(),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst init = new Command('init')\n\t.description('Initializes your project with a configuration file.')\n\t.argument('[registries...]', 'Registries to install the blocks from.', [])\n\t.option('--repos [repos...]', 'Repository to install the blocks from. (DEPRECATED)')\n\t.option(\n\t\t'--no-watermark',\n\t\t'Will not add a watermark to each file upon adding it to your project.'\n\t)\n\t.option('--tests', 'Will include tests with the blocks.')\n\t.addOption(\n\t\tnew Option(\n\t\t\t'--formatter <formatter>',\n\t\t\t'What formatter to use when adding or updating blocks.'\n\t\t).choices(['prettier', 'biome'])\n\t)\n\t.addOption(\n\t\tnew Option('--paths <category=path>,<category=path>', 'The paths to install the blocks to.')\n\t\t\t.argParser(parseRecord)\n\t\t\t.default({})\n\t)\n\t.addOption(\n\t\tnew Option(\n\t\t\t'--config-files <configFile=path>,<configFile=path>',\n\t\t\t'The paths to install the config files to.'\n\t\t)\n\t\t\t.argParser(parseRecord)\n\t\t\t.default({})\n\t)\n\t.option('-P, --project', 'Takes you through the steps to initialize a project.')\n\t.option('-R, --registry', 'Takes you through the steps to initialize a registry.')\n\t.option(\n\t\t'--build-script <name>',\n\t\t'The name of the build script. (For Registry setup)',\n\t\t'build:registry'\n\t)\n\t.option(\n\t\t'--publish-script <name>',\n\t\t'The name of the publish script. (For Registry setup)',\n\t\t'release:registry'\n\t)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (registries, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tif (options.registry !== undefined && options.project !== undefined) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`You cannot provide both ${color.bold('--project')} and ${color.bold('--registry')} at the same time.`\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tif (options.repos !== undefined) {\n\t\t\tlog.warn(\n\t\t\t\t`The ${color.gray('`--repos`')} flag is deprecated! Instead supply registries as arguments. ${color.cyan(`\\`jsrepo init ${options.repos.join(' ')}\\``)}`\n\t\t\t);\n\t\t}\n\n\t\tif (\n\t\t\toptions.registry === undefined &&\n\t\t\toptions.project === undefined &&\n\t\t\tregistries.length === 0\n\t\t) {\n\t\t\tconst response = await select({\n\t\t\t\tmessage: 'Initialize a project or registry?',\n\t\t\t\toptions: [\n\t\t\t\t\t{ value: 'project', label: 'project' },\n\t\t\t\t\t{ value: 'registry', label: 'registry' },\n\t\t\t\t],\n\t\t\t\tinitialValue: 'project',\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\toptions.project = response === 'project';\n\t\t}\n\n\t\tif (options.project || registries.length > 0) {\n\t\t\tawait _initProject(registries, options);\n\t\t} else {\n\t\t\tawait _initRegistry(options);\n\t\t}\n\n\t\toutro(color.green('All done!'));\n\t});\n\nconst _initProject = async (registries: string[], options: Options) => {\n\tconst initialConfig = getProjectConfig(options.cwd);\n\n\tconst loading = spinner();\n\n\tlet paths: Paths;\n\tlet configFiles: Record<string, string> = {};\n\n\tconst tsconfigResult = tryGetTsconfig(options.cwd).unwrapOr(null);\n\n\tlet defaultPath =\n\t\toptions.paths?.['*'] ??\n\t\t(initialConfig.isOk() ? initialConfig.unwrap().paths['*'] : undefined);\n\n\tif (options.yes && defaultPath === undefined) {\n\t\tprogram.error(\n\t\t\tcolor.red('You must provide a default path to install the blocks when using --yes.')\n\t\t);\n\t}\n\n\tif (defaultPath === undefined) {\n\t\tconst defaultPathResult = await text({\n\t\t\tmessage: 'Please enter a default path to install the blocks',\n\t\t\tvalidate(value) {\n\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\n\t\t\t\tif (!value.startsWith('./')) {\n\t\t\t\t\tconst error =\n\t\t\t\t\t\t'Invalid path alias! If you are intending to use a relative path make sure it starts with `./`';\n\n\t\t\t\t\tif (tsconfigResult === null) {\n\t\t\t\t\t\treturn error;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst matcher = createPathsMatcher(tsconfigResult);\n\n\t\t\t\t\tif (matcher) {\n\t\t\t\t\t\tconst found = matcher(value);\n\n\t\t\t\t\t\tif (found.length === 0) return error;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tplaceholder: './src/blocks',\n\t\t\tinitialValue: defaultPath,\n\t\t});\n\n\t\tif (isCancel(defaultPathResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tdefaultPath = defaultPathResult;\n\t}\n\n\tif (initialConfig.isOk()) {\n\t\tpaths = { ...initialConfig.unwrap().paths, '*': defaultPath };\n\t\tconfigFiles = initialConfig.unwrap().configFiles ?? {};\n\t} else {\n\t\tpaths = { '*': defaultPath };\n\t}\n\n\tpaths = { ...paths, ...options.paths };\n\n\t// configure formatter\n\tif (!options.formatter) {\n\t\tlet defaultFormatter = initialConfig.isErr()\n\t\t\t? 'none'\n\t\t\t: (initialConfig.unwrap().formatter ?? 'none');\n\n\t\tif (fs.existsSync(path.join(options.cwd, '.prettierrc'))) {\n\t\t\tdefaultFormatter = 'prettier';\n\t\t}\n\n\t\tif (fs.existsSync(path.join(options.cwd, 'biome.json'))) {\n\t\t\tdefaultFormatter = 'biome';\n\t\t}\n\n\t\tconst response = await select({\n\t\t\tmessage: 'Which formatter would you like to use?',\n\t\t\toptions: ['Prettier', 'Biome', 'None'].map((val) => ({\n\t\t\t\tvalue: val.toLowerCase(),\n\t\t\t\tlabel: val,\n\t\t\t})),\n\t\t\tinitialValue: defaultFormatter,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (response !== 'none') {\n\t\t\toptions.formatter = response as Formatter;\n\t\t}\n\t}\n\n\tconst repos = Array.from(\n\t\tnew Set([\n\t\t\t...registries,\n\t\t\t...(options.repos ?? []),\n\t\t\t...(initialConfig.isOk() ? initialConfig.unwrap().repos : []),\n\t\t])\n\t);\n\n\tconst deps = new Set<string>();\n\tconst devDeps = new Set<string>();\n\n\tconst setupRepo = async (url: string) => {\n\t\tconst promptResult = await promptForRegistryConfig({\n\t\t\turl,\n\t\t\tpaths,\n\t\t\tconfigFiles,\n\t\t\toptions,\n\t\t\tformatter: options.formatter,\n\t\t});\n\n\t\tfor (const dep of promptResult.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of promptResult.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tpaths = promptResult.paths;\n\t\tconfigFiles = promptResult.configFiles;\n\t};\n\n\tif (repos.length > 0) {\n\t\tfor (const repo of repos) {\n\t\t\t// if already present in config ask if you would like to set it up\n\t\t\tif (\n\t\t\t\t!registries.find((r) => r === repo) &&\n\t\t\t\tinitialConfig.isOk() &&\n\t\t\t\tinitialConfig.unwrap().repos.find((r) => r === repo)\n\t\t\t) {\n\t\t\t\tconst confirmResult = await confirm({\n\t\t\t\t\tmessage: `Initialize ${repo}?`,\n\t\t\t\t\tinitialValue: options.yes,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (!confirmResult) continue;\n\t\t\t}\n\n\t\t\tlog.info(`Initializing ${color.cyan(repo)}`);\n\n\t\t\tawait setupRepo(repo);\n\t\t}\n\t}\n\n\twhile (true) {\n\t\tif (!options.yes) {\n\t\t\tconst confirmResult = await confirm({\n\t\t\t\tmessage: repos.length > 0 ? 'Add another repo?' : 'Add a repo?',\n\t\t\t\tinitialValue: repos.length === 0, // default to yes for first repo\n\t\t\t});\n\n\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (!confirmResult) break;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\n\t\tconst result = await text({\n\t\t\tmessage: 'Where should we download the blocks from?',\n\t\t\tplaceholder: 'github/ieedan/std',\n\t\t\tvalidate: (val) => {\n\t\t\t\tif (val.trim().length === 0) return 'Please provide a value';\n\n\t\t\t\tif (!registry.selectProvider(val)) {\n\t\t\t\t\treturn `Invalid provider! Valid providers (${registry.providers.map((provider) => provider.name).join(', ')})`;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(result)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tawait setupRepo(result);\n\n\t\trepos.push(result);\n\t}\n\n\tconst config: ProjectConfig = {\n\t\t$schema: `https://unpkg.com/jsrepo@${packageJson.version}/schemas/project-config.json`,\n\t\trepos,\n\t\tincludeTests:\n\t\t\tinitialConfig.isOk() && options.tests === undefined\n\t\t\t\t? initialConfig.unwrap().includeTests\n\t\t\t\t: (options.tests ?? false),\n\t\twatermark: options.watermark,\n\t\tformatter: options.formatter,\n\t\tconfigFiles,\n\t\tpaths,\n\t};\n\n\tloading.start(`Writing config to \\`${PROJECT_CONFIG_NAME}\\``);\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst configPath = path.join(options.cwd, PROJECT_CONFIG_NAME);\n\n\tconst configContent = await json.format(JSON.stringify(config, null, '\\t'), {\n\t\tbiomeOptions,\n\t\tprettierOptions,\n\t\tfilePath: configPath,\n\t\tformatter: config.formatter,\n\t});\n\n\tif (!fs.existsSync(options.cwd)) {\n\t\tfs.mkdirSync(options.cwd, { recursive: true });\n\t}\n\n\tfs.writeFileSync(configPath, configContent);\n\n\tloading.stop(`Wrote config to \\`${PROJECT_CONFIG_NAME}\\`.`);\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push(`Add blocks with ${color.cyan('jsrepo add')}!`);\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n};\n\nasync function promptForRegistryConfig({\n\turl,\n\tpaths,\n\tconfigFiles,\n\tformatter,\n\toptions,\n}: {\n\turl: string;\n\tpaths: Paths;\n\tconfigFiles: Record<string, string>;\n\tformatter: ProjectConfig['formatter'];\n\toptions: Options;\n}): Promise<{\n\tpaths: Paths;\n\tconfigFiles: Record<string, string>;\n\tdependencies: string[];\n\tdevDependencies: string[];\n}> {\n\tconst loading = spinner();\n\n\tconst storage = new TokenManager();\n\n\tconst provider = registry.selectProvider(url);\n\n\tif (!provider) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Invalid provider! Valid providers (${registry.providers.map((provider) => provider.name).join(', ')})`\n\t\t\t)\n\t\t);\n\t}\n\n\tlet tokenKey: string = provider.name;\n\n\tif (provider.name === registry.http.name) {\n\t\tconst parsed = registry.http.parse(url, { fullyQualified: false });\n\n\t\t// this is safe since we had to parse the url earlier to get the provider\n\t\tconst registryUrl = new URL(parsed.url);\n\n\t\ttokenKey = `http-${registryUrl.origin}`;\n\t}\n\n\tconst token = storage.get(tokenKey);\n\n\t// don't ask if the provider is a custom domain\n\tif (!token && !options.yes) {\n\t\tconst result = await confirm({\n\t\t\tmessage: 'Would you like to add an auth token?',\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(result)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (result) {\n\t\t\tconst response = await password({\n\t\t\t\tmessage: 'Paste your token',\n\t\t\t\tvalidate(value) {\n\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tstorage.set(tokenKey, response);\n\t\t}\n\t}\n\n\tloading.start(`Fetching manifest from ${color.cyan(url)}`);\n\n\tconst providerState = (await registry.getProviderState(url, { noCache: !options.cache })).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst manifest = (await registry.fetchManifest(providerState)).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tloading.stop(`Fetched manifest from ${color.cyan(url)}`);\n\n\tcheckPreconditions(providerState, manifest, options.cwd);\n\n\tconst dependencies: string[] = [];\n\tconst devDependencies: string[] = [];\n\n\t// setup config files\n\tif (manifest.configFiles) {\n\t\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\t\tformatter: formatter,\n\t\t\tcwd: options.cwd,\n\t\t});\n\n\t\tfor (const file of manifest.configFiles) {\n\t\t\tif (file.optional && !options.yes) {\n\t\t\t\tconst result = await confirm({\n\t\t\t\t\tmessage: `Would you like to add the ${file.name} file?`,\n\t\t\t\t\tinitialValue: true,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(result)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tif (!result) continue;\n\t\t\t}\n\n\t\t\tdependencies.push(...(file.dependencies ?? []));\n\t\t\tdevDependencies.push(...(file.devDependencies ?? []));\n\n\t\t\t// get the path to the file from the user\n\t\t\tif (!configFiles[file.name]) {\n\t\t\t\tif (options.configFiles?.[file.name]) {\n\t\t\t\t\tconfigFiles[file.name] = options.configFiles[file.name];\n\t\t\t\t} else if (!options.yes) {\n\t\t\t\t\tconst result = await text({\n\t\t\t\t\t\tmessage: `Where is your ${file.name} file?`,\n\t\t\t\t\t\tdefaultValue: file.expectedPath,\n\t\t\t\t\t\tinitialValue: file.expectedPath,\n\t\t\t\t\t\tplaceholder: file.expectedPath,\n\t\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (isCancel(result)) {\n\t\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\t\tprocess.exit(0);\n\t\t\t\t\t}\n\n\t\t\t\t\tconfigFiles[file.name] = result;\n\t\t\t\t} else {\n\t\t\t\t\tif (!file.expectedPath) {\n\t\t\t\t\t\tprogram.error(\n\t\t\t\t\t\t\tcolor.red(`You must provide a path for ${file.name} when using --yes!`)\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tconfigFiles[file.name] = file.expectedPath;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet fullFilePath = path.join(options.cwd, configFiles[file.name]);\n\n\t\t\tlet fileContents: string | undefined;\n\n\t\t\tif (fs.existsSync(fullFilePath)) {\n\t\t\t\tfileContents = fs.readFileSync(fullFilePath).toString();\n\t\t\t} else {\n\t\t\t\tconst dir = path.dirname(fullFilePath);\n\n\t\t\t\tif (fs.existsSync(dir)) {\n\t\t\t\t\tconst matchedPath = matchJSDescendant(fullFilePath);\n\n\t\t\t\t\tif (matchedPath) {\n\t\t\t\t\t\tfileContents = fs.readFileSync(matchedPath).toString();\n\n\t\t\t\t\t\tconst newPath = path.relative(options.cwd, matchedPath);\n\n\t\t\t\t\t\tlog.warn(\n\t\t\t\t\t\t\t`Located ${color.bold(configFiles[file.name])} at ${color.bold(newPath)}`\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// update path\n\t\t\t\t\t\tconfigFiles[file.name] = newPath;\n\n\t\t\t\t\t\tfullFilePath = path.join(options.cwd, newPath);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tloading.start(`Fetching the ${color.cyan(file.name)} from ${color.cyan(url)}`);\n\n\t\t\tconst remoteContent = (await registry.fetchRaw(providerState, file.path)).match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst originalRemoteContent = await formatFile({\n\t\t\t\tfile: {\n\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t\tdestPath: fullFilePath,\n\t\t\t\t},\n\t\t\t\tbiomeOptions,\n\t\t\t\tprettierOptions,\n\t\t\t\tformatter,\n\t\t\t});\n\n\t\t\tloading.stop(`Fetched the ${color.cyan(file.name)} from ${color.cyan(url)}`);\n\n\t\t\tlet acceptedChanges = options.yes || fileContents === undefined;\n\n\t\t\tif (fileContents) {\n\t\t\t\tif (!options.yes) {\n\t\t\t\t\tconst from = u.join(providerState.url, file.name);\n\n\t\t\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter },\n\t\t\t\t\t\tcurrent: {\n\t\t\t\t\t\t\tcontent: fileContents,\n\t\t\t\t\t\t\tpath: fullFilePath,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tincoming: {\n\t\t\t\t\t\t\tcontent: originalRemoteContent,\n\t\t\t\t\t\t\tpath: from,\n\t\t\t\t\t\t},\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t...options,\n\t\t\t\t\t\t\tloading,\n\t\t\t\t\t\t\tno: false,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\tif (updateResult.applyChanges) {\n\t\t\t\t\t\tacceptedChanges = true;\n\t\t\t\t\t\tfileContents = updateResult.updatedContent;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst dir = path.dirname(fullFilePath);\n\n\t\t\t\tif (!fs.existsSync(dir)) {\n\t\t\t\t\tfs.mkdirSync(dir, { recursive: true });\n\t\t\t\t}\n\n\t\t\t\tfileContents = originalRemoteContent;\n\t\t\t}\n\n\t\t\tif (acceptedChanges && fileContents) {\n\t\t\t\tloading.start(`Writing ${color.cyan(file.name)} to ${color.cyan(fullFilePath)}`);\n\n\t\t\t\tfs.writeFileSync(fullFilePath, fileContents);\n\n\t\t\t\tloading.stop(`Wrote ${color.cyan(file.name)} to ${color.cyan(fullFilePath)}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// configure category paths\n\tif (!options.yes) {\n\t\tconst configurePaths = await multiselect({\n\t\t\tmessage: 'Which category paths would you like to configure?',\n\t\t\toptions: manifest.categories.map((cat) => ({ label: cat.name, value: cat.name })),\n\t\t\trequired: false,\n\t\t});\n\n\t\tif (isCancel(configurePaths)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (configurePaths.length > 0) {\n\t\t\tfor (const category of configurePaths) {\n\t\t\t\tconst configuredValue = paths[category];\n\n\t\t\t\tconst categoryPath = await text({\n\t\t\t\t\tmessage: `Where should ${category} be added in your project?`,\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t\t\t},\n\t\t\t\t\tplaceholder: configuredValue ? configuredValue : `./src/${category}`,\n\t\t\t\t\tdefaultValue: configuredValue,\n\t\t\t\t\tinitialValue: configuredValue,\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(categoryPath)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tpaths[category] = categoryPath;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { paths, configFiles, dependencies, devDependencies };\n}\n\nconst _initRegistry = async (options: Options) => {\n\tconst loading = spinner();\n\n\tconst packagePath = path.join(options.cwd, 'package.json');\n\n\tif (!fs.existsSync(packagePath)) {\n\t\tprogram.error(color.red(`Couldn't find your ${color.bold('package.json')}!`));\n\t}\n\n\tlet config = getRegistryConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tif (!config) {\n\t\tconfig = {\n\t\t\t$schema: '',\n\t\t\tname: undefined,\n\t\t\tversion: undefined,\n\t\t\treadme: 'README.md',\n\t\t\tdirs: [],\n\t\t\tdoNotListBlocks: [],\n\t\t\tdoNotListCategories: [],\n\t\t\tlistBlocks: [],\n\t\t\tlistCategories: [],\n\t\t\texcludeDeps: [],\n\t\t\tincludeBlocks: [],\n\t\t\tincludeCategories: [],\n\t\t\texcludeBlocks: [],\n\t\t\texcludeCategories: [],\n\t\t\tpreview: false,\n\t\t};\n\t}\n\n\tconfig.$schema = `https://unpkg.com/jsrepo@${packageJson.version}/schemas/registry-config.json`;\n\n\twhile (true) {\n\t\tif (config.dirs.length > 0) {\n\t\t\tconst confirmResult = await confirm({\n\t\t\t\tmessage: 'Add another blocks directory?',\n\t\t\t\tinitialValue: false,\n\t\t\t});\n\n\t\t\tif (isCancel(confirmResult)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (!confirmResult) break;\n\t\t}\n\n\t\tconst response = await text({\n\t\t\tmessage: 'Where are your blocks located?',\n\t\t\tplaceholder: './src',\n\t\t\tdefaultValue: './src',\n\t\t\tinitialValue: './src',\n\t\t\tvalidate: (val) => {\n\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tconfig.dirs.push(response);\n\t}\n\n\tconst pkg = JSON.parse(fs.readFileSync(packagePath).toString());\n\n\tlet configurePublish = !options.yes;\n\n\tif (!options.yes) {\n\t\tconst confirmResult = await confirm({\n\t\t\tmessage: `Configure to publish to ${ascii.JSREPO_DOT_COM}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(confirmResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tconfigurePublish = confirmResult;\n\t}\n\n\tif (configurePublish) {\n\t\tif (!config.name) {\n\t\t\tconst nameResponse = await text({\n\t\t\t\tmessage: \"What's the name of your registry?\",\n\t\t\t\tplaceholder: '@ieedan/std',\n\t\t\t\tvalidate: (val) => {\n\t\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(nameResponse)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tconfig.name = nameResponse;\n\t\t}\n\n\t\tif (!config.version) {\n\t\t\tconfig.version = '0.0.1';\n\t\t}\n\n\t\toptions.publishScript = await promptForScriptKey(\n\t\t\toptions.publishScript,\n\t\t\tpkg,\n\t\t\toptions,\n\t\t\t'release:registry'\n\t\t);\n\t} else {\n\t\toptions.buildScript = await promptForScriptKey(\n\t\t\toptions.buildScript,\n\t\t\tpkg,\n\t\t\toptions,\n\t\t\t'build:registry'\n\t\t);\n\t}\n\n\tconst alreadyInstalled = pkg.devDependencies && pkg.devDependencies.jsrepo !== undefined;\n\n\tconst pm = (await detect({ cwd: 'cwd' }))?.agent ?? 'npm';\n\n\tconst buildScript = 'jsrepo build';\n\tconst publishScript = 'jsrepo publish';\n\n\t// ensure we are adding to an object that exists\n\tif (pkg.scripts === undefined) {\n\t\tpkg.scripts = {};\n\t}\n\n\tif (configurePublish) {\n\t\tpkg.scripts[options.publishScript] = publishScript;\n\t} else {\n\t\tpkg.scripts[options.buildScript] = buildScript;\n\t}\n\n\tconst tasks: Task[] = [];\n\n\ttasks.push({\n\t\tloadingMessage: 'Adding script to package.json',\n\t\tcompletedMessage: 'Added script to package.json',\n\t\trun: async () => {\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(packagePath, JSON.stringify(pkg, null, '\\t'));\n\t\t\t} catch (err) {\n\t\t\t\tprogram.error(\n\t\t\t\t\tcolor.red(`Error writing to \\`${color.bold(packagePath)}\\`. Error: ${err}`)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\n\ttasks.push({\n\t\tloadingMessage: `Writing config to \\`${color.cyan(REGISTRY_CONFIG_NAME)}\\``,\n\t\tcompletedMessage: `Wrote config to \\`${color.cyan(REGISTRY_CONFIG_NAME)}\\``,\n\t\trun: async () => {\n\t\t\tconst configPath = path.join(options.cwd, REGISTRY_CONFIG_NAME);\n\n\t\t\ttry {\n\t\t\t\tfs.writeFileSync(path.join(configPath), JSON.stringify(config, null, '\\t'));\n\t\t\t} catch (err) {\n\t\t\t\tprogram.error(\n\t\t\t\t\tcolor.red(`Error writing to \\`${color.bold(configPath)}\\`. Error: ${err}`)\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t});\n\n\tawait runTasks(tasks, { loading });\n\n\tlet installed = alreadyInstalled;\n\n\tif (!alreadyInstalled) {\n\t\tconst installedResult = await promptInstallDependencies(new Set(), new Set(['jsrepo']), {\n\t\t\tcwd: options.cwd,\n\t\t\tpm,\n\t\t\tyes: options.yes,\n\t\t});\n\n\t\tinstalled = installedResult.installed;\n\t}\n\n\tlet steps: string[] = [];\n\n\tif (!installed) {\n\t\tconst cmd = resolveCommand(pm, 'add', ['jsrepo', '-D']);\n\n\t\tsteps.push(\n\t\t\t`Install ${ascii.JSREPO} as a dev dependency \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t);\n\t}\n\n\tsteps.push(`Add categories to \\`${color.cyan(config.dirs.join(', '))}\\`.`);\n\n\tif (configurePublish) {\n\t\tconst runScript = resolveCommand(pm, 'run', [options.publishScript]);\n\n\t\tsteps.push(\n\t\t\t`Run \\`${color.cyan(`${runScript?.command} ${runScript?.args.join(' ')}`)}\\` to publish the registry.`\n\t\t);\n\t} else {\n\t\tconst runScript = resolveCommand(pm, 'run', [options.buildScript]);\n\n\t\tsteps.push(\n\t\t\t`Run \\`${color.cyan(`${runScript?.command} ${runScript?.args.join(' ')}`)}\\` to build the registry.`\n\t\t);\n\t}\n\n\t// put steps with numbers above here\n\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\tconst next = nextSteps(steps);\n\n\tprocess.stdout.write(next);\n};\n\nasync function promptForScriptKey(\n\tscriptKey: string,\n\tpkg: PackageJson,\n\toptions: Options,\n\tplaceholder: string\n) {\n\tlet key = scriptKey;\n\n\t// continue asking until the user either chooses to overwrite or inputs a script that doesn't exist yet\n\twhile (!options.yes && pkg.scripts && pkg.scripts[key]) {\n\t\tconst response = await confirm({\n\t\t\tmessage: `The \\`${color.cyan(key)}\\` already exists overwrite?`,\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (!response) {\n\t\t\tconst response = await text({\n\t\t\t\tmessage: 'What would you like to call the script?',\n\t\t\t\tplaceholder,\n\t\t\t\tvalidate: (val) => {\n\t\t\t\t\tif (val.trim().length === 0) return 'Please provide a value!';\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tkey = response;\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn key;\n}\n\nexport { init };\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n\ttype CallToolRequest,\n\tCallToolRequestSchema,\n\tListToolsRequestSchema,\n\ttype Tool,\n} from '@modelcontextprotocol/sdk/types.js';\nimport color from 'chalk';\nimport { cli } from '../cli';\nimport { preloadBlocks } from './blocks';\nimport * as array from './blocks/ts/array';\nimport * as url from './blocks/ts/url';\nimport { packageJson } from './context';\nimport { iFetch } from './fetch';\nimport * as registry from './registry-providers/internal';\nimport * as jsrepo from './registry-providers/jsrepo';\n\nconst listComponentsTool: Tool = {\n\tname: 'list-components',\n\tdescription: 'Lists all available components/utilities for the provided registries.',\n\tinputSchema: {\n\t\ttype: 'object',\n\t\tproperties: {\n\t\t\tregistries: {\n\t\t\t\ttype: 'array',\n\t\t\t\tdescription:\n\t\t\t\t\t\"Registries from the user's jsrepo.json `repos` key or any well-known jsrepo registry.\",\n\t\t\t\titems: {\n\t\t\t\t\ttype: 'string',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\trequired: ['registries'],\n\t},\n};\n\ninterface ListComponentsArgs {\n\tregistries: string[];\n}\n\nasync function listComponents(registries: string[]) {\n\tconst states = (await registry.forEachPathGetProviderState(registries)).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting registry state for ${err.repo}: ${err.message}`);\n\t\t}\n\t);\n\n\tconst components = (await registry.fetchBlocks(states)).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting components for ${err.repo}: ${err.message}`);\n\t\t}\n\t);\n\n\treturn {\n\t\tcomponents: array\n\t\t\t.fromMap(components, (_, v) => v)\n\t\t\t.map((c) => {\n\t\t\t\tconst name = `${c.category}/${c.name}`;\n\t\t\t\tconst fullName = url.join(c.sourceRepo.url, name);\n\n\t\t\t\treturn {\n\t\t\t\t\tfullName: name,\n\t\t\t\t\t...c,\n\t\t\t\t\tsourceRepo: undefined,\n\t\t\t\t\tcommands: {\n\t\t\t\t\t\tadd: `jsrepo add ${fullName} -y -A`,\n\t\t\t\t\t\tupdate: `jsrepo update ${fullName} -y -A`,\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}),\n\t};\n}\n\nconst getComponentCodeTool: Tool = {\n\tname: 'get-component-code',\n\tdescription: 'Returns the associated code files for the provided component.',\n\tinputSchema: {\n\t\ttype: 'object',\n\t\tproperties: {\n\t\t\tcomponent: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'The component to get the code for. Format: <registry>/<category>/<block>',\n\t\t\t},\n\t\t\tincludeTests: {\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdescription: 'Should tests be included with the component code.',\n\t\t\t\tdefault: false,\n\t\t\t},\n\t\t},\n\t\trequired: ['component'],\n\t},\n};\n\ninterface GetComponentCodeArgs {\n\tcomponent: string;\n\tincludeTests?: boolean;\n}\n\nasync function getComponentCode({ component, includeTests = false }: GetComponentCodeArgs) {\n\tconst provider = registry.selectProvider(component);\n\n\tif (!provider) {\n\t\tthrow new Error(\n\t\t\t`${component} is not valid! Expected a category and block proceeded by the registry url i.e. @ieedan/std/<category>/<block>`\n\t\t);\n\t}\n\n\tconst { url: repo, specifier } = provider.parse(component, { fullyQualified: true });\n\n\tif (!specifier) {\n\t\tthrow new Error(\n\t\t\t`${component} is not valid! Expected a category and block proceeded by the registry url i.e. @ieedan/std/<category>/<block>`\n\t\t);\n\t}\n\n\tconst state = (await registry.getProviderState(repo)).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting state for ${repo}: ${err}`);\n\t\t}\n\t);\n\n\tconst manifests = (await registry.fetchManifests([state])).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting manifest for ${repo}: ${err}`);\n\t\t}\n\t);\n\n\tconst blocksMap = registry.getRemoteBlocks(manifests);\n\n\tconst block = blocksMap.get(url.join(repo, specifier));\n\n\tif (!block) {\n\t\tthrow new Error(`${specifier} does not exist in ${repo}`);\n\t}\n\n\tconst preloaded = preloadBlocks([block], { includeTests });\n\n\tconst files = (await Promise.all(preloaded.map((p) => p.files))).flatMap((p) => [\n\t\t...p.map((f) => ({ name: f.name, content: f.content.unwrapOr('<FETCH ERROR>') })),\n\t]);\n\n\treturn {\n\t\tregistry: repo,\n\t\tcomponent: specifier,\n\t\tfiles,\n\t\tcommands: {\n\t\t\tadd: `jsrepo add ${component} -y -A`,\n\t\t\tupdate: `jsrepo update ${component} -y -A`,\n\t\t},\n\t};\n}\n\nconst getConfigFilesTool: Tool = {\n\tname: 'get-config-files',\n\tdescription:\n\t\t'Lists the config files for this registry. These are files that are either necessary for the registry to work or optional as marked by the `optional` boolean on each file.',\n\tinputSchema: {\n\t\ttype: 'object',\n\t\tproperties: {\n\t\t\tregistry: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'Registry to list components from. (If not provided will return all for the current config file.)',\n\t\t\t\texamples: [\n\t\t\t\t\t'@ieedan/std',\n\t\t\t\t\t'github/ieedan/std',\n\t\t\t\t\t'gitlab/ieedan/std',\n\t\t\t\t\t'bitbucket/ieedan/std',\n\t\t\t\t\t'azure/ieedan/std/std',\n\t\t\t\t\t'https://example.com/r',\n\t\t\t\t],\n\t\t\t},\n\t\t\trequiredOnly: {\n\t\t\t\ttype: 'boolean',\n\t\t\t\tdescription:\n\t\t\t\t\t'When true only returns the config files required for the registry to work properly.',\n\t\t\t},\n\t\t},\n\t\trequired: ['registry'],\n\t},\n};\n\ninterface GetConfigFilesArgs {\n\tregistry: string;\n\trequiredOnly?: boolean;\n}\n\nasync function getConfigFiles({ registry: repo, requiredOnly = false }: GetConfigFilesArgs) {\n\tconst state = (await registry.getProviderState(repo)).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting state for ${repo}: ${err}`);\n\t\t}\n\t);\n\n\tconst manifest = (await registry.fetchManifest(state)).match(\n\t\t(v) => v,\n\t\t(err) => {\n\t\t\tthrow new Error(`Error getting manifest for ${repo}: ${err}`);\n\t\t}\n\t);\n\n\tif (!manifest.configFiles || manifest.configFiles.length === 0) return [];\n\n\tconst files = await Promise.all(\n\t\tmanifest.configFiles\n\t\t\t.filter((f) => !requiredOnly || !f.optional)\n\t\t\t.map(async (f) => {\n\t\t\t\tconst content = (await registry.fetchRaw(state, f.path)).unwrapOr('<FETCH ERROR>');\n\n\t\t\t\treturn {\n\t\t\t\t\t...f,\n\t\t\t\t\tcontent,\n\t\t\t\t};\n\t\t\t})\n\t);\n\n\treturn {\n\t\tconfigFiles: files,\n\t};\n}\n\nconst discoverRegistriesTool: Tool = {\n\tname: 'discover-registries',\n\tdescription:\n\t\t'Searches jsrepo.com for registries that could include components the user needs in their project.',\n\tinputSchema: {\n\t\ttype: 'object',\n\t\tproperties: {\n\t\t\tprimaryLanguage: {\n\t\t\t\ttype: 'string',\n\t\t\t\tdescription:\n\t\t\t\t\t'File extension of the primary language of the registry. i.e. TypeScript -> ts, React -> tsx/jsx',\n\t\t\t},\n\t\t},\n\t\trequired: ['primaryLanguage'],\n\t},\n};\n\ninterface DiscoverRegistriesArgs {\n\tprimaryLanguage: string;\n}\n\nasync function discoverRegistries({ primaryLanguage }: DiscoverRegistriesArgs) {\n\tconst response = await iFetch(`${jsrepo.BASE_URL}/api/registries?lang=${primaryLanguage}`);\n\n\tif (!response.ok) return [];\n\n\tconst { data } = await response.json();\n\n\treturn {\n\t\t// @ts-expect-error shut up\n\t\tregistries: data.map((r) => {\n\t\t\tconst name = `@${r.scope.name}/${r.name}`;\n\t\t\treturn {\n\t\t\t\tname,\n\t\t\t\tdescription: r.metaDescription,\n\t\t\t\trepository: r.metaRepository,\n\t\t\t\tkeywords: r.metaTags,\n\t\t\t\thomepage: r.metaHomepage,\n\t\t\t\trating: r.rating,\n\t\t\t\tprimaryLanguage: r.metaPrimaryLanguage,\n\t\t\t\tmonthlyDownloads: r.monthlyFetches,\n\t\t\t\tlatestVersion: r.latestVersion,\n\t\t\t\taccess: r.access,\n\t\t\t\tcommands: {\n\t\t\t\t\tinit: `jsrepo init ${name}`,\n\t\t\t\t},\n\t\t\t};\n\t\t}),\n\t};\n}\n\nconst cliReferenceTool: Tool = {\n\tname: 'cli-reference',\n\tdescription: 'A reference for the usage of the jsrepo CLI.',\n\tinputSchema: {\n\t\ttype: 'object',\n\t},\n};\n\nfunction cliReference() {\n\treturn {\n\t\tname: cli.name(),\n\t\tdescription: cli.description(),\n\t\tversion: cli.version(),\n\t\tcommands: cli.commands.map((c) => ({\n\t\t\tname: c.name(),\n\t\t\tdescription: c.description(),\n\t\t\tusage: c.usage(),\n\t\t\toptions: c.options.map((o) => ({\n\t\t\t\tflags: o.flags,\n\t\t\t\tdescription: o.description,\n\t\t\t\tdefaultValue: o.defaultValue,\n\t\t\t})),\n\t\t})),\n\t};\n}\n\nexport async function connectServer() {\n\tconst server = new Server(\n\t\t{\n\t\t\tname: 'jsrepo',\n\t\t\tversion: packageJson.version,\n\t\t},\n\t\t{\n\t\t\tcapabilities: {\n\t\t\t\ttools: {},\n\t\t\t\tresources: {},\n\t\t\t},\n\t\t}\n\t);\n\n\tserver.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {\n\t\tconsole.error(`Received CallToolRequest calling: ${color.bold(request.params.name)}`);\n\t\ttry {\n\t\t\tswitch (request.params.name) {\n\t\t\t\tcase 'list-components': {\n\t\t\t\t\tconst args = request.params.arguments as unknown as ListComponentsArgs;\n\n\t\t\t\t\tconst response = await listComponents(args.registries);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\ttext: JSON.stringify(response),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'get-component-code': {\n\t\t\t\t\tconst args = request.params.arguments as unknown as GetComponentCodeArgs;\n\n\t\t\t\t\tconst response = await getComponentCode(args);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\ttext: JSON.stringify(response),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'get-config-files': {\n\t\t\t\t\tconst args = request.params.arguments as unknown as GetConfigFilesArgs;\n\n\t\t\t\t\tconst response = await getConfigFiles(args);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\ttext: JSON.stringify(response),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'discover-registries': {\n\t\t\t\t\tconst args = request.params.arguments as unknown as DiscoverRegistriesArgs;\n\n\t\t\t\t\tconst response = await discoverRegistries(args);\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\ttext: JSON.stringify(response),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tcase 'cli-reference': {\n\t\t\t\t\tconst response = cliReference();\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\t\t\ttext: JSON.stringify(response),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthrow new Error(`Invalid tool ${request.params.name}`);\n\t\t} catch (err) {\n\t\t\tconsole.error(\n\t\t\t\tcolor.red(`Error executing tool ${color.bold(request.params.name)}: ${err}`)\n\t\t\t);\n\t\t\treturn {\n\t\t\t\tcontent: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\ttext: JSON.stringify({\n\t\t\t\t\t\t\terror: err instanceof Error ? err.message : String(err),\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t}\n\t});\n\n\tserver.setRequestHandler(ListToolsRequestSchema, async () => {\n\t\tconsole.error('Received ListToolsRequest');\n\t\treturn {\n\t\t\ttools: [\n\t\t\t\tlistComponentsTool,\n\t\t\t\tgetComponentCodeTool,\n\t\t\t\tgetConfigFilesTool,\n\t\t\t\tdiscoverRegistriesTool,\n\t\t\t\tcliReferenceTool,\n\t\t\t],\n\t\t};\n\t});\n\n\tconst transport = new StdioServerTransport();\n\n\tconsole.error('Connecting server to transport...');\n\n\tawait server.connect(transport);\n\n\tconsole.error('Server connected');\n}\n","import { Command } from 'commander';\nimport { connectServer } from '../utils/mcp';\n\nexport const mcp = new Command('mcp')\n\t.description('Interact with jsrepo through an MCP server.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async () => {\n\t\tawait connectServer().catch((err) => {\n\t\t\tconsole.error(err);\n\t\t\tprocess.exit(1);\n\t\t});\n\t});\n","import fs from 'node:fs';\nimport { log, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport ignore from 'ignore';\nimport path from 'pathe';\nimport semver from 'semver';\nimport * as tar from 'tar';\nimport * as v from 'valibot';\nimport type { Category } from '../types';\nimport * as ascii from '../utils/ascii';\nimport { buildBlocksDirectory, buildConfigFiles, pruneUnused } from '../utils/build';\nimport { DEFAULT_CONFIG, runRules } from '../utils/build/check';\nimport { IGNORED_DIRS, type RegistryConfig, getRegistryConfig } from '../utils/config';\nimport { iFetch } from '../utils/fetch';\nimport { createManifest } from '../utils/manifest';\nimport type { PackageJson } from '../utils/package';\nimport { intro, spinner } from '../utils/prompts';\nimport * as jsrepo from '../utils/registry-providers/jsrepo';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\tprivate: v.boolean(),\n\tdryRun: v.boolean(),\n\tname: v.optional(v.string()),\n\tver: v.optional(v.string()),\n\tdirs: v.optional(v.array(v.string())),\n\tincludeBlocks: v.optional(v.array(v.string())),\n\tincludeCategories: v.optional(v.array(v.string())),\n\texcludeBlocks: v.optional(v.array(v.string())),\n\texcludeCategories: v.optional(v.array(v.string())),\n\texcludeDeps: v.optional(v.array(v.string())),\n\tlistBlocks: v.optional(v.array(v.string())),\n\tlistCategories: v.optional(v.array(v.string())),\n\tdoNotListBlocks: v.optional(v.array(v.string())),\n\tdoNotListCategories: v.optional(v.array(v.string())),\n\tallowSubdirectories: v.optional(v.boolean()),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nexport const publish = new Command('publish')\n\t.description('Publish a registry to jsrepo.com.')\n\t.option(\n\t\t'--private',\n\t\t'When publishing the first version of the registry make it private.',\n\t\tfalse\n\t)\n\t.option('--dry-run', \"Test the publish but don't list on jsrepo.com.\", false)\n\t.option('--name <name>', 'The name of the registry. i.e. @ieedan/std')\n\t.option('--ver <version>', 'The version of the registry. i.e. 0.0.1')\n\t.option('--dirs [dirs...]', 'The directories containing the blocks.')\n\t.option('--include-blocks [blockNames...]', 'Include only the blocks with these names.')\n\t.option(\n\t\t'--include-categories [categoryNames...]',\n\t\t'Include only the categories with these names.'\n\t)\n\t.option('--exclude-blocks [blockNames...]', 'Do not include the blocks with these names.')\n\t.option(\n\t\t'--exclude-categories [categoryNames...]',\n\t\t'Do not include the categories with these names.'\n\t)\n\t.option('--list-blocks [blockNames...]', 'List only the blocks with these names.')\n\t.option('--list-categories [categoryNames...]', 'List only the categories with these names.')\n\t.option('--do-not-list-blocks [blockNames...]', 'Do not list the blocks with these names.')\n\t.option(\n\t\t'--do-not-list-categories [categoryNames...]',\n\t\t'Do not list the categories with these names.'\n\t)\n\t.option('--exclude-deps [deps...]', 'Dependencies that should not be added.')\n\t.option('--allow-subdirectories', 'Allow subdirectories to be built.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _publish(options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _publish(options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst config: RegistryConfig = getRegistryConfig(options.cwd).match(\n\t\t(val) => {\n\t\t\tif (val === null) {\n\t\t\t\treturn {\n\t\t\t\t\t$schema: '',\n\t\t\t\t\taccess: 'public',\n\t\t\t\t\treadme: 'README.md',\n\t\t\t\t\tdirs: options.dirs ?? [],\n\t\t\t\t\tdoNotListBlocks: options.doNotListBlocks ?? [],\n\t\t\t\t\tdoNotListCategories: options.doNotListCategories ?? [],\n\t\t\t\t\tlistBlocks: options.listBlocks ?? [],\n\t\t\t\t\tlistCategories: options.listCategories ?? [],\n\t\t\t\t\texcludeDeps: options.excludeDeps ?? [],\n\t\t\t\t\tincludeBlocks: options.includeBlocks ?? [],\n\t\t\t\t\tincludeCategories: options.includeCategories ?? [],\n\t\t\t\t\texcludeBlocks: options.excludeBlocks ?? [],\n\t\t\t\t\texcludeCategories: options.excludeCategories ?? [],\n\t\t\t\t\tallowSubdirectories: options.allowSubdirectories,\n\t\t\t\t} satisfies RegistryConfig;\n\t\t\t}\n\n\t\t\tconst mergedVal = val;\n\n\t\t\t// overwrites config with flag values\n\n\t\t\tif (options.private) mergedVal.access = 'private';\n\t\t\tif (options.name) mergedVal.name = options.name;\n\t\t\tif (options.ver) mergedVal.version = options.ver;\n\t\t\tif (options.dirs) mergedVal.dirs = options.dirs;\n\t\t\tif (options.doNotListBlocks) mergedVal.doNotListBlocks = options.doNotListBlocks;\n\t\t\tif (options.doNotListCategories)\n\t\t\t\tmergedVal.doNotListCategories = options.doNotListCategories;\n\t\t\tif (options.listBlocks) mergedVal.listBlocks = options.listBlocks;\n\t\t\tif (options.listCategories) mergedVal.listCategories = options.listCategories;\n\t\t\tif (options.includeBlocks) mergedVal.includeBlocks = options.includeBlocks;\n\t\t\tif (options.includeCategories) mergedVal.includeCategories = options.includeCategories;\n\t\t\tif (options.excludeBlocks) mergedVal.excludeBlocks = options.excludeBlocks;\n\t\t\tif (options.excludeCategories) mergedVal.excludeCategories = options.excludeCategories;\n\t\t\tif (options.excludeDeps) mergedVal.excludeDeps = options.excludeDeps;\n\t\t\tif (options.allowSubdirectories !== undefined)\n\t\t\t\tmergedVal.allowSubdirectories = options.allowSubdirectories;\n\n\t\t\tmergedVal.rules = { ...DEFAULT_CONFIG, ...mergedVal.rules };\n\n\t\t\treturn mergedVal;\n\t\t},\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tif (options.dryRun) {\n\t\tlog.warn(color.bgYellow.black(' DRY RUN '));\n\t}\n\n\t// -- pre-flights --\n\n\t// check name\n\tif (config.name !== undefined) {\n\t\ttry {\n\t\t\tconst [scope, registryName, ...rest] = config.name.split('/');\n\n\t\t\tif (rest.length > 0) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!scope.startsWith('@')) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!scope.slice(1).match(jsrepo.NAME_REGEX)) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\n\t\t\tif (!registryName.match(jsrepo.NAME_REGEX)) {\n\t\t\t\tthrow new Error();\n\t\t\t}\n\t\t} catch {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`\\`${config.name}\\` is not a valid name. The name should be provided as \\`@<scope>/<registry>\\``\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t} else {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`To publish to ${color.bold('jsrepo.com')} you need to provide the \\`name\\` field in the \\`jsrepo-build-config.json\\``\n\t\t\t)\n\t\t);\n\t}\n\n\t// check version\n\tif (config.version !== undefined) {\n\t\t// use version from package.json\n\t\tif (config.version === 'package') {\n\t\t\tconst packagePath = path.join(options.cwd, 'package.json');\n\n\t\t\tif (!fs.existsSync(packagePath)) {\n\t\t\t\tprogram.error(color.red(`Couldn't find your ${color.bold('package.json')}!`));\n\t\t\t}\n\n\t\t\tconst { version } = JSON.parse(fs.readFileSync(packagePath).toString()) as PackageJson;\n\n\t\t\tconfig.version = version;\n\t\t}\n\n\t\tconst valid = semver.valid(config.version);\n\n\t\tif (!valid) {\n\t\t\tprogram.error(`\\`${config.version}\\` is not a valid semver version.`);\n\t\t}\n\t} else {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`To publish to ${color.bold('jsrepo.com')} you need to provide the \\`version\\` field in the \\`jsrepo-build-config.json\\``\n\t\t\t)\n\t\t);\n\t}\n\n\tconst apiKey = new TokenManager().get('jsrepo');\n\n\tif (apiKey === undefined) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Please authenticate with ${color.cyan('jsrepo auth')} to publish to ${ascii.JSREPO_DOT_COM}.`\n\t\t\t)\n\t\t);\n\t}\n\n\t// build into temp dir\n\tconst categories: Category[] = [];\n\n\tconst ig = ignore();\n\n\ttry {\n\t\tconst ignoreFile = fs.readFileSync(path.join(options.cwd, '.gitignore')).toString();\n\n\t\tig.add(ignoreFile);\n\t} catch {\n\t\t// just continue on\n\t}\n\n\tig.add(IGNORED_DIRS);\n\n\tfor (const dir of config.dirs) {\n\t\tconst dirPath = path.join(options.cwd, dir);\n\n\t\tloading.start(`Building ${color.cyan(dirPath)}`);\n\n\t\tconst builtCategories = buildBlocksDirectory(dirPath, {\n\t\t\tcwd: options.cwd,\n\t\t\tignore: ig,\n\t\t\tconfig,\n\t\t});\n\n\t\tfor (const category of builtCategories) {\n\t\t\tif (categories.find((cat) => cat.name === category.name) !== undefined) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`${ascii.VERTICAL_LINE} ${ascii.WARN} Skipped adding \\`${color.cyan(`${dir}/${category.name}`)}\\` because a category with the same name already exists!`\n\t\t\t\t);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tcategories.push(category);\n\t\t}\n\n\t\tloading.stop(`Built ${color.cyan(dirPath)}`);\n\t}\n\n\tconst configFiles = buildConfigFiles(config, { cwd: options.cwd });\n\n\tconst manifest = createManifest(categories, configFiles, config);\n\n\tloading.start('Checking manifest');\n\n\tconst { warnings, errors } = runRules(manifest, config, options.cwd, config.rules);\n\n\tloading.stop('Completed checking manifest.');\n\n\t// add gap for errors\n\tif (warnings.length > 0 || errors.length > 0) {\n\t\tconsole.log(ascii.VERTICAL_LINE);\n\t}\n\n\tfor (const warning of warnings) {\n\t\tconsole.log(warning);\n\t}\n\n\tif (errors.length > 0) {\n\t\tfor (const error of errors) {\n\t\t\tconsole.log(error);\n\t\t}\n\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`Completed checking manifest with ${color.bold(`${errors.length} error(s)`)} and ${color.bold(`${warnings.length} warning(s)`)}`\n\t\t\t)\n\t\t);\n\t}\n\n\t// removes any unused blocks or categories\n\tconst [prunedCategories, count] = pruneUnused(manifest.categories);\n\n\tmanifest.categories = prunedCategories;\n\n\tif (count > 0) {\n\t\tlog.step(`Removed ${count} unused block${count > 1 ? 's' : ''}.`);\n\t}\n\n\tloading.start(`Packaging ${color.cyan(manifest.name)}...`);\n\n\tconst tempOutDir = path.resolve(options.cwd, `jsrepo-publish-temp-${Date.now()}`);\n\n\tverbose(`Creating temp dir: ${tempOutDir}`);\n\n\tfs.mkdirSync(tempOutDir, { recursive: true });\n\n\tverbose('Writing manifest to temp dir');\n\n\t// write manifest\n\tfs.writeFileSync(path.resolve(tempOutDir, 'jsrepo-manifest.json'), JSON.stringify(manifest));\n\n\t// try copy readme\n\tconst readmePath = path.resolve(options.cwd, config.readme);\n\n\ttry {\n\t\tverbose('Attempting to copy readme');\n\n\t\tfs.copyFileSync(readmePath, path.join(tempOutDir, 'README.md'));\n\n\t\tverbose('Copied readme');\n\t} catch {\n\t\t// do nothing it's okay\n\t\tverbose('No readme found.');\n\t}\n\n\t// copy config files to output directory\n\tif (manifest.configFiles) {\n\t\tverbose('Copying config files');\n\n\t\tfor (const file of manifest.configFiles) {\n\t\t\tconst originalPath = path.join(options.cwd, file.path);\n\t\t\tconst destPath = path.join(tempOutDir, file.path);\n\n\t\t\tconst containing = path.join(destPath, '../');\n\n\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t}\n\n\t\t\tfs.copyFileSync(originalPath, destPath);\n\t\t}\n\n\t\tverbose('Copied config files');\n\t}\n\n\tverbose('Copying registry files');\n\n\t// copy the files for each block in each category\n\tfor (const category of manifest.categories) {\n\t\tfor (const block of category.blocks) {\n\t\t\tconst originalPath = path.join(options.cwd, block.directory);\n\t\t\tconst newDirPath = path.join(tempOutDir, block.directory);\n\n\t\t\tfor (const file of block.files) {\n\t\t\t\tconst containing = path.join(newDirPath, file, '../');\n\n\t\t\t\tif (!fs.existsSync(containing)) {\n\t\t\t\t\tfs.mkdirSync(containing, { recursive: true });\n\t\t\t\t}\n\n\t\t\t\tfs.copyFileSync(path.join(originalPath, file), path.join(newDirPath, file));\n\t\t\t}\n\t\t}\n\t}\n\n\tverbose('Copied registry files');\n\n\tconst dest = path.resolve(options.cwd, `${config.name.replace('/', '_')}-package.tar.gz`);\n\n\tconst files = fs.readdirSync(tempOutDir);\n\n\tverbose('Creating archive file');\n\n\tawait tar.create(\n\t\t{\n\t\t\tz: true,\n\t\t\tcwd: tempOutDir,\n\t\t\tfile: dest,\n\t\t},\n\t\tfiles\n\t);\n\n\tverbose('Created archive file');\n\n\tverbose('Removing temp directory');\n\n\t// remove temp directory\n\tfs.rmSync(tempOutDir, { force: true, recursive: true });\n\n\tverbose('Removed temp directory');\n\n\tloading.stop(`Created package ${color.cyan(dest)}...`);\n\n\tconst access = config.access ?? 'public';\n\n\tlog.info(`Publishing to jsrepo with the access set to ${color.cyan(access)}`);\n\n\tloading.start(`Publishing ${color.bold(manifest.name)} to ${ascii.JSREPO_DOT_COM}...`);\n\n\tconst tarBuffer = fs.readFileSync(dest);\n\n\tverbose('Removing archive file');\n\n\t// remove archive file\n\tfs.rmSync(dest, { force: true, recursive: true });\n\n\tverbose('Removed archive file');\n\n\tverbose(`Publishing to ${`${jsrepo.BASE_URL}/api/publish`}`);\n\n\tconst response = await iFetch(`${jsrepo.BASE_URL}/api/publish`, {\n\t\tbody: tarBuffer,\n\t\theaders: {\n\t\t\t'content-type': 'application/gzip',\n\t\t\t'content-encoding': 'gzip',\n\t\t\t'x-api-key': apiKey,\n\t\t\t'x-dry-run': options.dryRun ? '1' : '0',\n\t\t\t'x-access': access,\n\t\t},\n\t\tmethod: 'POST',\n\t});\n\n\tloading.stop(`Got response from ${ascii.JSREPO_DOT_COM}.`);\n\n\tif (!response.ok) {\n\t\tconst res = (await response.json()) as { message: string };\n\n\t\tprogram.error(\n\t\t\tcolor.red(`${color.bold('[jsrepo.com]')} ${color.bold(response.status)} ${res.message}`)\n\t\t);\n\t} else {\n\t\tconst res = (await response.json()) as PublishResponse;\n\n\t\tif (res.status === 'dry-run') {\n\t\t\tlog.success(`${color.hex('#f7df1e').bold('[jsrepo.com]')} Completed dry run!`);\n\t\t} else {\n\t\t\tlog.success(\n\t\t\t\t`${color.hex('#f7df1e').bold('[jsrepo.com]')} published ${color.greenBright(`@${res.scope}`)}/${res.registry}${color.greenBright(`@${res.version}`)}!`\n\t\t\t);\n\t\t}\n\t}\n}\n\ntype PublishResponse =\n\t| {\n\t\t\tstatus: 'published';\n\t\t\tscope: string;\n\t\t\tregistry: string;\n\t\t\tversion: string;\n\t\t\ttag: string | null;\n\t\t\tprivate: boolean;\n\t }\n\t| {\n\t\t\tstatus: 'dry-run';\n\t };\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command, program } from 'commander';\nimport escapeStringRegexp from 'escape-string-regexp';\nimport oxc from 'oxc-parser';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport path from 'pathe';\nimport { x } from 'tinyexec';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getInstalled } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { isTestFile } from '../utils/build';\nimport { getPathForBlock, getProjectConfig, resolvePaths } from '../utils/config';\nimport { intro, spinner } from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tdebug: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst test = new Command('test')\n\t.description('Tests local blocks against most recent remote tests.')\n\t.addArgument(new Argument('[blocks...]', 'The blocks you want to test.').default([]))\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('--debug', 'Leaves the temp test file around for debugging upon failure.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _test(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _test(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to test ${JSON.stringify(blockNames)}`);\n\n\tconst config = getProjectConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${color.cyan('jsrepo')} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst blocksMap = (\n\t\tawait registry.fetchBlocks(resolvedRepos, {\n\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t})\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst tempTestDirectory = path.resolve(\n\t\tpath.join(options.cwd, `blocks-tests-temp-${Date.now()}`)\n\t);\n\n\tverbose(`Trying to create the temp directory ${color.bold(tempTestDirectory)}.`);\n\n\tfs.mkdirSync(tempTestDirectory, { recursive: true });\n\n\tconst cleanUp = () => {\n\t\tfs.rmSync(tempTestDirectory, { recursive: true, force: true });\n\t};\n\n\tconst installedBlocks = getInstalled(blocksMap, config, options.cwd).map(\n\t\t(val) => val.specifier\n\t);\n\n\tlet testingBlocks = blockNames;\n\n\t// in the case that we want to test all files\n\tif (blockNames.length === 0) {\n\t\ttestingBlocks = installedBlocks;\n\t}\n\n\tif (testingBlocks.length === 0) {\n\t\tcleanUp();\n\t\tprogram.error(color.red('There were no blocks found in your project!'));\n\t}\n\n\tconst testingBlocksMapped: { name: string; block: registry.RemoteBlock }[] = [];\n\n\tfor (const blockSpecifier of testingBlocks) {\n\t\tlet block: registry.RemoteBlock | undefined = undefined;\n\n\t\tconst provider = registry.selectProvider(blockSpecifier);\n\n\t\t// if the block starts with github (or another provider) we know it has been resolved\n\t\tif (!provider) {\n\t\t\tfor (const repo of repoPaths) {\n\t\t\t\t// we unwrap because we already checked this\n\t\t\t\tconst provider = registry.selectProvider(repo);\n\n\t\t\t\tif (!provider) continue;\n\n\t\t\t\tconst { url: parsedRepo, specifier } = provider.parse(\n\t\t\t\t\turl.join(repo, blockSpecifier),\n\t\t\t\t\t{\n\t\t\t\t\t\tfullyQualified: true,\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tconst tempBlock = blocksMap.get(url.join(parsedRepo, specifier!));\n\n\t\t\t\tif (tempBlock === undefined) continue;\n\n\t\t\t\tblock = tempBlock;\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tconst { url: repo } = provider.parse(blockSpecifier, { fullyQualified: true });\n\n\t\t\tconst providerState = (await registry.getProviderState(repo)).match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst map = (await registry.fetchBlocks([providerState])).match(\n\t\t\t\t(val) => val,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\tblocksMap.set(k, v);\n\t\t\t}\n\n\t\t\tblock = blocksMap.get(blockSpecifier);\n\t\t}\n\n\t\tif (!block) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(`Invalid block! ${color.bold(blockSpecifier)} does not exist!`)\n\t\t\t);\n\t\t}\n\n\t\ttestingBlocksMapped.push({ name: blockSpecifier, block });\n\t}\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tfor (const { block } of testingBlocksMapped) {\n\t\tconst providerState = block.sourceRepo;\n\n\t\tconst fullSpecifier = url.join(block.sourceRepo.url, block.category, block.name);\n\n\t\tif (!options.verbose) {\n\t\t\tloading.start(`Setting up test file for ${color.cyan(fullSpecifier)}`);\n\t\t}\n\n\t\tif (!block.tests) {\n\t\t\tloading.stop(`No tests found for ${color.cyan(fullSpecifier)}`);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet directory = getPathForBlock(block, resolvedPaths, options.cwd);\n\n\t\tdirectory = path.relative(tempTestDirectory, directory);\n\n\t\tconst getSourceFile = async (filePath: string) => {\n\t\t\tconst content = await registry.fetchRaw(providerState, filePath);\n\n\t\t\tif (content.isErr()) {\n\t\t\t\tloading.stop(color.red(`Error fetching ${color.bold(filePath)}`));\n\t\t\t\tprogram.error(color.red(`There was an error trying to get ${fullSpecifier}`));\n\t\t\t}\n\n\t\t\treturn content.unwrap();\n\t\t};\n\n\t\tverbose(`Downloading and copying test files for ${fullSpecifier}`);\n\n\t\tconst testFiles: string[] = [];\n\n\t\tfor (const testFile of block.files.filter((file) => isTestFile(file))) {\n\t\t\tconst content = await getSourceFile(path.join(block.directory, testFile));\n\n\t\t\tconst destPath = path.join(tempTestDirectory, testFile);\n\n\t\t\tfs.writeFileSync(destPath, content);\n\n\t\t\ttestFiles.push(destPath);\n\t\t}\n\n\t\t// resolve imports for the block\n\t\tfor (const file of testFiles) {\n\t\t\tverbose(`Opening test file ${file}`);\n\n\t\t\tlet code = fs.readFileSync(file).toString();\n\n\t\t\tconst result = oxc.parseSync(file, code);\n\n\t\t\tfor (const mod of result.module.staticImports) {\n\t\t\t\tconst moduleSpecifier = mod.moduleRequest.value;\n\n\t\t\t\tlet newModuleSpecifier: string | undefined = undefined;\n\n\t\t\t\tif (moduleSpecifier.startsWith('.')) {\n\t\t\t\t\tif (block.subdirectory) {\n\t\t\t\t\t\tnewModuleSpecifier = path.join(directory, block.name, moduleSpecifier);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnewModuleSpecifier = path.join(directory, moduleSpecifier);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (newModuleSpecifier) {\n\t\t\t\t\t// this way we only replace the exact import since it will be surrounded in quotes\n\t\t\t\t\tconst literalRegex = new RegExp(\n\t\t\t\t\t\t`(['\"])${escapeStringRegexp(moduleSpecifier)}\\\\1`,\n\t\t\t\t\t\t'g'\n\t\t\t\t\t);\n\n\t\t\t\t\tcode = code.replaceAll(literalRegex, `$1${newModuleSpecifier}$1`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfs.writeFileSync(file, code);\n\t\t}\n\n\t\tverbose(`Completed ${color.cyan.bold(fullSpecifier)} test file`);\n\n\t\tif (!options.verbose) {\n\t\t\tloading.stop(`Completed setup for ${color.bold(fullSpecifier)}`);\n\t\t}\n\t}\n\n\tverbose('Beginning testing');\n\n\tconst pm = await detect({ cwd: options.cwd });\n\n\tif (pm == null) {\n\t\tprogram.error(color.red('Could not detect package manager'));\n\t}\n\n\tconst resolved = resolveCommand(pm.agent, 'execute', ['vitest', 'run', tempTestDirectory]);\n\n\tif (resolved == null) {\n\t\tprogram.error(color.red(`Could not resolve add command for '${pm.agent}'.`));\n\t}\n\n\tconst testCommand = `${resolved.command} ${resolved.args.join(' ')}`;\n\n\tverbose(`Running ${color.cyan(testCommand)} on ${color.cyan(options.cwd)}`);\n\n\ttry {\n\t\tconst proc = x(resolved.command, resolved.args, { nodeOptions: { cwd: options.cwd } });\n\n\t\tfor await (const line of proc) {\n\t\t\tprocess.stdout.write(`${line}\\n`);\n\t\t}\n\n\t\tcleanUp();\n\t} catch (err) {\n\t\tif (options.debug) {\n\t\t\tconsole.info(\n\t\t\t\t`${color.bold('--debug')} flag provided. Skipping cleanup. Run '${color.bold(\n\t\t\t\t\ttestCommand\n\t\t\t\t)}' to retry tests.\\n`\n\t\t\t);\n\t\t} else {\n\t\t\tcleanUp();\n\t\t}\n\n\t\tprogram.error(color.red(`Tests failed! Error ${err}`));\n\t}\n}\n\nexport { test };\n","import { cancel, confirm, isCancel, log, outro, password, select, text } from '@clack/prompts';\nimport color from 'chalk';\nimport { Argument, Command } from 'commander';\nimport * as v from 'valibot';\nimport { getProjectConfig } from '../utils/config';\nimport { intro } from '../utils/prompts';\nimport { http } from '../utils/registry-providers';\nimport { TokenManager } from '../utils/token-manager';\n\nconst schema = v.object({\n\ttoken: v.optional(v.string()),\n\tlogout: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst services = ['Anthropic', 'Azure', 'BitBucket', 'GitHub', 'GitLab', 'OpenAI', 'http'].sort();\n\nexport const tokens = new Command('tokens')\n\t.description('Provide a token for access to private repositories.')\n\t.addArgument(\n\t\tnew Argument('service', 'The service you want to authenticate to.')\n\t\t\t.choices(services.map((s) => s.toLowerCase()))\n\t\t\t.argOptional()\n\t)\n\t.option('--logout', 'Execute the logout flow.', false)\n\t.option('--token <token>', 'The token to use for authenticating to this service.')\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (service, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _tokens(service, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _tokens(service: string | undefined, options: Options) {\n\tconst configuredRegistries: string[] = getProjectConfig(options.cwd).match(\n\t\t(v) => v.repos.filter(http.matches),\n\t\t() => []\n\t);\n\n\tlet selectedService = services.find((s) => s.toLowerCase() === service?.toLowerCase());\n\n\tconst storage = new TokenManager();\n\n\t// logout flow\n\tif (options.logout) {\n\t\tif (selectedService !== undefined) {\n\t\t\tif (selectedService === 'http') {\n\t\t\t\tawait promptHttpLogout(storage);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstorage.delete(selectedService);\n\t\t\tlog.success(`Logged out of ${selectedService}.`);\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const serviceName of services) {\n\t\t\tif (serviceName === 'http') {\n\t\t\t\tawait promptHttpLogout(storage);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (storage.get(serviceName) === undefined) {\n\t\t\t\tlog.step(color.gray(`Already logged out of ${color.bold(serviceName)}.`));\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst response = await confirm({\n\t\t\t\tmessage: `Logout of ${color.bold(serviceName)}?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\n\t\t\tif (isCancel(response)) {\n\t\t\t\tcancel('Canceled!');\n\t\t\t\tprocess.exit(0);\n\t\t\t}\n\n\t\t\tif (!response) continue;\n\n\t\t\tstorage.delete(serviceName);\n\t\t}\n\n\t\treturn;\n\t}\n\n\t// login flow\n\tif (selectedService === undefined) {\n\t\tconst response = await select({\n\t\t\tmessage: 'Which service do you want to authenticate to?',\n\t\t\toptions: services.map((serviceName) => ({\n\t\t\t\tlabel: serviceName,\n\t\t\t\tvalue: serviceName,\n\t\t\t})),\n\t\t\tinitialValue: services[0],\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tselectedService = response;\n\n\t\tif (selectedService === 'http') {\n\t\t\tlet selectedRegistry = 'Other';\n\n\t\t\tif (configuredRegistries.length > 0) {\n\t\t\t\tconfiguredRegistries.push('Other');\n\n\t\t\t\tconst response = await select({\n\t\t\t\t\tmessage: 'Which registry do you want to authenticate to?',\n\t\t\t\t\toptions: configuredRegistries.map((serviceName) => ({\n\t\t\t\t\t\tlabel: serviceName,\n\t\t\t\t\t\tvalue: serviceName,\n\t\t\t\t\t})),\n\t\t\t\t\tinitialValue: services[0],\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(response)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tselectedRegistry = new URL(response).origin;\n\t\t\t}\n\n\t\t\t// prompt for registry\n\t\t\tif (selectedRegistry === 'Other') {\n\t\t\t\tconst response = await text({\n\t\t\t\t\tmessage: 'Please enter the registry url you want to authenticate to:',\n\t\t\t\t\tplaceholder: 'https://example.com',\n\t\t\t\t\tvalidate(value) {\n\t\t\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// try to parse the url\n\t\t\t\t\t\t\tnew URL(value);\n\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t// if parsing fails return the error\n\t\t\t\t\t\t\treturn 'Please provide a valid url';\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (isCancel(response)) {\n\t\t\t\t\tcancel('Canceled!');\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t}\n\n\t\t\t\tselectedRegistry = new URL(response).origin;\n\t\t\t}\n\n\t\t\tselectedService = `http-${selectedRegistry}`;\n\t\t}\n\t}\n\n\tlet serviceName = selectedService;\n\n\tif (serviceName.startsWith('http')) {\n\t\tserviceName = serviceName.slice(5);\n\t}\n\n\tif (options.token === undefined) {\n\t\tconst response = await password({\n\t\t\tmessage: `Paste your token for ${color.bold(serviceName)}:`,\n\t\t\tvalidate(value) {\n\t\t\t\tif (value.trim() === '') return 'Please provide a value';\n\t\t\t},\n\t\t});\n\n\t\tif (isCancel(response) || !response) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\toptions.token = response;\n\t}\n\n\tstorage.set(selectedService, options.token);\n\n\tlog.success(`Logged into ${color.bold(serviceName)}.`);\n}\n\nasync function promptHttpLogout(storage: TokenManager) {\n\t// list all providers for logout\n\tconst registries = storage.getHttpRegistriesWithTokens();\n\n\tif (registries.length === 0) {\n\t\tlog.step(color.gray(`Already logged out of ${color.bold('http')}.`));\n\t}\n\n\tfor (const registry of registries) {\n\t\tlet registryUrl: URL;\n\n\t\ttry {\n\t\t\tregistryUrl = new URL(registry);\n\t\t} catch {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst response = await confirm({\n\t\t\tmessage: `Logout of ${color.bold(registryUrl.origin)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(response)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tif (!response) continue;\n\n\t\tstorage.delete(`http-${registryUrl.origin}`);\n\t}\n}\n","import fs from 'node:fs';\nimport { cancel, confirm, isCancel, multiselect, outro } from '@clack/prompts';\nimport color from 'chalk';\nimport { Command, program } from 'commander';\nimport { resolveCommand } from 'package-manager-detector/commands';\nimport { detect } from 'package-manager-detector/detect';\nimport * as v from 'valibot';\nimport * as ascii from '../utils/ascii';\nimport { getBlockFilePath, getInstalled, preloadBlocks, resolveTree } from '../utils/blocks';\nimport * as url from '../utils/blocks/ts/url';\nimport { getProjectConfig, resolvePaths } from '../utils/config';\nimport { transformRemoteContent } from '../utils/files';\nimport { loadFormatterConfig } from '../utils/format';\nimport { getWatermark } from '../utils/get-watermark';\nimport { checkPreconditions } from '../utils/preconditions';\nimport {\n\tintro,\n\tnextSteps,\n\tpromptInstallDependencies,\n\tpromptUpdateFile,\n\tspinner,\n} from '../utils/prompts';\nimport * as registry from '../utils/registry-providers/internal';\n\nconst schema = v.object({\n\tall: v.boolean(),\n\texpand: v.boolean(),\n\tmaxUnchanged: v.number(),\n\tno: v.boolean(),\n\trepo: v.optional(v.string()),\n\tallow: v.boolean(),\n\tyes: v.boolean(),\n\tcache: v.boolean(),\n\tverbose: v.boolean(),\n\tcwd: v.string(),\n});\n\ntype Options = v.InferInput<typeof schema>;\n\nconst update = new Command('update')\n\t.description('Update blocks to the code in the remote repository.')\n\t.argument('[blocks...]', 'Names of the blocks you want to update. ex: (utils/math)')\n\t.option('--all', 'Update all installed components.', false)\n\t.option('-E, --expand', 'Expands the diff so you see the entire file.', false)\n\t.option(\n\t\t'--max-unchanged <number>',\n\t\t'Maximum unchanged lines that will show without being collapsed.',\n\t\t(val) => Number.parseInt(val), // this is such a dumb api thing\n\t\t3\n\t)\n\t.option('-n, --no', 'Do update any blocks.', false)\n\t.option('--repo <repo>', 'Repository to download the blocks from.')\n\t.option('-A, --allow', 'Allow jsrepo to download code from the provided repo.', false)\n\t.option('-y, --yes', 'Skip confirmation prompt.', false)\n\t.option('--no-cache', 'Disable caching of resolved git urls.')\n\t.option('--verbose', 'Include debug logs.', false)\n\t.option('--cwd <path>', 'The current working directory.', process.cwd())\n\t.action(async (blockNames, opts) => {\n\t\tconst options = v.parse(schema, opts);\n\n\t\tawait intro();\n\n\t\tawait _update(blockNames, options);\n\n\t\toutro(color.green('All done!'));\n\t});\n\nasync function _update(blockNames: string[], options: Options) {\n\tconst verbose = (msg: string) => {\n\t\tif (options.verbose) {\n\t\t\tconsole.info(`${ascii.INFO} ${msg}`);\n\t\t}\n\t};\n\n\tverbose(`Attempting to update ${JSON.stringify(blockNames)}`);\n\n\tconst loading = spinner({ verbose: options.verbose ? verbose : undefined });\n\n\tconst config = getProjectConfig(options.cwd).match(\n\t\t(val) => val,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tlet repoPaths = config.repos;\n\n\t// we just want to override all others if supplied via the CLI\n\tif (options.repo) repoPaths = [options.repo];\n\n\t// ensure blocks do not provide repos\n\tfor (const blockSpecifier of blockNames) {\n\t\tif (registry.providers.find((p) => blockSpecifier.startsWith(p.name))) {\n\t\t\tprogram.error(\n\t\t\t\tcolor.red(\n\t\t\t\t\t`Invalid value provided for block names \\`${color.bold(blockSpecifier)}\\`. Block names are expected to be provided in the format of \\`${color.bold('<category>/<name>')}\\``\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n\n\tif (!options.allow && options.repo) {\n\t\tconst result = await confirm({\n\t\t\tmessage: `Allow ${color.cyan('jsrepo')} to download and run code from ${color.cyan(options.repo)}?`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (isCancel(result) || !result) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\t}\n\n\tverbose(`Resolving ${color.cyan(repoPaths.join(', '))}`);\n\n\tif (!options.verbose) loading.start(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst resolvedRepos: registry.RegistryProviderState[] = (\n\t\tawait registry.forEachPathGetProviderState(repoPaths, { noCache: !options.cache })\n\t).match(\n\t\t(val) => val,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed to get info for ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tverbose(`Resolved ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Fetching blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tconst manifests = (await registry.fetchManifests(resolvedRepos)).match(\n\t\t(v) => v,\n\t\t({ repo, message }) => {\n\t\t\tloading.stop(`Failed fetching blocks from ${color.cyan(repo)}`);\n\t\t\tprogram.error(color.red(message));\n\t\t}\n\t);\n\n\tconst blocksMap = registry.getRemoteBlocks(manifests);\n\n\tif (!options.verbose) loading.stop(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tverbose(`Retrieved blocks from ${color.cyan(repoPaths.join(', '))}`);\n\n\tfor (const manifest of manifests) {\n\t\tcheckPreconditions(manifest.state, manifest.manifest, options.cwd);\n\t}\n\n\tconst installedBlocks = getInstalled(blocksMap, config, options.cwd);\n\n\tif (installedBlocks.length === 0) {\n\t\tprogram.error(\n\t\t\tcolor.red(\n\t\t\t\t`You haven't installed any blocks yet. Did you mean to \\`${color.bold('add')}\\`?`\n\t\t\t)\n\t\t);\n\t}\n\n\tlet updatingBlockNames = blockNames;\n\n\tif (options.all) {\n\t\tupdatingBlockNames = installedBlocks.map((block) => block.specifier);\n\t}\n\n\t// if no blocks are provided prompt the user for what blocks they want\n\tif (updatingBlockNames.length === 0) {\n\t\tconst promptResult = await multiselect({\n\t\t\tmessage: `Which blocks would you like to ${options.no ? 'diff' : 'update'}?`,\n\t\t\toptions: installedBlocks\n\t\t\t\t.filter((b) => b.block.list)\n\t\t\t\t.map((block) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tlabel: `${color.cyan(block.block.category)}/${block.block.name}`,\n\t\t\t\t\t\tvalue: block.specifier,\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\trequired: true,\n\t\t});\n\n\t\tif (isCancel(promptResult)) {\n\t\t\tcancel('Canceled!');\n\t\t\tprocess.exit(0);\n\t\t}\n\n\t\tupdatingBlockNames = promptResult as string[];\n\t}\n\n\tverbose(`Preparing to update ${color.cyan(updatingBlockNames.join(', '))}`);\n\n\tconst updatingBlocks = (await resolveTree(updatingBlockNames, blocksMap, resolvedRepos)).match(\n\t\t(val) => val,\n\t\tprogram.error\n\t);\n\n\tconst devDeps: Set<string> = new Set<string>();\n\tconst deps: Set<string> = new Set<string>();\n\n\tconst { prettierOptions, biomeOptions } = await loadFormatterConfig({\n\t\tformatter: config.formatter,\n\t\tcwd: options.cwd,\n\t});\n\n\tconst resolvedPaths = resolvePaths(config.paths, options.cwd).match(\n\t\t(v) => v,\n\t\t(err) => program.error(color.red(err))\n\t);\n\n\tconst preloadedBlocks = preloadBlocks(updatingBlocks, config);\n\n\tfor (const preloadedBlock of preloadedBlocks) {\n\t\tconst fullSpecifier = url.join(\n\t\t\tpreloadedBlock.block.sourceRepo.url,\n\t\t\tpreloadedBlock.block.category,\n\t\t\tpreloadedBlock.block.name\n\t\t);\n\n\t\tconst watermark = getWatermark(preloadedBlock.block.sourceRepo.url);\n\n\t\tverbose(`Attempting to update ${fullSpecifier}`);\n\n\t\tif (config.includeTests && preloadedBlock.block.tests) {\n\t\t\tverbose('Trying to include tests');\n\n\t\t\tdevDeps.add('vitest');\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.devDependencies) {\n\t\t\tdevDeps.add(dep);\n\t\t}\n\n\t\tfor (const dep of preloadedBlock.block.dependencies) {\n\t\t\tdeps.add(dep);\n\t\t}\n\n\t\tconst files = await preloadedBlock.files;\n\n\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE}\\n`);\n\n\t\tprocess.stdout.write(`${ascii.VERTICAL_LINE} ${fullSpecifier}\\n`);\n\n\t\tfor (const file of files) {\n\t\t\tconst content = file.content.match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tconst destPath = getBlockFilePath(\n\t\t\t\tfile.name,\n\t\t\t\tpreloadedBlock.block,\n\t\t\t\tresolvedPaths,\n\t\t\t\toptions.cwd\n\t\t\t);\n\n\t\t\tconst remoteContent = (\n\t\t\t\tawait transformRemoteContent({\n\t\t\t\t\tfile: {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdestPath: destPath,\n\t\t\t\t\t},\n\t\t\t\t\tbiomeOptions,\n\t\t\t\t\tprettierOptions,\n\t\t\t\t\tconfig,\n\t\t\t\t\timports: preloadedBlock.block._imports_,\n\t\t\t\t\twatermark,\n\t\t\t\t\tverbose,\n\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t})\n\t\t\t).match(\n\t\t\t\t(v) => v,\n\t\t\t\t(err) => program.error(color.red(err))\n\t\t\t);\n\n\t\t\tlet localContent = '';\n\t\t\tif (fs.existsSync(destPath)) {\n\t\t\t\tlocalContent = fs.readFileSync(destPath).toString();\n\t\t\t}\n\n\t\t\tconst updateResult = await promptUpdateFile({\n\t\t\t\tconfig: { biomeOptions, prettierOptions, formatter: config.formatter },\n\t\t\t\tcurrent: {\n\t\t\t\t\tpath: destPath,\n\t\t\t\t\tcontent: localContent,\n\t\t\t\t},\n\t\t\t\tincoming: {\n\t\t\t\t\tpath: url.join(fullSpecifier, file.name),\n\t\t\t\t\tcontent: remoteContent,\n\t\t\t\t},\n\t\t\t\toptions: {\n\t\t\t\t\t...options,\n\t\t\t\t\tloading,\n\t\t\t\t\tverbose: options.verbose ? verbose : undefined,\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (updateResult.applyChanges) {\n\t\t\t\tloading.start(`Writing changes to ${color.cyan(destPath)}`);\n\n\t\t\t\tfs.writeFileSync(destPath, updateResult.updatedContent);\n\n\t\t\t\tloading.stop(`Wrote changes to ${color.cyan(destPath)}.`);\n\t\t\t}\n\t\t}\n\t}\n\n\tconst pm = (await detect({ cwd: options.cwd }))?.agent ?? 'npm';\n\n\tconst installResult = await promptInstallDependencies(deps, devDeps, {\n\t\tyes: options.yes,\n\t\tno: options.no,\n\t\tcwd: options.cwd,\n\t\tpm,\n\t});\n\n\tif (installResult.dependencies.size > 0 || installResult.devDependencies.size > 0) {\n\t\t// next steps if they didn't install dependencies\n\t\tlet steps = [];\n\n\t\tif (!installResult.installed) {\n\t\t\tif (deps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...deps]);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tif (devDeps.size > 0) {\n\t\t\t\tconst cmd = resolveCommand(pm, 'add', [...devDeps, '-D']);\n\n\t\t\t\tsteps.push(\n\t\t\t\t\t`Install dev dependencies \\`${color.cyan(`${cmd?.command} ${cmd?.args.join(' ')}`)}\\``\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// put steps with numbers above here\n\t\tsteps = steps.map((step, i) => `${i + 1}. ${step}`);\n\n\t\tif (!installResult.installed) {\n\t\t\tsteps.push('');\n\t\t}\n\n\t\tsteps.push('Import and use the blocks!');\n\n\t\tconst next = nextSteps(steps);\n\n\t\tprocess.stdout.write(next);\n\t}\n}\n\nexport { update };\n","import { program } from 'commander';\nimport pkg from '../package.json';\nimport * as commands from './commands';\n\nconst cli = program\n\t.name(pkg.name)\n\t.description(pkg.description)\n\t.version(pkg.version)\n\t.addCommand(commands.add)\n\t.addCommand(commands.auth)\n\t.addCommand(commands.build)\n\t.addCommand(commands.exec)\n\t.addCommand(commands.info)\n\t.addCommand(commands.init)\n\t.addCommand(commands.mcp)\n\t.addCommand(commands.publish)\n\t.addCommand(commands.test)\n\t.addCommand(commands.tokens)\n\t.addCommand(commands.update);\n\nexport { cli };\n","#!/usr/bin/env node\n\nimport { cli } from './cli';\n\ncli.parse();\n"]}
|