I didn't expect this to work, but `npx cgjs-about` works fine, without having to install cgjs-about.
On Wed, Nov 8, 2017 at 5:50 PM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > cgjs-about 0.2.0 is out with `abstract class` and `adbstracts` info per > namespace/class > > thanks everybody for the hint! > > On Wed, Nov 8, 2017 at 1:43 PM, Emmanuele Bassi <eba...@gmail.com> wrote: > >> If you're parsing the GIR, there's an "abstract" attribute for abstract >> classes. >> >> If you're using the GIRepository API, you can use >> `g_object_info_get_abstract()` to know if a type is abstract. >> >> Ciao, >> Emmanuele. >> >> On 8 November 2017 at 16:40, Sam Jansen <sam.jan...@starleaf.com> wrote: >> > Perhaps you can check whether any methods are constructors? This is >> > effectively the information I look at when parsing GIR files for my TS >> > definitions... >> > >> > http://devdocs.baznga.org/girepository20~2.0_api/girepositor >> y.functioninfoflags#default-is_constructor >> > >> > On 8 November 2017 at 12:37, Andrea Giammarchi < >> andrea.giammar...@gmail.com> >> > wrote: >> >> >> >> the documentation doesn't say if I can instantiate those classes, or >> does >> >> it? >> >> >> >> if I could understand via GIRepository.Repository if a class could be >> >> extended/instantiated I could improve cgjs-about to show that right >> away. >> >> >> >> So far I thought that `objects` where all usable as `new Class` but >> that's >> >> not the case at all. Maybe I should check for an `is_abstract_object` ? >> >> >> >> Not sure there is anything like that though. >> >> >> >> Thanks. >> >> >> >> >> >> On Wed, Nov 8, 2017 at 3:41 AM, <philip.chime...@gmail.com> wrote: >> >>> >> >>> This comes a bit too late to help you, sorry, but the C docs will tell >> >>> you which classes extend a base class, e.g. for GInputStream >> >>> (Gio.InputStream in GJS): >> >>> https://developer.gnome.org/gio/stable/GInputStream.html#GIn >> putStream.object-hierarchy >> >>> >> >>> On Tue, Nov 7, 2017 at 2:36 PM Andrea Giammarchi >> >>> <andrea.giammar...@gmail.com> wrote: >> >>>> >> >>>> so, just FYI ... >> >>>> >> >>>> Buffered, Converter, Data, File, Memory and Unix InputStream are >> >>>> available. >> >>>> >> >>>> Buffered, Converter, and Data need a base_stream to work ... not a >> >>>> primitive. >> >>>> >> >>>> File and Unix need attributes or fd pointers >> >>>> >> >>>> The Memory seems to be the "base/primitive" I was looking for >> together >> >>>> with its MemoryOutputStream counterpart. >> >>>> >> >>>> Regards >> >>>> >> >>>> >> >>>> >> >>>> On Tue, Nov 7, 2017 at 7:28 PM, Andrea Giammarchi >> >>>> <andrea.giammar...@gmail.com> wrote: >> >>>>> >> >>>>> oh gosh, my own utility ... that is less useful in pretty print for >> >>>>> these kind of things .... although the list has many non-usable >> streams but >> >>>>> now I want to know which one is usable. >> >>>>> >> >>>>> P.S. for namespaces you don't' need gi prefix ... cgjs-about Gio >> would >> >>>>> do the same ;-) >> >>>>> >> >>>>> Thanks again >> >>>>> >> >>>>> On Tue, Nov 7, 2017 at 7:09 PM, Sam Jansen <sam.jan...@starleaf.com >> > >> >>>>> wrote: >> >>>>>> >> >>>>>> >> >>>>>> >> >>>>>> On 7 November 2017 at 21:55, Andrea Giammarchi >> >>>>>> <andrea.giammar...@gmail.com> wrote: >> >>>>>>> >> >>>>>>> this is gold, thank you!!! >> >>>>>>> >> >>>>>>> do you know if MemoryInputStream is the only one usable? is there >> any >> >>>>>>> list of available GJS streams one can use? I think memory is just >> fine >> >>>>>>> though, thanks again a lot! >> >>>>>>> >> >>>>>> >> >>>>>> I just took an educated guess: I figured anything useful would >> extend >> >>>>>> Gio.InputStream. I then just browsed through the docs, looking for >> anything >> >>>>>> with "InputStream" in their name, which isn't so many... >> >>>>>> >> >>>>>> This is a good place to start perhaps: >> >>>>>> >> >>>>>> $ cgjs-about gi.Gio --json | grep InputStream | grep -Ev >> >>>>>> "Class|Private" >> >>>>>> >> >>>>>> >> >>>>>> It would be a neat extension to cgjs-about if one could have it >> list >> >>>>>> the classes known to implement an interface or extend from a >> class... >> >>>>>> >> >>>>>>> >> >>>>>>> On Tue, Nov 7, 2017 at 6:46 PM, Sam Jansen < >> sam.jan...@starleaf.com> >> >>>>>>> wrote: >> >>>>>>>> >> >>>>>>>> Hi Andrea, >> >>>>>>>> >> >>>>>>>> I've come up with something that... almost does what you're >> looking >> >>>>>>>> at here. Perhaps it's useful as a guide of what one can do with >> the Gio >> >>>>>>>> interface. >> >>>>>>>> >> >>>>>>>> I think you may hit some awkward problems with modelling >> Node-style >> >>>>>>>> streams with GLib ones. But perhaps it is possible and this >> helps. I don't >> >>>>>>>> really know the Node stream semantics so I have assumed various >> things in my >> >>>>>>>> Readable implementation as you'll see... Note that >> MemoryInputStream really >> >>>>>>>> is just a byte stream; so there is no guarantee you'll receive >> the exact >> >>>>>>>> block of bytes that was written -- for example, when I run this >> I get a >> >>>>>>>> first chunk of "12", followed by "3", "4", etc. >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> let Gio = imports.gi.Gio; >> >>>>>>>> let byteArray = imports.byteArray; >> >>>>>>>> let mainloop = imports.mainloop; >> >>>>>>>> >> >>>>>>>> class Readable { >> >>>>>>>> constructor() { >> >>>>>>>> this._mio = Gio.MemoryInputStream.new(); >> >>>>>>>> this._callbacks = {}; >> >>>>>>>> this._startNext(); >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> _startNext() { >> >>>>>>>> // Enqueue an async read; and re-enqueue when it finishes, so >> >>>>>>>> we're >> >>>>>>>> // always waiting for data... >> >>>>>>>> this._mio.read_bytes_async(4096, 1, null, (source, res) => { >> >>>>>>>> this._onData(this._mio.read_bytes_finish(res)); >> >>>>>>>> this._startNext(); >> >>>>>>>> }); >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> _onData(bytes) { >> >>>>>>>> if (this._callbacks['data']) { >> >>>>>>>> let ba = byteArray.fromGBytes(bytes); >> >>>>>>>> this._callbacks['data'](ba); >> >>>>>>>> this._read(); >> >>>>>>>> } >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> push(bytes) { >> >>>>>>>> if (bytes == null) { >> >>>>>>>> mainloop.quit('main'); >> >>>>>>>> return; >> >>>>>>>> } >> >>>>>>>> this._mio.add_bytes(bytes); >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> on(name, callback) { >> >>>>>>>> this._callbacks[name] = callback; >> >>>>>>>> if (name === 'data') { >> >>>>>>>> this._read(); >> >>>>>>>> } >> >>>>>>>> } >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> class Counter extends Readable { >> >>>>>>>> constructor(opt) { >> >>>>>>>> super(opt); >> >>>>>>>> this._max = 1000; >> >>>>>>>> this._index = 1; >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> _read() { >> >>>>>>>> const i = this._index++; >> >>>>>>>> if (i > this._max) >> >>>>>>>> this.push(null); >> >>>>>>>> else { >> >>>>>>>> const str = '' + i; >> >>>>>>>> const buf = byteArray.fromString(str); // Buffer.from(str, >> >>>>>>>> 'ascii'); >> >>>>>>>> this.push(buf); >> >>>>>>>> } >> >>>>>>>> } >> >>>>>>>> } >> >>>>>>>> >> >>>>>>>> (new Counter).on('data', (str) => { >> >>>>>>>> print("data", str.toString()); >> >>>>>>>> }); >> >>>>>>>> >> >>>>>>>> mainloop.run('main'); >> >>>>>>>> >> >>>>>>>> >> >>>>>>>> On 7 November 2017 at 10:08, Andrea Giammarchi >> >>>>>>>> <andrea.giammar...@gmail.com> wrote: >> >>>>>>>>> >> >>>>>>>>> I am trying to implement a stream module and apparently I have >> >>>>>>>>> everything I need but practically I'm unable to use streams. >> >>>>>>>>> >> >>>>>>>>> If I instantiate a `new Gio.InputStream` I have the following >> >>>>>>>>> error: >> >>>>>>>>> cannot create instance of abstract (non-instantiatable) type >> >>>>>>>>> 'GInputStream' >> >>>>>>>>> >> >>>>>>>>> I cannot even extend it ... so I've though "ok, maybe it's like >> an >> >>>>>>>>> interface, I implement it and that's it" >> >>>>>>>>> >> >>>>>>>>> But then a JS class wouldn't work as base_stream for a >> >>>>>>>>> Gio.BufferedInputStream, and if I extend the JS class to be a >> GObject.Object >> >>>>>>>>> then: >> >>>>>>>>> Gjs-WARNING **: JS ERROR: TypeError: Object is of type >> >>>>>>>>> GObject.Object - cannot convert to GInputStream >> >>>>>>>>> >> >>>>>>>>> where GInputStream is the one I cannot use in the first place. >> >>>>>>>>> >> >>>>>>>>> I've reached full circle then so ... I wonder if anyone has any >> >>>>>>>>> idea how to use/create/extend streams in GJS (not talking about >> file streams >> >>>>>>>>> but streams in general) or if it's even possible. >> >>>>>>>>> >> >>>>>>>>> In node, as example, I could do this and it will work: >> >>>>>>>>> >> >>>>>>>>> ```js >> >>>>>>>>> >> >>>>>>>>> const { Readable } = require('stream'); >> >>>>>>>>> >> >>>>>>>>> class Counter extends Readable { >> >>>>>>>>> constructor(opt) { >> >>>>>>>>> super(opt); >> >>>>>>>>> this._max = 1000; >> >>>>>>>>> this._index = 1; >> >>>>>>>>> } >> >>>>>>>>> >> >>>>>>>>> _read() { >> >>>>>>>>> const i = this._index++; >> >>>>>>>>> if (i > this._max) >> >>>>>>>>> this.push(null); >> >>>>>>>>> else { >> >>>>>>>>> const str = '' + i; >> >>>>>>>>> const buf = Buffer.from(str, 'ascii'); >> >>>>>>>>> this.push(buf); >> >>>>>>>>> } >> >>>>>>>>> } >> >>>>>>>>> } >> >>>>>>>>> >> >>>>>>>>> (new Counter).on('data', console.log); >> >>>>>>>>> >> >>>>>>>>> ``` >> >>>>>>>>> >> >>>>>>>>> _______________________________________________ >> >>>>>>>>> javascript-list mailing list >> >>>>>>>>> javascript-list@gnome.org >> >>>>>>>>> https://mail.gnome.org/mailman/listinfo/javascript-list >> >>>>>>>>> >> >>>>>>>> >> >>>>>>> >> >>>>>> >> >>>>> >> >>>> >> >>>> _______________________________________________ >> >>>> javascript-list mailing list >> >>>> javascript-list@gnome.org >> >>>> https://mail.gnome.org/mailman/listinfo/javascript-list >> >> >> >> >> > >> > >> > _______________________________________________ >> > javascript-list mailing list >> > javascript-list@gnome.org >> > https://mail.gnome.org/mailman/listinfo/javascript-list >> > >> >> >> >> -- >> https://www.bassi.io >> [@] ebassi [@gmail.com] >> > > > _______________________________________________ > javascript-list mailing list > javascript-list@gnome.org > https://mail.gnome.org/mailman/listinfo/javascript-list > >
_______________________________________________ javascript-list mailing list javascript-list@gnome.org https://mail.gnome.org/mailman/listinfo/javascript-list