mirror of
https://github.com/actions/setup-python.git
synced 2024-12-30 19:10:34 +01:00
1816 lines
No EOL
55 KiB
JavaScript
1816 lines
No EOL
55 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.default = void 0;
|
|
|
|
function _template() {
|
|
const data = _interopRequireDefault(require("@babel/template"));
|
|
|
|
_template = function () {
|
|
return data;
|
|
};
|
|
|
|
return data;
|
|
}
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
|
|
const helpers = Object.create(null);
|
|
var _default = helpers;
|
|
exports.default = _default;
|
|
|
|
const helper = minVersion => tpl => ({
|
|
minVersion,
|
|
ast: () => _template().default.program.ast(tpl)
|
|
});
|
|
|
|
helpers.typeof = helper("7.0.0-beta.0")`
|
|
export default function _typeof(obj) {
|
|
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
|
|
_typeof = function (obj) { return typeof obj; };
|
|
} else {
|
|
_typeof = function (obj) {
|
|
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype
|
|
? "symbol"
|
|
: typeof obj;
|
|
};
|
|
}
|
|
|
|
return _typeof(obj);
|
|
}
|
|
`;
|
|
helpers.jsx = helper("7.0.0-beta.0")`
|
|
var REACT_ELEMENT_TYPE;
|
|
|
|
export default function _createRawReactElement(type, props, key, children) {
|
|
if (!REACT_ELEMENT_TYPE) {
|
|
REACT_ELEMENT_TYPE = (
|
|
typeof Symbol === "function" && Symbol.for && Symbol.for("react.element")
|
|
) || 0xeac7;
|
|
}
|
|
|
|
var defaultProps = type && type.defaultProps;
|
|
var childrenLength = arguments.length - 3;
|
|
|
|
if (!props && childrenLength !== 0) {
|
|
// If we're going to assign props.children, we create a new object now
|
|
// to avoid mutating defaultProps.
|
|
props = {
|
|
children: void 0,
|
|
};
|
|
}
|
|
if (props && defaultProps) {
|
|
for (var propName in defaultProps) {
|
|
if (props[propName] === void 0) {
|
|
props[propName] = defaultProps[propName];
|
|
}
|
|
}
|
|
} else if (!props) {
|
|
props = defaultProps || {};
|
|
}
|
|
|
|
if (childrenLength === 1) {
|
|
props.children = children;
|
|
} else if (childrenLength > 1) {
|
|
var childArray = new Array(childrenLength);
|
|
for (var i = 0; i < childrenLength; i++) {
|
|
childArray[i] = arguments[i + 3];
|
|
}
|
|
props.children = childArray;
|
|
}
|
|
|
|
return {
|
|
$$typeof: REACT_ELEMENT_TYPE,
|
|
type: type,
|
|
key: key === undefined ? null : '' + key,
|
|
ref: null,
|
|
props: props,
|
|
_owner: null,
|
|
};
|
|
}
|
|
`;
|
|
helpers.asyncIterator = helper("7.0.0-beta.0")`
|
|
export default function _asyncIterator(iterable) {
|
|
var method
|
|
if (typeof Symbol !== "undefined") {
|
|
if (Symbol.asyncIterator) {
|
|
method = iterable[Symbol.asyncIterator]
|
|
if (method != null) return method.call(iterable);
|
|
}
|
|
if (Symbol.iterator) {
|
|
method = iterable[Symbol.iterator]
|
|
if (method != null) return method.call(iterable);
|
|
}
|
|
}
|
|
throw new TypeError("Object is not async iterable");
|
|
}
|
|
`;
|
|
helpers.AwaitValue = helper("7.0.0-beta.0")`
|
|
export default function _AwaitValue(value) {
|
|
this.wrapped = value;
|
|
}
|
|
`;
|
|
helpers.AsyncGenerator = helper("7.0.0-beta.0")`
|
|
import AwaitValue from "AwaitValue";
|
|
|
|
export default function AsyncGenerator(gen) {
|
|
var front, back;
|
|
|
|
function send(key, arg) {
|
|
return new Promise(function (resolve, reject) {
|
|
var request = {
|
|
key: key,
|
|
arg: arg,
|
|
resolve: resolve,
|
|
reject: reject,
|
|
next: null,
|
|
};
|
|
|
|
if (back) {
|
|
back = back.next = request;
|
|
} else {
|
|
front = back = request;
|
|
resume(key, arg);
|
|
}
|
|
});
|
|
}
|
|
|
|
function resume(key, arg) {
|
|
try {
|
|
var result = gen[key](arg)
|
|
var value = result.value;
|
|
var wrappedAwait = value instanceof AwaitValue;
|
|
|
|
Promise.resolve(wrappedAwait ? value.wrapped : value).then(
|
|
function (arg) {
|
|
if (wrappedAwait) {
|
|
resume("next", arg);
|
|
return
|
|
}
|
|
|
|
settle(result.done ? "return" : "normal", arg);
|
|
},
|
|
function (err) { resume("throw", err); });
|
|
} catch (err) {
|
|
settle("throw", err);
|
|
}
|
|
}
|
|
|
|
function settle(type, value) {
|
|
switch (type) {
|
|
case "return":
|
|
front.resolve({ value: value, done: true });
|
|
break;
|
|
case "throw":
|
|
front.reject(value);
|
|
break;
|
|
default:
|
|
front.resolve({ value: value, done: false });
|
|
break;
|
|
}
|
|
|
|
front = front.next;
|
|
if (front) {
|
|
resume(front.key, front.arg);
|
|
} else {
|
|
back = null;
|
|
}
|
|
}
|
|
|
|
this._invoke = send;
|
|
|
|
// Hide "return" method if generator return is not supported
|
|
if (typeof gen.return !== "function") {
|
|
this.return = undefined;
|
|
}
|
|
}
|
|
|
|
if (typeof Symbol === "function" && Symbol.asyncIterator) {
|
|
AsyncGenerator.prototype[Symbol.asyncIterator] = function () { return this; };
|
|
}
|
|
|
|
AsyncGenerator.prototype.next = function (arg) { return this._invoke("next", arg); };
|
|
AsyncGenerator.prototype.throw = function (arg) { return this._invoke("throw", arg); };
|
|
AsyncGenerator.prototype.return = function (arg) { return this._invoke("return", arg); };
|
|
`;
|
|
helpers.wrapAsyncGenerator = helper("7.0.0-beta.0")`
|
|
import AsyncGenerator from "AsyncGenerator";
|
|
|
|
export default function _wrapAsyncGenerator(fn) {
|
|
return function () {
|
|
return new AsyncGenerator(fn.apply(this, arguments));
|
|
};
|
|
}
|
|
`;
|
|
helpers.awaitAsyncGenerator = helper("7.0.0-beta.0")`
|
|
import AwaitValue from "AwaitValue";
|
|
|
|
export default function _awaitAsyncGenerator(value) {
|
|
return new AwaitValue(value);
|
|
}
|
|
`;
|
|
helpers.asyncGeneratorDelegate = helper("7.0.0-beta.0")`
|
|
export default function _asyncGeneratorDelegate(inner, awaitWrap) {
|
|
var iter = {}, waiting = false;
|
|
|
|
function pump(key, value) {
|
|
waiting = true;
|
|
value = new Promise(function (resolve) { resolve(inner[key](value)); });
|
|
return { done: false, value: awaitWrap(value) };
|
|
};
|
|
|
|
if (typeof Symbol === "function" && Symbol.iterator) {
|
|
iter[Symbol.iterator] = function () { return this; };
|
|
}
|
|
|
|
iter.next = function (value) {
|
|
if (waiting) {
|
|
waiting = false;
|
|
return value;
|
|
}
|
|
return pump("next", value);
|
|
};
|
|
|
|
if (typeof inner.throw === "function") {
|
|
iter.throw = function (value) {
|
|
if (waiting) {
|
|
waiting = false;
|
|
throw value;
|
|
}
|
|
return pump("throw", value);
|
|
};
|
|
}
|
|
|
|
if (typeof inner.return === "function") {
|
|
iter.return = function (value) {
|
|
return pump("return", value);
|
|
};
|
|
}
|
|
|
|
return iter;
|
|
}
|
|
`;
|
|
helpers.asyncToGenerator = helper("7.0.0-beta.0")`
|
|
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
try {
|
|
var info = gen[key](arg);
|
|
var value = info.value;
|
|
} catch (error) {
|
|
reject(error);
|
|
return;
|
|
}
|
|
|
|
if (info.done) {
|
|
resolve(value);
|
|
} else {
|
|
Promise.resolve(value).then(_next, _throw);
|
|
}
|
|
}
|
|
|
|
export default function _asyncToGenerator(fn) {
|
|
return function () {
|
|
var self = this, args = arguments;
|
|
return new Promise(function (resolve, reject) {
|
|
var gen = fn.apply(self, args);
|
|
function _next(value) {
|
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
}
|
|
function _throw(err) {
|
|
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
}
|
|
|
|
_next(undefined);
|
|
});
|
|
};
|
|
}
|
|
`;
|
|
helpers.classCallCheck = helper("7.0.0-beta.0")`
|
|
export default function _classCallCheck(instance, Constructor) {
|
|
if (!(instance instanceof Constructor)) {
|
|
throw new TypeError("Cannot call a class as a function");
|
|
}
|
|
}
|
|
`;
|
|
helpers.createClass = helper("7.0.0-beta.0")`
|
|
function _defineProperties(target, props) {
|
|
for (var i = 0; i < props.length; i ++) {
|
|
var descriptor = props[i];
|
|
descriptor.enumerable = descriptor.enumerable || false;
|
|
descriptor.configurable = true;
|
|
if ("value" in descriptor) descriptor.writable = true;
|
|
Object.defineProperty(target, descriptor.key, descriptor);
|
|
}
|
|
}
|
|
|
|
export default function _createClass(Constructor, protoProps, staticProps) {
|
|
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
return Constructor;
|
|
}
|
|
`;
|
|
helpers.defineEnumerableProperties = helper("7.0.0-beta.0")`
|
|
export default function _defineEnumerableProperties(obj, descs) {
|
|
for (var key in descs) {
|
|
var desc = descs[key];
|
|
desc.configurable = desc.enumerable = true;
|
|
if ("value" in desc) desc.writable = true;
|
|
Object.defineProperty(obj, key, desc);
|
|
}
|
|
|
|
// Symbols are not enumerated over by for-in loops. If native
|
|
// Symbols are available, fetch all of the descs object's own
|
|
// symbol properties and define them on our target object too.
|
|
if (Object.getOwnPropertySymbols) {
|
|
var objectSymbols = Object.getOwnPropertySymbols(descs);
|
|
for (var i = 0; i < objectSymbols.length; i++) {
|
|
var sym = objectSymbols[i];
|
|
var desc = descs[sym];
|
|
desc.configurable = desc.enumerable = true;
|
|
if ("value" in desc) desc.writable = true;
|
|
Object.defineProperty(obj, sym, desc);
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
`;
|
|
helpers.defaults = helper("7.0.0-beta.0")`
|
|
export default function _defaults(obj, defaults) {
|
|
var keys = Object.getOwnPropertyNames(defaults);
|
|
for (var i = 0; i < keys.length; i++) {
|
|
var key = keys[i];
|
|
var value = Object.getOwnPropertyDescriptor(defaults, key);
|
|
if (value && value.configurable && obj[key] === undefined) {
|
|
Object.defineProperty(obj, key, value);
|
|
}
|
|
}
|
|
return obj;
|
|
}
|
|
`;
|
|
helpers.defineProperty = helper("7.0.0-beta.0")`
|
|
export default function _defineProperty(obj, key, value) {
|
|
// Shortcircuit the slow defineProperty path when possible.
|
|
// We are trying to avoid issues where setters defined on the
|
|
// prototype cause side effects under the fast path of simple
|
|
// assignment. By checking for existence of the property with
|
|
// the in operator, we can optimize most of this overhead away.
|
|
if (key in obj) {
|
|
Object.defineProperty(obj, key, {
|
|
value: value,
|
|
enumerable: true,
|
|
configurable: true,
|
|
writable: true
|
|
});
|
|
} else {
|
|
obj[key] = value;
|
|
}
|
|
return obj;
|
|
}
|
|
`;
|
|
helpers.extends = helper("7.0.0-beta.0")`
|
|
export default function _extends() {
|
|
_extends = Object.assign || function (target) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var source = arguments[i];
|
|
for (var key in source) {
|
|
if (Object.prototype.hasOwnProperty.call(source, key)) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|
|
return target;
|
|
};
|
|
|
|
return _extends.apply(this, arguments);
|
|
}
|
|
`;
|
|
helpers.objectSpread = helper("7.0.0-beta.0")`
|
|
import defineProperty from "defineProperty";
|
|
|
|
export default function _objectSpread(target) {
|
|
for (var i = 1; i < arguments.length; i++) {
|
|
var source = (arguments[i] != null) ? arguments[i] : {};
|
|
var ownKeys = Object.keys(source);
|
|
if (typeof Object.getOwnPropertySymbols === 'function') {
|
|
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
}));
|
|
}
|
|
ownKeys.forEach(function(key) {
|
|
defineProperty(target, key, source[key]);
|
|
});
|
|
}
|
|
return target;
|
|
}
|
|
`;
|
|
helpers.inherits = helper("7.0.0-beta.0")`
|
|
import setPrototypeOf from "setPrototypeOf";
|
|
|
|
export default function _inherits(subClass, superClass) {
|
|
if (typeof superClass !== "function" && superClass !== null) {
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
}
|
|
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
constructor: {
|
|
value: subClass,
|
|
writable: true,
|
|
configurable: true
|
|
}
|
|
});
|
|
if (superClass) setPrototypeOf(subClass, superClass);
|
|
}
|
|
`;
|
|
helpers.inheritsLoose = helper("7.0.0-beta.0")`
|
|
export default function _inheritsLoose(subClass, superClass) {
|
|
subClass.prototype = Object.create(superClass.prototype);
|
|
subClass.prototype.constructor = subClass;
|
|
subClass.__proto__ = superClass;
|
|
}
|
|
`;
|
|
helpers.getPrototypeOf = helper("7.0.0-beta.0")`
|
|
export default function _getPrototypeOf(o) {
|
|
_getPrototypeOf = Object.setPrototypeOf
|
|
? Object.getPrototypeOf
|
|
: function _getPrototypeOf(o) {
|
|
return o.__proto__ || Object.getPrototypeOf(o);
|
|
};
|
|
return _getPrototypeOf(o);
|
|
}
|
|
`;
|
|
helpers.setPrototypeOf = helper("7.0.0-beta.0")`
|
|
export default function _setPrototypeOf(o, p) {
|
|
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
o.__proto__ = p;
|
|
return o;
|
|
};
|
|
return _setPrototypeOf(o, p);
|
|
}
|
|
`;
|
|
helpers.construct = helper("7.0.0-beta.0")`
|
|
import setPrototypeOf from "setPrototypeOf";
|
|
|
|
function isNativeReflectConstruct() {
|
|
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
|
|
// core-js@3
|
|
if (Reflect.construct.sham) return false;
|
|
|
|
// Proxy can't be polyfilled. Every browser implemented
|
|
// proxies before or at the same time as Reflect.construct,
|
|
// so if they support Proxy they also support Reflect.construct.
|
|
if (typeof Proxy === "function") return true;
|
|
|
|
// Since Reflect.construct can't be properly polyfilled, some
|
|
// implementations (e.g. core-js@2) don't set the correct internal slots.
|
|
// Those polyfills don't allow us to subclass built-ins, so we need to
|
|
// use our fallback implementation.
|
|
try {
|
|
// If the internal slots aren't set, this throws an error similar to
|
|
// TypeError: this is not a Date object.
|
|
Date.prototype.toString.call(Reflect.construct(Date, [], function() {}));
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
export default function _construct(Parent, args, Class) {
|
|
if (isNativeReflectConstruct()) {
|
|
_construct = Reflect.construct;
|
|
} else {
|
|
// NOTE: If Parent !== Class, the correct __proto__ is set *after*
|
|
// calling the constructor.
|
|
_construct = function _construct(Parent, args, Class) {
|
|
var a = [null];
|
|
a.push.apply(a, args);
|
|
var Constructor = Function.bind.apply(Parent, a);
|
|
var instance = new Constructor();
|
|
if (Class) setPrototypeOf(instance, Class.prototype);
|
|
return instance;
|
|
};
|
|
}
|
|
// Avoid issues with Class being present but undefined when it wasn't
|
|
// present in the original call.
|
|
return _construct.apply(null, arguments);
|
|
}
|
|
`;
|
|
helpers.isNativeFunction = helper("7.0.0-beta.0")`
|
|
export default function _isNativeFunction(fn) {
|
|
// Note: This function returns "true" for core-js functions.
|
|
return Function.toString.call(fn).indexOf("[native code]") !== -1;
|
|
}
|
|
`;
|
|
helpers.wrapNativeSuper = helper("7.0.0-beta.0")`
|
|
import getPrototypeOf from "getPrototypeOf";
|
|
import setPrototypeOf from "setPrototypeOf";
|
|
import isNativeFunction from "isNativeFunction";
|
|
import construct from "construct";
|
|
|
|
export default function _wrapNativeSuper(Class) {
|
|
var _cache = typeof Map === "function" ? new Map() : undefined;
|
|
|
|
_wrapNativeSuper = function _wrapNativeSuper(Class) {
|
|
if (Class === null || !isNativeFunction(Class)) return Class;
|
|
if (typeof Class !== "function") {
|
|
throw new TypeError("Super expression must either be null or a function");
|
|
}
|
|
if (typeof _cache !== "undefined") {
|
|
if (_cache.has(Class)) return _cache.get(Class);
|
|
_cache.set(Class, Wrapper);
|
|
}
|
|
function Wrapper() {
|
|
return construct(Class, arguments, getPrototypeOf(this).constructor)
|
|
}
|
|
Wrapper.prototype = Object.create(Class.prototype, {
|
|
constructor: {
|
|
value: Wrapper,
|
|
enumerable: false,
|
|
writable: true,
|
|
configurable: true,
|
|
}
|
|
});
|
|
|
|
return setPrototypeOf(Wrapper, Class);
|
|
}
|
|
|
|
return _wrapNativeSuper(Class)
|
|
}
|
|
`;
|
|
helpers.instanceof = helper("7.0.0-beta.0")`
|
|
export default function _instanceof(left, right) {
|
|
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
return right[Symbol.hasInstance](left);
|
|
} else {
|
|
return left instanceof right;
|
|
}
|
|
}
|
|
`;
|
|
helpers.interopRequireDefault = helper("7.0.0-beta.0")`
|
|
export default function _interopRequireDefault(obj) {
|
|
return obj && obj.__esModule ? obj : { default: obj };
|
|
}
|
|
`;
|
|
helpers.interopRequireWildcard = helper("7.0.0-beta.0")`
|
|
export default function _interopRequireWildcard(obj) {
|
|
if (obj && obj.__esModule) {
|
|
return obj;
|
|
} else {
|
|
var newObj = {};
|
|
if (obj != null) {
|
|
for (var key in obj) {
|
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor
|
|
? Object.getOwnPropertyDescriptor(obj, key)
|
|
: {};
|
|
if (desc.get || desc.set) {
|
|
Object.defineProperty(newObj, key, desc);
|
|
} else {
|
|
newObj[key] = obj[key];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
newObj.default = obj;
|
|
return newObj;
|
|
}
|
|
}
|
|
`;
|
|
helpers.newArrowCheck = helper("7.0.0-beta.0")`
|
|
export default function _newArrowCheck(innerThis, boundThis) {
|
|
if (innerThis !== boundThis) {
|
|
throw new TypeError("Cannot instantiate an arrow function");
|
|
}
|
|
}
|
|
`;
|
|
helpers.objectDestructuringEmpty = helper("7.0.0-beta.0")`
|
|
export default function _objectDestructuringEmpty(obj) {
|
|
if (obj == null) throw new TypeError("Cannot destructure undefined");
|
|
}
|
|
`;
|
|
helpers.objectWithoutPropertiesLoose = helper("7.0.0-beta.0")`
|
|
export default function _objectWithoutPropertiesLoose(source, excluded) {
|
|
if (source == null) return {};
|
|
|
|
var target = {};
|
|
var sourceKeys = Object.keys(source);
|
|
var key, i;
|
|
|
|
for (i = 0; i < sourceKeys.length; i++) {
|
|
key = sourceKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
target[key] = source[key];
|
|
}
|
|
|
|
return target;
|
|
}
|
|
`;
|
|
helpers.objectWithoutProperties = helper("7.0.0-beta.0")`
|
|
import objectWithoutPropertiesLoose from "objectWithoutPropertiesLoose";
|
|
|
|
export default function _objectWithoutProperties(source, excluded) {
|
|
if (source == null) return {};
|
|
|
|
var target = objectWithoutPropertiesLoose(source, excluded);
|
|
var key, i;
|
|
|
|
if (Object.getOwnPropertySymbols) {
|
|
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
for (i = 0; i < sourceSymbolKeys.length; i++) {
|
|
key = sourceSymbolKeys[i];
|
|
if (excluded.indexOf(key) >= 0) continue;
|
|
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
|
|
return target;
|
|
}
|
|
`;
|
|
helpers.assertThisInitialized = helper("7.0.0-beta.0")`
|
|
export default function _assertThisInitialized(self) {
|
|
if (self === void 0) {
|
|
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
}
|
|
return self;
|
|
}
|
|
`;
|
|
helpers.possibleConstructorReturn = helper("7.0.0-beta.0")`
|
|
import assertThisInitialized from "assertThisInitialized";
|
|
|
|
export default function _possibleConstructorReturn(self, call) {
|
|
if (call && (typeof call === "object" || typeof call === "function")) {
|
|
return call;
|
|
}
|
|
return assertThisInitialized(self);
|
|
}
|
|
`;
|
|
helpers.superPropBase = helper("7.0.0-beta.0")`
|
|
import getPrototypeOf from "getPrototypeOf";
|
|
|
|
export default function _superPropBase(object, property) {
|
|
// Yes, this throws if object is null to being with, that's on purpose.
|
|
while (!Object.prototype.hasOwnProperty.call(object, property)) {
|
|
object = getPrototypeOf(object);
|
|
if (object === null) break;
|
|
}
|
|
return object;
|
|
}
|
|
`;
|
|
helpers.get = helper("7.0.0-beta.0")`
|
|
import getPrototypeOf from "getPrototypeOf";
|
|
import superPropBase from "superPropBase";
|
|
|
|
export default function _get(target, property, receiver) {
|
|
if (typeof Reflect !== "undefined" && Reflect.get) {
|
|
_get = Reflect.get;
|
|
} else {
|
|
_get = function _get(target, property, receiver) {
|
|
var base = superPropBase(target, property);
|
|
|
|
if (!base) return;
|
|
|
|
var desc = Object.getOwnPropertyDescriptor(base, property);
|
|
if (desc.get) {
|
|
return desc.get.call(receiver);
|
|
}
|
|
|
|
return desc.value;
|
|
};
|
|
}
|
|
return _get(target, property, receiver || target);
|
|
}
|
|
`;
|
|
helpers.set = helper("7.0.0-beta.0")`
|
|
import getPrototypeOf from "getPrototypeOf";
|
|
import superPropBase from "superPropBase";
|
|
import defineProperty from "defineProperty";
|
|
|
|
function set(target, property, value, receiver) {
|
|
if (typeof Reflect !== "undefined" && Reflect.set) {
|
|
set = Reflect.set;
|
|
} else {
|
|
set = function set(target, property, value, receiver) {
|
|
var base = superPropBase(target, property);
|
|
var desc;
|
|
|
|
if (base) {
|
|
desc = Object.getOwnPropertyDescriptor(base, property);
|
|
if (desc.set) {
|
|
desc.set.call(receiver, value);
|
|
return true;
|
|
} else if (!desc.writable) {
|
|
// Both getter and non-writable fall into this.
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Without a super that defines the property, spec boils down to
|
|
// "define on receiver" for some reason.
|
|
desc = Object.getOwnPropertyDescriptor(receiver, property);
|
|
if (desc) {
|
|
if (!desc.writable) {
|
|
// Setter, getter, and non-writable fall into this.
|
|
return false;
|
|
}
|
|
|
|
desc.value = value;
|
|
Object.defineProperty(receiver, property, desc);
|
|
} else {
|
|
// Avoid setters that may be defined on Sub's prototype, but not on
|
|
// the instance.
|
|
defineProperty(receiver, property, value);
|
|
}
|
|
|
|
return true;
|
|
};
|
|
}
|
|
|
|
return set(target, property, value, receiver);
|
|
}
|
|
|
|
export default function _set(target, property, value, receiver, isStrict) {
|
|
var s = set(target, property, value, receiver || target);
|
|
if (!s && isStrict) {
|
|
throw new Error('failed to set property');
|
|
}
|
|
|
|
return value;
|
|
}
|
|
`;
|
|
helpers.taggedTemplateLiteral = helper("7.0.0-beta.0")`
|
|
export default function _taggedTemplateLiteral(strings, raw) {
|
|
if (!raw) { raw = strings.slice(0); }
|
|
return Object.freeze(Object.defineProperties(strings, {
|
|
raw: { value: Object.freeze(raw) }
|
|
}));
|
|
}
|
|
`;
|
|
helpers.taggedTemplateLiteralLoose = helper("7.0.0-beta.0")`
|
|
export default function _taggedTemplateLiteralLoose(strings, raw) {
|
|
if (!raw) { raw = strings.slice(0); }
|
|
strings.raw = raw;
|
|
return strings;
|
|
}
|
|
`;
|
|
helpers.temporalRef = helper("7.0.0-beta.0")`
|
|
import undef from "temporalUndefined";
|
|
|
|
export default function _temporalRef(val, name) {
|
|
if (val === undef) {
|
|
throw new ReferenceError(name + " is not defined - temporal dead zone");
|
|
} else {
|
|
return val;
|
|
}
|
|
}
|
|
`;
|
|
helpers.readOnlyError = helper("7.0.0-beta.0")`
|
|
export default function _readOnlyError(name) {
|
|
throw new Error("\\"" + name + "\\" is read-only");
|
|
}
|
|
`;
|
|
helpers.classNameTDZError = helper("7.0.0-beta.0")`
|
|
export default function _classNameTDZError(name) {
|
|
throw new Error("Class \\"" + name + "\\" cannot be referenced in computed property keys.");
|
|
}
|
|
`;
|
|
helpers.temporalUndefined = helper("7.0.0-beta.0")`
|
|
export default {};
|
|
`;
|
|
helpers.slicedToArray = helper("7.0.0-beta.0")`
|
|
import arrayWithHoles from "arrayWithHoles";
|
|
import iterableToArrayLimit from "iterableToArrayLimit";
|
|
import nonIterableRest from "nonIterableRest";
|
|
|
|
export default function _slicedToArray(arr, i) {
|
|
return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();
|
|
}
|
|
`;
|
|
helpers.slicedToArrayLoose = helper("7.0.0-beta.0")`
|
|
import arrayWithHoles from "arrayWithHoles";
|
|
import iterableToArrayLimitLoose from "iterableToArrayLimitLoose";
|
|
import nonIterableRest from "nonIterableRest";
|
|
|
|
export default function _slicedToArrayLoose(arr, i) {
|
|
return arrayWithHoles(arr) || iterableToArrayLimitLoose(arr, i) || nonIterableRest();
|
|
}
|
|
`;
|
|
helpers.toArray = helper("7.0.0-beta.0")`
|
|
import arrayWithHoles from "arrayWithHoles";
|
|
import iterableToArray from "iterableToArray";
|
|
import nonIterableRest from "nonIterableRest";
|
|
|
|
export default function _toArray(arr) {
|
|
return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();
|
|
}
|
|
`;
|
|
helpers.toConsumableArray = helper("7.0.0-beta.0")`
|
|
import arrayWithoutHoles from "arrayWithoutHoles";
|
|
import iterableToArray from "iterableToArray";
|
|
import nonIterableSpread from "nonIterableSpread";
|
|
|
|
export default function _toConsumableArray(arr) {
|
|
return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();
|
|
}
|
|
`;
|
|
helpers.arrayWithoutHoles = helper("7.0.0-beta.0")`
|
|
export default function _arrayWithoutHoles(arr) {
|
|
if (Array.isArray(arr)) {
|
|
for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
|
|
return arr2;
|
|
}
|
|
}
|
|
`;
|
|
helpers.arrayWithHoles = helper("7.0.0-beta.0")`
|
|
export default function _arrayWithHoles(arr) {
|
|
if (Array.isArray(arr)) return arr;
|
|
}
|
|
`;
|
|
helpers.iterableToArray = helper("7.0.0-beta.0")`
|
|
export default function _iterableToArray(iter) {
|
|
if (
|
|
Symbol.iterator in Object(iter) ||
|
|
Object.prototype.toString.call(iter) === "[object Arguments]"
|
|
) return Array.from(iter);
|
|
}
|
|
`;
|
|
helpers.iterableToArrayLimit = helper("7.0.0-beta.0")`
|
|
export default function _iterableToArrayLimit(arr, i) {
|
|
// this is an expanded form of \`for...of\` that properly supports abrupt completions of
|
|
// iterators etc. variable names have been minimised to reduce the size of this massive
|
|
// helper. sometimes spec compliancy is annoying :(
|
|
//
|
|
// _n = _iteratorNormalCompletion
|
|
// _d = _didIteratorError
|
|
// _e = _iteratorError
|
|
// _i = _iterator
|
|
// _s = _step
|
|
|
|
var _arr = [];
|
|
var _n = true;
|
|
var _d = false;
|
|
var _e = undefined;
|
|
try {
|
|
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
|
|
_arr.push(_s.value);
|
|
if (i && _arr.length === i) break;
|
|
}
|
|
} catch (err) {
|
|
_d = true;
|
|
_e = err;
|
|
} finally {
|
|
try {
|
|
if (!_n && _i["return"] != null) _i["return"]();
|
|
} finally {
|
|
if (_d) throw _e;
|
|
}
|
|
}
|
|
return _arr;
|
|
}
|
|
`;
|
|
helpers.iterableToArrayLimitLoose = helper("7.0.0-beta.0")`
|
|
export default function _iterableToArrayLimitLoose(arr, i) {
|
|
var _arr = [];
|
|
for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) {
|
|
_arr.push(_step.value);
|
|
if (i && _arr.length === i) break;
|
|
}
|
|
return _arr;
|
|
}
|
|
`;
|
|
helpers.nonIterableSpread = helper("7.0.0-beta.0")`
|
|
export default function _nonIterableSpread() {
|
|
throw new TypeError("Invalid attempt to spread non-iterable instance");
|
|
}
|
|
`;
|
|
helpers.nonIterableRest = helper("7.0.0-beta.0")`
|
|
export default function _nonIterableRest() {
|
|
throw new TypeError("Invalid attempt to destructure non-iterable instance");
|
|
}
|
|
`;
|
|
helpers.skipFirstGeneratorNext = helper("7.0.0-beta.0")`
|
|
export default function _skipFirstGeneratorNext(fn) {
|
|
return function () {
|
|
var it = fn.apply(this, arguments);
|
|
it.next();
|
|
return it;
|
|
}
|
|
}
|
|
`;
|
|
helpers.toPrimitive = helper("7.1.5")`
|
|
export default function _toPrimitive(
|
|
input,
|
|
hint /*: "default" | "string" | "number" | void */
|
|
) {
|
|
if (typeof input !== "object" || input === null) return input;
|
|
var prim = input[Symbol.toPrimitive];
|
|
if (prim !== undefined) {
|
|
var res = prim.call(input, hint || "default");
|
|
if (typeof res !== "object") return res;
|
|
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
}
|
|
return (hint === "string" ? String : Number)(input);
|
|
}
|
|
`;
|
|
helpers.toPropertyKey = helper("7.1.5")`
|
|
import toPrimitive from "toPrimitive";
|
|
|
|
export default function _toPropertyKey(arg) {
|
|
var key = toPrimitive(arg, "string");
|
|
return typeof key === "symbol" ? key : String(key);
|
|
}
|
|
`;
|
|
helpers.initializerWarningHelper = helper("7.0.0-beta.0")`
|
|
export default function _initializerWarningHelper(descriptor, context){
|
|
throw new Error(
|
|
'Decorating class property failed. Please ensure that ' +
|
|
'proposal-class-properties is enabled and set to use loose mode. ' +
|
|
'To use proposal-class-properties in spec mode with decorators, wait for ' +
|
|
'the next major version of decorators in stage 2.'
|
|
);
|
|
}
|
|
`;
|
|
helpers.initializerDefineProperty = helper("7.0.0-beta.0")`
|
|
export default function _initializerDefineProperty(target, property, descriptor, context){
|
|
if (!descriptor) return;
|
|
|
|
Object.defineProperty(target, property, {
|
|
enumerable: descriptor.enumerable,
|
|
configurable: descriptor.configurable,
|
|
writable: descriptor.writable,
|
|
value: descriptor.initializer ? descriptor.initializer.call(context) : void 0,
|
|
});
|
|
}
|
|
`;
|
|
helpers.applyDecoratedDescriptor = helper("7.0.0-beta.0")`
|
|
export default function _applyDecoratedDescriptor(target, property, decorators, descriptor, context){
|
|
var desc = {};
|
|
Object.keys(descriptor).forEach(function(key){
|
|
desc[key] = descriptor[key];
|
|
});
|
|
desc.enumerable = !!desc.enumerable;
|
|
desc.configurable = !!desc.configurable;
|
|
if ('value' in desc || desc.initializer){
|
|
desc.writable = true;
|
|
}
|
|
|
|
desc = decorators.slice().reverse().reduce(function(desc, decorator){
|
|
return decorator(target, property, desc) || desc;
|
|
}, desc);
|
|
|
|
if (context && desc.initializer !== void 0){
|
|
desc.value = desc.initializer ? desc.initializer.call(context) : void 0;
|
|
desc.initializer = undefined;
|
|
}
|
|
|
|
if (desc.initializer === void 0){
|
|
// This is a hack to avoid this being processed by 'transform-runtime'.
|
|
// See issue #9.
|
|
Object.defineProperty(target, property, desc);
|
|
desc = null;
|
|
}
|
|
|
|
return desc;
|
|
}
|
|
`;
|
|
helpers.classPrivateFieldLooseKey = helper("7.0.0-beta.0")`
|
|
var id = 0;
|
|
export default function _classPrivateFieldKey(name) {
|
|
return "__private_" + (id++) + "_" + name;
|
|
}
|
|
`;
|
|
helpers.classPrivateFieldLooseBase = helper("7.0.0-beta.0")`
|
|
export default function _classPrivateFieldBase(receiver, privateKey) {
|
|
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
|
|
throw new TypeError("attempted to use private field on non-instance");
|
|
}
|
|
return receiver;
|
|
}
|
|
`;
|
|
helpers.classPrivateFieldGet = helper("7.0.0-beta.0")`
|
|
export default function _classPrivateFieldGet(receiver, privateMap) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to get private field on non-instance");
|
|
}
|
|
var descriptor = privateMap.get(receiver);
|
|
if (descriptor.get) {
|
|
return descriptor.get.call(receiver);
|
|
}
|
|
return descriptor.value;
|
|
}
|
|
`;
|
|
helpers.classPrivateFieldSet = helper("7.0.0-beta.0")`
|
|
export default function _classPrivateFieldSet(receiver, privateMap, value) {
|
|
if (!privateMap.has(receiver)) {
|
|
throw new TypeError("attempted to set private field on non-instance");
|
|
}
|
|
var descriptor = privateMap.get(receiver);
|
|
if (descriptor.set) {
|
|
descriptor.set.call(receiver, value);
|
|
} else {
|
|
if (!descriptor.writable) {
|
|
// This should only throw in strict mode, but class bodies are
|
|
// always strict and private fields can only be used inside
|
|
// class bodies.
|
|
throw new TypeError("attempted to set read only private field");
|
|
}
|
|
|
|
descriptor.value = value;
|
|
}
|
|
|
|
return value;
|
|
}
|
|
`;
|
|
helpers.classStaticPrivateFieldSpecGet = helper("7.0.2")`
|
|
export default function _classStaticPrivateFieldSpecGet(receiver, classConstructor, descriptor) {
|
|
if (receiver !== classConstructor) {
|
|
throw new TypeError("Private static access of wrong provenance");
|
|
}
|
|
return descriptor.value;
|
|
}
|
|
`;
|
|
helpers.classStaticPrivateFieldSpecSet = helper("7.0.2")`
|
|
export default function _classStaticPrivateFieldSpecSet(receiver, classConstructor, descriptor, value) {
|
|
if (receiver !== classConstructor) {
|
|
throw new TypeError("Private static access of wrong provenance");
|
|
}
|
|
if (!descriptor.writable) {
|
|
// This should only throw in strict mode, but class bodies are
|
|
// always strict and private fields can only be used inside
|
|
// class bodies.
|
|
throw new TypeError("attempted to set read only private field");
|
|
}
|
|
descriptor.value = value;
|
|
return value;
|
|
}
|
|
`;
|
|
helpers.classStaticPrivateMethodGet = helper("7.3.2")`
|
|
export default function _classStaticPrivateMethodGet(receiver, classConstructor, method) {
|
|
if (receiver !== classConstructor) {
|
|
throw new TypeError("Private static access of wrong provenance");
|
|
}
|
|
return method;
|
|
}
|
|
`;
|
|
helpers.classStaticPrivateMethodSet = helper("7.3.2")`
|
|
export default function _classStaticPrivateMethodSet() {
|
|
throw new TypeError("attempted to set read only static private field");
|
|
}
|
|
`;
|
|
helpers.decorate = helper("7.1.5")`
|
|
import toArray from "toArray";
|
|
import toPropertyKey from "toPropertyKey";
|
|
|
|
// These comments are stripped by @babel/template
|
|
/*::
|
|
type PropertyDescriptor =
|
|
| {
|
|
value: any,
|
|
writable: boolean,
|
|
configurable: boolean,
|
|
enumerable: boolean,
|
|
}
|
|
| {
|
|
get?: () => any,
|
|
set?: (v: any) => void,
|
|
configurable: boolean,
|
|
enumerable: boolean,
|
|
};
|
|
|
|
type FieldDescriptor ={
|
|
writable: boolean,
|
|
configurable: boolean,
|
|
enumerable: boolean,
|
|
};
|
|
|
|
type Placement = "static" | "prototype" | "own";
|
|
type Key = string | symbol; // PrivateName is not supported yet.
|
|
|
|
type ElementDescriptor =
|
|
| {
|
|
kind: "method",
|
|
key: Key,
|
|
placement: Placement,
|
|
descriptor: PropertyDescriptor
|
|
}
|
|
| {
|
|
kind: "field",
|
|
key: Key,
|
|
placement: Placement,
|
|
descriptor: FieldDescriptor,
|
|
initializer?: () => any,
|
|
};
|
|
|
|
// This is exposed to the user code
|
|
type ElementObjectInput = ElementDescriptor & {
|
|
[@@toStringTag]?: "Descriptor"
|
|
};
|
|
|
|
// This is exposed to the user code
|
|
type ElementObjectOutput = ElementDescriptor & {
|
|
[@@toStringTag]?: "Descriptor"
|
|
extras?: ElementDescriptor[],
|
|
finisher?: ClassFinisher,
|
|
};
|
|
|
|
// This is exposed to the user code
|
|
type ClassObject = {
|
|
[@@toStringTag]?: "Descriptor",
|
|
kind: "class",
|
|
elements: ElementDescriptor[],
|
|
};
|
|
|
|
type ElementDecorator = (descriptor: ElementObjectInput) => ?ElementObjectOutput;
|
|
type ClassDecorator = (descriptor: ClassObject) => ?ClassObject;
|
|
type ClassFinisher = <A, B>(cl: Class<A>) => Class<B>;
|
|
|
|
// Only used by Babel in the transform output, not part of the spec.
|
|
type ElementDefinition =
|
|
| {
|
|
kind: "method",
|
|
value: any,
|
|
key: Key,
|
|
static?: boolean,
|
|
decorators?: ElementDecorator[],
|
|
}
|
|
| {
|
|
kind: "field",
|
|
value: () => any,
|
|
key: Key,
|
|
static?: boolean,
|
|
decorators?: ElementDecorator[],
|
|
};
|
|
|
|
declare function ClassFactory<C>(initialize: (instance: C) => void): {
|
|
F: Class<C>,
|
|
d: ElementDefinition[]
|
|
}
|
|
|
|
*/
|
|
|
|
/*::
|
|
// Various combinations with/without extras and with one or many finishers
|
|
|
|
type ElementFinisherExtras = {
|
|
element: ElementDescriptor,
|
|
finisher?: ClassFinisher,
|
|
extras?: ElementDescriptor[],
|
|
};
|
|
|
|
type ElementFinishersExtras = {
|
|
element: ElementDescriptor,
|
|
finishers: ClassFinisher[],
|
|
extras: ElementDescriptor[],
|
|
};
|
|
|
|
type ElementsFinisher = {
|
|
elements: ElementDescriptor[],
|
|
finisher?: ClassFinisher,
|
|
};
|
|
|
|
type ElementsFinishers = {
|
|
elements: ElementDescriptor[],
|
|
finishers: ClassFinisher[],
|
|
};
|
|
|
|
*/
|
|
|
|
/*::
|
|
|
|
type Placements = {
|
|
static: Key[],
|
|
prototype: Key[],
|
|
own: Key[],
|
|
};
|
|
|
|
*/
|
|
|
|
// ClassDefinitionEvaluation (Steps 26-*)
|
|
export default function _decorate(
|
|
decorators /*: ClassDecorator[] */,
|
|
factory /*: ClassFactory */,
|
|
superClass /*: ?Class<*> */,
|
|
mixins /*: ?Array<Function> */,
|
|
) /*: Class<*> */ {
|
|
var api = _getDecoratorsApi();
|
|
if (mixins) {
|
|
for (var i = 0; i < mixins.length; i++) {
|
|
api = mixins[i](api);
|
|
}
|
|
}
|
|
|
|
var r = factory(function initialize(O) {
|
|
api.initializeInstanceElements(O, decorated.elements);
|
|
}, superClass);
|
|
var decorated = api.decorateClass(
|
|
_coalesceClassElements(r.d.map(_createElementDescriptor)),
|
|
decorators,
|
|
);
|
|
|
|
api.initializeClassElements(r.F, decorated.elements);
|
|
|
|
return api.runClassFinishers(r.F, decorated.finishers);
|
|
}
|
|
|
|
function _getDecoratorsApi() {
|
|
_getDecoratorsApi = function() {
|
|
return api;
|
|
};
|
|
|
|
var api = {
|
|
elementsDefinitionOrder: [["method"], ["field"]],
|
|
|
|
// InitializeInstanceElements
|
|
initializeInstanceElements: function(
|
|
/*::<C>*/ O /*: C */,
|
|
elements /*: ElementDescriptor[] */,
|
|
) {
|
|
["method", "field"].forEach(function(kind) {
|
|
elements.forEach(function(element /*: ElementDescriptor */) {
|
|
if (element.kind === kind && element.placement === "own") {
|
|
this.defineClassElement(O, element);
|
|
}
|
|
}, this);
|
|
}, this);
|
|
},
|
|
|
|
// InitializeClassElements
|
|
initializeClassElements: function(
|
|
/*::<C>*/ F /*: Class<C> */,
|
|
elements /*: ElementDescriptor[] */,
|
|
) {
|
|
var proto = F.prototype;
|
|
|
|
["method", "field"].forEach(function(kind) {
|
|
elements.forEach(function(element /*: ElementDescriptor */) {
|
|
var placement = element.placement;
|
|
if (
|
|
element.kind === kind &&
|
|
(placement === "static" || placement === "prototype")
|
|
) {
|
|
var receiver = placement === "static" ? F : proto;
|
|
this.defineClassElement(receiver, element);
|
|
}
|
|
}, this);
|
|
}, this);
|
|
},
|
|
|
|
// DefineClassElement
|
|
defineClassElement: function(
|
|
/*::<C>*/ receiver /*: C | Class<C> */,
|
|
element /*: ElementDescriptor */,
|
|
) {
|
|
var descriptor /*: PropertyDescriptor */ = element.descriptor;
|
|
if (element.kind === "field") {
|
|
var initializer = element.initializer;
|
|
descriptor = {
|
|
enumerable: descriptor.enumerable,
|
|
writable: descriptor.writable,
|
|
configurable: descriptor.configurable,
|
|
value: initializer === void 0 ? void 0 : initializer.call(receiver),
|
|
};
|
|
}
|
|
Object.defineProperty(receiver, element.key, descriptor);
|
|
},
|
|
|
|
// DecorateClass
|
|
decorateClass: function(
|
|
elements /*: ElementDescriptor[] */,
|
|
decorators /*: ClassDecorator[] */,
|
|
) /*: ElementsFinishers */ {
|
|
var newElements /*: ElementDescriptor[] */ = [];
|
|
var finishers /*: ClassFinisher[] */ = [];
|
|
var placements /*: Placements */ = {
|
|
static: [],
|
|
prototype: [],
|
|
own: [],
|
|
};
|
|
|
|
elements.forEach(function(element /*: ElementDescriptor */) {
|
|
this.addElementPlacement(element, placements);
|
|
}, this);
|
|
|
|
elements.forEach(function(element /*: ElementDescriptor */) {
|
|
if (!_hasDecorators(element)) return newElements.push(element);
|
|
|
|
var elementFinishersExtras /*: ElementFinishersExtras */ = this.decorateElement(
|
|
element,
|
|
placements,
|
|
);
|
|
newElements.push(elementFinishersExtras.element);
|
|
newElements.push.apply(newElements, elementFinishersExtras.extras);
|
|
finishers.push.apply(finishers, elementFinishersExtras.finishers);
|
|
}, this);
|
|
|
|
if (!decorators) {
|
|
return { elements: newElements, finishers: finishers };
|
|
}
|
|
|
|
var result /*: ElementsFinishers */ = this.decorateConstructor(
|
|
newElements,
|
|
decorators,
|
|
);
|
|
finishers.push.apply(finishers, result.finishers);
|
|
result.finishers = finishers;
|
|
|
|
return result;
|
|
},
|
|
|
|
// AddElementPlacement
|
|
addElementPlacement: function(
|
|
element /*: ElementDescriptor */,
|
|
placements /*: Placements */,
|
|
silent /*: boolean */,
|
|
) {
|
|
var keys = placements[element.placement];
|
|
if (!silent && keys.indexOf(element.key) !== -1) {
|
|
throw new TypeError("Duplicated element (" + element.key + ")");
|
|
}
|
|
keys.push(element.key);
|
|
},
|
|
|
|
// DecorateElement
|
|
decorateElement: function(
|
|
element /*: ElementDescriptor */,
|
|
placements /*: Placements */,
|
|
) /*: ElementFinishersExtras */ {
|
|
var extras /*: ElementDescriptor[] */ = [];
|
|
var finishers /*: ClassFinisher[] */ = [];
|
|
|
|
for (
|
|
var decorators = element.decorators, i = decorators.length - 1;
|
|
i >= 0;
|
|
i--
|
|
) {
|
|
// (inlined) RemoveElementPlacement
|
|
var keys = placements[element.placement];
|
|
keys.splice(keys.indexOf(element.key), 1);
|
|
|
|
var elementObject /*: ElementObjectInput */ = this.fromElementDescriptor(
|
|
element,
|
|
);
|
|
var elementFinisherExtras /*: ElementFinisherExtras */ = this.toElementFinisherExtras(
|
|
(0, decorators[i])(elementObject) /*: ElementObjectOutput */ ||
|
|
elementObject,
|
|
);
|
|
|
|
element = elementFinisherExtras.element;
|
|
this.addElementPlacement(element, placements);
|
|
|
|
if (elementFinisherExtras.finisher) {
|
|
finishers.push(elementFinisherExtras.finisher);
|
|
}
|
|
|
|
var newExtras /*: ElementDescriptor[] | void */ =
|
|
elementFinisherExtras.extras;
|
|
if (newExtras) {
|
|
for (var j = 0; j < newExtras.length; j++) {
|
|
this.addElementPlacement(newExtras[j], placements);
|
|
}
|
|
extras.push.apply(extras, newExtras);
|
|
}
|
|
}
|
|
|
|
return { element: element, finishers: finishers, extras: extras };
|
|
},
|
|
|
|
// DecorateConstructor
|
|
decorateConstructor: function(
|
|
elements /*: ElementDescriptor[] */,
|
|
decorators /*: ClassDecorator[] */,
|
|
) /*: ElementsFinishers */ {
|
|
var finishers /*: ClassFinisher[] */ = [];
|
|
|
|
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
var obj /*: ClassObject */ = this.fromClassDescriptor(elements);
|
|
var elementsAndFinisher /*: ElementsFinisher */ = this.toClassDescriptor(
|
|
(0, decorators[i])(obj) /*: ClassObject */ || obj,
|
|
);
|
|
|
|
if (elementsAndFinisher.finisher !== undefined) {
|
|
finishers.push(elementsAndFinisher.finisher);
|
|
}
|
|
|
|
if (elementsAndFinisher.elements !== undefined) {
|
|
elements = elementsAndFinisher.elements;
|
|
|
|
for (var j = 0; j < elements.length - 1; j++) {
|
|
for (var k = j + 1; k < elements.length; k++) {
|
|
if (
|
|
elements[j].key === elements[k].key &&
|
|
elements[j].placement === elements[k].placement
|
|
) {
|
|
throw new TypeError(
|
|
"Duplicated element (" + elements[j].key + ")",
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return { elements: elements, finishers: finishers };
|
|
},
|
|
|
|
// FromElementDescriptor
|
|
fromElementDescriptor: function(
|
|
element /*: ElementDescriptor */,
|
|
) /*: ElementObject */ {
|
|
var obj /*: ElementObject */ = {
|
|
kind: element.kind,
|
|
key: element.key,
|
|
placement: element.placement,
|
|
descriptor: element.descriptor,
|
|
};
|
|
|
|
var desc = {
|
|
value: "Descriptor",
|
|
configurable: true,
|
|
};
|
|
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
|
|
|
if (element.kind === "field") obj.initializer = element.initializer;
|
|
|
|
return obj;
|
|
},
|
|
|
|
// ToElementDescriptors
|
|
toElementDescriptors: function(
|
|
elementObjects /*: ElementObject[] */,
|
|
) /*: ElementDescriptor[] */ {
|
|
if (elementObjects === undefined) return;
|
|
return toArray(elementObjects).map(function(elementObject) {
|
|
var element = this.toElementDescriptor(elementObject);
|
|
this.disallowProperty(elementObject, "finisher", "An element descriptor");
|
|
this.disallowProperty(elementObject, "extras", "An element descriptor");
|
|
return element;
|
|
}, this);
|
|
},
|
|
|
|
// ToElementDescriptor
|
|
toElementDescriptor: function(
|
|
elementObject /*: ElementObject */,
|
|
) /*: ElementDescriptor */ {
|
|
var kind = String(elementObject.kind);
|
|
if (kind !== "method" && kind !== "field") {
|
|
throw new TypeError(
|
|
'An element descriptor\\'s .kind property must be either "method" or' +
|
|
' "field", but a decorator created an element descriptor with' +
|
|
' .kind "' +
|
|
kind +
|
|
'"',
|
|
);
|
|
}
|
|
|
|
var key = toPropertyKey(elementObject.key);
|
|
|
|
var placement = String(elementObject.placement);
|
|
if (
|
|
placement !== "static" &&
|
|
placement !== "prototype" &&
|
|
placement !== "own"
|
|
) {
|
|
throw new TypeError(
|
|
'An element descriptor\\'s .placement property must be one of "static",' +
|
|
' "prototype" or "own", but a decorator created an element descriptor' +
|
|
' with .placement "' +
|
|
placement +
|
|
'"',
|
|
);
|
|
}
|
|
|
|
var descriptor /*: PropertyDescriptor */ = elementObject.descriptor;
|
|
|
|
this.disallowProperty(elementObject, "elements", "An element descriptor");
|
|
|
|
var element /*: ElementDescriptor */ = {
|
|
kind: kind,
|
|
key: key,
|
|
placement: placement,
|
|
descriptor: Object.assign({}, descriptor),
|
|
};
|
|
|
|
if (kind !== "field") {
|
|
this.disallowProperty(elementObject, "initializer", "A method descriptor");
|
|
} else {
|
|
this.disallowProperty(
|
|
descriptor,
|
|
"get",
|
|
"The property descriptor of a field descriptor",
|
|
);
|
|
this.disallowProperty(
|
|
descriptor,
|
|
"set",
|
|
"The property descriptor of a field descriptor",
|
|
);
|
|
this.disallowProperty(
|
|
descriptor,
|
|
"value",
|
|
"The property descriptor of a field descriptor",
|
|
);
|
|
|
|
element.initializer = elementObject.initializer;
|
|
}
|
|
|
|
return element;
|
|
},
|
|
|
|
toElementFinisherExtras: function(
|
|
elementObject /*: ElementObject */,
|
|
) /*: ElementFinisherExtras */ {
|
|
var element /*: ElementDescriptor */ = this.toElementDescriptor(
|
|
elementObject,
|
|
);
|
|
var finisher /*: ClassFinisher */ = _optionalCallableProperty(
|
|
elementObject,
|
|
"finisher",
|
|
);
|
|
var extras /*: ElementDescriptors[] */ = this.toElementDescriptors(
|
|
elementObject.extras,
|
|
);
|
|
|
|
return { element: element, finisher: finisher, extras: extras };
|
|
},
|
|
|
|
// FromClassDescriptor
|
|
fromClassDescriptor: function(
|
|
elements /*: ElementDescriptor[] */,
|
|
) /*: ClassObject */ {
|
|
var obj = {
|
|
kind: "class",
|
|
elements: elements.map(this.fromElementDescriptor, this),
|
|
};
|
|
|
|
var desc = { value: "Descriptor", configurable: true };
|
|
Object.defineProperty(obj, Symbol.toStringTag, desc);
|
|
|
|
return obj;
|
|
},
|
|
|
|
// ToClassDescriptor
|
|
toClassDescriptor: function(
|
|
obj /*: ClassObject */,
|
|
) /*: ElementsFinisher */ {
|
|
var kind = String(obj.kind);
|
|
if (kind !== "class") {
|
|
throw new TypeError(
|
|
'A class descriptor\\'s .kind property must be "class", but a decorator' +
|
|
' created a class descriptor with .kind "' +
|
|
kind +
|
|
'"',
|
|
);
|
|
}
|
|
|
|
this.disallowProperty(obj, "key", "A class descriptor");
|
|
this.disallowProperty(obj, "placement", "A class descriptor");
|
|
this.disallowProperty(obj, "descriptor", "A class descriptor");
|
|
this.disallowProperty(obj, "initializer", "A class descriptor");
|
|
this.disallowProperty(obj, "extras", "A class descriptor");
|
|
|
|
var finisher = _optionalCallableProperty(obj, "finisher");
|
|
var elements = this.toElementDescriptors(obj.elements);
|
|
|
|
return { elements: elements, finisher: finisher };
|
|
},
|
|
|
|
// RunClassFinishers
|
|
runClassFinishers: function(
|
|
constructor /*: Class<*> */,
|
|
finishers /*: ClassFinisher[] */,
|
|
) /*: Class<*> */ {
|
|
for (var i = 0; i < finishers.length; i++) {
|
|
var newConstructor /*: ?Class<*> */ = (0, finishers[i])(constructor);
|
|
if (newConstructor !== undefined) {
|
|
// NOTE: This should check if IsConstructor(newConstructor) is false.
|
|
if (typeof newConstructor !== "function") {
|
|
throw new TypeError("Finishers must return a constructor.");
|
|
}
|
|
constructor = newConstructor;
|
|
}
|
|
}
|
|
return constructor;
|
|
},
|
|
|
|
disallowProperty: function(obj, name, objectType) {
|
|
if (obj[name] !== undefined) {
|
|
throw new TypeError(objectType + " can't have a ." + name + " property.");
|
|
}
|
|
}
|
|
};
|
|
|
|
return api;
|
|
}
|
|
|
|
// ClassElementEvaluation
|
|
function _createElementDescriptor(
|
|
def /*: ElementDefinition */,
|
|
) /*: ElementDescriptor */ {
|
|
var key = toPropertyKey(def.key);
|
|
|
|
var descriptor /*: PropertyDescriptor */;
|
|
if (def.kind === "method") {
|
|
descriptor = {
|
|
value: def.value,
|
|
writable: true,
|
|
configurable: true,
|
|
enumerable: false,
|
|
};
|
|
} else if (def.kind === "get") {
|
|
descriptor = { get: def.value, configurable: true, enumerable: false };
|
|
} else if (def.kind === "set") {
|
|
descriptor = { set: def.value, configurable: true, enumerable: false };
|
|
} else if (def.kind === "field") {
|
|
descriptor = { configurable: true, writable: true, enumerable: true };
|
|
}
|
|
|
|
var element /*: ElementDescriptor */ = {
|
|
kind: def.kind === "field" ? "field" : "method",
|
|
key: key,
|
|
placement: def.static
|
|
? "static"
|
|
: def.kind === "field"
|
|
? "own"
|
|
: "prototype",
|
|
descriptor: descriptor,
|
|
};
|
|
if (def.decorators) element.decorators = def.decorators;
|
|
if (def.kind === "field") element.initializer = def.value;
|
|
|
|
return element;
|
|
}
|
|
|
|
// CoalesceGetterSetter
|
|
function _coalesceGetterSetter(
|
|
element /*: ElementDescriptor */,
|
|
other /*: ElementDescriptor */,
|
|
) {
|
|
if (element.descriptor.get !== undefined) {
|
|
other.descriptor.get = element.descriptor.get;
|
|
} else {
|
|
other.descriptor.set = element.descriptor.set;
|
|
}
|
|
}
|
|
|
|
// CoalesceClassElements
|
|
function _coalesceClassElements(
|
|
elements /*: ElementDescriptor[] */,
|
|
) /*: ElementDescriptor[] */ {
|
|
var newElements /*: ElementDescriptor[] */ = [];
|
|
|
|
var isSameElement = function(
|
|
other /*: ElementDescriptor */,
|
|
) /*: boolean */ {
|
|
return (
|
|
other.kind === "method" &&
|
|
other.key === element.key &&
|
|
other.placement === element.placement
|
|
);
|
|
};
|
|
|
|
for (var i = 0; i < elements.length; i++) {
|
|
var element /*: ElementDescriptor */ = elements[i];
|
|
var other /*: ElementDescriptor */;
|
|
|
|
if (
|
|
element.kind === "method" &&
|
|
(other = newElements.find(isSameElement))
|
|
) {
|
|
if (
|
|
_isDataDescriptor(element.descriptor) ||
|
|
_isDataDescriptor(other.descriptor)
|
|
) {
|
|
if (_hasDecorators(element) || _hasDecorators(other)) {
|
|
throw new ReferenceError(
|
|
"Duplicated methods (" + element.key + ") can't be decorated.",
|
|
);
|
|
}
|
|
other.descriptor = element.descriptor;
|
|
} else {
|
|
if (_hasDecorators(element)) {
|
|
if (_hasDecorators(other)) {
|
|
throw new ReferenceError(
|
|
"Decorators can't be placed on different accessors with for " +
|
|
"the same property (" +
|
|
element.key +
|
|
").",
|
|
);
|
|
}
|
|
other.decorators = element.decorators;
|
|
}
|
|
_coalesceGetterSetter(element, other);
|
|
}
|
|
} else {
|
|
newElements.push(element);
|
|
}
|
|
}
|
|
|
|
return newElements;
|
|
}
|
|
|
|
function _hasDecorators(element /*: ElementDescriptor */) /*: boolean */ {
|
|
return element.decorators && element.decorators.length;
|
|
}
|
|
|
|
function _isDataDescriptor(desc /*: PropertyDescriptor */) /*: boolean */ {
|
|
return (
|
|
desc !== undefined &&
|
|
!(desc.value === undefined && desc.writable === undefined)
|
|
);
|
|
}
|
|
|
|
function _optionalCallableProperty /*::<T>*/(
|
|
obj /*: T */,
|
|
name /*: $Keys<T> */,
|
|
) /*: ?Function */ {
|
|
var value = obj[name];
|
|
if (value !== undefined && typeof value !== "function") {
|
|
throw new TypeError("Expected '" + name + "' to be a function");
|
|
}
|
|
return value;
|
|
}
|
|
|
|
`;
|
|
helpers.classPrivateMethodGet = helper("7.1.6")`
|
|
export default function _classPrivateMethodGet(receiver, privateSet, fn) {
|
|
if (!privateSet.has(receiver)) {
|
|
throw new TypeError("attempted to get private field on non-instance");
|
|
}
|
|
return fn;
|
|
}
|
|
`;
|
|
helpers.classPrivateMethodSet = helper("7.1.6")`
|
|
export default function _classPrivateMethodSet() {
|
|
throw new TypeError("attempted to reassign private method");
|
|
}
|
|
`;
|
|
helpers.wrapRegExp = helper("7.2.6")`
|
|
import wrapNativeSuper from "wrapNativeSuper";
|
|
import getPrototypeOf from "getPrototypeOf";
|
|
import possibleConstructorReturn from "possibleConstructorReturn";
|
|
import inherits from "inherits";
|
|
|
|
export default function _wrapRegExp(re, groups) {
|
|
_wrapRegExp = function(re, groups) {
|
|
return new BabelRegExp(re, groups);
|
|
};
|
|
|
|
var _RegExp = wrapNativeSuper(RegExp);
|
|
var _super = RegExp.prototype;
|
|
var _groups = new WeakMap();
|
|
|
|
function BabelRegExp(re, groups) {
|
|
var _this = _RegExp.call(this, re);
|
|
_groups.set(_this, groups);
|
|
return _this;
|
|
}
|
|
inherits(BabelRegExp, _RegExp);
|
|
|
|
BabelRegExp.prototype.exec = function(str) {
|
|
var result = _super.exec.call(this, str);
|
|
if (result) result.groups = buildGroups(result, this);
|
|
return result;
|
|
};
|
|
BabelRegExp.prototype[Symbol.replace] = function(str, substitution) {
|
|
if (typeof substitution === "string") {
|
|
var groups = _groups.get(this);
|
|
return _super[Symbol.replace].call(
|
|
this,
|
|
str,
|
|
substitution.replace(/\\$<([^>]+)>/g, function(_, name) {
|
|
return "$" + groups[name];
|
|
})
|
|
);
|
|
} else if (typeof substitution === "function") {
|
|
var _this = this;
|
|
return _super[Symbol.replace].call(
|
|
this,
|
|
str,
|
|
function() {
|
|
var args = [];
|
|
args.push.apply(args, arguments);
|
|
if (typeof args[args.length - 1] !== "object") {
|
|
// Modern engines already pass result.groups as the last arg.
|
|
args.push(buildGroups(args, _this));
|
|
}
|
|
return substitution.apply(this, args);
|
|
}
|
|
);
|
|
} else {
|
|
return _super[Symbol.replace].call(this, str, substitution);
|
|
}
|
|
}
|
|
|
|
function buildGroups(result, re) {
|
|
// NOTE: This function should return undefined if there are no groups,
|
|
// but in that case Babel doesn't add the wrapper anyway.
|
|
|
|
var g = _groups.get(re);
|
|
return Object.keys(g).reduce(function(groups, name) {
|
|
groups[name] = result[g[name]];
|
|
return groups;
|
|
}, Object.create(null));
|
|
}
|
|
|
|
return _wrapRegExp.apply(this, arguments);
|
|
}
|
|
`; |