@ploaness/config 1.0.0
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/LICENSE +21 -0
- package/README.md +13 -0
- package/biome-core.json +128 -0
- package/biome.json +12 -0
- package/dependency-cruiser-core.json +59 -0
- package/dependency-cruiser.json +32 -0
- package/dist/a11y.d.ts +3 -0
- package/dist/a11y.d.ts.map +1 -0
- package/dist/a11y.js +9 -0
- package/dist/a11y.js.map +1 -0
- package/dist/access.d.ts +4 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +4 -0
- package/dist/access.js.map +1 -0
- package/dist/eslint-core.d.ts +167 -0
- package/dist/eslint-core.d.ts.map +1 -0
- package/dist/eslint-core.js +698 -0
- package/dist/eslint-core.js.map +1 -0
- package/dist/eslint-library.d.ts +3 -0
- package/dist/eslint-library.d.ts.map +1 -0
- package/dist/eslint-library.js +53 -0
- package/dist/eslint-library.js.map +1 -0
- package/dist/eslint.d.ts +3 -0
- package/dist/eslint.d.ts.map +1 -0
- package/dist/eslint.js +261 -0
- package/dist/eslint.js.map +1 -0
- package/dist/playwright.d.ts +3 -0
- package/dist/playwright.d.ts.map +1 -0
- package/dist/playwright.js +108 -0
- package/dist/playwright.js.map +1 -0
- package/dist/project-settings.d.ts +3 -0
- package/dist/project-settings.d.ts.map +1 -0
- package/dist/project-settings.js +23 -0
- package/dist/project-settings.js.map +1 -0
- package/dist/vitest-core.d.ts +90 -0
- package/dist/vitest-core.d.ts.map +1 -0
- package/dist/vitest-core.js +101 -0
- package/dist/vitest-core.js.map +1 -0
- package/dist/vitest-library.d.ts +3 -0
- package/dist/vitest-library.d.ts.map +1 -0
- package/dist/vitest-library.js +37 -0
- package/dist/vitest-library.js.map +1 -0
- package/dist/vitest-setup.d.ts +2 -0
- package/dist/vitest-setup.d.ts.map +1 -0
- package/dist/vitest-setup.js +150 -0
- package/dist/vitest-setup.js.map +1 -0
- package/dist/vitest.d.ts +3 -0
- package/dist/vitest.d.ts.map +1 -0
- package/dist/vitest.js +117 -0
- package/dist/vitest.js.map +1 -0
- package/knip.json +5 -0
- package/package.json +117 -0
- package/pins.json +52 -0
- package/stylelint.json +49 -0
- package/tsconfig-core.json +34 -0
- package/tsconfig.json +11 -0
package/package.json
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ploaness/config",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Analyzer and tool configurations owned by ploaness: ESLint, Biome, TypeScript, Vitest, Stylelint, dependency-cruiser, knip.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Herman Ciechanowiec <herman@ciechanowiec.eu>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/ciechanowiec/ploaness.git",
|
|
10
|
+
"directory": "packages/config"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://github.com/ciechanowiec/ploaness#readme",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/ciechanowiec/ploaness/issues"
|
|
15
|
+
},
|
|
16
|
+
"type": "module",
|
|
17
|
+
"exports": {
|
|
18
|
+
"./eslint": {
|
|
19
|
+
"types": "./dist/eslint.d.ts",
|
|
20
|
+
"default": "./dist/eslint.js"
|
|
21
|
+
},
|
|
22
|
+
"./vitest": {
|
|
23
|
+
"types": "./dist/vitest.d.ts",
|
|
24
|
+
"default": "./dist/vitest.js"
|
|
25
|
+
},
|
|
26
|
+
"./biome": "./biome.json",
|
|
27
|
+
"./tsconfig": "./tsconfig.json",
|
|
28
|
+
"./stylelint": "./stylelint.json",
|
|
29
|
+
"./dependency-cruiser": "./dependency-cruiser.json",
|
|
30
|
+
"./knip": "./knip.json",
|
|
31
|
+
"./package.json": "./package.json",
|
|
32
|
+
"./eslint-core": {
|
|
33
|
+
"types": "./dist/eslint-core.d.ts",
|
|
34
|
+
"default": "./dist/eslint-core.js"
|
|
35
|
+
},
|
|
36
|
+
"./vitest-core": {
|
|
37
|
+
"types": "./dist/vitest-core.d.ts",
|
|
38
|
+
"default": "./dist/vitest-core.js"
|
|
39
|
+
},
|
|
40
|
+
"./playwright": {
|
|
41
|
+
"types": "./dist/playwright.d.ts",
|
|
42
|
+
"default": "./dist/playwright.js"
|
|
43
|
+
},
|
|
44
|
+
"./a11y": {
|
|
45
|
+
"types": "./dist/a11y.d.ts",
|
|
46
|
+
"default": "./dist/a11y.js"
|
|
47
|
+
},
|
|
48
|
+
"./access": {
|
|
49
|
+
"types": "./dist/access.d.ts",
|
|
50
|
+
"default": "./dist/access.js"
|
|
51
|
+
},
|
|
52
|
+
"./pins": "./pins.json",
|
|
53
|
+
"./biome-core": "./biome-core.json",
|
|
54
|
+
"./tsconfig-core": "./tsconfig-core.json",
|
|
55
|
+
"./tsconfig-core.json": "./tsconfig-core.json",
|
|
56
|
+
"./eslint-library": {
|
|
57
|
+
"types": "./dist/eslint-library.d.ts",
|
|
58
|
+
"default": "./dist/eslint-library.js"
|
|
59
|
+
},
|
|
60
|
+
"./vitest-library": {
|
|
61
|
+
"types": "./dist/vitest-library.d.ts",
|
|
62
|
+
"default": "./dist/vitest-library.js"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"files": [
|
|
66
|
+
"dist",
|
|
67
|
+
"biome.json",
|
|
68
|
+
"dependency-cruiser-core.json",
|
|
69
|
+
"dependency-cruiser.json",
|
|
70
|
+
"knip.json",
|
|
71
|
+
"pins.json",
|
|
72
|
+
"stylelint.json",
|
|
73
|
+
"tsconfig.json",
|
|
74
|
+
"biome-core.json",
|
|
75
|
+
"tsconfig-core.json"
|
|
76
|
+
],
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@axe-core/playwright": "4.13.0",
|
|
79
|
+
"@eslint-community/eslint-plugin-eslint-comments": "4.7.2",
|
|
80
|
+
"@eslint/js": "10.0.1",
|
|
81
|
+
"@playwright/test": "1.62.1",
|
|
82
|
+
"@ploaness/governance": "1.0.0",
|
|
83
|
+
"@testing-library/jest-dom": "7.0.1",
|
|
84
|
+
"@testing-library/react": "16.3.3",
|
|
85
|
+
"@testing-library/user-event": "14.6.6",
|
|
86
|
+
"@vitejs/plugin-react": "6.1.1",
|
|
87
|
+
"@vitest/eslint-plugin": "1.6.27",
|
|
88
|
+
"eslint": "10.9.1",
|
|
89
|
+
"eslint-config-prettier": "10.1.8",
|
|
90
|
+
"eslint-plugin-functional": "10.0.0",
|
|
91
|
+
"eslint-plugin-jsdoc": "64.2.1",
|
|
92
|
+
"eslint-plugin-jsx-a11y": "6.10.2",
|
|
93
|
+
"eslint-plugin-regexp": "3.2.0",
|
|
94
|
+
"eslint-plugin-sonarjs": "4.2.0",
|
|
95
|
+
"eslint-plugin-testing-library": "7.16.2",
|
|
96
|
+
"eslint-plugin-unicorn": "73.0.0",
|
|
97
|
+
"fast-check": "4.9.0",
|
|
98
|
+
"globals": "17.11.0",
|
|
99
|
+
"jsdom": "30.0.1",
|
|
100
|
+
"stylelint-config-standard": "40.0.0",
|
|
101
|
+
"typescript-eslint": "8.68.0",
|
|
102
|
+
"vitest": "4.1.11"
|
|
103
|
+
},
|
|
104
|
+
"engines": {
|
|
105
|
+
"node": ">=26"
|
|
106
|
+
},
|
|
107
|
+
"publishConfig": {
|
|
108
|
+
"access": "public"
|
|
109
|
+
},
|
|
110
|
+
"devDependencies": {
|
|
111
|
+
"@types/node": "26.4.0",
|
|
112
|
+
"typescript": "6.0.3"
|
|
113
|
+
},
|
|
114
|
+
"scripts": {
|
|
115
|
+
"build": "tsc --build tsconfig.build.json"
|
|
116
|
+
}
|
|
117
|
+
}
|
package/pins.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Everything ploaness pins that it cannot pin by declaring a dependency. A pinned analyzer is a real dependency of a ploaness package, so its version has exactly one source; nothing here can be, because ploaness imports none of it and declaring it would install a second Payload, Next, React, or set of type definitions into a project that already has one - and two copies of @types/react in a single tree is not merely waste, it is a class of type error that reads as the project's fault. This file is that one source instead. It is data rather than code: a group carries the rule that applies to it, so adding one needs no change anywhere else.",
|
|
3
|
+
"$required": "A group states the member KINDS that must declare it. A kind is derived from what a package declares - Payload, or Next, or neither - never from what it says about itself. The split matters because a workspace holds packages that are not all applications: requiring a shared library to declare Payload would manufacture a dependency the dead-code gate then rightly reports as unused, and requiring a Next frontend to declare Payload would make ploaness dictate an architecture rather than a version. A group required by no kind is matched when a package declares it and forced on nobody, which is how ploaness owns the version of a Postgres driver without deciding that every governed project uses Postgres.",
|
|
4
|
+
"packageManager": "pnpm@11.9.0",
|
|
5
|
+
"$engines": "Only `node` is stated here. The pnpm entry is derived from `packageManager` above, because Corepack reads one field and an installer reads the other and two literals for one version will not stay equal - these two had already stopped agreeing in meaning, an exact `pnpm@11.9.0` beside a `>=11` floor.",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=26"
|
|
8
|
+
},
|
|
9
|
+
"groups": [
|
|
10
|
+
{
|
|
11
|
+
"name": "payload",
|
|
12
|
+
"requiredFor": ["payload"],
|
|
13
|
+
"why": "The Payload application itself, and the two packages Payload declares as peers. Only a member that IS a Payload application needs any of them; a frontend reading that application over HTTP needs none.",
|
|
14
|
+
"versions": {
|
|
15
|
+
"payload": "3.88.0",
|
|
16
|
+
"sharp": "0.35.4",
|
|
17
|
+
"graphql": "16.14.2"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"name": "web",
|
|
22
|
+
"requiredFor": ["payload", "application"],
|
|
23
|
+
"why": "What any Next application renders with, whether or not Payload is mounted inside it. A public frontend has the same build, the same client bundle and the same React version to agree about.",
|
|
24
|
+
"versions": {
|
|
25
|
+
"next": "16.3.3",
|
|
26
|
+
"react": "19.2.8",
|
|
27
|
+
"react-dom": "19.2.8",
|
|
28
|
+
"@types/react": "19.2.18",
|
|
29
|
+
"@types/react-dom": "19.2.5"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"name": "runtime-types",
|
|
34
|
+
"requiredFor": ["payload", "application", "library"],
|
|
35
|
+
"why": "The definitions describing the runtime every governed package compiles against. Pinned for the toolchain's reason rather than the framework's: a type package is an input to tsc, so a patch release changes what type-checks while the project stays unchanged.",
|
|
36
|
+
"versions": {
|
|
37
|
+
"@types/node": "26.4.0"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"name": "ecosystem",
|
|
42
|
+
"why": "Packages a Payload project commonly reaches for, none of which every project needs: a database driver and its types, a loader for .env, a cross-platform way to set a variable in a package script, and the bundler a project reaches for when it runs Storybook or a Vite build. ploaness owns the version of each so no two governed projects disagree about one, and forces none of them on a project that has no use for it. Being popular is not what earns a place here, or this list would become a catalogue of every library a project might like: a package belongs when its version can change what a gate decides, or when a second copy of it in one tree is a defect rather than waste. `vite` is the clearest case of the second. ploaness's own vitest and React plugin resolve a vite of their own, so a project declaring a different one installs two - and @vitejs/plugin-react declares vite as a PEER, which makes the mismatch a loading failure rather than mere duplication. ploaness cannot close that by declaring vite itself, because under the strict layout a project's own build cannot reach ploaness's copy; only the project can declare the instance its build loads, which is exactly what a pin is for.",
|
|
43
|
+
"versions": {
|
|
44
|
+
"pg": "8.23.0",
|
|
45
|
+
"@types/pg": "8.23.1",
|
|
46
|
+
"dotenv": "17.4.2",
|
|
47
|
+
"cross-env": "10.1.0",
|
|
48
|
+
"vite": "8.2.2"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
package/stylelint.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": ["stylelint-config-standard"],
|
|
3
|
+
"ignoreFiles": ["coverage/**", ".next/**", "node_modules/**"],
|
|
4
|
+
"defaultSeverity": "error",
|
|
5
|
+
"reportDescriptionlessDisables": true,
|
|
6
|
+
"reportNeedlessDisables": true,
|
|
7
|
+
"reportInvalidScopeDisables": true,
|
|
8
|
+
"$comment": "at-rule-no-unknown lists the Tailwind v4 at-rules because they are a CSS dialect a Payload project may legitimately be written in, not a carve-out for one repository's files. A project that uses no Tailwind never writes one, so the list costs it nothing, and a typo such as @theem still fails. The whole list is named rather than the subset one project happened to need: a missing entry sends the next project back to a config file it is not allowed to own, which is the wall this list exists to remove. import-notation follows for the same reason and is not a relaxation - Tailwind v4 mandates the string form (@import \"tailwindcss\"), so the url form the standard config wants cannot be written at all; the rule still enforces one notation, and the one it enforces is now the one that can exist. lightness-notation and hue-degree-notation are set to the NUMBER form rather than turned off, for the same reason the at-rules above are listed: ploaness admits Tailwind deliberately, and the generator most Tailwind projects theme with writes oklch(1 0 0) rather than oklch(100% 0deg). Demanding the percentage form failed every such project on CSS it never hand-wrote. One notation is still enforced; it is now the one that can actually exist. selector-id-pattern keeps kebab-case for every id a project names and admits the double-underscore roots a framework mounts into - Next renders #__next, and a stylesheet that has to reach it cannot rename it. Turning the rule off would have surrendered the ids a project does choose.",
|
|
9
|
+
"rules": {
|
|
10
|
+
"at-rule-no-unknown": [
|
|
11
|
+
true,
|
|
12
|
+
{
|
|
13
|
+
"ignoreAtRules": [
|
|
14
|
+
"apply",
|
|
15
|
+
"config",
|
|
16
|
+
"custom-variant",
|
|
17
|
+
"plugin",
|
|
18
|
+
"reference",
|
|
19
|
+
"slot",
|
|
20
|
+
"source",
|
|
21
|
+
"tailwind",
|
|
22
|
+
"theme",
|
|
23
|
+
"utility",
|
|
24
|
+
"variant"
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
"import-notation": "string",
|
|
29
|
+
"selector-pseudo-class-no-unknown": [
|
|
30
|
+
true,
|
|
31
|
+
{
|
|
32
|
+
"ignorePseudoClasses": ["global", "local"]
|
|
33
|
+
}
|
|
34
|
+
],
|
|
35
|
+
"custom-property-pattern": null,
|
|
36
|
+
"selector-class-pattern": null,
|
|
37
|
+
"no-descending-specificity": null,
|
|
38
|
+
"rule-empty-line-before": null,
|
|
39
|
+
"at-rule-empty-line-before": null,
|
|
40
|
+
"comment-empty-line-before": null,
|
|
41
|
+
"declaration-empty-line-before": null,
|
|
42
|
+
"custom-property-empty-line-before": null,
|
|
43
|
+
"declaration-block-single-line-max-declarations": null,
|
|
44
|
+
"value-keyword-case": null,
|
|
45
|
+
"lightness-notation": "number",
|
|
46
|
+
"hue-degree-notation": "number",
|
|
47
|
+
"selector-id-pattern": "^(__[a-zA-Z0-9]+|[a-z][a-z0-9]*(-[a-z0-9]+)*)$"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Every compiler setting ploaness owns, with nothing that assumes a framework. The sibling tsconfig.json adds the Next language-service plugin and nothing else, so a member with no Next application inherits the identical strictness rather than a second copy of it that could drift.",
|
|
3
|
+
"$comment-types": "A member extending this one runs on node and nothing else - ploaness requires node 26 and ESM - so it is told so. Left unset, a tooling member could not compile `import { readFileSync } from 'node:fs'`: automatic @types discovery does not reach the package under pnpm's layout, and a Next member never noticed because next-env.d.ts pulls the node types in behind it. ploaness declares exactly this in every one of its own package tsconfigs and did not ship it.",
|
|
4
|
+
"compilerOptions": {
|
|
5
|
+
"types": ["node"],
|
|
6
|
+
"lib": ["DOM", "DOM.Iterable", "ES2022"],
|
|
7
|
+
"allowJs": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"strict": true,
|
|
10
|
+
"noEmit": true,
|
|
11
|
+
"esModuleInterop": true,
|
|
12
|
+
"module": "esnext",
|
|
13
|
+
"moduleResolution": "bundler",
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"isolatedModules": true,
|
|
16
|
+
"jsx": "react-jsx",
|
|
17
|
+
"incremental": true,
|
|
18
|
+
"noImplicitOverride": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true,
|
|
20
|
+
"noImplicitReturns": true,
|
|
21
|
+
"useUnknownInCatchVariables": true,
|
|
22
|
+
"allowUnreachableCode": false,
|
|
23
|
+
"allowUnusedLabels": false,
|
|
24
|
+
"forceConsistentCasingInFileNames": true,
|
|
25
|
+
"noUnusedLocals": true,
|
|
26
|
+
"noUnusedParameters": true,
|
|
27
|
+
"noUncheckedIndexedAccess": true,
|
|
28
|
+
"exactOptionalPropertyTypes": true,
|
|
29
|
+
"noPropertyAccessFromIndexSignature": true,
|
|
30
|
+
"noUncheckedSideEffectImports": true,
|
|
31
|
+
"verbatimModuleSyntax": true,
|
|
32
|
+
"target": "ES2022"
|
|
33
|
+
}
|
|
34
|
+
}
|
package/tsconfig.json
ADDED