• Stars
    star
    118
  • Rank 299,923 (Top 6 %)
  • Language
    JavaScript
  • Created over 12 years ago
  • Updated almost 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Create ABI-compliant "struct" instances on top of Buffers

ref-struct

Create ABI-compliant "struct" instances on top of Buffers

Build Status Build Status

This module offers a "struct" implementation on top of Node.js Buffers using the ref "type" interface.

Installation

Install with npm:

$ npm install ref-struct

Examples

Say you wanted to emulate the timeval struct from the stdlib:

struct timeval {
  time_t       tv_sec;   /* seconds since Jan. 1, 1970 */
  suseconds_t  tv_usec;  /* and microseconds */
};
var ref = require('ref')
var StructType = require('ref-struct')

// define the time types
var time_t = ref.types.long
var suseconds_t = ref.types.long

// define the "timeval" struct type
var timeval = StructType({
  tv_sec: time_t,
  tv_usec: suseconds_t
})

// now we can create instances of it
var tv = new timeval

With node-ffi

This gets very powerful when combined with node-ffi to invoke C functions:

var ffi = require('ffi')

var tv = new timeval
gettimeofday(tv.ref(), null)

Progressive API

You can build up a Struct "type" incrementally (useful when interacting with a parser) using the defineProperty() function. But as soon as you create an instance of the struct type, then the struct type is finalized, and no more properties may be added to it.

var ref = require('ref')
var StructType = require('ref-struct')

var MyStruct = StructType()
MyStruct.defineProperty('width', ref.types.int)
MyStruct.defineProperty('height', ref.types.int)

var i = new MyStruct({ width: 5, height: 10 })

MyStruct.defineProperty('weight', ref.types.int)
// AssertionError: an instance of this Struct type has already been created, cannot add new "fields" anymore
//      at Function.defineProperty (/Users/nrajlich/ref-struct/lib/struct.js:180:3)

License

(The MIT License)

Copyright (c) 2012 Nathan Rajlich <[email protected]>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

Java-WebSocket

A barebones WebSocket client and server implementation written in 100% Java.
Java
10,438
star
2

NodObjC

The Node.js ⇆ Objective-C bridge
JavaScript
1,396
star
3

proxy-agents

Node.js HTTP Proxy Agents Monorepo
TypeScript
912
star
4

node-spotify-web

Node.js implementation of the Spotify Web protocol
JavaScript
695
star
5

node-speaker

Output PCM audio data to the speakers
JavaScript
634
star
6

plist.js

Mac OS X Plist parser/builder for Node.js and browsers
JavaScript
584
star
7

ansi-canvas

Render a <canvas> node to your terminal
JavaScript
578
star
8

node-lame

Node.js native bindings to libmp3lame & libmpg123
C++
561
star
9

ref

Turn Buffer instances into "pointers"
JavaScript
453
star
10

node-bindings

Helper module for loading your native module's `.node` file
JavaScript
394
star
11

node-time

"time.h" bindings for Node.js
JavaScript
377
star
12

node-applescript

A Node.js module to easily execute arbitrary AppleScript code on Mac OS X.
JavaScript
375
star
13

keypress

Make any Node ReadableStream emit "keypress" events
JavaScript
352
star
14

node-socks-proxy-agent

A SOCKS (v4/v5) proxy `http.Agent` implementation for HTTP and HTTPS
333
star
15

ansi.js

Advanced ANSI formatting tool for Node.js
JavaScript
315
star
16

node-icy

Node.js module for parsing and/or injecting ICY metadata
JavaScript
288
star
17

node-proxy-agent

Maps proxy protocols to `http.Agent` implementations
284
star
18

node-iOS

Native node bindings to iOS functionality (vibrate, acceleromoter, geoservices, etc.)
C++
265
star
19

proxy

An HTTP proxy written with Node.js (think Squid)
254
star
20

gnode

Run node with ES6 Generators, today!
JavaScript
247
star
21

node-throttle

Node.js Transform stream that passes data through at `n` bytes per second
JavaScript
179
star
22

node-wav

`Reader` and `Writer` streams for Microsoft WAVE audio files
JavaScript
174
star
23

superagent-proxy

`Request#proxy(uri)` superagent extension
JavaScript
154
star
24

nx.js

JavaScript runtime for Nintendo Switch homebrew applications
C++
147
star
25

node-nat-pmp

Node.js implementation of the NAT Port Mapping Protocol
JavaScript
129
star
26

node-http-proxy-agent

An HTTP(s) proxy `http.Agent` implementation for HTTP endpoints
128
star
27

node-cgi

An http/stack/connect layer to invoke and serve CGI executables.
Perl
100
star
28

nTunes

A REST (HTTP) API for interacting with iTunes written in NodeJS.
JavaScript
95
star
29

node-telnet

Telnet implementation for Node.js
JavaScript
87
star
30

node-modbus-stack

A `StreamStack` implementation of the MODBUS protocol, for NodeJS.
JavaScript
87
star
31

node-data-uri-to-buffer

Generate a Buffer instance from a Data URI string
86
star
32

node-upnp-client

UPnP Library for NodeJS.
JavaScript
69
star
33

spotify-uri

Parse and format the various Spotify URI formats
JavaScript
66
star
34

node-ogg

Node.js native binding to libogg
JavaScript
65
star
35

node-pac-proxy-agent

A PAC file proxy `http.Agent` implementation for HTTP and HTTPS
58
star
36

node-agent-base

Turn a function into an `http.Agent` instance
58
star
37

NodeFloyd

An Icecast-compatible server written in NodeJS that streams non-stop "Pink Floyd"!
JavaScript
54
star
38

ref-array

Create C "array" instances on top of Buffers
JavaScript
53
star
39

node-pac-resolver

Generates an asynchronous resolver function from a PAC file
53
star
40

node-get-uri

Returns a `stream.Readable` from a URI string
49
star
41

stat-mode

Offers convenient getters and setters for the fs.stat()'s `mode`
TypeScript
48
star
42

node-gitweb

Directly invoke and serve GitWeb through NodeJS.
JavaScript
40
star
43

util-deprecate

The Node.js `util.deprecate()` function with browser support
JavaScript
37
star
44

ttys

Guaranteed read and write streams to the terminal
JavaScript
36
star
45

blessed-css

CSS engine for `blessed`
TypeScript
35
star
46

node-flv

FLV media container file format encoder and decoder
JavaScript
34
star
47

click-outside

The inverse of the DOM "click" event
HTML
34
star
48

switch-tools

Web app to create "NSP forwarders" for your modded Nintendo Switch
TypeScript
34
star
49

n8.io-old

my blog (deployed to DigitalOcean)
JavaScript
32
star
50

node-drone-joystick

Control AR.Drones using any SDL-compatible Joystick (PS3 Sixaxis, etc.)
JavaScript
31
star
51

SandboxJS

JavaScript "Sandboxes" for the web browser.
JavaScript
31
star
52

node-stream-parser

Generic interruptible "parser" mixin for Transform & Writable streams
JavaScript
29
star
53

node-vorbis

Node.js native binding to libvorbis
JavaScript
28
star
54

node-iTunes

A native node interface to interact with an iTunes process.
C++
28
star
55

node-elf-logger

A Node.js library for configurable HTTP logging following the W3C Extended Log File Format
JavaScript
28
star
56

file-uri-to-path

Convert a `file:` URI to a file path
JavaScript
27
star
57

node-function-name

Set the "name" property of `Function` objects
JavaScript
27
star
58

node-stream-stack

Filter low-level `Stream` instances into stackable, protocol-based streams.
JavaScript
27
star
59

node-buffer-dataview

Minimal DataView implementation that works with Node.js Buffers
JavaScript
26
star
60

node-dlopen

Native bindings to libuv's uv_dlopen() and friends
JavaScript
26
star
61

Simple-Game-Framework

An object-oriented JavaScript API to develop simple, shape and sprite based games.
JavaScript
25
star
62

iheart

iHeart Radio JavaScript API
JavaScript
24
star
63

rocker

Remote Docker: docker -H ssh://[email protected] run -p 80:80 nginx
Shell
23
star
64

once

Creates a Promise that waits for a single event
TypeScript
23
star
65

node-amf

"Action Message Format" read() and write() functions for Buffers
JavaScript
22
star
66

SoundJS

A cross-browser JavaScript sound loading, playing and layering library primarily designed for browser-based games to have a multi-layering sound API.
Haxe
22
star
67

pcre-to-regexp

Converts PCRE regexp strings to JavaScript RegExp instances
JavaScript
21
star
68

node-ctypes

Node.js implementation of "ctypes" to interface with C libs
JavaScript
20
star
69

node-degenerator

Turns sync functions into async functions
19
star
70

node-function-class

Easy `Function` subclasses
JavaScript
19
star
71

nightscout-ps1

Renders your latest blood glucose reading from Nightscout in the command line
JavaScript
19
star
72

nightscout-ps1-c

Tiny C program that formats your latest Nightscout BGL reading for use in your terminal prompt (a.k.a $PS1)
C
18
star
73

ar-drone-socket.io-proxy

Proxy AR.Drone UDP messages over a Socket.io HTTP connection
JavaScript
17
star
74

dotfiles

My dotfiles and such...
Vim Script
17
star
75

path-array

Treat your $PATH like a JavaScript Array
JavaScript
17
star
76

react-tela

Use React to render images, shapes and text to `<canvas>`
TypeScript
17
star
77

node-drone-video

Dump AR.Drone h264 video streams with matching metadata video. Splicing/editing is left up to you.
JavaScript
16
star
78

RetroPie-Profiles

RetroPie plugin to create profiles for save files and save states
Shell
15
star
79

ref-union

Create ABI-compliant "union" instances on top of Buffers
JavaScript
15
star
80

babel-plugin-transform-dirname-filename

Babel plugin that rewrites `__dirname` and `__filename` to static values
JavaScript
15
star
81

mpg123.js

Decode MP3s in the browser using libmpg123 compiled with emscripten
JavaScript
15
star
82

s3fs

Implementation of NodeJS FS interface using Amazon Simple Storage Service (S3).
JavaScript
14
star
83

array-index

Invoke getter/setter functions on array-like objects
JavaScript
14
star
84

node-gitProvider

An http/connect/stack layer to serve the contents of a 'git' repository over HTTP.
JavaScript
14
star
85

n8-make

Opinionated Makefile to build ES6 JS, JSX and Pug files
Makefile
13
star
86

ref-wchar

A ref "type" implementation of `wchar_t *` (a.k.a. wide string) backed by "node-iconv"
JavaScript
13
star
87

nTunesAnywhere

A mobile WebApp to stream your iTunes library from anywhere (using nTunes and jo)!
JavaScript
12
star
88

node-dlfcn

Native bindings to the dynamic shared library linker (dlfcn)
JavaScript
11
star
89

dexcom-share

Async Iterator API for reading blood glucose readings from Dexcom's Share servers
TypeScript
11
star
90

ModuleJS

Asynchronous CommonJS-like Module Loader for web-browsers.
JavaScript
10
star
91

node-objc

This module is deprecated in favor of NodObjC. Use that instead.
C++
9
star
92

vercel-dev-builder

Meta-runtime for Vecel that makes developing Runtimes easier
TypeScript
9
star
93

create

The missing Native.create() functions that ECMA forgot.
JavaScript
9
star
94

nexec

Execute a remote command over HTTP
JavaScript
9
star
95

ansi-hash

Get an ANSI color code for a given string
JavaScript
8
star
96

node-http-stack

A `StreamStack` implementation of the HTTP protocol, for NodeJS.
JavaScript
8
star
97

node-mail-stack

A `StreamStack` subclass that parses raw e-mail messages.
JavaScript
8
star
98

browserify-single-file

Runs browserify transforms/plugins on a single file. Useful for make pipeline tasks.
JavaScript
8
star
99

node-autoreleasepool

A very simple wrapper around the OS X NSAutoreleasePool, for NodeJS
C++
7
star
100

require-string

Turns an arbitrary String into a CommonJS compatible module
JavaScript
7
star