Code Monkey home page Code Monkey logo

node-gir's Introduction

node-gir

CircleCI npm npm

Node-gir is Node.js bindings to GObject Introspection making it possible to make automatic and dynamic calls to any library that has GI annotations installed. This includes most libraries from the GNOME project.

This will make it possible to script a GNOME desktop system entirely from node much in the way it's done today with Seed, GJS or pygtk. It also allows using GNOME libraries in Node.js applications. With it you can also write the performance-intensive parts of your applications in Vala and call them from Node.js and other languages.

Installation

You need GObject Introspection library to be installed. On a Debian-like system this would be handled by:

$ sudo apt-get install libgirepository1.0-dev

On an arch based system:

$ sudo pacman -S gobject-introspection

On macOS:

$ brew install gobject-introspection

Then just install node-gir with:

$ npm install node-gir

Running tests

The tests load the gtk3 library to use as a testing target. On a Debian-like system it's likely you already have gtk3 installed, if not, it can be installed using:

$ sudo apt-get install libgtk-3-dev

Or on macOS:

$ brew install gtk+3

You can then run the tests with the following:

$ npm test

Linting code

ClangFormat is used for linting the C/C++ code. On a Debian-like system you can install it by running the following:

$ sudo apt-get install clang-format

You can then run the linter with the following:

$ npm run lint

Things which work

  • Bindings for classes are generated
  • Classes support inheritance
  • Interface methods are inherited
  • C structures are propagated as objects (fields are properties)
    • This is likely to be re-implemented though as it's very buggy currently
  • Both methods and static method can be called
  • functions can be called
    • out arguments are currently buggy.
  • GError is propagated as generic exception
  • Properties can be set/get
  • Support for signals using .connect('signal', callback)
  • Support for glib main loop.
    • the Node eventloop will be nested in the glib loop
    • we need to write documentation to detailing how this works

Things which dont work (correct)

  • Conversion between a v8 value and a GValue/GArgument is veeeery buggy (but everything needs it so most things are buggy)
  • There is no good way to delete an object (memory management sucks at all)
  • GError should be propagated as derived classes depending on GError domain
  • Structs and boxed types are still being implemented

node-gir's People

Contributors

ackalker avatar backwards-rat-race avatar benwaffle avatar bergie avatar cedlemo avatar clayrisser avatar creationix avatar daball avatar ewnd9 avatar jasperla avatar jonnor avatar piotras avatar place1 avatar swick avatar trevorlinton avatar

Watchers

 avatar  avatar

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.