google-closure-compiler
Version:
Check, compile, optimize and compress Javascript with Closure-Compiler
277 lines (263 loc) • 8.45 kB
JavaScript
/*
* Copyright 2025 The Closure Compiler Authors
*
* 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.
*/
/**
* @fileoverview Decorators for TypeScript classes.
* NOTE: generated by tsickle, then manually edited to fix type errors.
* Generated from: third_party/javascript/node_modules/typescript/stable/lib/lib.decorators.d.ts
*
* @externs
*/
/**
* @template Class
* @record
* @struct
*/
function ClassDecoratorContext() {}
/** @const {string} */
ClassDecoratorContext.prototype.kind;
/** @const {(undefined|string)} */
ClassDecoratorContext.prototype.name;
/** @const {(undefined|?)} */
ClassDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked after the class definition has been finalized.
*
* \@example
* ```ts
* function customElement(name: string): ClassDecoratorFunction {
* return (target, context) => {
* context.addInitializer(function () {
* customElements.define(name, this);
* });
* }
* }
*
* \@customElement("my-element")
* class MyElement {}
* ```
* @public
* @param {function(this: (Class)): void} initializer
* @return {void}
*/
ClassDecoratorContext.prototype.addInitializer = function(initializer) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassMethodDecoratorContext() {}
/** @const {string} */
ClassMethodDecoratorContext.prototype.kind;
/** @const {(string|symbol)} */
ClassMethodDecoratorContext.prototype.name;
/** @const {boolean} */
ClassMethodDecoratorContext.prototype.static;
/** @const {boolean} */
ClassMethodDecoratorContext.prototype.private;
/** @const {{has: function(This): boolean, get: function(This): Value}} */
ClassMethodDecoratorContext.prototype.access;
/** @const {(undefined|?)} */
ClassMethodDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked either after static methods are defined but before
* static initializers are run (when decorating a `static` element), or before instance
* initializers are run (when decorating a non-`static` element).
*
* \@example
* ```ts
* const bound: ClassMethodDecoratorFunction = (value, context) {
* if (context.private) throw new TypeError("Not supported on private methods.");
* context.addInitializer(function () {
* this[context.name] = this[context.name].bind(this);
* });
* }
*
* class C {
* message = "Hello";
*
* \@bound
* m() {
* console.log(this.message);
* }
* }
* ```
* @public
* @param {function(this: (This)): void} initializer
* @return {void}
*/
ClassMethodDecoratorContext.prototype.addInitializer = function(initializer) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassGetterDecoratorContext() {}
/** @const {string} */
ClassGetterDecoratorContext.prototype.kind;
/** @const {(string|symbol)} */
ClassGetterDecoratorContext.prototype.name;
/** @const {boolean} */
ClassGetterDecoratorContext.prototype.static;
/** @const {boolean} */
ClassGetterDecoratorContext.prototype.private;
/** @const {{has: function(This): boolean, get: function(This): Value}} */
ClassGetterDecoratorContext.prototype.access;
/** @const {(undefined|?)} */
ClassGetterDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked either after static methods are defined but before
* static initializers are run (when decorating a `static` element), or before instance
* initializers are run (when decorating a non-`static` element).
* @public
* @param {function(this: (This)): void} initializer
* @return {void}
*/
ClassGetterDecoratorContext.prototype.addInitializer = function(initializer) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassSetterDecoratorContext() {}
/** @const {string} */
ClassSetterDecoratorContext.prototype.kind;
/** @const {(string|symbol)} */
ClassSetterDecoratorContext.prototype.name;
/** @const {boolean} */
ClassSetterDecoratorContext.prototype.static;
/** @const {boolean} */
ClassSetterDecoratorContext.prototype.private;
/** @const {{has: function(This): boolean, set: function(This, Value): void}} */
ClassSetterDecoratorContext.prototype.access;
/** @const {(undefined|?)} */
ClassSetterDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked either after static methods are defined but before
* static initializers are run (when decorating a `static` element), or before instance
* initializers are run (when decorating a non-`static` element).
* @public
* @param {function(this: (This)): void} initializer
* @return {void}
*/
ClassSetterDecoratorContext.prototype.addInitializer = function(initializer) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassAccessorDecoratorContext() {}
/** @const {string} */
ClassAccessorDecoratorContext.prototype.kind;
/** @const {(string|symbol)} */
ClassAccessorDecoratorContext.prototype.name;
/** @const {boolean} */
ClassAccessorDecoratorContext.prototype.static;
/** @const {boolean} */
ClassAccessorDecoratorContext.prototype.private;
/** @const {{has: function(This): boolean, get: function(This): Value, set: function(This, Value): void}} */
ClassAccessorDecoratorContext.prototype.access;
/** @const {(undefined|?)} */
ClassAccessorDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked immediately after the auto `accessor` being
* decorated is initialized (regardless if the `accessor` is `static` or not).
* @public
* @param {function(this: (This)): void} initializer
* @return {void}
*/
ClassAccessorDecoratorContext.prototype.addInitializer = function(initializer) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassAccessorDecoratorTarget() {}
/**
* Invokes the getter that was defined prior to decorator application.
*
* \@example
* let value = target.get.call(instance);
* @public
* @this {This}
* @return {Value}
*/
ClassAccessorDecoratorTarget.prototype.get = function() {};
/**
* Invokes the setter that was defined prior to decorator application.
*
* \@example
* target.set.call(instance, value);
* @public
* @this {This}
* @param {Value} value
* @return {void}
*/
ClassAccessorDecoratorTarget.prototype.set = function(value) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassAccessorDecoratorResult() {}
/**
* An optional replacement getter function. If not provided, the existing getter function is used instead.
* @public
* @this {This}
* @return {Value}
*/
ClassAccessorDecoratorResult.prototype.get = function() {};
/**
* An optional replacement setter function. If not provided, the existing setter function is used instead.
* @public
* @this {This}
* @param {Value} value
* @return {void}
*/
ClassAccessorDecoratorResult.prototype.set = function(value) {};
/**
* An optional initializer mutator that is invoked when the underlying field initializer is evaluated.
* @public
* @this {This}
* @param {Value} value The incoming initializer value.
* @return {Value} The replacement initializer value.
*/
ClassAccessorDecoratorResult.prototype.init = function(value) {};
/**
* @template This, Value
* @record
* @struct
*/
function ClassFieldDecoratorContext() {}
/** @const {string} */
ClassFieldDecoratorContext.prototype.kind;
/** @const {(string|symbol)} */
ClassFieldDecoratorContext.prototype.name;
/** @const {boolean} */
ClassFieldDecoratorContext.prototype.static;
/** @const {boolean} */
ClassFieldDecoratorContext.prototype.private;
/** @const {{has: function(This): boolean, get: function(This): Value, set: function(This, Value): void}} */
ClassFieldDecoratorContext.prototype.access;
/** @const {(undefined|?)} */
ClassFieldDecoratorContext.prototype.metadata;
/**
* Adds a callback to be invoked immediately after the field being decorated
* is initialized (regardless if the field is `static` or not).
* @public
* @param {function(this: (This)): void} initializer
* @return {void}
*/
ClassFieldDecoratorContext.prototype.addInitializer = function(initializer) {};