"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