From 5db4d61d648780670c1a8406a5478ad62d859721 Mon Sep 17 00:00:00 2001 From: 0nepeop1e Date: Wed, 12 Jun 2024 14:34:28 +0800 Subject: [PATCH] init --- .gitignore | 24 ++++++++++++ .husky/pre-commit | 13 +++++++ .prettierignore | 4 ++ .prettierrc | 32 ++++++++++++++++ .vscode/extensions.json | 3 ++ README.md | 47 ++++++++++++++++++++++++ bun.lockb | Bin 0 -> 89785 bytes index.html | 13 +++++++ package.json | 31 ++++++++++++++++ postcss.config.cjs | 15 ++++++++ src/App.svelte | 79 ++++++++++++++++++++++++++++++++++++++++ src/app.pcss | 10 +++++ src/chats.ts | 4 ++ src/main.ts | 25 +++++++++++++ src/vite-env.d.ts | 7 ++++ svelte.config.js | 7 ++++ tailwind.config.cjs | 12 ++++++ tsconfig.json | 23 ++++++++++++ tsconfig.node.json | 12 ++++++ vite.config.ts | 36 ++++++++++++++++++ 20 files changed, 397 insertions(+) create mode 100644 .gitignore create mode 100755 .husky/pre-commit create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/extensions.json create mode 100644 README.md create mode 100755 bun.lockb create mode 100644 index.html create mode 100644 package.json create mode 100644 postcss.config.cjs create mode 100644 src/App.svelte create mode 100644 src/app.pcss create mode 100644 src/chats.ts create mode 100644 src/main.ts create mode 100644 src/vite-env.d.ts create mode 100644 svelte.config.js create mode 100644 tailwind.config.cjs create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..f5e74d7 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,13 @@ +#!/usr/bin/env sh +. "$(dirname -- "$0")/_/husky.sh" + +FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g') +[ -z "$FILES" ] && exit 0 + +# Prettify all selected files +echo "$FILES" | xargs ./node_modules/.bin/prettier --ignore-unknown --write + +# Add back the modified/prettified files to staging +echo "$FILES" | xargs git add + +exit 0 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..cc41cea --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +# Ignore files for PNPM, NPM and YARN +pnpm-lock.yaml +package-lock.json +yarn.lock diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..6bc6b0a --- /dev/null +++ b/.prettierrc @@ -0,0 +1,32 @@ +{ + "useTabs": false, + "tabWidth": 4, + "singleQuote": true, + "trailingComma": "none", + "printWidth": 100, + "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-svelte"], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte", + "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-svelte"] + } + }, + { + "files": "*.svx", + "options": { + "parser": "mdx", + "plugins": ["prettier-plugin-tailwindcss", "prettier-plugin-svelte"], + "tabWidth": 2 + } + }, + { + "files": "*.{json,yaml,yml,prettierrc}", + "options": { + "tabWidth": 2, + "printWidth": 200 + } + } + ] +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..bdef820 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..4c11adf --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# Svelte + TS + Vite + +This template should help get you started developing with Svelte and TypeScript in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + TypeScript + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `allowJs` in the TS template?** + +While `allowJs: false` would indeed prevent the use of `.js` files in the project, it does not prevent the use of JavaScript syntax in `.svelte` files. In addition, it would force `checkJs: false`, bringing the worst of both worlds: not being able to guarantee the entire codebase is TypeScript, and also having worse typechecking for the existing JavaScript. In addition, there are valid use cases in which a mixed codebase may be relevant. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/rixo/svelte-hmr#svelte-hmr). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```ts +// store.ts +// An extremely simple external store +import { writable } from 'svelte/store'; +export default writable(0); +``` diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..5ecd04352d3d832453dd09d083481f1d866ac598 GIT binary patch literal 89785 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 literal 0 HcmV?d00001 diff --git a/index.html b/index.html new file mode 100644 index 0000000..728be1d --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + Chat + + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..80360d8 --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "onecomme-chat", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json" + }, + "devDependencies": { + "@onecomme.com/onesdk": "^5.2.1", + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "@tsconfig/svelte": "^5.0.2", + "@types/node": "^20.14.2", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "postcss-load-config": "^5.0.2", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.4", + "prettier-plugin-tailwindcss": "^0.6.3", + "svelte": "^4.2.11", + "svelte-check": "^3.6.4", + "tailwindcss": "^3.3.6", + "tslib": "^2.6.2", + "typescript": "^5.2.2", + "vite": "^5.1.4", + "husky": "^8.0.0" + } +} diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..e4ab9eb --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,15 @@ +const tailwindcss = require('tailwindcss'); +const nesting = require('tailwindcss/nesting'); +const autoprefixer = require('autoprefixer'); + +const config = { + plugins: [ + nesting(), + //Some plugins, like tailwindcss/nesting, need to run before Tailwind, + tailwindcss(), + //But others, like autoprefixer, need to run after, + autoprefixer + ] +}; + +module.exports = config; diff --git a/src/App.svelte b/src/App.svelte new file mode 100644 index 0000000..23bb523 --- /dev/null +++ b/src/App.svelte @@ -0,0 +1,79 @@ + + +
+ {#each [...$chats].reverse() as chat (`${chat.service}/${chat.data.id}`)} + {@const author = chat.data.displayName ?? chat.data.name} +
+
+ {author} +
+
+
+ {author} + {#each chat.data.badges as badge} + {badge.label} + {/each} +
+
+ {@html chat.data.comment} +
+
+
+ {/each} +
+ + diff --git a/src/app.pcss b/src/app.pcss new file mode 100644 index 0000000..4f11869 --- /dev/null +++ b/src/app.pcss @@ -0,0 +1,10 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + html, + body { + background-color: transparent; + } +} diff --git a/src/chats.ts b/src/chats.ts new file mode 100644 index 0000000..5046097 --- /dev/null +++ b/src/chats.ts @@ -0,0 +1,4 @@ +import type { Comment } from '@onecomme.com/onesdk/types/Comment'; +import { writable } from 'svelte/store'; + +export const chats = writable([]); diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..a658236 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,25 @@ +import './app.pcss'; +import App from './App.svelte'; +import type { Comment } from '@onecomme.com/onesdk/types/Comment'; +import { chats } from './chats'; + +if (import.meta.env.DEV) { + globalThis.OneSDK = (await import('@onecomme.com/onesdk')).default; +} + +OneSDK.subscribe({ + action: 'comments', + callback: ((res: Comment[]) => { + chats.set(res); + }) as any +}); +OneSDK.setup({ + commentLimit: 30 +}); +OneSDK.connect(); + +const app = new App({ + target: document.getElementById('app')! +}); + +export default app; diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..60edf37 --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// +/// +import { OneSDK } from '@onecomme.com/onesdk/OneSDK'; + +declare global { + var OneSDK: OneSDK; +} diff --git a/svelte.config.js b/svelte.config.js new file mode 100644 index 0000000..560d5b9 --- /dev/null +++ b/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: [vitePreprocess({})] +}; diff --git a/tailwind.config.cjs b/tailwind.config.cjs new file mode 100644 index 0000000..aac8bac --- /dev/null +++ b/tailwind.config.cjs @@ -0,0 +1,12 @@ +/** @type {import('tailwindcss').Config}*/ +const config = { + content: ['./src/**/*.{html,js,svelte,ts}'], + + theme: { + extend: {} + }, + + plugins: [] +}; + +module.exports = config; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..b1c59f3 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,23 @@ +{ + "extends": "@tsconfig/svelte/tsconfig.json", + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ESNext"], + "resolveJsonModule": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable checkJs if you'd like to use dynamic types in JS. + * Note that setting allowJs false does not prevent the use + * of JS in `.svelte` files. + */ + "allowJs": true, + "checkJs": true, + "isolatedModules": true, + "verbatimModuleSyntax": true, + "noUnusedLocals": true + }, + "include": ["src/**/*.ts", "src/**/*.js", "src/**/*.svelte"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..b79b8c4 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "lib": ["ESNext"], + "types": ["@types/node"] + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..9373e7c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,36 @@ +import { defineConfig } from 'vite'; +import { svelte } from '@sveltejs/vite-plugin-svelte'; +import { resolve } from 'node:path'; +import { writeFileSync } from 'node:fs'; + +// https://vitejs.dev/config/ +export default defineConfig({ + base: './', + plugins: [svelte()], + build: { + rollupOptions: { + plugins: [ + { + name: 'inject-onecomme-js', + writeBundle(out, bundle) { + for (const entry of Object.values(bundle)) { + if (!entry.fileName.endsWith('.html') || entry.type !== 'asset') { + continue; + } + const file = resolve(out.dir ?? 'dist', entry.fileName); + writeFileSync( + file, + entry.source + .toString() + .replaceAll( + '', + '' + ) + ); + } + } + } + ] + } + } +});