module.exports = {
	extends: ['@sveltejs'],

	// TODO: add runes to eslint-plugin-svelte
	globals: {
		$state: true,
		$derived: true,
		$effect: true,
		$props: true
	},

	overrides: [
		{
			// scripts and playground should be console logging so don't lint against them
			files: ['playgrounds/**/*', 'scripts/**/*'],
			rules: {
				'no-console': 'off'
			}
		},
		{
			// the playgrounds can use public naming conventions since they're examples
			files: ['playgrounds/**/*'],
			rules: {
				'lube/svelte-naming-convention': 'off'
			}
		},
		{
			files: ['packages/svelte/src/compiler/**/*'],
			rules: {
				'no-var': 'error'
			}
		}
	],

	plugins: ['lube'],

	rules: {
		'no-console': 'error',
		'lube/svelte-naming-convention': ['error', { fixSameNames: true }],
		// eslint isn't that well-versed with JSDoc to know that `foo: /** @type{..} */ (foo)` isn't a violation of this rule, so turn it off
		'object-shorthand': 'off',
		'no-var': 'off',

		// TODO: enable these rules and run `pnpm lint:fix`
		// skipping that for now so as to avoid impacting real work
		'@typescript-eslint/array-type': 'off',
		'@typescript-eslint/no-namespace': 'off',
		'@typescript-eslint/no-non-null-assertion': 'off',
		'@typescript-eslint/no-unused-vars': 'off',
		'prefer-const': 'off',
		'svelte/valid-compile': 'off',
		quotes: 'off'
	}
};