@jml6m/skeletor 0.1.0-alpha.1 → 0.1.0-alpha.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.
Files changed (79) hide show
  1. package/README.md +140 -7
  2. package/package.json +33 -4
  3. package/src/index.js +316 -5
  4. package/templates/csharp/AGENTS.md +10 -0
  5. package/templates/csharp/Program.cs +18 -0
  6. package/templates/csharp/ProgramTests.cs +12 -0
  7. package/templates/csharp/README.md +12 -0
  8. package/templates/csharp/template.json +10 -0
  9. package/templates/csharp/{{PROJECT_NAME}}.csproj +17 -0
  10. package/templates/go/AGENTS.md +9 -0
  11. package/templates/go/README.md +13 -0
  12. package/templates/go/go.mod +5 -0
  13. package/templates/go/main.go +20 -0
  14. package/templates/go/main_test.go +11 -0
  15. package/templates/go/template.json +11 -0
  16. package/templates/java/AGENTS.md +9 -0
  17. package/templates/java/README.md +12 -0
  18. package/templates/java/pom.xml +38 -0
  19. package/templates/java/src/main/java/com/example/App.java +16 -0
  20. package/templates/java/src/test/java/com/example/AppTest.java +12 -0
  21. package/templates/java/template.json +10 -0
  22. package/templates/javascript/.editorconfig +16 -0
  23. package/templates/javascript/.eslintrc.json +82 -0
  24. package/templates/javascript/.github/workflows/README.md +7 -0
  25. package/templates/javascript/.github/workflows/ci.yml +39 -0
  26. package/templates/javascript/.husky/pre-commit +4 -0
  27. package/templates/javascript/.prettierrc.json +24 -0
  28. package/templates/javascript/AGENTS.md +110 -0
  29. package/templates/javascript/README.md +38 -0
  30. package/templates/javascript/docs/CODING_STANDARDS.md +14 -0
  31. package/templates/javascript/jest.config.js +7 -0
  32. package/templates/javascript/jsconfig.json +19 -0
  33. package/templates/javascript/knip.json +7 -0
  34. package/templates/javascript/package.json +60 -0
  35. package/templates/javascript/release.js +145 -0
  36. package/templates/javascript/scripts/generate-context.js +73 -0
  37. package/templates/javascript/scripts/reinstall.js +25 -0
  38. package/templates/javascript/src/config/env.config.js +25 -0
  39. package/templates/javascript/src/config/index.js +7 -0
  40. package/templates/javascript/src/constants/index.js +11 -0
  41. package/templates/javascript/src/index.js +19 -0
  42. package/templates/javascript/src/utils/logger.js +42 -0
  43. package/templates/javascript/template.json +13 -0
  44. package/templates/javascript/tests/example.test.js +10 -0
  45. package/templates/python/AGENTS.md +10 -0
  46. package/templates/python/README.md +16 -0
  47. package/templates/python/pyproject.toml +45 -0
  48. package/templates/python/src/app/__init__.py +7 -0
  49. package/templates/python/src/app/main.py +8 -0
  50. package/templates/python/template.json +12 -0
  51. package/templates/python/tests/test_main.py +9 -0
  52. package/templates/rust/AGENTS.md +9 -0
  53. package/templates/rust/Cargo.toml +10 -0
  54. package/templates/rust/README.md +12 -0
  55. package/templates/rust/src/main.rs +22 -0
  56. package/templates/rust/template.json +10 -0
  57. package/templates/typescript/.editorconfig +16 -0
  58. package/templates/typescript/.github/workflows/README.md +7 -0
  59. package/templates/typescript/.github/workflows/ci.yml +39 -0
  60. package/templates/typescript/.husky/pre-commit +4 -0
  61. package/templates/typescript/.prettierrc.json +24 -0
  62. package/templates/typescript/AGENTS.md +110 -0
  63. package/templates/typescript/README.md +38 -0
  64. package/templates/typescript/docs/CODING_STANDARDS.md +14 -0
  65. package/templates/typescript/eslint.config.js +55 -0
  66. package/templates/typescript/jest.config.js +7 -0
  67. package/templates/typescript/knip.json +7 -0
  68. package/templates/typescript/package.json +57 -0
  69. package/templates/typescript/release.js +145 -0
  70. package/templates/typescript/scripts/generate-context.js +73 -0
  71. package/templates/typescript/scripts/reinstall.js +25 -0
  72. package/templates/typescript/src/config/env.config.ts +25 -0
  73. package/templates/typescript/src/config/index.ts +7 -0
  74. package/templates/typescript/src/constants/index.ts +11 -0
  75. package/templates/typescript/src/index.ts +16 -0
  76. package/templates/typescript/src/utils/logger.ts +42 -0
  77. package/templates/typescript/template.json +14 -0
  78. package/templates/typescript/tests/example.test.js +10 -0
  79. package/templates/typescript/tsconfig.json +21 -0
@@ -0,0 +1,9 @@
1
+ # Java Project — Agent Guidelines
2
+
3
+ **Project:** {{PROJECT_NAME}}
4
+ **Language:** Java (Maven)
5
+
6
+ - Build with `mvn clean compile`, test with `mvn test`.
7
+ - Use JUnit 5 for tests.
8
+ - Follow standard package naming and clean architecture.
9
+ - Update this file with any team-specific Java conventions.
@@ -0,0 +1,12 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ {{DESCRIPTION}}
4
+
5
+ ## Development
6
+
7
+ ```bash
8
+ mvn clean compile
9
+ mvn test
10
+ ```
11
+
12
+ Standard Maven Java 17+ project.
@@ -0,0 +1,38 @@
1
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
2
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4
+ <modelVersion>4.0.0</modelVersion>
5
+
6
+ <groupId>com.example</groupId>
7
+ <artifactId>{{PROJECT_NAME}}</artifactId>
8
+ <version>0.1.0</version>
9
+ <packaging>jar</packaging>
10
+
11
+ <name>{{PROJECT_NAME}}</name>
12
+ <description>{{DESCRIPTION}}</description>
13
+
14
+ <properties>
15
+ <maven.compiler.source>17</maven.compiler.source>
16
+ <maven.compiler.target>17</maven.compiler.target>
17
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18
+ </properties>
19
+
20
+ <dependencies>
21
+ <dependency>
22
+ <groupId>org.junit.jupiter</groupId>
23
+ <artifactId>junit-jupiter</artifactId>
24
+ <version>5.10.2</version>
25
+ <scope>test</scope>
26
+ </dependency>
27
+ </dependencies>
28
+
29
+ <build>
30
+ <plugins>
31
+ <plugin>
32
+ <groupId>org.apache.maven.plugins</groupId>
33
+ <artifactId>maven-surefire-plugin</artifactId>
34
+ <version>3.2.5</version>
35
+ </plugin>
36
+ </plugins>
37
+ </build>
38
+ </project>
@@ -0,0 +1,16 @@
1
+ package com.example;
2
+
3
+ /**
4
+ * {{PROJECT_NAME}}
5
+ *
6
+ * {{DESCRIPTION}}
7
+ */
8
+ public class App {
9
+ public static void main(String[] args) {
10
+ System.out.println(hello("world"));
11
+ }
12
+
13
+ public static String hello(String name) {
14
+ return String.format("Hello, %s from {{PROJECT_NAME}}!", name);
15
+ }
16
+ }
@@ -0,0 +1,12 @@
1
+ package com.example;
2
+
3
+ import org.junit.jupiter.api.Test;
4
+ import static org.junit.jupiter.api.Assertions.*;
5
+
6
+ class AppTest {
7
+
8
+ @Test
9
+ void helloReturnsGreeting() {
10
+ assertEquals("Hello, tester from {{PROJECT_NAME}}!", App.hello("tester"));
11
+ }
12
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "java",
3
+ "name": "Java (Maven)",
4
+ "description": "Standard Maven Java project with pom.xml, src/main/java structure, and basic JUnit tests.",
5
+ "language": "java",
6
+ "verifyCommands": [
7
+ "mvn clean compile",
8
+ "mvn test"
9
+ ]
10
+ }
@@ -0,0 +1,16 @@
1
+ # Editor configuration, see https://editorconfig.org
2
+ root = true
3
+
4
+ [*]
5
+ charset = utf-8
6
+ indent_style = space
7
+ indent_size = 2
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
10
+
11
+ [*.js]
12
+ quote_type = single
13
+
14
+ [*.md]
15
+ max_line_length = off
16
+ trim_trailing_whitespace = false
@@ -0,0 +1,82 @@
1
+ {
2
+ "env": {
3
+ "node": true,
4
+ "es2021": true,
5
+ "commonjs": true,
6
+ "jest": true
7
+ },
8
+ "extends": ["eslint:recommended", "plugin:import/recommended"],
9
+ "plugins": ["unused-imports", "import"],
10
+ "parserOptions": {
11
+ "ecmaVersion": "latest"
12
+ },
13
+ "settings": {
14
+ "import/resolver": {
15
+ "jsconfig": {
16
+ "config": "jsconfig.json",
17
+ "extensions": [".js", ".json"]
18
+ }
19
+ }
20
+ },
21
+ "rules": {
22
+ "no-unused-vars": "off",
23
+ "unused-imports/no-unused-imports": "error",
24
+ "unused-imports/no-unused-vars": [
25
+ "warn",
26
+ {
27
+ "vars": "all",
28
+ "varsIgnorePattern": "^_",
29
+ "args": "after-used",
30
+ "argsIgnorePattern": "^_"
31
+ }
32
+ ],
33
+ "no-restricted-syntax": [
34
+ "warn",
35
+ {
36
+ "selector": "CallExpression[callee.object.name='logger'][callee.property.name=/^(info|warn|error|debug|http|log)$/] > TemplateLiteral:first-child",
37
+ "message": "Avoid template literals in logger messages. Use a static string and pass variables as metadata: logger.info('Event description', { key: value })"
38
+ }
39
+ ],
40
+ "no-console": "warn",
41
+ "no-empty": ["error", { "allowEmptyCatch": false }],
42
+ "no-undef": "error",
43
+ "no-restricted-imports": [
44
+ "error",
45
+ {
46
+ "patterns": [
47
+ {
48
+ "group": ["../*"],
49
+ "message": "Do not use parent imports. Use architectural aliases (e.g. @services, @utils) or sibling imports (./)."
50
+ }
51
+ ]
52
+ }
53
+ ],
54
+ "no-restricted-properties": [
55
+ "error",
56
+ {
57
+ "object": "process",
58
+ "property": "env",
59
+ "message": "Use @config (or equivalent) instead of process.env directly."
60
+ },
61
+ {
62
+ "object": "process",
63
+ "property": "exit",
64
+ "message": "Direct process.exit() is discouraged. Use error handling or a dedicated shutdown utility."
65
+ }
66
+ ]
67
+ },
68
+ "overrides": [
69
+ {
70
+ "files": ["knip.config.js", "release.js", "scripts/**/*.js", "tests/**/*.js"],
71
+ "rules": {
72
+ "no-console": "off"
73
+ }
74
+ },
75
+ {
76
+ "files": ["release.js", "scripts/**/*.js", "tests/support/**/*.js"],
77
+ "rules": {
78
+ "no-restricted-properties": "off"
79
+ }
80
+ }
81
+ ]
82
+ }
@@ -0,0 +1,7 @@
1
+ # GitHub Workflows
2
+
3
+ Basic CI is included (lint + test + health).
4
+
5
+ Customize as needed (add build step, matrix for Node versions, deployment jobs, etc.).
6
+
7
+ See the root AGENTS.md for policies around releases and agent usage of these workflows.
@@ -0,0 +1,39 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, reopened, synchronize, ready_for_review]
6
+ push:
7
+ branches: [main, master]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ concurrency:
13
+ group: ci-${{ github.ref }}
14
+ cancel-in-progress: true
15
+
16
+ jobs:
17
+ ci:
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v4
22
+
23
+ - name: Setup Node.js
24
+ uses: actions/setup-node@v4
25
+ with:
26
+ node-version: '20'
27
+ cache: 'npm'
28
+
29
+ - name: Install dependencies
30
+ run: npm ci
31
+
32
+ - name: Run linter
33
+ run: npm run lint
34
+
35
+ - name: Run tests
36
+ run: npm test
37
+
38
+ - name: Run health checks (knip / dupes / circular)
39
+ run: npm run health:full || true
@@ -0,0 +1,4 @@
1
+ #!/bin/sh
2
+ # Husky v9 + lint-staged pre-commit
3
+ # Runs format/lint on staged files only. Fast feedback before commit.
4
+ npx lint-staged
@@ -0,0 +1,24 @@
1
+ {
2
+ "tabWidth": 2,
3
+ "printWidth": 165,
4
+ "useTabs": false,
5
+ "semi": true,
6
+ "singleQuote": true,
7
+ "trailingComma": "es5",
8
+ "plugins": ["prettier-plugin-organize-imports", "prettier-plugin-pkg"],
9
+ "overrides": [
10
+ {
11
+ "files": ["*.json", "*.jsonc", "*.json5"],
12
+ "options": {
13
+ "parser": "json",
14
+ "tabWidth": 2
15
+ }
16
+ },
17
+ {
18
+ "files": "*.md",
19
+ "options": {
20
+ "tabWidth": 2
21
+ }
22
+ }
23
+ ]
24
+ }
@@ -0,0 +1,110 @@
1
+ # 🤖 Agent & AI Protocols (All Agents)
2
+
3
+ **Project:** {{PROJECT_NAME}} <br />
4
+ **Runtime:** Node.js (>=20.19.0) <br />
5
+ **Testing:** Jest
6
+
7
+ > **📌 Single Source of Truth**: This document is the authoritative reference for all coding standards, architecture rules, and project policies in this repository. If there is a conflict between this document and any other file, `AGENTS.md` takes precedence.
8
+
9
+ This document defines the operational parameters, architectural standards, and safety protocols for all AI agents working within this repository.
10
+
11
+ ---
12
+
13
+ ## 🛑 Critical Protocols (Read First)
14
+
15
+ ### 1. The "Three Strike" Rule (Loop Prevention)
16
+
17
+ For unsupervised runs (e.g. automated fixes or refactors):
18
+ - If you attempt to fix an error and the **same** error persists after **3 attempts**:
19
+ - **STOP**.
20
+ - Revert to the last functioning state.
21
+ - Mark the test/code with `// FIXME: Agent worker failed` or `.skip`.
22
+ - Log the failure and move on.
23
+
24
+ ### 2. Versioning & Release Policy
25
+
26
+ - **One PR = One Bump**: Version bump happens **once** using `npm run release:patch` when creating the PR.
27
+ - `npm run release:minor` only for substantial new features (coordinate with admin).
28
+ - ⛔ `npm run release:major` is **human-only**.
29
+
30
+ ### 3. Command Execution Safety
31
+
32
+ **STRICTLY PROHIBITED for agents:**
33
+ - `npm publish`
34
+ - `git push` (agents propose; humans / CI push)
35
+ - Running migrations or prod start commands without explicit request
36
+ - Direct edits to core bootstrap / auth / secret-handling files (see Exclusions below)
37
+
38
+ ### 4. Code Review & PR Interaction
39
+
40
+ - The agent **MUST** respond to comments from the primary (human) reviewer or when explicitly @-tagged.
41
+ - **No passive "Acknowledged" / "Will fix"**. Either make the change or discuss with technical reasoning.
42
+ - Human reviewer comments always take priority over bot threads.
43
+
44
+ ### 5. Cross-Repo Coordination (when applicable)
45
+
46
+ When work spans multiple repositories, create paired issues and cross-link PRs in both Coordination sections.
47
+
48
+ ---
49
+
50
+ ## 📐 Architecture & Coding Standards
51
+
52
+ - **Module aliases over relatives**: Never use `../`. Use `@src`, `@utils`, `@config`, `@services`, etc. (enforced by ESLint + jsconfig).
53
+ - **Configuration SSoT**: Never read `process.env` directly in feature code. Centralize in `@config`.
54
+ - **Layered architecture** (recommended): Routes/Controllers (thin) → Services (business logic) → Models/Mechanics (pure functions).
55
+ - **Zod where helpful**: Use for config validation and request/input schemas.
56
+ - **Logging**: Use a structured logger (Winston or equivalent). Static message strings + metadata object. Never `console.log` in production paths.
57
+ - **Error handling**: Use explicit `AppError` / error classes with constants for consistent responses.
58
+
59
+ See `docs/CODING_STANDARDS.md` (if present) for expanded examples.
60
+
61
+ ### Code Style (enforced)
62
+
63
+ - Prettier (see `.prettierrc.json`): 2 spaces, single quotes, semicolons, printWidth 165, organize-imports.
64
+ - File names: `kebab-case.js` or `kebab-case.test.js`.
65
+ - Functions: `camelCase`, classes `PascalCase`, constants `SCREAMING_SNAKE_CASE`.
66
+
67
+ ### ESLint highlights (see .eslintrc.json)
68
+
69
+ - `unused-imports/no-unused-imports`: error
70
+ - `no-restricted-imports`: `../*` forbidden
71
+ - `no-restricted-properties`: `process.env` and `process.exit` (with documented exceptions)
72
+ - `no-console`: warn (scripts/tests/config overrides allowed)
73
+
74
+ ---
75
+
76
+ ## 🛡️ Logging & Error Handling (summary)
77
+
78
+ - Import the shared logger.
79
+ - Messages are **static strings**; data goes in the 2nd (metadata) argument.
80
+ - For errors: always log `{ error: err.message, stack: err.stack }`.
81
+ - See the full patterns in active reference projects (local-land-server etc.).
82
+
83
+ ---
84
+
85
+ ## 🧪 Testing
86
+
87
+ - Unit tests: heavily mock external deps (DB, network, time).
88
+ - Integration: use in-memory or test harnesses where available.
89
+ - Follow AAA. Keep tests readable and deterministic.
90
+ - Run `npm run health:full` before opening PRs.
91
+
92
+ ---
93
+
94
+ ## 🛑 Excluded Source Code (for AI context size & security)
95
+
96
+ The following are intentionally **not** provided in full to agents by default. Ask for snippets if you need to propose changes.
97
+
98
+ - `src/index.js` (or main entry / bootstrap)
99
+ - Authentication / token / JWT utilities
100
+ - Any file that would require hard-coding real secrets
101
+
102
+ **Never** output real secrets, tokens, or keys. Use config + env.
103
+
104
+ ---
105
+
106
+ ## Additional Resources
107
+
108
+ - Your personal conventions are derived from analysis of multiple active GitHub-linked workspaces.
109
+ - Update this file when the project's architecture or policies evolve.
110
+ - `npm run prompt:gen` (or with `--all`) can be used to produce a full context dump for complex tasks.
@@ -0,0 +1,38 @@
1
+ # {{PROJECT_NAME}}
2
+
3
+ {{DESCRIPTION}}
4
+
5
+ ## Standards
6
+
7
+ This project was scaffolded with [skeletor](https://github.com/jml6m/skeletor) and follows personal conventions extracted from active workspaces:
8
+
9
+ - Prettier + organize-imports + pkg plugin (printWidth 165, 2 spaces, single quotes)
10
+ - ESLint + unused-imports (strict), no parent relative imports (`../*`)
11
+ - Knip (dead code), jscpd (dupes), madge (circular) via `npm run health:full`
12
+ - Custom `release.js` (one bump per PR, major gates via GitHub issue labels `vN-required`)
13
+ - AGENTS.md as the Single Source of Truth for coding standards + AI agent protocols
14
+ - Path aliases (`@src`, `@utils`, etc.) enforced at lint + runtime (module-alias)
15
+
16
+ See [AGENTS.md](./AGENTS.md) for the full contract.
17
+
18
+ ## Quick start
19
+
20
+ ```bash
21
+ npm install
22
+ npm run format
23
+ npm run lint
24
+ npm test
25
+ npm run health:full
26
+ ```
27
+
28
+ ## Release flow (per conventions)
29
+
30
+ - Open PR → run `npm run release:patch` **once** at PR creation
31
+ - `npm run release:minor` only for substantial features (coordinate)
32
+ - Majors are human-only and gated by open issues labeled `vX-required`
33
+
34
+ ## Tooling scripts
35
+
36
+ - `npm run npm:reinstall` — clean node_modules + lock then fresh install
37
+ - `npm run prompt:gen` — build prompt.md for AI context (respects excludes)
38
+ - `npm run health:*` — quality gates
@@ -0,0 +1,14 @@
1
+ # Coding Standards — {{PROJECT_NAME}}
2
+
3
+ See [AGENTS.md](../AGENTS.md) for the authoritative rules.
4
+
5
+ This document can be expanded with project-specific examples for:
6
+
7
+ - Layered architecture (routes / controllers / services / mechanics)
8
+ - Zod schema patterns for config + validation
9
+ - Logging examples (static msg + metadata)
10
+ - Alias usage and module-alias setup
11
+ - Error constants + AppError usage
12
+ - Jest testing patterns + test harness
13
+
14
+ Pull the detailed examples from reference projects (local-land-server, etc.) when you need them and adapt here.
@@ -0,0 +1,7 @@
1
+ /** @type {import('jest').Config} */
2
+ module.exports = {
3
+ testEnvironment: 'node',
4
+ testMatch: ['**/tests/**/*.test.js', '**/__tests__/**/*.js'],
5
+ collectCoverageFrom: ['src/**/*.js'],
6
+ coveragePathIgnorePatterns: ['/node_modules/'],
7
+ };
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "module": "commonjs",
4
+ "target": "es2021",
5
+ "checkJs": true,
6
+ "baseUrl": ".",
7
+ "paths": {
8
+ "@root/*": ["./*"],
9
+ "@src/*": ["src/*"],
10
+ "@config/*": ["src/config/*"],
11
+ "@constants/*": ["src/constants/*"],
12
+ "@config": ["src/config/index.js"],
13
+ "@services/*": ["src/services/*"],
14
+ "@mechanics/*": ["src/mechanics/*"],
15
+ "@utils/*": ["src/utils/*"]
16
+ }
17
+ },
18
+ "exclude": ["node_modules", "**/node_modules/*"]
19
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "$schema": "https://unpkg.com/knip@5/schema.json",
3
+ "entry": ["src/index.js"],
4
+ "project": ["src/**/*.js", "tests/**/*.js"],
5
+ "ignore": ["db/**", "migrations/**", "scripts/**"],
6
+ "ignoreExportsUsedInFile": true
7
+ }
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "description": "{{DESCRIPTION}}",
6
+ "main": "src/index.js",
7
+ "license": "UNLICENSED",
8
+ "scripts": {
9
+ "format": "prettier --write .",
10
+ "lint": "eslint .",
11
+ "prepare": "husky",
12
+ "start": "node src/index.js",
13
+ "test": "jest --verbose",
14
+ "test:coverage": "jest --coverage --verbose",
15
+ "release:patch": "node release.js patch",
16
+ "release:minor": "node release.js minor",
17
+ "release:major": "node release.js major",
18
+ "npm:reinstall": "node scripts/reinstall.js",
19
+ "prompt:gen": "node scripts/generate-context.js",
20
+ "health:dead": "knip --no-exit-code",
21
+ "health:dupes": "jscpd src || node -e \"process.exit(0)\"",
22
+ "health:circular": "madge --circular --extensions js src || node -e \"process.exit(0)\"",
23
+ "health:full": "npm-run-all --sequential health:dead health:dupes health:circular"
24
+ },
25
+ "dependencies": {
26
+ "module-alias": "^2.3.4"
27
+ },
28
+ "devDependencies": {
29
+ "cross-env": "^10.1.0",
30
+ "eslint": "^8.57.0",
31
+ "eslint-import-resolver-jsconfig": "^1.1.0",
32
+ "eslint-plugin-import": "^2.32.0",
33
+ "eslint-plugin-unused-imports": "^4.4.1",
34
+ "husky": "^9.1.7",
35
+ "jest": "^29.7.0",
36
+ "jscpd": "^4.0.0",
37
+ "knip": "^5.86.0",
38
+ "lint-staged": "^15.2.0",
39
+ "madge": "^8.0.0",
40
+ "npm-run-all": "^4.1.5",
41
+ "prettier": "^3.3.3",
42
+ "prettier-plugin-organize-imports": "^4.3.0",
43
+ "prettier-plugin-pkg": "^0.21.2"
44
+ },
45
+ "_moduleAliases": {
46
+ "@root": ".",
47
+ "@src": "src",
48
+ "@config": "src/config",
49
+ "@constants": "src/constants",
50
+ "@utils": "src/utils",
51
+ "@services": "src/services",
52
+ "@mechanics": "src/mechanics"
53
+ },
54
+ "lint-staged": {
55
+ "*.{js,json,md,yml,yaml}": "prettier --write"
56
+ },
57
+ "engines": {
58
+ "node": ">=20.19.0"
59
+ }
60
+ }