From 308a3634ba1b8b67831fbba44f5e20e2332bc960 Mon Sep 17 00:00:00 2001 From: Vladimir Starkov Date: Sat, 30 Apr 2016 00:22:49 +0200 Subject: [PATCH] tweak API --- README.md | 76 +++++++++++++++++++++++++++++++------------------------ index.js | 59 +++++++++++++++++++++--------------------- test.js | 60 ++++++++++++++++++------------------------- 3 files changed, 96 insertions(+), 99 deletions(-) diff --git a/README.md b/README.md index 021871d..4f4537e 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,23 @@ npm install --save es-dep-kit +## API + +Every function requires one `dep` argument — `Object` described by [es-dep-unit][es-dep-unit]. + +* `_requested` — returns `dep.requested` +* `_from` — returns `dep.from` +* `_resolved` — returns `dep.resolved` + +* `isEntry` — true if `dep.requested` is `null` +* `isRequestedPackage` — true if `dep.requested` is not a local file +* `isRequestedLocalFile` — true if `dep.requested` is a local file +* `isResolvedInNM` — true if `dep.resolved` contains `node_modules` +* `isRequestedFromNM` — true if `dep.from` contains `node_modules` +* `isResolved` — true if `dep.resolved` is not `null` +* `isNotResolved` — true if `dep.resolved` is `null` +* `isThirdParty` — true if `dep` is not direct dependency: not local file and not `package` being requested from local file + ## Usage ```js @@ -19,15 +36,12 @@ import kit from 'es-dep-kit'; import { esDepUnit as dep } from 'es-dep-unit'; // arguments are `requested`, `from` and `resolved` respectively -// is string is relative path, it concatenated with `process.cwd()` +// if string is relative path, it will be prepended with `process.cwd()` const entry = dep(null, null, 'index.js'); const file = dep('./file', 'index.js', 'file.js'); const fileExtra = dep('./file-extra', 'index.js', null); -const folder = dep('./folder', 'index.js', 'folder/index.js'); -const folderExtra = dep('./folder-extra', 'index.js', null); - const pkg = dep('pkg', 'index.js', 'node_modules/pkg/index.js'); const pkgExtra = dep('pkg-extra', 'index.js', null); @@ -40,42 +54,38 @@ const nestedPkgExtra = dep('nested-pkg-extra', 'node_modules/pkg/index.js', null const nestedPkgFile = dep('./nested-pkg-file', 'node_modules/pkg/node_modules/nested-pkg/index.js', 'node_modules/pkg/node_modules/nested-pkg/file.js'); // eslint-disable-line const nestedPkgFileExtra = dep('./nested-pkg-file-extra', 'node_modules/pkg/node_modules/nested-pkg/index.js', null); // eslint-disable-line -kit._requested(file); // -kit._resolved(); // -kit._from(); // -kit.isEntry(); // -kit.requestedModule(); // -kit.requestedLocalFile(); // -kit.inNodeModules(); // -kit.requestedFromNodeModules(); // -kit.resolved(); // -kit.notResolved(); // -kit.isThirdParty(); // -``` +kit._requested(file); // ./file +kit._resolved(file); // /Users/iamstarkov/projects/es-dep-kit/file.js +kit._from(file); // /Users/iamstarkov/projects/es-dep-kit/index.js -## API - -### esDepKit(input, [options]) - -### esDepKitAsync(input, [options]) +kit.isEntry(entry); // true +kit.isEntry(file); // false -Return a promise that resolves to `result`. +kit.isRequestedPackage(file); // false +kit.isRequestedPackage(pkg); // true -#### input +kit.isRequestedLocalFile(file); // true +kit.isRequestedLocalFile(pkg); // false +kit.isRequestedLocalFile(pkgFile); // true +kit.isRequestedLocalFile(nestedPkg); // false -*Required* -Type: `String` +kit.isResolvedInNM(file); // false +kit.isResolvedInNM(pkg); // true +kit.isResolvedInNM(pkgExtra); // false -Lorem ipsum. +kit.isRequestedFromNM(file); // false +kit.isRequestedFromNM(pkg); // false +kit.isRequestedFromNM(nestedPkg); // true -#### options +kit.isResolved(file); // true +kit.isNotResolved(fileExtra); // true -##### foo - -Type: `Boolean` -Default: `false` - -Lorem ipsum. +kit.isThirdParty(file); // false +kit.isThirdParty(pkg); // false +kit.isThirdParty(pkgFile); // true +kit.isThirdParty(nestedPkg); // true +kit.isThirdParty(nestedPkgFile); // true +``` ## Related diff --git a/index.js b/index.js index 2992c34..49d936d 100644 --- a/index.js +++ b/index.js @@ -13,8 +13,8 @@ const _isLocalFile = R.pipe( R.either(pathIsAbsolute, pathIsRelative) ); -// _isModule :: String -> Boolean -const _isModule = R.pipe( +// _isPackage :: String -> Boolean +const _isPackage = R.pipe( contract('path', String), R.complement(_isLocalFile) ); @@ -22,78 +22,77 @@ const _isModule = R.pipe( // _requested :: Object -> String const _requested = R.prop('requested'); -// _resolved :: Object -> String -const _resolved = R.prop('resolved'); - // _from :: Object -> String const _from = R.prop('from'); -// requestedModule :: Object -> Boolean +// _resolved :: Object -> String +const _resolved = R.prop('resolved'); + +// isEntry :: Object -> Boolean const isEntry = R.unary(R.pipe( contract('dep', Object), _requested, R.isNil )); -// requestedModule :: Object -> Boolean -const requestedModule = R.unary(R.pipe( +// isRequestedPackage :: Object -> Boolean +const isRequestedPackage = R.unary(R.pipe( contract('dep', Object), _requested, - R.ifElse(isNotNil, _isModule, R.F) + R.ifElse(isNotNil, _isPackage, R.F) )); -// requestedLocalFile :: Object -> Boolean -const requestedLocalFile = R.unary(R.pipe( +// isRequestedLocalFile :: Object -> Boolean +const isRequestedLocalFile = R.unary(R.pipe( contract('dep', Object), _requested, R.ifElse(isNotNil, _isLocalFile, R.F) )); -// inNodeModules :: Object -> Boolean -const inNodeModules = R.unary(R.pipe( +// isResolvedInNM :: Object -> Boolean +const isResolvedInNM = R.unary(R.pipe( contract('dep', Object), _resolved, R.ifElse(isNotNil, R.test(/node_modules/), R.F) )); -// requestedFromNodeModules :: Object -> Boolean -const requestedFromNodeModules = R.unary(R.pipe( +// isRequestedFromNM :: Object -> Boolean +const isRequestedFromNM = R.unary(R.pipe( contract('dep', Object), _from, R.ifElse(isNotNil, R.test(/node_modules/), R.F) )); -// resolved :: Object -> Boolean -const resolved = R.unary(R.pipe( +// isResolved :: Object -> Boolean +const isResolved = R.unary(R.pipe( contract('dep', Object), _resolved, isNotNil )); -// notResolved :: Object -> Boolean -const notResolved = R.unary(R.pipe( +// isNotResolved :: Object -> Boolean +const isNotResolved = R.unary(R.pipe( contract('dep', Object), - _resolved, - R.isNil + R.complement(isResolved) )); // isThirdParty :: Object -> Boolean const isThirdParty = R.cond([ [isEntry, R.F], - [requestedModule, requestedFromNodeModules], - [requestedLocalFile, R.either(requestedFromNodeModules, inNodeModules)], + [isRequestedPackage, isRequestedFromNM], + [isRequestedLocalFile, R.either(isRequestedFromNM, isResolvedInNM)], ]); export default { _requested, - _resolved, _from, + _resolved, isEntry, - requestedModule, - requestedLocalFile, - inNodeModules, - requestedFromNodeModules, - resolved, - notResolved, + isRequestedPackage, + isRequestedLocalFile, + isResolvedInNM, + isRequestedFromNM, + isResolved, + isNotResolved, isThirdParty, }; diff --git a/test.js b/test.js index ffffc2f..6cf57fa 100644 --- a/test.js +++ b/test.js @@ -8,9 +8,6 @@ const entry = dep(null, null, 'index.js'); const file = dep('./file', 'index.js', 'file.js'); const fileExtra = dep('./file-extra', 'index.js', null); -const folder = dep('./folder', 'index.js', 'folder/index.js'); -const folderExtra = dep('./folder-extra', 'index.js', null); - const pkg = dep('pkg', 'index.js', 'node_modules/pkg/index.js'); const pkgExtra = dep('pkg-extra', 'index.js', null); @@ -26,7 +23,6 @@ const nestedPkgFileExtra = dep('./nested-pkg-file-extra', 'node_modules/pkg/node const cases = [ entry, file, fileExtra, - folder, folderExtra, pkg, pkgExtra, pkgFile, pkgFileExtra, nestedPkg, nestedPkgExtra, @@ -37,7 +33,6 @@ test('isEntry', t => { const expected = [ true, // entry false, false, // file - false, false, // folder false, false, // pkg false, false, // pkgFile false, false, // nestedPkg @@ -50,113 +45,106 @@ test('isEntry', t => { test('isEntry: empty input', t => t.throws(() => { kit.isEntry(); }, TypeError)); test('isEntry: invalid input', t => t.throws(() => { kit.isEntry(2); }, TypeError)); -test('requestedModule', t => { +test('isRequestedPackage', t => { const expected = [ false, // entry false, false, // file - false, false, // folder true, true, // pkg false, false, // pkgFile true, true, // nestedPkg false, false, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.requestedModule(cases[i]), expected[i]); + t.is(kit.isRequestedPackage(cases[i]), expected[i]); }); }); -test('requestedModule: empty input', t => t.throws(() => { kit.requestedModule(); }, TypeError)); -test('requestedModule: invalid input', t => t.throws(() => { kit.requestedModule(2); }, TypeError)); +test('isRequestedPackage: empty input', t => t.throws(() => { kit.isRequestedPackage(); }, TypeError)); // eslint-disable-line +test('isRequestedPackage: invalid input', t => t.throws(() => { kit.isRequestedPackage(2); }, TypeError)); // eslint-disable-line -test('requestedLocalFile', t => { +test('isRequestedLocalFile', t => { const expected = [ false, // entry true, true, // file - true, true, // folder false, false, // pkg true, true, // pkgFile false, false, // nestedPkg true, true, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.requestedLocalFile(cases[i]), expected[i]); + t.is(kit.isRequestedLocalFile(cases[i]), expected[i]); }); }); -test('requestedLocalFile: empty input', t => t.throws(() => { kit.requestedLocalFile(); }, TypeError)); -test('requestedLocalFile: invalid input', t => t.throws(() => { kit.requestedLocalFile(2); }, TypeError)); +test('isRequestedLocalFile: empty input', t => t.throws(() => { kit.isRequestedLocalFile(); }, TypeError)); // eslint-disable-line +test('isRequestedLocalFile: invalid input', t => t.throws(() => { kit.isRequestedLocalFile(2); }, TypeError)); // eslint-disable-line -test('inNodeModules', t => { +test('isResolvedInNM', t => { const expected = [ false, // entry false, false, // file - false, false, // folder true, false, // pkg true, false, // pkgFile true, false, // nestedPkg true, false, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.inNodeModules(cases[i]), expected[i]); + t.is(kit.isResolvedInNM(cases[i]), expected[i]); }); }); -test('inNodeModules: empty input', t => t.throws(() => { kit.inNodeModules(); }, TypeError)); -test('inNodeModules: invalid input', t => t.throws(() => { kit.inNodeModules(2); }, TypeError)); +test('isResolvedInNM: empty input', t => t.throws(() => { kit.isResolvedInNM(); }, TypeError)); +test('isResolvedInNM: invalid input', t => t.throws(() => { kit.isResolvedInNM(2); }, TypeError)); -test('requestedFromNodeModules', t => { +test('isRequestedFromNM', t => { const expected = [ false, // entry false, false, // file - false, false, // folder false, false, // pkg true, true, // pkgFile true, true, // nestedPkg true, true, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.requestedFromNodeModules(cases[i]), expected[i]); + t.is(kit.isRequestedFromNM(cases[i]), expected[i]); }); }); -test('requestedFromNodeModules: empty input', t => t.throws(() => { kit.requestedFromNodeModules(); }, TypeError)); // eslint-disable-line -test('requestedFromNodeModules: invalid input', t => t.throws(() => { kit.requestedFromNodeModules(2); }, TypeError)); // eslint-disable-line +test('isRequestedFromNM: empty input', t => t.throws(() => { kit.isRequestedFromNM(); }, TypeError)); // eslint-disable-line +test('isRequestedFromNM: invalid input', t => t.throws(() => { kit.isRequestedFromNM(2); }, TypeError)); // eslint-disable-line -test('resolved', t => { +test('is resolved', t => { const expected = [ true, // entry true, false, // file - true, false, // folder true, false, // pkg true, false, // pkgFile true, false, // nestedPkg true, false, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.resolved(cases[i]), expected[i]); + t.is(kit.isResolved(cases[i]), expected[i]); }); }); -test('resolved: empty input', t => t.throws(() => { kit.resolved(); }, TypeError)); -test('resolved: invalid input', t => t.throws(() => { kit.resolved(2); }, TypeError)); +test('isResolved: empty input', t => t.throws(() => { kit.isResolved(); }, TypeError)); +test('isResolved: invalid input', t => t.throws(() => { kit.isResolved(2); }, TypeError)); -test('not resolved', t => { +test('is not resolved', t => { const expected = [ false, // entry false, true, // file - false, true, // folder false, true, // pkg false, true, // pkgFile false, true, // nestedPkg false, true, // nestedPkgFile ]; expected.forEach((item, i) => { - t.is(kit.notResolved(cases[i]), expected[i]); + t.is(kit.isNotResolved(cases[i]), expected[i]); }); }); -test('notResolved: empty input', t => t.throws(() => { kit.notResolved(); }, TypeError)); -test('notResolved: invalid input', t => t.throws(() => { kit.notResolved(2); }, TypeError)); +test('isNotResolved: empty input', t => t.throws(() => { kit.isNotResolved(); }, TypeError)); +test('isNotResolved: invalid input', t => t.throws(() => { kit.isNotResolved(2); }, TypeError)); test('isThirdParty', t => { const expected = [ false, // entry false, false, // file - false, false, // folder false, false, // pkg true, true, // pkgFile true, true, // nestedPkg