Skip to content

Commit

Permalink
Add Knip with initial custom config
Browse files Browse the repository at this point in the history
  • Loading branch information
webpro committed Sep 12, 2024
1 parent 8b16feb commit c55b7b5
Show file tree
Hide file tree
Showing 4 changed files with 246 additions and 8 deletions.
93 changes: 93 additions & 0 deletions code/knip.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import { join, relative } from 'node:path';

import fg from 'fast-glob';
import type { KnipConfig } from 'knip';
import { isMatch } from 'picomatch';

// Files we want to exclude from analysis should be negated project patterns, not `ignores`
// docs: https://knip.dev/guides/configuring-project-files
const project = [
'src/**/*.{js,jsx,ts,tsx}',
'!**/__search-files-tests__/**',
'!**/__testfixtures__/**',
'!**/__mocks-ng-workspace__/**',
'!**/__mockdata__/**',
];

// Adding an explicit MDX "compiler", as the dependency knip looks for isn't listed (@mdx-js/mdx or astro)
// Alternatively, we could ignore a few false positives
// docs: https://knip.dev/features/compilers
const importMatcher = /import[^'"]+['"]([^'"]+)['"]/g;
const fencedCodeBlockMatcher = /```[\s\S]*?```/g;
const mdx = (text: string) =>
[...text.replace(fencedCodeBlockMatcher, '').matchAll(importMatcher)].join('\n');

const baseConfig = {
ignoreWorkspaces: ['renderers/svelte'], // ignored: Error [ERR_PACKAGE_PATH_NOT_EXPORTED]: No "exports" main defined in code/node_modules/@sveltejs/vite-plugin-svelte/package.json

// storybook itself configured (only) in root
storybook: { entry: ['**/*.@(mdx|stories.@(mdx|js|jsx|mjs|ts|tsx))'] },

workspaces: {
'.': {
project,
},
'addons/*': {
project,
},
'builders/*': {
project,
},
core: {
entry: ['src/index.ts', 'src/cli/bin/index.ts', 'src/*/{globals*,index,runtime}.ts'],
project,
},
'frameworks/*': {
entry: [
// these extra entries we only need for frameworks/angular and frameworks/ember it seems
'src/index.ts',
'src/builders/{build,start}-storybook/index.ts',
'src/**/docs/{index,config}.{js,ts}',
],
project,
},
'lib/*': {
project,
},
'presets/*': {
project,
},
'renderers/*': {
project,
},
},
compilers: {
mdx,
},
} satisfies KnipConfig;

// Adds package.json#bundler.entries etc. to each workspace config `entry: []`
export const addBundlerEntries = async (config: KnipConfig) => {
const baseDir = process.cwd();
const rootManifest = await import(join(baseDir, 'package.json'));
const workspaceDirs = await fg(rootManifest.workspaces.packages, { onlyDirectories: true });
const workspaceDirectories = workspaceDirs.map((dir) => relative(baseDir, join(baseDir, dir)));
for (const wsDir of workspaceDirectories) {
for (const configKey of Object.keys(baseConfig.workspaces)) {
if (isMatch(wsDir, configKey)) {
const manifest = await import(join(baseDir, wsDir, 'package.json'));
const configEntries = config.workspaces[configKey].entry ?? [];
const bundler = manifest?.bundler;
for (const value of Object.values(bundler ?? {})) {
if (Array.isArray(value)) {
configEntries.push(...value);
}
}
config.workspaces[configKey].entry = Array.from(new Set(configEntries));
}
}
}
return config;
};

export default addBundlerEntries(baseConfig);
1 change: 1 addition & 0 deletions code/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@
"happy-dom": "^14.12.0",
"http-server": "^14.1.1",
"husky": "^4.3.7",
"knip": "^5.30.1",
"lint-staged": "^13.2.2",
"lodash": "^4.17.21",
"mock-require": "^3.0.3",
Expand Down
159 changes: 151 additions & 8 deletions code/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -4001,7 +4001,7 @@ __metadata:
languageName: node
linkType: hard

"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
"@nodelib/fs.walk@npm:1.2.8, @nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8":
version: 1.2.8
resolution: "@nodelib/fs.walk@npm:1.2.8"
dependencies:
Expand Down Expand Up @@ -5329,6 +5329,19 @@ __metadata:
languageName: node
linkType: hard

"@snyk/github-codeowners@npm:1.1.0":
version: 1.1.0
resolution: "@snyk/github-codeowners@npm:1.1.0"
dependencies:
commander: "npm:^4.1.1"
ignore: "npm:^5.1.8"
p-map: "npm:^4.0.0"
bin:
github-codeowners: dist/cli.js
checksum: 10c0/92d860a904a1e67f8563d4ac4d540cc613f71193f7968933b4a4b1526e80a97f536f52d27762c158e3e39d48c2f3db4906ec78846309351c741abb1a28653af9
languageName: node
linkType: hard

"@storybook/addon-a11y@workspace:*, @storybook/addon-a11y@workspace:addons/a11y":
version: 0.0.0-use.local
resolution: "@storybook/addon-a11y@workspace:addons/a11y"
Expand Down Expand Up @@ -6908,6 +6921,7 @@ __metadata:
happy-dom: "npm:^14.12.0"
http-server: "npm:^14.1.1"
husky: "npm:^4.3.7"
knip: "npm:^5.30.1"
lint-staged: "npm:^13.2.2"
lodash: "npm:^4.17.21"
mock-require: "npm:^3.0.3"
Expand Down Expand Up @@ -12095,6 +12109,13 @@ __metadata:
languageName: node
linkType: hard

"commander@npm:^4.1.1":
version: 4.1.1
resolution: "commander@npm:4.1.1"
checksum: 10c0/84a76c08fe6cc08c9c93f62ac573d2907d8e79138999312c92d4155bc2325d487d64d13f669b2000c9f8caf70493c1be2dac74fec3c51d5a04f8bc3ae1830bab
languageName: node
linkType: hard

"commander@npm:^5.1.0":
version: 5.1.0
resolution: "commander@npm:5.1.0"
Expand Down Expand Up @@ -13519,6 +13540,19 @@ __metadata:
languageName: node
linkType: hard

"easy-table@npm:1.2.0":
version: 1.2.0
resolution: "easy-table@npm:1.2.0"
dependencies:
ansi-regex: "npm:^5.0.1"
wcwidth: "npm:^1.0.1"
dependenciesMeta:
wcwidth:
optional: true
checksum: 10c0/2d37937cd608586ba02e1ec479f90ccec581d366b3b0d1bb26b99ee6005f8d724e32a07a873759893461ca45b99e2d08c30326529d967ce9eedc1e9b68d4aa63
languageName: node
linkType: hard

"ecdsa-sig-formatter@npm:1.0.11, ecdsa-sig-formatter@npm:^1.0.11":
version: 1.0.11
resolution: "ecdsa-sig-formatter@npm:1.0.11"
Expand Down Expand Up @@ -13826,6 +13860,16 @@ __metadata:
languageName: node
linkType: hard

"enhanced-resolve@npm:^5.17.1":
version: 5.17.1
resolution: "enhanced-resolve@npm:5.17.1"
dependencies:
graceful-fs: "npm:^4.2.4"
tapable: "npm:^2.2.0"
checksum: 10c0/81a0515675eca17efdba2cf5bad87abc91a528fc1191aad50e275e74f045b41506167d420099022da7181c8d787170ea41e4a11a0b10b7a16f6237daecb15370
languageName: node
linkType: hard

"enquirer@npm:^2.3.5":
version: 2.4.1
resolution: "enquirer@npm:2.4.1"
Expand Down Expand Up @@ -17297,6 +17341,13 @@ __metadata:
languageName: node
linkType: hard

"ignore@npm:^5.1.8":
version: 5.3.2
resolution: "ignore@npm:5.3.2"
checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337
languageName: node
linkType: hard

"image-size@npm:^1.0.0, image-size@npm:^1.1.1":
version: 1.1.1
resolution: "image-size@npm:1.1.1"
Expand Down Expand Up @@ -18365,6 +18416,15 @@ __metadata:
languageName: node
linkType: hard

"jiti@npm:^1.21.6":
version: 1.21.6
resolution: "jiti@npm:1.21.6"
bin:
jiti: bin/jiti.js
checksum: 10c0/05b9ed58cd30d0c3ccd3c98209339e74f50abd9a17e716f65db46b6a35812103f6bde6e134be7124d01745586bca8cc5dae1d0d952267c3ebe55171949c32e56
languageName: node
linkType: hard

"jju@npm:^1.4.0":
version: 1.4.0
resolution: "jju@npm:1.4.0"
Expand Down Expand Up @@ -18847,6 +18907,36 @@ __metadata:
languageName: node
linkType: hard

"knip@npm:^5.30.1":
version: 5.30.1
resolution: "knip@npm:5.30.1"
dependencies:
"@nodelib/fs.walk": "npm:1.2.8"
"@snyk/github-codeowners": "npm:1.1.0"
easy-table: "npm:1.2.0"
enhanced-resolve: "npm:^5.17.1"
fast-glob: "npm:^3.3.2"
jiti: "npm:^1.21.6"
js-yaml: "npm:^4.1.0"
minimist: "npm:^1.2.8"
picocolors: "npm:^1.0.0"
picomatch: "npm:^4.0.1"
pretty-ms: "npm:^9.0.0"
smol-toml: "npm:^1.1.4"
strip-json-comments: "npm:5.0.1"
summary: "npm:2.1.0"
zod: "npm:^3.22.4"
zod-validation-error: "npm:^3.0.3"
peerDependencies:
"@types/node": ">=18"
typescript: ">=5.0.4"
bin:
knip: bin/knip.js
knip-bun: bin/knip-bun.js
checksum: 10c0/1c470266d7967dad0f2fb1b1f6c8a797bc7bea6c1f0021c52dce40e067ae87217eb17ff11a4164e3a5244bf3d0672f9e8678e4c3898260c48b9c020132ebb29a
languageName: node
linkType: hard

"language-subtag-registry@npm:^0.3.20":
version: 0.3.22
resolution: "language-subtag-registry@npm:0.3.22"
Expand Down Expand Up @@ -22404,6 +22494,13 @@ __metadata:
languageName: node
linkType: hard

"parse-ms@npm:^4.0.0":
version: 4.0.0
resolution: "parse-ms@npm:4.0.0"
checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16
languageName: node
linkType: hard

"parse-node-version@npm:^1.0.1":
version: 1.0.1
resolution: "parse-node-version@npm:1.0.1"
Expand Down Expand Up @@ -22693,6 +22790,13 @@ __metadata:
languageName: node
linkType: hard

"picomatch@npm:^4.0.1":
version: 4.0.2
resolution: "picomatch@npm:4.0.2"
checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc
languageName: node
linkType: hard

"pidtree@npm:0.6.0":
version: 0.6.0
resolution: "pidtree@npm:0.6.0"
Expand Down Expand Up @@ -23227,6 +23331,15 @@ __metadata:
languageName: node
linkType: hard

"pretty-ms@npm:^9.0.0":
version: 9.1.0
resolution: "pretty-ms@npm:9.1.0"
dependencies:
parse-ms: "npm:^4.0.0"
checksum: 10c0/fd111aad8800a04dfd654e6016da69bdaa6fc6a4c280f8e727cffd8b5960558e94942f1a94d4aa6e4d179561a0fbb0366a9ebe0ccefbbb0f8ff853b129cdefb9
languageName: node
linkType: hard

"prettyjson@npm:^1.2.1":
version: 1.2.5
resolution: "prettyjson@npm:1.2.5"
Expand Down Expand Up @@ -25869,6 +25982,13 @@ __metadata:
languageName: node
linkType: hard

"smol-toml@npm:^1.1.4":
version: 1.3.0
resolution: "smol-toml@npm:1.3.0"
checksum: 10c0/442b4d033236ff6dd05bf91d57695fd9070a8221af080a5b2782cb2d9fad8bc31f698c61de5308a351907c1200202ba3ee51d52c5704f5349149e7c374f5fe90
languageName: node
linkType: hard

"snapdragon-node@npm:^2.0.1":
version: 2.1.1
resolution: "snapdragon-node@npm:2.1.1"
Expand Down Expand Up @@ -26546,20 +26666,20 @@ __metadata:
languageName: node
linkType: hard

"strip-json-comments@npm:5.0.1, strip-json-comments@npm:^5.0.1":
version: 5.0.1
resolution: "strip-json-comments@npm:5.0.1"
checksum: 10c0/c9d9d55a0167c57aa688df3aa20628cf6f46f0344038f189eaa9d159978e80b2bfa6da541a40d83f7bde8a3554596259bf6b70578b2172356536a0e3fa5a0982
languageName: node
linkType: hard

"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1":
version: 3.1.1
resolution: "strip-json-comments@npm:3.1.1"
checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd
languageName: node
linkType: hard

"strip-json-comments@npm:^5.0.1":
version: 5.0.1
resolution: "strip-json-comments@npm:5.0.1"
checksum: 10c0/c9d9d55a0167c57aa688df3aa20628cf6f46f0344038f189eaa9d159978e80b2bfa6da541a40d83f7bde8a3554596259bf6b70578b2172356536a0e3fa5a0982
languageName: node
linkType: hard

"strong-log-transformer@npm:^2.1.0":
version: 2.1.0
resolution: "strong-log-transformer@npm:2.1.0"
Expand Down Expand Up @@ -26646,6 +26766,13 @@ __metadata:
languageName: node
linkType: hard

"summary@npm:2.1.0":
version: 2.1.0
resolution: "summary@npm:2.1.0"
checksum: 10c0/2743c1f940fb303c496ef1b085e654704a6c16872957b6b76648c34bd32c8f0b7a3c5ec4e0f8bfb71dcb8473e34d172fef31026b85562af589cf220aa901698d
languageName: node
linkType: hard

"supports-color@npm:^5.0.0, supports-color@npm:^5.3.0":
version: 5.5.0
resolution: "supports-color@npm:5.5.0"
Expand Down Expand Up @@ -29733,6 +29860,22 @@ __metadata:
languageName: node
linkType: hard

"zod-validation-error@npm:^3.0.3":
version: 3.3.1
resolution: "zod-validation-error@npm:3.3.1"
peerDependencies:
zod: ^3.18.0
checksum: 10c0/53869a8478f42cd38f51e159431fe7af9e0b456e8078c6d9d906adb212753788defa9c8bd7374e9ecd4a688b6736fcfa091aebac65054328b8cfdecce9395d8e
languageName: node
linkType: hard

"zod@npm:^3.22.4":
version: 3.23.8
resolution: "zod@npm:3.23.8"
checksum: 10c0/8f14c87d6b1b53c944c25ce7a28616896319d95bc46a9660fe441adc0ed0a81253b02b5abdaeffedbeb23bdd25a0bf1c29d2c12dd919aef6447652dd295e3e69
languageName: node
linkType: hard

"zone.js@npm:^0.14.2":
version: 0.14.2
resolution: "zone.js@npm:0.14.2"
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
"get-template": "cd scripts; yarn get-template",
"i": "yarn --cwd scripts && yarn --cwd code",
"lint": "cd code; yarn lint",
"knip": "cd code; yarn knip",
"nx": "cd code; yarn nx",
"pretty-docs": "cd scripts; yarn install >/dev/null; yarn docs:prettier:write",
"start": "yarn task --task dev --template react-vite/default-ts --start-from=install",
Expand Down

0 comments on commit c55b7b5

Please sign in to comment.