From 04e341936cff902f399ca59bd6b855b2d994470e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20O=E2=80=99Shannessy?= Date: Mon, 21 Jul 2014 16:18:12 -0700 Subject: [PATCH] Include Object.assign polyfill This isn't a good final solution but it makes React actually usable on its own. This also makes tests runnable, though only via jest (./node_modules/.bin/jest) --- jest/environment.js | 2 ++ src/browser/ui/React.js | 4 +++ src/vendor/polyfill/Object.es6.js | 53 +++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/vendor/polyfill/Object.es6.js diff --git a/jest/environment.js b/jest/environment.js index a5ca53b7a9..a24f9f9ac4 100644 --- a/jest/environment.js +++ b/jest/environment.js @@ -1 +1,3 @@ __DEV__ = true; + +require.requireActual('../src/vendor/polyfill/Object.es6.js'); diff --git a/src/browser/ui/React.js b/src/browser/ui/React.js index 75f4e27eff..e3a14d9c70 100644 --- a/src/browser/ui/React.js +++ b/src/browser/ui/React.js @@ -18,6 +18,10 @@ "use strict"; +// TODO: Move this elsewhere - it only exists in open source until a better +// solution is found. +require('Object.es6'); + var DOMPropertyOperations = require('DOMPropertyOperations'); var EventPluginUtils = require('EventPluginUtils'); var ReactChildren = require('ReactChildren'); diff --git a/src/vendor/polyfill/Object.es6.js b/src/vendor/polyfill/Object.es6.js new file mode 100644 index 0000000000..a5a6ac128a --- /dev/null +++ b/src/vendor/polyfill/Object.es6.js @@ -0,0 +1,53 @@ +/** + * Copyright 2014 Facebook, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @providesModule Object.es6 + * @polyfill + */ + +// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign + +if (!Object.assign) { + Object.assign = function(target, sources) { + if (target == null) { + throw new TypeError('Object.assign target cannot be null or undefined'); + } + var to = Object(target); + + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { + var nextSource = arguments[nextIndex]; + if (nextSource == null) { + throw new TypeError('Object.assign source cannot be null or undefined'); + } + + var from = Object(nextSource); + + // We don't currently support accessors nor proxies. Therefore this copy + // cannot throw. If we ever supported this then we must handle + // exceptions and side-effects. + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to; + }; +} +