pure-index
Advanced tools
Comparing version
@@ -8,4 +8,17 @@ --- | ||
## 1.0.5 | ||
### Changed | ||
- build with [tsup](https://tsup.egoist.dev) | ||
- reduce package size | ||
### Fixed | ||
- typo in documentation | ||
## 1.0.4 | ||
### Changed | ||
- bump deps | ||
@@ -15,2 +28,4 @@ | ||
### Changed | ||
- bump @swc/core | ||
@@ -17,0 +32,0 @@ |
@@ -1,76 +0,1 @@ | ||
import { | ||
Err, | ||
ObservableSet, | ||
Ok, | ||
collectUsages, | ||
findUnusedExports, | ||
mergeConfig, | ||
readJSON | ||
} from "../chunk-USJVCAV7.js"; | ||
// src/api/collectUsages.ts | ||
var collectUsages2 = async (name, list) => { | ||
const tasks = list.map( | ||
(x) => collectUsages({ | ||
// @ts-expect-error 123 | ||
config: mergeConfig({ | ||
...x, | ||
collectUsages: name | ||
}) | ||
}) | ||
); | ||
const result = await Promise.all(tasks); | ||
const mergedUsages = result.reduce((acc, x) => { | ||
if (x.ok) { | ||
acc = acc.concat([...x.val.usages]); | ||
} | ||
return acc; | ||
}, []); | ||
return mergedUsages.length === 0 ? Err({ usages: /* @__PURE__ */ new Set() }) : Ok({ usages: new Set(mergedUsages) }); | ||
}; | ||
// src/api/findUnusedExports.ts | ||
import { join } from "node:path"; | ||
var SUCCESS = Ok({ exports: /* @__PURE__ */ new Set() }); | ||
var mergeUnusedExports = (list) => { | ||
const sets = list.reduce( | ||
(acc, res) => { | ||
if (!res.ok) { | ||
acc.push(res.err.exports); | ||
} | ||
return acc; | ||
}, | ||
[] | ||
); | ||
const smallestSet = sets.reduce((acc, set) => set.size < acc.size ? set : acc, sets[0]); | ||
const unused = [...smallestSet].filter((exp) => sets.every((set) => set.has(exp))); | ||
return unused.length === 0 ? SUCCESS : Err({ reason: "unused_exports", exports: new ObservableSet(unused) }); | ||
}; | ||
var findUnusedExports2 = async ({ entry, location = "" }, list) => { | ||
const { name } = await readJSON(join(location, "package.json")); | ||
const pkg = { name, path: join(location, entry) }; | ||
const tasks = list.map( | ||
(x) => findUnusedExports({ | ||
pkg, | ||
config: mergeConfig(x) | ||
}) | ||
); | ||
const result = await Promise.all(tasks); | ||
if (result.some((x) => x.ok)) { | ||
return SUCCESS; | ||
} | ||
const [head] = result; | ||
const noExports = !head.ok && head.err.reason === "no_exports"; | ||
if (noExports) { | ||
return head; | ||
} | ||
const noImports = result.every((x) => !x.ok && x.err.reason === "no_imports"); | ||
if (noImports) { | ||
return head; | ||
} | ||
return mergeUnusedExports(result); | ||
}; | ||
export { | ||
collectUsages2 as collectUsages, | ||
findUnusedExports2 as findUnusedExports | ||
}; | ||
import{a as g,b as u,e as f,f as m,h as c,j as l,k as d}from"../chunk-VBIMTB6Y.js";var y=async(n,t)=>{let i=t.map(e=>l({config:c({...e,collectUsages:n})})),r=(await Promise.all(i)).reduce((e,s)=>(s.ok&&(e=e.concat([...s.val.usages])),e),[]);return r.length===0?m({usages:new Set}):f({usages:new Set(r)})};import{join as x}from"node:path";var E=f({exports:new Set}),k=n=>{let t=n.reduce((r,e)=>(e.ok||r.push(e.err.exports),r),[]),a=[...t.reduce((r,e)=>e.size<r.size?e:r,t[0])].filter(r=>t.every(e=>e.has(r)));return a.length===0?E:m({reason:"unused_exports",exports:new g(a)})},C=async({entry:n,location:t=""},i)=>{let{name:a}=await u(x(t,"package.json")),r={name:a,path:x(t,n)},e=i.map(o=>d({pkg:r,config:c(o)})),s=await Promise.all(e);if(s.some(o=>o.ok))return E;let[p]=s;return!p.ok&&p.err.reason==="no_exports"||s.every(o=>!o.ok&&o.err.reason==="no_imports")?p:k(s)};export{y as collectUsages,C as findUnusedExports}; |
#!/usr/bin/env node | ||
import { | ||
collectUsages, | ||
createSpinner, | ||
findUnusedExports, | ||
getConfig, | ||
printError, | ||
printSet, | ||
readJSON | ||
} from "../chunk-USJVCAV7.js"; | ||
// src/bin/collectUsages.ts | ||
var collectUsages2 = async ({ config: config2 }) => { | ||
const pkgName = config2.collectUsages; | ||
const spinner = createSpinner(`Collecting usages of ${pkgName}`); | ||
const result = await collectUsages({ config: config2 }); | ||
if (result.ok) { | ||
spinner.success(); | ||
printSet(result.val.usages); | ||
process.exit(0); | ||
} | ||
spinner.error(); | ||
printError({ | ||
text: `Nothing is used from ${pkgName}. Remove it.` | ||
}); | ||
process.exit(1); | ||
}; | ||
// src/bin/findUnusedExports.ts | ||
var findUnusedExports2 = async ({ config: config2 }) => { | ||
const { name } = await readJSON("package.json"); | ||
const pkg = { name, path: config2.entry }; | ||
const spinner = createSpinner(`Checking exports from the ${pkg.name} package`); | ||
const result = await findUnusedExports({ pkg, config: config2 }); | ||
if (result.ok) { | ||
spinner.success(); | ||
process.exit(0); | ||
} | ||
spinner.error(); | ||
switch (result.err.reason) { | ||
case "no_exports": | ||
printError({ | ||
text: `Nothing is exported from ${pkg.name}. Remove it.` | ||
}); | ||
break; | ||
case "no_imports": | ||
printError({ | ||
text: `Nothing is imported from ${pkg.name}. Remove it.` | ||
}); | ||
break; | ||
case "unused_exports": | ||
printError({ | ||
text: `Unused exports in ${pkg.name} package found`, | ||
set: result.err.exports | ||
}); | ||
} | ||
process.exit(1); | ||
}; | ||
// src/bin/index.ts | ||
var config = await getConfig(); | ||
if (config.collectUsages) { | ||
await collectUsages2({ config }); | ||
} | ||
await findUnusedExports2({ config }); | ||
import{b as c,c as p,d as o,g as n,i as m,j as f,k as g}from"../chunk-VBIMTB6Y.js";var x=async({config:t})=>{let r=t.collectUsages,e=n(`Collecting usages of ${r}`),s=await f({config:t});s.ok&&(e.success(),p(s.val.usages),process.exit(0)),e.error(),o({text:`Nothing is used from ${r}. Remove it.`}),process.exit(1)};var l=async({config:t})=>{let{name:r}=await c("package.json"),e={name:r,path:t.entry},s=n(`Checking exports from the ${e.name} package`),a=await g({pkg:e,config:t});switch(a.ok&&(s.success(),process.exit(0)),s.error(),a.err.reason){case"no_exports":o({text:`Nothing is exported from ${e.name}. Remove it.`});break;case"no_imports":o({text:`Nothing is imported from ${e.name}. Remove it.`});break;case"unused_exports":o({text:`Unused exports in ${e.name} package found`,set:a.err.exports})}process.exit(1)};var i=await m();i.collectUsages&&await x({config:i});await l({config:i}); |
{ | ||
"name": "pure-index", | ||
"type": "module", | ||
"version": "1.0.5-next.0", | ||
"version": "1.0.5", | ||
"description": "Pure Index is a tool for packages. It helps to clean your packages of unused exports with ease.", | ||
@@ -14,3 +14,3 @@ "main": "./dist/api/index.js", | ||
"scripts": { | ||
"build": "tsup-node ./src/bin/index.ts ./src/api/index.ts --format esm", | ||
"build": "make build", | ||
"prepublishOnly": "make prepublishOnly", | ||
@@ -33,3 +33,2 @@ "test": "vitest" | ||
"effector": "23.1.0", | ||
"esbuild": "0.19.12", | ||
"prettier": "3.2.4", | ||
@@ -36,0 +35,0 @@ "tsc-alias": "1.8.8", |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Minified code
QualityThis package contains minified code. This may be harmless in some cases where minified code is included in packaged libraries, however packages on npm should not minify code.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
8
-11.11%15145
-42.5%9
-10%148
-74.35%