Convert src/compiler/compile/nodes/Action.ts to JavaScript

pull/8569/head
Simon Holthausen 3 years ago
parent 181a23ee6c
commit bb667a77f1

@ -1,31 +1,44 @@
import Node from './shared/Node'; import Node from './shared/Node.js';
import Expression from './shared/Expression'; import Expression from './shared/Expression.js';
import Component from '../Component';
import TemplateScope from './shared/TemplateScope';
import { Directive } from '../../interfaces';
/** @extends Node */
export default class Action extends Node { export default class Action extends Node {
type: 'Action';
name: string;
expression: Expression;
uses_context: boolean;
template_scope: TemplateScope;
constructor(component: Component, parent: Node, scope: TemplateScope, info: Directive) { /** @type {'Action'} */
super(component, parent, scope, info); type;
const object = info.name.split('.')[0]; /** @type {string} */
component.warn_if_undefined(object, info, scope); name;
this.name = info.name; /** @type {import('./shared/Expression.js').default} */
component.add_reference(this as any, object); expression;
this.expression = info.expression /** @type {boolean} */
? new Expression(component, this, scope, info.expression) uses_context;
: null;
this.template_scope = scope; /** @type {import('./shared/TemplateScope.js').default} */
template_scope;
this.uses_context = this.expression && this.expression.uses_context; /**
} * @param {import('../Component.js').default} component *
* @param {import('./shared/Node.js').default} parent *
* @param {import('./shared/TemplateScope.js').default} scope *
* @param {import('../../interfaces.js').Directive} info undefined
*/
constructor(component, parent, scope, info) {
super(component, parent, scope, info);
const object = info.name.split('.')[0];
component.warn_if_undefined(object, info, scope);
this.name = info.name;
component.add_reference(/** @type {any} */ (this), object);
this.expression = info.expression
? new Expression(component, this, scope, info.expression)
: null;
this.template_scope = scope;
this.uses_context = this.expression && this.expression.uses_context;
}
} }

@ -13,7 +13,7 @@ import flatten_reference from '../../utils/flatten_reference.js';
* component: import('../../Component.js').default; * component: import('../../Component.js').default;
* context_rest_properties: Map<string, import('estree').Node>; * context_rest_properties: Map<string, import('estree').Node>;
* in_rest_element?: boolean; * in_rest_element?: boolean;
* }} * }} params
*/ */
export function unpack_destructuring({ export function unpack_destructuring({
contexts, contexts,
@ -175,7 +175,7 @@ export function unpack_destructuring({
* @param {number} n * @param {number} n
* @param {import('estree').Expression} expression * @param {import('estree').Expression} expression
* @param {(name: string) => import('estree').Node} to_ctx * @param {(name: string) => import('estree').Node} to_ctx
* @returns {import("C:/repos/svelte/svelte/node_modules/.pnpm/@types+estree@1.0.0/node_modules/@types/estree/index").import('estree').Node} * @returns {import('estree').Node}
*/ */
function update_reference(contexts, n, expression, to_ctx) { function update_reference(contexts, n, expression, to_ctx) {
/** @param {import('estree').Identifier} node */ /** @param {import('estree').Identifier} node */
@ -231,15 +231,18 @@ function mark_referenced(node, scope, component) {
/** @typedef {DestructuredVariable | ComputedProperty} Context */ /** @typedef {DestructuredVariable | ComputedProperty} Context */
/** @typedef {Object} ComputedProperty /**
* @typedef {Object} ComputedProperty
* @property {'ComputedProperty'} type * @property {'ComputedProperty'} type
* @property {Identifier} property_name * @property {import('estree').Identifier} property_name
* @property {Expression|PrivateIdentifier} key * @property {import('estree').Expression|import('estree').PrivateIdentifier} key
*/ */
/** @typedef {Object} DestructuredVariable
/**
* @typedef {Object} DestructuredVariable
* @property {'DestructuredVariable'} type * @property {'DestructuredVariable'} type
* @property {Identifier} key * @property {import('estree').Identifier} key
* @property {string} [name] * @property {string} [name]
* @property {(node:Node)=>Node} modifier * @property {(node:import('estree').Node)=>import('estree').Node} modifier
* @property {(node:Node,to_ctx:(name:string)=>Node)=>Node} default_modifier * @property {(node:import('estree').Node,to_ctx:(name:string)=>import('estree').Node)=>import('estree').Node} default_modifier
*/ */

@ -1,4 +1,14 @@
export default class TemplateScope { export default class TemplateScope {
/**
* @typedef {import('../EachBlock').default
* | import('../ThenBlock').default
* | import('../CatchBlock').default
* | import('../InlineComponent').default
* | import('../Element').default
* | import('../SlotTemplate').default
* | import('../ConstTag').default} NodeWithScope
*/
/** @type {Set<string>} */ /** @type {Set<string>} */
names; names;
@ -41,7 +51,7 @@ export default class TemplateScope {
/** /**
* @param {string} name * @param {string} name
* @returns {any} * @returns {NodeWithScope}
*/ */
get_owner(name) { get_owner(name) {
return this.owners.get(name) || (this.parent && this.parent.get_owner(name)); return this.owners.get(name) || (this.parent && this.parent.get_owner(name));
@ -70,13 +80,3 @@ export default class TemplateScope {
return owner && owner.type === 'ConstTag'; return owner && owner.type === 'ConstTag';
} }
} }
/**
* @typedef {| EachBlock
* | ThenBlock
* | CatchBlock
* | InlineComponent
* | Element
* | SlotTemplate
* | ConstTag} NodeWithScope
*/

Loading…
Cancel
Save