From 81dbb846c45dbadff81e339997f7a2c392de7050 Mon Sep 17 00:00:00 2001 From: gnu4cn Date: Thu, 4 Apr 2019 17:55:15 +0800 Subject: [PATCH] add _book/ to .gitignore. --- .gitignore | 2 +- dist/accessor_decorators.js | 43 +++++++++++++++++++++++++++ dist/metadata.js | 56 ++++++++++++++++++++++++++++++++++++ dist/mixins_example.js | 47 ++++++++++++++++++++++++++++++ dist/parameter_decorators.js | 54 ++++++++++++++++++++++++++++++++++ dist/property_decorators.js | 36 +++++++++++++++++++++++ dist/reference.lib.js | 2 ++ dist/symbol.js | 2 ++ 8 files changed, 241 insertions(+), 1 deletion(-) create mode 100644 dist/accessor_decorators.js create mode 100644 dist/metadata.js create mode 100644 dist/mixins_example.js create mode 100644 dist/parameter_decorators.js create mode 100644 dist/property_decorators.js create mode 100644 dist/reference.lib.js create mode 100644 dist/symbol.js diff --git a/.gitignore b/.gitignore index bd44474..79fc551 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ npm-debug.log* yarn-debug.log* yarn-error.log* -dist/* +_book/* # Runtime data pids diff --git a/dist/accessor_decorators.js b/dist/accessor_decorators.js new file mode 100644 index 0000000..b12c0e3 --- /dev/null +++ b/dist/accessor_decorators.js @@ -0,0 +1,43 @@ +'use strict'; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +// 访问器装饰器,Accessor Decorator +var Point = /** @class */ (function () { + function Point(x, y) { + this._x = x; + this._y = y; + } + Object.defineProperty(Point.prototype, "x", { + get: function () { return this._x; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Point.prototype, "y", { + get: function () { return this._y; }, + enumerable: true, + configurable: true + }); + __decorate([ + configurable(false), + __metadata("design:type", Object), + __metadata("design:paramtypes", []) + ], Point.prototype, "x", null); + __decorate([ + configurable(false), + __metadata("design:type", Object), + __metadata("design:paramtypes", []) + ], Point.prototype, "y", null); + return Point; +}()); +function configurable(value) { + return function (target, propertyKey, descriptor) { + descriptor.configurable = value; + }; +} diff --git a/dist/metadata.js b/dist/metadata.js new file mode 100644 index 0000000..593f113 --- /dev/null +++ b/dist/metadata.js @@ -0,0 +1,56 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("reflect-metadata"); +var Point = /** @class */ (function () { + function Point() { + } + return Point; +}()); +var Line = /** @class */ (function () { + function Line() { + } + Object.defineProperty(Line.prototype, "p0", { + get: function () { return this._p0; }, + set: function (value) { this._p0 = value; }, + enumerable: true, + configurable: true + }); + Object.defineProperty(Line.prototype, "p1", { + get: function () { return this._p1; }, + set: function (value) { this._p1 = value; }, + enumerable: true, + configurable: true + }); + __decorate([ + validate, + __metadata("design:type", Point), + __metadata("design:paramtypes", [Point]) + ], Line.prototype, "p0", null); + __decorate([ + validate, + __metadata("design:type", Point), + __metadata("design:paramtypes", [Point]) + ], Line.prototype, "p1", null); + return Line; +}()); +function validate(target, propertyKey, descriptor) { + var set = descriptor.set; + descriptor.set = function (value) { + var type = Reflect.getMetadata("design:type", target, propertyKey); + if (!(value instanceof type)) { + throw new TypeError("无效的类型。"); + } + set(value); + }; +} +var l1 = new Line(); +console.log(l1); diff --git a/dist/mixins_example.js b/dist/mixins_example.js new file mode 100644 index 0000000..1831510 --- /dev/null +++ b/dist/mixins_example.js @@ -0,0 +1,47 @@ +// 一个名为 Disposable 的混入 +var Disposable = /** @class */ (function () { + function Disposable() { + } + Disposable.prototype.dispose = function () { + this.isDisposable = true; + }; + return Disposable; +}()); +// 一个名为 Activatable 的混入 +var Activatable = /** @class */ (function () { + function Activatable() { + } + Activatable.prototype.activate = function () { + this.isActive = true; + }; + Activatable.prototype.deactivate = function () { + this.isActive = false; + }; + return Activatable; +}()); +var SmartObject = /** @class */ (function () { + function SmartObject() { + var _this = this; + // Disposable + this.isDisposable = false; + // Activatable + this.isActive = false; + setInterval(function () { + console.log(_this.isActive + " : " + _this.isDisposable); + }, 500); + } + SmartObject.prototype.interact = function () { + this.activate(); + }; + return SmartObject; +}()); +applyMixins(SmartObject, [Disposable, Activatable]); +var smartObj = new SmartObject(); +setTimeout(function () { return smartObj.interact(); }, 1000); +function applyMixins(derivedCtor, baseCtors) { + baseCtors.forEach(function (baseCtor) { + Object.getOwnPropertyNames(baseCtor.prototype).forEach(function (name) { + derivedCtor.prototype[name] = baseCtor.prototype[name]; + }); + }); +} diff --git a/dist/parameter_decorators.js b/dist/parameter_decorators.js new file mode 100644 index 0000000..97fa868 --- /dev/null +++ b/dist/parameter_decorators.js @@ -0,0 +1,54 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +var __param = (this && this.__param) || function (paramIndex, decorator) { + return function (target, key) { decorator(target, key, paramIndex); } +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("reflect-metadata"); +var Greeter = /** @class */ (function () { + function Greeter(message) { + this.greeting = message; + } + Greeter.prototype.greet = function (name) { + return "Hello " + name + ", " + this.greeting; + }; + __decorate([ + validate, + __param(0, required), + __metadata("design:type", Function), + __metadata("design:paramtypes", [String]), + __metadata("design:returntype", void 0) + ], Greeter.prototype, "greet", null); + return Greeter; +}()); +var requiredMetadataKey; +function required(target, propertyKey, parameterIndex) { + var existingRequiredParameters = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyKey) || []; + existingRequiredParameters.push(parameterIndex); + Reflect.defineMetadata(requiredMetadataKey, existingRequiredParameters, target, propertyKey); +} +function validate(target, propertyName, descriptor) { + var method = descriptor.value; + descriptor.value = function () { + var requiredParameters = Reflect.getOwnMetadata(requiredMetadataKey, target, propertyName); + if (requiredParameters) { + for (var _i = 0, requiredParameters_1 = requiredParameters; _i < requiredParameters_1.length; _i++) { + var parameterIndex = requiredParameters_1[_i]; + if (parameterIndex >= arguments.length || arguments[parameterIndex] === undefined) { + throw new Error("缺少需要的参数。"); + } + } + } + return method.apply(this, arguments); + }; +} +var g = new Greeter("早上好"); +console.log(g.greet("Echo Feng")); diff --git a/dist/property_decorators.js b/dist/property_decorators.js new file mode 100644 index 0000000..eff2f32 --- /dev/null +++ b/dist/property_decorators.js @@ -0,0 +1,36 @@ +"use strict"; +var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { + var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; + if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); + else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; + return c > 3 && r && Object.defineProperty(target, key, r), r; +}; +var __metadata = (this && this.__metadata) || function (k, v) { + if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +require("reflect-metadata"); +// 属性装饰器,property decorator +var Greeter = /** @class */ (function () { + function Greeter(message) { + this.greeting = message; + } + Greeter.prototype.greet = function () { + var formatString = getFormat(this, "greeting"); + return formatString.replace("%s", this.greeting); + }; + __decorate([ + format("Hello, %s"), + __metadata("design:type", String) + ], Greeter.prototype, "greeting", void 0); + return Greeter; +}()); +var formatMetadataKey; +function format(formatString) { + return Reflect.metadata(formatMetadataKey, formatString); +} +function getFormat(target, propertyKey) { + return Reflect.getMetadata(formatMetadataKey, target, propertyKey); +} +var g = new Greeter("彭海林"); +console.log(g.greet()); diff --git a/dist/reference.lib.js b/dist/reference.lib.js new file mode 100644 index 0000000..9b47758 --- /dev/null +++ b/dist/reference.lib.js @@ -0,0 +1,2 @@ +/// +console.log("foo".padStart(4)); diff --git a/dist/symbol.js b/dist/symbol.js new file mode 100644 index 0000000..89de993 --- /dev/null +++ b/dist/symbol.js @@ -0,0 +1,2 @@ +var a; +console.log(a);