@anth0nycodes/license-generator 0.1.3 → 0.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.
@@ -33,7 +33,6 @@ Fixes #
33
33
 
34
34
  - [ ] Tested locally with `pnpm dev`
35
35
  - [ ] Tested built version with `pnpm build && pnpm start`
36
- - [ ] Tested as installed package with `pnpm link`
37
36
  - [ ] Tested with different license types
38
37
  - [ ] Tested edge cases (existing LICENSE file, etc.)
39
38
 
package/CONTRIBUTING.md CHANGED
@@ -17,17 +17,20 @@ Please be respectful and considerate in your interactions with other contributor
17
17
 
18
18
  1. Fork the repository on GitHub
19
19
  2. Clone your fork locally:
20
+
20
21
  ```bash
21
22
  git clone https://github.com/YOUR_USERNAME/license-generator.git
22
23
  cd license-generator
23
24
  ```
24
25
 
25
26
  3. Install dependencies:
27
+
26
28
  ```bash
27
29
  pnpm install
28
30
  ```
29
31
 
30
32
  4. Create a new branch for your feature or bug fix:
33
+
31
34
  ```bash
32
35
  git checkout -b feature/your-feature-name
33
36
  ```
@@ -45,10 +48,6 @@ pnpm build
45
48
 
46
49
  # Run the built version
47
50
  pnpm start
48
-
49
- # Test as an installed package
50
- pnpm link
51
- generate-license
52
51
  ```
53
52
 
54
53
  ### Making Changes
@@ -66,11 +65,13 @@ generate-license
66
65
  ### Pull Request Process
67
66
 
68
67
  1. Commit your changes with clear, descriptive commit messages:
68
+
69
69
  ```bash
70
70
  git commit -m "Add feature: description of your changes"
71
71
  ```
72
72
 
73
73
  2. Push to your fork:
74
+
74
75
  ```bash
75
76
  git push origin feature/your-feature-name
76
77
  ```
package/README.md CHANGED
@@ -4,7 +4,7 @@ An interactive CLI tool to quickly generate open-source licenses for your projec
4
4
 
5
5
  ## Demo
6
6
 
7
- https://github.com/user-attachments/assets/25d4a68b-4cb3-4570-ac57-88d955bbcb53
7
+ <https://github.com/user-attachments/assets/25d4a68b-4cb3-4570-ac57-88d955bbcb53>
8
8
 
9
9
  ## Features
10
10
 
@@ -27,6 +27,8 @@ npm install -g @anth0nycodes/license-generator
27
27
 
28
28
  ## Usage
29
29
 
30
+ ### Interactive Mode (Default)
31
+
30
32
  ```bash
31
33
  generate-license
32
34
  ```
@@ -38,6 +40,41 @@ The CLI will guide you through:
38
40
  3. **Enter copyright year** - Defaults to the current year
39
41
  4. **Confirm** - The LICENSE file will be created in your current directory
40
42
 
43
+ ### Options
44
+
45
+ #### Quick Mode
46
+
47
+ Generate a license instantly using your saved default license, current year, and GitHub username:
48
+
49
+ ```bash
50
+ generate-license --quick
51
+ # or
52
+ generate-license -q
53
+ ```
54
+
55
+ #### Set Default License
56
+
57
+ Set a default license for quick mode:
58
+
59
+ ```bash
60
+ generate-license --set <license-key>
61
+ # or
62
+ generate-license -s <license-key>
63
+
64
+ # Example:
65
+ generate-license --set mit
66
+ ```
67
+
68
+ #### List Available Licenses
69
+
70
+ View all available license keys that can be used with the `--set` option:
71
+
72
+ ```bash
73
+ generate-license --list
74
+ # or
75
+ generate-license --ls
76
+ ```
77
+
41
78
  ## Supported Licenses
42
79
 
43
80
  This tool uses the GitHub Licenses API, which includes:
@@ -59,6 +96,7 @@ This tool uses the GitHub Licenses API, which includes:
59
96
  ## Requirements
60
97
 
61
98
  - Node.js 20.x or higher
99
+ - Git
62
100
 
63
101
  ## Development
64
102
 
@@ -86,12 +124,6 @@ Contributions are welcome! Please feel free to submit a Pull Request.
86
124
 
87
125
  For detailed guidelines on how to contribute, please see our [Contributing Guide](CONTRIBUTING.md).
88
126
 
89
- ## Author
90
-
91
- **Anthony Hoang**
92
-
93
- - GitHub: [@anth0nycodes](https://github.com/anth0nycodes)
94
-
95
127
  ## Links
96
128
 
97
129
  - [npm package](https://www.npmjs.com/package/@anth0nycodes/license-generator)
@@ -0,0 +1,2 @@
1
+ export declare const BASE_URL = "https://api.github.com/licenses";
2
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,oCAAoC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const BASE_URL = "https://api.github.com/licenses";
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,iCAAiC,CAAC"}
package/dist/helpers.d.ts CHANGED
@@ -1,3 +1,8 @@
1
1
  export declare function getGitUsername(): string;
2
2
  export declare function fileExists(path: string): Promise<boolean>;
3
+ export interface Config {
4
+ defaultLicense?: string;
5
+ }
6
+ export declare function getConfig(): Promise<Config>;
7
+ export declare function setConfig(config: Config): Promise<void>;
3
8
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAIA,wBAAgB,cAAc,WAG7B;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAOA,wBAAgB,cAAc,WAG7B;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,oBAO5C;AAKD,MAAM,WAAW,MAAM;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAQjD;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,iBAc7C"}
package/dist/helpers.js CHANGED
@@ -1,6 +1,9 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { constants } from "node:fs";
3
3
  import { access } from "node:fs/promises";
4
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
4
7
  export function getGitUsername() {
5
8
  const uncleanName = String(execSync("git config user.name"));
6
9
  return uncleanName.replace(/\r?\n/g, "");
@@ -14,4 +17,28 @@ export async function fileExists(path) {
14
17
  return false;
15
18
  }
16
19
  }
20
+ const CONFIG_DIR = join(homedir(), ".license-generator");
21
+ const CONFIG_FILE = join(CONFIG_DIR, "config.json");
22
+ export async function getConfig() {
23
+ try {
24
+ const content = await readFile(CONFIG_FILE, "utf8");
25
+ return JSON.parse(content);
26
+ }
27
+ catch {
28
+ // config doesn't exist yet, return empty config
29
+ return {};
30
+ }
31
+ }
32
+ export async function setConfig(config) {
33
+ try {
34
+ await mkdir(CONFIG_DIR, { recursive: true });
35
+ const existingConfig = await getConfig();
36
+ const updatedConfig = { ...existingConfig, ...config };
37
+ await writeFile(CONFIG_FILE, JSON.stringify(updatedConfig, null, 2), "utf8");
38
+ }
39
+ catch (error) {
40
+ console.error(`Error occurred in setConfig: ${error}`);
41
+ throw error;
42
+ }
43
+ }
17
44
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,cAAc;IAC5B,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAC7D,OAAO,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACzD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAMpD,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAAc;IAC5C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,MAAM,cAAc,GAAG,MAAM,SAAS,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;QACvD,MAAM,SAAS,CACb,WAAW,EACX,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,EACtC,MAAM,CACP,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QACvD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -5,19 +5,68 @@ import inquirer from "inquirer";
5
5
  import { createLicense, getLicenseContent, getLicenses } from "./license.js";
6
6
  import color from "picocolors";
7
7
  import { getGitUsername } from "./helpers.js";
8
+ import { getConfig, setConfig } from "./helpers.js";
9
+ import { BASE_URL } from "./constants.js";
8
10
  const main = async () => {
11
+ const licenses = await getLicenses();
9
12
  program
10
13
  .name("License Generator")
11
14
  .description("A CLI application that generates open-source licenses for your repositories.")
12
- .option("-l, --license <TYPE>", "the type of license")
13
- .option("-a, --author <NAME>", "author's name")
14
- .option("-y, --year <NAME>", "current year")
15
- .version("0.2.0");
16
- // TODO: Add options, so you can manually add a license flag like --license mit
15
+ .version("0.1.3");
16
+ program
17
+ .option("--ls, --list", "list all available license keys")
18
+ .option("-q, --quick", "alternative to interactive mode, generate a license using the saved license")
19
+ .option("-s, --set <license>", "set a default license for -q / --quick option");
17
20
  program.parse();
21
+ const opts = program.opts();
22
+ // Lists all available license keys
23
+ if (opts.list) {
24
+ const availableLicenseKeys = licenses
25
+ .map((license) => `${color.yellow(license.name)}: ${license.key}`)
26
+ .join("\n");
27
+ console.log(`Available license keys:\n${availableLicenseKeys}`);
28
+ process.exit(0);
29
+ }
30
+ // Skips interactive mode and generates a license with the saved default license
31
+ if (opts.quick) {
32
+ let name;
33
+ let year = String(new Date().getFullYear());
34
+ try {
35
+ name = getGitUsername();
36
+ }
37
+ catch (error) {
38
+ console.error("Error: Git username not configured.");
39
+ console.error("Please run: git config --global user.name 'Your Name'");
40
+ process.exit(1);
41
+ }
42
+ const config = await getConfig();
43
+ let licenseKey = config.defaultLicense || "mit";
44
+ const licenseOptionContent = await getLicenseContent(`${BASE_URL}/${licenseKey}`);
45
+ try {
46
+ await createLicense(licenseOptionContent, year, name);
47
+ }
48
+ catch (error) {
49
+ console.error(`Error occurred in createLicense: ${error}`);
50
+ throw error;
51
+ }
52
+ return;
53
+ }
54
+ // Sets a default license
55
+ if (opts.set) {
56
+ const licenseKey = opts.set.toLowerCase();
57
+ const isValid = licenses.some((l) => l.key === licenseKey);
58
+ if (!isValid) {
59
+ console.error(`Error: "${licenseKey}" is not a valid license.`);
60
+ console.error("Available licenses:", licenses.map((l) => l.key).join(", "));
61
+ process.exit(1);
62
+ }
63
+ await setConfig({ defaultLicense: licenseKey });
64
+ console.log(`Default license set to: ${color.blueBright(licenseKey)}`);
65
+ console.log(`Use --quick to generate with this license.`);
66
+ return;
67
+ }
68
+ // Interactive mode
18
69
  intro(color.blueBright("License Generator"));
19
- const BASE_URL = "https://api.github.com/licenses";
20
- const licenses = await getLicenses();
21
70
  // List all available licenses from github api
22
71
  const licenseOption = await select({
23
72
  message: "Select a license:",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,MAAM,QAAQ,GAAG,MAAM,WAAW,EAAE,CAAC;IAErC,OAAO;SACJ,IAAI,CAAC,mBAAmB,CAAC;SACzB,WAAW,CACV,8EAA8E,CAC/E;SACA,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,MAAM,CAAC,cAAc,EAAE,iCAAiC,CAAC;SACzD,MAAM,CACL,aAAa,EACb,6EAA6E,CAC9E;SACA,MAAM,CACL,qBAAqB,EACrB,+CAA+C,CAChD,CAAC;IAEJ,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE5B,mCAAmC;IACnC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,oBAAoB,GAAG,QAAQ;aAClC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;aACjE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,4BAA4B,oBAAoB,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,gFAAgF;IAChF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,IAAY,CAAC;QACjB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAE5C,IAAI,CAAC;YACH,IAAI,GAAG,cAAc,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,uDAAuD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,IAAI,UAAU,GAAG,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC;QAEhD,MAAM,oBAAoB,GAAG,MAAM,iBAAiB,CAClD,GAAG,QAAQ,IAAI,UAAU,EAAE,CAC5B,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;YAC3D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;QAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,WAAW,UAAU,2BAA2B,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CACX,qBAAqB,EACrB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACtC,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,SAAS,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC;QAC1D,OAAO;IACT,CAAC;IAED,mBAAmB;IACnB,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAE7C,8CAA8C;IAC9C,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;QACjC,OAAO,EAAE,mBAAmB;QAC5B,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,GAAG;YAClB,KAAK,EAAE,OAAO,CAAC,IAAI;SACpB,CAAC,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,oCAAoC;IACpC,IAAI,OAAuC,CAAC;IAE5C,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC;YAC9B;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,cAAc,EAAE;gBACzB,QAAQ,CAAC,KAAK;oBACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,kBAAkB,CAAC;oBAClD,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;YACD;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACzC,QAAQ,CAAC,KAAK;oBACZ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;wBAAE,OAAO,kBAAkB,CAAC;oBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;wBAAE,OAAO,4BAA4B,CAAC;oBAChE,OAAO,IAAI,CAAC;gBACd,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,2CAA2C;IAC3C,MAAM,oBAAoB,GAAG,MAAM,iBAAiB,CAClD,GAAG,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE,CACvC,CAAC;IAEF,qBAAqB;IACrB,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,CAAC;IACH,IAAI,EAAE,CAAC;AACT,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAU3D;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,CAAC,CAgB9B;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,iBA2Bb"}
1
+ {"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAOA,UAAU,YAAY;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAsB,WAAW,4BAQhC;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,CAAC,CAgB9B;AAED,wBAAsB,aAAa,CACjC,OAAO,EAAE,mBAAmB,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,iBA2Bb"}
package/dist/license.js CHANGED
@@ -3,9 +3,10 @@ import color from "picocolors";
3
3
  import { writeFile } from "node:fs/promises";
4
4
  import { fileExists } from "./helpers.js";
5
5
  import { cancel, confirm, spinner } from "@clack/prompts";
6
+ import { BASE_URL } from "./constants.js";
6
7
  export async function getLicenses() {
7
8
  try {
8
- const { data } = await axios.get("https://api.github.com/licenses");
9
+ const { data } = await axios.get(BASE_URL);
9
10
  return data;
10
11
  }
11
12
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAoB1D,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAA6B,MAAM,KAAK,CAAC,GAAG,CACxD,iCAAiC,CAClC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAkC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA4B,EAC5B,IAAY,EACZ,IAAY;IAEZ,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,IAAI,GAAG,WAAW;SACnB,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC;SAC9B,UAAU,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC7C,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAExC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC;YACnC,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAoB1C,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAA6B,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAC;QAChD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAkC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrE,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA4B,EAC5B,IAAY,EACZ,IAAY;IAEZ,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAE/B,IAAI,IAAI,GAAG,WAAW;SACnB,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,YAAY,EAAE,IAAI,CAAC;SAC9B,UAAU,CAAC,2BAA2B,EAAE,IAAI,CAAC;SAC7C,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC;SAC1B,UAAU,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;IAExC,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC;YACnC,OAAO,EAAE,yCAAyC;SACnD,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/C,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;AAChD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anth0nycodes/license-generator",
3
- "version": "0.1.3",
3
+ "version": "0.2.0",
4
4
  "description": "An open-source CLI tool to generate licenses for your repository.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1 @@
1
+ export const BASE_URL = "https://api.github.com/licenses";
package/src/helpers.ts CHANGED
@@ -1,13 +1,16 @@
1
1
  import { execSync } from "node:child_process";
2
2
  import { constants } from "node:fs";
3
3
  import { access } from "node:fs/promises";
4
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
5
+ import { join } from "node:path";
6
+ import { homedir } from "node:os";
4
7
 
5
8
  export function getGitUsername() {
6
9
  const uncleanName = String(execSync("git config user.name"));
7
10
  return uncleanName.replace(/\r?\n/g, "");
8
11
  }
9
12
 
10
- export async function fileExists(path: string): Promise<boolean> {
13
+ export async function fileExists(path: string) {
11
14
  try {
12
15
  await access(path, constants.F_OK);
13
16
  return true;
@@ -15,3 +18,36 @@ export async function fileExists(path: string): Promise<boolean> {
15
18
  return false;
16
19
  }
17
20
  }
21
+
22
+ const CONFIG_DIR = join(homedir(), ".license-generator");
23
+ const CONFIG_FILE = join(CONFIG_DIR, "config.json");
24
+
25
+ export interface Config {
26
+ defaultLicense?: string;
27
+ }
28
+
29
+ export async function getConfig(): Promise<Config> {
30
+ try {
31
+ const content = await readFile(CONFIG_FILE, "utf8");
32
+ return JSON.parse(content);
33
+ } catch {
34
+ // config doesn't exist yet, return empty config
35
+ return {};
36
+ }
37
+ }
38
+
39
+ export async function setConfig(config: Config) {
40
+ try {
41
+ await mkdir(CONFIG_DIR, { recursive: true });
42
+ const existingConfig = await getConfig();
43
+ const updatedConfig = { ...existingConfig, ...config };
44
+ await writeFile(
45
+ CONFIG_FILE,
46
+ JSON.stringify(updatedConfig, null, 2),
47
+ "utf8",
48
+ );
49
+ } catch (error) {
50
+ console.error(`Error occurred in setConfig: ${error}`);
51
+ throw error;
52
+ }
53
+ }
package/src/index.ts CHANGED
@@ -6,23 +6,94 @@ import inquirer from "inquirer";
6
6
  import { createLicense, getLicenseContent, getLicenses } from "./license.js";
7
7
  import color from "picocolors";
8
8
  import { getGitUsername } from "./helpers.js";
9
+ import { getConfig, setConfig } from "./helpers.js";
10
+ import { BASE_URL } from "./constants.js";
9
11
 
10
12
  const main = async () => {
13
+ const licenses = await getLicenses();
14
+
11
15
  program
12
16
  .name("License Generator")
13
17
  .description(
14
18
  "A CLI application that generates open-source licenses for your repositories.",
15
19
  )
16
- .version("0.1.3");
20
+ .version("0.2.0");
17
21
 
18
- // TODO: Add options, so you can manually add a license flag like --license mit
22
+ program
23
+ .option("--ls, --list", "list all available license keys")
24
+ .option(
25
+ "-q, --quick",
26
+ "alternative to interactive mode, generate a license using the saved default license",
27
+ )
28
+ .option(
29
+ "-s, --set <license>",
30
+ "set a default license for -q / --quick option",
31
+ );
19
32
 
20
33
  program.parse();
21
34
 
22
- intro(color.blueBright("License Generator"));
35
+ const opts = program.opts();
23
36
 
24
- const BASE_URL = "https://api.github.com/licenses";
25
- const licenses = await getLicenses();
37
+ // Lists all available license keys
38
+ if (opts.list) {
39
+ const availableLicenseKeys = licenses
40
+ .map((license) => `${color.yellow(license.name)}: ${license.key}`)
41
+ .join("\n");
42
+ console.log(`Available license keys:\n${availableLicenseKeys}`);
43
+ process.exit(0);
44
+ }
45
+
46
+ // Skips interactive mode and generates a license with the saved default license
47
+ if (opts.quick) {
48
+ let name: string;
49
+ let year = String(new Date().getFullYear());
50
+
51
+ try {
52
+ name = getGitUsername();
53
+ } catch (error) {
54
+ console.error("Error: Git username not configured.");
55
+ console.error("Please run: git config --global user.name 'Your Name'");
56
+ process.exit(1);
57
+ }
58
+
59
+ const config = await getConfig();
60
+ let licenseKey = config.defaultLicense || "mit";
61
+
62
+ const licenseOptionContent = await getLicenseContent(
63
+ `${BASE_URL}/${licenseKey}`,
64
+ );
65
+
66
+ try {
67
+ await createLicense(licenseOptionContent, year, name);
68
+ } catch (error) {
69
+ console.error(`Error occurred in createLicense: ${error}`);
70
+ throw error;
71
+ }
72
+ return;
73
+ }
74
+
75
+ // Sets a default license
76
+ if (opts.set) {
77
+ const licenseKey = opts.set.toLowerCase();
78
+ const isValid = licenses.some((l) => l.key === licenseKey);
79
+
80
+ if (!isValid) {
81
+ console.error(`Error: "${licenseKey}" is not a valid license.`);
82
+ console.error(
83
+ "Available licenses:",
84
+ licenses.map((l) => l.key).join(", "),
85
+ );
86
+ process.exit(1);
87
+ }
88
+
89
+ await setConfig({ defaultLicense: licenseKey });
90
+ console.log(`Default license set to: ${color.blueBright(licenseKey)}`);
91
+ console.log(`Use --quick to generate with this license.`);
92
+ return;
93
+ }
94
+
95
+ // Interactive mode
96
+ intro(color.blueBright("License Generator"));
26
97
 
27
98
  // List all available licenses from github api
28
99
  const licenseOption = await select({
package/src/license.ts CHANGED
@@ -3,6 +3,7 @@ import color from "picocolors";
3
3
  import { writeFile } from "node:fs/promises";
4
4
  import { fileExists } from "./helpers.js";
5
5
  import { cancel, confirm, spinner } from "@clack/prompts";
6
+ import { BASE_URL } from "./constants.js";
6
7
 
7
8
  interface LicenseShape {
8
9
  key: string;
@@ -22,11 +23,9 @@ interface LicenseContentShape {
22
23
  body: string;
23
24
  }
24
25
 
25
- export async function getLicenses(): Promise<LicenseShape[]> {
26
+ export async function getLicenses() {
26
27
  try {
27
- const { data }: { data: LicenseShape[] } = await axios.get(
28
- "https://api.github.com/licenses",
29
- );
28
+ const { data }: { data: LicenseShape[] } = await axios.get(BASE_URL);
30
29
  return data;
31
30
  } catch (error) {
32
31
  console.error(`Error in getLicenses: ${error}`);