From 6d70832ee11f2e772c83f6a2b35fc25feab7df2e Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 21:28:49 -0500 Subject: [PATCH 1/7] Automatic decaffeinate ``` decaffeinate --loose --optional-chaining .\src ``` --- src/deprecation.coffee | 93 ----------------------------- src/deprecation.js | 131 +++++++++++++++++++++++++++++++++++++++++ src/grim.coffee | 88 --------------------------- src/grim.js | 110 ++++++++++++++++++++++++++++++++++ 4 files changed, 241 insertions(+), 181 deletions(-) delete mode 100644 src/deprecation.coffee create mode 100644 src/deprecation.js delete mode 100644 src/grim.coffee create mode 100644 src/grim.js diff --git a/src/deprecation.coffee b/src/deprecation.coffee deleted file mode 100644 index 4fa4603..0000000 --- a/src/deprecation.coffee +++ /dev/null @@ -1,93 +0,0 @@ -SourceMapCache = {} - -module.exports = -class Deprecation - @getFunctionNameFromCallsite: (callsite) -> - - @deserialize: ({message, fileName, lineNumber, stacks}) -> - deprecation = new Deprecation(message, fileName, lineNumber) - deprecation.addStack(stack, stack.metadata) for stack in stacks - deprecation - - constructor: (@message, @fileName, @lineNumber) -> - @callCount = 0 - @stackCount = 0 - @stacks = {} - @stackCallCounts = {} - - getFunctionNameFromCallsite: (callsite) -> - return callsite.functionName if callsite.functionName? - - if callsite.isToplevel() - callsite.getFunctionName() ? '' - else - if callsite.isConstructor() - "new #{callsite.getFunctionName()}" - else if callsite.getMethodName() and not callsite.getFunctionName() - callsite.getMethodName() - else - "#{callsite.getTypeName()}.#{callsite.getMethodName() ? callsite.getFunctionName() ? ''}" - - getLocationFromCallsite: (callsite) -> - return "unknown" unless callsite? - return callsite.location if callsite.location? - - if callsite.isNative() - "native" - else if callsite.isEval() - "eval at #{@getLocationFromCallsite(callsite.getEvalOrigin())}" - else - fileName = callsite.getFileName() - line = callsite.getLineNumber() - column = callsite.getColumnNumber() - "#{fileName}:#{line}:#{column}" - - getFileNameFromCallSite: (callsite) -> - callsite.fileName ? callsite.getFileName() - - getOriginName: -> - @originName - - getMessage: -> - @message - - getStacks: -> - parsedStacks = [] - for location, stack of @stacks - parsedStack = @parseStack(stack) - parsedStack.callCount = @stackCallCounts[location] - parsedStack.metadata = stack.metadata - parsedStacks.push(parsedStack) - parsedStacks - - getStackCount: -> - @stackCount - - getCallCount: -> - @callCount - - addStack: (stack, metadata) -> - @originName ?= @getFunctionNameFromCallsite(stack[0]) - @fileName ?= @getFileNameFromCallSite(stack[0]) - @lineNumber ?= stack[0].getLineNumber?() - @callCount++ - - stack.metadata = metadata - callerLocation = @getLocationFromCallsite(stack[1]) - unless @stacks[callerLocation]? - @stacks[callerLocation] = stack - @stackCount++ - @stackCallCounts[callerLocation] ?= 0 - @stackCallCounts[callerLocation]++ - - parseStack: (stack) -> - stack.map (callsite) => - functionName: @getFunctionNameFromCallsite(callsite) - location: @getLocationFromCallsite(callsite) - fileName: @getFileNameFromCallSite(callsite) - - serialize: -> - message: @getMessage() - lineNumber: @lineNumber - fileName: @fileName - stacks: @getStacks() diff --git a/src/deprecation.js b/src/deprecation.js new file mode 100644 index 0000000..655b739 --- /dev/null +++ b/src/deprecation.js @@ -0,0 +1,131 @@ +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS104: Avoid inline assignments + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +let Deprecation; +const SourceMapCache = {}; + +module.exports = +(Deprecation = class Deprecation { + static getFunctionNameFromCallsite(callsite) {} + + static deserialize({message, fileName, lineNumber, stacks}) { + const deprecation = new Deprecation(message, fileName, lineNumber); + for (let stack of stacks) { deprecation.addStack(stack, stack.metadata); } + return deprecation; + } + + constructor(message, fileName, lineNumber) { + this.message = message; + this.fileName = fileName; + this.lineNumber = lineNumber; + this.callCount = 0; + this.stackCount = 0; + this.stacks = {}; + this.stackCallCounts = {}; + } + + getFunctionNameFromCallsite(callsite) { + if (callsite.functionName != null) { return callsite.functionName; } + + if (callsite.isToplevel()) { + let left; + return (left = callsite.getFunctionName()) != null ? left : ''; + } else { + if (callsite.isConstructor()) { + return `new ${callsite.getFunctionName()}`; + } else if (callsite.getMethodName() && !callsite.getFunctionName()) { + return callsite.getMethodName(); + } else { + let left1, left2; + return `${callsite.getTypeName()}.${(left1 = (left2 = callsite.getMethodName()) != null ? left2 : callsite.getFunctionName()) != null ? left1 : ''}`; + } + } + } + + getLocationFromCallsite(callsite) { + if (callsite == null) { return "unknown"; } + if (callsite.location != null) { return callsite.location; } + + if (callsite.isNative()) { + return "native"; + } else if (callsite.isEval()) { + return `eval at ${this.getLocationFromCallsite(callsite.getEvalOrigin())}`; + } else { + const fileName = callsite.getFileName(); + const line = callsite.getLineNumber(); + const column = callsite.getColumnNumber(); + return `${fileName}:${line}:${column}`; + } + } + + getFileNameFromCallSite(callsite) { + return callsite.fileName != null ? callsite.fileName : callsite.getFileName(); + } + + getOriginName() { + return this.originName; + } + + getMessage() { + return this.message; + } + + getStacks() { + const parsedStacks = []; + for (let location in this.stacks) { + const stack = this.stacks[location]; + const parsedStack = this.parseStack(stack); + parsedStack.callCount = this.stackCallCounts[location]; + parsedStack.metadata = stack.metadata; + parsedStacks.push(parsedStack); + } + return parsedStacks; + } + + getStackCount() { + return this.stackCount; + } + + getCallCount() { + return this.callCount; + } + + addStack(stack, metadata) { + if (this.originName == null) { this.originName = this.getFunctionNameFromCallsite(stack[0]); } + if (this.fileName == null) { this.fileName = this.getFileNameFromCallSite(stack[0]); } + if (this.lineNumber == null) { this.lineNumber = stack[0].getLineNumber?.(); } + this.callCount++; + + stack.metadata = metadata; + const callerLocation = this.getLocationFromCallsite(stack[1]); + if (this.stacks[callerLocation] == null) { + this.stacks[callerLocation] = stack; + this.stackCount++; + } + if (this.stackCallCounts[callerLocation] == null) { this.stackCallCounts[callerLocation] = 0; } + return this.stackCallCounts[callerLocation]++; + } + + parseStack(stack) { + return stack.map(callsite => { + return { + functionName: this.getFunctionNameFromCallsite(callsite), + location: this.getLocationFromCallsite(callsite), + fileName: this.getFileNameFromCallSite(callsite) + }; + }); + } + + serialize() { + return { + message: this.getMessage(), + lineNumber: this.lineNumber, + fileName: this.fileName, + stacks: this.getStacks() + }; + } +}); diff --git a/src/grim.coffee b/src/grim.coffee deleted file mode 100644 index da3cf66..0000000 --- a/src/grim.coffee +++ /dev/null @@ -1,88 +0,0 @@ -Deprecation = require './deprecation' - -unless global.__grim__? - {Emitter} = require 'event-kit' - grim = global.__grim__ = - deprecations: {} - emitter: new Emitter - includeDeprecatedAPIs: true - - getDeprecations: -> - deprecations = [] - for fileName, deprecationsByLineNumber of grim.deprecations - for lineNumber, deprecationsByPackage of deprecationsByLineNumber - for packageName, deprecation of deprecationsByPackage - deprecations.push(deprecation) - deprecations - - getDeprecationsLength: -> - @getDeprecations().length - - clearDeprecations: -> - grim.deprecations = {} - return - - logDeprecations: -> - deprecations = @getDeprecations() - deprecations.sort (a, b) -> b.getCallCount() - a.getCallCount() - - console.warn "\nCalls to deprecated functions\n-----------------------------" - for deprecation in deprecations - console.warn "(#{deprecation.getCallCount()}) #{deprecation.getOriginName()} : #{deprecation.getMessage()}", deprecation - return - - deprecate: (message, metadata) -> - # Capture a 5-deep stack trace - originalStackTraceLimit = Error.stackTraceLimit - try - Error.stackTraceLimit = 7 - error = new Error - # Get an array of v8 CallSite objects - stack = error.getRawStack?() ? getRawStack(error) - stack = stack.slice(1) - finally - Error.stackTraceLimit = originalStackTraceLimit - - # Find or create a deprecation for this site - deprecationSite = stack[0] - fileName = deprecationSite.getFileName() - lineNumber = deprecationSite.getLineNumber() - packageName = metadata?.packageName ? "" - grim.deprecations[fileName] ?= {} - grim.deprecations[fileName][lineNumber] ?= {} - grim.deprecations[fileName][lineNumber][packageName] ?= new Deprecation(message) - - deprecation = grim.deprecations[fileName][lineNumber][packageName] - - # Add the current stack trace to the deprecation - deprecation.addStack(stack, metadata) - grim.emitter.emit("updated", deprecation) - return - - addSerializedDeprecation: (serializedDeprecation) -> - deprecation = Deprecation.deserialize(serializedDeprecation) - message = deprecation.getMessage() - {fileName, lineNumber} = deprecation - stacks = deprecation.getStacks() - packageName = stacks[0]?.metadata?.packageName ? "" - - grim.deprecations[fileName] ?= {} - grim.deprecations[fileName][lineNumber] ?= {} - grim.deprecations[fileName][lineNumber][packageName] ?= new Deprecation(message, fileName, lineNumber) - - deprecation = grim.deprecations[fileName][lineNumber][packageName] - deprecation.addStack(stack, stack.metadata) for stack in stacks - grim.emitter.emit("updated", deprecation) - return - - on: (eventName, callback) -> grim.emitter.on(eventName, callback) - -getRawStack = (error) -> - originalPrepareStackTrace = Error.prepareStackTrace - Error.prepareStackTrace = (error, stack) -> stack - Error.captureStackTrace(error, getRawStack) - result = error.stack - Error.prepareStackTrace = originalPrepareStackTrace - result - -module.exports = global.__grim__ diff --git a/src/grim.js b/src/grim.js new file mode 100644 index 0000000..2af2468 --- /dev/null +++ b/src/grim.js @@ -0,0 +1,110 @@ +/* + * decaffeinate suggestions: + * DS102: Remove unnecessary code created because of implicit returns + * DS104: Avoid inline assignments + * DS207: Consider shorter variations of null checks + * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md + */ +const Deprecation = require('./deprecation'); + +if (global.__grim__ == null) { + const {Emitter} = require('event-kit'); + var grim = (global.__grim__ = { + deprecations: {}, + emitter: new Emitter, + includeDeprecatedAPIs: true, + + getDeprecations() { + const deprecations = []; + for (let fileName in grim.deprecations) { + const deprecationsByLineNumber = grim.deprecations[fileName]; + for (let lineNumber in deprecationsByLineNumber) { + const deprecationsByPackage = deprecationsByLineNumber[lineNumber]; + for (let packageName in deprecationsByPackage) { + const deprecation = deprecationsByPackage[packageName]; + deprecations.push(deprecation); + } + } + } + return deprecations; + }, + + getDeprecationsLength() { + return this.getDeprecations().length; + }, + + clearDeprecations() { + grim.deprecations = {}; + }, + + logDeprecations() { + const deprecations = this.getDeprecations(); + deprecations.sort((a, b) => b.getCallCount() - a.getCallCount()); + + console.warn("\nCalls to deprecated functions\n-----------------------------"); + for (let deprecation of deprecations) { + console.warn(`(${deprecation.getCallCount()}) ${deprecation.getOriginName()} : ${deprecation.getMessage()}`, deprecation); + } + }, + + deprecate(message, metadata) { + // Capture a 5-deep stack trace + let stack; + const originalStackTraceLimit = Error.stackTraceLimit; + try { + let left; + Error.stackTraceLimit = 7; + const error = new Error; + // Get an array of v8 CallSite objects + stack = (left = error.getRawStack?.()) != null ? left : getRawStack(error); + stack = stack.slice(1); + } finally { + Error.stackTraceLimit = originalStackTraceLimit; + } + + // Find or create a deprecation for this site + const deprecationSite = stack[0]; + const fileName = deprecationSite.getFileName(); + const lineNumber = deprecationSite.getLineNumber(); + const packageName = metadata?.packageName != null ? metadata?.packageName : ""; + if (grim.deprecations[fileName] == null) { grim.deprecations[fileName] = {}; } + if (grim.deprecations[fileName][lineNumber] == null) { grim.deprecations[fileName][lineNumber] = {}; } + if (grim.deprecations[fileName][lineNumber][packageName] == null) { grim.deprecations[fileName][lineNumber][packageName] = new Deprecation(message); } + + const deprecation = grim.deprecations[fileName][lineNumber][packageName]; + + // Add the current stack trace to the deprecation + deprecation.addStack(stack, metadata); + grim.emitter.emit("updated", deprecation); + }, + + addSerializedDeprecation(serializedDeprecation) { + let deprecation = Deprecation.deserialize(serializedDeprecation); + const message = deprecation.getMessage(); + const {fileName, lineNumber} = deprecation; + const stacks = deprecation.getStacks(); + const packageName = stacks[0]?.metadata?.packageName != null ? stacks[0]?.metadata?.packageName : ""; + + if (grim.deprecations[fileName] == null) { grim.deprecations[fileName] = {}; } + if (grim.deprecations[fileName][lineNumber] == null) { grim.deprecations[fileName][lineNumber] = {}; } + if (grim.deprecations[fileName][lineNumber][packageName] == null) { grim.deprecations[fileName][lineNumber][packageName] = new Deprecation(message, fileName, lineNumber); } + + deprecation = grim.deprecations[fileName][lineNumber][packageName]; + for (let stack of stacks) { deprecation.addStack(stack, stack.metadata); } + grim.emitter.emit("updated", deprecation); + }, + + on(eventName, callback) { return grim.emitter.on(eventName, callback); } + }); +} + +var getRawStack = function(error) { + const originalPrepareStackTrace = Error.prepareStackTrace; + Error.prepareStackTrace = (error, stack) => stack; + Error.captureStackTrace(error, getRawStack); + const result = error.stack; + Error.prepareStackTrace = originalPrepareStackTrace; + return result; +}; + +module.exports = global.__grim__; From 56259d9122e60ad93ac2eadc31a4fe7b55d590de Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 21:20:28 -0500 Subject: [PATCH 2/7] Fix Deprecation export --- src/deprecation.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/deprecation.js b/src/deprecation.js index 655b739..c8b67c6 100644 --- a/src/deprecation.js +++ b/src/deprecation.js @@ -5,11 +5,10 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -let Deprecation; -const SourceMapCache = {}; +const SourceMapCache = {} module.exports = -(Deprecation = class Deprecation { +class Deprecation { static getFunctionNameFromCallsite(callsite) {} static deserialize({message, fileName, lineNumber, stacks}) { @@ -128,4 +127,4 @@ module.exports = stacks: this.getStacks() }; } -}); +}; From 3dcf1e56539e13a0b598860c7a38a658d28cf6d2 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 21:23:10 -0500 Subject: [PATCH 3/7] Use npm scripts + directly use jasmine-node and coffeelint --- Gruntfile.coffee | 44 ----------------------------------------- package.json | 21 ++++++++++---------- spec/spec-helper.coffee | 1 - 3 files changed, 10 insertions(+), 56 deletions(-) delete mode 100644 Gruntfile.coffee delete mode 100644 spec/spec-helper.coffee diff --git a/Gruntfile.coffee b/Gruntfile.coffee deleted file mode 100644 index 61ba29f..0000000 --- a/Gruntfile.coffee +++ /dev/null @@ -1,44 +0,0 @@ -path = require('path') - -module.exports = (grunt) -> - - grunt.initConfig - pkg: grunt.file.readJSON('package.json') - - coffee: - glob_to_multiple: - expand: true - cwd: 'src' - src: ['**/*.coffee'] - dest: 'lib' - ext: '.js' - - coffeelint: - options: - no_empty_param_list: - level: 'error' - max_line_length: - level: 'ignore' - indentation: - level: 'ignore' - - src: ['src/*.coffee'] - test: ['spec/*.coffee'] - gruntfile: ['Gruntfile.coffee'] - - shell: - test: - command: "#{path.normalize('node_modules/.bin/jasmine-focused')} --coffee --captureExceptions --forceexit spec" - options: - stdout: true - stderr: true - failOnError: true - - grunt.loadNpmTasks('grunt-contrib-coffee') - grunt.loadNpmTasks('grunt-shell') - grunt.loadNpmTasks('grunt-coffeelint') - - grunt.registerTask 'clean', -> require('rimraf').sync('lib') - grunt.registerTask('lint', ['coffeelint']) - grunt.registerTask('default', ['coffee', 'lint']) - grunt.registerTask('test', ['coffee', 'lint', 'shell:test']) diff --git a/package.json b/package.json index c404367..f9d07f4 100644 --- a/package.json +++ b/package.json @@ -4,8 +4,8 @@ "description": "Log usage of deprecated methods", "main": "./lib/grim", "scripts": { - "prepublish": "grunt clean lint coffee", - "test": "grunt test" + "lint": "coffeelint .", + "test": "jasmine-node --coffee --captureExceptions --forceexit spec" }, "repository": { "type": "git", @@ -24,15 +24,14 @@ "event-kit": "^2.0.0" }, "devDependencies": { - "coffee-script": "^1.7.0", - "jasmine-focused": "^1.0.4", - "grunt-contrib-coffee": "^0.9.0", - "grunt-cli": "^0.1.8", - "grunt": "^0.4.1", - "grunt-shell": "^0.2.2", - "grunt-coffeelint": "^0.0.6", - "rimraf": "^2.2.2", - "coffee-cache": "^0.2.0", + "coffeelint": "^2.1.0", + "jasmine-node": "^3.0.0", "temp": "^0.6.0" + }, + "coffeelintConfig": { + "max_line_length": { + "level": "error", + "value": 120 + } } } diff --git a/spec/spec-helper.coffee b/spec/spec-helper.coffee deleted file mode 100644 index 725b542..0000000 --- a/spec/spec-helper.coffee +++ /dev/null @@ -1 +0,0 @@ -require 'coffee-cache' From 9dd96e98061b141878e4527d0dff450ffd158012 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 23:38:58 -0500 Subject: [PATCH 4/7] Add babel to compile optional chaining --- babel.config.json | 6 ++++++ package.json | 6 +++++- spec/grim-spec.coffee | 4 ++-- 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 babel.config.json diff --git a/babel.config.json b/babel.config.json new file mode 100644 index 0000000..75386f4 --- /dev/null +++ b/babel.config.json @@ -0,0 +1,6 @@ +{ + "presets": ["babel-preset-atomic"], + "plugins": [], + "exclude": "node_modules/**", + "sourceMap": "inline" +} diff --git a/package.json b/package.json index f9d07f4..75cb234 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,10 @@ "main": "./lib/grim", "scripts": { "lint": "coffeelint .", - "test": "jasmine-node --coffee --captureExceptions --forceexit spec" + "test": "npm run build && jasmine-node --coffee --captureExceptions --forceexit spec", + "dev": "npm run build -- --watch", + "build": " babel src --out-dir lib --delete-dir-on-start", + "prepare": "npm run build" }, "repository": { "type": "git", @@ -24,6 +27,7 @@ "event-kit": "^2.0.0" }, "devDependencies": { + "babel-preset-atomic": "^4.1.0", "coffeelint": "^2.1.0", "jasmine-node": "^3.0.0", "temp": "^0.6.0" diff --git a/spec/grim-spec.coffee b/spec/grim-spec.coffee index 3319031..4620d13 100644 --- a/spec/grim-spec.coffee +++ b/spec/grim-spec.coffee @@ -1,5 +1,5 @@ -grim = require '../src/grim' -Deprecation = require '../src/deprecation' +grim = require '../lib/grim' +Deprecation = require '../lib/deprecation' describe "Grim", -> beforeEach -> From 209730bc847690ffd3f8db3f8c7e99e55ca83b67 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 23:40:38 -0500 Subject: [PATCH 5/7] Use es6 import/export --- src/deprecation.js | 3 +-- src/grim.js | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/deprecation.js b/src/deprecation.js index c8b67c6..9ebab9f 100644 --- a/src/deprecation.js +++ b/src/deprecation.js @@ -7,8 +7,7 @@ */ const SourceMapCache = {} -module.exports = -class Deprecation { +export default class Deprecation { static getFunctionNameFromCallsite(callsite) {} static deserialize({message, fileName, lineNumber, stacks}) { diff --git a/src/grim.js b/src/grim.js index 2af2468..a3d515c 100644 --- a/src/grim.js +++ b/src/grim.js @@ -5,7 +5,7 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -const Deprecation = require('./deprecation'); +import Deprecation from './deprecation'; if (global.__grim__ == null) { const {Emitter} = require('event-kit'); @@ -107,4 +107,4 @@ var getRawStack = function(error) { return result; }; -module.exports = global.__grim__; +export default global.__grim__; From f1d4a05f086546ec236a443ca2598ccfb492c7ba Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 23:47:38 -0500 Subject: [PATCH 6/7] Replace var with const and function --- src/deprecation.js | 1 - src/grim.js | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/deprecation.js b/src/deprecation.js index 9ebab9f..4a9d207 100644 --- a/src/deprecation.js +++ b/src/deprecation.js @@ -2,7 +2,6 @@ * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * DS104: Avoid inline assignments - * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ const SourceMapCache = {} diff --git a/src/grim.js b/src/grim.js index a3d515c..7d61411 100644 --- a/src/grim.js +++ b/src/grim.js @@ -1,15 +1,14 @@ /* * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns * DS104: Avoid inline assignments - * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ import Deprecation from './deprecation'; + if (global.__grim__ == null) { const {Emitter} = require('event-kit'); - var grim = (global.__grim__ = { + const grim = { deprecations: {}, emitter: new Emitter, includeDeprecatedAPIs: true, @@ -95,10 +94,11 @@ if (global.__grim__ == null) { }, on(eventName, callback) { return grim.emitter.on(eventName, callback); } - }); + }; + global.__grim__ = grim; } -var getRawStack = function(error) { +function getRawStack(error) { const originalPrepareStackTrace = Error.prepareStackTrace; Error.prepareStackTrace = (error, stack) => stack; Error.captureStackTrace(error, getRawStack); From 331c721e786f4baef5e7cd3af52febf894ea1165 Mon Sep 17 00:00:00 2001 From: Amin Yahyaabadi Date: Sat, 3 Apr 2021 23:48:49 -0500 Subject: [PATCH 7/7] Use node 12 in ci --- .travis.yml | 2 +- appveyor.yml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index cca5330..40a2951 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,5 @@ language: node_js -node_js: '10' +node_js: '12' notifications: email: false diff --git a/appveyor.yml b/appveyor.yml index ebd3e68..91c4aa3 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,7 +1,7 @@ -image: Visual Studio 2015 +image: Visual Studio 2017 environment: - nodejs_version: "6" + nodejs_version: "12" platform: - x86