{"id":22330107,"url":"https://github.com/cjmarkham/gherklin","last_synced_at":"2025-07-29T19:32:15.153Z","repository":{"id":254257486,"uuid":"845971238","full_name":"cjmarkham/Gherklin","owner":"cjmarkham","description":"A modern linter for Gherkin, using TypeScript and ESM","archived":false,"fork":false,"pushed_at":"2024-12-02T02:13:58.000Z","size":857,"stargazers_count":12,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-02T02:41:45.450Z","etag":null,"topics":["cucumber","cucumber-js","cucumberjs","gherkin","gherkin-files","gherkin-language","gherkin-lint","lint","linter","linting"],"latest_commit_sha":null,"homepage":"https://gherklin.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cjmarkham.png","metadata":{"files":{"readme":".github/readme-checker.ts","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-22T09:36:10.000Z","updated_at":"2024-12-02T02:11:57.000Z","dependencies_parsed_at":"2024-09-05T13:34:11.830Z","dependency_job_id":"df56698a-380a-4228-b48c-9c82be5ce483","html_url":"https://github.com/cjmarkham/Gherklin","commit_stats":null,"previous_names":["cjmarkham/gherkin-lint","cjmarkham/gherklin"],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjmarkham%2FGherklin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjmarkham%2FGherklin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjmarkham%2FGherklin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cjmarkham%2FGherklin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cjmarkham","download_url":"https://codeload.github.com/cjmarkham/Gherklin/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228041354,"owners_count":17860221,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cucumber","cucumber-js","cucumberjs","gherkin","gherkin-files","gherkin-language","gherkin-lint","lint","linter","linting"],"created_at":"2024-12-04T04:06:07.255Z","updated_at":"2024-12-04T04:06:07.985Z","avatar_url":"https://github.com/cjmarkham.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"#!/bin/node\n\nimport { readdirSync, readFileSync } from 'node:fs'\n\nconst fileLocation = './src/rules/README.md'\nconst rules = readdirSync('./src/rules')\n  .filter((f) =\u003e f !== 'README.md' \u0026\u0026 f !== 'index.ts')\n  .map((r) =\u003e r.replace('.ts', ''))\n\nconst content = readFileSync(fileLocation, { encoding: 'utf-8' })\nconst errors: Array\u003cstring\u003e = []\n\nrules.forEach((rule) =\u003e {\n  const smallWords = ['at', 'in']\n  const largeWords = ['eof']\n\n  const ruleTitlized = rule\n    .split('-')\n    .map((p) =\u003e {\n      if (smallWords.includes(p)) {\n        return p.toLowerCase()\n      }\n      if (largeWords.includes(p)) {\n        return p.toUpperCase()\n      }\n      return `${p.charAt(0).toUpperCase()}${p.slice(1, p.length)}`\n    })\n    .join(' ')\n\n  // Look for the rule in the table\n  const tableIndex = content.indexOf(`[${ruleTitlized}](#${rule})`)\n  if (tableIndex === -1) {\n    errors.push(`\\u001b[91mCould not find rule ${rule} in README index\\u001b[0m`)\n  }\n\n  const index = content.indexOf(`### ${ruleTitlized}`)\n  if (index === -1) {\n    errors.push(`\\u001b[91mCould not find entry for ${ruleTitlized} in README\\u001b[0m`)\n  }\n})\n\nif (errors.length) {\n  console.error(errors.join('\\n'))\n  process.exit(1)\n}\n\nprocess.exit(0)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjmarkham%2Fgherklin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcjmarkham%2Fgherklin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcjmarkham%2Fgherklin/lists"}