• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

hanazuki / node-jsonnet / 7171588674

11 Dec 2023 06:11PM UTC coverage: 91.013%. Remained the same
7171588674

push

github

web-flow
Merge pull request #275 from hanazuki/dependabot/npm_and_yarn/ts-node-10.9.2

build(deps-dev): bump ts-node from 10.9.1 to 10.9.2

476 of 523 relevant lines covered (91.01%)

194.13 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.92
/src/JsonValueConverter.cpp
1
// SPDX-License-Identifier: MIT
2
#include "JsonValueConverter.hpp"
3
#include <memory>
4
#include <utility>
5

6
namespace nodejsonnet {
7

8
  JsonValueConverter::JsonValueConverter(std::shared_ptr<JsonnetVm> vm): vm{std::move(vm)} {
164✔
9
  }
164✔
10

11
  Napi::Value JsonValueConverter::toNapiValue(
72✔
12
    Napi::Env const &env, JsonnetJsonValue const *json) const {
13
    if(vm->extractJsonNull(json)) {
72✔
14
      return env.Null();
4✔
15
    }
16
    if(auto const b = vm->extractJsonBool(json)) {
76✔
17
      return Napi::Boolean::New(env, *b);
8✔
18
    }
19
    if(auto const n = vm->extractJsonNumber(json)) {
92✔
20
      return Napi::Number::New(env, *n);
32✔
21
    }
22
    if(auto const s = vm->extractJsonString(json)) {
56✔
23
      return Napi::String::New(env, s->data(), s->size());
28✔
24
    }
25

26
    // NOTREACHED
27
    // Native extensions can only take primitives
28
    return env.Undefined();
×
29
  }
72✔
30

31
  JsonnetJsonValue *JsonValueConverter::toJsonnetJson(Napi::Value v) const {
104✔
32
    if(v.IsBoolean()) {
104✔
33
      return vm->makeJsonBool(v.As<Napi::Boolean>());
12✔
34
    }
35
    if(v.IsNumber()) {
92✔
36
      return vm->makeJsonNumber(v.As<Napi::Number>());
36✔
37
    }
38
    if(v.IsString()) {
56✔
39
      return vm->makeJsonString(v.As<Napi::String>());
20✔
40
    }
41
    if(v.IsDate()) {
36✔
42
      auto const toISOString = v.As<Napi::Object>().Get("toISOString").As<Napi::Function>();
4✔
43
      return vm->makeJsonString(toISOString.Call(v, {}).As<Napi::String>());
4✔
44
    }
4✔
45
    if(v.IsFunction() || v.IsSymbol()) {
32✔
46
      return vm->makeJsonNull();
12✔
47
    }
48
    if(v.IsArray()) {
20✔
49
      auto const array = v.As<Napi::Array>();
4✔
50
      auto const json = vm->makeJsonArray();
4✔
51
      for(size_t i = 0, len = array.Length(); i < len; ++i) {
12✔
52
        vm->appendJsonArray(json, toJsonnetJson(array[i]));
8✔
53
      }
8✔
54
      return json;
4✔
55
    }
4✔
56
    if(v.IsObject()) {
16✔
57
      auto const object = v.As<Napi::Object>();
12✔
58
      auto const json = vm->makeJsonObject();
12✔
59
      auto const props = object.GetPropertyNames();
12✔
60
      for(size_t i = 0, len = props.Length(); i < len; ++i) {
32✔
61
        auto const prop = props[i].ToString();
20✔
62
        if(object.HasOwnProperty(prop)) {
20✔
63
          vm->appendJsonObject(json, prop, toJsonnetJson(object.Get(prop)));
20✔
64
        }
20✔
65
      }
20✔
66
      return json;
12✔
67
    }
12✔
68
    return vm->makeJsonNull();
4✔
69
  }
104✔
70

71
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc