├── .github └── workflows │ ├── ci.yml │ └── release.yml ├── .gitignore ├── .nycrc ├── LICENSE.txt ├── README.md ├── jest.config.js ├── package.json ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── global.css ├── index.html ├── site.webmanifest └── thumbnail.png ├── rollup.config.js ├── src ├── App.svelte ├── Components │ ├── Footer.svelte │ ├── Icon.svelte │ ├── Player.svelte │ └── Tooltip.svelte ├── assets │ └── alipay │ │ ├── diaoluo_da.mp3 │ │ ├── tts_0.mp3 │ │ ├── tts_1.mp3 │ │ ├── tts_2.mp3 │ │ ├── tts_3.mp3 │ │ ├── tts_4.mp3 │ │ ├── tts_5.mp3 │ │ ├── tts_6.mp3 │ │ ├── tts_7.mp3 │ │ ├── tts_8.mp3 │ │ ├── tts_9.mp3 │ │ ├── tts_dot.mp3 │ │ ├── tts_hundred.mp3 │ │ ├── tts_koubei_daibo.mp3 │ │ ├── tts_success.mp3 │ │ ├── tts_ten.mp3 │ │ ├── tts_ten_million.mp3 │ │ ├── tts_ten_thousand.mp3 │ │ ├── tts_thousand.mp3 │ │ └── tts_yuan.mp3 ├── lib │ ├── __tests__ │ │ └── parser.spec.ts │ ├── audio-merger.ts │ ├── parser.ts │ └── tts.ts ├── main.ts └── types │ └── eva-icons.d.ts ├── svelte.config.js ├── tsconfig.json └── yarn.lock /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: CI 4 | 5 | # Controls when the action will run. 6 | on: [push, pull_request, workflow_dispatch] 7 | 8 | jobs: 9 | test-with-coverage: 10 | runs-on: ubuntu-latest 11 | 12 | # Steps represent a sequence of tasks that will be executed as part of the job 13 | steps: 14 | - uses: actions/checkout@v2 15 | - name: Install 16 | uses: CultureHQ/actions-yarn@master 17 | with: 18 | args: install 19 | - name: Test 20 | uses: CultureHQ/actions-yarn@master 21 | with: 22 | args: coverage 23 | - name: Svelte-check 24 | uses: CultureHQ/actions-yarn@master 25 | with: 26 | args: validate 27 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: [workflow_dispatch] 4 | 5 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 6 | jobs: 7 | # This workflow contains a single job called "build" 8 | build: 9 | # The type of runner that the job will run on 10 | runs-on: ubuntu-latest 11 | 12 | # Steps represent a sequence of tasks that will be executed as part of the job 13 | steps: 14 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 15 | - uses: actions/checkout@v2 16 | 17 | - uses: actions/setup-node@v2 18 | with: 19 | node-version: '14' 20 | 21 | - name: install dependencies 22 | run: yarn install 23 | 24 | - name: build 25 | run: yarn build 26 | 27 | - name: Deploy to GitHub Pages 28 | if: success() 29 | uses: crazy-max/ghaction-github-pages@v2 30 | with: 31 | target_branch: master 32 | build_dir: public 33 | repo: sayTheMoney/sayTheMoney.github.io 34 | commit_message: "release ${{ github.sha }} @ ${{ github.ref }}" 35 | env: 36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 37 | GH_PAT: ${{ secrets.GH_PAT }} 38 | 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | /coverage/ 4 | 5 | .DS_Store 6 | 7 | .vscode/ 8 | .nyc_output/ 9 | yarn-error.log 10 | -------------------------------------------------------------------------------- /.nycrc: -------------------------------------------------------------------------------- 1 | { 2 | "cache": false, 3 | "check-coverage": false, 4 | "extension": [ 5 | ".ts" 6 | ], 7 | "include": [ 8 | "src/**/*.js", 9 | "src/**/*.ts" 10 | ], 11 | "exclude": [ 12 | "coverage/**", 13 | "node_modules/**", 14 | "**/*.d.ts", 15 | "**/*.test.ts", 16 | "src/main.ts" 17 | ], 18 | "sourceMap": true, 19 | "reporter": [ 20 | "html", 21 | "text", 22 | "text-summary" 23 | ], 24 | "all": true, 25 | "instrument": true 26 | } 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [year] [fullname] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | *Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)* 2 | 3 | --- 4 | 5 | # svelte app 6 | 7 | This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template. 8 | 9 | To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit): 10 | 11 | ```bash 12 | npx degit sveltejs/template svelte-app 13 | cd svelte-app 14 | ``` 15 | 16 | *Note that you will need to have [Node.js](https://nodejs.org) installed.* 17 | 18 | 19 | ## Get started 20 | 21 | Install the dependencies... 22 | 23 | ```bash 24 | cd svelte-app 25 | npm install 26 | ``` 27 | 28 | ...then start [Rollup](https://rollupjs.org): 29 | 30 | ```bash 31 | npm run dev 32 | ``` 33 | 34 | Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes. 35 | 36 | By default, the server will only respond to requests from localhost. To allow connections from other computers, edit the `sirv` commands in package.json to include the option `--host 0.0.0.0`. 37 | 38 | If you're using [Visual Studio Code](https://code.visualstudio.com/) we recommend installing the official extension [Svelte for VS Code](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). If you are using other editors you may need to install a plugin in order to get syntax highlighting and intellisense. 39 | 40 | ## Building and running in production mode 41 | 42 | To create an optimised version of the app: 43 | 44 | ```bash 45 | npm run build 46 | ``` 47 | 48 | You can run the newly built app with `npm run start`. This uses [sirv](https://github.com/lukeed/sirv), which is included in your package.json's `dependencies` so that the app will work when you deploy to platforms like [Heroku](https://heroku.com). 49 | 50 | 51 | ## Single-page app mode 52 | 53 | By default, sirv will only respond to requests that match files in `public`. This is to maximise compatibility with static fileservers, allowing you to deploy your app anywhere. 54 | 55 | If you're building a single-page app (SPA) with multiple routes, sirv needs to be able to respond to requests for *any* path. You can make it so by editing the `"start"` command in package.json: 56 | 57 | ```js 58 | "start": "sirv public --single" 59 | ``` 60 | 61 | ## Using TypeScript 62 | 63 | This template comes with a script to set up a TypeScript development environment, you can run it immediately after cloning the template with: 64 | 65 | ```bash 66 | node scripts/setupTypeScript.js 67 | ``` 68 | 69 | Or remove the script via: 70 | 71 | ```bash 72 | rm scripts/setupTypeScript.js 73 | ``` 74 | 75 | ## Deploying to the web 76 | 77 | ### With [Vercel](https://vercel.com) 78 | 79 | Install `vercel` if you haven't already: 80 | 81 | ```bash 82 | npm install -g vercel 83 | ``` 84 | 85 | Then, from within your project folder: 86 | 87 | ```bash 88 | cd public 89 | vercel deploy --name my-project 90 | ``` 91 | 92 | ### With [surge](https://surge.sh/) 93 | 94 | Install `surge` if you haven't already: 95 | 96 | ```bash 97 | npm install -g surge 98 | ``` 99 | 100 | Then, from within your project folder: 101 | 102 | ```bash 103 | npm run build 104 | surge public my-project.surge.sh 105 | ``` 106 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | * For a detailed explanation regarding each configuration property, visit: 3 | * https://jestjs.io/docs/en/configuration.html 4 | */ 5 | 6 | module.exports = { 7 | // All imported modules in your tests should be mocked automatically 8 | // automock: false, 9 | 10 | // Stop running tests after `n` failures 11 | // bail: 0, 12 | 13 | // The directory where Jest should store its cached dependency information 14 | // cacheDirectory: "C:\\Users\\sayTheMoney\\AppData\\Local\\Temp\\jest", 15 | 16 | // Automatically clear mock calls and instances between every test 17 | clearMocks: true, 18 | 19 | // Indicates whether the coverage information should be collected while executing the test 20 | // NOTE: jest coverage doesn't work in ts-node which is required to make 'rewire' work 21 | // so jest coverage collection is disabled and nyc is used instead 22 | collectCoverage: false, 23 | 24 | // An array of glob patterns indicating a set of files for which coverage information should be collected 25 | // collectCoverageFrom: undefined, 26 | 27 | // The directory where Jest should output its coverage files 28 | // coverageDirectory: "coverage", 29 | 30 | // An array of regexp pattern strings used to skip coverage collection 31 | // coveragePathIgnorePatterns: [ 32 | // "\\\\node_modules\\\\" 33 | // ], 34 | 35 | // Indicates which provider should be used to instrument code for coverage 36 | // coverageProvider: "v8", 37 | 38 | // A list of reporter names that Jest uses when writing coverage reports 39 | // coverageReporters: [ 40 | // "json", 41 | // "text", 42 | // "lcov", 43 | // "clover" 44 | // ], 45 | 46 | // An object that configures minimum threshold enforcement for coverage results 47 | // coverageThreshold: undefined, 48 | 49 | // A path to a custom dependency extractor 50 | // dependencyExtractor: undefined, 51 | 52 | // Make calling deprecated APIs throw helpful error messages 53 | // errorOnDeprecated: false, 54 | 55 | // Force coverage collection from ignored files using an array of glob patterns 56 | // forceCoverageMatch: [], 57 | 58 | // A path to a module which exports an async function that is triggered once before all test suites 59 | // globalSetup: undefined, 60 | 61 | // A path to a module which exports an async function that is triggered once after all test suites 62 | // globalTeardown: undefined, 63 | 64 | // A set of global variables that need to be available in all test environments 65 | globals: { 66 | 'ts-jest': { 67 | isolatedModules: true 68 | } 69 | }, 70 | 71 | // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. 72 | // maxWorkers: "50%", 73 | 74 | // An array of directory names to be searched recursively up from the requiring module's location 75 | // moduleDirectories: [ 76 | // "node_modules" 77 | // ], 78 | 79 | // An array of file extensions your modules use 80 | // moduleFileExtensions: [ 81 | // "js", 82 | // "json", 83 | // "jsx", 84 | // "ts", 85 | // "tsx", 86 | // "node" 87 | // ], 88 | 89 | // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module 90 | // moduleNameMapper: {}, 91 | 92 | // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader 93 | // modulePathIgnorePatterns: [], 94 | 95 | // Activates notifications for test results 96 | // notify: false, 97 | 98 | // An enum that specifies notification mode. Requires { notify: true } 99 | // notifyMode: "failure-change", 100 | 101 | // A preset that is used as a base for Jest's configuration 102 | preset: "ts-jest", 103 | 104 | // Run tests from one or more projects 105 | // projects: undefined, 106 | 107 | // Use this configuration option to add custom reporters to Jest 108 | // reporters: undefined, 109 | 110 | // Automatically reset mock state between every test 111 | // resetMocks: false, 112 | 113 | // Reset the module registry before running each individual test 114 | // resetModules: false, 115 | 116 | // A path to a custom resolver 117 | // resolver: undefined, 118 | 119 | // Automatically restore mock state between every test 120 | // restoreMocks: false, 121 | 122 | // The root directory that Jest should scan for tests and modules within 123 | // rootDir: undefined, 124 | 125 | // A list of paths to directories that Jest should use to search for files in 126 | // roots: [ 127 | // "" 128 | // ], 129 | 130 | // Allows you to use a custom runner instead of Jest's default test runner 131 | // runner: "jest-runner", 132 | 133 | // The paths to modules that run some code to configure or set up the testing environment before each test 134 | // setupFiles: [], 135 | 136 | // A list of paths to modules that run some code to configure or set up the testing framework before each test 137 | // setupFilesAfterEnv: [], 138 | 139 | // The number of seconds after which a test is considered as slow and reported as such in the results. 140 | // slowTestThreshold: 5, 141 | 142 | // A list of paths to snapshot serializer modules Jest should use for snapshot testing 143 | // snapshotSerializers: [], 144 | 145 | // The test environment that will be used for testing 146 | testEnvironment: "node", 147 | 148 | // Options that will be passed to the testEnvironment 149 | // testEnvironmentOptions: {}, 150 | 151 | // Adds a location field to test results 152 | // testLocationInResults: false, 153 | 154 | // The glob patterns Jest uses to detect test files 155 | // testMatch: [ 156 | // "**/__tests__/**/*.[jt]s?(x)", 157 | // "**/?(*.)+(spec|test).[tj]s?(x)" 158 | // ], 159 | 160 | // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped 161 | // testPathIgnorePatterns: [ 162 | // "\\\\node_modules\\\\" 163 | // ], 164 | 165 | // The regexp pattern or array of patterns that Jest uses to detect test files 166 | // testRegex: [], 167 | 168 | // This option allows the use of a custom results processor 169 | // testResultsProcessor: undefined, 170 | 171 | // This option allows use of a custom test runner 172 | // testRunner: "jasmine2", 173 | 174 | // This option sets the URL for the jsdom environment. It is reflected in properties such as location.href 175 | // testURL: "http://localhost", 176 | 177 | // Setting this value to "fake" allows the use of fake timers for functions such as "setTimeout" 178 | // timers: "real", 179 | 180 | // A map from regular expressions to paths to transformers 181 | // transform: undefined, 182 | 183 | // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation 184 | // transformIgnorePatterns: [ 185 | // "\\\\node_modules\\\\", 186 | // "\\.pnp\\.[^\\\\]+$" 187 | // ], 188 | 189 | // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them 190 | // unmockedModulePathPatterns: undefined, 191 | 192 | // Indicates whether each individual test should be reported during the run 193 | // verbose: undefined, 194 | 195 | // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode 196 | // watchPathIgnorePatterns: [], 197 | 198 | // Whether to use watchman for file crawling 199 | // watchman: true, 200 | }; 201 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "say-the-money", 3 | "version": "1.0.0", 4 | "license": "MIT", 5 | "scripts": { 6 | "build": "rollup -c", 7 | "dev": "rollup -c -w", 8 | "start": "sirv public", 9 | "validate": "svelte-check --fail-on-warnings --fail-on-hints", 10 | "test": "ts-node node_modules/jest/bin/jest.js", 11 | "coverage": "nyc npm run test", 12 | "precommit-msg": "echo 'Pre-commit checks...'" 13 | }, 14 | "precommit": [ 15 | "precommit-msg", 16 | "validate", 17 | "coverage" 18 | ], 19 | "devDependencies": { 20 | "@rollup/plugin-commonjs": "^16.0.0", 21 | "@rollup/plugin-node-resolve": "^10.0.0", 22 | "@rollup/plugin-typescript": "^6.0.0", 23 | "@tsconfig/svelte": "^1.0.0", 24 | "@types/jest": "^26.0.19", 25 | "@types/rewire": "^2.5.28", 26 | "jest": "^26.6.3", 27 | "nyc": "^15.1.0", 28 | "pre-commit": "^1.2.2", 29 | "rewire": "^5.0.0", 30 | "rollup": "^2.3.4", 31 | "rollup-plugin-copy-assets": "^2.0.3", 32 | "rollup-plugin-css-only": "^3.0.0", 33 | "rollup-plugin-livereload": "^2.0.0", 34 | "rollup-plugin-svelte": "^7.0.0", 35 | "rollup-plugin-terser": "^7.0.0", 36 | "svelte": "^3.0.0", 37 | "svelte-check": "^1.1.23", 38 | "svelte-preprocess": "^4.0.0", 39 | "ts-jest": "^26.4.4", 40 | "ts-node": "^9.1.1", 41 | "tslib": "^2.0.0", 42 | "typescript": "^3.9.3" 43 | }, 44 | "dependencies": { 45 | "crunker": "^0.3.0", 46 | "eva-icons": "^1.1.3", 47 | "milligram": "^1.4.1", 48 | "normalize.css": "^8.0.1", 49 | "sirv-cli": "^1.0.0" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/favicon.ico -------------------------------------------------------------------------------- /public/global.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/global.css -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 即刻到账 - 支付宝到账音效生成器 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | {"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"} -------------------------------------------------------------------------------- /public/thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sayTheMoney/sayTheMoney-svelte/d0f49a0f5078344b92e09fe9bbb9f186a4b836bc/public/thumbnail.png -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import typescript from '@rollup/plugin-typescript'; 7 | import css from 'rollup-plugin-css-only'; 8 | import copy from "rollup-plugin-copy-assets"; 9 | 10 | const createPreprocessors = require('./svelte.config').createPreprocessors; 11 | 12 | const production = !process.env.ROLLUP_WATCH; 13 | 14 | function serve() { 15 | let server; 16 | 17 | function toExit() { 18 | if (server) server.kill(0); 19 | } 20 | 21 | return { 22 | writeBundle() { 23 | if (server) return; 24 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 25 | stdio: ['ignore', 'inherit', 'inherit'], 26 | shell: true 27 | }); 28 | 29 | process.on('SIGTERM', toExit); 30 | process.on('exit', toExit); 31 | } 32 | }; 33 | } 34 | 35 | export default { 36 | input: 'src/main.ts', 37 | output: { 38 | sourcemap: true, 39 | format: 'iife', 40 | name: 'app', 41 | file: 'public/build/bundle.js' 42 | }, 43 | plugins: [ 44 | svelte({ 45 | preprocess: createPreprocessors(!production), 46 | compilerOptions: { 47 | // enable run-time checks when not in production 48 | dev: !production 49 | } 50 | }), 51 | // we'll extract any component CSS out into 52 | // a separate file - better for performance 53 | css({ output: 'bundle.css' }), 54 | 55 | // If you have external dependencies installed from 56 | // npm, you'll most likely need these plugins. In 57 | // some cases you'll need additional configuration - 58 | // consult the documentation for details: 59 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 60 | resolve({ 61 | browser: true, 62 | dedupe: ['svelte'] 63 | }), 64 | commonjs(), 65 | typescript({ 66 | sourceMap: !production, 67 | inlineSources: !production 68 | }), 69 | copy({ 70 | assets: [ 71 | "src/assets", 72 | ], 73 | }), 74 | 75 | // In dev mode, call `npm run start` once 76 | // the bundle has been generated 77 | !production && serve(), 78 | 79 | // Watch the `public` directory and refresh the 80 | // browser on changes when not in production 81 | !production && livereload('public'), 82 | 83 | // If we're building for production (npm run build 84 | // instead of npm run dev), minify 85 | production && terser() 86 | ], 87 | watch: { 88 | clearScreen: false 89 | } 90 | }; 91 | -------------------------------------------------------------------------------- /src/App.svelte: -------------------------------------------------------------------------------- 1 | 8 | 9 |
10 |
11 |
12 |

💸  💰

13 |

💴💵💶💳💷

14 |

输入金额,即刻到账!

15 |
16 |
17 | 18 |
19 |
20 | 21 |