15 SassTypes::Value* Factory::create(Sass_Value* v) {
16 switch (sass_value_get_tag(v)) {
27 return &Boolean::get_singleton(sass_boolean_get_value(v));
36 return &Null::get_singleton();
42 const char *msg = "Unknown type encountered.";
43 Nan::ThrowTypeError(msg);
44 return new Error(sass_make_error(msg));
48 NAN_MODULE_INIT(Factory::initExports) {
49 Nan::HandleScope scope;
50 v8::Local<v8::Object> types = Nan::New<v8::Object>();
52 Nan::Set(types, Nan::New("Number").ToLocalChecked(), Number::get_constructor());
53 Nan::Set(types, Nan::New("String").ToLocalChecked(), String::get_constructor());
54 Nan::Set(types, Nan::New("Color").ToLocalChecked(), Color::get_constructor());
55 Nan::Set(types, Nan::New("Boolean").ToLocalChecked(), Boolean::get_constructor());
56 Nan::Set(types, Nan::New("List").ToLocalChecked(), List::get_constructor());
57 Nan::Set(types, Nan::New("Map").ToLocalChecked(), Map::get_constructor());
58 Nan::Set(types, Nan::New("Null").ToLocalChecked(), Null::get_constructor());
59 Nan::Set(types, Nan::New("Error").ToLocalChecked(), Error::get_constructor());
60 Nan::Set(target, Nan::New<v8::String>("types").ToLocalChecked(), types);
63 Value* Factory::unwrap(v8::Local<v8::Value> obj) {
64 // Todo: non-SassValue objects could easily fall under that condition, need to be more specific.
65 if (!obj->IsObject() || obj.As<v8::Object>()->InternalFieldCount() != 1) {
69 return static_cast<Value*>(Nan::GetInternalFieldPointer(obj.As<v8::Object>(), 0));