TITANIUM_FUNCTION(File, write)
		{
			const auto js_context = this_object.get_context();

			if (arguments.size() < 1) {
				return js_context.CreateUndefined();
			}

			const auto _0 = arguments.at(0);

			const auto _1 = arguments.size() < 2 ? js_context.CreateBoolean(false) : arguments.at(1);
			TITANIUM_ASSERT(_1.IsBoolean());
			const auto append = static_cast<bool>(_1);

			if (_0.IsString()) {
				return js_context.CreateBoolean(write(static_cast<std::string>(arguments.at(0)), append));
			} else if (_0.IsObject()) {
				const auto js_object = static_cast<JSObject>(_0);
				const auto blob = js_object.GetPrivate<Titanium::Blob>();
				const auto file = js_object.GetPrivate<File>();
				if (blob != nullptr) {
					return js_context.CreateBoolean(write(blob, append));
				} else if (file != nullptr) {
					return js_context.CreateBoolean(write(file, append));
				}
			}
			return js_context.CreateNull();
		}
TITANIUM_PROPERTY_GETTER(Button, image)
{
    const auto ctx = get_context();
    if (imageAsBlob__ != nullptr) {
        return imageAsBlob__->get_object();
    } else if (!image__.empty()) {
        return ctx.CreateString(get_image());
    } else {
        return ctx.CreateNull();
    }
}
		TITANIUM_FUNCTION(File, getDirectoryListing)
		{
			const auto context = get_context();
			if (isFile() || !exists()) {
				return context.CreateNull();
			}
			auto listing = getDirectoryListing();
			std::vector<JSValue> result;
			for (size_t i = 0; i < listing.size(); i++) {
				result.push_back(context.CreateString(listing.at(i)));
			}
			return context.CreateArray(result);
		}
		std::vector<JSValue> Picker::getSelectedJSValues() 
		{
			const auto ctx = get_context();

			std::vector<JSValue> values;
			for (const auto c : columns__) {
				const auto column = std::dynamic_pointer_cast<TitaniumWindows::UI::PickerColumn>(c);
				const auto picker = column->getComponent();
				const auto item = picker->SelectedItem;
				if (item) {
					const auto value = TitaniumWindows::Utility::ConvertUTF8String(static_cast<TextBlock^>(item)->Text);
					values.push_back(ctx.CreateString(value));
				} else {
					values.push_back(ctx.CreateNull());
				}
			}
		TITANIUM_FUNCTION(File, open)
		{
			auto js_context = this_object.get_context();
			if (arguments.size() == 0) {
				return js_context.CreateUndefined();
			}
			const auto _0 = arguments.at(0);
			TITANIUM_ASSERT(_0.IsNumber());

			const auto result = open(Constants::to_MODE(static_cast<std::underlying_type<MODE>::type>(_0)));
			if (result != nullptr) {
				return result->get_object();
			} else {
				return js_context.CreateNull();
			}
		}
TITANIUM_FUNCTION(Properties, getString)
{
    ENSURE_STRING_AT_INDEX(property, 0);

    boost::optional<std::string> defaultValue = nullptr;
    if (arguments.size() > 1) {
        const auto _1 = arguments.at(1);
        if (_1.IsString()) {
            defaultValue = static_cast<std::string>(_1);
        }
    }

    const auto js_context = this_object.get_context();
    const auto object_ptr = GetStaticObject(js_context).GetPrivate<Properties>();

    const auto result = object_ptr->getString(property, defaultValue);
    if (result) {
        return js_context.CreateString(*result);
    }
    return js_context.CreateNull();
}
		TITANIUM_FUNCTION(File, append)
		{
			const auto js_context = this_object.get_context();

			if (arguments.size() == 0) {
				return js_context.CreateUndefined();
			}
			auto _0 = arguments.at(0);

			if (_0.IsString()) {
				return js_context.CreateBoolean(append(static_cast<std::string>(arguments.at(0))));
			} else if (_0.IsObject()) {
				const auto js_object = static_cast<JSObject>(_0);
				const auto blob = js_object.GetPrivate<Titanium::Blob>();
				const auto file = js_object.GetPrivate<File>();
				if (blob != nullptr) {
					return js_context.CreateBoolean(append(blob));
				} else if (file != nullptr) {
					return js_context.CreateBoolean(append(file));
				}
			}
			return js_context.CreateNull();
		}