// Everything below is located in the js-namespace
package js;

// Represents a JavaScript value.
// Contains exactly one or zero fields.
message Value {
    oneof type {
        sint32 integer = 1;
        double double = 2;
        string string = 3;
        bool boolean = 4;
        bool null = 5;
        Array array = 6;
        Object object = 7;
        // if none is set: undefined
    }
}

// Represents a JavaScript array.
// Contains zero to N values.
message Array {
    repeated Value values = 1;
}

// Represents a JavaScript object.
// Contains zero to N keys with associated values.
message Object {
    repeated Value keys = 1;
    repeated Value values = 2;
}
