@hatem427/code-guard-ci 1.0.3 → 1.0.5

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.
@@ -215,6 +215,52 @@ const angularRules: Rule[] = [
215
215
  applicableTo: ['angular'],
216
216
  category: 'Angular Signals',
217
217
  },
218
+
219
+ // ── Dependency Injection ────────────────────────────────────────────────
220
+
221
+ {
222
+ id: 'angular-prefer-inject',
223
+ label: 'Use inject() instead of constructor injection',
224
+ description:
225
+ 'Modern Angular (v14+) recommends using inject() function for dependency injection instead of constructor parameters. Example: private service = inject(MyService)',
226
+ severity: 'warning',
227
+ fileExtensions: ['ts'],
228
+ pattern: null,
229
+ customCheck: (file) => {
230
+ const violations: Array<{ line: number | null; message: string }> = [];
231
+
232
+ // Only check Angular component/directive/service files
233
+ if (
234
+ !file.content.includes('@Component') &&
235
+ !file.content.includes('@Directive') &&
236
+ !file.content.includes('@Injectable')
237
+ ) {
238
+ return [];
239
+ }
240
+
241
+ // Check for constructor with dependency injection parameters
242
+ // Matches: constructor(private service: Type) or constructor(public readonly http: HttpClient)
243
+ const constructorPattern = /constructor\s*\(\s*(?:private|public|protected|readonly|\s)+\w+\s*:\s*\w+/;
244
+
245
+ if (constructorPattern.test(file.content)) {
246
+ // Find the line number
247
+ for (let i = 0; i < file.lines.length; i++) {
248
+ if (constructorPattern.test(file.lines[i])) {
249
+ violations.push({
250
+ line: i + 1,
251
+ message:
252
+ 'Constructor dependency injection found. Use inject() instead: private myService = inject(MyService);',
253
+ });
254
+ break;
255
+ }
256
+ }
257
+ }
258
+
259
+ return violations;
260
+ },
261
+ applicableTo: ['angular'],
262
+ category: 'Angular Dependency Injection',
263
+ },
218
264
  ];
219
265
 
220
266
  // Register all Angular-specific rules
@@ -1 +1 @@
1
- {"version":3,"file":"angular.config.d.ts","sourceRoot":"","sources":["../../config/angular.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE1D,QAAA,MAAM,YAAY,EAAE,IAAI,EA2MvB,CAAC;AAKF,OAAO,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"angular.config.d.ts","sourceRoot":"","sources":["../../config/angular.config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAiB,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAE1D,QAAA,MAAM,YAAY,EAAE,IAAI,EAyPvB,CAAC;AAKF,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -180,6 +180,42 @@ const angularRules = [
180
180
  applicableTo: ['angular'],
181
181
  category: 'Angular Signals',
182
182
  },
183
+ // ── Dependency Injection ────────────────────────────────────────────────
184
+ {
185
+ id: 'angular-prefer-inject',
186
+ label: 'Use inject() instead of constructor injection',
187
+ description: 'Modern Angular (v14+) recommends using inject() function for dependency injection instead of constructor parameters. Example: private service = inject(MyService)',
188
+ severity: 'warning',
189
+ fileExtensions: ['ts'],
190
+ pattern: null,
191
+ customCheck: (file) => {
192
+ const violations = [];
193
+ // Only check Angular component/directive/service files
194
+ if (!file.content.includes('@Component') &&
195
+ !file.content.includes('@Directive') &&
196
+ !file.content.includes('@Injectable')) {
197
+ return [];
198
+ }
199
+ // Check for constructor with dependency injection parameters
200
+ // Matches: constructor(private service: Type) or constructor(public readonly http: HttpClient)
201
+ const constructorPattern = /constructor\s*\(\s*(?:private|public|protected|readonly|\s)+\w+\s*:\s*\w+/;
202
+ if (constructorPattern.test(file.content)) {
203
+ // Find the line number
204
+ for (let i = 0; i < file.lines.length; i++) {
205
+ if (constructorPattern.test(file.lines[i])) {
206
+ violations.push({
207
+ line: i + 1,
208
+ message: 'Constructor dependency injection found. Use inject() instead: private myService = inject(MyService);',
209
+ });
210
+ break;
211
+ }
212
+ }
213
+ }
214
+ return violations;
215
+ },
216
+ applicableTo: ['angular'],
217
+ category: 'Angular Dependency Injection',
218
+ },
183
219
  ];
184
220
  exports.angularRules = angularRules;
185
221
  // Register all Angular-specific rules
@@ -1 +1 @@
1
- {"version":3,"file":"angular.config.js","sourceRoot":"","sources":["../../config/angular.config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"angular.config.js","sourceRoot":"","sources":["../../config/angular.config.ts"],"names":[],"mappings":"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"}
@@ -171,17 +171,115 @@ function initProject() {
171
171
  packageJson.scripts['precommit-check'] = 'code-guard check';
172
172
  packageJson.scripts['generate-doc'] = 'code-guard doc';
173
173
  packageJson.scripts['generate-pr-checklist'] = 'code-guard checklist';
174
+ packageJson.scripts['prepare'] = 'husky';
175
+ // Add optional scripts (they'll use ts-node if code-guard commands aren't available)
176
+ const packageName = '@hatem427/code-guard-ci'; // Your package name
177
+ packageJson.scripts['set-bypass-password'] = `npx ts-node node_modules/${packageName}/scripts/set-bypass-password.ts`;
178
+ packageJson.scripts['set-admin-password'] = `npx ts-node node_modules/${packageName}/scripts/set-admin-password.ts`;
179
+ packageJson.scripts['delete-bypass-logs'] = `npx ts-node node_modules/${packageName}/scripts/delete-bypass-logs.ts`;
180
+ packageJson.scripts['view-bypass-log'] = `npx ts-node node_modules/${packageName}/scripts/view-bypass-log.ts`;
181
+ packageJson.scripts['auto-fix'] = `npx ts-node node_modules/${packageName}/scripts/auto-fix.ts`;
174
182
  fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
175
183
  console.log(' ✓ Added npm scripts');
176
184
  // Setup Husky
177
185
  console.log('\n🐶 Setting up Husky...');
178
186
  try {
179
- (0, child_process_1.execSync)('npx husky install', { stdio: 'inherit', cwd });
180
- (0, child_process_1.execSync)('npx husky add .husky/pre-commit "npm run precommit-check"', { stdio: 'inherit', cwd });
187
+ // First, try modern husky init
188
+ try {
189
+ (0, child_process_1.execSync)('npx husky init', { stdio: 'pipe', cwd });
190
+ }
191
+ catch {
192
+ // Fallback to manual setup
193
+ const huskyDir = path.join(cwd, '.husky');
194
+ const huskyUnderscoreDir = path.join(huskyDir, '_');
195
+ if (!fs.existsSync(huskyDir)) {
196
+ fs.mkdirSync(huskyDir, { recursive: true });
197
+ }
198
+ if (!fs.existsSync(huskyUnderscoreDir)) {
199
+ fs.mkdirSync(huskyUnderscoreDir, { recursive: true });
200
+ }
201
+ // Create husky.sh
202
+ const huskyShContent = `#!/usr/bin/env sh
203
+ if [ -z "$husky_skip_init" ]; then
204
+ debug () {
205
+ if [ "$HUSKY_DEBUG" = "1" ]; then
206
+ echo "husky (debug) - $1"
207
+ fi
208
+ }
209
+
210
+ readonly hook_name="$(basename -- "$0")"
211
+ debug "starting $hook_name..."
212
+
213
+ if [ "$HUSKY" = "0" ]; then
214
+ debug "HUSKY env variable is set to 0, skipping hook"
215
+ exit 0
216
+ fi
217
+
218
+ if [ -f ~/.huskyrc ]; then
219
+ debug "sourcing ~/.huskyrc"
220
+ . ~/.huskyrc
221
+ fi
222
+
223
+ readonly husky_skip_init=1
224
+ export husky_skip_init
225
+ sh -e "$0" "$@"
226
+ exitCode="$?"
227
+
228
+ if [ $exitCode != 0 ]; then
229
+ echo "husky - $hook_name hook exited with code $exitCode (error)"
230
+ fi
231
+
232
+ if [ $exitCode = 127 ]; then
233
+ echo "husky - command not found in PATH=$PATH"
234
+ fi
235
+
236
+ exit $exitCode
237
+ fi
238
+ `;
239
+ fs.writeFileSync(path.join(huskyUnderscoreDir, 'husky.sh'), huskyShContent);
240
+ fs.chmodSync(path.join(huskyUnderscoreDir, 'husky.sh'), '755');
241
+ }
242
+ // Create pre-commit hook
243
+ const preCommitHook = `#!/usr/bin/env sh
244
+ # ============================================================================
245
+ # Husky pre-commit hook
246
+ # ============================================================================
247
+ #
248
+ # This hook runs automatically before every commit. It:
249
+ # 1. Executes the Code Guardian pre-commit checks
250
+ # 2. Blocks the commit if errors are found
251
+ #
252
+ # Bypass methods:
253
+ # - Add #bypass-rules to your commit message
254
+ # - Run: BYPASS_RULES=true git commit -m "message"
255
+ #
256
+ # To skip this hook entirely (git native):
257
+ # git commit --no-verify
258
+ # ============================================================================
259
+
260
+ . "$(dirname -- "$0")/_/husky.sh"
261
+
262
+ echo "🛡️ Running Code Guardian pre-commit checks..."
263
+
264
+ # Run the TypeScript pre-commit check script via npm
265
+ npm run precommit-check
266
+
267
+ # Exit with the same code as the check script
268
+ # (0 = pass, 1 = blocked)
269
+ exit $?
270
+ `;
271
+ const huskyDir = path.join(cwd, '.husky');
272
+ const preCommitPath = path.join(huskyDir, 'pre-commit');
273
+ fs.writeFileSync(preCommitPath, preCommitHook);
274
+ fs.chmodSync(preCommitPath, '755');
275
+ console.log(' ✓ Created .husky/pre-commit hook');
181
276
  console.log(' ✓ Husky configured');
182
277
  }
183
278
  catch (error) {
184
- console.warn(' ⚠️ Husky setup failed. You may need to run "npx husky install" manually.');
279
+ console.warn(' ⚠️ Husky setup failed:', error.message);
280
+ console.warn(' You may need to set it up manually:');
281
+ console.warn(' 1. Run: npx husky init');
282
+ console.warn(' 2. Create .husky/pre-commit with the hook content');
185
283
  }
186
284
  console.log('\n✅ Code Guardian initialized successfully!\n');
187
285
  console.log('Next steps:');
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../scripts/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../scripts/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ============================================================================
4
+ * postinstall.ts — Optional post-install setup
5
+ * ============================================================================
6
+ *
7
+ * This script runs after npm install to provide setup instructions.
8
+ * It does NOT automatically modify the user's project.
9
+ */
10
+ //# sourceMappingURL=postinstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.d.ts","sourceRoot":"","sources":["../../scripts/postinstall.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG"}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * ============================================================================
5
+ * postinstall.ts — Optional post-install setup
6
+ * ============================================================================
7
+ *
8
+ * This script runs after npm install to provide setup instructions.
9
+ * It does NOT automatically modify the user's project.
10
+ */
11
+ console.log(`
12
+ ╔════════════════════════════════════════════════════════════╗
13
+ ║ ║
14
+ ║ 🛡️ Code Guardian installed successfully! ║
15
+ ║ ║
16
+ ╚════════════════════════════════════════════════════════════╝
17
+
18
+ 📚 Quick Start:
19
+
20
+ 1. Initialize in your project:
21
+
22
+ npx code-guard init
23
+
24
+ 2. This will:
25
+ ✓ Create .husky/pre-commit hook
26
+ ✓ Add npm scripts to package.json
27
+ ✓ Copy config files and templates
28
+ ✓ Create docs directory
29
+
30
+ 3. Test it:
31
+
32
+ git commit -m "test"
33
+
34
+ 📖 Documentation:
35
+ https://github.com/hatem427/code-guard-ci
36
+
37
+ 🆘 Need help?
38
+ Run: code-guard help
39
+
40
+ `);
41
+ //# sourceMappingURL=postinstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../../scripts/postinstall.ts"],"names":[],"mappings":";;AACA;;;;;;;GAOG;AAEH,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BX,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatem427/code-guard-ci",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Production-ready TypeScript tooling to enforce PR & coding guidelines for Angular, React, and NextJS projects.",
5
5
  "private": false,
6
6
  "main": "dist/scripts/cli.js",
@@ -70,5 +70,129 @@
70
70
  },
71
71
  "engines": {
72
72
  "node": ">=18.0.0"
73
+ },
74
+ "directories": {
75
+ "doc": "docs"
76
+ },
77
+ "dependencies": {
78
+ "acorn": "^8.15.0",
79
+ "acorn-jsx": "^5.3.2",
80
+ "acorn-walk": "^8.3.4",
81
+ "ajv": "^6.12.6",
82
+ "ansi-regex": "^5.0.1",
83
+ "ansi-styles": "^4.3.0",
84
+ "arg": "^4.1.3",
85
+ "argparse": "^2.0.1",
86
+ "balanced-match": "^1.0.2",
87
+ "brace-expansion": "^1.1.12",
88
+ "braces": "^3.0.3",
89
+ "callsites": "^3.1.0",
90
+ "code-block-writer": "^12.0.0",
91
+ "color-convert": "^2.0.1",
92
+ "color-name": "^1.1.4",
93
+ "concat-map": "^0.0.1",
94
+ "create-require": "^1.1.1",
95
+ "cross-spawn": "^7.0.6",
96
+ "debug": "^4.4.3",
97
+ "deep-is": "^0.1.4",
98
+ "diff": "^4.0.4",
99
+ "doctrine": "^3.0.0",
100
+ "eastasianwidth": "^0.2.0",
101
+ "emoji-regex": "^9.2.2",
102
+ "escape-string-regexp": "^4.0.0",
103
+ "eslint-scope": "^7.2.2",
104
+ "eslint-visitor-keys": "^3.4.3",
105
+ "espree": "^9.6.1",
106
+ "esquery": "^1.7.0",
107
+ "esrecurse": "^4.3.0",
108
+ "estraverse": "^5.3.0",
109
+ "esutils": "^2.0.3",
110
+ "fast-deep-equal": "^3.1.3",
111
+ "fast-glob": "^3.3.3",
112
+ "fast-json-stable-stringify": "^2.1.0",
113
+ "fast-levenshtein": "^2.0.6",
114
+ "fastq": "^1.20.1",
115
+ "file-entry-cache": "^6.0.1",
116
+ "fill-range": "^7.1.1",
117
+ "find-up": "^5.0.0",
118
+ "flat-cache": "^3.2.0",
119
+ "flatted": "^3.3.3",
120
+ "foreground-child": "^3.3.1",
121
+ "fs.realpath": "^1.0.0",
122
+ "glob-parent": "^6.0.2",
123
+ "globals": "^13.24.0",
124
+ "graphemer": "^1.4.0",
125
+ "has-flag": "^4.0.0",
126
+ "ignore": "^5.3.2",
127
+ "import-fresh": "^3.3.1",
128
+ "imurmurhash": "^0.1.4",
129
+ "inflight": "^1.0.6",
130
+ "inherits": "^2.0.4",
131
+ "is-extglob": "^2.1.1",
132
+ "is-fullwidth-code-point": "^3.0.0",
133
+ "is-glob": "^4.0.3",
134
+ "is-number": "^7.0.0",
135
+ "is-path-inside": "^3.0.3",
136
+ "isexe": "^2.0.0",
137
+ "jackspeak": "^3.4.3",
138
+ "js-yaml": "^4.1.1",
139
+ "json-buffer": "^3.0.1",
140
+ "json-schema-traverse": "^0.4.1",
141
+ "json-stable-stringify-without-jsonify": "^1.0.1",
142
+ "keyv": "^4.5.4",
143
+ "levn": "^0.4.1",
144
+ "locate-path": "^6.0.0",
145
+ "lodash.merge": "^4.6.2",
146
+ "lru-cache": "^10.4.3",
147
+ "make-error": "^1.3.6",
148
+ "merge2": "^1.4.1",
149
+ "micromatch": "^4.0.8",
150
+ "minimatch": "^3.1.2",
151
+ "minipass": "^7.1.2",
152
+ "mkdirp": "^3.0.1",
153
+ "ms": "^2.1.3",
154
+ "natural-compare": "^1.4.0",
155
+ "once": "^1.4.0",
156
+ "optionator": "^0.9.4",
157
+ "p-limit": "^3.1.0",
158
+ "p-locate": "^5.0.0",
159
+ "package-json-from-dist": "^1.0.1",
160
+ "parent-module": "^1.0.1",
161
+ "path-browserify": "^1.0.1",
162
+ "path-exists": "^4.0.0",
163
+ "path-is-absolute": "^1.0.1",
164
+ "path-key": "^3.1.1",
165
+ "path-scurry": "^1.11.1",
166
+ "picomatch": "^2.3.1",
167
+ "prelude-ls": "^1.2.1",
168
+ "punycode": "^2.3.1",
169
+ "queue-microtask": "^1.2.3",
170
+ "resolve-from": "^4.0.0",
171
+ "reusify": "^1.1.0",
172
+ "rimraf": "^3.0.2",
173
+ "run-parallel": "^1.2.0",
174
+ "shebang-command": "^2.0.0",
175
+ "shebang-regex": "^3.0.0",
176
+ "signal-exit": "^4.1.0",
177
+ "string-width": "^5.1.2",
178
+ "string-width-cjs": "^4.2.3",
179
+ "strip-ansi": "^6.0.1",
180
+ "strip-ansi-cjs": "^6.0.1",
181
+ "strip-json-comments": "^3.1.1",
182
+ "supports-color": "^7.2.0",
183
+ "text-table": "^0.2.0",
184
+ "to-regex-range": "^5.0.1",
185
+ "type-check": "^0.4.0",
186
+ "type-fest": "^0.20.2",
187
+ "undici-types": "^6.21.0",
188
+ "uri-js": "^4.4.1",
189
+ "v8-compile-cache-lib": "^3.0.1",
190
+ "which": "^2.0.2",
191
+ "word-wrap": "^1.2.5",
192
+ "wrap-ansi": "^8.1.0",
193
+ "wrap-ansi-cjs": "^7.0.0",
194
+ "wrappy": "^1.0.2",
195
+ "yn": "^3.1.1",
196
+ "yocto-queue": "^0.1.0"
73
197
  }
74
198
  }
package/scripts/cli.ts CHANGED
@@ -158,6 +158,15 @@ function initProject(): void {
158
158
  packageJson.scripts['precommit-check'] = 'code-guard check';
159
159
  packageJson.scripts['generate-doc'] = 'code-guard doc';
160
160
  packageJson.scripts['generate-pr-checklist'] = 'code-guard checklist';
161
+ packageJson.scripts['prepare'] = 'husky';
162
+
163
+ // Add optional scripts (they'll use ts-node if code-guard commands aren't available)
164
+ const packageName = '@hatem427/code-guard-ci'; // Your package name
165
+ packageJson.scripts['set-bypass-password'] = `npx ts-node node_modules/${packageName}/scripts/set-bypass-password.ts`;
166
+ packageJson.scripts['set-admin-password'] = `npx ts-node node_modules/${packageName}/scripts/set-admin-password.ts`;
167
+ packageJson.scripts['delete-bypass-logs'] = `npx ts-node node_modules/${packageName}/scripts/delete-bypass-logs.ts`;
168
+ packageJson.scripts['view-bypass-log'] = `npx ts-node node_modules/${packageName}/scripts/view-bypass-log.ts`;
169
+ packageJson.scripts['auto-fix'] = `npx ts-node node_modules/${packageName}/scripts/auto-fix.ts`;
161
170
 
162
171
  fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\n');
163
172
  console.log(' ✓ Added npm scripts');
@@ -165,11 +174,106 @@ function initProject(): void {
165
174
  // Setup Husky
166
175
  console.log('\n🐶 Setting up Husky...');
167
176
  try {
168
- execSync('npx husky install', { stdio: 'inherit', cwd });
169
- execSync('npx husky add .husky/pre-commit "npm run precommit-check"', { stdio: 'inherit', cwd });
177
+ // First, try modern husky init
178
+ try {
179
+ execSync('npx husky init', { stdio: 'pipe', cwd });
180
+ } catch {
181
+ // Fallback to manual setup
182
+ const huskyDir = path.join(cwd, '.husky');
183
+ const huskyUnderscoreDir = path.join(huskyDir, '_');
184
+
185
+ if (!fs.existsSync(huskyDir)) {
186
+ fs.mkdirSync(huskyDir, { recursive: true });
187
+ }
188
+
189
+ if (!fs.existsSync(huskyUnderscoreDir)) {
190
+ fs.mkdirSync(huskyUnderscoreDir, { recursive: true });
191
+ }
192
+
193
+ // Create husky.sh
194
+ const huskyShContent = `#!/usr/bin/env sh
195
+ if [ -z "$husky_skip_init" ]; then
196
+ debug () {
197
+ if [ "$HUSKY_DEBUG" = "1" ]; then
198
+ echo "husky (debug) - $1"
199
+ fi
200
+ }
201
+
202
+ readonly hook_name="$(basename -- "$0")"
203
+ debug "starting $hook_name..."
204
+
205
+ if [ "$HUSKY" = "0" ]; then
206
+ debug "HUSKY env variable is set to 0, skipping hook"
207
+ exit 0
208
+ fi
209
+
210
+ if [ -f ~/.huskyrc ]; then
211
+ debug "sourcing ~/.huskyrc"
212
+ . ~/.huskyrc
213
+ fi
214
+
215
+ readonly husky_skip_init=1
216
+ export husky_skip_init
217
+ sh -e "$0" "$@"
218
+ exitCode="$?"
219
+
220
+ if [ $exitCode != 0 ]; then
221
+ echo "husky - $hook_name hook exited with code $exitCode (error)"
222
+ fi
223
+
224
+ if [ $exitCode = 127 ]; then
225
+ echo "husky - command not found in PATH=$PATH"
226
+ fi
227
+
228
+ exit $exitCode
229
+ fi
230
+ `;
231
+ fs.writeFileSync(path.join(huskyUnderscoreDir, 'husky.sh'), huskyShContent);
232
+ fs.chmodSync(path.join(huskyUnderscoreDir, 'husky.sh'), '755');
233
+ }
234
+
235
+ // Create pre-commit hook
236
+ const preCommitHook = `#!/usr/bin/env sh
237
+ # ============================================================================
238
+ # Husky pre-commit hook
239
+ # ============================================================================
240
+ #
241
+ # This hook runs automatically before every commit. It:
242
+ # 1. Executes the Code Guardian pre-commit checks
243
+ # 2. Blocks the commit if errors are found
244
+ #
245
+ # Bypass methods:
246
+ # - Add #bypass-rules to your commit message
247
+ # - Run: BYPASS_RULES=true git commit -m "message"
248
+ #
249
+ # To skip this hook entirely (git native):
250
+ # git commit --no-verify
251
+ # ============================================================================
252
+
253
+ . "$(dirname -- "$0")/_/husky.sh"
254
+
255
+ echo "🛡️ Running Code Guardian pre-commit checks..."
256
+
257
+ # Run the TypeScript pre-commit check script via npm
258
+ npm run precommit-check
259
+
260
+ # Exit with the same code as the check script
261
+ # (0 = pass, 1 = blocked)
262
+ exit $?
263
+ `;
264
+
265
+ const huskyDir = path.join(cwd, '.husky');
266
+ const preCommitPath = path.join(huskyDir, 'pre-commit');
267
+ fs.writeFileSync(preCommitPath, preCommitHook);
268
+ fs.chmodSync(preCommitPath, '755');
269
+
270
+ console.log(' ✓ Created .husky/pre-commit hook');
170
271
  console.log(' ✓ Husky configured');
171
- } catch (error) {
172
- console.warn(' ⚠️ Husky setup failed. You may need to run "npx husky install" manually.');
272
+ } catch (error: any) {
273
+ console.warn(' ⚠️ Husky setup failed:', error.message);
274
+ console.warn(' You may need to set it up manually:');
275
+ console.warn(' 1. Run: npx husky init');
276
+ console.warn(' 2. Create .husky/pre-commit with the hook content');
173
277
  }
174
278
 
175
279
  console.log('\n✅ Code Guardian initialized successfully!\n');
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ============================================================================
4
+ * postinstall.ts — Optional post-install setup
5
+ * ============================================================================
6
+ *
7
+ * This script runs after npm install to provide setup instructions.
8
+ * It does NOT automatically modify the user's project.
9
+ */
10
+
11
+ console.log(`
12
+ ╔════════════════════════════════════════════════════════════╗
13
+ ║ ║
14
+ ║ 🛡️ Code Guardian installed successfully! ║
15
+ ║ ║
16
+ ╚════════════════════════════════════════════════════════════╝
17
+
18
+ 📚 Quick Start:
19
+
20
+ 1. Initialize in your project:
21
+
22
+ npx code-guard init
23
+
24
+ 2. This will:
25
+ ✓ Create .husky/pre-commit hook
26
+ ✓ Add npm scripts to package.json
27
+ ✓ Copy config files and templates
28
+ ✓ Create docs directory
29
+
30
+ 3. Test it:
31
+
32
+ git commit -m "test"
33
+
34
+ 📖 Documentation:
35
+ https://github.com/hatem427/code-guard-ci
36
+
37
+ 🆘 Need help?
38
+ Run: code-guard help
39
+
40
+ `);