gitpick 3.12.0 ā 3.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ var y=Object.getOwnPropertySymbols;var C=Object.prototype.hasOwnProperty,W=Objec
|
|
|
5
5
|
`);let c=G().start();try{c.stop();let l=g.resolve(t.target);if(r.watch&&(r.overwrite=!0),p.existsSync(l+(t.type==="blob"?"/"+t.path.split("/").pop():""))&&(await p.promises.readdir(l)).length&&!r.overwrite){let m=t.type==="tree"?"The target directory is not empty. Do you want to overwrite the files?":"The target file already exists. Do you want to overwrite the file?",{overwrite:u}=await A.prompt([{type:"confirm",name:"overwrite",message:m,default:!1}]);if(!u)throw new Error("Chose not to overwrite files");c.info("You can use -o | --overwrite flag to skip this prompt")}if(await x(c,t,r,l),r.watch){let m=d(r.watch);setInterval(async()=>await x(c,t,r,l),m)}}catch(l){console.log(`
|
|
6
6
|
`),c.fail("An error occurred");let m=R(l);console.log(`
|
|
7
7
|
`+m.toString()+`
|
|
8
|
-
`),process.exit(1)}});async function D(e,o){let r=await p.promises.readdir(e,{withFileTypes:!0});await p.promises.mkdir(o,{recursive:!0});for(let t of r){if(t.name===".git")continue;let n=g.join(e,t.name),s=g.join(o,t.name);t.isDirectory()?await D(n,s):await p.promises.copyFile(n,s)}}var x=async(e,o,r,t)=>{try{let n=N(),s=`https://${o.token?o.token+"@":o.token}github.com/${o.owner}/${o.repository}.git`,c=g.join(H.tmpdir(),`${o.repository}-${Date.now()}`);r.watch||e.start(`Cloning ${o.type} from repository`),await n.clone(s,c,["--depth","1","--single-branch","--branch",o.branch]);let i=g.join(c,o.path);(await p.promises.stat(i)).isDirectory()?(await p.promises.mkdir(t,{recursive:!0}),await D(i,t)):(await p.promises.mkdir(t,{recursive:!0}),await p.promises.copyFile(i,t+"/"+o.path.split("/").pop())),r.watch?e.succeed("Synced at "+new Date().toLocaleTimeString()):e.succeed(`${o.type.slice(0,1).toUpperCase()+o.type.slice(1)} cloned from repository`),await p.promises.rm(c,{recursive:!0,force:!0})}catch(n){throw new Error("An error occurred while cloning the repository")}};import a from"chalk";import{Command as F}from"commander";var b={name:"gitpick",version:"3.
|
|
8
|
+
`),process.exit(1)}});async function D(e,o){let r=await p.promises.readdir(e,{withFileTypes:!0});await p.promises.mkdir(o,{recursive:!0});for(let t of r){if(t.name===".git")continue;let n=g.join(e,t.name),s=g.join(o,t.name);t.isDirectory()?await D(n,s):await p.promises.copyFile(n,s)}}var x=async(e,o,r,t)=>{try{let n=N(),s=`https://${o.token?o.token+"@":o.token}github.com/${o.owner}/${o.repository}.git`,c=g.join(H.tmpdir(),`${o.repository}-${Date.now()}`);r.watch||e.start(`Cloning ${o.type} from repository`),await n.clone(s,c,["--depth","1","--single-branch","--branch",o.branch]);let i=g.join(c,o.path);(await p.promises.stat(i)).isDirectory()?(await p.promises.mkdir(t,{recursive:!0}),await D(i,t)):(await p.promises.mkdir(t,{recursive:!0}),await p.promises.copyFile(i,t+"/"+o.path.split("/").pop())),r.watch?e.succeed("Synced at "+new Date().toLocaleTimeString()):e.succeed(`${o.type.slice(0,1).toUpperCase()+o.type.slice(1)} cloned from repository`),await p.promises.rm(c,{recursive:!0,force:!0})}catch(n){throw new Error("An error occurred while cloning the repository")}};import a from"chalk";import{Command as F}from"commander";var b={name:"gitpick",version:"3.12.0",description:"With gitpick, you can clone precisely what you need.",license:"MIT",author:{name:"Neeraj Dalal",url:"https://nrjdalal.com",email:"admin@nrjdalal.com"},scripts:{dev:"tsup --watch",build:"tsup",test:"bun run build && node dist/index.js",tests:"bash tests.sh",prepare:'if [ "$NODE_ENV" != "production" ]; then npx simple-git-hooks; fi',"publish:local":"bun run build && npm version minor && changeset publish","publish:latest":"NODE_ENV=production changeset publish"},"simple-git-hooks":{"pre-commit":"npx lint-staged","commit-msg":"npx commitlint --edit $1"},repository:"nrjdalal/gitpick",homepage:"https://github.com/nrjdalal/gitpick#readme",bugs:"https://github.com/nrjdalal/gitpick/issues",keywords:["branch","checkout","cli","clone","directories","directory","file","files","folder","folders","gh","git","github","gitpick","path","sparse","specific","url"],type:"module",files:["dist"],bin:{gitpick:"./dist/index.js"},devDependencies:{"@changesets/changelog-github":"^0.5.0","@changesets/cli":"^2.27.12","@commitlint/cli":"^19.7.1","@commitlint/config-conventional":"^19.7.1","@ianvs/prettier-plugin-sort-imports":"^4.4.1","@types/node":"^22.13.1","lint-staged":"^15.4.3",prettier:"^3.4.2","simple-git-hooks":"^2.11.1",tsup:"^8.3.6",typescript:"^5.7.3"},dependencies:{chalk:"^5.4.1",commander:"^13.1.0",inquirer:"^12.4.1",ora:"^8.2.0","simple-git":"^3.27.0",zod:"^3.24.1","zod-validation-error":"^3.4.0"}};process.on("SIGINT",()=>process.exit(0));process.on("SIGTERM",()=>process.exit(0));async function O(){let e=new F().name("gitpick").description("With gitpick, you can clone precisely what you need.").version(b.version||"1.0.0","-v, --version","display the version number"),o=process.argv.slice(2),r=["-v","--version","-h","--help","help","clone"];o.length&&!r.includes(o[0])&&process.argv.splice(2,0,"clone"),e.addCommand(j),e.configureHelp({formatHelp:()=>`${a.bold("With gitpick, you can clone precisely what you need.")}
|
|
9
9
|
|
|
10
10
|
\u{1F680} More awesome tools at ${a.cyan("https://github.com/nrjdalal")}
|
|
11
11
|
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/commands/clone.ts","../src/utils/parse-time-string.ts","../src/utils/get-default-branch.ts","../src/utils/transform-url.ts","../src/index.ts","../package.json"],"sourcesContent":["import fs from \"fs\"\nimport os from \"os\"\nimport path from \"path\"\nimport { parseTimeString } from \"@/utils/parse-time-string\"\nimport { githubConfigFromUrl } from \"@/utils/transform-url\"\nimport { Command } from \"commander\"\nimport inquirer from \"inquirer\"\nimport ora, { Ora } from \"ora\"\nimport simpleGit from \"simple-git\"\nimport { z } from \"zod\"\nimport { fromError } from \"zod-validation-error\"\n\nconst schema = z.object({\n url: z.string(),\n target: z.string().optional(),\n branch: z.string().optional(),\n overwrite: z.boolean().optional(),\n watch: z.union([z.string(), z.number(), z.boolean()]).optional(),\n})\n\nexport const clone = new Command()\n .name(\"clone\")\n .argument(\"<url>\", \"GitHub URL with path to file/folder\")\n .argument(\"[target]\", \"Directory to clone into (optional)\")\n .option(\"-b, --branch <branch>\", \"Branch to clone\")\n .option(\"-o, --overwrite\", \"Skip overwrite prompt\")\n .option(\n \"-w, --watch [time]\",\n `Watch the repository and sync every [time]\n(e.g. 1h, 30m, 15s) default: 1m`,\n )\n .action(\n async (\n url: string,\n target: string | undefined,\n options: z.infer<typeof schema>,\n ) => {\n schema.parse({\n url,\n target,\n branch: options.branch,\n overwrite: options.overwrite,\n watch: options.watch,\n })\n\n if (options.watch) {\n if (typeof options.watch === \"boolean\") options.watch = \"1m\"\n\n console.log(\n `š Watching every ${parseTimeString(options.watch) / 1000 + \"s\"}\\n`,\n )\n }\n\n const config = await githubConfigFromUrl(url, {\n branch: options.branch,\n target,\n })\n\n const { token, ...configWithoutToken } = config\n console.log(configWithoutToken, \"\\n\")\n\n const spinner = ora().start()\n\n try {\n spinner.stop()\n\n const targetPath = path.resolve(config.target)\n\n if (options.watch) options.overwrite = true\n\n if (\n fs.existsSync(\n targetPath +\n (config.type === \"blob\"\n ? \"/\" + config.path.split(\"/\").pop()\n : \"\"),\n ) &&\n (await fs.promises.readdir(targetPath)).length &&\n !options.overwrite\n ) {\n const message =\n config.type === \"tree\"\n ? \"The target directory is not empty. Do you want to overwrite the files?\"\n : \"The target file already exists. Do you want to overwrite the file?\"\n\n const { overwrite } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"overwrite\",\n message,\n default: false,\n },\n ])\n\n if (!overwrite) {\n throw new Error(\"Chose not to overwrite files\")\n }\n\n spinner.info(\"You can use -o | --overwrite flag to skip this prompt\")\n }\n\n await cloneAction(spinner, config, options, targetPath)\n\n if (options.watch) {\n const watchInterval = parseTimeString(options.watch)\n setInterval(\n async () => await cloneAction(spinner, config, options, targetPath),\n watchInterval,\n )\n }\n } catch (err) {\n console.log(\"\\n\")\n spinner.fail(\"An error occurred\")\n const validationError = fromError(err)\n console.log(\"\\n\" + validationError.toString() + \"\\n\")\n process.exit(1)\n }\n },\n )\n\nasync function copyDir(src: string, dest: string) {\n const entries = await fs.promises.readdir(src, { withFileTypes: true })\n await fs.promises.mkdir(dest, { recursive: true })\n\n for (let entry of entries) {\n if (entry.name === \".git\") continue\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath)\n } else {\n await fs.promises.copyFile(srcPath, destPath)\n }\n }\n}\n\nconst cloneAction = async (\n spinner: Ora,\n config: {\n token: string\n owner: string\n repository: string\n branch: string\n type: string\n path: string\n },\n options: {\n watch?: string | number | boolean\n },\n targetPath: string,\n) => {\n try {\n const git = simpleGit()\n const repoUrl = `https://${config.token ? config.token + \"@\" : config.token}github.com/${config.owner}/${config.repository}.git`\n const tempDir = path.join(os.tmpdir(), `${config.repository}-${Date.now()}`)\n\n if (!options.watch) spinner.start(`Cloning ${config.type} from repository`)\n\n await git.clone(repoUrl, tempDir, [\n \"--depth\",\n \"1\",\n \"--single-branch\",\n \"--branch\",\n config.branch,\n ])\n\n const sourcePath = path.join(tempDir, config.path)\n\n const sourceStat = await fs.promises.stat(sourcePath)\n if (sourceStat.isDirectory()) {\n await fs.promises.mkdir(targetPath, { recursive: true })\n await copyDir(sourcePath, targetPath)\n } else {\n await fs.promises.mkdir(targetPath, {\n recursive: true,\n })\n await fs.promises.copyFile(\n sourcePath,\n targetPath + \"/\" + config.path.split(\"/\").pop(),\n )\n }\n if (!options.watch) {\n spinner.succeed(\n `${config.type.slice(0, 1).toUpperCase() + config.type.slice(1)} cloned from repository`,\n )\n } else spinner.succeed(\"Synced at \" + new Date().toLocaleTimeString())\n\n await fs.promises.rm(tempDir, { recursive: true, force: true })\n } catch {\n throw new Error(\"An error occurred while cloning the repository\")\n }\n}\n","export function parseTimeString(timeString: string | number): number {\n if (typeof timeString === \"number\" || /^\\d+$/.test(timeString)) {\n return typeof timeString === \"number\"\n ? timeString\n : parseInt(timeString, 10)\n }\n\n const regex = /(\\d+)([hms])/g\n let totalMilliseconds = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(timeString)) !== null) {\n const value = parseInt(match[1], 10)\n const unit = match[2] as \"h\" | \"m\" | \"s\"\n\n switch (unit) {\n case \"h\":\n totalMilliseconds += value * 3600000\n break\n case \"m\":\n totalMilliseconds += value * 60000\n break\n case \"s\":\n totalMilliseconds += value * 1000\n break\n }\n }\n\n return totalMilliseconds\n}\n","import simpleGit from \"simple-git\"\n\nexport const getDefaultBranch = async (url: string) => {\n const remotes = await simpleGit().listRemote([url])\n const headHash = remotes.match(/(.+)\\s+HEAD/)?.[1]\n const branch = remotes.match(\n new RegExp(`${headHash}\\\\s+refs/heads/(.+)`),\n )?.[1]\n if (!branch) {\n throw new Error(\"Could not determine default branch!\")\n }\n return branch\n}\n","import { getDefaultBranch } from \"./get-default-branch\"\n\nexport async function githubConfigFromUrl(\n url: string,\n {\n branch,\n target,\n }: {\n branch?: string | null\n target?: string | null\n },\n) {\n const regex = /^https:\\/\\/([^@]+)@github\\.com/\n const match = url.match(regex)\n\n let token = \"\"\n if (match) {\n token = match[1]\n url = url.replace(regex, \"https://github.com\")\n }\n\n const prefixes = [\n \"git@github.com:\",\n \"https://github.com/\",\n \"https://raw.githubusercontent.com/\",\n ]\n\n for (const prefix of prefixes) {\n if (url.startsWith(prefix)) {\n url = url.replace(prefix, \"\")\n break\n }\n }\n\n const split = url.split(\"/\")\n\n const owner = split[0]\n const repository = split[1].endsWith(\".git\")\n ? split[1].slice(0, -4)\n : split[1]\n const type =\n split[2] === \"blob\"\n ? \"blob\"\n : split[2] === \"tree\"\n ? \"tree\"\n : split[2] + split[3] === \"refsheads\"\n ? \"raw\"\n : \"repository\"\n const resolvedBranch = branch\n ? branch\n : type === \"repository\"\n ? await getDefaultBranch(\n `https://${token ? token + \"@\" : token}github.com/${owner}/${repository}`,\n )\n : type === \"raw\"\n ? split[4]\n : split[3]\n const path = type\n ? type === \"raw\"\n ? split.slice(5).join(\"/\")\n : split.slice(4).join(\"/\")\n : split.slice(2).join(\"/\") || \"/\"\n const resolvedTarget = target\n ? target\n : type === \"blob\"\n ? \".\"\n : path.split(\"/\").pop() || repository\n\n return {\n token,\n owner,\n repository,\n type,\n branch: resolvedBranch,\n path,\n target: resolvedTarget,\n }\n}\n","#!/usr/bin/env node\nimport { clone } from \"@/commands/clone\"\nimport chalk from \"chalk\"\nimport { Command } from \"commander\"\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"gitpick\")\n .description(\"With gitpick, you can clone precisely what you need.\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n )\n\n const args = process.argv.slice(2)\n const validCommands = [\"-v\", \"--version\", \"-h\", \"--help\", \"help\", \"clone\"]\n if (args.length && !validCommands.includes(args[0])) {\n process.argv.splice(2, 0, \"clone\")\n }\n\n program.addCommand(clone)\n\n program.configureHelp({\n formatHelp: () => {\n return `${chalk.bold(\"With gitpick, you can clone precisely what you need.\")}\n\nš More awesome tools at ${chalk.cyan(\"https://github.com/nrjdalal\")}\n\n-------------------------------------\n ${chalk.cyan(\"gitpick <url>\")} ${chalk.green(\"[target]\")} ${chalk.blue(\"[options]\")}\n-------------------------------------\n\n${chalk.bold(\"Hint:\")} Target is optional, and follows default git clone behavior.\n\n${chalk.bold(\"Arguments:\")}\n ${chalk.cyan(\"url\")} GitHub URL with path to file/folder\n ${chalk.green(\"target\")} Directory to clone into (optional)\n\n${chalk.bold(\"Options:\")}\n ${chalk.blue(\"-b, --branch \")} Branch to clone\n ${chalk.blue(\"-o, --overwrite\")} Skip overwrite prompt\n ${chalk.blue(\"-w, --watch [time]\")} Watch the repository and sync every [time]\n (e.g. 1h, 30m, 15s) default: 1m\n ${chalk.blue(\"-h, --help\")} display help for command\n ${chalk.blue(\"-v, --version\")} display the version number\n\n${chalk.bold(\"Examples:\")}\n $ gitpick <url>\n $ gitpick <url> [target]\n $ gitpick <url> [target] -b [branch]\n $ gitpick <url> [target] -w [time]\n $ gitpick <url> [target] -b [branch] -w [time]\n`\n },\n })\n\n console.log(`\\ngitpick v${packageJson.version}\\n`)\n\n program.parse()\n}\n\nmain()\n","{\n \"name\": \"gitpick\",\n \"version\": \"3.11.1\",\n \"description\": \"With gitpick, you can clone precisely what you need.\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Neeraj Dalal\",\n \"url\": \"https://nrjdalal.com\",\n \"email\": \"admin@nrjdalal.com\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"test\": \"bun run build && node dist/index.js\",\n \"tests\": \"bash tests.sh\",\n \"prepare\": \"if [ \\\"$NODE_ENV\\\" != \\\"production\\\" ]; then npx simple-git-hooks; fi\",\n \"publish:local\": \"bun run build && npm version minor && changeset publish\",\n \"publish:latest\": \"NODE_ENV=production changeset publish\"\n },\n \"simple-git-hooks\": {\n \"pre-commit\": \"npx lint-staged\",\n \"commit-msg\": \"npx commitlint --edit $1\"\n },\n \"repository\": \"nrjdalal/gitpick\",\n \"homepage\": \"https://github.com/nrjdalal/gitpick#readme\",\n \"bugs\": \"https://github.com/nrjdalal/gitpick/issues\",\n \"keywords\": [\n \"branch\",\n \"checkout\",\n \"cli\",\n \"clone\",\n \"directories\",\n \"directory\",\n \"file\",\n \"files\",\n \"folder\",\n \"folders\",\n \"gh\",\n \"git\",\n \"github\",\n \"gitpick\",\n \"path\",\n \"sparse\",\n \"specific\",\n \"url\"\n ],\n \"type\": \"module\",\n \"files\": [\n \"dist\"\n ],\n \"bin\": {\n \"gitpick\": \"./dist/index.js\"\n },\n \"devDependencies\": {\n \"@changesets/changelog-github\": \"^0.5.0\",\n \"@changesets/cli\": \"^2.27.10\",\n \"@commitlint/cli\": \"^19.6.0\",\n \"@commitlint/config-conventional\": \"^19.6.0\",\n \"@ianvs/prettier-plugin-sort-imports\": \"^4.4.0\",\n \"@types/node\": \"^22.10.1\",\n \"lint-staged\": \"^15.2.10\",\n \"prettier\": \"^3.4.2\",\n \"simple-git-hooks\": \"^2.11.1\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.7.2\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.0.0\",\n \"inquirer\": \"^12.3.3\",\n \"ora\": \"^8.2.0\",\n \"simple-git\": \"^3.27.0\",\n \"zod\": \"^3.24.1\",\n \"zod-validation-error\": \"^3.4.0\"\n }\n}\n"],"mappings":"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","names":["fs","os","path","parseTimeString","timeString","regex","totalMilliseconds","match","value","simpleGit","getDefaultBranch","url","_a","_b","remotes","headHash","branch","githubConfigFromUrl","url","branch","target","regex","match","token","prefixes","prefix","split","owner","repository","type","resolvedBranch","getDefaultBranch","path","resolvedTarget","Command","inquirer","ora","simpleGit","z","fromError","schema","z","clone","Command","url","target","options","parseTimeString","config","githubConfigFromUrl","_a","token","configWithoutToken","__objRest","spinner","ora","targetPath","path","fs","message","overwrite","inquirer","cloneAction","watchInterval","err","validationError","fromError","copyDir","src","dest","entries","entry","srcPath","destPath","git","simpleGit","repoUrl","tempDir","os","sourcePath","e","chalk","Command","package_default","main","program","Command","package_default","args","validCommands","clone","chalk"]}
|
|
1
|
+
{"version":3,"sources":["../src/commands/clone.ts","../src/utils/parse-time-string.ts","../src/utils/get-default-branch.ts","../src/utils/transform-url.ts","../src/index.ts","../package.json"],"sourcesContent":["import fs from \"fs\"\nimport os from \"os\"\nimport path from \"path\"\nimport { parseTimeString } from \"@/utils/parse-time-string\"\nimport { githubConfigFromUrl } from \"@/utils/transform-url\"\nimport { Command } from \"commander\"\nimport inquirer from \"inquirer\"\nimport ora, { Ora } from \"ora\"\nimport simpleGit from \"simple-git\"\nimport { z } from \"zod\"\nimport { fromError } from \"zod-validation-error\"\n\nconst schema = z.object({\n url: z.string(),\n target: z.string().optional(),\n branch: z.string().optional(),\n overwrite: z.boolean().optional(),\n watch: z.union([z.string(), z.number(), z.boolean()]).optional(),\n})\n\nexport const clone = new Command()\n .name(\"clone\")\n .argument(\"<url>\", \"GitHub URL with path to file/folder\")\n .argument(\"[target]\", \"Directory to clone into (optional)\")\n .option(\"-b, --branch <branch>\", \"Branch to clone\")\n .option(\"-o, --overwrite\", \"Skip overwrite prompt\")\n .option(\n \"-w, --watch [time]\",\n `Watch the repository and sync every [time]\n(e.g. 1h, 30m, 15s) default: 1m`,\n )\n .action(\n async (\n url: string,\n target: string | undefined,\n options: z.infer<typeof schema>,\n ) => {\n schema.parse({\n url,\n target,\n branch: options.branch,\n overwrite: options.overwrite,\n watch: options.watch,\n })\n\n if (options.watch) {\n if (typeof options.watch === \"boolean\") options.watch = \"1m\"\n\n console.log(\n `š Watching every ${parseTimeString(options.watch) / 1000 + \"s\"}\\n`,\n )\n }\n\n const config = await githubConfigFromUrl(url, {\n branch: options.branch,\n target,\n })\n\n const { token, ...configWithoutToken } = config\n console.log(configWithoutToken, \"\\n\")\n\n const spinner = ora().start()\n\n try {\n spinner.stop()\n\n const targetPath = path.resolve(config.target)\n\n if (options.watch) options.overwrite = true\n\n if (\n fs.existsSync(\n targetPath +\n (config.type === \"blob\"\n ? \"/\" + config.path.split(\"/\").pop()\n : \"\"),\n ) &&\n (await fs.promises.readdir(targetPath)).length &&\n !options.overwrite\n ) {\n const message =\n config.type === \"tree\"\n ? \"The target directory is not empty. Do you want to overwrite the files?\"\n : \"The target file already exists. Do you want to overwrite the file?\"\n\n const { overwrite } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"overwrite\",\n message,\n default: false,\n },\n ])\n\n if (!overwrite) {\n throw new Error(\"Chose not to overwrite files\")\n }\n\n spinner.info(\"You can use -o | --overwrite flag to skip this prompt\")\n }\n\n await cloneAction(spinner, config, options, targetPath)\n\n if (options.watch) {\n const watchInterval = parseTimeString(options.watch)\n setInterval(\n async () => await cloneAction(spinner, config, options, targetPath),\n watchInterval,\n )\n }\n } catch (err) {\n console.log(\"\\n\")\n spinner.fail(\"An error occurred\")\n const validationError = fromError(err)\n console.log(\"\\n\" + validationError.toString() + \"\\n\")\n process.exit(1)\n }\n },\n )\n\nasync function copyDir(src: string, dest: string) {\n const entries = await fs.promises.readdir(src, { withFileTypes: true })\n await fs.promises.mkdir(dest, { recursive: true })\n\n for (let entry of entries) {\n if (entry.name === \".git\") continue\n const srcPath = path.join(src, entry.name)\n const destPath = path.join(dest, entry.name)\n\n if (entry.isDirectory()) {\n await copyDir(srcPath, destPath)\n } else {\n await fs.promises.copyFile(srcPath, destPath)\n }\n }\n}\n\nconst cloneAction = async (\n spinner: Ora,\n config: {\n token: string\n owner: string\n repository: string\n branch: string\n type: string\n path: string\n },\n options: {\n watch?: string | number | boolean\n },\n targetPath: string,\n) => {\n try {\n const git = simpleGit()\n const repoUrl = `https://${config.token ? config.token + \"@\" : config.token}github.com/${config.owner}/${config.repository}.git`\n const tempDir = path.join(os.tmpdir(), `${config.repository}-${Date.now()}`)\n\n if (!options.watch) spinner.start(`Cloning ${config.type} from repository`)\n\n await git.clone(repoUrl, tempDir, [\n \"--depth\",\n \"1\",\n \"--single-branch\",\n \"--branch\",\n config.branch,\n ])\n\n const sourcePath = path.join(tempDir, config.path)\n\n const sourceStat = await fs.promises.stat(sourcePath)\n if (sourceStat.isDirectory()) {\n await fs.promises.mkdir(targetPath, { recursive: true })\n await copyDir(sourcePath, targetPath)\n } else {\n await fs.promises.mkdir(targetPath, {\n recursive: true,\n })\n await fs.promises.copyFile(\n sourcePath,\n targetPath + \"/\" + config.path.split(\"/\").pop(),\n )\n }\n if (!options.watch) {\n spinner.succeed(\n `${config.type.slice(0, 1).toUpperCase() + config.type.slice(1)} cloned from repository`,\n )\n } else spinner.succeed(\"Synced at \" + new Date().toLocaleTimeString())\n\n await fs.promises.rm(tempDir, { recursive: true, force: true })\n } catch {\n throw new Error(\"An error occurred while cloning the repository\")\n }\n}\n","export function parseTimeString(timeString: string | number): number {\n if (typeof timeString === \"number\" || /^\\d+$/.test(timeString)) {\n return typeof timeString === \"number\"\n ? timeString\n : parseInt(timeString, 10)\n }\n\n const regex = /(\\d+)([hms])/g\n let totalMilliseconds = 0\n let match: RegExpExecArray | null\n\n while ((match = regex.exec(timeString)) !== null) {\n const value = parseInt(match[1], 10)\n const unit = match[2] as \"h\" | \"m\" | \"s\"\n\n switch (unit) {\n case \"h\":\n totalMilliseconds += value * 3600000\n break\n case \"m\":\n totalMilliseconds += value * 60000\n break\n case \"s\":\n totalMilliseconds += value * 1000\n break\n }\n }\n\n return totalMilliseconds\n}\n","import simpleGit from \"simple-git\"\n\nexport const getDefaultBranch = async (url: string) => {\n const remotes = await simpleGit().listRemote([url])\n const headHash = remotes.match(/(.+)\\s+HEAD/)?.[1]\n const branch = remotes.match(\n new RegExp(`${headHash}\\\\s+refs/heads/(.+)`),\n )?.[1]\n if (!branch) {\n throw new Error(\"Could not determine default branch!\")\n }\n return branch\n}\n","import { getDefaultBranch } from \"./get-default-branch\"\n\nexport async function githubConfigFromUrl(\n url: string,\n {\n branch,\n target,\n }: {\n branch?: string | null\n target?: string | null\n },\n) {\n const regex = /^https:\\/\\/([^@]+)@github\\.com/\n const match = url.match(regex)\n\n let token = \"\"\n if (match) {\n token = match[1]\n url = url.replace(regex, \"https://github.com\")\n }\n\n const prefixes = [\n \"git@github.com:\",\n \"https://github.com/\",\n \"https://raw.githubusercontent.com/\",\n ]\n\n for (const prefix of prefixes) {\n if (url.startsWith(prefix)) {\n url = url.replace(prefix, \"\")\n break\n }\n }\n\n const split = url.split(\"/\")\n\n const owner = split[0]\n const repository = split[1].endsWith(\".git\")\n ? split[1].slice(0, -4)\n : split[1]\n const type =\n split[2] === \"blob\"\n ? \"blob\"\n : split[2] === \"tree\"\n ? \"tree\"\n : split[2] + split[3] === \"refsheads\"\n ? \"raw\"\n : \"repository\"\n const resolvedBranch = branch\n ? branch\n : type === \"repository\"\n ? await getDefaultBranch(\n `https://${token ? token + \"@\" : token}github.com/${owner}/${repository}`,\n )\n : type === \"raw\"\n ? split[4]\n : split[3]\n const path = type\n ? type === \"raw\"\n ? split.slice(5).join(\"/\")\n : split.slice(4).join(\"/\")\n : split.slice(2).join(\"/\") || \"/\"\n const resolvedTarget = target\n ? target\n : type === \"blob\"\n ? \".\"\n : path.split(\"/\").pop() || repository\n\n return {\n token,\n owner,\n repository,\n type,\n branch: resolvedBranch,\n path,\n target: resolvedTarget,\n }\n}\n","#!/usr/bin/env node\nimport { clone } from \"@/commands/clone\"\nimport chalk from \"chalk\"\nimport { Command } from \"commander\"\nimport packageJson from \"../package.json\"\n\nprocess.on(\"SIGINT\", () => process.exit(0))\nprocess.on(\"SIGTERM\", () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n .name(\"gitpick\")\n .description(\"With gitpick, you can clone precisely what you need.\")\n .version(\n packageJson.version || \"1.0.0\",\n \"-v, --version\",\n \"display the version number\",\n )\n\n const args = process.argv.slice(2)\n const validCommands = [\"-v\", \"--version\", \"-h\", \"--help\", \"help\", \"clone\"]\n if (args.length && !validCommands.includes(args[0])) {\n process.argv.splice(2, 0, \"clone\")\n }\n\n program.addCommand(clone)\n\n program.configureHelp({\n formatHelp: () => {\n return `${chalk.bold(\"With gitpick, you can clone precisely what you need.\")}\n\nš More awesome tools at ${chalk.cyan(\"https://github.com/nrjdalal\")}\n\n-------------------------------------\n ${chalk.cyan(\"gitpick <url>\")} ${chalk.green(\"[target]\")} ${chalk.blue(\"[options]\")}\n-------------------------------------\n\n${chalk.bold(\"Hint:\")} Target is optional, and follows default git clone behavior.\n\n${chalk.bold(\"Arguments:\")}\n ${chalk.cyan(\"url\")} GitHub URL with path to file/folder\n ${chalk.green(\"target\")} Directory to clone into (optional)\n\n${chalk.bold(\"Options:\")}\n ${chalk.blue(\"-b, --branch \")} Branch to clone\n ${chalk.blue(\"-o, --overwrite\")} Skip overwrite prompt\n ${chalk.blue(\"-w, --watch [time]\")} Watch the repository and sync every [time]\n (e.g. 1h, 30m, 15s) default: 1m\n ${chalk.blue(\"-h, --help\")} display help for command\n ${chalk.blue(\"-v, --version\")} display the version number\n\n${chalk.bold(\"Examples:\")}\n $ gitpick <url>\n $ gitpick <url> [target]\n $ gitpick <url> [target] -b [branch]\n $ gitpick <url> [target] -w [time]\n $ gitpick <url> [target] -b [branch] -w [time]\n`\n },\n })\n\n console.log(`\\ngitpick v${packageJson.version}\\n`)\n\n program.parse()\n}\n\nmain()\n","{\n \"name\": \"gitpick\",\n \"version\": \"3.12.0\",\n \"description\": \"With gitpick, you can clone precisely what you need.\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"Neeraj Dalal\",\n \"url\": \"https://nrjdalal.com\",\n \"email\": \"admin@nrjdalal.com\"\n },\n \"scripts\": {\n \"dev\": \"tsup --watch\",\n \"build\": \"tsup\",\n \"test\": \"bun run build && node dist/index.js\",\n \"tests\": \"bash tests.sh\",\n \"prepare\": \"if [ \\\"$NODE_ENV\\\" != \\\"production\\\" ]; then npx simple-git-hooks; fi\",\n \"publish:local\": \"bun run build && npm version minor && changeset publish\",\n \"publish:latest\": \"NODE_ENV=production changeset publish\"\n },\n \"simple-git-hooks\": {\n \"pre-commit\": \"npx lint-staged\",\n \"commit-msg\": \"npx commitlint --edit $1\"\n },\n \"repository\": \"nrjdalal/gitpick\",\n \"homepage\": \"https://github.com/nrjdalal/gitpick#readme\",\n \"bugs\": \"https://github.com/nrjdalal/gitpick/issues\",\n \"keywords\": [\n \"branch\",\n \"checkout\",\n \"cli\",\n \"clone\",\n \"directories\",\n \"directory\",\n \"file\",\n \"files\",\n \"folder\",\n \"folders\",\n \"gh\",\n \"git\",\n \"github\",\n \"gitpick\",\n \"path\",\n \"sparse\",\n \"specific\",\n \"url\"\n ],\n \"type\": \"module\",\n \"files\": [\n \"dist\"\n ],\n \"bin\": {\n \"gitpick\": \"./dist/index.js\"\n },\n \"devDependencies\": {\n \"@changesets/changelog-github\": \"^0.5.0\",\n \"@changesets/cli\": \"^2.27.12\",\n \"@commitlint/cli\": \"^19.7.1\",\n \"@commitlint/config-conventional\": \"^19.7.1\",\n \"@ianvs/prettier-plugin-sort-imports\": \"^4.4.1\",\n \"@types/node\": \"^22.13.1\",\n \"lint-staged\": \"^15.4.3\",\n \"prettier\": \"^3.4.2\",\n \"simple-git-hooks\": \"^2.11.1\",\n \"tsup\": \"^8.3.6\",\n \"typescript\": \"^5.7.3\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^13.1.0\",\n \"inquirer\": \"^12.4.1\",\n \"ora\": \"^8.2.0\",\n \"simple-git\": \"^3.27.0\",\n \"zod\": \"^3.24.1\",\n \"zod-validation-error\": \"^3.4.0\"\n }\n}\n"],"mappings":"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","names":["fs","os","path","parseTimeString","timeString","regex","totalMilliseconds","match","value","simpleGit","getDefaultBranch","url","_a","_b","remotes","headHash","branch","githubConfigFromUrl","url","branch","target","regex","match","token","prefixes","prefix","split","owner","repository","type","resolvedBranch","getDefaultBranch","path","resolvedTarget","Command","inquirer","ora","simpleGit","z","fromError","schema","z","clone","Command","url","target","options","parseTimeString","config","githubConfigFromUrl","_a","token","configWithoutToken","__objRest","spinner","ora","targetPath","path","fs","message","overwrite","inquirer","cloneAction","watchInterval","err","validationError","fromError","copyDir","src","dest","entries","entry","srcPath","destPath","git","simpleGit","repoUrl","tempDir","os","sourcePath","e","chalk","Command","package_default","main","program","Command","package_default","args","validCommands","clone","chalk"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitpick",
|
|
3
|
-
"version": "3.12.
|
|
3
|
+
"version": "3.12.1",
|
|
4
4
|
"description": "With gitpick, you can clone precisely what you need.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -53,21 +53,21 @@
|
|
|
53
53
|
},
|
|
54
54
|
"devDependencies": {
|
|
55
55
|
"@changesets/changelog-github": "^0.5.0",
|
|
56
|
-
"@changesets/cli": "^2.27.
|
|
57
|
-
"@commitlint/cli": "^19.
|
|
58
|
-
"@commitlint/config-conventional": "^19.
|
|
59
|
-
"@ianvs/prettier-plugin-sort-imports": "^4.4.
|
|
60
|
-
"@types/node": "^22.
|
|
61
|
-
"lint-staged": "^15.
|
|
56
|
+
"@changesets/cli": "^2.27.12",
|
|
57
|
+
"@commitlint/cli": "^19.7.1",
|
|
58
|
+
"@commitlint/config-conventional": "^19.7.1",
|
|
59
|
+
"@ianvs/prettier-plugin-sort-imports": "^4.4.1",
|
|
60
|
+
"@types/node": "^22.13.1",
|
|
61
|
+
"lint-staged": "^15.4.3",
|
|
62
62
|
"prettier": "^3.4.2",
|
|
63
63
|
"simple-git-hooks": "^2.11.1",
|
|
64
|
-
"tsup": "^8.3.
|
|
65
|
-
"typescript": "^5.7.
|
|
64
|
+
"tsup": "^8.3.6",
|
|
65
|
+
"typescript": "^5.7.3"
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"chalk": "^5.4.1",
|
|
69
|
-
"commander": "^13.
|
|
70
|
-
"inquirer": "^12.
|
|
69
|
+
"commander": "^13.1.0",
|
|
70
|
+
"inquirer": "^12.4.1",
|
|
71
71
|
"ora": "^8.2.0",
|
|
72
72
|
"simple-git": "^3.27.0",
|
|
73
73
|
"zod": "^3.24.1",
|