Skip to content

Commit

Permalink
feat: create new cspell hook
Browse files Browse the repository at this point in the history
  • Loading branch information
OmarJaroudi committed Nov 21, 2024
1 parent 6e945a7 commit 0dc26c0
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ Pipfile.lock
tests/__pycache__/
testing/__pycache__/
pre_commit_hooks/__pycache__/

node_modules
3 changes: 3 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@turo:registry=https://turo.jfrog.io/turo/api/npm/npm/
//turo.jfrog.io/turo/api/npm/npm/:_auth="${NPM_AUTH_TOKEN}"
//turo.jfrog.io/turo/api/npm/npm/:always-auth=true
16 changes: 16 additions & 0 deletions .pre-commit-hooks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -95,3 +95,19 @@
language: script
entry: hooks/yalc/yalc-check.sh
files: package\.json
######################
# Cspell hook
- id: cspell
name: cspell
description: "Checks for spelling mistakes & typos"
entry: cspell-cli
additional_dependencies: ["--userconfig=./.npmrc","--prefer-online","@turo/cspell@1"]
language: node
language_version: system
types: [text]
args:
- --no-must-find-files
- --no-progress
- --no-summary
- --gitignore
- --files # this needs to be the last argument so that the paths are passed correctly.
48 changes: 48 additions & 0 deletions hooks/cspell/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env node

import { execSync } from 'child_process';
import fs from 'fs';
import os from 'os';
import path from 'path';

// Function to get the installed version of a package
function getInstalledVersion(packageName, dir) {
try {
const packageJsonPath = path.join(dir, 'node_modules', packageName, 'package.json');
if (fs.existsSync(packageJsonPath)) {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
return packageJson.version;
}
} catch (error) {
return null;
}
}

// Function to get the latest version of a package from npm
function getLatestVersion(packageName) {
try {
const result = execSync(`npm show ${packageName} version`, { encoding: 'utf8' });
return result.trim();
} catch (error) {
return null;
}
}

// Get or create the fixed directory
const fixedDir = path.join(os.homedir(), '.cspell-local-dir');
const packageName = '@turo/cspell';

try {
const installedVersion = getInstalledVersion(packageName, fixedDir);
const latestVersion = getLatestVersion(packageName);

if (!installedVersion || installedVersion !== latestVersion) {
// Install the desired dependency in the fixed directory
execSync(`npm install --prefix ${fixedDir} ${packageName} --no-package-lock --prefer-online`);
}
} catch (error) {
console.error(`Failed to install or use ${packageName}:`, error);
process.exit(1);
}

import "cspell/bin";
18 changes: 18 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"author": "Turo engineering <[email protected]>",
"bin": {
"cspell-cli": "./hooks/cspell/index.js"
},
"dependencies": {
"cspell": "8.10.0"
},
"homepage": "https://github.com/turo/pre-commit-hooks#readme",
"name": "@turo/pre-commit-hooks",
"private": true,
"repository": {
"type": "git",
"url": "git+https://github.com/turo/pre-commit-hooks.git"
},
"type": "module",
"version": "4.0.0"
}

0 comments on commit 0dc26c0

Please sign in to comment.