diff --git a/examples/with-svelte/.gitignore b/examples/with-svelte/.gitignore index 0eebeb3fe1038..936344b11cc8c 100644 --- a/examples/with-svelte/.gitignore +++ b/examples/with-svelte/.gitignore @@ -28,3 +28,5 @@ yarn-error.log* # turbo .turbo + +dist diff --git a/examples/with-svelte/apps/docs/package.json b/examples/with-svelte/apps/docs/package.json index 6d61b1dd6ed0a..31fe71319e0c0 100644 --- a/examples/with-svelte/apps/docs/package.json +++ b/examples/with-svelte/apps/docs/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite dev", - "build": "vite build", + "build": "svelte-kit sync && vite build", "preview": "vite preview", "test": "npm run test:integration && npm run test:unit", "check-types": "tsc --noEmit", diff --git a/examples/with-svelte/apps/web/package.json b/examples/with-svelte/apps/web/package.json index f82f053501f47..bc1eaf78ca672 100644 --- a/examples/with-svelte/apps/web/package.json +++ b/examples/with-svelte/apps/web/package.json @@ -5,7 +5,7 @@ "type": "module", "scripts": { "dev": "vite dev", - "build": "vite build", + "build": "svelte-kit sync && vite build", "preview": "vite preview", "test": "npm run test:integration && npm run test:unit", "check-types": "tsc --noEmit", diff --git a/examples/with-svelte/packages/typescript-config/svelte.json b/examples/with-svelte/packages/typescript-config/svelte.json index 31c633e3097b3..c33c4022f0169 100644 --- a/examples/with-svelte/packages/typescript-config/svelte.json +++ b/examples/with-svelte/packages/typescript-config/svelte.json @@ -8,6 +8,11 @@ "skipLibCheck": true, "sourceMap": true, "strict": true, - "moduleResolution": "bundler" + "moduleResolution": "NodeNext", + "module": "NodeNext", + "target": "ESNext", + "verbatimModuleSyntax": true, + "isolatedModules": true, + "lib": ["esnext", "DOM", "DOM.Iterable"] } } diff --git a/examples/with-svelte/packages/ui/eslint.config.js b/examples/with-svelte/packages/ui/eslint.config.js index 9cadde2d02f44..b225ff4ae8ac0 100644 --- a/examples/with-svelte/packages/ui/eslint.config.js +++ b/examples/with-svelte/packages/ui/eslint.config.js @@ -1,3 +1,8 @@ import { config } from '@repo/eslint-config/index.js'; -export default config; +export default [ + ...config, + { + ignores: ['.svelte-kit/**', 'dist/**'] + } +]; diff --git a/examples/with-svelte/packages/ui/package.json b/examples/with-svelte/packages/ui/package.json index 2fc1eba2ba29e..371519d0391ef 100644 --- a/examples/with-svelte/packages/ui/package.json +++ b/examples/with-svelte/packages/ui/package.json @@ -2,20 +2,41 @@ "name": "@repo/ui", "version": "0.0.0", "type": "module", - "module": "index.ts", - "main": "index.ts", + "scripts": { + "dev": "svelte-package --watch --input=src", + "build": "svelte-package --input=src", + "lint": "eslint .", + "check-types": "svelte-check --tsconfig ./tsconfig.json" + }, + "files": [ + "dist", + "!dist/**/*.test.*", + "!dist/**/*.spec.*", + "src", + "!src/**/*.test.*", + "!src/**/*.spec.*" + ], + "sideEffects": [ + "**/*.css" + ], "exports": { ".": { - "types": "./index.ts", - "svelte": "./index.ts" + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" } }, - "scripts": { - "lint": "eslint ." + "peerDependencies": { + "svelte": "^5.0.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", + "@repo/typescript-config": "workspace:*", + "@sveltejs/package": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^5.0.0", + "eslint": "^9.25.0", "svelte": "^5.28.1", - "eslint": "^9.25.0" + "svelte-check": "^4.1.4", + "typescript": "5.8.2", + "vite": "^6.3.2" } } diff --git a/examples/with-svelte/packages/ui/components/MyCounterButton.svelte b/examples/with-svelte/packages/ui/src/MyCounterButton.svelte similarity index 100% rename from examples/with-svelte/packages/ui/components/MyCounterButton.svelte rename to examples/with-svelte/packages/ui/src/MyCounterButton.svelte diff --git a/examples/with-svelte/packages/ui/src/index.ts b/examples/with-svelte/packages/ui/src/index.ts new file mode 100644 index 0000000000000..ff044f23133de --- /dev/null +++ b/examples/with-svelte/packages/ui/src/index.ts @@ -0,0 +1,2 @@ +export { Counter } from './my-counter-class.svelte'; +export { default as MyCounterButton } from './MyCounterButton.svelte'; diff --git a/examples/with-svelte/packages/ui/src/my-counter-class.svelte.ts b/examples/with-svelte/packages/ui/src/my-counter-class.svelte.ts new file mode 100644 index 0000000000000..5b9c0799ad417 --- /dev/null +++ b/examples/with-svelte/packages/ui/src/my-counter-class.svelte.ts @@ -0,0 +1,11 @@ +export class Counter { + count = $state(0); + + increment = () => { + this.count++; + }; + + decrement = () => { + this.count--; + }; +} diff --git a/examples/with-svelte/packages/ui/tsconfig.json b/examples/with-svelte/packages/ui/tsconfig.json new file mode 100644 index 0000000000000..23a5289e20571 --- /dev/null +++ b/examples/with-svelte/packages/ui/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@repo/typescript-config/svelte.json", + "compilerOptions": { + "declaration": true, + "declarationMap": true, + }, + "include": [ + "src" + ], + "exclude": [ + "node_modules", + "dist", + ".svelte-kit" + ] +} \ No newline at end of file diff --git a/examples/with-svelte/packages/ui/vite.config.js b/examples/with-svelte/packages/ui/vite.config.js new file mode 100644 index 0000000000000..7e8682ad02d2c --- /dev/null +++ b/examples/with-svelte/packages/ui/vite.config.js @@ -0,0 +1,8 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; + +export default defineConfig({ + plugins: [ + svelte() + ] +}); \ No newline at end of file diff --git a/examples/with-svelte/pnpm-lock.yaml b/examples/with-svelte/pnpm-lock.yaml index bd2787dd16513..55e46c757544f 100644 --- a/examples/with-svelte/pnpm-lock.yaml +++ b/examples/with-svelte/pnpm-lock.yaml @@ -147,12 +147,30 @@ importers: '@repo/eslint-config': specifier: workspace:* version: link:../eslint-config + '@repo/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@sveltejs/package': + specifier: ^2.0.0 + version: 2.3.11(svelte@5.28.1)(typescript@5.8.2) + '@sveltejs/vite-plugin-svelte': + specifier: ^5.0.0 + version: 5.0.3(svelte@5.28.1)(vite@6.3.2) eslint: specifier: ^9.25.0 version: 9.25.0 svelte: specifier: ^5.28.1 version: 5.28.1 + svelte-check: + specifier: ^4.1.4 + version: 4.1.4(svelte@5.28.1)(typescript@5.8.2) + typescript: + specifier: 5.8.2 + version: 5.8.2 + vite: + specifier: ^6.3.2 + version: 6.3.2 packages: @@ -757,6 +775,23 @@ packages: vite: 6.3.2 dev: true + /@sveltejs/package@2.3.11(svelte@5.28.1)(typescript@5.8.2): + resolution: {integrity: sha512-DSMt2U0XNAdoQBYksrmgQi5dKy7jUTVDJLiagS/iXF7AShjAmTbGJQKruBuT/FfYAWvNxfQTSjkXU8eAIjVeNg==} + engines: {node: ^16.14 || >=18} + hasBin: true + peerDependencies: + svelte: ^3.44.0 || ^4.0.0 || ^5.0.0-next.1 + dependencies: + chokidar: 4.0.3 + kleur: 4.1.5 + sade: 1.8.1 + semver: 7.7.1 + svelte: 5.28.1 + svelte2tsx: 0.7.36(svelte@5.28.1)(typescript@5.8.2) + transitivePeerDependencies: + - typescript + dev: true + /@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.3)(svelte@5.28.1)(vite@6.3.2): resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} @@ -1147,6 +1182,10 @@ packages: ms: 2.1.3 dev: true + /dedent-js@1.0.1: + resolution: {integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==} + dev: true + /deep-eql@5.0.2: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} @@ -1447,15 +1486,6 @@ packages: reusify: 1.1.0 dev: true - /fdir@6.4.3: - resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - dev: true - /fdir@6.4.4(picomatch@4.0.2): resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} peerDependencies: @@ -1657,6 +1687,12 @@ packages: resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} dev: true + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.8.1 + dev: true + /magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} dependencies: @@ -1713,6 +1749,13 @@ packages: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + dev: true + /optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1746,6 +1789,13 @@ packages: callsites: 3.1.0 dev: true + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + dev: true + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -1989,7 +2039,7 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.25 chokidar: 4.0.3 - fdir: 6.4.3 + fdir: 6.4.4(picomatch@4.0.2) picocolors: 1.1.1 sade: 1.8.1 svelte: 5.28.1 @@ -2015,6 +2065,18 @@ packages: svelte: 5.28.1 dev: true + /svelte2tsx@0.7.36(svelte@5.28.1)(typescript@5.8.2): + resolution: {integrity: sha512-nBlERuCZRwmpebC8m0vDqZ9oaKsqW8frQS2l3zwFQW1voQIkItYtHxh1F5OTZEmE0meDIH6cxU36eIOQVOxlCw==} + peerDependencies: + svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 + typescript: ^4.9.4 || ^5.0.0 + dependencies: + dedent-js: 1.0.1 + pascal-case: 3.1.2 + svelte: 5.28.1 + typescript: 5.8.2 + dev: true + /svelte@5.28.1: resolution: {integrity: sha512-iOa9WmfNG95lSOSJdMhdjJ4Afok7IRAQYXpbnxhd5EINnXseG0GVa9j6WPght4eX78XfFez45Fi+uRglGKPV/Q==} engines: {node: '>=18'}