svelte
Advanced tools
Comparing version 5.0.0-next.94 to 5.0.0-next.95
@@ -5,3 +5,3 @@ { | ||
"license": "MIT", | ||
"version": "5.0.0-next.94", | ||
"version": "5.0.0-next.95", | ||
"type": "module", | ||
@@ -110,3 +110,3 @@ "types": "./types/index.d.ts", | ||
"@types/aria-query": "^5.0.4", | ||
"dts-buddy": "^0.4.4", | ||
"dts-buddy": "^0.4.6", | ||
"esbuild": "^0.19.11", | ||
@@ -113,0 +113,0 @@ "knip": "^4.2.1", |
@@ -215,3 +215,5 @@ /** @typedef {{ start?: number, end?: number }} NodeLike */ | ||
`Cannot reassign or bind to each block argument in runes mode. Use the array and index variables instead (e.g. 'array[i] = value' instead of 'entry = value')`, | ||
'invalid-derived-call': () => `$derived.call(...) has been replaced with $derived.by(...)` | ||
'invalid-derived-call': () => `$derived.call(...) has been replaced with $derived.by(...)`, | ||
'conflicting-property-name': () => | ||
`Cannot have a property and a component export with the same name` | ||
}; | ||
@@ -218,0 +220,0 @@ |
@@ -440,2 +440,16 @@ import is_reference from 'is-reference'; | ||
} | ||
if (analysis.exports.length > 0) { | ||
for (const [_, binding] of instance.scope.declarations) { | ||
if (binding.kind === 'prop' || binding.kind === 'bindable_prop') { | ||
if ( | ||
analysis.exports.some( | ||
({ alias, name }) => (binding.prop_alias ?? binding.node.name) === (alias ?? name) | ||
) | ||
) { | ||
error(binding.node, 'conflicting-property-name'); | ||
} | ||
} | ||
} | ||
} | ||
} else { | ||
@@ -442,0 +456,0 @@ instance.scope.declare(b.id('$$props'), 'bindable_prop', 'synthetic'); |
@@ -258,4 +258,3 @@ import { walk } from 'zimmerframe'; | ||
if (analysis.runes && options.dev) { | ||
/** @type {import('estree').Literal[]} */ | ||
const bindable = []; | ||
const bindable = analysis.exports.map(({ name, alias }) => b.literal(alias ?? name)); | ||
for (const [name, binding] of properties) { | ||
@@ -386,3 +385,2 @@ if (binding.kind === 'bindable_prop') { | ||
if (analysis.uses_rest_props) { | ||
/** @type {string[]} */ | ||
const named_props = analysis.exports.map(({ name, alias }) => alias ?? name); | ||
@@ -389,0 +387,0 @@ for (const [name, binding] of analysis.instance.scope.declarations) { |
@@ -198,4 +198,3 @@ import { get_rune } from '../../../scope.js'; | ||
/** @type {string[]} */ | ||
const seen = []; | ||
const seen = state.analysis.exports.map(({ name, alias }) => alias ?? name); | ||
@@ -202,0 +201,0 @@ for (const property of declarator.id.properties) { |
@@ -1,147 +0,149 @@ | ||
export interface BaseNode { | ||
start: number; | ||
end: number; | ||
} | ||
export interface StyleSheet extends BaseNode { | ||
type: 'StyleSheet'; | ||
attributes: any[]; // TODO | ||
children: Array<Atrule | Rule>; | ||
content: { | ||
export namespace Css { | ||
export interface BaseNode { | ||
start: number; | ||
end: number; | ||
styles: string; | ||
}; | ||
} | ||
} | ||
export interface Atrule extends BaseNode { | ||
type: 'Atrule'; | ||
name: string; | ||
prelude: string; | ||
block: Block | null; | ||
} | ||
export interface StyleSheet extends BaseNode { | ||
type: 'StyleSheet'; | ||
attributes: any[]; // TODO | ||
children: Array<Atrule | Rule>; | ||
content: { | ||
start: number; | ||
end: number; | ||
styles: string; | ||
}; | ||
} | ||
export interface Rule extends BaseNode { | ||
type: 'Rule'; | ||
prelude: SelectorList; | ||
block: Block; | ||
metadata: { | ||
parent_rule: null | Rule; | ||
has_local_selectors: boolean; | ||
}; | ||
} | ||
export interface Atrule extends BaseNode { | ||
type: 'Atrule'; | ||
name: string; | ||
prelude: string; | ||
block: Block | null; | ||
} | ||
export interface SelectorList extends BaseNode { | ||
type: 'SelectorList'; | ||
children: ComplexSelector[]; | ||
} | ||
export interface Rule extends BaseNode { | ||
type: 'Rule'; | ||
prelude: SelectorList; | ||
block: Block; | ||
metadata: { | ||
parent_rule: null | Rule; | ||
has_local_selectors: boolean; | ||
}; | ||
} | ||
export interface ComplexSelector extends BaseNode { | ||
type: 'ComplexSelector'; | ||
children: RelativeSelector[]; | ||
metadata: { | ||
rule: null | Rule; | ||
used: boolean; | ||
}; | ||
} | ||
export interface SelectorList extends BaseNode { | ||
type: 'SelectorList'; | ||
children: ComplexSelector[]; | ||
} | ||
export interface RelativeSelector extends BaseNode { | ||
type: 'RelativeSelector'; | ||
combinator: null | Combinator; | ||
selectors: SimpleSelector[]; | ||
metadata: { | ||
is_global: boolean; | ||
is_host: boolean; | ||
is_root: boolean; | ||
scoped: boolean; | ||
}; | ||
} | ||
export interface ComplexSelector extends BaseNode { | ||
type: 'ComplexSelector'; | ||
children: RelativeSelector[]; | ||
metadata: { | ||
rule: null | Rule; | ||
used: boolean; | ||
}; | ||
} | ||
export interface TypeSelector extends BaseNode { | ||
type: 'TypeSelector'; | ||
name: string; | ||
} | ||
export interface RelativeSelector extends BaseNode { | ||
type: 'RelativeSelector'; | ||
combinator: null | Combinator; | ||
selectors: SimpleSelector[]; | ||
metadata: { | ||
is_global: boolean; | ||
is_host: boolean; | ||
is_root: boolean; | ||
scoped: boolean; | ||
}; | ||
} | ||
export interface IdSelector extends BaseNode { | ||
type: 'IdSelector'; | ||
name: string; | ||
} | ||
export interface TypeSelector extends BaseNode { | ||
type: 'TypeSelector'; | ||
name: string; | ||
} | ||
export interface ClassSelector extends BaseNode { | ||
type: 'ClassSelector'; | ||
name: string; | ||
} | ||
export interface IdSelector extends BaseNode { | ||
type: 'IdSelector'; | ||
name: string; | ||
} | ||
export interface AttributeSelector extends BaseNode { | ||
type: 'AttributeSelector'; | ||
name: string; | ||
matcher: string | null; | ||
value: string | null; | ||
flags: string | null; | ||
} | ||
export interface ClassSelector extends BaseNode { | ||
type: 'ClassSelector'; | ||
name: string; | ||
} | ||
export interface PseudoElementSelector extends BaseNode { | ||
type: 'PseudoElementSelector'; | ||
name: string; | ||
} | ||
export interface AttributeSelector extends BaseNode { | ||
type: 'AttributeSelector'; | ||
name: string; | ||
matcher: string | null; | ||
value: string | null; | ||
flags: string | null; | ||
} | ||
export interface PseudoClassSelector extends BaseNode { | ||
type: 'PseudoClassSelector'; | ||
name: string; | ||
args: SelectorList | null; | ||
} | ||
export interface PseudoElementSelector extends BaseNode { | ||
type: 'PseudoElementSelector'; | ||
name: string; | ||
} | ||
export interface Percentage extends BaseNode { | ||
type: 'Percentage'; | ||
value: string; | ||
} | ||
export interface PseudoClassSelector extends BaseNode { | ||
type: 'PseudoClassSelector'; | ||
name: string; | ||
args: SelectorList | null; | ||
} | ||
export interface NestingSelector extends BaseNode { | ||
type: 'NestingSelector'; | ||
name: '&'; | ||
} | ||
export interface Percentage extends BaseNode { | ||
type: 'Percentage'; | ||
value: string; | ||
} | ||
export interface Nth extends BaseNode { | ||
type: 'Nth'; | ||
value: string; | ||
} | ||
export interface NestingSelector extends BaseNode { | ||
type: 'NestingSelector'; | ||
name: '&'; | ||
} | ||
export type SimpleSelector = | ||
| TypeSelector | ||
| IdSelector | ||
| ClassSelector | ||
| AttributeSelector | ||
| PseudoElementSelector | ||
| PseudoClassSelector | ||
| Percentage | ||
| Nth | ||
| NestingSelector; | ||
export interface Nth extends BaseNode { | ||
type: 'Nth'; | ||
value: string; | ||
} | ||
export interface Combinator extends BaseNode { | ||
type: 'Combinator'; | ||
name: string; | ||
} | ||
export type SimpleSelector = | ||
| TypeSelector | ||
| IdSelector | ||
| ClassSelector | ||
| AttributeSelector | ||
| PseudoElementSelector | ||
| PseudoClassSelector | ||
| Percentage | ||
| Nth | ||
| NestingSelector; | ||
export interface Block extends BaseNode { | ||
type: 'Block'; | ||
children: Array<Declaration | Rule | Atrule>; | ||
} | ||
export interface Combinator extends BaseNode { | ||
type: 'Combinator'; | ||
name: string; | ||
} | ||
export interface Declaration extends BaseNode { | ||
type: 'Declaration'; | ||
property: string; | ||
value: string; | ||
export interface Block extends BaseNode { | ||
type: 'Block'; | ||
children: Array<Declaration | Rule | Atrule>; | ||
} | ||
export interface Declaration extends BaseNode { | ||
type: 'Declaration'; | ||
property: string; | ||
value: string; | ||
} | ||
// for zimmerframe | ||
export type Node = | ||
| StyleSheet | ||
| Rule | ||
| Atrule | ||
| SelectorList | ||
| Block | ||
| ComplexSelector | ||
| RelativeSelector | ||
| Combinator | ||
| SimpleSelector | ||
| Declaration; | ||
} | ||
// for zimmerframe | ||
export type Node = | ||
| StyleSheet | ||
| Rule | ||
| Atrule | ||
| SelectorList | ||
| Block | ||
| ComplexSelector | ||
| RelativeSelector | ||
| Combinator | ||
| SimpleSelector | ||
| Declaration; |
@@ -13,3 +13,3 @@ import type { | ||
import type { Scope } from '../phases/scope.js'; | ||
import * as Css from './css.js'; | ||
import type { Css } from './css.js'; | ||
import type { EachBlock, Namespace, SvelteNode, SvelteOptions } from './template.js'; | ||
@@ -16,0 +16,0 @@ |
@@ -197,5 +197,17 @@ import { DEV } from 'esm-env'; | ||
if (is_unowned && version > /** @type {import('#client').Derived} */ (reaction).version) { | ||
/** @type {import('#client').Derived} */ (reaction).version = version; | ||
return true; | ||
if (is_unowned) { | ||
if (version > /** @type {import('#client').Derived} */ (reaction).version) { | ||
/** @type {import('#client').Derived} */ (reaction).version = version; | ||
return true; | ||
} else if (!current_skip_reaction && !dependency?.reactions?.includes(reaction)) { | ||
// If we are working with an unowned signal as part of an effect (due to !current_skip_reaction) | ||
// and the version hasn't changed, we still need to check that this reaction | ||
// if linked to the dependency source – otherwise future updates will not be caught. | ||
var reactions = dependency.reactions; | ||
if (reactions === null) { | ||
dependency.reactions = [reaction]; | ||
} else { | ||
reactions.push(reaction); | ||
} | ||
} | ||
} | ||
@@ -202,0 +214,0 @@ } |
@@ -9,3 +9,3 @@ // generated during release, do not modify | ||
*/ | ||
export const VERSION = '5.0.0-next.94'; | ||
export const VERSION = '5.0.0-next.95'; | ||
export const PUBLIC_VERSION = '5'; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
1917985
41157