Giter Club home page Giter Club logo

Comments (10)

yyx990803 avatar yyx990803 commented on May 8, 2024

Yeah, this could be pretty handy.

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

Cool! I'll do a PR when I have some time.

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

Fiddle here with the implemented code: http://jsfiddle.net/ayamflow/RT7kG/ - waiting to push the PR, it just bothers me that doing Vue.log(vm) will throw an error because of the circular reference.

I'm not sure if I should test each arguments and ignore the ones with circular reference, or just keep it as it is, since it's the expected behavior from JSON.parse.

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

Bumping this - could @yyx990803 or a more experienced developer than me give me a hint ?
If my implementation is bad or brings weird checks to the codebase, I can make it a plugin instead.

from discussion.

yyx990803 avatar yyx990803 commented on May 8, 2024

The circular reference comes from vm.$compiler.vm. It might be easier to do a shallow clone and in the process filter out all keys that start with $.

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

I didn't expect this helper to give me such trouble ahah ! I had some free time tonight so I gave it a go.

I ended up with this, what do you think ? Instead of cloning, I tested if each property passed to the Vue.log method was a vm or a $compiler.

/**
     * Clean log without getter/setter
     * usefull for in-application debugging.
     * Only log $data & its properties
     */
    cleanLog: function() {
        if(!console) return

        var args = [].slice.call(arguments)

        for(var i = args.length - 1; i >= 0; i--) {
            var arg = args[i]
            if(!utils.isTrueObject(arg)) continue

            var hasCircularRef = false,
                isVm = !!arg.$compiler

            // If arg is a vm, log $data directly
            if(isVm) {
                args.splice(i, 1, arg.$data)
                continue
            }

            // don't log if $ or $compiler
            for(var prop in arg) {
                // $compiler
                if(prop === 'vm') hasCircularRef = true
                // $ / v-ref
                if(utils.isTrueObject(arg[prop]) && '$compiler' in arg[prop]) hasCircularRef = true
            }

            if(hasCircularRef) {
                args.splice(i, 1)
                continue
            }
        }
        return console.log.apply(console, JSON.parse(JSON.stringify(args)))
    }

Basically, it will ignore any properties not coming from the $data hash.

It's a bit long for its purpose, but I think all the use cases are covered. I need to add some unit tests to be sure though.

Edit: Check this fiddle to see it working.

from discussion.

yyx990803 avatar yyx990803 commented on May 8, 2024

Pretty cool! It has grown more complex than I thought too, but maybe this could fit well as a debugging plugin? That way we don't have to include code that won't be used in production and have the flexibility to add more debugging functionalities in the future.

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

Yep that's what I was thinking !
Thank your for your guidance, much appreciated. I'll make it a plugin when I have some time :)

from discussion.

ayamflow avatar ayamflow commented on May 8, 2024

Here it comes: vue-debug.
Only adding the Vue.log method for now. Hoping people will contribute and add amazing methods !

(I'll tinker with the test runner later this week)

from discussion.

yyx990803 avatar yyx990803 commented on May 8, 2024

👍

from discussion.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.