Comparing version 0.0.4 to 0.1.0
@@ -58,20 +58,29 @@ 'use strict'; | ||
var __defProp = Object.defineProperty; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __getOwnPropSymbols = Object.getOwnPropertySymbols; | ||
var __propIsEnum = Object.prototype.propertyIsEnumerable; | ||
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {enumerable: true, configurable: true, writable: true, value}) : obj[key] = value; | ||
var __assign = (a, b) => { | ||
for (var prop in b || (b = {})) | ||
if (__hasOwnProp.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
if (__getOwnPropSymbols) | ||
for (var prop of __getOwnPropSymbols(b)) { | ||
if (__propIsEnum.call(b, prop)) | ||
__defNormalProp(a, prop, b[prop]); | ||
function validateDependencies(ctx) { | ||
const usedDependencies = new Set(); | ||
const unusedDependencies = new Set(Object.keys(ctx.pkg.dependencies || {})); | ||
const implicitDependnecies = new Set(); | ||
for (const id of ctx.usedImports) { | ||
unusedDependencies.delete(id); | ||
usedDependencies.add(id); | ||
} | ||
if (Array.isArray(ctx.dependencies)) { | ||
for (const id of ctx.dependencies) { | ||
unusedDependencies.delete(id); | ||
} | ||
return a; | ||
}; | ||
} | ||
for (const id of usedDependencies) { | ||
if (!ctx.externals.includes(id) && !id.startsWith("chunks/") && !ctx.externals.includes(id.split("/")[0])) { | ||
implicitDependnecies.add(id); | ||
} | ||
} | ||
if (unusedDependencies.size) { | ||
consola__default['default'].warn("Potential unused dependencies found:", Array.from(unusedDependencies).map((id) => chalk__default['default'].cyan(id)).join(", ")); | ||
} | ||
if (implicitDependnecies.size) { | ||
consola__default['default'].warn("Potential implicit dependencies found:", Array.from(implicitDependnecies).map((id) => chalk__default['default'].cyan(id)).join(", ")); | ||
} | ||
} | ||
async function rollupBuild(ctx) { | ||
var _a; | ||
if (ctx.stub) { | ||
@@ -88,5 +97,6 @@ for (const entry of ctx.entries.filter((entry2) => entry2.builder === "rollup")) { | ||
const rollupOptions = getRollupOptions(ctx); | ||
if (!((_a = rollupOptions.input) == null ? void 0 : _a.length)) { | ||
if (!Object.keys(rollupOptions.input).length) { | ||
return; | ||
} | ||
console.log(ctx.externals); | ||
const buildResult = await rollup.rollup(rollupOptions); | ||
@@ -112,5 +122,6 @@ const allOutputOptions = rollupOptions.output; | ||
const typesBuild = await rollup.rollup(rollupOptions); | ||
await typesBuild.write(__assign(__assign({}, allOutputOptions[0]), { | ||
entryFileNames: "[name].d.ts" | ||
})); | ||
await typesBuild.write({ | ||
dir: upath.resolve(ctx.rootDir, ctx.outDir), | ||
format: "esm" | ||
}); | ||
} | ||
@@ -121,3 +132,3 @@ function getRollupOptions(ctx) { | ||
context: ctx.rootDir, | ||
input: ctx.entries.filter((entry) => entry.builder === "rollup").map((entry) => upath.resolve(ctx.rootDir, entry.input)), | ||
input: Object.fromEntries(ctx.entries.filter((entry) => entry.builder === "rollup").map((entry) => [entry.name, upath.resolve(ctx.rootDir, entry.input)])), | ||
output: [ | ||
@@ -180,2 +191,4 @@ { | ||
const schema = untyped.resolveSchema(srcConfig, defaults); | ||
await promises.mkdir(upath.dirname(genDir)).catch(() => { | ||
}); | ||
await promises.mkdir(genDir).catch(() => { | ||
@@ -217,3 +230,8 @@ }); | ||
const _require = jiti__default['default'](rootDir); | ||
const buildConfig = _require("./build.config").default; | ||
let buildConfigFile; | ||
try { | ||
buildConfigFile = _require.resolve("./build.config"); | ||
} catch (e) { | ||
} | ||
const buildConfig = buildConfigFile ? _require("./build.config").default : {}; | ||
const pkg = _require("./package.json"); | ||
@@ -230,2 +248,3 @@ const ctx = defu__default['default'](buildConfig, { | ||
untyped: void 0, | ||
clean: true, | ||
stub, | ||
@@ -237,3 +256,3 @@ buildEntries: [], | ||
for (const entry of ctx.entries) { | ||
if (!entry.name) { | ||
if (typeof entry.name !== "string") { | ||
entry.name = upath.basename(entry.input); | ||
@@ -258,11 +277,13 @@ } | ||
} | ||
const outDir = upath.resolve(ctx.rootDir, ctx.outDir); | ||
await promises.unlink(outDir).catch(() => { | ||
}); | ||
await util.promisify(rimraf__default['default'])(outDir); | ||
await promises.mkdir(outDir).catch(() => { | ||
}); | ||
if (ctx.clean) { | ||
const outDir = upath.resolve(ctx.rootDir, ctx.outDir); | ||
await promises.unlink(outDir).catch(() => { | ||
}); | ||
await util.promisify(rimraf__default['default'])(outDir); | ||
await promises.mkdir(outDir).catch(() => { | ||
}); | ||
} | ||
await typesBuild(ctx); | ||
await mkdistBuild(ctx); | ||
await rollupBuild(ctx); | ||
await mkdistBuild(ctx); | ||
consola__default['default'].success(chalk__default['default'].green("Build succeed for " + pkg.name)); | ||
@@ -276,25 +297,3 @@ for (const entry of ctx.buildEntries) { | ||
} | ||
const usedDependencies = new Set(); | ||
const unusedDependencies = new Set(Object.keys(pkg.dependencies || {})); | ||
const implicitDependnecies = new Set(); | ||
for (const id of ctx.usedImports) { | ||
unusedDependencies.delete(id); | ||
usedDependencies.add(id); | ||
} | ||
if (Array.isArray(buildConfig.dependencies)) { | ||
for (const id of buildConfig.dependencies) { | ||
unusedDependencies.delete(id); | ||
} | ||
} | ||
for (const id of usedDependencies) { | ||
if (!ctx.externals.includes(id) && !id.startsWith("chunks/") && !ctx.externals.includes(id.split("/")[0])) { | ||
implicitDependnecies.add(id); | ||
} | ||
} | ||
if (unusedDependencies.size) { | ||
consola__default['default'].warn("Potential unused dependencies found:", Array.from(unusedDependencies).map((id) => chalk__default['default'].cyan(id)).join(", ")); | ||
} | ||
if (implicitDependnecies.size) { | ||
consola__default['default'].warn("Potential implicit dependencies found:", Array.from(implicitDependnecies).map((id) => chalk__default['default'].cyan(id)).join(", ")); | ||
} | ||
validateDependencies(ctx); | ||
consola__default['default'].log(""); | ||
@@ -301,0 +300,0 @@ } |
'use strict'; | ||
const path = require('path'); | ||
const promises = require('fs/promises'); | ||
const mri = require('mri'); | ||
@@ -9,2 +8,3 @@ const build = require('./chunks/build.js'); | ||
require('module'); | ||
require('fs/promises'); | ||
require('upath'); | ||
@@ -33,11 +33,7 @@ require('chalk'); | ||
const args = mri__default['default'](process.argv.splice(2)); | ||
if (args.all) { | ||
const pkgsDir = path.resolve(process.cwd(), "packages"); | ||
const pkgs = await promises.readdir(pkgsDir); | ||
for (const pkg of pkgs) { | ||
await build.build(path.resolve(pkgsDir, pkg), args.stub); | ||
} | ||
} else { | ||
await build.build(path.resolve(process.cwd(), args._[0] || "."), args.stub); | ||
} | ||
const rootDir = path.resolve(process.cwd(), args._[0] || "."); | ||
await build.build(rootDir, args.stub).catch((err) => { | ||
console.error(`Error building ${rootDir}: ${err}`); | ||
throw err; | ||
}); | ||
} | ||
@@ -44,0 +40,0 @@ main().catch((err) => { |
@@ -14,2 +14,3 @@ declare function build(rootDir: string, stub: boolean): Promise<void>; | ||
entries: BuildEntry[]; | ||
clean: boolean; | ||
outDir: string; | ||
@@ -16,0 +17,0 @@ genDir: string; |
{ | ||
"name": "unbuild", | ||
"version": "0.0.4", | ||
"description": "", | ||
"version": "0.1.0", | ||
"description": "An unified javascript build system", | ||
"repository": "unjs/unbuild", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
@@ -8,2 +8,50 @@ # unbuild | ||
> An unified javascript build system | ||
**📦 Optimized bundler** | ||
Robust [rollup](https://rollupjs.org) based bundler that supports typescript and generates commonjs and module formats + type declarations. | ||
**📁 Bundleless build** | ||
Integration with [mkdist](https://github.com/un-contrib/mkdist) for generating bundleles dists with file-to-file transpilation. | ||
**✨ Passive watcher** | ||
Stub `dist` once using [jiti](https://github.com/unjs/jiti) and you can try and link your project without need to watch and rebuild during development. | ||
**✍ Untype Generator** | ||
Integration with [untyped](https://untyped.unjs.io/). | ||
**✔️ Build Validator** | ||
Automatically check for potential **missing** and **unused** [dependencies](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#dependencies). Also you can check output size and exports quickly in CLI output. | ||
## Usage | ||
Create `src/index.ts` and `build.config.ts`: | ||
```ts | ||
export default { | ||
entries: [ | ||
'./src/index' | ||
] | ||
} | ||
``` | ||
```sh | ||
npx unbuild | ||
``` | ||
## Configuration | ||
You can either use `build` key in `package.json` or `build.config.{js,ts,json}` to specify configuration. | ||
See options [here](./src/types.ts). | ||
## Fun fact | ||
This library is built using itself for publishing! | ||
## License | ||
@@ -10,0 +58,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
72
28113
12
685