├── .gitignore ├── README.md ├── assets ├── image1.png └── image2.png ├── index.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spring CLI Init 2 | 3 | Welcome to **Spring CLI Init**, a command-line tool that helps you quickly generate Spring Boot projects with your desired configurations. 4 | 5 | ## Features 6 | 7 | - Generate a Spring Boot project with customizable options 8 | - Select Java version, Spring Boot version, and dependencies 9 | - Supports JAR packaging format 10 | - Simple command-line interface 11 | 12 | ## Installation 13 | 14 | ```bash 15 | npx spring-cli-init 16 | ``` 17 | 18 | ### Successful installation 19 | ![image1](https://github.com/user-attachments/assets/fd5e42fb-6bfe-4fba-9a97-128c3448f7a1) 20 | ![image2](https://github.com/user-attachments/assets/0524eea7-185a-4ed4-981d-6264d71bb6cb) 21 | 22 | 23 | Alternatively, you can install `spring-cli-init` globally using npm: 24 | 25 | ```bash 26 | npm install -g spring-init-cli 27 | ``` 28 | -------------------------------------------------------------------------------- /assets/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aimable01/spring-init-cli/0e4830c1f66a3368ba3094622997ca0d18fdfc96/assets/image1.png -------------------------------------------------------------------------------- /assets/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Aimable01/spring-init-cli/0e4830c1f66a3368ba3094622997ca0d18fdfc96/assets/image2.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import * as p from "@clack/prompts"; 3 | import chalk from "chalk"; 4 | import axios from "axios"; 5 | import gradient from "gradient-string"; 6 | import fs from "fs"; 7 | import path from "path"; 8 | import { Command } from "commander"; 9 | import extract from "extract-zip"; 10 | import os from "os"; 11 | import figlet from "figlet"; 12 | 13 | const program = new Command(); 14 | 15 | program 16 | .name("create-spring-app") 17 | .description( 18 | "CLI tool to generate Spring Boot projects using Spring Initializr" 19 | ) 20 | .version("1.0.0") 21 | .argument("[dir]", "Name of the directory to create", "spring-app") 22 | .parse(process.argv); 23 | 24 | // Function to print welcome banner 25 | const printBanner = () => { 26 | const bannerText = figlet.textSync("CREATE SPRING APP", { 27 | font: "Standard", 28 | horizontalLayout: "default", 29 | verticalLayout: "default", 30 | }); 31 | console.log(gradient.pastel.multiline(bannerText)); 32 | }; 33 | 34 | // the main function to generate the project 35 | const createSpringProject = async (dir) => { 36 | printBanner(); 37 | 38 | console.log(chalk.bold.cyan(`Welcome to Spring Boot Project Generator!`)); 39 | console.log(chalk.green(`Let's set up your project!\n`)); 40 | 41 | const javaVersions = [ 42 | { value: "8", label: "Java 8" }, 43 | { value: "11", label: "Java 11" }, 44 | { value: "17", label: "Java 17" }, 45 | { value: "21", label: "Java 21" }, 46 | ]; 47 | 48 | const bootVersions = [ 49 | { value: "2.7.13", label: "Spring Boot 2.7.13" }, 50 | { value: "3.3.4", label: "Spring Boot 3.3.4" }, 51 | ]; 52 | 53 | const packagingOptions = [ 54 | { value: "jar", label: "JAR" }, 55 | { value: "war", label: "WAR" }, 56 | ]; 57 | 58 | const dependenciesList = [ 59 | { value: "web", label: "Spring Web" }, 60 | { value: "data-jpa", label: "Spring Data JPA" }, 61 | { value: "security", label: "Spring Security" }, 62 | { value: "thymeleaf", label: "Thymeleaf" }, 63 | ]; 64 | 65 | // Prompt user for inputs 66 | const projectName = await p.text({ 67 | message: "What will your project be called?", 68 | initialValue: dir, 69 | }); 70 | const groupId = await p.text({ 71 | message: "Group ID:", 72 | initialValue: "com.example", 73 | }); 74 | const artifactId = await p.text({ 75 | message: "Artifact ID:", 76 | initialValue: projectName, 77 | }); 78 | const javaVersion = await p.select({ 79 | message: "Select Java version:", 80 | options: javaVersions, 81 | }); 82 | const bootVersion = await p.select({ 83 | message: "Select Spring Boot version:", 84 | options: bootVersions, 85 | }); 86 | const packaging = await p.select({ 87 | message: "Select packaging format:", 88 | options: packagingOptions, 89 | }); 90 | const dependencies = await p.multiselect({ 91 | message: "Select dependencies:", 92 | options: dependenciesList, 93 | }); 94 | 95 | const baseUrl = "https://start.spring.io/starter.zip"; 96 | const params = new URLSearchParams({ 97 | type: "maven-project", 98 | language: "java", 99 | bootVersion: bootVersion, 100 | baseDir: projectName, 101 | groupId: groupId, 102 | artifactId: artifactId, 103 | javaVersion: javaVersion, 104 | packaging: packaging, 105 | dependencies: dependencies.join(","), 106 | }).toString(); 107 | 108 | const downloadUrl = `${baseUrl}?${params}`; 109 | 110 | // download project 111 | console.log(chalk.blue(`\nDownloading project...`)); 112 | const response = await axios({ 113 | method: "GET", 114 | url: downloadUrl, 115 | responseType: "stream", 116 | }); 117 | 118 | // save zip folder 119 | const zipPath = path.join(os.tmpdir(), `${projectName}.zip`); 120 | const writer = fs.createWriteStream(zipPath); 121 | response.data.pipe(writer); 122 | 123 | await new Promise((resolve, reject) => { 124 | writer.on("finish", resolve); 125 | writer.on("error", reject); 126 | }); 127 | 128 | // extract zip folder 129 | const extractDir = dir ? path.resolve(dir) : process.cwd(); 130 | console.log(chalk.blue(`Extracting project to ${extractDir}...`)); 131 | 132 | try { 133 | await extract(zipPath, { dir: extractDir }); 134 | console.log( 135 | chalk.green( 136 | `\nProject "${projectName}" created successfully in ${extractDir}` 137 | ) 138 | ); 139 | } catch (error) { 140 | console.error(chalk.red("Error extracting project:"), error); 141 | } 142 | 143 | // final message 144 | console.log( 145 | chalk.bold.green( 146 | `\nProject "${projectName}" created successfully in ${extractDir}\n` 147 | ) 148 | ); 149 | console.log( 150 | chalk.bold.blue( 151 | `To get started, navigate to your project directory and run:\n` 152 | ) 153 | ); 154 | console.log(chalk.bold.cyan(` cd ${projectName}`)); 155 | console.log(chalk.bold.cyan(` ./mvnw spring-boot:run\n`)); 156 | }; 157 | 158 | // if there is an error 159 | const dir = program.args[0]; 160 | createSpringProject(dir).catch((error) => { 161 | console.error(chalk.red("Error creating Spring project:", error.message)); 162 | }); 163 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spring-init-cli", 3 | "version": "1.0.2", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "spring-init-cli", 9 | "version": "1.0.2", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@clack/prompts": "^0.7.0", 13 | "adm-zip": "^0.5.16", 14 | "asynckit": "^0.4.0", 15 | "axios": "^1.7.7", 16 | "buffer-crc32": "^0.2.13", 17 | "chalk": "^5.3.0", 18 | "combined-stream": "^1.0.8", 19 | "commander": "^12.1.0", 20 | "debug": "^4.3.7", 21 | "delayed-stream": "^1.0.0", 22 | "end-of-stream": "^1.4.4", 23 | "extract-zip": "^2.0.1", 24 | "fd-slicer": "^1.1.0", 25 | "figlet": "^1.7.0", 26 | "follow-redirects": "^1.15.9", 27 | "form-data": "^4.0.0", 28 | "get-stream": "^5.2.0", 29 | "gradient-string": "^3.0.0", 30 | "mime-db": "^1.52.0", 31 | "mime-types": "^2.1.35", 32 | "ms": "^2.1.3", 33 | "once": "^1.4.0", 34 | "pend": "^1.2.0", 35 | "picocolors": "^1.1.0", 36 | "proxy-from-env": "^1.1.0", 37 | "pump": "^3.0.2", 38 | "sisteransi": "^1.0.5", 39 | "tinycolor2": "^1.6.0", 40 | "tinygradient": "^1.1.5", 41 | "undici-types": "^6.19.8", 42 | "wrappy": "^1.0.2", 43 | "yauzl": "^2.10.0" 44 | }, 45 | "devDependencies": {} 46 | }, 47 | "node_modules/@clack/core": { 48 | "version": "0.3.4", 49 | "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", 50 | "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", 51 | "dependencies": { 52 | "picocolors": "^1.0.0", 53 | "sisteransi": "^1.0.5" 54 | } 55 | }, 56 | "node_modules/@clack/prompts": { 57 | "version": "0.7.0", 58 | "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.7.0.tgz", 59 | "integrity": "sha512-0MhX9/B4iL6Re04jPrttDm+BsP8y6mS7byuv0BvXgdXhbV5PdlsHt55dvNsuBCPZ7xq1oTAOOuotR9NFbQyMSA==", 60 | "bundleDependencies": [ 61 | "is-unicode-supported" 62 | ], 63 | "dependencies": { 64 | "@clack/core": "^0.3.3", 65 | "is-unicode-supported": "*", 66 | "picocolors": "^1.0.0", 67 | "sisteransi": "^1.0.5" 68 | } 69 | }, 70 | "node_modules/@clack/prompts/node_modules/is-unicode-supported": { 71 | "version": "1.3.0", 72 | "inBundle": true, 73 | "license": "MIT", 74 | "engines": { 75 | "node": ">=12" 76 | }, 77 | "funding": { 78 | "url": "https://github.com/sponsors/sindresorhus" 79 | } 80 | }, 81 | "node_modules/@types/node": { 82 | "version": "22.7.4", 83 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", 84 | "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", 85 | "optional": true, 86 | "dependencies": { 87 | "undici-types": "~6.19.2" 88 | } 89 | }, 90 | "node_modules/@types/tinycolor2": { 91 | "version": "1.4.6", 92 | "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.6.tgz", 93 | "integrity": "sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==" 94 | }, 95 | "node_modules/@types/yauzl": { 96 | "version": "2.10.3", 97 | "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", 98 | "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", 99 | "optional": true, 100 | "dependencies": { 101 | "@types/node": "*" 102 | } 103 | }, 104 | "node_modules/adm-zip": { 105 | "version": "0.5.16", 106 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", 107 | "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", 108 | "engines": { 109 | "node": ">=12.0" 110 | } 111 | }, 112 | "node_modules/asynckit": { 113 | "version": "0.4.0", 114 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 115 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 116 | }, 117 | "node_modules/axios": { 118 | "version": "1.7.7", 119 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", 120 | "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", 121 | "dependencies": { 122 | "follow-redirects": "^1.15.6", 123 | "form-data": "^4.0.0", 124 | "proxy-from-env": "^1.1.0" 125 | } 126 | }, 127 | "node_modules/buffer-crc32": { 128 | "version": "0.2.13", 129 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 130 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 131 | "engines": { 132 | "node": "*" 133 | } 134 | }, 135 | "node_modules/chalk": { 136 | "version": "5.3.0", 137 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 138 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 139 | "engines": { 140 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 141 | }, 142 | "funding": { 143 | "url": "https://github.com/chalk/chalk?sponsor=1" 144 | } 145 | }, 146 | "node_modules/combined-stream": { 147 | "version": "1.0.8", 148 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 149 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 150 | "dependencies": { 151 | "delayed-stream": "~1.0.0" 152 | }, 153 | "engines": { 154 | "node": ">= 0.8" 155 | } 156 | }, 157 | "node_modules/commander": { 158 | "version": "12.1.0", 159 | "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", 160 | "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", 161 | "engines": { 162 | "node": ">=18" 163 | } 164 | }, 165 | "node_modules/debug": { 166 | "version": "4.3.7", 167 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", 168 | "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", 169 | "dependencies": { 170 | "ms": "^2.1.3" 171 | }, 172 | "engines": { 173 | "node": ">=6.0" 174 | }, 175 | "peerDependenciesMeta": { 176 | "supports-color": { 177 | "optional": true 178 | } 179 | } 180 | }, 181 | "node_modules/delayed-stream": { 182 | "version": "1.0.0", 183 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 184 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 185 | "engines": { 186 | "node": ">=0.4.0" 187 | } 188 | }, 189 | "node_modules/end-of-stream": { 190 | "version": "1.4.4", 191 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 192 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 193 | "dependencies": { 194 | "once": "^1.4.0" 195 | } 196 | }, 197 | "node_modules/extract-zip": { 198 | "version": "2.0.1", 199 | "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", 200 | "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", 201 | "dependencies": { 202 | "debug": "^4.1.1", 203 | "get-stream": "^5.1.0", 204 | "yauzl": "^2.10.0" 205 | }, 206 | "bin": { 207 | "extract-zip": "cli.js" 208 | }, 209 | "engines": { 210 | "node": ">= 10.17.0" 211 | }, 212 | "optionalDependencies": { 213 | "@types/yauzl": "^2.9.1" 214 | } 215 | }, 216 | "node_modules/fd-slicer": { 217 | "version": "1.1.0", 218 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 219 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 220 | "dependencies": { 221 | "pend": "~1.2.0" 222 | } 223 | }, 224 | "node_modules/figlet": { 225 | "version": "1.7.0", 226 | "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.7.0.tgz", 227 | "integrity": "sha512-gO8l3wvqo0V7wEFLXPbkX83b7MVjRrk1oRLfYlZXol8nEpb/ON9pcKLI4qpBv5YtOTfrINtqb7b40iYY2FTWFg==", 228 | "bin": { 229 | "figlet": "bin/index.js" 230 | }, 231 | "engines": { 232 | "node": ">= 0.4.0" 233 | } 234 | }, 235 | "node_modules/follow-redirects": { 236 | "version": "1.15.9", 237 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", 238 | "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", 239 | "funding": [ 240 | { 241 | "type": "individual", 242 | "url": "https://github.com/sponsors/RubenVerborgh" 243 | } 244 | ], 245 | "engines": { 246 | "node": ">=4.0" 247 | }, 248 | "peerDependenciesMeta": { 249 | "debug": { 250 | "optional": true 251 | } 252 | } 253 | }, 254 | "node_modules/form-data": { 255 | "version": "4.0.0", 256 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 257 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 258 | "dependencies": { 259 | "asynckit": "^0.4.0", 260 | "combined-stream": "^1.0.8", 261 | "mime-types": "^2.1.12" 262 | }, 263 | "engines": { 264 | "node": ">= 6" 265 | } 266 | }, 267 | "node_modules/get-stream": { 268 | "version": "5.2.0", 269 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", 270 | "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", 271 | "dependencies": { 272 | "pump": "^3.0.0" 273 | }, 274 | "engines": { 275 | "node": ">=8" 276 | }, 277 | "funding": { 278 | "url": "https://github.com/sponsors/sindresorhus" 279 | } 280 | }, 281 | "node_modules/gradient-string": { 282 | "version": "3.0.0", 283 | "resolved": "https://registry.npmjs.org/gradient-string/-/gradient-string-3.0.0.tgz", 284 | "integrity": "sha512-frdKI4Qi8Ihp4C6wZNB565de/THpIaw3DjP5ku87M+N9rNSGmPTjfkq61SdRXB7eCaL8O1hkKDvf6CDMtOzIAg==", 285 | "dependencies": { 286 | "chalk": "^5.3.0", 287 | "tinygradient": "^1.1.5" 288 | }, 289 | "engines": { 290 | "node": ">=14" 291 | } 292 | }, 293 | "node_modules/mime-db": { 294 | "version": "1.52.0", 295 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 296 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 297 | "engines": { 298 | "node": ">= 0.6" 299 | } 300 | }, 301 | "node_modules/mime-types": { 302 | "version": "2.1.35", 303 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 304 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 305 | "dependencies": { 306 | "mime-db": "1.52.0" 307 | }, 308 | "engines": { 309 | "node": ">= 0.6" 310 | } 311 | }, 312 | "node_modules/ms": { 313 | "version": "2.1.3", 314 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 315 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 316 | }, 317 | "node_modules/once": { 318 | "version": "1.4.0", 319 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 320 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 321 | "dependencies": { 322 | "wrappy": "1" 323 | } 324 | }, 325 | "node_modules/pend": { 326 | "version": "1.2.0", 327 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 328 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" 329 | }, 330 | "node_modules/picocolors": { 331 | "version": "1.1.0", 332 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", 333 | "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" 334 | }, 335 | "node_modules/proxy-from-env": { 336 | "version": "1.1.0", 337 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 338 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 339 | }, 340 | "node_modules/pump": { 341 | "version": "3.0.2", 342 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", 343 | "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", 344 | "dependencies": { 345 | "end-of-stream": "^1.1.0", 346 | "once": "^1.3.1" 347 | } 348 | }, 349 | "node_modules/sisteransi": { 350 | "version": "1.0.5", 351 | "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", 352 | "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" 353 | }, 354 | "node_modules/tinycolor2": { 355 | "version": "1.6.0", 356 | "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", 357 | "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" 358 | }, 359 | "node_modules/tinygradient": { 360 | "version": "1.1.5", 361 | "resolved": "https://registry.npmjs.org/tinygradient/-/tinygradient-1.1.5.tgz", 362 | "integrity": "sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==", 363 | "dependencies": { 364 | "@types/tinycolor2": "^1.4.0", 365 | "tinycolor2": "^1.0.0" 366 | } 367 | }, 368 | "node_modules/undici-types": { 369 | "version": "6.19.8", 370 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 371 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" 372 | }, 373 | "node_modules/wrappy": { 374 | "version": "1.0.2", 375 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 376 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 377 | }, 378 | "node_modules/yauzl": { 379 | "version": "2.10.0", 380 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 381 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 382 | "dependencies": { 383 | "buffer-crc32": "~0.2.3", 384 | "fd-slicer": "~1.1.0" 385 | } 386 | } 387 | } 388 | } 389 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spring-cli-init", 3 | "version": "1.0.2", 4 | "description": "An alternative to the spring initilizr, but via cli.", 5 | "main": "index.js", 6 | "dependencies": { 7 | "@clack/prompts": "^0.7.0", 8 | "adm-zip": "^0.5.16", 9 | "asynckit": "^0.4.0", 10 | "axios": "^1.7.7", 11 | "buffer-crc32": "^0.2.13", 12 | "chalk": "^5.3.0", 13 | "combined-stream": "^1.0.8", 14 | "commander": "^12.1.0", 15 | "debug": "^4.3.7", 16 | "delayed-stream": "^1.0.0", 17 | "end-of-stream": "^1.4.4", 18 | "extract-zip": "^2.0.1", 19 | "fd-slicer": "^1.1.0", 20 | "figlet": "^1.7.0", 21 | "follow-redirects": "^1.15.9", 22 | "form-data": "^4.0.0", 23 | "get-stream": "^5.2.0", 24 | "gradient-string": "^3.0.0", 25 | "mime-db": "^1.52.0", 26 | "mime-types": "^2.1.35", 27 | "ms": "^2.1.3", 28 | "once": "^1.4.0", 29 | "pend": "^1.2.0", 30 | "picocolors": "^1.1.0", 31 | "proxy-from-env": "^1.1.0", 32 | "pump": "^3.0.2", 33 | "sisteransi": "^1.0.5", 34 | "tinycolor2": "^1.6.0", 35 | "tinygradient": "^1.1.5", 36 | "undici-types": "^6.19.8", 37 | "wrappy": "^1.0.2", 38 | "yauzl": "^2.10.0" 39 | }, 40 | "scripts": { 41 | "test": "echo \"Error: no test specified\" && exit 1" 42 | }, 43 | "type": "module", 44 | "repository": { 45 | "type": "git", 46 | "url": "https://github.com/Aimable01/spring-init-cli.git" 47 | }, 48 | "bin": { 49 | "spring-init-cli": "index.js" 50 | }, 51 | "keywords": [ 52 | "spring", 53 | "cli", 54 | "init" 55 | ], 56 | "author": "KWIZERA Aimable", 57 | "license": "ISC" 58 | } 59 | --------------------------------------------------------------------------------