Best JavaScript code snippet using root
Classes.ts
Source:Classes.ts
1import {CallSite} from "./Classes.types";2type Constructor<T = {}> = new (...args: any[]) => T;3export interface FrameworkModule {4 filePath: string;5 directory: string;6 id: string;7 exportNames: string[];8 exports: { [key: string]: (new (...args: any[]) => any | Function) };9}10export class Classes {11 public static getOrInstantiate<T>(c: any, ...args): T {12 return this.isInstantiated(c) ? c : new c(...args);13 }14 /**15 * Check if a class has been instantiated16 *17 * @param c18 * @returns {boolean}19 */20 public static isInstantiated(c: any): boolean {21 return (typeof c.prototype === "undefined");22 }23 /**24 * Hacky dirty way to check if our class extends another specific class25 * without referencing it or using instanceof checks26 *27 * @param classInstance28 * @param {string} name29 * @param {number} maxLookLevels30 * @returns {boolean}31 */32 public static checkIfExtends(classInstance: any, name: string, maxLookLevels: number = 3) {33 const levels = [34 classInstance.__proto__35 ];36 for (let i = 0; i < maxLookLevels; i++) {37 levels.push(levels[i]?.__proto__);38 if (!levels[i]) {39 continue;40 }41 if (levels[i]?.name === name) {42 return true;43 }44 }45 return false;46 }47 /**48 * If a class has been instantiated, get the underlying constructor49 * Otherwise, return the constructor50 *51 * @param c52 * @returns {boolean}53 */54 public static getConstructor<T>(c: any): new (...args:any[]) => T {55 if (this.isInstantiated(c)) {56 return c.constructor;57 }58 return c;59 }60 /**61 * Get the constructor name from the constructor62 *63 * Returns null if not a constructor64 *65 * @param c66 * @returns {string | null}67 */68 public static getConstructorName(c: any): string | null {69 return this.getConstructor(c)?.name ?? null;70 }71 /**72 * @Credit: https://github.com/sindresorhus/callsites/blob/main/index.js73 *74 * @return {string}75 */76 public static getCallsites(): CallSite[] {77 const _prepareStackTrace = Error.prepareStackTrace;78 Error.prepareStackTrace = (_, stack) => stack;79 const stack = new Error().stack.slice(1);80 Error.prepareStackTrace = _prepareStackTrace;81 //@ts-ignore82 return stack;83 }84 /**85 * Returns information on where the module was loaded from86 * (this has to be called inside the module we want this information from)87 *88 * @Credit: https://github.com/sindresorhus/caller-callsite89 *90 * @param {number} depth91 * @return {CallSite}92 */93 public static getCallerCallsites(depth?: number): CallSite {94 const callers = [];95 const callerFileSet = new Set();96 const callSites = this.getCallsites();97 const fileNames = this.getCallsites().map(f => f.getFileName());98 for (const callsite of callSites) {99 const fileName = callsite.getFileName();100 const hasReceiver = callsite.getTypeName() !== null && fileName !== null;101 if (!callerFileSet.has(fileName)) {102 callerFileSet.add(fileName);103 callers.unshift(callsite);104 }105 if (hasReceiver) {106 return callers[depth];107 }108 }109 }110 public static getFrameworkModules(): { [key: string]: FrameworkModule } {111 const cache = require.cache;112 const projModules: { [key: string]: FrameworkModule } = {};113 for (let cacheKey in cache) {114 if (cacheKey.includes('node_modules') || !cacheKey.includes(process.cwd())) {115 continue;116 }117 const m = cache[cacheKey];118 projModules[cacheKey] = <FrameworkModule>{119 filePath : m.filename,120 directory : m.path,121 id : m.id,122 exportNames : Object.keys(m.exports),123 exports : m.exports,124 };125 }126 return projModules;127 }128 public static getModulePathFromConstructor(cstr: new () => any) {129 const callSites = this.getCallsites();130 const callSitePaths = this.getCallsites().map(f => f.getFileName());131 const result = callSites.find(c => {132 return c.getFileName().includes(cstr.name);133 });134 return {135 file : result.getFileName(),136 isConstructor : result.isConstructor()137 };138 }...
trace.js
Source:trace.js
...29 after: asyncAfter,30 destroy: asyncDestroy31});32hooks.enable();33function getCallSites(skip) {34 const limit = Error.stackTraceLimit;35 Error.stackTraceLimit = limit + skip;36 const stack = chain.callSite({37 extend: false,38 filter: true,39 slice: skip40 });41 Error.stackTraceLimit = limit;42 return stack;43}44function asyncInit(id, type, triggerId, resource) {45 const trace = getCallSites(2);46 // Add all the callSites from previous ticks47 if (triggerId !== 0) {48 trace.push.apply(trace, traces.get(triggerId));49 }50 // Cut the trace so it don't contain callSites there won't be shown anyway51 // because of Error.stackTraceLimit52 trace.splice(Error.stackTraceLimit);53 // `trace` now contains callSites from this ticks and all the ticks leading54 // up to this event in time55 traces.set(id, trace);56}57function asyncBefore(id) {58 // push the associated trace to the stack for this specific async action,59 // thereby allowing it to become a part of a error `stack` string....
callsite.js
Source:callsite.js
1'use strict'2const getCallsites = require('callsites')3const {parse, resolve} = require('path')4function getFileDirectory(path) {5 const parentPath = resolve(path, '../') // Assuming that will be 2 folders up6 return parse(parentPath).dir7}8module.exports = () => {9 const thisDir = getFileDirectory(__filename)10 const callsites = getCallsites()11 const externalFile = callsites.find(callsite => {12 const currentDir = getFileDirectory(callsite.getFileName())13 const isNotThisDir = thisDir !== currentDir14 return isNotThisDir15 })16 return externalFile...
Using AI Code Generation
1var callSites = getCallSites();2console.log(callSites);3[ CallSite {4 isPromiseRace: [Function: isPromiseRace] },5 CallSite {6 isPromiseRace: [Function: isPromiseRace] },7 CallSite {
Using AI Code Generation
1var getCallSites = require('./index.js').getCallSites;2var root = getCallSites();3console.log(root);4 {5 "callee": {6 },7 {8 }9 },10 {11 "id": {12 },13 "init": {14 "object": {15 },16 "property": {17 }18 }19 },20 {21 {22 "id": {23 },24 "init": {25 }26 }27 },28 {29 "expression": {30 "callee": {31 "object": {32 },33 "property": {34 }35 },36 {37 }38 }39 }
Using AI Code Generation
1var getCallSites = require('callsites')2var fs = require('fs')3function test() {4 var stack = getCallSites()5 console.log(stack)6 console.log(stack[0].getFileName())7 console.log(stack[0].getLineNumber())8 console.log(stack[0].getColumnNumber())9 console.log(stack[0].getFunctionName())10 console.log(stack[0].getTypeName())11 console.log(stack[0].getMethodName())12 console.log(stack[0].isToplevel())13 console.log(stack[0].isEval())14 console.log(stack[0].isNative())15 console.log(stack[0].isConstructor())16 console.log(stack[0].toString())17 console.log('\n\n')18}19test()20fs.readFile(__filename, function (err, data) {21 test()22})23[ CallSite {24 toString: [Function: toString] },25 CallSite {
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!