@hatem427/code-guard-ci 1.0.0 → 1.0.2
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/README.md +24 -24
- package/dist/scripts/cli.d.ts +4 -4
- package/dist/scripts/cli.js +46 -18
- package/dist/scripts/cli.js.map +1 -1
- package/package.json +1 -1
- package/scripts/cli.ts +50 -18
package/README.md
CHANGED
|
@@ -12,20 +12,20 @@ Automatically enforce your team's coding standards with pre-commit hooks, featur
|
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
# Install in your project
|
|
15
|
-
npm install --save-dev @
|
|
15
|
+
npm install --save-dev @hatem427/code-guard-ci
|
|
16
16
|
|
|
17
17
|
# Or with yarn
|
|
18
|
-
yarn add -D @
|
|
18
|
+
yarn add -D @hatem427/code-guard-ci
|
|
19
19
|
|
|
20
20
|
# Initialize in your project
|
|
21
|
-
npx code-
|
|
21
|
+
npx code-guard init
|
|
22
22
|
```
|
|
23
23
|
|
|
24
24
|
### Option 2: Copy Files Directly
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
# Clone or copy this repository into your project
|
|
28
|
-
cp -r code-
|
|
28
|
+
cp -r code-guard/* your-project/
|
|
29
29
|
|
|
30
30
|
# Install dependencies
|
|
31
31
|
cd your-project
|
|
@@ -81,7 +81,7 @@ cd /home/hatem/Documents/roles
|
|
|
81
81
|
npm link
|
|
82
82
|
|
|
83
83
|
cd /path/to/your-project
|
|
84
|
-
npm link @
|
|
84
|
+
npm link @hatem427/code-guard-ci
|
|
85
85
|
|
|
86
86
|
# Option B: Copy files directly
|
|
87
87
|
cp -r /home/hatem/Documents/roles/* .
|
|
@@ -91,11 +91,11 @@ npm install
|
|
|
91
91
|
|
|
92
92
|
# Add required scripts to package.json
|
|
93
93
|
npm pkg set \
|
|
94
|
-
scripts.set-bypass-password="
|
|
95
|
-
scripts.set-admin-password="
|
|
96
|
-
scripts.delete-bypass-logs="
|
|
97
|
-
scripts.view-bypass-log="
|
|
98
|
-
scripts.auto-fix="
|
|
94
|
+
scripts.set-bypass-password="node node_modules/@hatem427/code-guard-ci/dist/scripts/set-bypass-password.js" \
|
|
95
|
+
scripts.set-admin-password="node node_modules/@hatem427/code-guard-ci/dist/scripts/set-admin-password.js" \
|
|
96
|
+
scripts.delete-bypass-logs="node node_modules/@hatem427/code-guard-ci/dist/scripts/delete-bypass-logs.js" \
|
|
97
|
+
scripts.view-bypass-log="node node_modules/@hatem427/code-guard-ci/dist/scripts/view-bypass-log.js" \
|
|
98
|
+
scripts.auto-fix="node node_modules/@hatem427/code-guard-ci/dist/scripts/auto-fix.js"
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
### Step 3: Test the Pre-commit Hook
|
|
@@ -195,13 +195,13 @@ npm run generate-pr-checklist -- --output=checklist.md
|
|
|
195
195
|
```bash
|
|
196
196
|
# Edit package.json - change these fields:
|
|
197
197
|
{
|
|
198
|
-
"name": "@your-org/code-
|
|
198
|
+
"name": "@your-org/code-guard", // Change to your org
|
|
199
199
|
"version": "1.0.0",
|
|
200
200
|
"private": false, // Make it public
|
|
201
201
|
"main": "dist/index.js",
|
|
202
202
|
"types": "dist/index.d.ts",
|
|
203
203
|
"bin": {
|
|
204
|
-
"code-
|
|
204
|
+
"code-guard": "./dist/cli.js"
|
|
205
205
|
},
|
|
206
206
|
"files": [
|
|
207
207
|
"dist",
|
|
@@ -230,42 +230,42 @@ npm publish --access public
|
|
|
230
230
|
|
|
231
231
|
```bash
|
|
232
232
|
# In any project
|
|
233
|
-
npm install --save-dev @your-org/code-
|
|
233
|
+
npm install --save-dev @your-org/code-guard
|
|
234
234
|
|
|
235
235
|
# Run setup
|
|
236
|
-
npx code-
|
|
236
|
+
npx code-guard init
|
|
237
237
|
```
|
|
238
238
|
|
|
239
239
|
### Option B: Use as Git Submodule (No Publishing)
|
|
240
240
|
|
|
241
241
|
```bash
|
|
242
242
|
# In your project
|
|
243
|
-
git submodule add https://github.com/your-org/code-
|
|
243
|
+
git submodule add https://github.com/your-org/code-guard.git tools/code-guard
|
|
244
244
|
|
|
245
245
|
# Link scripts in package.json
|
|
246
246
|
{
|
|
247
247
|
"scripts": {
|
|
248
|
-
"precommit-check": "
|
|
249
|
-
"generate-doc": "
|
|
250
|
-
"generate-pr-checklist": "
|
|
248
|
+
"precommit-check": "node tools/code-guard/dist/scripts/precommit-check.js",
|
|
249
|
+
"generate-doc": "node tools/code-guard/dist/scripts/generate-doc.js",
|
|
250
|
+
"generate-pr-checklist": "node tools/code-guard/dist/scripts/generate-pr-checklist.js"
|
|
251
251
|
}
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
# Setup Husky to use the submodule
|
|
255
|
-
cp tools/code-
|
|
255
|
+
cp tools/code-guard/.husky/pre-commit .husky/pre-commit
|
|
256
256
|
```
|
|
257
257
|
|
|
258
258
|
### Option C: Use as Local NPM Package (Best for Testing)
|
|
259
259
|
|
|
260
260
|
```bash
|
|
261
|
-
# In the code-
|
|
261
|
+
# In the code-guard directory
|
|
262
262
|
npm link
|
|
263
263
|
|
|
264
264
|
# In your project directory
|
|
265
|
-
npm link @
|
|
265
|
+
npm link @hatem427/code-guard-ci
|
|
266
266
|
|
|
267
267
|
# Now you can use it like a normal package
|
|
268
|
-
npx code-
|
|
268
|
+
npx code-guard init
|
|
269
269
|
```
|
|
270
270
|
|
|
271
271
|
---
|
|
@@ -600,14 +600,14 @@ MIT License - feel free to use in your projects!
|
|
|
600
600
|
|
|
601
601
|
## 🆘 Troubleshooting
|
|
602
602
|
|
|
603
|
-
### "Command not found: code-
|
|
603
|
+
### "Command not found: code-guard"
|
|
604
604
|
|
|
605
605
|
```bash
|
|
606
606
|
# Make sure you've installed dependencies
|
|
607
607
|
npm install
|
|
608
608
|
|
|
609
609
|
# Or if using as package
|
|
610
|
-
npm link @
|
|
610
|
+
npm link @hatem427/code-guard-ci
|
|
611
611
|
```
|
|
612
612
|
|
|
613
613
|
### "Husky hook not running"
|
package/dist/scripts/cli.d.ts
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* Provides commands: init, check, doc, checklist
|
|
9
9
|
*
|
|
10
10
|
* Usage:
|
|
11
|
-
* npx code-
|
|
12
|
-
* npx code-
|
|
13
|
-
* npx code-
|
|
14
|
-
* npx code-
|
|
11
|
+
* npx code-guard init
|
|
12
|
+
* npx code-guard check
|
|
13
|
+
* npx code-guard doc --name="feature" --type=ui
|
|
14
|
+
* npx code-guard checklist
|
|
15
15
|
*/
|
|
16
16
|
export {};
|
|
17
17
|
//# sourceMappingURL=cli.d.ts.map
|
package/dist/scripts/cli.js
CHANGED
|
@@ -9,10 +9,10 @@
|
|
|
9
9
|
* Provides commands: init, check, doc, checklist
|
|
10
10
|
*
|
|
11
11
|
* Usage:
|
|
12
|
-
* npx code-
|
|
13
|
-
* npx code-
|
|
14
|
-
* npx code-
|
|
15
|
-
* npx code-
|
|
12
|
+
* npx code-guard init
|
|
13
|
+
* npx code-guard check
|
|
14
|
+
* npx code-guard doc --name="feature" --type=ui
|
|
15
|
+
* npx code-guard checklist
|
|
16
16
|
*/
|
|
17
17
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
18
18
|
if (k2 === undefined) k2 = k;
|
|
@@ -61,7 +61,7 @@ function showHelp() {
|
|
|
61
61
|
🛡️ Code Guardian v${VERSION}
|
|
62
62
|
|
|
63
63
|
Usage:
|
|
64
|
-
code-
|
|
64
|
+
code-guard <command> [options]
|
|
65
65
|
|
|
66
66
|
Commands:
|
|
67
67
|
init Setup Code Guardian in current project
|
|
@@ -72,10 +72,10 @@ Commands:
|
|
|
72
72
|
version Show version
|
|
73
73
|
|
|
74
74
|
Examples:
|
|
75
|
-
code-
|
|
76
|
-
code-
|
|
77
|
-
code-
|
|
78
|
-
code-
|
|
75
|
+
code-guard init
|
|
76
|
+
code-guard check
|
|
77
|
+
code-guard doc --name="user-card" --type=ui
|
|
78
|
+
code-guard checklist --project=angular
|
|
79
79
|
|
|
80
80
|
For more info: https://github.com/team/code-guardian
|
|
81
81
|
`);
|
|
@@ -97,8 +97,21 @@ function initProject() {
|
|
|
97
97
|
console.error(' Run this command from your project root.');
|
|
98
98
|
process.exit(1);
|
|
99
99
|
}
|
|
100
|
-
// Determine
|
|
101
|
-
|
|
100
|
+
// Determine source directories (handles both dev and built package layouts)
|
|
101
|
+
// - When running from TS (ts-node): __dirname ≈ "<pkg-root>/scripts"
|
|
102
|
+
// → primary source dir for configs/templates: "<pkg-root>"
|
|
103
|
+
// - When running from compiled JS: __dirname ≈ "<pkg-root>/dist/scripts"
|
|
104
|
+
// → primary source dir: "<pkg-root>/dist", but we also fall back to "<pkg-root>"
|
|
105
|
+
const distDir = path.join(__dirname, '..'); // e.g. <pkg-root>/dist
|
|
106
|
+
const pkgRootDir = path.join(__dirname, '..', '..'); // e.g. <pkg-root>
|
|
107
|
+
const sourceConfigDirs = [
|
|
108
|
+
path.join(distDir, 'config'),
|
|
109
|
+
path.join(pkgRootDir, 'config'),
|
|
110
|
+
];
|
|
111
|
+
const sourceTemplateDirs = [
|
|
112
|
+
path.join(distDir, 'templates'),
|
|
113
|
+
path.join(pkgRootDir, 'templates'),
|
|
114
|
+
];
|
|
102
115
|
// Copy config files
|
|
103
116
|
console.log('📁 Copying configuration files...');
|
|
104
117
|
const configDir = path.join(cwd, 'config');
|
|
@@ -107,9 +120,17 @@ function initProject() {
|
|
|
107
120
|
}
|
|
108
121
|
const configFiles = ['guidelines.config.ts', 'angular.config.ts', 'react.config.ts', 'nextjs.config.ts'];
|
|
109
122
|
for (const file of configFiles) {
|
|
110
|
-
|
|
123
|
+
// Try each possible source config directory until we find the file
|
|
124
|
+
let src = null;
|
|
125
|
+
for (const dir of sourceConfigDirs) {
|
|
126
|
+
const candidate = path.join(dir, file);
|
|
127
|
+
if (fs.existsSync(candidate)) {
|
|
128
|
+
src = candidate;
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
111
132
|
const dest = path.join(configDir, file);
|
|
112
|
-
if (
|
|
133
|
+
if (src) {
|
|
113
134
|
fs.copyFileSync(src, dest);
|
|
114
135
|
console.log(` ✓ ${file}`);
|
|
115
136
|
}
|
|
@@ -122,9 +143,16 @@ function initProject() {
|
|
|
122
143
|
}
|
|
123
144
|
const templateFiles = ['feature-doc-ui.md', 'feature-doc-api.md', 'feature-doc-service.md'];
|
|
124
145
|
for (const file of templateFiles) {
|
|
125
|
-
|
|
146
|
+
let src = null;
|
|
147
|
+
for (const dir of sourceTemplateDirs) {
|
|
148
|
+
const candidate = path.join(dir, file);
|
|
149
|
+
if (fs.existsSync(candidate)) {
|
|
150
|
+
src = candidate;
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
126
154
|
const dest = path.join(templatesDir, file);
|
|
127
|
-
if (
|
|
155
|
+
if (src) {
|
|
128
156
|
fs.copyFileSync(src, dest);
|
|
129
157
|
console.log(` ✓ ${file}`);
|
|
130
158
|
}
|
|
@@ -140,9 +168,9 @@ function initProject() {
|
|
|
140
168
|
console.log('\n📝 Updating package.json scripts...');
|
|
141
169
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
142
170
|
packageJson.scripts = packageJson.scripts || {};
|
|
143
|
-
packageJson.scripts['precommit-check'] = 'code-
|
|
144
|
-
packageJson.scripts['generate-doc'] = 'code-
|
|
145
|
-
packageJson.scripts['generate-pr-checklist'] = 'code-
|
|
171
|
+
packageJson.scripts['precommit-check'] = 'code-guard check';
|
|
172
|
+
packageJson.scripts['generate-doc'] = 'code-guard doc';
|
|
173
|
+
packageJson.scripts['generate-pr-checklist'] = 'code-guard checklist';
|
|
146
174
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
147
175
|
console.log(' ✓ Added npm scripts');
|
|
148
176
|
// Setup Husky
|
package/dist/scripts/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../scripts/cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;GAaG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,+EAA+E;AAE/E,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAExB,+EAA+E;AAE/E,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC;sBACQ,OAAO;;;;;;;;;;;;;;;;;;;;GAoB1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW;IAClB,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;IAEpD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAEvD,+BAA+B;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../scripts/cli.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/scripts/cli.ts
CHANGED
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
* Provides commands: init, check, doc, checklist
|
|
9
9
|
*
|
|
10
10
|
* Usage:
|
|
11
|
-
* npx code-
|
|
12
|
-
* npx code-
|
|
13
|
-
* npx code-
|
|
14
|
-
* npx code-
|
|
11
|
+
* npx code-guard init
|
|
12
|
+
* npx code-guard check
|
|
13
|
+
* npx code-guard doc --name="feature" --type=ui
|
|
14
|
+
* npx code-guard checklist
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import * as fs from 'fs';
|
|
@@ -32,7 +32,7 @@ function showHelp(): void {
|
|
|
32
32
|
🛡️ Code Guardian v${VERSION}
|
|
33
33
|
|
|
34
34
|
Usage:
|
|
35
|
-
code-
|
|
35
|
+
code-guard <command> [options]
|
|
36
36
|
|
|
37
37
|
Commands:
|
|
38
38
|
init Setup Code Guardian in current project
|
|
@@ -43,10 +43,10 @@ Commands:
|
|
|
43
43
|
version Show version
|
|
44
44
|
|
|
45
45
|
Examples:
|
|
46
|
-
code-
|
|
47
|
-
code-
|
|
48
|
-
code-
|
|
49
|
-
code-
|
|
46
|
+
code-guard init
|
|
47
|
+
code-guard check
|
|
48
|
+
code-guard doc --name="user-card" --type=ui
|
|
49
|
+
code-guard checklist --project=angular
|
|
50
50
|
|
|
51
51
|
For more info: https://github.com/team/code-guardian
|
|
52
52
|
`);
|
|
@@ -73,8 +73,23 @@ function initProject(): void {
|
|
|
73
73
|
process.exit(1);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
// Determine
|
|
77
|
-
|
|
76
|
+
// Determine source directories (handles both dev and built package layouts)
|
|
77
|
+
// - When running from TS (ts-node): __dirname ≈ "<pkg-root>/scripts"
|
|
78
|
+
// → primary source dir for configs/templates: "<pkg-root>"
|
|
79
|
+
// - When running from compiled JS: __dirname ≈ "<pkg-root>/dist/scripts"
|
|
80
|
+
// → primary source dir: "<pkg-root>/dist", but we also fall back to "<pkg-root>"
|
|
81
|
+
const distDir = path.join(__dirname, '..'); // e.g. <pkg-root>/dist
|
|
82
|
+
const pkgRootDir = path.join(__dirname, '..', '..'); // e.g. <pkg-root>
|
|
83
|
+
|
|
84
|
+
const sourceConfigDirs = [
|
|
85
|
+
path.join(distDir, 'config'),
|
|
86
|
+
path.join(pkgRootDir, 'config'),
|
|
87
|
+
];
|
|
88
|
+
|
|
89
|
+
const sourceTemplateDirs = [
|
|
90
|
+
path.join(distDir, 'templates'),
|
|
91
|
+
path.join(pkgRootDir, 'templates'),
|
|
92
|
+
];
|
|
78
93
|
|
|
79
94
|
// Copy config files
|
|
80
95
|
console.log('📁 Copying configuration files...');
|
|
@@ -85,9 +100,18 @@ function initProject(): void {
|
|
|
85
100
|
|
|
86
101
|
const configFiles = ['guidelines.config.ts', 'angular.config.ts', 'react.config.ts', 'nextjs.config.ts'];
|
|
87
102
|
for (const file of configFiles) {
|
|
88
|
-
|
|
103
|
+
// Try each possible source config directory until we find the file
|
|
104
|
+
let src: string | null = null;
|
|
105
|
+
for (const dir of sourceConfigDirs) {
|
|
106
|
+
const candidate = path.join(dir, file);
|
|
107
|
+
if (fs.existsSync(candidate)) {
|
|
108
|
+
src = candidate;
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
89
113
|
const dest = path.join(configDir, file);
|
|
90
|
-
if (
|
|
114
|
+
if (src) {
|
|
91
115
|
fs.copyFileSync(src, dest);
|
|
92
116
|
console.log(` ✓ ${file}`);
|
|
93
117
|
}
|
|
@@ -102,9 +126,17 @@ function initProject(): void {
|
|
|
102
126
|
|
|
103
127
|
const templateFiles = ['feature-doc-ui.md', 'feature-doc-api.md', 'feature-doc-service.md'];
|
|
104
128
|
for (const file of templateFiles) {
|
|
105
|
-
|
|
129
|
+
let src: string | null = null;
|
|
130
|
+
for (const dir of sourceTemplateDirs) {
|
|
131
|
+
const candidate = path.join(dir, file);
|
|
132
|
+
if (fs.existsSync(candidate)) {
|
|
133
|
+
src = candidate;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
106
138
|
const dest = path.join(templatesDir, file);
|
|
107
|
-
if (
|
|
139
|
+
if (src) {
|
|
108
140
|
fs.copyFileSync(src, dest);
|
|
109
141
|
console.log(` ✓ ${file}`);
|
|
110
142
|
}
|
|
@@ -123,9 +155,9 @@ function initProject(): void {
|
|
|
123
155
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
124
156
|
|
|
125
157
|
packageJson.scripts = packageJson.scripts || {};
|
|
126
|
-
packageJson.scripts['precommit-check'] = 'code-
|
|
127
|
-
packageJson.scripts['generate-doc'] = 'code-
|
|
128
|
-
packageJson.scripts['generate-pr-checklist'] = 'code-
|
|
158
|
+
packageJson.scripts['precommit-check'] = 'code-guard check';
|
|
159
|
+
packageJson.scripts['generate-doc'] = 'code-guard doc';
|
|
160
|
+
packageJson.scripts['generate-pr-checklist'] = 'code-guard checklist';
|
|
129
161
|
|
|
130
162
|
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
|
|
131
163
|
console.log(' ✓ Added npm scripts');
|