gql-profiler
Advanced tools
Comparing version 0.0.1 to 0.0.2
402
lib/index.js
@@ -1,24 +0,368 @@ | ||
'use strict'; | ||
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : | ||
typeof define === 'function' && define.amd ? define(['exports'], factory) : | ||
(factory((global['gql-profiler'] = {}))); | ||
}(this, (function (exports) { 'use strict'; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
var asyncToGenerator = function (fn) { | ||
return function () { | ||
var gen = fn.apply(this, arguments); | ||
return new Promise(function (resolve, reject) { | ||
function step(key, arg) { | ||
try { | ||
var info = gen[key](arg); | ||
var value = info.value; | ||
} catch (error) { | ||
reject(error); | ||
return; | ||
} | ||
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | ||
if (info.done) { | ||
resolve(value); | ||
} else { | ||
return Promise.resolve(value).then(function (value) { | ||
step("next", value); | ||
}, function (err) { | ||
step("throw", err); | ||
}); | ||
} | ||
} | ||
var _monitor = require('./monitor'); | ||
return step("next"); | ||
}); | ||
}; | ||
}; | ||
var _monitor2 = _interopRequireDefault(_monitor); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
const defaultOptions = { enabled: true }; | ||
const wrap = (resolvers, options = {}) => { | ||
const config = _extends({}, defaultOptions, options); | ||
if (!config.enabled) { | ||
return resolvers; | ||
var _extends = Object.assign || function (target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i]; | ||
for (var key in source) { | ||
if (Object.prototype.hasOwnProperty.call(source, key)) { | ||
target[key] = source[key]; | ||
} | ||
} | ||
} | ||
return target; | ||
}; | ||
var monitor = ((fn, reporter) => (() => { | ||
var _ref = asyncToGenerator(function* (...args) { | ||
const evt = reporter.newEvent && reporter.newEvent(fn, args); | ||
if (reporter.start) { | ||
reporter.start(evt); | ||
} | ||
try { | ||
const result = yield fn(...args); | ||
if (reporter.end) { | ||
reporter.end(evt, result); | ||
} | ||
return result; | ||
} catch (err) { | ||
if (reporter.error) { | ||
reporter.error(evt, err); | ||
} | ||
throw err; | ||
} | ||
}); | ||
return function () { | ||
return _ref.apply(this, arguments); | ||
}; | ||
})()); | ||
/* | ||
* UUID-js: A js library to generate and parse UUIDs, TimeUUIDs and generate | ||
* TimeUUID based on dates for range selections. | ||
* @see http://www.ietf.org/rfc/rfc4122.txt | ||
**/ | ||
function UUIDjs() { | ||
} | ||
UUIDjs.maxFromBits = function(bits) { | ||
return Math.pow(2, bits); | ||
}; | ||
UUIDjs.limitUI04 = UUIDjs.maxFromBits(4); | ||
UUIDjs.limitUI06 = UUIDjs.maxFromBits(6); | ||
UUIDjs.limitUI08 = UUIDjs.maxFromBits(8); | ||
UUIDjs.limitUI12 = UUIDjs.maxFromBits(12); | ||
UUIDjs.limitUI14 = UUIDjs.maxFromBits(14); | ||
UUIDjs.limitUI16 = UUIDjs.maxFromBits(16); | ||
UUIDjs.limitUI32 = UUIDjs.maxFromBits(32); | ||
UUIDjs.limitUI40 = UUIDjs.maxFromBits(40); | ||
UUIDjs.limitUI48 = UUIDjs.maxFromBits(48); | ||
// Returns a random integer between min and max | ||
// Using Math.round() will give you a non-uniform distribution! | ||
// @see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Math/random | ||
function getRandomInt(min, max) { | ||
return Math.floor(Math.random() * (max - min + 1)) + min; | ||
} | ||
UUIDjs.randomUI04 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI04-1); | ||
}; | ||
UUIDjs.randomUI06 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI06-1); | ||
}; | ||
UUIDjs.randomUI08 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI08-1); | ||
}; | ||
UUIDjs.randomUI12 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI12-1); | ||
}; | ||
UUIDjs.randomUI14 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI14-1); | ||
}; | ||
UUIDjs.randomUI16 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI16-1); | ||
}; | ||
UUIDjs.randomUI32 = function() { | ||
return getRandomInt(0, UUIDjs.limitUI32-1); | ||
}; | ||
UUIDjs.randomUI40 = function() { | ||
return (0 | Math.random() * (1 << 30)) + (0 | Math.random() * (1 << 40 - 30)) * (1 << 30); | ||
}; | ||
UUIDjs.randomUI48 = function() { | ||
return (0 | Math.random() * (1 << 30)) + (0 | Math.random() * (1 << 48 - 30)) * (1 << 30); | ||
}; | ||
UUIDjs.paddedString = function(string, length, z) { | ||
string = String(string); | ||
z = (!z) ? '0' : z; | ||
var i = length - string.length; | ||
for (; i > 0; i >>>= 1, z += z) { | ||
if (i & 1) { | ||
string = z + string; | ||
} | ||
} | ||
return string; | ||
}; | ||
UUIDjs.prototype.fromParts = function(timeLow, timeMid, timeHiAndVersion, clockSeqHiAndReserved, clockSeqLow, node) { | ||
this.version = (timeHiAndVersion >> 12) & 0xF; | ||
this.hex = UUIDjs.paddedString(timeLow.toString(16), 8) | ||
+ '-' | ||
+ UUIDjs.paddedString(timeMid.toString(16), 4) | ||
+ '-' | ||
+ UUIDjs.paddedString(timeHiAndVersion.toString(16), 4) | ||
+ '-' | ||
+ UUIDjs.paddedString(clockSeqHiAndReserved.toString(16), 2) | ||
+ UUIDjs.paddedString(clockSeqLow.toString(16), 2) | ||
+ '-' | ||
+ UUIDjs.paddedString(node.toString(16), 12); | ||
return this; | ||
}; | ||
UUIDjs.prototype.toString = function() { | ||
return this.hex; | ||
}; | ||
UUIDjs.prototype.toURN = function() { | ||
return 'urn:uuid:' + this.hex; | ||
}; | ||
UUIDjs.prototype.toBytes = function() { | ||
var parts = this.hex.split('-'); | ||
var ints = []; | ||
var intPos = 0; | ||
for (var i = 0; i < parts.length; i++) { | ||
for (var j = 0; j < parts[i].length; j+=2) { | ||
ints[intPos++] = parseInt(parts[i].substr(j, 2), 16); | ||
} | ||
} | ||
return ints; | ||
}; | ||
UUIDjs.prototype.equals = function(uuid) { | ||
if (!(uuid instanceof UUID)) { | ||
return false; | ||
} | ||
if (this.hex !== uuid.hex) { | ||
return false; | ||
} | ||
return true; | ||
}; | ||
UUIDjs.getTimeFieldValues = function(time) { | ||
var ts = time - Date.UTC(1582, 9, 15); | ||
var hm = ((ts / 0x100000000) * 10000) & 0xFFFFFFF; | ||
return { low: ((ts & 0xFFFFFFF) * 10000) % 0x100000000, | ||
mid: hm & 0xFFFF, hi: hm >>> 16, timestamp: ts }; | ||
}; | ||
UUIDjs._create4 = function() { | ||
return new UUIDjs().fromParts( | ||
UUIDjs.randomUI32(), | ||
UUIDjs.randomUI16(), | ||
0x4000 | UUIDjs.randomUI12(), | ||
0x80 | UUIDjs.randomUI06(), | ||
UUIDjs.randomUI08(), | ||
UUIDjs.randomUI48() | ||
); | ||
}; | ||
UUIDjs._create1 = function() { | ||
var now = new Date().getTime(); | ||
var sequence = UUIDjs.randomUI14(); | ||
var node = (UUIDjs.randomUI08() | 1) * 0x10000000000 + UUIDjs.randomUI40(); | ||
var tick = UUIDjs.randomUI04(); | ||
var timestamp = 0; | ||
var timestampRatio = 1/4; | ||
if (now != timestamp) { | ||
if (now < timestamp) { | ||
sequence++; | ||
} | ||
timestamp = now; | ||
tick = UUIDjs.randomUI04(); | ||
} else if (Math.random() < timestampRatio && tick < 9984) { | ||
tick += 1 + UUIDjs.randomUI04(); | ||
} else { | ||
sequence++; | ||
} | ||
var tf = UUIDjs.getTimeFieldValues(timestamp); | ||
var tl = tf.low + tick; | ||
var thav = (tf.hi & 0xFFF) | 0x1000; | ||
sequence &= 0x3FFF; | ||
var cshar = (sequence >>> 8) | 0x80; | ||
var csl = sequence & 0xFF; | ||
return new UUIDjs().fromParts(tl, tf.mid, thav, cshar, csl, node); | ||
}; | ||
UUIDjs.create = function(version) { | ||
version = version || 4; | ||
return this['_create' + version](); | ||
}; | ||
UUIDjs.fromTime = function(time, last) { | ||
last = (!last) ? false : last; | ||
var tf = UUIDjs.getTimeFieldValues(time); | ||
var tl = tf.low; | ||
var thav = (tf.hi & 0xFFF) | 0x1000; // set version '0001' | ||
if (last === false) { | ||
return new UUIDjs().fromParts(tl, tf.mid, thav, 0, 0, 0); | ||
} else { | ||
return new UUIDjs().fromParts(tl, tf.mid, thav, 0x80 | UUIDjs.limitUI06, UUIDjs.limitUI08 - 1, UUIDjs.limitUI48 - 1); | ||
} | ||
}; | ||
UUIDjs.firstFromTime = function(time) { | ||
return UUIDjs.fromTime(time, false); | ||
}; | ||
UUIDjs.lastFromTime = function(time) { | ||
return UUIDjs.fromTime(time, true); | ||
}; | ||
UUIDjs.fromURN = function(strId) { | ||
var r, p = /^(?:urn:uuid:|\{)?([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{2})([0-9a-f]{2})-([0-9a-f]{12})(?:\})?$/i; | ||
if ((r = p.exec(strId))) { | ||
return new UUIDjs().fromParts(parseInt(r[1], 16), parseInt(r[2], 16), | ||
parseInt(r[3], 16), parseInt(r[4], 16), | ||
parseInt(r[5], 16), parseInt(r[6], 16)); | ||
} | ||
return null; | ||
}; | ||
UUIDjs.fromBytes = function(ints) { | ||
if (ints.length < 5) { | ||
return null; | ||
} | ||
var str = ''; | ||
var pos = 0; | ||
var parts = [4, 2, 2, 2, 6]; | ||
for (var i = 0; i < parts.length; i++) { | ||
for (var j = 0; j < parts[i]; j++) { | ||
var octet = ints[pos++].toString(16); | ||
if (octet.length == 1) { | ||
octet = '0' + octet; | ||
} | ||
str += octet; | ||
} | ||
if (parts[i] !== 6) { | ||
str += '-'; | ||
} | ||
} | ||
return UUIDjs.fromURN(str); | ||
}; | ||
UUIDjs.fromBinary = function(binary) { | ||
var ints = []; | ||
for (var i = 0; i < binary.length; i++) { | ||
ints[i] = binary.charCodeAt(i); | ||
if (ints[i] > 255 || ints[i] < 0) { | ||
throw new Error('Unexpected byte in binary data.'); | ||
} | ||
} | ||
return UUIDjs.fromBytes(ints); | ||
}; | ||
// Aliases to support legacy code. Do not use these when writing new code as | ||
// they may be removed in future versions! | ||
UUIDjs.new = function() { | ||
return this.create(4); | ||
}; | ||
UUIDjs.newTS = function() { | ||
return this.create(1); | ||
}; | ||
var uuid = UUIDjs; | ||
const nullReporter = () => ({ | ||
newHit: () => {}, | ||
start: () => {}, | ||
end: () => {}, | ||
error: () => {}, | ||
getEvents: () => [] | ||
}); | ||
const memoryReporter = () => { | ||
const events = []; | ||
return { | ||
newEvent: fn => { | ||
const hit = { id: uuid.create(), name: fn.name }; | ||
events.push(hit); | ||
return hit; | ||
}, | ||
/* eslint-disable no-param-reassign */ | ||
start: hit => { | ||
hit.start = new Date(); | ||
}, | ||
end: hit => { | ||
hit.end = new Date(); | ||
}, | ||
error: (hit, _error) => { | ||
hit.end = new Date(); | ||
hit.error = _error; | ||
}, | ||
/* eslint-enable no-param-reassign */ | ||
getEvents: () => events | ||
}; | ||
}; | ||
const nullReporter$1 = nullReporter; | ||
const memoryReporter$1 = memoryReporter; | ||
const traverseResolvers = (resolvers, reporter) => { | ||
const wrapped = {}; | ||
@@ -28,5 +372,5 @@ | ||
if (typeof resolvers[key] === 'object') { | ||
wrapped[key] = wrap(resolvers[key]); | ||
wrapped[key] = traverseResolvers(resolvers[key], reporter); | ||
} else if (typeof resolvers[key] === 'function') { | ||
wrapped[key] = (0, _monitor2.default)(resolvers[key]); | ||
wrapped[key] = monitor(resolvers[key], reporter); | ||
} else { | ||
@@ -40,3 +384,27 @@ wrapped[key] = resolvers[key]; | ||
exports.default = wrap; | ||
module.exports = exports['default']; | ||
const defaultOptions = { | ||
enabled: true, | ||
disableInProduction: true, | ||
env: process && process.env && process.env.NODE_ENV === 'production', | ||
reporter: nullReporter | ||
}; | ||
const profileResolvers = (resolvers, options = {}) => { | ||
const config = _extends({}, defaultOptions, options); | ||
if (!config.enabled || config.disableInProduction && config.env === 'production') { | ||
return resolvers; | ||
} | ||
const reporter = typeof config.reporter === 'function' ? config.reporter() : config.reporter; | ||
return traverseResolvers(resolvers, reporter); | ||
}; | ||
exports.nullReporter = nullReporter$1; | ||
exports.memoryReporter = memoryReporter$1; | ||
exports.profileResolvers = profileResolvers; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}))); |
{ | ||
"name": "gql-profiler", | ||
"version": "0.0.1", | ||
"version": "0.0.2", | ||
"description": "A profiler for GraphQL resolvers", | ||
@@ -10,10 +10,23 @@ "main": "lib/index.js", | ||
"scripts": { | ||
"build": "./node_modules/.bin/babel src -d lib" | ||
"build": "./node_modules/.bin/rollup -c" | ||
}, | ||
"devDependencies": { | ||
"babel-cli": "6.26.0", | ||
"babel-plugin-add-module-exports": "0.2.1", | ||
"babel-plugin-transform-object-rest-spread": "6.26.0", | ||
"babel-preset-env": "1.6.1" | ||
"babel-core": "^6.26.0", | ||
"babel-eslint": "^8.2.1", | ||
"babel-plugin-external-helpers": "^6.22.0", | ||
"babel-plugin-transform-object-rest-spread": "^6.26.0", | ||
"babel-preset-env": "^1.6.1", | ||
"eslint": "^4.17.0", | ||
"eslint-config-airbnb": "^16.1.0", | ||
"eslint-plugin-import": "^2.7.0", | ||
"eslint-plugin-jsx-a11y": "^6.0.2", | ||
"eslint-plugin-react": "^7.4.0", | ||
"rollup": "^0.55.3", | ||
"rollup-plugin-babel": "^3.0.3", | ||
"rollup-plugin-commonjs": "^8.3.0", | ||
"rollup-plugin-node-resolve": "^3.0.2" | ||
}, | ||
"dependencies": { | ||
"uuid-js": "^0.7.5" | ||
} | ||
} |
import monitor from './monitor'; | ||
import { | ||
nullReporter as nullReporterFactory, | ||
memoryReporter as memoryReporterFactory, | ||
} from './reporters'; | ||
const defaultOptions = { enabled: true }; | ||
export const nullReporter = nullReporterFactory; | ||
export const memoryReporter = memoryReporterFactory; | ||
const wrap = (resolvers, options = {}) => { | ||
const config = { ...defaultOptions, ...options }; | ||
if (!config.enabled) { | ||
return resolvers; | ||
} | ||
const traverseResolvers = (resolvers, reporter) => { | ||
const wrapped = {}; | ||
Object.keys(resolvers).forEach(key => { | ||
Object.keys(resolvers).forEach((key) => { | ||
if (typeof resolvers[key] === 'object') { | ||
wrapped[key] = wrap(resolvers[key]); | ||
wrapped[key] = traverseResolvers(resolvers[key], reporter); | ||
} else if (typeof resolvers[key] === 'function') { | ||
wrapped[key] = monitor(resolvers[key]); | ||
wrapped[key] = monitor(resolvers[key], reporter); | ||
} else { | ||
@@ -27,2 +26,19 @@ wrapped[key] = resolvers[key]; | ||
export default wrap; | ||
const defaultOptions = { | ||
enabled: true, | ||
disableInProduction: true, | ||
env: process && process.env && process.env.NODE_ENV === 'production', | ||
reporter: nullReporterFactory, | ||
}; | ||
export const profileResolvers = (resolvers, options = {}) => { | ||
const config = { ...defaultOptions, ...options }; | ||
if (!config.enabled || (config.disableInProduction && config.env === 'production')) { | ||
return resolvers; | ||
} | ||
const reporter = typeof config.reporter === 'function' ? config.reporter() : config.reporter; | ||
return traverseResolvers(resolvers, reporter); | ||
}; |
@@ -1,1 +0,23 @@ | ||
export default fn => async (...args) => await fn(...args);; | ||
export default (fn, reporter) => async (...args) => { | ||
const evt = reporter.newEvent && reporter.newEvent(fn, args); | ||
if (reporter.start) { | ||
reporter.start(evt); | ||
} | ||
try { | ||
const result = await fn(...args); | ||
if (reporter.end) { | ||
reporter.end(evt, result); | ||
} | ||
return result; | ||
} catch (err) { | ||
if (reporter.error) { | ||
reporter.error(evt, err); | ||
} | ||
throw err; | ||
} | ||
}; |
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
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
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 2 instances 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
96119
12
444
1
14
3
1
+ Addeduuid-js@^0.7.5
+ Addeduuid-js@0.7.5(transitive)