138 lines
7.0 KiB
JavaScript
138 lines
7.0 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /**
|
|
* Copyright (c) 2017-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
|
|
exports.createObject = createObject;
|
|
exports.createArray = createArray;
|
|
exports.createAbstractObject = createAbstractObject;
|
|
exports.createAbstractObjectFromFlowTypes = createAbstractObjectFromFlowTypes;
|
|
exports.createAbstractByType = createAbstractByType;
|
|
|
|
var _realm = require("../realm.js");
|
|
|
|
var _builder = require("../utils/builder.js");
|
|
|
|
var _builder2 = _interopRequireDefault(_builder);
|
|
|
|
var _singletons = require("../singletons.js");
|
|
|
|
var _index = require("../domains/index.js");
|
|
|
|
var _index2 = require("../values/index.js");
|
|
|
|
var _invariant = require("../invariant.js");
|
|
|
|
var _invariant2 = _interopRequireDefault(_invariant);
|
|
|
|
require("./utils.js");
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
function createObject(realm, shape, name) {
|
|
var obj = _singletons.Create.ObjectCreate(realm, realm.intrinsics.ObjectPrototype);
|
|
if (shape != null) {
|
|
// to get around Flow complaining that shape could be null
|
|
var shapeThatIsNotNull = shape;
|
|
Object.keys(shape).forEach(function (id) {
|
|
var value = shapeThatIsNotNull[id];
|
|
(0, _invariant2.default)(value instanceof _index2.Value, "creation of object failed due to object containing non-value properties");
|
|
obj.$Set(id, value, obj);
|
|
if (name !== null) {
|
|
value.intrinsicName = name + "." + id;
|
|
}
|
|
});
|
|
}
|
|
if (name !== null) {
|
|
obj.intrinsicName = name;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function createArray(realm, name) {
|
|
var obj = _singletons.Create.ArrayCreate(realm, 0, realm.intrinsics.ArrayPrototype);
|
|
if (name !== null) {
|
|
obj.intrinsicName = name;
|
|
}
|
|
return obj;
|
|
}
|
|
|
|
function _createAbstractArray(realm, name) {
|
|
var value = _index2.AbstractValue.createFromTemplate(realm, (0, _builder2.default)(name), _index2.ArrayValue, [], name);
|
|
value.intrinsicName = name;
|
|
var template = createArray(realm, name);
|
|
template.makePartial();
|
|
template.makeSimple();
|
|
value.values = new _index.ValuesDomain(new Set([template]));
|
|
realm.rebuildNestedProperties(value, name);
|
|
return value;
|
|
}
|
|
|
|
function createAbstractObject(realm, name, objectTypes, template) {
|
|
if (name === null) {
|
|
name = "unknown";
|
|
}
|
|
var value = _index2.AbstractValue.createFromTemplate(realm, (0, _builder2.default)(name), _index2.ObjectValue, [], name);
|
|
value.intrinsicName = name;
|
|
if (template === undefined) {
|
|
template = createObject(realm, objectTypes, name);
|
|
}
|
|
template.makePartial();
|
|
template.makeSimple();
|
|
value.values = new _index.ValuesDomain(new Set([template]));
|
|
realm.rebuildNestedProperties(value, name);
|
|
(0, _invariant2.default)(value instanceof _index2.AbstractObjectValue);
|
|
return value;
|
|
}
|
|
|
|
function createAbstractObjectFromFlowTypes(realm, name, objectTypes) {
|
|
if (typeof objectTypes === "string") {
|
|
(0, _invariant2.default)(objectTypes === "empty" || objectTypes === "object", "Expected an object or a string of \"empty\" or \"object\" for createAbstractObject() paramater \"objectTypes\"");
|
|
return createAbstractObject(realm, name, null);
|
|
}
|
|
if (objectTypes !== null) {
|
|
var propTypeObject = {};
|
|
var objTypes = objectTypes;
|
|
(0, _invariant2.default)(objTypes);
|
|
Object.keys(objTypes).forEach(function (key) {
|
|
var value = objTypes[key];
|
|
var propertyName = name !== null ? name + "." + key : key;
|
|
if (typeof value === "string") {
|
|
if (value === "array") {
|
|
propTypeObject[key] = _createAbstractArray(realm, propertyName);
|
|
} else if (value === "object") {
|
|
propTypeObject[key] = createAbstractObject(realm, propertyName, null);
|
|
} else {
|
|
propTypeObject[key] = createAbstractByType(realm, value, propertyName);
|
|
}
|
|
} else if ((typeof value === "undefined" ? "undefined" : _typeof(value)) === "object" && value !== null) {
|
|
propTypeObject[key] = createAbstractObject(realm, propertyName, value);
|
|
} else {
|
|
(0, _invariant2.default)(false, "Unknown propType value of \"" + value + "\" for \"" + key + "\"");
|
|
}
|
|
});
|
|
|
|
return createAbstractObject(realm, name, propTypeObject);
|
|
} else {
|
|
return createAbstractObject(realm, name, null);
|
|
}
|
|
}
|
|
|
|
function createAbstractByType(realm, typeNameString, name) {
|
|
var type = _index2.Value.getTypeFromName(typeNameString);
|
|
(0, _invariant2.default)(type !== undefined, "createAbstractByType() cannot be undefined");
|
|
var value = _index2.AbstractValue.createFromTemplate(realm, (0, _builder2.default)(name), type, [], name);
|
|
value.intrinsicName = name;
|
|
return value;
|
|
}
|
|
//# sourceMappingURL=abstractObjectFactories.js.map
|