cleanup II
rodzic
e75c66e9c0
commit
49ccbb7617
|
@ -0,0 +1,17 @@
|
|||
[package]
|
||||
name = "advanced-orm"
|
||||
version = "0.1.0"
|
||||
authors = ["Claus Matzinger <claus.matzinger+kb@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "1"
|
||||
serde = "1"
|
||||
serde_derive = "1"
|
||||
env_logger = "0.6"
|
||||
diesel = {version = "1.4", features = ["sqlite"] }
|
||||
uuid = { version = "0.7", features = ["serde", "v4"] }
|
||||
futures = "0.1"
|
||||
chrono = "0.4"
|
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,170 @@
|
|||
#[macro_use]
|
||||
extern crate diesel;
|
||||
mod models;
|
||||
mod schema;
|
||||
|
||||
use actix_web::{middleware, web, App, Error, HttpResponse, HttpServer};
|
||||
|
||||
use std::env;
|
||||
|
||||
use crate::schema::{date, julianday};
|
||||
use chrono::prelude::*;
|
||||
use diesel::prelude::*;
|
||||
use diesel::sqlite::SqliteConnection;
|
||||
use futures::Future;
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
// Helpers
|
||||
const SQLITE_DB_URL: &str = "db/bookmarks.sqlite";
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct WebBookmark {
|
||||
url: String,
|
||||
comment: Option<String>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct WebBookmarkResponse {
|
||||
id: String,
|
||||
added: String,
|
||||
url: String,
|
||||
comment: Option<String>,
|
||||
}
|
||||
|
||||
fn connect(db_url: &str) -> SqliteConnection {
|
||||
SqliteConnection::establish(&SQLITE_DB_URL).expect(&format!("Error connecting to {}", db_url))
|
||||
}
|
||||
|
||||
// Handlers
|
||||
|
||||
fn bookmarks_as_julian_by_date(
|
||||
at: web::Path<(String)>,
|
||||
) -> impl Future<Item = HttpResponse, Error = Error> {
|
||||
web::block(move || {
|
||||
use self::schema::bookmarks::dsl::*;
|
||||
let conn = connect(&SQLITE_DB_URL);
|
||||
bookmarks
|
||||
.select((id, url, julianday(added)))
|
||||
.filter(date(added).eq(at.as_str()))
|
||||
.load::<models::JulianBookmark>(&conn)
|
||||
})
|
||||
.then(|res| match res {
|
||||
Ok(obj) => Ok(HttpResponse::Ok().json(obj)),
|
||||
Err(_) => Ok(HttpResponse::InternalServerError().into()),
|
||||
})
|
||||
}
|
||||
|
||||
fn bookmarks_add(
|
||||
bookmark: web::Json<WebBookmark>,
|
||||
) -> impl Future<Item = HttpResponse, Error = Error> {
|
||||
web::block(move || {
|
||||
use self::schema::bookmarks::dsl::*;
|
||||
use self::schema::comments::dsl::*;
|
||||
|
||||
let conn = connect(&SQLITE_DB_URL);
|
||||
let new_id = format!("{}", uuid::Uuid::new_v4());
|
||||
let now = Utc::now().to_rfc3339();
|
||||
let new_bookmark = models::NewBookmark {
|
||||
id: &new_id,
|
||||
url: &bookmark.url,
|
||||
added: &now,
|
||||
};
|
||||
|
||||
if let Some(comment_) = &bookmark.comment {
|
||||
let new_comment_id = format!("{}", uuid::Uuid::new_v4());
|
||||
let new_comment = models::NewComment {
|
||||
comment_id: &new_comment_id,
|
||||
bookmark_id: &new_id,
|
||||
comment: &comment_,
|
||||
};
|
||||
let _ = diesel::insert_into(comments)
|
||||
.values(&new_comment)
|
||||
.execute(&conn);
|
||||
}
|
||||
|
||||
diesel::insert_into(bookmarks)
|
||||
.values(&new_bookmark)
|
||||
.execute(&conn)
|
||||
.map(|_| new_id)
|
||||
})
|
||||
.then(|res| match res {
|
||||
Ok(obj) => Ok(HttpResponse::Ok().json(obj)),
|
||||
Err(_) => Ok(HttpResponse::InternalServerError().into()),
|
||||
})
|
||||
}
|
||||
|
||||
fn bookmarks_delete(
|
||||
req_id: web::Path<(String)>,
|
||||
) -> impl Future<Item = HttpResponse, Error = Error> {
|
||||
web::block(move || {
|
||||
use self::schema::bookmarks::dsl::*;
|
||||
use self::schema::comments::dsl::*;
|
||||
|
||||
let conn = connect(&SQLITE_DB_URL);
|
||||
diesel::delete(bookmarks.filter(id.eq(req_id.as_str())))
|
||||
.execute(&conn)
|
||||
.and_then(|_| {
|
||||
diesel::delete(comments.filter(bookmark_id.eq(req_id.as_str()))).execute(&conn)
|
||||
})
|
||||
})
|
||||
.then(|res| match res {
|
||||
Ok(obj) => Ok(HttpResponse::Ok().json(obj)),
|
||||
Err(_) => Ok(HttpResponse::InternalServerError().into()),
|
||||
})
|
||||
}
|
||||
|
||||
fn all_bookmarks() -> impl Future<Item = HttpResponse, Error = Error> {
|
||||
web::block(move || {
|
||||
use self::schema::bookmarks::dsl::*;
|
||||
use self::schema::comments::dsl::*;
|
||||
|
||||
let conn = connect(&SQLITE_DB_URL);
|
||||
bookmarks
|
||||
.left_outer_join(comments)
|
||||
.load::<(models::Bookmark, Option<models::Comment>)>(&conn)
|
||||
.map(
|
||||
|bookmarks_: Vec<(models::Bookmark, Option<models::Comment>)>| {
|
||||
let responses: Vec<WebBookmarkResponse> = bookmarks_
|
||||
.into_iter()
|
||||
.map(|(b, c)| WebBookmarkResponse {
|
||||
id: b.id,
|
||||
url: b.url,
|
||||
added: b.added,
|
||||
comment: c.map(|c| c.comment),
|
||||
})
|
||||
.collect();
|
||||
responses
|
||||
},
|
||||
)
|
||||
})
|
||||
.then(|res| match res {
|
||||
Ok(obj) => Ok(HttpResponse::Ok().json(obj)),
|
||||
Err(_) => Ok(HttpResponse::InternalServerError().into()),
|
||||
})
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
env::set_var("RUST_LOG", "actix_web=debug");
|
||||
env_logger::init();
|
||||
HttpServer::new(move || {
|
||||
App::new().wrap(middleware::Logger::default()).service(
|
||||
web::scope("/api").service(
|
||||
web::scope("/bookmarks")
|
||||
.service(web::resource("/all").route(web::get().to_async(all_bookmarks)))
|
||||
.service(
|
||||
web::resource("added_on/{at}/julian")
|
||||
.route(web::get().to_async(bookmarks_as_julian_by_date)),
|
||||
)
|
||||
.service(
|
||||
web::resource("/")
|
||||
.data(web::JsonConfig::default())
|
||||
.route(web::post().to_async(bookmarks_add)),
|
||||
)
|
||||
.service(
|
||||
web::resource("by-id/{id}").route(web::delete().to_async(bookmarks_delete)),
|
||||
),
|
||||
),
|
||||
)
|
||||
})
|
||||
.bind("127.0.0.1:8081")?
|
||||
.run()
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
use crate::schema::{bookmarks, comments};
|
||||
use serde_derive::Serialize;
|
||||
|
||||
#[derive(Debug, Clone, Insertable)]
|
||||
#[table_name = "bookmarks"]
|
||||
pub struct NewBookmark<'a> {
|
||||
pub id: &'a str,
|
||||
pub url: &'a str,
|
||||
pub added: &'a str,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Queryable)]
|
||||
pub struct Bookmark {
|
||||
pub id: String,
|
||||
pub url: String,
|
||||
pub added: String,
|
||||
}
|
||||
|
||||
#[derive(Serialize, Queryable)]
|
||||
pub struct JulianBookmark {
|
||||
pub id: String,
|
||||
pub url: String,
|
||||
pub julian: f32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Queryable)]
|
||||
pub struct Comment {
|
||||
pub bookmark_id: String,
|
||||
pub comment_id: String,
|
||||
pub comment: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Insertable)]
|
||||
#[table_name = "comments"]
|
||||
pub struct NewComment<'a> {
|
||||
pub bookmark_id: &'a str,
|
||||
pub comment_id: &'a str,
|
||||
pub comment: &'a str,
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
use diesel::sql_types::Text;
|
||||
joinable!(comments -> bookmarks (bookmark_id));
|
||||
allow_tables_to_appear_in_same_query!(comments, bookmarks);
|
||||
|
||||
sql_function! {
|
||||
fn julianday(t: Text) -> Float;
|
||||
}
|
||||
sql_function! {
|
||||
fn date(t: Text) -> Text;
|
||||
}
|
||||
|
||||
table! {
|
||||
bookmarks (id) {
|
||||
id -> Text,
|
||||
url -> Text,
|
||||
added -> Text,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
comments (comment_id) {
|
||||
comment_id -> Text,
|
||||
bookmark_id -> Text,
|
||||
comment -> Text,
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
[package]
|
||||
name = "api"
|
||||
version = "0.1.0"
|
||||
authors = ["Claus Matzinger <claus.matzinger+kb@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "1"
|
||||
env_logger = "0.6"
|
||||
actix-files = "0"
|
|
@ -0,0 +1,73 @@
|
|||
#[macro_use]
|
||||
extern crate actix_web;
|
||||
|
||||
use actix_files as fs;
|
||||
use actix_web::{ guard,
|
||||
http::header, http::Method, middleware, web, App, HttpRequest, HttpResponse, HttpServer,
|
||||
Responder, Result,
|
||||
};
|
||||
use std::env;
|
||||
use std::path::PathBuf;
|
||||
|
||||
#[get("by-id/{id}")]
|
||||
fn bookmark_by_id(id: web::Path<(i32)>) -> impl Responder {
|
||||
format!("{{ \"id\": {}, \"url\": \"https://blog.x5ff.xyz\" }}", id)
|
||||
}
|
||||
|
||||
fn echo_bookmark(req: HttpRequest) -> impl Responder {
|
||||
let id: i32 = req.match_info().query("id").parse().unwrap();
|
||||
format!("{:?}", id)
|
||||
}
|
||||
|
||||
#[get("/captures/{tail:.*}")]
|
||||
fn captures(req: HttpRequest) -> Result<fs::NamedFile> {
|
||||
let mut root = PathBuf::from("static/");
|
||||
let tail: PathBuf = req.match_info().query("tail").parse().unwrap();
|
||||
root.push(tail);
|
||||
|
||||
Ok(fs::NamedFile::open(root)?)
|
||||
}
|
||||
|
||||
#[get("from-bitly/{bitlyid}")]
|
||||
fn bit_ly(req: HttpRequest) -> HttpResponse {
|
||||
let bitly_id = req.match_info().get("bitlyid").unwrap();
|
||||
let url = req.url_for("bitly", &[bitly_id]).unwrap();
|
||||
HttpResponse::Found()
|
||||
.header(header::LOCATION, url.into_string())
|
||||
.finish()
|
||||
.into_body()
|
||||
}
|
||||
|
||||
#[get("/")]
|
||||
fn bookmarks_index() -> impl Responder {
|
||||
format!("Welcome to your quick and easy bookmarking service!")
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
env::set_var("RUST_LOG", "actix_web=debug");
|
||||
env_logger::init();
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(
|
||||
web::scope("/api")
|
||||
.service(
|
||||
web::scope("/bookmarks")
|
||||
.service(captures)
|
||||
.service(bookmark_by_id)
|
||||
.service(bit_ly)
|
||||
.service(web::resource("add/{id}")
|
||||
.name("add")
|
||||
.guard(guard::Any(guard::Put()).or(guard::Post()))
|
||||
.to(echo_bookmark))
|
||||
))
|
||||
.service(
|
||||
web::scope("/bookmarks")
|
||||
.service(bookmarks_index)
|
||||
)
|
||||
.external_resource("bitly", "https://bit.ly/{bitly}")
|
||||
|
||||
})
|
||||
.bind("127.0.0.1:8081")?
|
||||
.run()
|
||||
}
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 58 KiB |
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "authentication"
|
||||
version = "0.1.0"
|
||||
authors = ["Claus Matzinger <claus.matzinger+kb@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "1"
|
||||
serde = "1"
|
||||
serde_derive = "1"
|
||||
env_logger = "0.6"
|
||||
jsonwebtoken = "6"
|
||||
futures = "0.1"
|
||||
actix-service = "0.4"
|
|
@ -0,0 +1,53 @@
|
|||
#[macro_use]
|
||||
extern crate actix_web;
|
||||
mod middlewares;
|
||||
use actix_web::{http, middleware, web, App, HttpResponse, HttpServer, Responder};
|
||||
use jsonwebtoken::{encode, Header};
|
||||
use middlewares::Claims;
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use std::env;
|
||||
|
||||
const PASSWORD: &str = "swordfish";
|
||||
pub const TOKEN_SECRET: &str = "0fd2af6f";
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
struct Login {
|
||||
password: String,
|
||||
}
|
||||
|
||||
#[get("/secret")]
|
||||
fn authed() -> impl Responder {
|
||||
format!("Congrats, you are authenticated")
|
||||
}
|
||||
|
||||
fn login(login: web::Json<Login>) -> HttpResponse {
|
||||
// TODO: have a proper security concept
|
||||
if &login.password == PASSWORD {
|
||||
let claims = Claims {
|
||||
user_id: "1".into(),
|
||||
};
|
||||
encode(&Header::default(), &claims, TOKEN_SECRET.as_ref())
|
||||
.map(|token| {
|
||||
HttpResponse::Ok()
|
||||
.header(http::header::AUTHORIZATION, format!("Bearer {}", token))
|
||||
.finish()
|
||||
})
|
||||
.unwrap_or(HttpResponse::InternalServerError().into())
|
||||
} else {
|
||||
HttpResponse::Unauthorized().into()
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
env::set_var("RUST_LOG", "actix_web=debug");
|
||||
env_logger::init();
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.wrap(middlewares::JwtLogin)
|
||||
.service(authed)
|
||||
.service(web::resource("/login").route(web::post().to(login)))
|
||||
})
|
||||
.bind("127.0.0.1:8081")?
|
||||
.run()
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
use actix_service::{Service, Transform};
|
||||
use actix_web::dev::{ServiceRequest, ServiceResponse};
|
||||
use actix_web::{http, Error, HttpResponse};
|
||||
use futures::future::{ok, Either, FutureResult};
|
||||
use futures::Poll;
|
||||
use jsonwebtoken::{decode, Validation};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct Claims {
|
||||
pub user_id: String,
|
||||
}
|
||||
|
||||
pub struct JwtLogin;
|
||||
|
||||
impl<S, B> Transform<S> for JwtLogin
|
||||
where
|
||||
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S::Future: 'static,
|
||||
{
|
||||
type Request = ServiceRequest;
|
||||
type Response = ServiceResponse<B>;
|
||||
type Error = Error;
|
||||
type InitError = ();
|
||||
type Transform = JwtLoginMiddleware<S>;
|
||||
type Future = FutureResult<Self::Transform, Self::InitError>;
|
||||
|
||||
fn new_transform(&self, service: S) -> Self::Future {
|
||||
ok(JwtLoginMiddleware { service })
|
||||
}
|
||||
}
|
||||
pub struct JwtLoginMiddleware<S> {
|
||||
service: S,
|
||||
}
|
||||
|
||||
impl<S, B> Service for JwtLoginMiddleware<S>
|
||||
where
|
||||
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
|
||||
S::Future: 'static,
|
||||
{
|
||||
type Request = ServiceRequest;
|
||||
type Response = ServiceResponse<B>;
|
||||
type Error = Error;
|
||||
type Future = Either<S::Future, FutureResult<Self::Response, Self::Error>>;
|
||||
|
||||
fn poll_ready(&mut self) -> Poll<(), Self::Error> {
|
||||
self.service.poll_ready()
|
||||
}
|
||||
|
||||
fn call(&mut self, req: ServiceRequest) -> Self::Future {
|
||||
if req.path() == "/login" {
|
||||
Either::A(self.service.call(req))
|
||||
} else {
|
||||
if let Some(header_value) = req.headers().get(http::header::AUTHORIZATION) {
|
||||
let token = header_value.to_str().unwrap().replace("Bearer", "");
|
||||
let mut validation = Validation::default();
|
||||
validation.validate_exp = false; // our logins don't expire
|
||||
if let Ok(_) =
|
||||
decode::<Claims>(&token.trim(), crate::TOKEN_SECRET.as_ref(), &validation)
|
||||
{
|
||||
Either::A(self.service.call(req))
|
||||
} else {
|
||||
Either::B(ok(
|
||||
req.into_response(HttpResponse::Unauthorized().finish().into_body())
|
||||
))
|
||||
}
|
||||
} else {
|
||||
Either::B(ok(
|
||||
req.into_response(HttpResponse::Unauthorized().finish().into_body())
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
[root]
|
||||
name = "c-to-rust"
|
||||
version = "0.1.0"
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
[package]
|
||||
name = "c-to-rust"
|
||||
version = "0.1.0"
|
||||
authors = ["Vigneshwer.D <dvigneshwer@gmail.com>"]
|
||||
|
||||
[lib]
|
||||
name = "double_input"
|
||||
crate-type = ["staticlib"]
|
||||
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
ifeq ($(shell uname),Darwin)
|
||||
LDFLAGS := -Wl,-dead_strip
|
||||
else
|
||||
LDFLAGS := -Wl,--gc-sections -lpthread
|
||||
endif
|
||||
|
||||
all: target/double
|
||||
target/double
|
||||
|
||||
target:
|
||||
mkdir -p $@
|
||||
|
||||
target/double: target/main.o target/debug/libdouble_input.a
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
target/debug/libdouble_input.a: src/lib.rs Cargo.toml
|
||||
cargo build
|
||||
|
||||
target/main.o: src/main.c | target
|
||||
$(CC) -o $@ -c $<
|
||||
|
||||
clean:
|
||||
rm -rf target
|
|
@ -1,2 +0,0 @@
|
|||
target
|
||||
Cargo.lock
|
|
@ -1,13 +0,0 @@
|
|||
//-- #########################
|
||||
//-- Task: Rust Function for C
|
||||
//-- Author: Vigneshwer.D
|
||||
//-- Version: 1.0.0
|
||||
//-- Date: 14 April 17
|
||||
//-- #########################
|
||||
|
||||
#![crate_type = "staticlib"]
|
||||
|
||||
#[no_mangle]
|
||||
pub extern fn double_input(input: i32) -> i32 {
|
||||
input * 2
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
|
||||
extern int32_t double_input(int32_t input);
|
||||
|
||||
int main() {
|
||||
int input = 4;
|
||||
int output = double_input(input);
|
||||
printf("%d * 2 = %d\n", input, output);
|
||||
return 0;
|
||||
}
|
Plik binarny nie jest wyświetlany.
|
@ -1 +0,0 @@
|
|||
df819c75ce9280dd
|
|
@ -1 +0,0 @@
|
|||
{"rustc":16218068117412374134,"target":9468058450591677607,"profile":11154289914177168617,"local":{"variant":"MtimeBased","fields":[[1494147672,218521131],[47,104,111,109,101,47,118,105,107,105,47,114,117,115,116,95,99,111,111,107,98,111,111,107,47,99,104,97,112,116,101,114,56,47,99,111,100,101,47,99,45,116,111,45,114,117,115,116,47,116,97,114,103,101,116,47,100,101,98,117,103,47,46,102,105,110,103,101,114,112,114,105,110,116,47,99,45,116,111,45,114,117,115,116,45,101,56,56,53,56,53,48,52,55,48,52,54,102,53,98,48,47,100,101,112,45,108,105,98,45,100,111,117,98,108,101,95,105,110,112,117,116]]},"features":"None","deps":[],"rustflags":[]}
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
|
@ -0,0 +1,16 @@
|
|||
[package]
|
||||
name = "html-templates"
|
||||
version = "0.1.0"
|
||||
authors = ["Claus Matzinger <claus.matzinger+kb@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "1"
|
||||
serde = "1"
|
||||
serde_derive = "1"
|
||||
env_logger = "0.6"
|
||||
base64 = "0.10.1"
|
||||
yarte = {version = "0", features=["with-actix-web"]}
|
||||
chrono = "0.4"
|
|
@ -0,0 +1,113 @@
|
|||
#[macro_use]
|
||||
extern crate actix_web;
|
||||
|
||||
use actix_web::{middleware, web, App, HttpServer, Responder};
|
||||
use chrono::prelude::*;
|
||||
use std::env;
|
||||
use yarte::Template;
|
||||
|
||||
const PLACEHOLDER_IMG: &str =
|
||||
"iVBORw0KGgoAAAANSUhEUgAAAJoAAABjCAYAAABjYhnGAAAIWklEQVR42u2cIVBbSxSGK56oqKhA
|
||||
PFFR8QTiCUTFE4jOVFRUIBAIRDpDWzqNqEBUINKZCkQFAlGBqEAgEIgnEBWIiApEBSIiIgIRERGB
|
||||
qIhI92f+kzk57L25afPekPJ/M3cgN3v37t399+zZvWdz544QQgghhBBCCCGEEEIIIYQQQgghhBBC
|
||||
CCGEEEL8djx//vz+69evH6a/d2/NQ7969Wo5HbUXL148yH3/5s2be/j+5cuXS5LIzOq8kY5hEtvj
|
||||
W/PQm5ubn/HQSUinue/R8/A9KkcSudlCg0GA4bjRQuOxKaHNtdCGaM+bLrQ+jjiEThJaGlr/THk8
|
||||
St8vTHvvjY2NvzAkY3guSvP+/fs/Ut6LqRx/T/JpkAblidfjPO41wW+6i7IUuRDxmSeVG/WBeonl
|
||||
yQkNZZv0fLgX7ln2HHMhtPR3g3//rSI0PHQ6d+asIY7jXMVm7rmS0nbddd/TsQdRZIYCnw6dYSuW
|
||||
LZXlU/r7LVY0n6nnrr9Ix7OMkBssg6VrQSTuPo/N4sPFCOWuZ0To06BMX9FZotDwLOloh+d7FjsA
|
||||
6iaUr+3Tpf87oR1u3ghkQkOjOetWKxMaz6FSuumaNVQiKjwdl+k4L+uZFOggHU34E/jsxP7RpVs3
|
||||
4Vu69PeAwnobyob8vqAMKf0TJ7Ir4eFaiIUNPoD1cI20yzx2cB4NyIbsYXYYhIb77DGvFaZDfg9d
|
||||
fuh8fZZ/keVAvVxYvTihDdL375h/jel6vv7QeX35Ur5PeY8B/keaZIX/cWU8wf++TDdOaKhY9vrR
|
||||
EJoTWvp/nw2+FPJa80IoMO/bOf8EwvMTEpajlbFysFydYNFOM1agH8/D2lAs++760WcDDWcWJwht
|
||||
N3Sadd5/ndc9yA1fqA+U2aykE1o9PNsOr3/kVgSQbi8uj9DSt+Zu6LQewB6NyjsqERqs2VmBP4Xv
|
||||
vpRYtFXLv8jfoGW56sVFyzG+bJmGfZprSGdxzp0AhmYFQzpYl+MgtFoo59h59/wXKEPsJJMmA7Rq
|
||||
o/Nmbb0FdmkxnA59Hc6V0FhgG6JWC4RW+EDe4kyYdZnPAf9i31vHooYtmhHHsliDlRwd31hFh1nE
|
||||
qkJzHcH8Loj1BBbPi66q0KxtCupwM+Yxj0JboBPd44zymtAgxoIKgHDaFabimJWt0ZHv+uUV73z/
|
||||
itDg8/H/sQMdKPhnWwXpnk4rNDfTxXcN+oVI0zSxTSu0nM8L327uheaHOFdRjSCmVmaJ4D59nuOi
|
||||
+8H/wZF5+4A8e07o13yTnxg6t8qe3YbOONPLCLqS0FAenLNJhKvjj/4+Uwyd27xuOVMPh/xuYa6F
|
||||
xoY4yk2XraLMCc44sysllgyzqO9xvYpDbt9PDvDZL5dQkG3zD4uExskArORFXG6BlTRnm847hvAz
|
||||
vyZGX2vb6qSq0KxzRoE7X3BlGqHB/7IZtR966cOi3CdxMgABzp3Q3BA6JjQ2+DebsbHijqs8KIfi
|
||||
S84qd3jtSbwHlzNG6dLnD7CiPLdcJjQ3qRlQcPE+m9HXgYB5j4Y927RDJwXa5LLFZ+a1xzK34vLG
|
||||
JKHxXN2NLA1ax6ulpTiZcvWzY2W/SUJ7B6e3aKGVftRprGSKDRV2zmEPs7l60UwrM6s8oHXqsBJr
|
||||
GbEsMl2Hx6GfgdniKJ6hZM3u0F1/kmsADrUnlg6W3A/vyAf3idfmzrNetm1SxMbfDUNcjdctxXLk
|
||||
zqPTsA067BCfcm8w6FacMd2mXvYJIYQQQgghhBBC/F4wfKc2KQo2B9eeVqveQ5tsbhFc3R69Qaga
|
||||
rVEgtNNJ0SLhHtr7cFvgqvmlvV+U0MR/At75+QgHCe12DWePLA4rRnTiuxjaQ8Fgx/Vj/97NxWLB
|
||||
H1oviApZ8vmVCY1h1RYjtlgmNHff1bhDqUxoKCPDsrP3EDNyxN2unb6LfD2wF+QMThxmQnvG4qX4
|
||||
ErzFc11GTwwyO6jGrFBOaNzGZ7FwPVeu/UxeXW5OGYYdT4uThMaIjUG4dr9KcICYzl86ZiM+s2HN
|
||||
Qpwt3sw2ScRNJwyJabvPbYvKNYvHXUzDEA0xUWgUzneLjGC59hkysxbyutrqh44AgTAu7NJvbskJ
|
||||
zUKEMDnhcH6XwsvuNxC/NmS+i0MWA+7GrAdF1HRD2gPfcIyubcSgR4t29SKtKLRGSbl2Q169GO5s
|
||||
grGNJ1FojB3DdsGvmc7Xzm2+ETOAsVXmp2zFgEIL1rPh06JG49oXG3DZ+VU7maDGiULL+Y65chVN
|
||||
BixPi1WLQmOs2pWLwH2Qo8MCJKWK2Q6di7bLm0F/p+Yb+QY1a2KWCdYtWgMK7II+T4si+PYzQgv+
|
||||
XruoXCVCG9u9FYXmPhceUsdshXYV5eotU8nuoiaPhejHcOjsQww+WjfnG1UUGsrVnlSuIqHF3Vsl
|
||||
QmtwU8m1Q+qYrdCubdQtEpr9zACH0YEPT3ZD1Ua45sm0QnM70D/kfLSM0C4yz1W3vak5obnOcigV
|
||||
/D9Cg2DOzJnm7O6gYHfRfc5Qr22pcxbk0O1fXKAFnEpoTgRNKxd/TeeoQGhDv2+AE5UOd1HdK7Gs
|
||||
R3EWSx8TMf7bUsdshWbOeo+N1jffKP6yUFHjhCUJ+7WbJkXZyvyAS5Wh03aRd5n+khthRj/XENbR
|
||||
us4vvOROpJWyIZwv2s/dLiPbyDKo8qJeTD/jXOX2sGNYBu7k2cptwKXlauR2T9Ma1ClGNFrNdkv5
|
||||
PaBcvX8bhupGZlcQZsGHyA/pcU8ux9R9XrwPFp4/oHNwgXk54w404hY35gmX4ADXokPkfutCCCGE
|
||||
EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBC
|
||||
CCGEEEKIKvwA6uJYps1NR+4AAAAASUVORK5CYII=";
|
||||
|
||||
#[derive(Template)]
|
||||
#[template(path = "index.hbs")]
|
||||
struct IndexViewModel {
|
||||
user: String,
|
||||
bookmarks: Vec<BookmarkViewModel>,
|
||||
}
|
||||
|
||||
struct BookmarkViewModel {
|
||||
timestamp: Date<Utc>,
|
||||
url: String,
|
||||
mime: String,
|
||||
base64_image: String,
|
||||
}
|
||||
|
||||
#[get("/{name}")]
|
||||
pub fn index(name: web::Path<(String)>) -> impl Responder {
|
||||
let user_name = name.as_str().into();
|
||||
|
||||
if &user_name == "Claus" {
|
||||
IndexViewModel {
|
||||
user: user_name,
|
||||
bookmarks: vec![
|
||||
BookmarkViewModel {
|
||||
timestamp: Utc.ymd(2019, 7, 20),
|
||||
url: "https://blog.x5ff.xyz".into(),
|
||||
mime: "image/png".into(),
|
||||
base64_image: std::fs::read_to_string("static/x5ff.xyz.b64")
|
||||
.unwrap_or(PLACEHOLDER_IMG.into()),
|
||||
},
|
||||
BookmarkViewModel {
|
||||
timestamp: Utc.ymd(2017, 9, 1),
|
||||
url: "https://microsoft.com".into(),
|
||||
mime: "image/png".into(),
|
||||
base64_image: std::fs::read_to_string("static/microsoft.com.b64")
|
||||
.unwrap_or(PLACEHOLDER_IMG.into()),
|
||||
},
|
||||
BookmarkViewModel {
|
||||
timestamp: Utc.ymd(2019, 2, 2),
|
||||
url: "https://www.packtpub.com/".into(),
|
||||
mime: "image/png".into(),
|
||||
base64_image: std::fs::read_to_string("static/packtpub.com.b64")
|
||||
.unwrap_or(PLACEHOLDER_IMG.into()),
|
||||
},
|
||||
],
|
||||
}
|
||||
} else {
|
||||
IndexViewModel {
|
||||
user: user_name,
|
||||
bookmarks: vec![],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
env::set_var("RUST_LOG", "actix_web=debug");
|
||||
env_logger::init();
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(web::scope("/bookmarks").service(index))
|
||||
})
|
||||
.bind("127.0.0.1:8081")?
|
||||
.run()
|
||||
}
|
Plik diff jest za duży
Load Diff
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 163 KiB |
|
@ -0,0 +1,39 @@
|
|||
iVBORw0KGgoAAAANSUhEUgAAAJoAAABjCAYAAABjYhnGAAAIWklEQVR42u2cIVBbSxSGK56oqKhA
|
||||
PFFR8QTiCUTFE4jOVFRUIBAIRDpDWzqNqEBUINKZCkQFAlGBqEAgEIgnEBWIiApEBSIiIgIRERGB
|
||||
qIhI92f+kzk57L25afPekPJ/M3cgN3v37t399+zZvWdz544QQgghhBBCCCGEEEIIIYQQQgghhBBC
|
||||
CCGEEEL8djx//vz+69evH6a/d2/NQ7969Wo5HbUXL148yH3/5s2be/j+5cuXS5LIzOq8kY5hEtvj
|
||||
W/PQm5ubn/HQSUinue/R8/A9KkcSudlCg0GA4bjRQuOxKaHNtdCGaM+bLrQ+jjiEThJaGlr/THk8
|
||||
St8vTHvvjY2NvzAkY3guSvP+/fs/Ut6LqRx/T/JpkAblidfjPO41wW+6i7IUuRDxmSeVG/WBeonl
|
||||
yQkNZZv0fLgX7ln2HHMhtPR3g3//rSI0PHQ6d+asIY7jXMVm7rmS0nbddd/TsQdRZIYCnw6dYSuW
|
||||
LZXlU/r7LVY0n6nnrr9Ix7OMkBssg6VrQSTuPo/N4sPFCOWuZ0To06BMX9FZotDwLOloh+d7FjsA
|
||||
6iaUr+3Tpf87oR1u3ghkQkOjOetWKxMaz6FSuumaNVQiKjwdl+k4L+uZFOggHU34E/jsxP7RpVs3
|
||||
4Vu69PeAwnobyob8vqAMKf0TJ7Ir4eFaiIUNPoD1cI20yzx2cB4NyIbsYXYYhIb77DGvFaZDfg9d
|
||||
fuh8fZZ/keVAvVxYvTihDdL375h/jel6vv7QeX35Ur5PeY8B/keaZIX/cWU8wf++TDdOaKhY9vrR
|
||||
EJoTWvp/nw2+FPJa80IoMO/bOf8EwvMTEpajlbFysFydYNFOM1agH8/D2lAs++760WcDDWcWJwht
|
||||
N3Sadd5/ndc9yA1fqA+U2aykE1o9PNsOr3/kVgSQbi8uj9DSt+Zu6LQewB6NyjsqERqs2VmBP4Xv
|
||||
vpRYtFXLv8jfoGW56sVFyzG+bJmGfZprSGdxzp0AhmYFQzpYl+MgtFoo59h59/wXKEPsJJMmA7Rq
|
||||
o/Nmbb0FdmkxnA59Hc6V0FhgG6JWC4RW+EDe4kyYdZnPAf9i31vHooYtmhHHsliDlRwd31hFh1nE
|
||||
qkJzHcH8Loj1BBbPi66q0KxtCupwM+Yxj0JboBPd44zymtAgxoIKgHDaFabimJWt0ZHv+uUV73z/
|
||||
itDg8/H/sQMdKPhnWwXpnk4rNDfTxXcN+oVI0zSxTSu0nM8L327uheaHOFdRjSCmVmaJ4D59nuOi
|
||||
+8H/wZF5+4A8e07o13yTnxg6t8qe3YbOONPLCLqS0FAenLNJhKvjj/4+Uwyd27xuOVMPh/xuYa6F
|
||||
xoY4yk2XraLMCc44sysllgyzqO9xvYpDbt9PDvDZL5dQkG3zD4uExskArORFXG6BlTRnm847hvAz
|
||||
vyZGX2vb6qSq0KxzRoE7X3BlGqHB/7IZtR966cOi3CdxMgABzp3Q3BA6JjQ2+DebsbHijqs8KIfi
|
||||
S84qd3jtSbwHlzNG6dLnD7CiPLdcJjQ3qRlQcPE+m9HXgYB5j4Y927RDJwXa5LLFZ+a1xzK34vLG
|
||||
JKHxXN2NLA1ax6ulpTiZcvWzY2W/SUJ7B6e3aKGVftRprGSKDRV2zmEPs7l60UwrM6s8oHXqsBJr
|
||||
GbEsMl2Hx6GfgdniKJ6hZM3u0F1/kmsADrUnlg6W3A/vyAf3idfmzrNetm1SxMbfDUNcjdctxXLk
|
||||
zqPTsA067BCfcm8w6FacMd2mXvYJIYQQQgghhBBC/F4wfKc2KQo2B9eeVqveQ5tsbhFc3R69Qaga
|
||||
rVEgtNNJ0SLhHtr7cFvgqvmlvV+U0MR/At75+QgHCe12DWePLA4rRnTiuxjaQ8Fgx/Vj/97NxWLB
|
||||
H1oviApZ8vmVCY1h1RYjtlgmNHff1bhDqUxoKCPDsrP3EDNyxN2unb6LfD2wF+QMThxmQnvG4qX4
|
||||
ErzFc11GTwwyO6jGrFBOaNzGZ7FwPVeu/UxeXW5OGYYdT4uThMaIjUG4dr9KcICYzl86ZiM+s2HN
|
||||
Qpwt3sw2ScRNJwyJabvPbYvKNYvHXUzDEA0xUWgUzneLjGC59hkysxbyutrqh44AgTAu7NJvbskJ
|
||||
zUKEMDnhcH6XwsvuNxC/NmS+i0MWA+7GrAdF1HRD2gPfcIyubcSgR4t29SKtKLRGSbl2Q169GO5s
|
||||
grGNJ1FojB3DdsGvmc7Xzm2+ETOAsVXmp2zFgEIL1rPh06JG49oXG3DZ+VU7maDGiULL+Y65chVN
|
||||
BixPi1WLQmOs2pWLwH2Qo8MCJKWK2Q6di7bLm0F/p+Yb+QY1a2KWCdYtWgMK7II+T4si+PYzQgv+
|
||||
XruoXCVCG9u9FYXmPhceUsdshXYV5eotU8nuoiaPhejHcOjsQww+WjfnG1UUGsrVnlSuIqHF3Vsl
|
||||
QmtwU8m1Q+qYrdCubdQtEpr9zACH0YEPT3ZD1Ua45sm0QnM70D/kfLSM0C4yz1W3vak5obnOcigV
|
||||
/D9Cg2DOzJnm7O6gYHfRfc5Qr22pcxbk0O1fXKAFnEpoTgRNKxd/TeeoQGhDv2+AE5UOd1HdK7Gs
|
||||
R3EWSx8TMf7bUsdshWbOeo+N1jffKP6yUFHjhCUJ+7WbJkXZyvyAS5Wh03aRd5n+khthRj/XENbR
|
||||
us4vvOROpJWyIZwv2s/dLiPbyDKo8qJeTD/jXOX2sGNYBu7k2cptwKXlauR2T9Ma1ClGNFrNdkv5
|
||||
PaBcvX8bhupGZlcQZsGHyA/pcU8ux9R9XrwPFp4/oHNwgXk54w404hY35gmX4ADXokPkfutCCCGE
|
||||
EEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBC
|
||||
CCGEEEKIKvwA6uJYps1NR+4AAAAASUVORK5CYII=
|
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 2.1 KiB |
Plik diff jest za duży
Load Diff
Plik binarny nie jest wyświetlany.
Po Szerokość: | Wysokość: | Rozmiar: 115 KiB |
|
@ -0,0 +1,37 @@
|
|||
<!DOCTYPE html>
|
||||
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-12 pb-3">
|
||||
<h1>Welcome {{ user }}.</h1>
|
||||
<h2 class="text-muted">Your bookmarks:</h2>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{{#if bookmarks.is_empty() }}
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
No bookmarks :(
|
||||
</div>
|
||||
</div>
|
||||
{{~/if}}
|
||||
|
||||
{{#each bookmarks}}
|
||||
<div class="row {{# if index % 2 == 1 }} bg-light text-dark {{/if }} mt-2 mb-2">
|
||||
{{> partials/bookmark }}
|
||||
</div>
|
||||
{{~/each}}
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
|
@ -0,0 +1,8 @@
|
|||
<div class="col-lg-2">
|
||||
<img class="rounded img-fluid p-1" src="data:{{ mime }};base64,{{ base64_image }}"> </div>
|
||||
<div class="col-lg-10">
|
||||
<a href="{{ url }}">
|
||||
<h3>{{ url.replace("https://", "") }}</h3>
|
||||
</a>
|
||||
<i class="text-muted">Added {{ timestamp.format("%Y-%m-%d").to_string() }}</i>
|
||||
</div>
|
|
@ -0,0 +1,13 @@
|
|||
[package]
|
||||
name = "json-handling"
|
||||
version = "0.1.0"
|
||||
authors = ["Claus Matzinger <claus.matzinger+kb@gmail.com>"]
|
||||
edition = "2018"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
actix-web = "1"
|
||||
serde = "1"
|
||||
serde_derive = "1"
|
||||
env_logger = "0.6"
|
|
@ -0,0 +1,51 @@
|
|||
#[macro_use]
|
||||
extern crate actix_web;
|
||||
|
||||
use actix_web::{
|
||||
guard, http::Method, middleware, web, App, HttpResponse, HttpServer,
|
||||
};
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
use std::env;
|
||||
|
||||
#[derive(Debug, Clone, Serialize, Deserialize)]
|
||||
struct Bookmark {
|
||||
id: i32,
|
||||
url: String,
|
||||
}
|
||||
|
||||
#[get("by-id/{id}")]
|
||||
fn bookmarks_by_id(id: web::Path<(i32)>) -> HttpResponse {
|
||||
let bookmark = Bookmark {
|
||||
id: *id,
|
||||
url: "https://blog.x5ff.xyz".into(),
|
||||
};
|
||||
HttpResponse::Ok().json(bookmark)
|
||||
}
|
||||
|
||||
fn echo_bookmark(bookmark: web::Json<Bookmark>) -> HttpResponse {
|
||||
HttpResponse::Ok().json(bookmark.clone())
|
||||
}
|
||||
|
||||
fn main() -> std::io::Result<()> {
|
||||
env::set_var("RUST_LOG", "actix_web=debug");
|
||||
env_logger::init();
|
||||
HttpServer::new(|| {
|
||||
App::new()
|
||||
.wrap(middleware::Logger::default())
|
||||
.service(
|
||||
web::scope("/api")
|
||||
.service(
|
||||
web::scope("/bookmarks")
|
||||
.service(bookmarks_by_id)
|
||||
.service(
|
||||
web::resource("add/{id}")
|
||||
.name("add")
|
||||
.guard(guard::Any(guard::Put()).or(guard::Post()))
|
||||
.to(echo_bookmark),
|
||||
)
|
||||
.default_service(web::route().method(Method::GET)),
|
||||
))
|
||||
})
|
||||
.bind("127.0.0.1:8081")?
|
||||
.run()
|
||||
}
|
|
@ -1,4 +0,0 @@
|
|||
[root]
|
||||
name = "node-to-rust"
|
||||
version = "0.1.0"
|
||||
|
|
@ -1,9 +0,0 @@
|
|||
[package]
|
||||
name = "node-to-rust"
|
||||
version = "0.1.0"
|
||||
authors = ["Vigneshwer.D <dvigneshwer@gmail.com>"]
|
||||
|
||||
[lib]
|
||||
name = "double_input"
|
||||
crate-type = ["dylib"]
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
ifeq ($(shell uname),Darwin)
|
||||
EXT := dylib
|
||||
else
|
||||
EXT := so
|
||||
endif
|
||||
|
||||
all: target/debug/libdouble_input.$(EXT) node_modules/ffi
|
||||
node src/main.js
|
||||
|
||||
target/debug/libdouble_input.$(EXT): src/lib.rs Cargo.toml
|
||||
cargo build
|
||||
|
||||
node_modules/ffi:
|
||||
npm install ffi
|
||||
|
||||
clean:
|
||||
rm -rf target
|
||||
rm -rf node_modules
|
|
@ -1,97 +0,0 @@
|
|||
node-bindings
|
||||
=============
|
||||
### Helper module for loading your native module's .node file
|
||||
|
||||
This is a helper module for authors of Node.js native addon modules.
|
||||
It is basically the "swiss army knife" of `require()`ing your native module's
|
||||
`.node` file.
|
||||
|
||||
Throughout the course of Node's native addon history, addons have ended up being
|
||||
compiled in a variety of different places, depending on which build tool and which
|
||||
version of node was used. To make matters worse, now the _gyp_ build tool can
|
||||
produce either a _Release_ or _Debug_ build, each being built into different
|
||||
locations.
|
||||
|
||||
This module checks _all_ the possible locations that a native addon would be built
|
||||
at, and returns the first one that loads successfully.
|
||||
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Install with `npm`:
|
||||
|
||||
``` bash
|
||||
$ npm install bindings
|
||||
```
|
||||
|
||||
Or add it to the `"dependencies"` section of your _package.json_ file.
|
||||
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
`require()`ing the proper bindings file for the current node version, platform
|
||||
and architecture is as simple as:
|
||||
|
||||
``` js
|
||||
var bindings = require('bindings')('binding.node')
|
||||
|
||||
// Use your bindings defined in your C files
|
||||
bindings.your_c_function()
|
||||
```
|
||||
|
||||
|
||||
Nice Error Output
|
||||
-----------------
|
||||
|
||||
When the `.node` file could not be loaded, `node-bindings` throws an Error with
|
||||
a nice error message telling you exactly what was tried. You can also check the
|
||||
`err.tries` Array property.
|
||||
|
||||
```
|
||||
Error: Could not load the bindings file. Tried:
|
||||
→ /Users/nrajlich/ref/build/binding.node
|
||||
→ /Users/nrajlich/ref/build/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/build/Release/binding.node
|
||||
→ /Users/nrajlich/ref/out/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/Debug/binding.node
|
||||
→ /Users/nrajlich/ref/out/Release/binding.node
|
||||
→ /Users/nrajlich/ref/Release/binding.node
|
||||
→ /Users/nrajlich/ref/build/default/binding.node
|
||||
→ /Users/nrajlich/ref/compiled/0.8.2/darwin/x64/binding.node
|
||||
at bindings (/Users/nrajlich/ref/node_modules/bindings/bindings.js:84:13)
|
||||
at Object.<anonymous> (/Users/nrajlich/ref/lib/ref.js:5:47)
|
||||
at Module._compile (module.js:449:26)
|
||||
at Object.Module._extensions..js (module.js:467:10)
|
||||
at Module.load (module.js:356:32)
|
||||
at Function.Module._load (module.js:312:12)
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>
|
||||
|
||||
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.
|
|
@ -1,166 +0,0 @@
|
|||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var fs = require('fs')
|
||||
, path = require('path')
|
||||
, join = path.join
|
||||
, dirname = path.dirname
|
||||
, exists = fs.existsSync || path.existsSync
|
||||
, defaults = {
|
||||
arrow: process.env.NODE_BINDINGS_ARROW || ' → '
|
||||
, compiled: process.env.NODE_BINDINGS_COMPILED_DIR || 'compiled'
|
||||
, platform: process.platform
|
||||
, arch: process.arch
|
||||
, version: process.versions.node
|
||||
, bindings: 'bindings.node'
|
||||
, try: [
|
||||
// node-gyp's linked version in the "build" dir
|
||||
[ 'module_root', 'build', 'bindings' ]
|
||||
// node-waf and gyp_addon (a.k.a node-gyp)
|
||||
, [ 'module_root', 'build', 'Debug', 'bindings' ]
|
||||
, [ 'module_root', 'build', 'Release', 'bindings' ]
|
||||
// Debug files, for development (legacy behavior, remove for node v0.9)
|
||||
, [ 'module_root', 'out', 'Debug', 'bindings' ]
|
||||
, [ 'module_root', 'Debug', 'bindings' ]
|
||||
// Release files, but manually compiled (legacy behavior, remove for node v0.9)
|
||||
, [ 'module_root', 'out', 'Release', 'bindings' ]
|
||||
, [ 'module_root', 'Release', 'bindings' ]
|
||||
// Legacy from node-waf, node <= 0.4.x
|
||||
, [ 'module_root', 'build', 'default', 'bindings' ]
|
||||
// Production "Release" buildtype binary (meh...)
|
||||
, [ 'module_root', 'compiled', 'version', 'platform', 'arch', 'bindings' ]
|
||||
]
|
||||
}
|
||||
|
||||
/**
|
||||
* The main `bindings()` function loads the compiled bindings for a given module.
|
||||
* It uses V8's Error API to determine the parent filename that this function is
|
||||
* being invoked from, which is then used to find the root directory.
|
||||
*/
|
||||
|
||||
function bindings (opts) {
|
||||
|
||||
// Argument surgery
|
||||
if (typeof opts == 'string') {
|
||||
opts = { bindings: opts }
|
||||
} else if (!opts) {
|
||||
opts = {}
|
||||
}
|
||||
opts.__proto__ = defaults
|
||||
|
||||
// Get the module root
|
||||
if (!opts.module_root) {
|
||||
opts.module_root = exports.getRoot(exports.getFileName())
|
||||
}
|
||||
|
||||
// Ensure the given bindings name ends with .node
|
||||
if (path.extname(opts.bindings) != '.node') {
|
||||
opts.bindings += '.node'
|
||||
}
|
||||
|
||||
var tries = []
|
||||
, i = 0
|
||||
, l = opts.try.length
|
||||
, n
|
||||
, b
|
||||
, err
|
||||
|
||||
for (; i<l; i++) {
|
||||
n = join.apply(null, opts.try[i].map(function (p) {
|
||||
return opts[p] || p
|
||||
}))
|
||||
tries.push(n)
|
||||
try {
|
||||
b = opts.path ? require.resolve(n) : require(n)
|
||||
if (!opts.path) {
|
||||
b.path = n
|
||||
}
|
||||
return b
|
||||
} catch (e) {
|
||||
if (!/not find/i.test(e.message)) {
|
||||
throw e
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
err = new Error('Could not locate the bindings file. Tried:\n'
|
||||
+ tries.map(function (a) { return opts.arrow + a }).join('\n'))
|
||||
err.tries = tries
|
||||
throw err
|
||||
}
|
||||
module.exports = exports = bindings
|
||||
|
||||
|
||||
/**
|
||||
* Gets the filename of the JavaScript file that invokes this function.
|
||||
* Used to help find the root directory of a module.
|
||||
* Optionally accepts an filename argument to skip when searching for the invoking filename
|
||||
*/
|
||||
|
||||
exports.getFileName = function getFileName (calling_file) {
|
||||
var origPST = Error.prepareStackTrace
|
||||
, origSTL = Error.stackTraceLimit
|
||||
, dummy = {}
|
||||
, fileName
|
||||
|
||||
Error.stackTraceLimit = 10
|
||||
|
||||
Error.prepareStackTrace = function (e, st) {
|
||||
for (var i=0, l=st.length; i<l; i++) {
|
||||
fileName = st[i].getFileName()
|
||||
if (fileName !== __filename) {
|
||||
if (calling_file) {
|
||||
if (fileName !== calling_file) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// run the 'prepareStackTrace' function above
|
||||
Error.captureStackTrace(dummy)
|
||||
dummy.stack
|
||||
|
||||
// cleanup
|
||||
Error.prepareStackTrace = origPST
|
||||
Error.stackTraceLimit = origSTL
|
||||
|
||||
return fileName
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the root directory of a module, given an arbitrary filename
|
||||
* somewhere in the module tree. The "root directory" is the directory
|
||||
* containing the `package.json` file.
|
||||
*
|
||||
* In: /home/nate/node-native-module/lib/index.js
|
||||
* Out: /home/nate/node-native-module
|
||||
*/
|
||||
|
||||
exports.getRoot = function getRoot (file) {
|
||||
var dir = dirname(file)
|
||||
, prev
|
||||
while (true) {
|
||||
if (dir === '.') {
|
||||
// Avoids an infinite loop in rare cases, like the REPL
|
||||
dir = process.cwd()
|
||||
}
|
||||
if (exists(join(dir, 'package.json')) || exists(join(dir, 'node_modules'))) {
|
||||
// Found the 'package.json' file or 'node_modules' dir; we're done
|
||||
return dir
|
||||
}
|
||||
if (prev === dir) {
|
||||
// Got to the top
|
||||
throw new Error('Could not find module root given file: "' + file
|
||||
+ '". Do you have a `package.json` file? ')
|
||||
}
|
||||
// Try the parent dir next
|
||||
prev = dir
|
||||
dir = join(dir, '..')
|
||||
}
|
||||
}
|
|
@ -1,93 +0,0 @@
|
|||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "bindings@~1.2.0",
|
||||
"scope": null,
|
||||
"escapedName": "bindings",
|
||||
"name": "bindings",
|
||||
"rawSpec": "~1.2.0",
|
||||
"spec": ">=1.2.0 <1.3.0",
|
||||
"type": "range"
|
||||
},
|
||||
"/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi"
|
||||
]
|
||||
],
|
||||
"_from": "bindings@>=1.2.0 <1.3.0",
|
||||
"_id": "bindings@1.2.1",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/bindings",
|
||||
"_npmUser": {
|
||||
"name": "tootallnate",
|
||||
"email": "nathan@tootallnate.net"
|
||||
},
|
||||
"_npmVersion": "1.4.14",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "bindings@~1.2.0",
|
||||
"scope": null,
|
||||
"escapedName": "bindings",
|
||||
"name": "bindings",
|
||||
"rawSpec": "~1.2.0",
|
||||
"spec": ">=1.2.0 <1.3.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/ffi",
|
||||
"/ref"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz",
|
||||
"_shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "bindings@~1.2.0",
|
||||
"_where": "/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi",
|
||||
"author": {
|
||||
"name": "Nathan Rajlich",
|
||||
"email": "nathan@tootallnate.net",
|
||||
"url": "http://tootallnate.net"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/TooTallNate/node-bindings/issues"
|
||||
},
|
||||
"dependencies": {},
|
||||
"description": "Helper module for loading your native module's .node file",
|
||||
"devDependencies": {},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "14ad6113812d2d37d72e67b4cacb4bb726505f11",
|
||||
"tarball": "https://registry.npmjs.org/bindings/-/bindings-1.2.1.tgz"
|
||||
},
|
||||
"gitHead": "e404152ee27f8478ccbc7122ee051246e8e5ec02",
|
||||
"homepage": "https://github.com/TooTallNate/node-bindings",
|
||||
"keywords": [
|
||||
"native",
|
||||
"addon",
|
||||
"bindings",
|
||||
"gyp",
|
||||
"waf",
|
||||
"c",
|
||||
"c++"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./bindings.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "TooTallNate",
|
||||
"email": "nathan@tootallnate.net"
|
||||
},
|
||||
{
|
||||
"name": "tootallnate",
|
||||
"email": "nathan@tootallnate.net"
|
||||
}
|
||||
],
|
||||
"name": "bindings",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/TooTallNate/node-bindings.git"
|
||||
},
|
||||
"scripts": {},
|
||||
"version": "1.2.1"
|
||||
}
|
|
@ -1,350 +0,0 @@
|
|||
|
||||
2.6.6 / 2017-04-27
|
||||
==================
|
||||
|
||||
* Fix: regression from removal of undefined check (@thebigredgeek)
|
||||
|
||||
2.6.5 / 2017-04-27
|
||||
==================
|
||||
|
||||
* Fix: null reference check on window.documentElement.style.WebkitAppearance (#447, @thebigredgeek)
|
||||
* Misc: clean up browser reference checks (#447, @thebigredgeek)
|
||||
* Misc: add npm-debug.log to .gitignore (@thebigredgeek)
|
||||
|
||||
|
||||
2.6.4 / 2017-04-20
|
||||
==================
|
||||
|
||||
* Fix: bug that would occure if process.env.DEBUG is a non-string value. (#444, @LucianBuzzo)
|
||||
* Chore: ignore bower.json in npm installations. (#437, @joaovieira)
|
||||
* Misc: update "ms" to v0.7.3 (@tootallnate)
|
||||
|
||||
2.6.3 / 2017-03-13
|
||||
==================
|
||||
|
||||
* Fix: Electron reference to `process.env.DEBUG` (#431, @paulcbetts)
|
||||
* Docs: Changelog fix (@thebigredgeek)
|
||||
|
||||
2.6.2 / 2017-03-10
|
||||
==================
|
||||
|
||||
* Fix: DEBUG_MAX_ARRAY_LENGTH (#420, @slavaGanzin)
|
||||
* Docs: Add backers and sponsors from Open Collective (#422, @piamancini)
|
||||
* Docs: Add Slackin invite badge (@tootallnate)
|
||||
|
||||
2.6.1 / 2017-02-10
|
||||
==================
|
||||
|
||||
* Fix: Module's `export default` syntax fix for IE8 `Expected identifier` error
|
||||
* Fix: Whitelist DEBUG_FD for values 1 and 2 only (#415, @pi0)
|
||||
* Fix: IE8 "Expected identifier" error (#414, @vgoma)
|
||||
* Fix: Namespaces would not disable once enabled (#409, @musikov)
|
||||
|
||||
2.6.0 / 2016-12-28
|
||||
==================
|
||||
|
||||
* Fix: added better null pointer checks for browser useColors (@thebigredgeek)
|
||||
* Improvement: removed explicit `window.debug` export (#404, @tootallnate)
|
||||
* Improvement: deprecated `DEBUG_FD` environment variable (#405, @tootallnate)
|
||||
|
||||
2.5.2 / 2016-12-25
|
||||
==================
|
||||
|
||||
* Fix: reference error on window within webworkers (#393, @KlausTrainer)
|
||||
* Docs: fixed README typo (#391, @lurch)
|
||||
* Docs: added notice about v3 api discussion (@thebigredgeek)
|
||||
|
||||
2.5.1 / 2016-12-20
|
||||
==================
|
||||
|
||||
* Fix: babel-core compatibility
|
||||
|
||||
2.5.0 / 2016-12-20
|
||||
==================
|
||||
|
||||
* Fix: wrong reference in bower file (@thebigredgeek)
|
||||
* Fix: webworker compatibility (@thebigredgeek)
|
||||
* Fix: output formatting issue (#388, @kribblo)
|
||||
* Fix: babel-loader compatibility (#383, @escwald)
|
||||
* Misc: removed built asset from repo and publications (@thebigredgeek)
|
||||
* Misc: moved source files to /src (#378, @yamikuronue)
|
||||
* Test: added karma integration and replaced babel with browserify for browser tests (#378, @yamikuronue)
|
||||
* Test: coveralls integration (#378, @yamikuronue)
|
||||
* Docs: simplified language in the opening paragraph (#373, @yamikuronue)
|
||||
|
||||
2.4.5 / 2016-12-17
|
||||
==================
|
||||
|
||||
* Fix: `navigator` undefined in Rhino (#376, @jochenberger)
|
||||
* Fix: custom log function (#379, @hsiliev)
|
||||
* Improvement: bit of cleanup + linting fixes (@thebigredgeek)
|
||||
* Improvement: rm non-maintainted `dist/` dir (#375, @freewil)
|
||||
* Docs: simplified language in the opening paragraph. (#373, @yamikuronue)
|
||||
|
||||
2.4.4 / 2016-12-14
|
||||
==================
|
||||
|
||||
* Fix: work around debug being loaded in preload scripts for electron (#368, @paulcbetts)
|
||||
|
||||
2.4.3 / 2016-12-14
|
||||
==================
|
||||
|
||||
* Fix: navigation.userAgent error for react native (#364, @escwald)
|
||||
|
||||
2.4.2 / 2016-12-14
|
||||
==================
|
||||
|
||||
* Fix: browser colors (#367, @tootallnate)
|
||||
* Misc: travis ci integration (@thebigredgeek)
|
||||
* Misc: added linting and testing boilerplate with sanity check (@thebigredgeek)
|
||||
|
||||
2.4.1 / 2016-12-13
|
||||
==================
|
||||
|
||||
* Fix: typo that broke the package (#356)
|
||||
|
||||
2.4.0 / 2016-12-13
|
||||
==================
|
||||
|
||||
* Fix: bower.json references unbuilt src entry point (#342, @justmatt)
|
||||
* Fix: revert "handle regex special characters" (@tootallnate)
|
||||
* Feature: configurable util.inspect()`options for NodeJS (#327, @tootallnate)
|
||||
* Feature: %O`(big O) pretty-prints objects (#322, @tootallnate)
|
||||
* Improvement: allow colors in workers (#335, @botverse)
|
||||
* Improvement: use same color for same namespace. (#338, @lchenay)
|
||||
|
||||
2.3.3 / 2016-11-09
|
||||
==================
|
||||
|
||||
* Fix: Catch `JSON.stringify()` errors (#195, Jovan Alleyne)
|
||||
* Fix: Returning `localStorage` saved values (#331, Levi Thomason)
|
||||
* Improvement: Don't create an empty object when no `process` (Nathan Rajlich)
|
||||
|
||||
2.3.2 / 2016-11-09
|
||||
==================
|
||||
|
||||
* Fix: be super-safe in index.js as well (@TooTallNate)
|
||||
* Fix: should check whether process exists (Tom Newby)
|
||||
|
||||
2.3.1 / 2016-11-09
|
||||
==================
|
||||
|
||||
* Fix: Added electron compatibility (#324, @paulcbetts)
|
||||
* Improvement: Added performance optimizations (@tootallnate)
|
||||
* Readme: Corrected PowerShell environment variable example (#252, @gimre)
|
||||
* Misc: Removed yarn lock file from source control (#321, @fengmk2)
|
||||
|
||||
2.3.0 / 2016-11-07
|
||||
==================
|
||||
|
||||
* Fix: Consistent placement of ms diff at end of output (#215, @gorangajic)
|
||||
* Fix: Escaping of regex special characters in namespace strings (#250, @zacronos)
|
||||
* Fix: Fixed bug causing crash on react-native (#282, @vkarpov15)
|
||||
* Feature: Enabled ES6+ compatible import via default export (#212 @bucaran)
|
||||
* Feature: Added %O formatter to reflect Chrome's console.log capability (#279, @oncletom)
|
||||
* Package: Update "ms" to 0.7.2 (#315, @DevSide)
|
||||
* Package: removed superfluous version property from bower.json (#207 @kkirsche)
|
||||
* Readme: fix USE_COLORS to DEBUG_COLORS
|
||||
* Readme: Doc fixes for format string sugar (#269, @mlucool)
|
||||
* Readme: Updated docs for DEBUG_FD and DEBUG_COLORS environment variables (#232, @mattlyons0)
|
||||
* Readme: doc fixes for PowerShell (#271 #243, @exoticknight @unreadable)
|
||||
* Readme: better docs for browser support (#224, @matthewmueller)
|
||||
* Tooling: Added yarn integration for development (#317, @thebigredgeek)
|
||||
* Misc: Renamed History.md to CHANGELOG.md (@thebigredgeek)
|
||||
* Misc: Added license file (#226 #274, @CantemoInternal @sdaitzman)
|
||||
* Misc: Updated contributors (@thebigredgeek)
|
||||
|
||||
2.2.0 / 2015-05-09
|
||||
==================
|
||||
|
||||
* package: update "ms" to v0.7.1 (#202, @dougwilson)
|
||||
* README: add logging to file example (#193, @DanielOchoa)
|
||||
* README: fixed a typo (#191, @amir-s)
|
||||
* browser: expose `storage` (#190, @stephenmathieson)
|
||||
* Makefile: add a `distclean` target (#189, @stephenmathieson)
|
||||
|
||||
2.1.3 / 2015-03-13
|
||||
==================
|
||||
|
||||
* Updated stdout/stderr example (#186)
|
||||
* Updated example/stdout.js to match debug current behaviour
|
||||
* Renamed example/stderr.js to stdout.js
|
||||
* Update Readme.md (#184)
|
||||
* replace high intensity foreground color for bold (#182, #183)
|
||||
|
||||
2.1.2 / 2015-03-01
|
||||
==================
|
||||
|
||||
* dist: recompile
|
||||
* update "ms" to v0.7.0
|
||||
* package: update "browserify" to v9.0.3
|
||||
* component: fix "ms.js" repo location
|
||||
* changed bower package name
|
||||
* updated documentation about using debug in a browser
|
||||
* fix: security error on safari (#167, #168, @yields)
|
||||
|
||||
2.1.1 / 2014-12-29
|
||||
==================
|
||||
|
||||
* browser: use `typeof` to check for `console` existence
|
||||
* browser: check for `console.log` truthiness (fix IE 8/9)
|
||||
* browser: add support for Chrome apps
|
||||
* Readme: added Windows usage remarks
|
||||
* Add `bower.json` to properly support bower install
|
||||
|
||||
2.1.0 / 2014-10-15
|
||||
==================
|
||||
|
||||
* node: implement `DEBUG_FD` env variable support
|
||||
* package: update "browserify" to v6.1.0
|
||||
* package: add "license" field to package.json (#135, @panuhorsmalahti)
|
||||
|
||||
2.0.0 / 2014-09-01
|
||||
==================
|
||||
|
||||
* package: update "browserify" to v5.11.0
|
||||
* node: use stderr rather than stdout for logging (#29, @stephenmathieson)
|
||||
|
||||
1.0.4 / 2014-07-15
|
||||
==================
|
||||
|
||||
* dist: recompile
|
||||
* example: remove `console.info()` log usage
|
||||
* example: add "Content-Type" UTF-8 header to browser example
|
||||
* browser: place %c marker after the space character
|
||||
* browser: reset the "content" color via `color: inherit`
|
||||
* browser: add colors support for Firefox >= v31
|
||||
* debug: prefer an instance `log()` function over the global one (#119)
|
||||
* Readme: update documentation about styled console logs for FF v31 (#116, @wryk)
|
||||
|
||||
1.0.3 / 2014-07-09
|
||||
==================
|
||||
|
||||
* Add support for multiple wildcards in namespaces (#122, @seegno)
|
||||
* browser: fix lint
|
||||
|
||||
1.0.2 / 2014-06-10
|
||||
==================
|
||||
|
||||
* browser: update color palette (#113, @gscottolson)
|
||||
* common: make console logging function configurable (#108, @timoxley)
|
||||
* node: fix %o colors on old node <= 0.8.x
|
||||
* Makefile: find node path using shell/which (#109, @timoxley)
|
||||
|
||||
1.0.1 / 2014-06-06
|
||||
==================
|
||||
|
||||
* browser: use `removeItem()` to clear localStorage
|
||||
* browser, node: don't set DEBUG if namespaces is undefined (#107, @leedm777)
|
||||
* package: add "contributors" section
|
||||
* node: fix comment typo
|
||||
* README: list authors
|
||||
|
||||
1.0.0 / 2014-06-04
|
||||
==================
|
||||
|
||||
* make ms diff be global, not be scope
|
||||
* debug: ignore empty strings in enable()
|
||||
* node: make DEBUG_COLORS able to disable coloring
|
||||
* *: export the `colors` array
|
||||
* npmignore: don't publish the `dist` dir
|
||||
* Makefile: refactor to use browserify
|
||||
* package: add "browserify" as a dev dependency
|
||||
* Readme: add Web Inspector Colors section
|
||||
* node: reset terminal color for the debug content
|
||||
* node: map "%o" to `util.inspect()`
|
||||
* browser: map "%j" to `JSON.stringify()`
|
||||
* debug: add custom "formatters"
|
||||
* debug: use "ms" module for humanizing the diff
|
||||
* Readme: add "bash" syntax highlighting
|
||||
* browser: add Firebug color support
|
||||
* browser: add colors for WebKit browsers
|
||||
* node: apply log to `console`
|
||||
* rewrite: abstract common logic for Node & browsers
|
||||
* add .jshintrc file
|
||||
|
||||
0.8.1 / 2014-04-14
|
||||
==================
|
||||
|
||||
* package: re-add the "component" section
|
||||
|
||||
0.8.0 / 2014-03-30
|
||||
==================
|
||||
|
||||
* add `enable()` method for nodejs. Closes #27
|
||||
* change from stderr to stdout
|
||||
* remove unnecessary index.js file
|
||||
|
||||
0.7.4 / 2013-11-13
|
||||
==================
|
||||
|
||||
* remove "browserify" key from package.json (fixes something in browserify)
|
||||
|
||||
0.7.3 / 2013-10-30
|
||||
==================
|
||||
|
||||
* fix: catch localStorage security error when cookies are blocked (Chrome)
|
||||
* add debug(err) support. Closes #46
|
||||
* add .browser prop to package.json. Closes #42
|
||||
|
||||
0.7.2 / 2013-02-06
|
||||
==================
|
||||
|
||||
* fix package.json
|
||||
* fix: Mobile Safari (private mode) is broken with debug
|
||||
* fix: Use unicode to send escape character to shell instead of octal to work with strict mode javascript
|
||||
|
||||
0.7.1 / 2013-02-05
|
||||
==================
|
||||
|
||||
* add repository URL to package.json
|
||||
* add DEBUG_COLORED to force colored output
|
||||
* add browserify support
|
||||
* fix component. Closes #24
|
||||
|
||||
0.7.0 / 2012-05-04
|
||||
==================
|
||||
|
||||
* Added .component to package.json
|
||||
* Added debug.component.js build
|
||||
|
||||
0.6.0 / 2012-03-16
|
||||
==================
|
||||
|
||||
* Added support for "-" prefix in DEBUG [Vinay Pulim]
|
||||
* Added `.enabled` flag to the node version [TooTallNate]
|
||||
|
||||
0.5.0 / 2012-02-02
|
||||
==================
|
||||
|
||||
* Added: humanize diffs. Closes #8
|
||||
* Added `debug.disable()` to the CS variant
|
||||
* Removed padding. Closes #10
|
||||
* Fixed: persist client-side variant again. Closes #9
|
||||
|
||||
0.4.0 / 2012-02-01
|
||||
==================
|
||||
|
||||
* Added browser variant support for older browsers [TooTallNate]
|
||||
* Added `debug.enable('project:*')` to browser variant [TooTallNate]
|
||||
* Added padding to diff (moved it to the right)
|
||||
|
||||
0.3.0 / 2012-01-26
|
||||
==================
|
||||
|
||||
* Added millisecond diff when isatty, otherwise UTC string
|
||||
|
||||
0.2.0 / 2012-01-22
|
||||
==================
|
||||
|
||||
* Added wildcard support
|
||||
|
||||
0.1.0 / 2011-12-02
|
||||
==================
|
||||
|
||||
* Added: remove colors unless stderr isatty [TooTallNate]
|
||||
|
||||
0.0.1 / 2010-01-03
|
||||
==================
|
||||
|
||||
* Initial release
|
|
@ -1,19 +0,0 @@
|
|||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca>
|
||||
|
||||
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.
|
||||
|
|
@ -1,50 +0,0 @@
|
|||
# get Makefile directory name: http://stackoverflow.com/a/5982798/376773
|
||||
THIS_MAKEFILE_PATH:=$(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST))
|
||||
THIS_DIR:=$(shell cd $(dir $(THIS_MAKEFILE_PATH));pwd)
|
||||
|
||||
# BIN directory
|
||||
BIN := $(THIS_DIR)/node_modules/.bin
|
||||
|
||||
# Path
|
||||
PATH := node_modules/.bin:$(PATH)
|
||||
SHELL := /bin/bash
|
||||
|
||||
# applications
|
||||
NODE ?= $(shell which node)
|
||||
YARN ?= $(shell which yarn)
|
||||
PKG ?= $(if $(YARN),$(YARN),$(NODE) $(shell which npm))
|
||||
BROWSERIFY ?= $(NODE) $(BIN)/browserify
|
||||
|
||||
.FORCE:
|
||||
|
||||
install: node_modules
|
||||
|
||||
node_modules: package.json
|
||||
@NODE_ENV= $(PKG) install
|
||||
@touch node_modules
|
||||
|
||||
lint: .FORCE
|
||||
eslint browser.js debug.js index.js node.js
|
||||
|
||||
test-node: .FORCE
|
||||
istanbul cover node_modules/mocha/bin/_mocha -- test/**.js
|
||||
|
||||
test-browser: .FORCE
|
||||
mkdir -p dist
|
||||
|
||||
@$(BROWSERIFY) \
|
||||
--standalone debug \
|
||||
. > dist/debug.js
|
||||
|
||||
karma start --single-run
|
||||
rimraf dist
|
||||
|
||||
test: .FORCE
|
||||
concurrently \
|
||||
"make test-node" \
|
||||
"make test-browser"
|
||||
|
||||
coveralls:
|
||||
cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js
|
||||
|
||||
.PHONY: all install clean distclean
|
|
@ -1,312 +0,0 @@
|
|||
# debug
|
||||
[](https://travis-ci.org/visionmedia/debug) [](https://coveralls.io/github/visionmedia/debug?branch=master) [](https://visionmedia-community-slackin.now.sh/) [](#backers)
|
||||
[](#sponsors)
|
||||
|
||||
|
||||
|
||||
A tiny node.js debugging utility modelled after node core's debugging technique.
|
||||
|
||||
**Discussion around the V3 API is under way [here](https://github.com/visionmedia/debug/issues/370)**
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
$ npm install debug
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
`debug` exposes a function; simply pass this function the name of your module, and it will return a decorated version of `console.error` for you to pass debug statements to. This will allow you to toggle the debug output for different parts of your module as well as the module as a whole.
|
||||
|
||||
Example _app.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug')('http')
|
||||
, http = require('http')
|
||||
, name = 'My App';
|
||||
|
||||
// fake app
|
||||
|
||||
debug('booting %s', name);
|
||||
|
||||
http.createServer(function(req, res){
|
||||
debug(req.method + ' ' + req.url);
|
||||
res.end('hello\n');
|
||||
}).listen(3000, function(){
|
||||
debug('listening');
|
||||
});
|
||||
|
||||
// fake worker of some kind
|
||||
|
||||
require('./worker');
|
||||
```
|
||||
|
||||
Example _worker.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug')('worker');
|
||||
|
||||
setInterval(function(){
|
||||
debug('doing some work');
|
||||
}, 1000);
|
||||
```
|
||||
|
||||
The __DEBUG__ environment variable is then used to enable these based on space or comma-delimited names. Here are some examples:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
#### Windows note
|
||||
|
||||
On Windows the environment variable is set using the `set` command.
|
||||
|
||||
```cmd
|
||||
set DEBUG=*,-not_this
|
||||
```
|
||||
|
||||
Note that PowerShell uses different syntax to set environment variables.
|
||||
|
||||
```cmd
|
||||
$env:DEBUG = "*,-not_this"
|
||||
```
|
||||
|
||||
Then, run the program to be debugged as usual.
|
||||
|
||||
## Millisecond diff
|
||||
|
||||
When actively developing an application it can be useful to see when the time spent between one `debug()` call and the next. Suppose for example you invoke `debug()` before requesting a resource, and after as well, the "+NNNms" will show you how much time was spent between calls.
|
||||
|
||||

|
||||
|
||||
When stdout is not a TTY, `Date#toUTCString()` is used, making it more useful for logging the debug information as shown below:
|
||||
|
||||

|
||||
|
||||
## Conventions
|
||||
|
||||
If you're using this in one or more of your libraries, you _should_ use the name of your library so that developers may toggle debugging as desired without guessing names. If you have more than one debuggers you _should_ prefix them with your library name and use ":" to separate features. For example "bodyParser" from Connect would then be "connect:bodyParser".
|
||||
|
||||
## Wildcards
|
||||
|
||||
The `*` character may be used as a wildcard. Suppose for example your library has debuggers named "connect:bodyParser", "connect:compress", "connect:session", instead of listing all three with `DEBUG=connect:bodyParser,connect:compress,connect:session`, you may simply do `DEBUG=connect:*`, or to run everything using this module simply use `DEBUG=*`.
|
||||
|
||||
You can also exclude specific debuggers by prefixing them with a "-" character. For example, `DEBUG=*,-connect:*` would include all debuggers except those starting with "connect:".
|
||||
|
||||
## Environment Variables
|
||||
|
||||
When running through Node.js, you can set a few environment variables that will
|
||||
change the behavior of the debug logging:
|
||||
|
||||
| Name | Purpose |
|
||||
|-----------|-------------------------------------------------|
|
||||
| `DEBUG` | Enables/disabled specific debugging namespaces. |
|
||||
| `DEBUG_COLORS`| Whether or not to use colors in the debug output. |
|
||||
| `DEBUG_DEPTH` | Object inspection depth. |
|
||||
| `DEBUG_SHOW_HIDDEN` | Shows hidden properties on inspected objects. |
|
||||
|
||||
|
||||
__Note:__ The environment variables beginning with `DEBUG_` end up being
|
||||
converted into an Options object that gets used with `%o`/`%O` formatters.
|
||||
See the Node.js documentation for
|
||||
[`util.inspect()`](https://nodejs.org/api/util.html#util_util_inspect_object_options)
|
||||
for the complete list.
|
||||
|
||||
## Formatters
|
||||
|
||||
|
||||
Debug uses [printf-style](https://wikipedia.org/wiki/Printf_format_string) formatting. Below are the officially supported formatters:
|
||||
|
||||
| Formatter | Representation |
|
||||
|-----------|----------------|
|
||||
| `%O` | Pretty-print an Object on multiple lines. |
|
||||
| `%o` | Pretty-print an Object all on a single line. |
|
||||
| `%s` | String. |
|
||||
| `%d` | Number (both integer and float). |
|
||||
| `%j` | JSON. Replaced with the string '[Circular]' if the argument contains circular references. |
|
||||
| `%%` | Single percent sign ('%'). This does not consume an argument. |
|
||||
|
||||
### Custom formatters
|
||||
|
||||
You can add custom formatters by extending the `debug.formatters` object. For example, if you wanted to add support for rendering a Buffer as hex with `%h`, you could do something like:
|
||||
|
||||
```js
|
||||
const createDebug = require('debug')
|
||||
createDebug.formatters.h = (v) => {
|
||||
return v.toString('hex')
|
||||
}
|
||||
|
||||
// …elsewhere
|
||||
const debug = createDebug('foo')
|
||||
debug('this is hex: %h', new Buffer('hello world'))
|
||||
// foo this is hex: 68656c6c6f20776f726c6421 +0ms
|
||||
```
|
||||
|
||||
## Browser support
|
||||
You can build a browser-ready script using [browserify](https://github.com/substack/node-browserify),
|
||||
or just use the [browserify-as-a-service](https://wzrd.in/) [build](https://wzrd.in/standalone/debug@latest),
|
||||
if you don't want to build it yourself.
|
||||
|
||||
Debug's enable state is currently persisted by `localStorage`.
|
||||
Consider the situation shown below where you have `worker:a` and `worker:b`,
|
||||
and wish to debug both. You can enable this using `localStorage.debug`:
|
||||
|
||||
```js
|
||||
localStorage.debug = 'worker:*'
|
||||
```
|
||||
|
||||
And then refresh the page.
|
||||
|
||||
```js
|
||||
a = debug('worker:a');
|
||||
b = debug('worker:b');
|
||||
|
||||
setInterval(function(){
|
||||
a('doing some work');
|
||||
}, 1000);
|
||||
|
||||
setInterval(function(){
|
||||
b('doing some work');
|
||||
}, 1200);
|
||||
```
|
||||
|
||||
#### Web Inspector Colors
|
||||
|
||||
Colors are also enabled on "Web Inspectors" that understand the `%c` formatting
|
||||
option. These are WebKit web inspectors, Firefox ([since version
|
||||
31](https://hacks.mozilla.org/2014/05/editable-box-model-multiple-selection-sublime-text-keys-much-more-firefox-developer-tools-episode-31/))
|
||||
and the Firebug plugin for Firefox (any version).
|
||||
|
||||
Colored output looks something like:
|
||||
|
||||

|
||||
|
||||
|
||||
## Output streams
|
||||
|
||||
By default `debug` will log to stderr, however this can be configured per-namespace by overriding the `log` method:
|
||||
|
||||
Example _stdout.js_:
|
||||
|
||||
```js
|
||||
var debug = require('debug');
|
||||
var error = debug('app:error');
|
||||
|
||||
// by default stderr is used
|
||||
error('goes to stderr!');
|
||||
|
||||
var log = debug('app:log');
|
||||
// set this namespace to log via console.log
|
||||
log.log = console.log.bind(console); // don't forget to bind to console!
|
||||
log('goes to stdout');
|
||||
error('still goes to stderr!');
|
||||
|
||||
// set all output to go via console.info
|
||||
// overrides all per-namespace log settings
|
||||
debug.log = console.info.bind(console);
|
||||
error('now goes to stdout via console.info');
|
||||
log('still goes to stdout, but via console.info now');
|
||||
```
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
- TJ Holowaychuk
|
||||
- Nathan Rajlich
|
||||
- Andrew Rhyne
|
||||
|
||||
## Backers
|
||||
|
||||
Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/debug#backer)]
|
||||
|
||||
<a href="https://opencollective.com/debug/backer/0/website" target="_blank"><img src="https://opencollective.com/debug/backer/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/1/website" target="_blank"><img src="https://opencollective.com/debug/backer/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/2/website" target="_blank"><img src="https://opencollective.com/debug/backer/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/3/website" target="_blank"><img src="https://opencollective.com/debug/backer/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/4/website" target="_blank"><img src="https://opencollective.com/debug/backer/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/5/website" target="_blank"><img src="https://opencollective.com/debug/backer/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/6/website" target="_blank"><img src="https://opencollective.com/debug/backer/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/7/website" target="_blank"><img src="https://opencollective.com/debug/backer/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/8/website" target="_blank"><img src="https://opencollective.com/debug/backer/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/9/website" target="_blank"><img src="https://opencollective.com/debug/backer/9/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/10/website" target="_blank"><img src="https://opencollective.com/debug/backer/10/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/11/website" target="_blank"><img src="https://opencollective.com/debug/backer/11/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/12/website" target="_blank"><img src="https://opencollective.com/debug/backer/12/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/13/website" target="_blank"><img src="https://opencollective.com/debug/backer/13/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/14/website" target="_blank"><img src="https://opencollective.com/debug/backer/14/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/15/website" target="_blank"><img src="https://opencollective.com/debug/backer/15/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/16/website" target="_blank"><img src="https://opencollective.com/debug/backer/16/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/17/website" target="_blank"><img src="https://opencollective.com/debug/backer/17/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/18/website" target="_blank"><img src="https://opencollective.com/debug/backer/18/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/19/website" target="_blank"><img src="https://opencollective.com/debug/backer/19/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/20/website" target="_blank"><img src="https://opencollective.com/debug/backer/20/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/21/website" target="_blank"><img src="https://opencollective.com/debug/backer/21/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/22/website" target="_blank"><img src="https://opencollective.com/debug/backer/22/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/23/website" target="_blank"><img src="https://opencollective.com/debug/backer/23/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/24/website" target="_blank"><img src="https://opencollective.com/debug/backer/24/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/25/website" target="_blank"><img src="https://opencollective.com/debug/backer/25/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/26/website" target="_blank"><img src="https://opencollective.com/debug/backer/26/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/27/website" target="_blank"><img src="https://opencollective.com/debug/backer/27/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/28/website" target="_blank"><img src="https://opencollective.com/debug/backer/28/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/backer/29/website" target="_blank"><img src="https://opencollective.com/debug/backer/29/avatar.svg"></a>
|
||||
|
||||
|
||||
## Sponsors
|
||||
|
||||
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/debug#sponsor)]
|
||||
|
||||
<a href="https://opencollective.com/debug/sponsor/0/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/0/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/1/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/1/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/2/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/2/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/3/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/3/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/4/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/4/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/5/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/5/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/6/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/6/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/7/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/7/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/8/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/8/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/9/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/9/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/10/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/10/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/11/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/11/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/12/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/12/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/13/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/13/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/14/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/14/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/15/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/15/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/16/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/16/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/17/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/17/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/18/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/18/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/19/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/19/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/20/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/20/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/21/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/21/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/22/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/22/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/23/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/23/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/24/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/24/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/25/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/25/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/26/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/26/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/27/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/27/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/28/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/28/avatar.svg"></a>
|
||||
<a href="https://opencollective.com/debug/sponsor/29/website" target="_blank"><img src="https://opencollective.com/debug/sponsor/29/avatar.svg"></a>
|
||||
|
||||
## License
|
||||
|
||||
(The MIT License)
|
||||
|
||||
Copyright (c) 2014-2016 TJ Holowaychuk <tj@vision-media.ca>
|
||||
|
||||
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.
|
|
@ -1 +0,0 @@
|
|||
repo_token: SIAeZjKYlHK74rbcFvNHMUzjRiMpflxve
|
|
@ -1,11 +0,0 @@
|
|||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"node": true
|
||||
},
|
||||
"rules": {
|
||||
"no-console": 0,
|
||||
"no-empty": [1, { "allowEmptyCatch": true }]
|
||||
},
|
||||
"extends": "eslint:recommended"
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
support
|
||||
test
|
||||
examples
|
||||
example
|
||||
*.sock
|
||||
dist
|
||||
yarn.lock
|
||||
coverage
|
||||
bower.json
|
|
@ -1,14 +0,0 @@
|
|||
|
||||
language: node_js
|
||||
node_js:
|
||||
- "6"
|
||||
- "5"
|
||||
- "4"
|
||||
|
||||
install:
|
||||
- make node_modules
|
||||
|
||||
script:
|
||||
- make lint
|
||||
- make test
|
||||
- make coveralls
|
|
@ -1,19 +0,0 @@
|
|||
{
|
||||
"name": "debug",
|
||||
"repo": "visionmedia/debug",
|
||||
"description": "small debugging utility",
|
||||
"version": "2.6.6",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"log",
|
||||
"debugger"
|
||||
],
|
||||
"main": "src/browser.js",
|
||||
"scripts": [
|
||||
"src/browser.js",
|
||||
"src/debug.js"
|
||||
],
|
||||
"dependencies": {
|
||||
"rauchg/ms.js": "0.7.1"
|
||||
}
|
||||
}
|
|
@ -1,70 +0,0 @@
|
|||
// Karma configuration
|
||||
// Generated on Fri Dec 16 2016 13:09:51 GMT+0000 (UTC)
|
||||
|
||||
module.exports = function(config) {
|
||||
config.set({
|
||||
|
||||
// base path that will be used to resolve all patterns (eg. files, exclude)
|
||||
basePath: '',
|
||||
|
||||
|
||||
// frameworks to use
|
||||
// available frameworks: https://npmjs.org/browse/keyword/karma-adapter
|
||||
frameworks: ['mocha', 'chai', 'sinon'],
|
||||
|
||||
|
||||
// list of files / patterns to load in the browser
|
||||
files: [
|
||||
'dist/debug.js',
|
||||
'test/*spec.js'
|
||||
],
|
||||
|
||||
|
||||
// list of files to exclude
|
||||
exclude: [
|
||||
'src/node.js'
|
||||
],
|
||||
|
||||
|
||||
// preprocess matching files before serving them to the browser
|
||||
// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
|
||||
preprocessors: {
|
||||
},
|
||||
|
||||
// test results reporter to use
|
||||
// possible values: 'dots', 'progress'
|
||||
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
|
||||
reporters: ['progress'],
|
||||
|
||||
|
||||
// web server port
|
||||
port: 9876,
|
||||
|
||||
|
||||
// enable / disable colors in the output (reporters and logs)
|
||||
colors: true,
|
||||
|
||||
|
||||
// level of logging
|
||||
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
|
||||
logLevel: config.LOG_INFO,
|
||||
|
||||
|
||||
// enable / disable watching file and executing tests whenever any file changes
|
||||
autoWatch: true,
|
||||
|
||||
|
||||
// start these browsers
|
||||
// available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
|
||||
browsers: ['PhantomJS'],
|
||||
|
||||
|
||||
// Continuous Integration mode
|
||||
// if true, Karma captures browsers, runs the tests and exits
|
||||
singleRun: false,
|
||||
|
||||
// Concurrency level
|
||||
// how many browser should be started simultaneous
|
||||
concurrency: Infinity
|
||||
})
|
||||
}
|
|
@ -1 +0,0 @@
|
|||
module.exports = require('./src/node');
|
|
@ -1,127 +0,0 @@
|
|||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "debug@2",
|
||||
"scope": null,
|
||||
"escapedName": "debug",
|
||||
"name": "debug",
|
||||
"rawSpec": "2",
|
||||
"spec": ">=2.0.0 <3.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi"
|
||||
]
|
||||
],
|
||||
"_from": "debug@>=2.0.0 <3.0.0",
|
||||
"_id": "debug@2.6.6",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/debug",
|
||||
"_nodeVersion": "6.9.2",
|
||||
"_npmOperationalInternal": {
|
||||
"host": "packages-12-west.internal.npmjs.com",
|
||||
"tmp": "tmp/debug-2.6.6.tgz_1493336101823_0.35170009173452854"
|
||||
},
|
||||
"_npmUser": {
|
||||
"name": "thebigredgeek",
|
||||
"email": "rhyneandrew@gmail.com"
|
||||
},
|
||||
"_npmVersion": "3.10.9",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "debug@2",
|
||||
"scope": null,
|
||||
"escapedName": "debug",
|
||||
"name": "debug",
|
||||
"rawSpec": "2",
|
||||
"spec": ">=2.0.0 <3.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/ffi",
|
||||
"/ref",
|
||||
"/ref-struct"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz",
|
||||
"_shasum": "a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "debug@2",
|
||||
"_where": "/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi",
|
||||
"author": {
|
||||
"name": "TJ Holowaychuk",
|
||||
"email": "tj@vision-media.ca"
|
||||
},
|
||||
"browser": "./src/browser.js",
|
||||
"bugs": {
|
||||
"url": "https://github.com/visionmedia/debug/issues"
|
||||
},
|
||||
"component": {
|
||||
"scripts": {
|
||||
"debug/index.js": "browser.js",
|
||||
"debug/debug.js": "debug.js"
|
||||
}
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Nathan Rajlich",
|
||||
"email": "nathan@tootallnate.net",
|
||||
"url": "http://n8.io"
|
||||
},
|
||||
{
|
||||
"name": "Andrew Rhyne",
|
||||
"email": "rhyneandrew@gmail.com"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"ms": "0.7.3"
|
||||
},
|
||||
"description": "small debugging utility",
|
||||
"devDependencies": {
|
||||
"browserify": "9.0.3",
|
||||
"chai": "^3.5.0",
|
||||
"concurrently": "^3.1.0",
|
||||
"coveralls": "^2.11.15",
|
||||
"eslint": "^3.12.1",
|
||||
"istanbul": "^0.4.5",
|
||||
"karma": "^1.3.0",
|
||||
"karma-chai": "^0.1.0",
|
||||
"karma-mocha": "^1.3.0",
|
||||
"karma-phantomjs-launcher": "^1.0.2",
|
||||
"karma-sinon": "^1.0.5",
|
||||
"mocha": "^3.2.0",
|
||||
"mocha-lcov-reporter": "^1.2.0",
|
||||
"rimraf": "^2.5.4",
|
||||
"sinon": "^1.17.6",
|
||||
"sinon-chai": "^2.8.0"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a",
|
||||
"tarball": "https://registry.npmjs.org/debug/-/debug-2.6.6.tgz"
|
||||
},
|
||||
"gitHead": "c90a2b3c6c17300f3c183f0d665092c16388c7ff",
|
||||
"homepage": "https://github.com/visionmedia/debug#readme",
|
||||
"keywords": [
|
||||
"debug",
|
||||
"log",
|
||||
"debugger"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./src/index.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "thebigredgeek",
|
||||
"email": "rhyneandrew@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "debug",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/visionmedia/debug.git"
|
||||
},
|
||||
"scripts": {},
|
||||
"version": "2.6.6"
|
||||
}
|
|
@ -1,185 +0,0 @@
|
|||
/**
|
||||
* This is the web browser implementation of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = require('./debug');
|
||||
exports.log = log;
|
||||
exports.formatArgs = formatArgs;
|
||||
exports.save = save;
|
||||
exports.load = load;
|
||||
exports.useColors = useColors;
|
||||
exports.storage = 'undefined' != typeof chrome
|
||||
&& 'undefined' != typeof chrome.storage
|
||||
? chrome.storage.local
|
||||
: localstorage();
|
||||
|
||||
/**
|
||||
* Colors.
|
||||
*/
|
||||
|
||||
exports.colors = [
|
||||
'lightseagreen',
|
||||
'forestgreen',
|
||||
'goldenrod',
|
||||
'dodgerblue',
|
||||
'darkorchid',
|
||||
'crimson'
|
||||
];
|
||||
|
||||
/**
|
||||
* Currently only WebKit-based Web Inspectors, Firefox >= v31,
|
||||
* and the Firebug extension (any Firefox version) are known
|
||||
* to support "%c" CSS customizations.
|
||||
*
|
||||
* TODO: add a `localStorage` variable to explicitly enable/disable colors
|
||||
*/
|
||||
|
||||
function useColors() {
|
||||
// NB: In an Electron preload script, document will be defined but not fully
|
||||
// initialized. Since we know we're in Chrome, we'll just detect this case
|
||||
// explicitly
|
||||
if (typeof window !== 'undefined' && window.process && window.process.type === 'renderer') {
|
||||
return true;
|
||||
}
|
||||
|
||||
// is webkit? http://stackoverflow.com/a/16459606/376773
|
||||
// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
|
||||
return (typeof document !== 'undefined' && document && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
|
||||
// is firebug? http://stackoverflow.com/a/398120/376773
|
||||
(typeof window !== 'undefined' && window && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
|
||||
// is firefox >= v31?
|
||||
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
|
||||
(typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
|
||||
// double check webkit in userAgent just in case we are in a worker
|
||||
(typeof navigator !== 'undefined' && navigator && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
|
||||
}
|
||||
|
||||
/**
|
||||
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
|
||||
*/
|
||||
|
||||
exports.formatters.j = function(v) {
|
||||
try {
|
||||
return JSON.stringify(v);
|
||||
} catch (err) {
|
||||
return '[UnexpectedJSONParseError]: ' + err.message;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Colorize log arguments if enabled.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function formatArgs(args) {
|
||||
var useColors = this.useColors;
|
||||
|
||||
args[0] = (useColors ? '%c' : '')
|
||||
+ this.namespace
|
||||
+ (useColors ? ' %c' : ' ')
|
||||
+ args[0]
|
||||
+ (useColors ? '%c ' : ' ')
|
||||
+ '+' + exports.humanize(this.diff);
|
||||
|
||||
if (!useColors) return;
|
||||
|
||||
var c = 'color: ' + this.color;
|
||||
args.splice(1, 0, c, 'color: inherit')
|
||||
|
||||
// the final "%c" is somewhat tricky, because there could be other
|
||||
// arguments passed either before or after the %c, so we need to
|
||||
// figure out the correct index to insert the CSS into
|
||||
var index = 0;
|
||||
var lastC = 0;
|
||||
args[0].replace(/%[a-zA-Z%]/g, function(match) {
|
||||
if ('%%' === match) return;
|
||||
index++;
|
||||
if ('%c' === match) {
|
||||
// we only are interested in the *last* %c
|
||||
// (the user may have provided their own)
|
||||
lastC = index;
|
||||
}
|
||||
});
|
||||
|
||||
args.splice(lastC, 0, c);
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes `console.log()` when available.
|
||||
* No-op when `console.log` is not a "function".
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function log() {
|
||||
// this hackery is required for IE8/9, where
|
||||
// the `console.log` function doesn't have 'apply'
|
||||
return 'object' === typeof console
|
||||
&& console.log
|
||||
&& Function.prototype.apply.call(console.log, console, arguments);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save `namespaces`.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function save(namespaces) {
|
||||
try {
|
||||
if (null == namespaces) {
|
||||
exports.storage.removeItem('debug');
|
||||
} else {
|
||||
exports.storage.debug = namespaces;
|
||||
}
|
||||
} catch(e) {}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load `namespaces`.
|
||||
*
|
||||
* @return {String} returns the previously persisted debug modes
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function load() {
|
||||
var r;
|
||||
try {
|
||||
r = exports.storage.debug;
|
||||
} catch(e) {}
|
||||
|
||||
// If debug isn't set in LS, and we're in Electron, try to load $DEBUG
|
||||
if (!r && typeof process !== 'undefined' && 'env' in process) {
|
||||
r = process.env.DEBUG;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable namespaces listed in `localStorage.debug` initially.
|
||||
*/
|
||||
|
||||
exports.enable(load());
|
||||
|
||||
/**
|
||||
* Localstorage attempts to return the localstorage.
|
||||
*
|
||||
* This is necessary because safari throws
|
||||
* when a user disables cookies/localstorage
|
||||
* and you attempt to access it.
|
||||
*
|
||||
* @return {LocalStorage}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function localstorage() {
|
||||
try {
|
||||
return window.localStorage;
|
||||
} catch (e) {}
|
||||
}
|
|
@ -1,202 +0,0 @@
|
|||
|
||||
/**
|
||||
* This is the common logic for both the Node.js and web browser
|
||||
* implementations of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = createDebug.debug = createDebug['default'] = createDebug;
|
||||
exports.coerce = coerce;
|
||||
exports.disable = disable;
|
||||
exports.enable = enable;
|
||||
exports.enabled = enabled;
|
||||
exports.humanize = require('ms');
|
||||
|
||||
/**
|
||||
* The currently active debug mode names, and names to skip.
|
||||
*/
|
||||
|
||||
exports.names = [];
|
||||
exports.skips = [];
|
||||
|
||||
/**
|
||||
* Map of special "%n" handling functions, for the debug "format" argument.
|
||||
*
|
||||
* Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
|
||||
*/
|
||||
|
||||
exports.formatters = {};
|
||||
|
||||
/**
|
||||
* Previous log timestamp.
|
||||
*/
|
||||
|
||||
var prevTime;
|
||||
|
||||
/**
|
||||
* Select a color.
|
||||
* @param {String} namespace
|
||||
* @return {Number}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function selectColor(namespace) {
|
||||
var hash = 0, i;
|
||||
|
||||
for (i in namespace) {
|
||||
hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
|
||||
hash |= 0; // Convert to 32bit integer
|
||||
}
|
||||
|
||||
return exports.colors[Math.abs(hash) % exports.colors.length];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a debugger with the given `namespace`.
|
||||
*
|
||||
* @param {String} namespace
|
||||
* @return {Function}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function createDebug(namespace) {
|
||||
|
||||
function debug() {
|
||||
// disabled?
|
||||
if (!debug.enabled) return;
|
||||
|
||||
var self = debug;
|
||||
|
||||
// set `diff` timestamp
|
||||
var curr = +new Date();
|
||||
var ms = curr - (prevTime || curr);
|
||||
self.diff = ms;
|
||||
self.prev = prevTime;
|
||||
self.curr = curr;
|
||||
prevTime = curr;
|
||||
|
||||
// turn the `arguments` into a proper Array
|
||||
var args = new Array(arguments.length);
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
args[i] = arguments[i];
|
||||
}
|
||||
|
||||
args[0] = exports.coerce(args[0]);
|
||||
|
||||
if ('string' !== typeof args[0]) {
|
||||
// anything else let's inspect with %O
|
||||
args.unshift('%O');
|
||||
}
|
||||
|
||||
// apply any `formatters` transformations
|
||||
var index = 0;
|
||||
args[0] = args[0].replace(/%([a-zA-Z%])/g, function(match, format) {
|
||||
// if we encounter an escaped % then don't increase the array index
|
||||
if (match === '%%') return match;
|
||||
index++;
|
||||
var formatter = exports.formatters[format];
|
||||
if ('function' === typeof formatter) {
|
||||
var val = args[index];
|
||||
match = formatter.call(self, val);
|
||||
|
||||
// now we need to remove `args[index]` since it's inlined in the `format`
|
||||
args.splice(index, 1);
|
||||
index--;
|
||||
}
|
||||
return match;
|
||||
});
|
||||
|
||||
// apply env-specific formatting (colors, etc.)
|
||||
exports.formatArgs.call(self, args);
|
||||
|
||||
var logFn = debug.log || exports.log || console.log.bind(console);
|
||||
logFn.apply(self, args);
|
||||
}
|
||||
|
||||
debug.namespace = namespace;
|
||||
debug.enabled = exports.enabled(namespace);
|
||||
debug.useColors = exports.useColors();
|
||||
debug.color = selectColor(namespace);
|
||||
|
||||
// env-specific initialization logic for debug instances
|
||||
if ('function' === typeof exports.init) {
|
||||
exports.init(debug);
|
||||
}
|
||||
|
||||
return debug;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enables a debug mode by namespaces. This can include modes
|
||||
* separated by a colon and wildcards.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function enable(namespaces) {
|
||||
exports.save(namespaces);
|
||||
|
||||
exports.names = [];
|
||||
exports.skips = [];
|
||||
|
||||
var split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
|
||||
var len = split.length;
|
||||
|
||||
for (var i = 0; i < len; i++) {
|
||||
if (!split[i]) continue; // ignore empty strings
|
||||
namespaces = split[i].replace(/\*/g, '.*?');
|
||||
if (namespaces[0] === '-') {
|
||||
exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
||||
} else {
|
||||
exports.names.push(new RegExp('^' + namespaces + '$'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable debug output.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function disable() {
|
||||
exports.enable('');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the given mode name is enabled, false otherwise.
|
||||
*
|
||||
* @param {String} name
|
||||
* @return {Boolean}
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function enabled(name) {
|
||||
var i, len;
|
||||
for (i = 0, len = exports.skips.length; i < len; i++) {
|
||||
if (exports.skips[i].test(name)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
for (i = 0, len = exports.names.length; i < len; i++) {
|
||||
if (exports.names[i].test(name)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Coerce `val`.
|
||||
*
|
||||
* @param {Mixed} val
|
||||
* @return {Mixed}
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function coerce(val) {
|
||||
if (val instanceof Error) return val.stack || val.message;
|
||||
return val;
|
||||
}
|
|
@ -1,10 +0,0 @@
|
|||
/**
|
||||
* Detect Electron renderer process, which is node, but we should
|
||||
* treat as a browser.
|
||||
*/
|
||||
|
||||
if (typeof process !== 'undefined' && process.type === 'renderer') {
|
||||
module.exports = require('./browser.js');
|
||||
} else {
|
||||
module.exports = require('./node.js');
|
||||
}
|
|
@ -1,241 +0,0 @@
|
|||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var tty = require('tty');
|
||||
var util = require('util');
|
||||
|
||||
/**
|
||||
* This is the Node.js implementation of `debug()`.
|
||||
*
|
||||
* Expose `debug()` as the module.
|
||||
*/
|
||||
|
||||
exports = module.exports = require('./debug');
|
||||
exports.init = init;
|
||||
exports.log = log;
|
||||
exports.formatArgs = formatArgs;
|
||||
exports.save = save;
|
||||
exports.load = load;
|
||||
exports.useColors = useColors;
|
||||
|
||||
/**
|
||||
* Colors.
|
||||
*/
|
||||
|
||||
exports.colors = [6, 2, 3, 4, 5, 1];
|
||||
|
||||
/**
|
||||
* Build up the default `inspectOpts` object from the environment variables.
|
||||
*
|
||||
* $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
|
||||
*/
|
||||
|
||||
exports.inspectOpts = Object.keys(process.env).filter(function (key) {
|
||||
return /^debug_/i.test(key);
|
||||
}).reduce(function (obj, key) {
|
||||
// camel-case
|
||||
var prop = key
|
||||
.substring(6)
|
||||
.toLowerCase()
|
||||
.replace(/_([a-z])/g, function (_, k) { return k.toUpperCase() });
|
||||
|
||||
// coerce string value into JS value
|
||||
var val = process.env[key];
|
||||
if (/^(yes|on|true|enabled)$/i.test(val)) val = true;
|
||||
else if (/^(no|off|false|disabled)$/i.test(val)) val = false;
|
||||
else if (val === 'null') val = null;
|
||||
else val = Number(val);
|
||||
|
||||
obj[prop] = val;
|
||||
return obj;
|
||||
}, {});
|
||||
|
||||
/**
|
||||
* The file descriptor to write the `debug()` calls to.
|
||||
* Set the `DEBUG_FD` env variable to override with another value. i.e.:
|
||||
*
|
||||
* $ DEBUG_FD=3 node script.js 3>debug.log
|
||||
*/
|
||||
|
||||
var fd = parseInt(process.env.DEBUG_FD, 10) || 2;
|
||||
|
||||
if (1 !== fd && 2 !== fd) {
|
||||
util.deprecate(function(){}, 'except for stderr(2) and stdout(1), any other usage of DEBUG_FD is deprecated. Override debug.log if you want to use a different log function (https://git.io/debug_fd)')()
|
||||
}
|
||||
|
||||
var stream = 1 === fd ? process.stdout :
|
||||
2 === fd ? process.stderr :
|
||||
createWritableStdioStream(fd);
|
||||
|
||||
/**
|
||||
* Is stdout a TTY? Colored output is enabled when `true`.
|
||||
*/
|
||||
|
||||
function useColors() {
|
||||
return 'colors' in exports.inspectOpts
|
||||
? Boolean(exports.inspectOpts.colors)
|
||||
: tty.isatty(fd);
|
||||
}
|
||||
|
||||
/**
|
||||
* Map %o to `util.inspect()`, all on a single line.
|
||||
*/
|
||||
|
||||
exports.formatters.o = function(v) {
|
||||
this.inspectOpts.colors = this.useColors;
|
||||
return util.inspect(v, this.inspectOpts)
|
||||
.replace(/\s*\n\s*/g, ' ');
|
||||
};
|
||||
|
||||
/**
|
||||
* Map %o to `util.inspect()`, allowing multiple lines if needed.
|
||||
*/
|
||||
|
||||
exports.formatters.O = function(v) {
|
||||
this.inspectOpts.colors = this.useColors;
|
||||
return util.inspect(v, this.inspectOpts);
|
||||
};
|
||||
|
||||
/**
|
||||
* Adds ANSI color escape codes if enabled.
|
||||
*
|
||||
* @api public
|
||||
*/
|
||||
|
||||
function formatArgs(args) {
|
||||
var name = this.namespace;
|
||||
var useColors = this.useColors;
|
||||
|
||||
if (useColors) {
|
||||
var c = this.color;
|
||||
var prefix = ' \u001b[3' + c + ';1m' + name + ' ' + '\u001b[0m';
|
||||
|
||||
args[0] = prefix + args[0].split('\n').join('\n' + prefix);
|
||||
args.push('\u001b[3' + c + 'm+' + exports.humanize(this.diff) + '\u001b[0m');
|
||||
} else {
|
||||
args[0] = new Date().toUTCString()
|
||||
+ ' ' + name + ' ' + args[0];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Invokes `util.format()` with the specified arguments and writes to `stream`.
|
||||
*/
|
||||
|
||||
function log() {
|
||||
return stream.write(util.format.apply(util, arguments) + '\n');
|
||||
}
|
||||
|
||||
/**
|
||||
* Save `namespaces`.
|
||||
*
|
||||
* @param {String} namespaces
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function save(namespaces) {
|
||||
if (null == namespaces) {
|
||||
// If you set a process.env field to null or undefined, it gets cast to the
|
||||
// string 'null' or 'undefined'. Just delete instead.
|
||||
delete process.env.DEBUG;
|
||||
} else {
|
||||
process.env.DEBUG = namespaces;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load `namespaces`.
|
||||
*
|
||||
* @return {String} returns the previously persisted debug modes
|
||||
* @api private
|
||||
*/
|
||||
|
||||
function load() {
|
||||
return process.env.DEBUG;
|
||||
}
|
||||
|
||||
/**
|
||||
* Copied from `node/src/node.js`.
|
||||
*
|
||||
* XXX: It's lame that node doesn't expose this API out-of-the-box. It also
|
||||
* relies on the undocumented `tty_wrap.guessHandleType()` which is also lame.
|
||||
*/
|
||||
|
||||
function createWritableStdioStream (fd) {
|
||||
var stream;
|
||||
var tty_wrap = process.binding('tty_wrap');
|
||||
|
||||
// Note stream._type is used for test-module-load-list.js
|
||||
|
||||
switch (tty_wrap.guessHandleType(fd)) {
|
||||
case 'TTY':
|
||||
stream = new tty.WriteStream(fd);
|
||||
stream._type = 'tty';
|
||||
|
||||
// Hack to have stream not keep the event loop alive.
|
||||
// See https://github.com/joyent/node/issues/1726
|
||||
if (stream._handle && stream._handle.unref) {
|
||||
stream._handle.unref();
|
||||
}
|
||||
break;
|
||||
|
||||
case 'FILE':
|
||||
var fs = require('fs');
|
||||
stream = new fs.SyncWriteStream(fd, { autoClose: false });
|
||||
stream._type = 'fs';
|
||||
break;
|
||||
|
||||
case 'PIPE':
|
||||
case 'TCP':
|
||||
var net = require('net');
|
||||
stream = new net.Socket({
|
||||
fd: fd,
|
||||
readable: false,
|
||||
writable: true
|
||||
});
|
||||
|
||||
// FIXME Should probably have an option in net.Socket to create a
|
||||
// stream from an existing fd which is writable only. But for now
|
||||
// we'll just add this hack and set the `readable` member to false.
|
||||
// Test: ./node test/fixtures/echo.js < /etc/passwd
|
||||
stream.readable = false;
|
||||
stream.read = null;
|
||||
stream._type = 'pipe';
|
||||
|
||||
// FIXME Hack to have stream not keep the event loop alive.
|
||||
// See https://github.com/joyent/node/issues/1726
|
||||
if (stream._handle && stream._handle.unref) {
|
||||
stream._handle.unref();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// Probably an error on in uv_guess_handle()
|
||||
throw new Error('Implement me. Unknown stream file type!');
|
||||
}
|
||||
|
||||
// For supporting legacy API we put the FD here.
|
||||
stream.fd = fd;
|
||||
|
||||
stream._isStdio = true;
|
||||
|
||||
return stream;
|
||||
}
|
||||
|
||||
/**
|
||||
* Init logic for `debug` instances.
|
||||
*
|
||||
* Create a new `inspectOpts` object in case `useColors` is set
|
||||
* differently for a particular `debug` instance.
|
||||
*/
|
||||
|
||||
function init (debug) {
|
||||
debug.inspectOpts = util._extend({}, exports.inspectOpts);
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable namespaces listed in `process.env.DEBUG` initially.
|
||||
*/
|
||||
|
||||
exports.enable(load());
|
|
@ -1,237 +0,0 @@
|
|||
2.2.0 / 2016-10-29
|
||||
==================
|
||||
|
||||
* [[`8fc355f276`](https://github.com/node-ffi/ffi/commit/8fc355f276)] - add libffi `version` string (Nathan Rajlich)
|
||||
* [[`97d7ab12e6`](https://github.com/node-ffi/ffi/commit/97d7ab12e6)] - remove OS X 10.5 deployment target (Nathan Rajlich)
|
||||
* [[`7a928f38b1`](https://github.com/node-ffi/ffi/commit/7a928f38b1)] - **test**: add a test case for [TooTallNate/ref#56](https://github.com/TooTallNate/ref/issues/56) (Nathan Rajlich)
|
||||
|
||||
2.1.0 / 2016-08-03
|
||||
==================
|
||||
|
||||
* [[`a66fb8b282`](https://github.com/node-ffi/ffi/commit/a66fb8b282)] - rename History.md to CHANGELOG.md (Nathan Rajlich)
|
||||
* [[`424d6b2278`](https://github.com/node-ffi/ffi/commit/424d6b2278)] - test node v6 with CI (Nathan Rajlich)
|
||||
* [[`37dc33f10d`](https://github.com/node-ffi/ffi/commit/37dc33f10d)] - Move `errno` method implement to C++ side (Lee, SungUk)
|
||||
* [[`f0547a7535`](https://github.com/node-ffi/ffi/commit/f0547a7535)] - **test**: use full URL to issue (Nathan Rajlich)
|
||||
* [[`819c664605`](https://github.com/node-ffi/ffi/commit/819c664605)] - **appveyor, travis**: test node v5.1 (Nathan Rajlich)
|
||||
* [[`b6e8dba046`](https://github.com/node-ffi/ffi/commit/b6e8dba046)] - remove benchmark files (Nathan Rajlich)
|
||||
* [[`f5e445be91`](https://github.com/node-ffi/ffi/commit/f5e445be91)] - **test**: load Foundation first instead (Nathan Rajlich)
|
||||
* [[`529ea78029`](https://github.com/node-ffi/ffi/commit/529ea78029)] - **travis**: remove iojs v3 (Nathan Rajlich)
|
||||
* [[`c81ab1ed1e`](https://github.com/node-ffi/ffi/commit/c81ab1ed1e)] - **test**: load `Cocoa` lib for Obj-C tests (Nathan Rajlich)
|
||||
* [[`829d7dac02`](https://github.com/node-ffi/ffi/commit/829d7dac02)] - **travis**: attempt to test "osx" (Nathan Rajlich)
|
||||
* [[`979da99892`](https://github.com/node-ffi/ffi/commit/979da99892)] - **test**: fix hardcoded `strtoul()` bindings (Nathan Rajlich)
|
||||
* [[`9cc558632c`](https://github.com/node-ffi/ffi/commit/9cc558632c)] - **test**: fix comment (Nathan Rajlich)
|
||||
* [[`3d673ca2a1`](https://github.com/node-ffi/ffi/commit/3d673ca2a1)] - **test**: attempt to fix test 169 on Linux (Nathan Rajlich)
|
||||
* [[`c2e5996d9d`](https://github.com/node-ffi/ffi/commit/c2e5996d9d)] - **test**: remove .only() (Nathan Rajlich)
|
||||
* [[`1187b80f7b`](https://github.com/node-ffi/ffi/commit/1187b80f7b)] - **test**: add case for allowing Buffer backing store for "string" FFI argument (Nathan Rajlich)
|
||||
* [[`3b09d1ac09`](https://github.com/node-ffi/ffi/commit/3b09d1ac09)] - **test**: remove semis (Nathan Rajlich)
|
||||
* [[`74e29a17d0`](https://github.com/node-ffi/ffi/commit/74e29a17d0)] - **test**: whitespace fixes (Nathan Rajlich)
|
||||
* [[`6551d4ab5b`](https://github.com/node-ffi/ffi/commit/6551d4ab5b)] - **appveyor**: test node v4.1 (Nathan Rajlich)
|
||||
* [[`c0b64413fe`](https://github.com/node-ffi/ffi/commit/c0b64413fe)] - **travis**: test node v4.1 (Nathan Rajlich)
|
||||
* [[`730bd4a92f`](https://github.com/node-ffi/ffi/commit/730bd4a92f)] - **travis**: drop "iojs-" prefix from version names (Nathan Rajlich)
|
||||
* [[`0324f3be9c`](https://github.com/node-ffi/ffi/commit/0324f3be9c)] - test node v0.4 (Nathan Rajlich)
|
||||
* [[`f3e393bb55`](https://github.com/node-ffi/ffi/commit/f3e393bb55)] - remove node v0.8 from testing matrices (Nathan Rajlich)
|
||||
|
||||
2.0.0 / 2015-09-04
|
||||
==================
|
||||
|
||||
* update to "nan" v2, adds io.js v3 support
|
||||
* replace "dlfcn-win32" with "simple-dlfcn-win32" (uses MIT license rather than LGPL, #226, @mcnameej)
|
||||
* remove compiled binary file from libffi deps dir (#229, @fredericgermain)
|
||||
* fix dynamic linking when locale is not English (#224, @unbornchikken)
|
||||
* appveyor: test v0.8, io.js v2.5 and v3
|
||||
* travis: test v0.8, and iojs v2.5 and v3
|
||||
* package: add "license" field
|
||||
* package: add Gábor to LICENSE and "contributors"
|
||||
* package: move TooTallNate to "contributors" array
|
||||
|
||||
1.3.2 / 2015-07-31
|
||||
==================
|
||||
|
||||
* package: made the nan dependency stricter (#217, @feldgendler)
|
||||
* package: reflect the fact that the build fails for node <= 0.8 (#196, @addaleax)
|
||||
|
||||
1.3.1 / 2015-04-16
|
||||
==================
|
||||
|
||||
* test: use `assert.throws()` for Obj-C test cases
|
||||
* test: add case for #199 that covers callback and error propagation on non-libuv thread
|
||||
* HandleScope issue fix for iojs v1.7+
|
||||
* use Windows' native thread API, rather than libuv
|
||||
|
||||
1.3.0 / 2015-03-22
|
||||
==================
|
||||
|
||||
* add appveyor.yml file for Windows testing
|
||||
* add support for io.js >= v1.1.0 and node.js v0.12.x via nan
|
||||
* avoid VS build error LNK2005
|
||||
* package: allow any "debug" v2
|
||||
* package: update github URLs for new repo location
|
||||
* travis: don't test node v0.6, test v0.12
|
||||
* now using libuv's pthread impl on Windows, removed `pthreads-win32` dep
|
||||
* `dlfcn-win32` dep updated to fix process global symbols on Windows
|
||||
* README: add appveyor build badge
|
||||
* README: use SVG appveyor badge
|
||||
|
||||
1.2.7 / 2014-07-06
|
||||
==================
|
||||
|
||||
* test: add test case for race condition in #153
|
||||
* factorial: fix Windows build instructions
|
||||
* example: turn factorial readme to Markdown
|
||||
* example: add Windows libfactorial.dll compile command
|
||||
* package: remove "expect.js" dev dependency
|
||||
* test: remove final `expect.js` usage
|
||||
* jshintrc: enable "laxbreak"
|
||||
* travis: remove IRC notifications from Travis
|
||||
* test: properly re-add Mocha's uncaught listeners
|
||||
* test: add a try/catch test after the callback is GC'd
|
||||
* src: fix race condition when callback is invoked from thread pool (@nikmikov, #154)
|
||||
* change Node.js versions used on Travis CI for testing (@Mithgol, #151)
|
||||
* use SVG to display Travis CI build testing status (@Mithgol, #149)
|
||||
|
||||
1.2.6 / 2013-10-08
|
||||
==================
|
||||
|
||||
* just a minor documentation typo fix (Jason May, #126)
|
||||
* example: fix "factorial" example on Windows (#127)
|
||||
* package: add "keywords" section
|
||||
* callback: store a reference to the CIF struct on the ffi closure Buffer instance (#125)
|
||||
|
||||
1.2.5 / 2013-04-06
|
||||
==================
|
||||
|
||||
* type: make detecting "long" and "ulong" ffi_types work
|
||||
* travis: don't test node v0.7.x, test node v0.10.x
|
||||
|
||||
1.2.4 / 2013-02-18
|
||||
==================
|
||||
|
||||
* FreeBSD 32-bit support (Dave Osborne)
|
||||
* libffi: don't build libffi as a "thin" archive (CentOS 5 support, #110)
|
||||
|
||||
1.2.3 / 2012-12-20
|
||||
==================
|
||||
|
||||
* FreeBSD 64-bit support (Dave Osborne)
|
||||
|
||||
1.2.2 / 2012-12-15
|
||||
==================
|
||||
|
||||
* fix nasty bug in async FFI'd function on node v0.9.x
|
||||
|
||||
1.2.1 / 2012-12-15
|
||||
==================
|
||||
|
||||
* add node >= v0.9.4 support
|
||||
|
||||
1.2.0 / 2012-10-13
|
||||
==================
|
||||
|
||||
* type: full support for "ref-array" arguments and return types
|
||||
* type: add basic support for basic ref types without a `ffi_type` prop set
|
||||
* don't call the "ref()" function on passed in arguments
|
||||
* libffi: fix unused variable warnings
|
||||
* add `Function` "type" for functions/callbacks that accept/return C Functions
|
||||
* dynamic_library: use RTLD_LAZY by default
|
||||
* export all the RTLD_* symbols from the native binding
|
||||
* foreign_function: better error messages when a type's "set()" function throws
|
||||
* callback: make catching callbacks that throw JS exceptions work as expected
|
||||
* callback: more meaningful error message when a type's "set()" function throws
|
||||
* callback: fix pointer return values
|
||||
|
||||
1.1.3 / 2012-09-25
|
||||
==================
|
||||
|
||||
* callback: use `IsEmpty()` instead of an explicit NULL check
|
||||
* test: use "bindings" to load the bindings for the variadic tests
|
||||
* ffi: use HandleScope in WrapPointer() (fixes ffi calls in a tight loop, see #74)
|
||||
* test: fix typo in test name
|
||||
* libffi: disable the C4267 implicit conversion warnings on Windows
|
||||
* libffi: remove "as.bat" from the gyp file
|
||||
|
||||
1.1.2 / 2012-09-16
|
||||
==================
|
||||
|
||||
* callback: throw an Error if the callback function has been garbage collected
|
||||
* test: 100% tests passing on Windows!
|
||||
|
||||
1.1.1 / 2012-09-16
|
||||
==================
|
||||
|
||||
* libffi: define "FFI_MMAP_EXEC_WRIT" on OS X (#71)
|
||||
* added a new test case that calls a callback function directly (#72)
|
||||
|
||||
1.1.0 / 2012-09-11
|
||||
==================
|
||||
|
||||
* properly "gyp-ify" libffi
|
||||
- added "libffi.gyp"
|
||||
- no more "hacks" in binding.gyp
|
||||
- no need for MozillaBuild on Windows anymore!
|
||||
|
||||
1.0.7 / 2012-08-03
|
||||
==================
|
||||
|
||||
* export `FFI_FIRST_ABI`
|
||||
* export abi_enum values for ARM processors (100% tests passing on Raspberry Pi!)
|
||||
|
||||
1.0.6 / 2012-07-22
|
||||
==================
|
||||
|
||||
* VariadicForeignFunction: apply a tweak to prevent false positives on ffi id's
|
||||
|
||||
1.0.5 / 2012-07-22
|
||||
==================
|
||||
|
||||
* DynamicLibrary: use 'string' instead of "char *"
|
||||
* DynamicLibrary: set the "name" property of the returned Buffer when get() is called
|
||||
* test: add some "DynamicLibrary" tests
|
||||
* VariadicForeignFunction: quick hack fix for the key caching name collision
|
||||
|
||||
1.0.4 / 2012-07-12
|
||||
==================
|
||||
|
||||
* exit early when not compiling from within a MozillaBuild window on Windows
|
||||
|
||||
1.0.3 / 2012-07-9
|
||||
=================
|
||||
|
||||
* refactor the README
|
||||
* fix deprecation warning for using the `Utf8String` type (renamed to `CString`)
|
||||
* remove circular `require()` calls (Justin Freitag)
|
||||
* use the node-gyp `--directory` flag for `npm test` command
|
||||
|
||||
1.0.2 / 2012-06-20
|
||||
==================
|
||||
|
||||
* Fix Windows build (32-bit at least). Fixes #51.
|
||||
|
||||
1.0.1 / 2012-06-13
|
||||
==================
|
||||
|
||||
* Refactor the variadic function generator to allow for an overridden "returnType"
|
||||
|
||||
1.0.0 / 2012-05-31
|
||||
==================
|
||||
|
||||
* Add a `VariadicForeignFunction` function for vararg C functions
|
||||
* Various cleanup
|
||||
* Don't export the native bindings (`ffi.Bindings` is gone)
|
||||
* Use the `ref()` function when available, then fall back to `ref.alloc()`
|
||||
* Add a few more tests
|
||||
|
||||
1.0.0-alpha1 / 2012-05-29
|
||||
=========================
|
||||
|
||||
* Readme improvements
|
||||
* Node >= v0.7.9 compatability
|
||||
|
||||
1.0.0-alpha / 2012-05-25
|
||||
========================
|
||||
|
||||
* Alpha release of v1.0.0
|
||||
|
||||
< 1.0.0
|
||||
=======
|
||||
|
||||
* Prehistoric: see `git log`
|
|
@ -1,21 +0,0 @@
|
|||
Copyright (c) 2009-2011 Richard "Rick" W. Branson
|
||||
Copyright (c) 2012-2014 Nathan Rajlich, Richard "Rick" W. Branson
|
||||
Copyright (c) 2015 Nathan Rajlich, Richard "Rick" W. Branson, Gabor Mezo
|
||||
|
||||
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.
|
|
@ -1,108 +0,0 @@
|
|||
node-ffi
|
||||
========
|
||||
### Node.js Foreign Function Interface
|
||||
[](https://travis-ci.org/node-ffi/node-ffi)
|
||||
[](https://ci.appveyor.com/project/TooTallNate/node-ffi)
|
||||
|
||||
`node-ffi` is a Node.js addon for loading and calling dynamic libraries using
|
||||
pure JavaScript. It can be used to create bindings to native libraries without
|
||||
writing any C++ code.
|
||||
|
||||
It also simplifies the augmentation of node.js with C code as it takes care of
|
||||
handling the translation of types across JavaScript and C, which can add reams
|
||||
of boilerplate code to your otherwise simple C. See the `example/factorial`
|
||||
for an example of this use case.
|
||||
|
||||
**WARNING**: node-ffi assumes you know what you're doing. You can pretty easily
|
||||
create situations where you will segfault the interpreter and unless you've got
|
||||
C debugger skills, you probably won't know what's going on.
|
||||
|
||||
Example
|
||||
-------
|
||||
|
||||
``` js
|
||||
var ffi = require('ffi');
|
||||
|
||||
var libm = ffi.Library('libm', {
|
||||
'ceil': [ 'double', [ 'double' ] ]
|
||||
});
|
||||
libm.ceil(1.5); // 2
|
||||
|
||||
// You can also access just functions in the current process by passing a null
|
||||
var current = ffi.Library(null, {
|
||||
'atoi': [ 'int', [ 'string' ] ]
|
||||
});
|
||||
current.atoi('1234'); // 1234
|
||||
```
|
||||
|
||||
For a more detailed introduction, see the [node-ffi tutorial page][tutorial].
|
||||
|
||||
Requirements
|
||||
------------
|
||||
|
||||
* Linux, OS X, Windows, or Solaris.
|
||||
* `libffi` comes bundled with node-ffi; it does *not* need to be installed on your system.
|
||||
* The current version is tested to run on node v0.6, v0.8, v0.9 and v0.10.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Make sure you've installed all the [necessary build
|
||||
tools](https://github.com/TooTallNate/node-gyp#installation) for your platform,
|
||||
then invoke:
|
||||
|
||||
``` bash
|
||||
$ npm install ffi
|
||||
```
|
||||
|
||||
Source Install / Manual Compilation
|
||||
-----------------------------------
|
||||
|
||||
To compile from source it's easiest to use
|
||||
[`node-gyp`](https://github.com/TooTallNate/node-gyp):
|
||||
|
||||
``` bash
|
||||
$ npm install -g node-gyp
|
||||
```
|
||||
|
||||
Now you can compile `node-ffi`:
|
||||
|
||||
``` bash
|
||||
$ git clone git://github.com/node-ffi/node-ffi.git
|
||||
$ cd node-ffi
|
||||
$ node-gyp rebuild
|
||||
```
|
||||
|
||||
Types
|
||||
-----
|
||||
|
||||
The types that you specify in function declarations correspond to ref's types
|
||||
system. So [see its docs][ref-types] for
|
||||
a reference if you are unfamiliar.
|
||||
|
||||
V8 and 64-bit Types
|
||||
-------------------
|
||||
|
||||
Internally, V8 stores integers that will fit into a 32-bit space in a 32-bit
|
||||
integer, and those that fall outside of this get put into double-precision
|
||||
floating point numbers. This is problematic because FP numbers are imprecise.
|
||||
To get around this, the methods in node-ffi that deal with 64-bit integers return
|
||||
strings and can accept strings as parameters.
|
||||
|
||||
Call Overhead
|
||||
-------------
|
||||
|
||||
There is non-trivial overhead associated with FFI calls. Comparing a hard-coded
|
||||
binding version of `strtoul()` to an FFI version of `strtoul()` shows that the
|
||||
native hard-coded binding is orders of magnitude faster. So don't just use the
|
||||
C version of a function just because it's faster. There's a significant cost in
|
||||
FFI calls, so make them worth it.
|
||||
|
||||
License
|
||||
-------
|
||||
|
||||
MIT License. See the `LICENSE` file.
|
||||
|
||||
[v1apichanges]: https://github.com/node-ffi/node-ffi/wiki/API-changes-from-v0.x-to-v1.x
|
||||
[tutorial]: https://github.com/node-ffi/node-ffi/wiki/Node-FFI-Tutorial
|
||||
[ref-types]: https://github.com/TooTallNate/ref#built-in-types
|
|
@ -1,8 +0,0 @@
|
|||
{
|
||||
"asi": true,
|
||||
"laxcomma": true,
|
||||
"laxbreak": true,
|
||||
"node": true,
|
||||
"strict": false,
|
||||
"es5": true
|
||||
}
|
|
@ -1,19 +0,0 @@
|
|||
#IDE Support
|
||||
.idea
|
||||
|
||||
#Project
|
||||
.lock-wscript
|
||||
*.dylib
|
||||
*.so
|
||||
*.o
|
||||
*.lo
|
||||
*.Makefile
|
||||
*.target.gyp.mk
|
||||
build
|
||||
Release
|
||||
Debug
|
||||
node_modules
|
||||
Makefile.gyp
|
||||
gyp-*-tool
|
||||
.dirstamp
|
||||
npm-debug.log
|
|
@ -1,36 +0,0 @@
|
|||
os:
|
||||
- linux
|
||||
- osx
|
||||
sudo: false
|
||||
language: cpp
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
- g++-4.8
|
||||
env:
|
||||
matrix:
|
||||
- TRAVIS_NODE_VERSION="0.10"
|
||||
- TRAVIS_NODE_VERSION="0.12"
|
||||
- TRAVIS_NODE_VERSION="2"
|
||||
- TRAVIS_NODE_VERSION="4.1"
|
||||
- TRAVIS_NODE_VERSION="5.1"
|
||||
- TRAVIS_NODE_VERSION="6"
|
||||
|
||||
install:
|
||||
- rm -rf ~/.nvm && git clone https://github.com/creationix/nvm.git ~/.nvm && (cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`) && source ~/.nvm/nvm.sh && nvm install $TRAVIS_NODE_VERSION
|
||||
- if [[ $TRAVIS_OS_NAME == "linux" ]]; then export CXX=g++-4.8; fi
|
||||
- $CXX --version
|
||||
- PATH="`npm bin`:`npm bin -g`:$PATH"
|
||||
# Node 0.8 comes with a too obsolete npm
|
||||
- if [[ "`node --version`" =~ ^v0\.8\. ]]; then npm install -g npm@1.4.28 ; fi
|
||||
# Install dependencies and build
|
||||
- npm install
|
||||
|
||||
script:
|
||||
# Output useful info for debugging
|
||||
- node --version
|
||||
- npm --version
|
||||
# Run tests
|
||||
- npm test
|
|
@ -1,49 +0,0 @@
|
|||
# http://www.appveyor.com/docs/appveyor-yml
|
||||
|
||||
# Test against these versions of Node.js.
|
||||
environment:
|
||||
# Visual Studio Version
|
||||
MSVS_VERSION: 2013
|
||||
# Test against these versions of Node.js and io.js
|
||||
matrix:
|
||||
# node.js
|
||||
- nodejs_version: "0.10"
|
||||
- nodejs_version: "0.12"
|
||||
# io.js
|
||||
- nodejs_version: "2"
|
||||
- nodejs_version: "3.2"
|
||||
- nodejs_version: "4.1"
|
||||
- nodejs_version: "5.1"
|
||||
- nodejs_version: "6"
|
||||
|
||||
platform:
|
||||
- x86
|
||||
- x64
|
||||
|
||||
# Install scripts. (runs after repo cloning)
|
||||
install:
|
||||
# Get the latest stable version of Node 0.STABLE.latest
|
||||
- ps: if($env:nodejs_version -eq "0.8") {Install-Product node $env:nodejs_version}
|
||||
- ps: if($env:nodejs_version -ne "0.8") {Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version)}
|
||||
# Node 0.8 comes with a too obsolete npm
|
||||
- IF %nodejs_version% == 0.8 (npm install -g npm@1.4.28)
|
||||
# Install latest NPM only for node.js versions until built in node-gyp adds io.js support
|
||||
# Update is required for node.js 0.8 because built in npm(node-gyp) does not know VS2013
|
||||
- IF %nodejs_version% LSS 1 (npm install -g npm@2)
|
||||
- IF %nodejs_version% LSS 1 set PATH=%APPDATA%\npm;%PATH%
|
||||
# Typical npm stuff.
|
||||
- npm install --msvs_version=%MSVS_VERSION%
|
||||
|
||||
# Post-install test scripts.
|
||||
test_script:
|
||||
# Output useful info for debugging.
|
||||
- node --version
|
||||
- npm --version
|
||||
# run tests
|
||||
- npm test
|
||||
|
||||
# Don't actually build.
|
||||
build: off
|
||||
|
||||
# Set build version format here instead of in the admin panel.
|
||||
version: "{build}"
|
|
@ -1,36 +0,0 @@
|
|||
{
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'ffi_bindings',
|
||||
'sources': [
|
||||
'src/ffi.cc'
|
||||
, 'src/callback_info.cc'
|
||||
, 'src/threaded_callback_invokation.cc'
|
||||
],
|
||||
'include_dirs': [
|
||||
'<!(node -e "require(\'nan\')")'
|
||||
],
|
||||
'dependencies': [
|
||||
'deps/libffi/libffi.gyp:ffi'
|
||||
],
|
||||
'conditions': [
|
||||
['OS=="win"', {
|
||||
'sources': [
|
||||
'src/win32-dlfcn.cc'
|
||||
],
|
||||
}],
|
||||
['OS=="mac"', {
|
||||
'xcode_settings': {
|
||||
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES',
|
||||
'OTHER_CFLAGS': [
|
||||
'-ObjC++'
|
||||
]
|
||||
},
|
||||
'libraries': [
|
||||
'-lobjc'
|
||||
],
|
||||
}]
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,339 +0,0 @@
|
|||
# We borrow heavily from the kernel build setup, though we are simpler since
|
||||
# we don't have Kconfig tweaking settings on us.
|
||||
|
||||
# The implicit make rules have it looking for RCS files, among other things.
|
||||
# We instead explicitly write all the rules we care about.
|
||||
# It's even quicker (saves ~200ms) to pass -r on the command line.
|
||||
MAKEFLAGS=-r
|
||||
|
||||
# The source directory tree.
|
||||
srcdir := ..
|
||||
abs_srcdir := $(abspath $(srcdir))
|
||||
|
||||
# The name of the builddir.
|
||||
builddir_name ?= .
|
||||
|
||||
# The V=1 flag on command line makes us verbosely print command lines.
|
||||
ifdef V
|
||||
quiet=
|
||||
else
|
||||
quiet=quiet_
|
||||
endif
|
||||
|
||||
# Specify BUILDTYPE=Release on the command line for a release build.
|
||||
BUILDTYPE ?= Release
|
||||
|
||||
# Directory all our build output goes into.
|
||||
# Note that this must be two directories beneath src/ for unit tests to pass,
|
||||
# as they reach into the src/ directory for data with relative paths.
|
||||
builddir ?= $(builddir_name)/$(BUILDTYPE)
|
||||
abs_builddir := $(abspath $(builddir))
|
||||
depsdir := $(builddir)/.deps
|
||||
|
||||
# Object output directory.
|
||||
obj := $(builddir)/obj
|
||||
abs_obj := $(abspath $(obj))
|
||||
|
||||
# We build up a list of every single one of the targets so we can slurp in the
|
||||
# generated dependency rule Makefiles in one pass.
|
||||
all_deps :=
|
||||
|
||||
|
||||
|
||||
CC.target ?= $(CC)
|
||||
CFLAGS.target ?= $(CPPFLAGS) $(CFLAGS)
|
||||
CXX.target ?= $(CXX)
|
||||
CXXFLAGS.target ?= $(CPPFLAGS) $(CXXFLAGS)
|
||||
LINK.target ?= $(LINK)
|
||||
LDFLAGS.target ?= $(LDFLAGS)
|
||||
AR.target ?= $(AR)
|
||||
|
||||
# C++ apps need to be linked with g++.
|
||||
LINK ?= $(CXX.target)
|
||||
|
||||
# TODO(evan): move all cross-compilation logic to gyp-time so we don't need
|
||||
# to replicate this environment fallback in make as well.
|
||||
CC.host ?= gcc
|
||||
CFLAGS.host ?= $(CPPFLAGS_host) $(CFLAGS_host)
|
||||
CXX.host ?= g++
|
||||
CXXFLAGS.host ?= $(CPPFLAGS_host) $(CXXFLAGS_host)
|
||||
LINK.host ?= $(CXX.host)
|
||||
LDFLAGS.host ?=
|
||||
AR.host ?= ar
|
||||
|
||||
# Define a dir function that can handle spaces.
|
||||
# http://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions
|
||||
# "leading spaces cannot appear in the text of the first argument as written.
|
||||
# These characters can be put into the argument value by variable substitution."
|
||||
empty :=
|
||||
space := $(empty) $(empty)
|
||||
|
||||
# http://stackoverflow.com/questions/1189781/using-make-dir-or-notdir-on-a-path-with-spaces
|
||||
replace_spaces = $(subst $(space),?,$1)
|
||||
unreplace_spaces = $(subst ?,$(space),$1)
|
||||
dirx = $(call unreplace_spaces,$(dir $(call replace_spaces,$1)))
|
||||
|
||||
# Flags to make gcc output dependency info. Note that you need to be
|
||||
# careful here to use the flags that ccache and distcc can understand.
|
||||
# We write to a dep file on the side first and then rename at the end
|
||||
# so we can't end up with a broken dep file.
|
||||
depfile = $(depsdir)/$(call replace_spaces,$@).d
|
||||
DEPFLAGS = -MMD -MF $(depfile).raw
|
||||
|
||||
# We have to fixup the deps output in a few ways.
|
||||
# (1) the file output should mention the proper .o file.
|
||||
# ccache or distcc lose the path to the target, so we convert a rule of
|
||||
# the form:
|
||||
# foobar.o: DEP1 DEP2
|
||||
# into
|
||||
# path/to/foobar.o: DEP1 DEP2
|
||||
# (2) we want missing files not to cause us to fail to build.
|
||||
# We want to rewrite
|
||||
# foobar.o: DEP1 DEP2 \
|
||||
# DEP3
|
||||
# to
|
||||
# DEP1:
|
||||
# DEP2:
|
||||
# DEP3:
|
||||
# so if the files are missing, they're just considered phony rules.
|
||||
# We have to do some pretty insane escaping to get those backslashes
|
||||
# and dollar signs past make, the shell, and sed at the same time.
|
||||
# Doesn't work with spaces, but that's fine: .d files have spaces in
|
||||
# their names replaced with other characters.
|
||||
define fixup_dep
|
||||
# The depfile may not exist if the input file didn't have any #includes.
|
||||
touch $(depfile).raw
|
||||
# Fixup path as in (1).
|
||||
sed -e "s|^$(notdir $@)|$@|" $(depfile).raw >> $(depfile)
|
||||
# Add extra rules as in (2).
|
||||
# We remove slashes and replace spaces with new lines;
|
||||
# remove blank lines;
|
||||
# delete the first line and append a colon to the remaining lines.
|
||||
sed -e 's|\\||' -e 'y| |\n|' $(depfile).raw |\
|
||||
grep -v '^$$' |\
|
||||
sed -e 1d -e 's|$$|:|' \
|
||||
>> $(depfile)
|
||||
rm $(depfile).raw
|
||||
endef
|
||||
|
||||
# Command definitions:
|
||||
# - cmd_foo is the actual command to run;
|
||||
# - quiet_cmd_foo is the brief-output summary of the command.
|
||||
|
||||
quiet_cmd_cc = CC($(TOOLSET)) $@
|
||||
cmd_cc = $(CC.$(TOOLSET)) $(GYP_CFLAGS) $(DEPFLAGS) $(CFLAGS.$(TOOLSET)) -c -o $@ $<
|
||||
|
||||
quiet_cmd_cxx = CXX($(TOOLSET)) $@
|
||||
cmd_cxx = $(CXX.$(TOOLSET)) $(GYP_CXXFLAGS) $(DEPFLAGS) $(CXXFLAGS.$(TOOLSET)) -c -o $@ $<
|
||||
|
||||
quiet_cmd_touch = TOUCH $@
|
||||
cmd_touch = touch $@
|
||||
|
||||
quiet_cmd_copy = COPY $@
|
||||
# send stderr to /dev/null to ignore messages when linking directories.
|
||||
cmd_copy = rm -rf "$@" && cp -af "$<" "$@"
|
||||
|
||||
quiet_cmd_alink = AR($(TOOLSET)) $@
|
||||
cmd_alink = rm -f $@ && $(AR.$(TOOLSET)) crs $@ $(filter %.o,$^)
|
||||
|
||||
quiet_cmd_alink_thin = AR($(TOOLSET)) $@
|
||||
cmd_alink_thin = rm -f $@ && $(AR.$(TOOLSET)) crsT $@ $(filter %.o,$^)
|
||||
|
||||
# Due to circular dependencies between libraries :(, we wrap the
|
||||
# special "figure out circular dependencies" flags around the entire
|
||||
# input list during linking.
|
||||
quiet_cmd_link = LINK($(TOOLSET)) $@
|
||||
cmd_link = $(LINK.$(TOOLSET)) $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -o $@ -Wl,--start-group $(LD_INPUTS) -Wl,--end-group $(LIBS)
|
||||
|
||||
# We support two kinds of shared objects (.so):
|
||||
# 1) shared_library, which is just bundling together many dependent libraries
|
||||
# into a link line.
|
||||
# 2) loadable_module, which is generating a module intended for dlopen().
|
||||
#
|
||||
# They differ only slightly:
|
||||
# In the former case, we want to package all dependent code into the .so.
|
||||
# In the latter case, we want to package just the API exposed by the
|
||||
# outermost module.
|
||||
# This means shared_library uses --whole-archive, while loadable_module doesn't.
|
||||
# (Note that --whole-archive is incompatible with the --start-group used in
|
||||
# normal linking.)
|
||||
|
||||
# Other shared-object link notes:
|
||||
# - Set SONAME to the library filename so our binaries don't reference
|
||||
# the local, absolute paths used on the link command-line.
|
||||
quiet_cmd_solink = SOLINK($(TOOLSET)) $@
|
||||
cmd_solink = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--whole-archive $(LD_INPUTS) -Wl,--no-whole-archive $(LIBS)
|
||||
|
||||
quiet_cmd_solink_module = SOLINK_MODULE($(TOOLSET)) $@
|
||||
cmd_solink_module = $(LINK.$(TOOLSET)) -shared $(GYP_LDFLAGS) $(LDFLAGS.$(TOOLSET)) -Wl,-soname=$(@F) -o $@ -Wl,--start-group $(filter-out FORCE_DO_CMD, $^) -Wl,--end-group $(LIBS)
|
||||
|
||||
|
||||
# Define an escape_quotes function to escape single quotes.
|
||||
# This allows us to handle quotes properly as long as we always use
|
||||
# use single quotes and escape_quotes.
|
||||
escape_quotes = $(subst ','\'',$(1))
|
||||
# This comment is here just to include a ' to unconfuse syntax highlighting.
|
||||
# Define an escape_vars function to escape '$' variable syntax.
|
||||
# This allows us to read/write command lines with shell variables (e.g.
|
||||
# $LD_LIBRARY_PATH), without triggering make substitution.
|
||||
escape_vars = $(subst $$,$$$$,$(1))
|
||||
# Helper that expands to a shell command to echo a string exactly as it is in
|
||||
# make. This uses printf instead of echo because printf's behaviour with respect
|
||||
# to escape sequences is more portable than echo's across different shells
|
||||
# (e.g., dash, bash).
|
||||
exact_echo = printf '%s\n' '$(call escape_quotes,$(1))'
|
||||
|
||||
# Helper to compare the command we're about to run against the command
|
||||
# we logged the last time we ran the command. Produces an empty
|
||||
# string (false) when the commands match.
|
||||
# Tricky point: Make has no string-equality test function.
|
||||
# The kernel uses the following, but it seems like it would have false
|
||||
# positives, where one string reordered its arguments.
|
||||
# arg_check = $(strip $(filter-out $(cmd_$(1)), $(cmd_$@)) \
|
||||
# $(filter-out $(cmd_$@), $(cmd_$(1))))
|
||||
# We instead substitute each for the empty string into the other, and
|
||||
# say they're equal if both substitutions produce the empty string.
|
||||
# .d files contain ? instead of spaces, take that into account.
|
||||
command_changed = $(or $(subst $(cmd_$(1)),,$(cmd_$(call replace_spaces,$@))),\
|
||||
$(subst $(cmd_$(call replace_spaces,$@)),,$(cmd_$(1))))
|
||||
|
||||
# Helper that is non-empty when a prerequisite changes.
|
||||
# Normally make does this implicitly, but we force rules to always run
|
||||
# so we can check their command lines.
|
||||
# $? -- new prerequisites
|
||||
# $| -- order-only dependencies
|
||||
prereq_changed = $(filter-out FORCE_DO_CMD,$(filter-out $|,$?))
|
||||
|
||||
# Helper that executes all postbuilds until one fails.
|
||||
define do_postbuilds
|
||||
@E=0;\
|
||||
for p in $(POSTBUILDS); do\
|
||||
eval $$p;\
|
||||
E=$$?;\
|
||||
if [ $$E -ne 0 ]; then\
|
||||
break;\
|
||||
fi;\
|
||||
done;\
|
||||
if [ $$E -ne 0 ]; then\
|
||||
rm -rf "$@";\
|
||||
exit $$E;\
|
||||
fi
|
||||
endef
|
||||
|
||||
# do_cmd: run a command via the above cmd_foo names, if necessary.
|
||||
# Should always run for a given target to handle command-line changes.
|
||||
# Second argument, if non-zero, makes it do asm/C/C++ dependency munging.
|
||||
# Third argument, if non-zero, makes it do POSTBUILDS processing.
|
||||
# Note: We intentionally do NOT call dirx for depfile, since it contains ? for
|
||||
# spaces already and dirx strips the ? characters.
|
||||
define do_cmd
|
||||
$(if $(or $(command_changed),$(prereq_changed)),
|
||||
@$(call exact_echo, $($(quiet)cmd_$(1)))
|
||||
@mkdir -p "$(call dirx,$@)" "$(dir $(depfile))"
|
||||
$(if $(findstring flock,$(word 1,$(cmd_$1))),
|
||||
@$(cmd_$(1))
|
||||
@echo " $(quiet_cmd_$(1)): Finished",
|
||||
@$(cmd_$(1))
|
||||
)
|
||||
@$(call exact_echo,$(call escape_vars,cmd_$(call replace_spaces,$@) := $(cmd_$(1)))) > $(depfile)
|
||||
@$(if $(2),$(fixup_dep))
|
||||
$(if $(and $(3), $(POSTBUILDS)),
|
||||
$(call do_postbuilds)
|
||||
)
|
||||
)
|
||||
endef
|
||||
|
||||
# Declare the "all" target first so it is the default,
|
||||
# even though we don't have the deps yet.
|
||||
.PHONY: all
|
||||
all:
|
||||
|
||||
# make looks for ways to re-generate included makefiles, but in our case, we
|
||||
# don't have a direct way. Explicitly telling make that it has nothing to do
|
||||
# for them makes it go faster.
|
||||
%.d: ;
|
||||
|
||||
# Use FORCE_DO_CMD to force a target to run. Should be coupled with
|
||||
# do_cmd.
|
||||
.PHONY: FORCE_DO_CMD
|
||||
FORCE_DO_CMD:
|
||||
|
||||
TOOLSET := target
|
||||
# Suffix rules, putting all outputs into $(obj).
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.c FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cc FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cpp FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.cxx FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.S FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(srcdir)/%.s FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
|
||||
# Try building from generated source, too.
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.c FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cc FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cpp FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.cxx FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.S FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj).$(TOOLSET)/%.s FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.c FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.cc FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.cpp FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.cxx FORCE_DO_CMD
|
||||
@$(call do_cmd,cxx,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.S FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
$(obj).$(TOOLSET)/%.o: $(obj)/%.s FORCE_DO_CMD
|
||||
@$(call do_cmd,cc,1)
|
||||
|
||||
|
||||
ifeq ($(strip $(foreach prefix,$(NO_LOAD),\
|
||||
$(findstring $(join ^,$(prefix)),\
|
||||
$(join ^,deps/libffi/closure-test.target.mk)))),)
|
||||
include deps/libffi/closure-test.target.mk
|
||||
endif
|
||||
ifeq ($(strip $(foreach prefix,$(NO_LOAD),\
|
||||
$(findstring $(join ^,$(prefix)),\
|
||||
$(join ^,deps/libffi/ffi.target.mk)))),)
|
||||
include deps/libffi/ffi.target.mk
|
||||
endif
|
||||
ifeq ($(strip $(foreach prefix,$(NO_LOAD),\
|
||||
$(findstring $(join ^,$(prefix)),\
|
||||
$(join ^,deps/libffi/test.target.mk)))),)
|
||||
include deps/libffi/test.target.mk
|
||||
endif
|
||||
ifeq ($(strip $(foreach prefix,$(NO_LOAD),\
|
||||
$(findstring $(join ^,$(prefix)),\
|
||||
$(join ^,ffi_bindings.target.mk)))),)
|
||||
include ffi_bindings.target.mk
|
||||
endif
|
||||
|
||||
quiet_cmd_regen_makefile = ACTION Regenerating $@
|
||||
cmd_regen_makefile = cd $(srcdir); /usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py -fmake --ignore-environment "--toplevel-dir=." -I/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi/build/config.gypi -I/usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi -I/home/viki/.node-gyp/0.10.25/common.gypi "--depth=." "-Goutput_dir=." "--generator-output=build" "-Dlibrary=shared_library" "-Dvisibility=default" "-Dnode_root_dir=/home/viki/.node-gyp/0.10.25" "-Dnode_gyp_dir=/usr/local/lib/node_modules/npm/node_modules/node-gyp" "-Dnode_lib_file=node.lib" "-Dmodule_root_dir=/home/viki/rust_cookbook/chapter8/code/node-to-rust/node_modules/ffi" binding.gyp
|
||||
Makefile: $(srcdir)/deps/libffi/libffi.gyp $(srcdir)/../../../../../../.node-gyp/0.10.25/common.gypi $(srcdir)/build/config.gypi $(srcdir)/binding.gyp $(srcdir)/../../../../../../../../usr/local/lib/node_modules/npm/node_modules/node-gyp/addon.gypi
|
||||
$(call do_cmd,regen_makefile)
|
||||
|
||||
# "all" is a concatenation of the "all" targets from all the included
|
||||
# sub-makefiles. This is just here to clarify.
|
||||
all:
|
||||
|
||||
# Add in dependency-tracking rules. $(all_deps) is the list of every single
|
||||
# target in our tree. Only consider the ones with .d (dependency) info:
|
||||
d_files := $(wildcard $(foreach f,$(all_deps),$(depsdir)/$(f).d))
|
||||
ifneq ($(d_files),)
|
||||
include $(d_files)
|
||||
endif
|
1
Chapter08/node-to-rust/node_modules/ffi/build/Release/.deps/Release/ffi_bindings.node.d
wygenerowano
vendored
1
Chapter08/node-to-rust/node_modules/ffi/build/Release/.deps/Release/ffi_bindings.node.d
wygenerowano
vendored
|
@ -1 +0,0 @@
|
|||
cmd_Release/ffi_bindings.node := rm -rf "Release/ffi_bindings.node" && cp -af "Release/obj.target/ffi_bindings.node" "Release/ffi_bindings.node"
|
1
Chapter08/node-to-rust/node_modules/ffi/build/Release/.deps/Release/libffi.a.d
wygenerowano
vendored
1
Chapter08/node-to-rust/node_modules/ffi/build/Release/.deps/Release/libffi.a.d
wygenerowano
vendored
|
@ -1 +0,0 @@
|
|||
cmd_Release/libffi.a := rm -rf "Release/libffi.a" && cp -af "Release/obj.target/deps/libffi/libffi.a" "Release/libffi.a"
|
|
@ -1 +0,0 @@
|
|||
cmd_Release/obj.target/deps/libffi/libffi.a := rm -f Release/obj.target/deps/libffi/libffi.a && ar crs Release/obj.target/deps/libffi/libffi.a Release/obj.target/ffi/deps/libffi/src/prep_cif.o Release/obj.target/ffi/deps/libffi/src/types.o Release/obj.target/ffi/deps/libffi/src/raw_api.o Release/obj.target/ffi/deps/libffi/src/java_raw_api.o Release/obj.target/ffi/deps/libffi/src/closures.o Release/obj.target/ffi/deps/libffi/src/x86/ffi.o Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o Release/obj.target/ffi/deps/libffi/src/x86/unix64.o Release/obj.target/ffi/deps/libffi/src/x86/sysv.o
|
|
@ -1,13 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/closures.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/closures.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/closures.o ../deps/libffi/src/closures.c
|
||||
Release/obj.target/ffi/deps/libffi/src/closures.o: \
|
||||
../deps/libffi/src/closures.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h \
|
||||
../deps/libffi/src/dlmalloc.c
|
||||
../deps/libffi/src/closures.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
||||
../deps/libffi/src/dlmalloc.c:
|
|
@ -1,11 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/java_raw_api.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/java_raw_api.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/java_raw_api.o ../deps/libffi/src/java_raw_api.c
|
||||
Release/obj.target/ffi/deps/libffi/src/java_raw_api.o: \
|
||||
../deps/libffi/src/java_raw_api.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../deps/libffi/src/java_raw_api.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,11 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/prep_cif.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/prep_cif.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/prep_cif.o ../deps/libffi/src/prep_cif.c
|
||||
Release/obj.target/ffi/deps/libffi/src/prep_cif.o: \
|
||||
../deps/libffi/src/prep_cif.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../deps/libffi/src/prep_cif.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,11 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/raw_api.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/raw_api.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/raw_api.o ../deps/libffi/src/raw_api.c
|
||||
Release/obj.target/ffi/deps/libffi/src/raw_api.o: \
|
||||
../deps/libffi/src/raw_api.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../deps/libffi/src/raw_api.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,11 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/types.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/types.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/types.o ../deps/libffi/src/types.c
|
||||
Release/obj.target/ffi/deps/libffi/src/types.o: \
|
||||
../deps/libffi/src/types.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../deps/libffi/src/types.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,4 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/x86/ffi.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/x86/ffi.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/x86/ffi.o ../deps/libffi/src/x86/ffi.c
|
||||
Release/obj.target/ffi/deps/libffi/src/x86/ffi.o: \
|
||||
../deps/libffi/src/x86/ffi.c
|
||||
../deps/libffi/src/x86/ffi.c:
|
|
@ -1,11 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o ../deps/libffi/src/x86/ffi64.c
|
||||
Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o: \
|
||||
../deps/libffi/src/x86/ffi64.c ../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
../deps/libffi/include/ffi_common.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../deps/libffi/src/x86/ffi64.c:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
../deps/libffi/include/ffi_common.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,4 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/x86/sysv.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/x86/sysv.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/x86/sysv.o ../deps/libffi/src/x86/sysv.S
|
||||
Release/obj.target/ffi/deps/libffi/src/x86/sysv.o: \
|
||||
../deps/libffi/src/x86/sysv.S
|
||||
../deps/libffi/src/x86/sysv.S:
|
|
@ -1,10 +0,0 @@
|
|||
cmd_Release/obj.target/ffi/deps/libffi/src/x86/unix64.o := cc '-DNODE_GYP_MODULE_NAME=ffi' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DPIC' '-DFFI_BUILDING' '-DHAVE_CONFIG_H' '-DNDEBUG' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -MMD -MF ./Release/.deps/Release/obj.target/ffi/deps/libffi/src/x86/unix64.o.d.raw -c -o Release/obj.target/ffi/deps/libffi/src/x86/unix64.o ../deps/libffi/src/x86/unix64.S
|
||||
Release/obj.target/ffi/deps/libffi/src/x86/unix64.o: \
|
||||
../deps/libffi/src/x86/unix64.S \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h \
|
||||
../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h
|
||||
../deps/libffi/src/x86/unix64.S:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
|
@ -1 +0,0 @@
|
|||
cmd_Release/obj.target/ffi_bindings.node := g++ -shared -pthread -rdynamic -m64 -Wl,-soname=ffi_bindings.node -o Release/obj.target/ffi_bindings.node -Wl,--start-group Release/obj.target/ffi_bindings/src/ffi.o Release/obj.target/ffi_bindings/src/callback_info.o Release/obj.target/ffi_bindings/src/threaded_callback_invokation.o Release/obj.target/deps/libffi/libffi.a -Wl,--end-group
|
|
@ -1,53 +0,0 @@
|
|||
cmd_Release/obj.target/ffi_bindings/src/callback_info.o := g++ '-DNODE_GYP_MODULE_NAME=ffi_bindings' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../../nan -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/ffi_bindings/src/callback_info.o.d.raw -c -o Release/obj.target/ffi_bindings/src/callback_info.o ../src/callback_info.cc
|
||||
Release/obj.target/ffi_bindings/src/callback_info.o: \
|
||||
../src/callback_info.cc /home/viki/.node-gyp/0.10.25/src/node.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h ../src/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h ../../nan/nan.h \
|
||||
../../nan/nan_callbacks.h ../../nan/nan_callbacks_pre_12_inl.h \
|
||||
../../nan/nan_maybe_pre_43_inl.h ../../nan/nan_converters.h \
|
||||
../../nan/nan_converters_pre_43_inl.h ../../nan/nan_new.h \
|
||||
../../nan/nan_implementation_pre_12_inl.h \
|
||||
../../nan/nan_persistent_pre_12_inl.h ../../nan/nan_weak.h \
|
||||
../../nan/nan_object_wrap.h ../../nan/nan_private.h \
|
||||
../../nan/nan_typedarray_contents.h ../../nan/nan_json.h
|
||||
../src/callback_info.cc:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h:
|
||||
../src/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
../../nan/nan.h:
|
||||
../../nan/nan_callbacks.h:
|
||||
../../nan/nan_callbacks_pre_12_inl.h:
|
||||
../../nan/nan_maybe_pre_43_inl.h:
|
||||
../../nan/nan_converters.h:
|
||||
../../nan/nan_converters_pre_43_inl.h:
|
||||
../../nan/nan_new.h:
|
||||
../../nan/nan_implementation_pre_12_inl.h:
|
||||
../../nan/nan_persistent_pre_12_inl.h:
|
||||
../../nan/nan_weak.h:
|
||||
../../nan/nan_object_wrap.h:
|
||||
../../nan/nan_private.h:
|
||||
../../nan/nan_typedarray_contents.h:
|
||||
../../nan/nan_json.h:
|
|
@ -1,55 +0,0 @@
|
|||
cmd_Release/obj.target/ffi_bindings/src/ffi.o := g++ '-DNODE_GYP_MODULE_NAME=ffi_bindings' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../../nan -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/ffi_bindings/src/ffi.o.d.raw -c -o Release/obj.target/ffi_bindings/src/ffi.o ../src/ffi.cc
|
||||
Release/obj.target/ffi_bindings/src/ffi.o: ../src/ffi.cc \
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h ../src/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h ../../nan/nan.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h \
|
||||
../../nan/nan_callbacks.h ../../nan/nan_callbacks_pre_12_inl.h \
|
||||
../../nan/nan_maybe_pre_43_inl.h ../../nan/nan_converters.h \
|
||||
../../nan/nan_converters_pre_43_inl.h ../../nan/nan_new.h \
|
||||
../../nan/nan_implementation_pre_12_inl.h \
|
||||
../../nan/nan_persistent_pre_12_inl.h ../../nan/nan_weak.h \
|
||||
../../nan/nan_object_wrap.h ../../nan/nan_private.h \
|
||||
../../nan/nan_typedarray_contents.h ../../nan/nan_json.h \
|
||||
../deps/libffi/config/linux/x64/fficonfig.h
|
||||
../src/ffi.cc:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h:
|
||||
../src/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
../../nan/nan.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h:
|
||||
../../nan/nan_callbacks.h:
|
||||
../../nan/nan_callbacks_pre_12_inl.h:
|
||||
../../nan/nan_maybe_pre_43_inl.h:
|
||||
../../nan/nan_converters.h:
|
||||
../../nan/nan_converters_pre_43_inl.h:
|
||||
../../nan/nan_new.h:
|
||||
../../nan/nan_implementation_pre_12_inl.h:
|
||||
../../nan/nan_persistent_pre_12_inl.h:
|
||||
../../nan/nan_weak.h:
|
||||
../../nan/nan_object_wrap.h:
|
||||
../../nan/nan_private.h:
|
||||
../../nan/nan_typedarray_contents.h:
|
||||
../../nan/nan_json.h:
|
||||
../deps/libffi/config/linux/x64/fficonfig.h:
|
|
@ -1,53 +0,0 @@
|
|||
cmd_Release/obj.target/ffi_bindings/src/threaded_callback_invokation.o := g++ '-DNODE_GYP_MODULE_NAME=ffi_bindings' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DBUILDING_NODE_EXTENSION' -I/home/viki/.node-gyp/0.10.25/include/node -I/home/viki/.node-gyp/0.10.25/src -I/home/viki/.node-gyp/0.10.25/deps/uv/include -I/home/viki/.node-gyp/0.10.25/deps/v8/include -I../../nan -I../deps/libffi/include -I../deps/libffi/config/linux/x64 -fPIC -Wall -Wextra -Wno-unused-parameter -pthread -m64 -O2 -fno-strict-aliasing -fno-tree-vrp -fno-omit-frame-pointer -fno-rtti -fno-exceptions -MMD -MF ./Release/.deps/Release/obj.target/ffi_bindings/src/threaded_callback_invokation.o.d.raw -c -o Release/obj.target/ffi_bindings/src/threaded_callback_invokation.o ../src/threaded_callback_invokation.cc
|
||||
Release/obj.target/ffi_bindings/src/threaded_callback_invokation.o: \
|
||||
../src/threaded_callback_invokation.cc \
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h \
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h ../src/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffi.h \
|
||||
../deps/libffi/config/linux/x64/ffitarget.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h ../../nan/nan.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h \
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h ../../nan/nan_callbacks.h \
|
||||
../../nan/nan_callbacks_pre_12_inl.h ../../nan/nan_maybe_pre_43_inl.h \
|
||||
../../nan/nan_converters.h ../../nan/nan_converters_pre_43_inl.h \
|
||||
../../nan/nan_new.h ../../nan/nan_implementation_pre_12_inl.h \
|
||||
../../nan/nan_persistent_pre_12_inl.h ../../nan/nan_weak.h \
|
||||
../../nan/nan_object_wrap.h ../../nan/nan_private.h \
|
||||
../../nan/nan_typedarray_contents.h ../../nan/nan_json.h
|
||||
../src/threaded_callback_invokation.cc:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-unix.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/ngx-queue.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/uv/include/uv-private/uv-linux.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8.h:
|
||||
/home/viki/.node-gyp/0.10.25/deps/v8/include/v8stdint.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node.h:
|
||||
../src/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffi.h:
|
||||
../deps/libffi/config/linux/x64/ffitarget.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_object_wrap.h:
|
||||
../../nan/nan.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_version.h:
|
||||
/home/viki/.node-gyp/0.10.25/src/node_buffer.h:
|
||||
../../nan/nan_callbacks.h:
|
||||
../../nan/nan_callbacks_pre_12_inl.h:
|
||||
../../nan/nan_maybe_pre_43_inl.h:
|
||||
../../nan/nan_converters.h:
|
||||
../../nan/nan_converters_pre_43_inl.h:
|
||||
../../nan/nan_new.h:
|
||||
../../nan/nan_implementation_pre_12_inl.h:
|
||||
../../nan/nan_persistent_pre_12_inl.h:
|
||||
../../nan/nan_weak.h:
|
||||
../../nan/nan_object_wrap.h:
|
||||
../../nan/nan_private.h:
|
||||
../../nan/nan_typedarray_contents.h:
|
||||
../../nan/nan_json.h:
|
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/deps/libffi/libffi.a
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/deps/libffi/libffi.a
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/closures.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/closures.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/java_raw_api.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/java_raw_api.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/prep_cif.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/prep_cif.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/raw_api.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/raw_api.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/types.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/types.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/ffi.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/ffi.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/ffi64.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/sysv.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/sysv.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/unix64.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi/deps/libffi/src/x86/unix64.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings.node
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings.node
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings/src/callback_info.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings/src/callback_info.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings/src/ffi.o
wygenerowano
vendored
BIN
Chapter08/node-to-rust/node_modules/ffi/build/Release/obj.target/ffi_bindings/src/ffi.o
wygenerowano
vendored
Plik binarny nie jest wyświetlany.
Plik binarny nie jest wyświetlany.
Some files were not shown because too many files have changed in this diff Show More
Ładowanie…
Reference in New Issue