🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

unbuild

Package Overview
Dependencies
Maintainers
1
Versions
107
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

unbuild - npm Package Compare versions

Comparing version

to
0.1.0

105

dist/chunks/build.js

@@ -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