- Delete old Vite+Svelte frontend - Initialize new SvelteKit project with TypeScript - Configure Tailwind CSS v4 + DaisyUI - Implement JWT authentication with auto-refresh - Create login page with form validation (Zod) - Add protected route guards - Update Docker configuration for single-stage build - Add E2E tests with Playwright (6/11 passing) - Fix Svelte 5 reactivity with $state() runes Known issues: - 5 E2E tests failing (timing/async issues) - Token refresh implementation needs debugging - Validation error display timing
58 lines
2.1 KiB
JavaScript
58 lines
2.1 KiB
JavaScript
import { createRule } from '../utils/index.js';
|
|
export default createRule('no-extra-reactive-curlies', {
|
|
meta: {
|
|
docs: {
|
|
description: 'disallow wrapping single reactive statements in curly braces',
|
|
category: 'Stylistic Issues',
|
|
recommended: false,
|
|
conflictWithPrettier: false
|
|
},
|
|
hasSuggestions: true,
|
|
schema: [],
|
|
messages: {
|
|
extraCurlies: `Do not wrap reactive statements in curly braces unless necessary.`,
|
|
removeExtraCurlies: `Remove the unnecessary curly braces.`
|
|
},
|
|
type: 'suggestion',
|
|
conditions: [
|
|
{
|
|
svelteVersions: ['3/4']
|
|
},
|
|
{
|
|
svelteVersions: ['5'],
|
|
runes: [false, 'undetermined']
|
|
}
|
|
]
|
|
},
|
|
create(context) {
|
|
return {
|
|
// $: { foo = "bar"; }
|
|
[`SvelteReactiveStatement > BlockStatement[body.length=1]`]: (node) => {
|
|
const source = context.sourceCode;
|
|
return context.report({
|
|
node,
|
|
loc: node.loc,
|
|
messageId: 'extraCurlies',
|
|
suggest: [
|
|
{
|
|
messageId: 'removeExtraCurlies',
|
|
fix(fixer) {
|
|
const tokens = source.getTokens(node, { includeComments: true });
|
|
// Remove everything up to the second token, and the entire last token since
|
|
// those are known to be "{" and "}"
|
|
return [
|
|
fixer.removeRange([tokens[0].range[0], tokens[1].range[0]]),
|
|
fixer.removeRange([
|
|
tokens[tokens.length - 2].range[1],
|
|
tokens[tokens.length - 1].range[1]
|
|
])
|
|
];
|
|
}
|
|
}
|
|
]
|
|
});
|
|
}
|
|
};
|
|
}
|
|
});
|