├── README.md
├── alpine-app
└── index.html
├── angular-app
├── .browserslistrc
├── .editorconfig
├── .gitignore
├── README.md
├── angular.json
├── karma.conf.js
├── package-lock.json
├── package.json
├── src
│ ├── app
│ │ ├── app-routing.module.ts
│ │ ├── app.component.css
│ │ ├── app.component.html
│ │ ├── app.component.spec.ts
│ │ ├── app.component.ts
│ │ └── app.module.ts
│ ├── assets
│ │ └── .gitkeep
│ ├── environments
│ │ ├── environment.prod.ts
│ │ └── environment.ts
│ ├── favicon.ico
│ ├── index.html
│ ├── main.ts
│ ├── polyfills.ts
│ ├── styles.css
│ └── test.ts
├── tsconfig.app.json
├── tsconfig.json
└── tsconfig.spec.json
├── lit-app
├── .editorconfig
├── .gitignore
├── LICENSE
├── README.md
├── custom-elements.json
├── demo
│ └── index.html
├── index.ts
├── lit-app.ts
├── package-lock.json
├── package.json
├── src
│ └── LitApp.ts
├── tsconfig.json
└── web-dev-server.config.mjs
├── mithril-app
└── index.html
├── react-app
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
└── src
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── index.css
│ ├── index.js
│ ├── logo.svg
│ ├── reportWebVitals.js
│ └── setupTests.js
├── solid-app
├── .gitignore
├── README.md
├── index.html
├── package-lock.json
├── package.json
├── pnpm-lock.yaml
├── src
│ ├── App.jsx
│ ├── App.module.css
│ ├── assets
│ │ └── favicon.ico
│ ├── index.css
│ ├── index.jsx
│ └── logo.svg
└── vite.config.js
├── stencil-app
├── .editorconfig
├── .gitignore
├── .prettierrc.json
├── LICENSE
├── package-lock.json
├── package.json
├── readme.md
├── src
│ ├── components.d.ts
│ ├── components
│ │ └── my-component
│ │ │ ├── my-component.css
│ │ │ ├── my-component.e2e.ts
│ │ │ ├── my-component.spec.ts
│ │ │ ├── my-component.tsx
│ │ │ └── readme.md
│ ├── index.html
│ ├── index.ts
│ └── utils
│ │ ├── utils.spec.ts
│ │ └── utils.ts
├── stencil.config.ts
└── tsconfig.json
├── svelte-app
├── .gitignore
├── README.md
├── package-lock.json
├── package.json
├── public
│ ├── favicon.png
│ ├── global.css
│ └── index.html
├── rollup.config.js
├── scripts
│ └── setupTypeScript.js
└── src
│ ├── App.svelte
│ └── main.js
├── vanilla-app
└── index.html
└── vue-app
├── .gitignore
├── README.md
├── babel.config.js
├── package-lock.json
├── package.json
├── public
├── favicon.ico
└── index.html
└── src
├── App.vue
├── assets
└── logo.png
├── components
└── HelloWorld.vue
└── main.js
/README.md:
--------------------------------------------------------------------------------
1 | # 10 Framework Comparsion
2 |
3 | Build a simple todo app with...
4 |
5 | 1. Vanilla JS
6 | 1. React
7 | 1. Angular
8 | 1. Vue
9 | 1. Svelte
10 | 1. Lit
11 | 1. Alpine
12 | 1. Solid
13 | 1. Stencil
14 | 1. Mithril
15 |
16 | Watch the full [JS framework comparison](https://youtu.be/cuHDQhDhvPE) on YouTube
17 |
--------------------------------------------------------------------------------
/alpine-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 |
12 |
13 |
14 |
25 |
26 |
41 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/angular-app/.browserslistrc:
--------------------------------------------------------------------------------
1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
2 | # For additional information regarding the format and rule options, please see:
3 | # https://github.com/browserslist/browserslist#queries
4 |
5 | # For the full list of supported browsers by the Angular framework, please see:
6 | # https://angular.io/guide/browser-support
7 |
8 | # You can see what browsers were selected by your queries by running:
9 | # npx browserslist
10 |
11 | last 1 Chrome version
12 | last 1 Firefox version
13 | last 2 Edge major versions
14 | last 2 Safari major versions
15 | last 2 iOS major versions
16 | Firefox ESR
17 | not IE 11 # Angular supports IE 11 only as an opt-in. To opt-in, remove the 'not' prefix on this line.
18 |
--------------------------------------------------------------------------------
/angular-app/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 2
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.ts]
12 | quote_type = single
13 |
14 | [*.md]
15 | max_line_length = off
16 | trim_trailing_whitespace = false
17 |
--------------------------------------------------------------------------------
/angular-app/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 | /out-tsc
7 | # Only exists if Bazel was run
8 | /bazel-out
9 |
10 | # dependencies
11 | /node_modules
12 |
13 | # profiling files
14 | chrome-profiler-events*.json
15 |
16 | # IDEs and editors
17 | /.idea
18 | .project
19 | .classpath
20 | .c9/
21 | *.launch
22 | .settings/
23 | *.sublime-workspace
24 |
25 | # IDE - VSCode
26 | .vscode/*
27 | !.vscode/settings.json
28 | !.vscode/tasks.json
29 | !.vscode/launch.json
30 | !.vscode/extensions.json
31 | .history/*
32 |
33 | # misc
34 | /.sass-cache
35 | /connect.lock
36 | /coverage
37 | /libpeerconnection.log
38 | npm-debug.log
39 | yarn-error.log
40 | testem.log
41 | /typings
42 |
43 | # System Files
44 | .DS_Store
45 | Thumbs.db
46 |
--------------------------------------------------------------------------------
/angular-app/README.md:
--------------------------------------------------------------------------------
1 | # AngularApp
2 |
3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 12.0.1.
4 |
5 | ## Development server
6 |
7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files.
8 |
9 | ## Code scaffolding
10 |
11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
12 |
13 | ## Build
14 |
15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
16 |
17 | ## Running unit tests
18 |
19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
20 |
21 | ## Running end-to-end tests
22 |
23 | Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities.
24 |
25 | ## Further help
26 |
27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
28 |
--------------------------------------------------------------------------------
/angular-app/angular.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
3 | "version": 1,
4 | "newProjectRoot": "projects",
5 | "projects": {
6 | "angular-app": {
7 | "projectType": "application",
8 | "schematics": {
9 | "@schematics/angular:application": {
10 | "strict": true
11 | }
12 | },
13 | "root": "",
14 | "sourceRoot": "src",
15 | "prefix": "app",
16 | "architect": {
17 | "build": {
18 | "builder": "@angular-devkit/build-angular:browser",
19 | "options": {
20 | "outputPath": "dist/angular-app",
21 | "index": "src/index.html",
22 | "main": "src/main.ts",
23 | "polyfills": "src/polyfills.ts",
24 | "tsConfig": "tsconfig.app.json",
25 | "assets": [
26 | "src/favicon.ico",
27 | "src/assets"
28 | ],
29 | "styles": [
30 | "src/styles.css"
31 | ],
32 | "scripts": []
33 | },
34 | "configurations": {
35 | "production": {
36 | "budgets": [
37 | {
38 | "type": "initial",
39 | "maximumWarning": "500kb",
40 | "maximumError": "1mb"
41 | },
42 | {
43 | "type": "anyComponentStyle",
44 | "maximumWarning": "2kb",
45 | "maximumError": "4kb"
46 | }
47 | ],
48 | "fileReplacements": [
49 | {
50 | "replace": "src/environments/environment.ts",
51 | "with": "src/environments/environment.prod.ts"
52 | }
53 | ],
54 | "outputHashing": "all"
55 | },
56 | "development": {
57 | "buildOptimizer": false,
58 | "optimization": false,
59 | "vendorChunk": true,
60 | "extractLicenses": false,
61 | "sourceMap": true,
62 | "namedChunks": true
63 | }
64 | },
65 | "defaultConfiguration": "production"
66 | },
67 | "serve": {
68 | "builder": "@angular-devkit/build-angular:dev-server",
69 | "configurations": {
70 | "production": {
71 | "browserTarget": "angular-app:build:production"
72 | },
73 | "development": {
74 | "browserTarget": "angular-app:build:development"
75 | }
76 | },
77 | "defaultConfiguration": "development"
78 | },
79 | "extract-i18n": {
80 | "builder": "@angular-devkit/build-angular:extract-i18n",
81 | "options": {
82 | "browserTarget": "angular-app:build"
83 | }
84 | },
85 | "test": {
86 | "builder": "@angular-devkit/build-angular:karma",
87 | "options": {
88 | "main": "src/test.ts",
89 | "polyfills": "src/polyfills.ts",
90 | "tsConfig": "tsconfig.spec.json",
91 | "karmaConfig": "karma.conf.js",
92 | "assets": [
93 | "src/favicon.ico",
94 | "src/assets"
95 | ],
96 | "styles": [
97 | "src/styles.css"
98 | ],
99 | "scripts": []
100 | }
101 | }
102 | }
103 | }
104 | },
105 | "defaultProject": "angular-app"
106 | }
107 |
--------------------------------------------------------------------------------
/angular-app/karma.conf.js:
--------------------------------------------------------------------------------
1 | // Karma configuration file, see link for more information
2 | // https://karma-runner.github.io/1.0/config/configuration-file.html
3 |
4 | module.exports = function (config) {
5 | config.set({
6 | basePath: '',
7 | frameworks: ['jasmine', '@angular-devkit/build-angular'],
8 | plugins: [
9 | require('karma-jasmine'),
10 | require('karma-chrome-launcher'),
11 | require('karma-jasmine-html-reporter'),
12 | require('karma-coverage'),
13 | require('@angular-devkit/build-angular/plugins/karma')
14 | ],
15 | client: {
16 | jasmine: {
17 | // you can add configuration options for Jasmine here
18 | // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
19 | // for example, you can disable the random execution with `random: false`
20 | // or set a specific seed with `seed: 4321`
21 | },
22 | clearContext: false // leave Jasmine Spec Runner output visible in browser
23 | },
24 | jasmineHtmlReporter: {
25 | suppressAll: true // removes the duplicated traces
26 | },
27 | coverageReporter: {
28 | dir: require('path').join(__dirname, './coverage/angular-app'),
29 | subdir: '.',
30 | reporters: [
31 | { type: 'html' },
32 | { type: 'text-summary' }
33 | ]
34 | },
35 | reporters: ['progress', 'kjhtml'],
36 | port: 9876,
37 | colors: true,
38 | logLevel: config.LOG_INFO,
39 | autoWatch: true,
40 | browsers: ['Chrome'],
41 | singleRun: false,
42 | restartOnFileChange: true
43 | });
44 | };
45 |
--------------------------------------------------------------------------------
/angular-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "angular-app",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "ng serve",
7 | "build": "ng build",
8 | "watch": "ng build --watch --configuration development",
9 | "test": "ng test"
10 | },
11 | "private": true,
12 | "dependencies": {
13 | "@angular/animations": "~12.0.1",
14 | "@angular/common": "~12.0.1",
15 | "@angular/compiler": "~12.0.1",
16 | "@angular/core": "~12.0.1",
17 | "@angular/forms": "~12.0.1",
18 | "@angular/platform-browser": "~12.0.1",
19 | "@angular/platform-browser-dynamic": "~12.0.1",
20 | "@angular/router": "~12.0.1",
21 | "rxjs": "~6.6.0",
22 | "tslib": "^2.1.0",
23 | "zone.js": "~0.11.4"
24 | },
25 | "devDependencies": {
26 | "@angular-devkit/build-angular": "~12.0.1",
27 | "@angular/cli": "~12.0.1",
28 | "@angular/compiler-cli": "~12.0.1",
29 | "@types/jasmine": "~3.6.0",
30 | "@types/node": "^12.11.1",
31 | "jasmine-core": "~3.7.0",
32 | "karma": "~6.3.0",
33 | "karma-chrome-launcher": "~3.1.0",
34 | "karma-coverage": "~2.0.3",
35 | "karma-jasmine": "~4.0.0",
36 | "karma-jasmine-html-reporter": "^1.5.0",
37 | "typescript": "~4.2.3"
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/angular-app/src/app/app-routing.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 |
4 | const routes: Routes = [];
5 |
6 | @NgModule({
7 | imports: [RouterModule.forRoot(routes)],
8 | exports: [RouterModule]
9 | })
10 | export class AppRoutingModule { }
11 |
--------------------------------------------------------------------------------
/angular-app/src/app/app.component.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/angular-app/src/app/app.component.css
--------------------------------------------------------------------------------
/angular-app/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/angular-app/src/app/app.component.spec.ts:
--------------------------------------------------------------------------------
1 | import { TestBed } from '@angular/core/testing';
2 | import { RouterTestingModule } from '@angular/router/testing';
3 | import { AppComponent } from './app.component';
4 |
5 | describe('AppComponent', () => {
6 | beforeEach(async () => {
7 | await TestBed.configureTestingModule({
8 | imports: [
9 | RouterTestingModule
10 | ],
11 | declarations: [
12 | AppComponent
13 | ],
14 | }).compileComponents();
15 | });
16 |
17 | it('should create the app', () => {
18 | const fixture = TestBed.createComponent(AppComponent);
19 | const app = fixture.componentInstance;
20 | expect(app).toBeTruthy();
21 | });
22 |
23 | it(`should have as title 'angular-app'`, () => {
24 | const fixture = TestBed.createComponent(AppComponent);
25 | const app = fixture.componentInstance;
26 | expect(app.title).toEqual('angular-app');
27 | });
28 |
29 | it('should render title', () => {
30 | const fixture = TestBed.createComponent(AppComponent);
31 | fixture.detectChanges();
32 | const compiled = fixture.nativeElement;
33 | expect(compiled.querySelector('.content span').textContent).toContain('angular-app app is running!');
34 | });
35 | });
36 |
--------------------------------------------------------------------------------
/angular-app/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 |
3 | @Component({
4 | selector: 'app-root',
5 | templateUrl: './app.component.html',
6 | styleUrls: ['./app.component.css']
7 | })
8 | export class AppComponent {
9 |
10 | // State
11 | todos: string[] = [];
12 | todoText = '';
13 |
14 | // Lifecycle
15 | ngOnInit() {
16 | const existingTodos = localStorage.getItem('todos');
17 | this.todos = JSON.parse(existingTodos as string) || [];
18 | }
19 |
20 | // Events
21 | addTodo() {
22 | this.todos.push(this.todoText);
23 | localStorage.setItem('todos', JSON.stringify(this.todos));
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/angular-app/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { FormsModule } from '@angular/forms';
3 | import { BrowserModule } from '@angular/platform-browser';
4 |
5 | import { AppRoutingModule } from './app-routing.module';
6 | import { AppComponent } from './app.component';
7 |
8 | @NgModule({
9 | declarations: [
10 | AppComponent
11 | ],
12 | imports: [
13 | BrowserModule,
14 | AppRoutingModule,
15 | FormsModule
16 | ],
17 | providers: [],
18 | bootstrap: [AppComponent]
19 | })
20 | export class AppModule { }
21 |
--------------------------------------------------------------------------------
/angular-app/src/assets/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/angular-app/src/assets/.gitkeep
--------------------------------------------------------------------------------
/angular-app/src/environments/environment.prod.ts:
--------------------------------------------------------------------------------
1 | export const environment = {
2 | production: true
3 | };
4 |
--------------------------------------------------------------------------------
/angular-app/src/environments/environment.ts:
--------------------------------------------------------------------------------
1 | // This file can be replaced during build by using the `fileReplacements` array.
2 | // `ng build` replaces `environment.ts` with `environment.prod.ts`.
3 | // The list of file replacements can be found in `angular.json`.
4 |
5 | export const environment = {
6 | production: false
7 | };
8 |
9 | /*
10 | * For easier debugging in development mode, you can import the following file
11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
12 | *
13 | * This import should be commented out in production mode because it will have a negative impact
14 | * on performance if an error is thrown.
15 | */
16 | // import 'zone.js/plugins/zone-error'; // Included with Angular CLI.
17 |
--------------------------------------------------------------------------------
/angular-app/src/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/angular-app/src/favicon.ico
--------------------------------------------------------------------------------
/angular-app/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | AngularApp
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/angular-app/src/main.ts:
--------------------------------------------------------------------------------
1 | import { enableProdMode } from '@angular/core';
2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
3 |
4 | import { AppModule } from './app/app.module';
5 | import { environment } from './environments/environment';
6 |
7 | if (environment.production) {
8 | enableProdMode();
9 | }
10 |
11 | platformBrowserDynamic().bootstrapModule(AppModule)
12 | .catch(err => console.error(err));
13 |
--------------------------------------------------------------------------------
/angular-app/src/polyfills.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This file includes polyfills needed by Angular and is loaded before the app.
3 | * You can add your own extra polyfills to this file.
4 | *
5 | * This file is divided into 2 sections:
6 | * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
7 | * 2. Application imports. Files imported after ZoneJS that should be loaded before your main
8 | * file.
9 | *
10 | * The current setup is for so-called "evergreen" browsers; the last versions of browsers that
11 | * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),
12 | * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.
13 | *
14 | * Learn more in https://angular.io/guide/browser-support
15 | */
16 |
17 | /***************************************************************************************************
18 | * BROWSER POLYFILLS
19 | */
20 |
21 | /**
22 | * IE11 requires the following for NgClass support on SVG elements
23 | */
24 | // import 'classlist.js'; // Run `npm install --save classlist.js`.
25 |
26 | /**
27 | * Web Animations `@angular/platform-browser/animations`
28 | * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari.
29 | * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0).
30 | */
31 | // import 'web-animations-js'; // Run `npm install --save web-animations-js`.
32 |
33 | /**
34 | * By default, zone.js will patch all possible macroTask and DomEvents
35 | * user can disable parts of macroTask/DomEvents patch by setting following flags
36 | * because those flags need to be set before `zone.js` being loaded, and webpack
37 | * will put import in the top of bundle, so user need to create a separate file
38 | * in this directory (for example: zone-flags.ts), and put the following flags
39 | * into that file, and then add the following code before importing zone.js.
40 | * import './zone-flags';
41 | *
42 | * The flags allowed in zone-flags.ts are listed here.
43 | *
44 | * The following flags will work for all browsers.
45 | *
46 | * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
47 | * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
48 | * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
49 | *
50 | * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
51 | * with the following flag, it will bypass `zone.js` patch for IE/Edge
52 | *
53 | * (window as any).__Zone_enable_cross_context_check = true;
54 | *
55 | */
56 |
57 | /***************************************************************************************************
58 | * Zone JS is required by default for Angular itself.
59 | */
60 | import 'zone.js'; // Included with Angular CLI.
61 |
62 |
63 | /***************************************************************************************************
64 | * APPLICATION IMPORTS
65 | */
66 |
--------------------------------------------------------------------------------
/angular-app/src/styles.css:
--------------------------------------------------------------------------------
1 | /* You can add global styles to this file, and also import other style files */
2 |
--------------------------------------------------------------------------------
/angular-app/src/test.ts:
--------------------------------------------------------------------------------
1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2 |
3 | import 'zone.js/testing';
4 | import { getTestBed } from '@angular/core/testing';
5 | import {
6 | BrowserDynamicTestingModule,
7 | platformBrowserDynamicTesting
8 | } from '@angular/platform-browser-dynamic/testing';
9 |
10 | declare const require: {
11 | context(path: string, deep?: boolean, filter?: RegExp): {
12 | keys(): string[];
13 | (id: string): T;
14 | };
15 | };
16 |
17 | // First, initialize the Angular testing environment.
18 | getTestBed().initTestEnvironment(
19 | BrowserDynamicTestingModule,
20 | platformBrowserDynamicTesting()
21 | );
22 | // Then we find all the tests.
23 | const context = require.context('./', true, /\.spec\.ts$/);
24 | // And load the modules.
25 | context.keys().map(context);
26 |
--------------------------------------------------------------------------------
/angular-app/tsconfig.app.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/app",
6 | "types": []
7 | },
8 | "files": [
9 | "src/main.ts",
10 | "src/polyfills.ts"
11 | ],
12 | "include": [
13 | "src/**/*.d.ts"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/angular-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "compileOnSave": false,
4 | "compilerOptions": {
5 | "baseUrl": "./",
6 | "outDir": "./dist/out-tsc",
7 | "forceConsistentCasingInFileNames": true,
8 | "strict": true,
9 | "noImplicitReturns": true,
10 | "noFallthroughCasesInSwitch": true,
11 | "sourceMap": true,
12 | "declaration": false,
13 | "downlevelIteration": true,
14 | "experimentalDecorators": true,
15 | "moduleResolution": "node",
16 | "importHelpers": true,
17 | "target": "es2017",
18 | "module": "es2020",
19 | "lib": [
20 | "es2018",
21 | "dom"
22 | ]
23 | },
24 | "angularCompilerOptions": {
25 | "enableI18nLegacyMessageIdFormat": false,
26 | "strictInjectionParameters": true,
27 | "strictInputAccessModifiers": true,
28 | "strictTemplates": true
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/angular-app/tsconfig.spec.json:
--------------------------------------------------------------------------------
1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */
2 | {
3 | "extends": "./tsconfig.json",
4 | "compilerOptions": {
5 | "outDir": "./out-tsc/spec",
6 | "types": [
7 | "jasmine"
8 | ]
9 | },
10 | "files": [
11 | "src/test.ts",
12 | "src/polyfills.ts"
13 | ],
14 | "include": [
15 | "src/**/*.spec.ts",
16 | "src/**/*.d.ts"
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/lit-app/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 |
10 | # Change these settings to your own preference
11 | indent_style = space
12 | indent_size = 2
13 |
14 | # We recommend you to keep these unchanged
15 | end_of_line = lf
16 | charset = utf-8
17 | trim_trailing_whitespace = true
18 | insert_final_newline = true
19 |
20 | [*.md]
21 | trim_trailing_whitespace = false
22 |
23 | [*.json]
24 | indent_size = 2
25 |
26 | [*.{html,js,md}]
27 | block_comment_start = /**
28 | block_comment = *
29 | block_comment_end = */
30 |
--------------------------------------------------------------------------------
/lit-app/.gitignore:
--------------------------------------------------------------------------------
1 | ## editors
2 | /.idea
3 | /.vscode
4 |
5 | ## system files
6 | .DS_Store
7 |
8 | ## npm
9 | /node_modules/
10 | /npm-debug.log
11 |
12 | ## testing
13 | /coverage/
14 |
15 | ## temp folders
16 | /.tmp/
17 |
18 | # build
19 | /_site/
20 | /dist/
21 | /out-tsc/
22 |
23 | storybook-static
--------------------------------------------------------------------------------
/lit-app/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 lit-app
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.
--------------------------------------------------------------------------------
/lit-app/README.md:
--------------------------------------------------------------------------------
1 | # \
2 |
3 | This webcomponent follows the [open-wc](https://github.com/open-wc/open-wc) recommendation.
4 |
5 | ## Installation
6 | ```bash
7 | npm i lit-app
8 | ```
9 |
10 | ## Usage
11 | ```html
12 |
15 |
16 |
17 | ```
18 |
19 |
20 |
21 | ## Tooling configs
22 |
23 | For most of the tools, the configuration is in the `package.json` to reduce the amount of files in your project.
24 |
25 | If you customize the configuration a lot, you can consider moving them to individual files.
26 |
27 | ## Local Demo with `web-dev-server`
28 | ```bash
29 | npm start
30 | ```
31 | To run a local development server that serves the basic demo located in `demo/index.html`
32 |
--------------------------------------------------------------------------------
/lit-app/custom-elements.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": 2,
3 | "tags": [
4 | {
5 | "name": "lit-app",
6 | "description": "A component with a title and an action counter",
7 | "properties": [
8 | {
9 | "name": "title",
10 | "type": "String",
11 | "description": "The title of your component",
12 | "default": "Hey there"
13 | },
14 | {
15 | "name": "counter",
16 | "type": "Number",
17 | "description": "An action counter",
18 | "default": 0
19 | }
20 | ],
21 | "events": [],
22 | "slots": [],
23 | "cssProperties": [
24 | {
25 | "name": "--lit-app-text-color",
26 | "description": "Main Text Color",
27 | "type": "Color"
28 | }
29 | ]
30 | }
31 | ]
32 | }
33 |
--------------------------------------------------------------------------------
/lit-app/demo/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
13 |
14 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/lit-app/index.ts:
--------------------------------------------------------------------------------
1 | export { LitApp } from './src/LitApp.js';
2 |
--------------------------------------------------------------------------------
/lit-app/lit-app.ts:
--------------------------------------------------------------------------------
1 | import { LitApp } from './src/LitApp.js';
2 |
3 | window.customElements.define('lit-app', LitApp);
4 |
--------------------------------------------------------------------------------
/lit-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "lit-app",
3 | "version": "0.0.0",
4 | "description": "Webcomponent lit-app following open-wc recommendations",
5 | "author": "lit-app",
6 | "license": "MIT",
7 | "main": "dist/index.js",
8 | "module": "dist/index.js",
9 | "scripts": {
10 | "start": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
11 | "build": "tsc",
12 | "prepublish": "tsc"
13 | },
14 | "dependencies": {
15 | "lit-html": "^1.4.1",
16 | "lit-element": "^2.5.1"
17 | },
18 | "devDependencies": {
19 | "@web/dev-server": "^0.1.20",
20 | "concurrently": "^5.3.0",
21 | "typescript": "^4.3.5",
22 | "tslib": "^2.3.0"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/lit-app/src/LitApp.ts:
--------------------------------------------------------------------------------
1 | import { html, css, LitElement, property } from 'lit-element';
2 |
3 | export class LitApp extends LitElement {
4 |
5 | @property({ type: Array }) todos: string[] = [];
6 |
7 | @property({ type: String }) todoText:string = '';
8 |
9 | connectedCallback() {
10 | super.connectedCallback();
11 | const existingTodos = localStorage.getItem('todos');
12 | this.todos = JSON.parse(existingTodos as string) || [];
13 | }
14 |
15 |
16 | addTodo(event: Event) {
17 | event.preventDefault();
18 | console.log(this.todoText, event);
19 | this.todos = [...this.todos, this.todoText];
20 | localStorage.setItem('todos', JSON.stringify(this.todos));
21 | }
22 |
23 | render() {
24 | return html`
25 |
26 |
27 | ${this.todos.map(todo => html`- ${todo}
`)}
28 |
29 |
30 |
34 | `;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lit-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2018",
4 | "module": "esnext",
5 | "moduleResolution": "node",
6 | "noEmitOnError": true,
7 | "lib": ["es2017", "dom"],
8 | "strict": true,
9 | "esModuleInterop": false,
10 | "allowSyntheticDefaultImports": true,
11 | "experimentalDecorators": true,
12 | "importHelpers": true,
13 | "outDir": "dist",
14 | "sourceMap": true,
15 | "inlineSources": true,
16 | "rootDir": "./",
17 | "declaration": true,
18 | "incremental": true
19 | },
20 | "include": ["**/*.ts"]
21 | }
22 |
--------------------------------------------------------------------------------
/lit-app/web-dev-server.config.mjs:
--------------------------------------------------------------------------------
1 | // import { hmrPlugin, presets } from '@open-wc/dev-server-hmr';
2 |
3 | /** Use Hot Module replacement by adding --hmr to the start command */
4 | const hmr = process.argv.includes('--hmr');
5 |
6 | export default /** @type {import('@web/dev-server').DevServerConfig} */ ({
7 | nodeResolve: true,
8 | open: '/demo/',
9 | watch: !hmr,
10 |
11 | /** Compile JS for older browsers. Requires @web/dev-server-esbuild plugin */
12 | // esbuildTarget: 'auto'
13 |
14 | /** Set appIndex to enable SPA routing */
15 | // appIndex: 'demo/index.html',
16 |
17 | /** Confgure bare import resolve plugin */
18 | // nodeResolve: {
19 | // exportConditions: ['browser', 'development']
20 | // },
21 |
22 | plugins: [
23 | /** Use Hot Module Replacement by uncommenting. Requires @open-wc/dev-server-hmr plugin */
24 | // hmr && hmrPlugin({ exclude: ['**/*/node_modules/**/*'], presets: [presets.litElement] }),
25 | ],
26 |
27 | // See documentation for all available options
28 | });
29 |
--------------------------------------------------------------------------------
/mithril-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/react-app/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
--------------------------------------------------------------------------------
/react-app/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `npm start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `npm test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `npm run build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `npm run eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
37 |
38 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
39 |
40 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
55 |
56 | ### Making a Progressive Web App
57 |
58 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
59 |
60 | ### Advanced Configuration
61 |
62 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `npm run build` fails to minify
69 |
70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
71 |
--------------------------------------------------------------------------------
/react-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.12.0",
7 | "@testing-library/react": "^11.2.7",
8 | "@testing-library/user-event": "^12.8.3",
9 | "react": "^17.0.2",
10 | "react-dom": "^17.0.2",
11 | "react-scripts": "4.0.3",
12 | "web-vitals": "^1.1.2"
13 | },
14 | "scripts": {
15 | "start": "react-scripts start",
16 | "build": "react-scripts build",
17 | "test": "react-scripts test",
18 | "eject": "react-scripts eject"
19 | },
20 | "eslintConfig": {
21 | "extends": [
22 | "react-app",
23 | "react-app/jest"
24 | ]
25 | },
26 | "browserslist": {
27 | "production": [
28 | ">0.2%",
29 | "not dead",
30 | "not op_mini all"
31 | ],
32 | "development": [
33 | "last 1 chrome version",
34 | "last 1 firefox version",
35 | "last 1 safari version"
36 | ]
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/react-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/react-app/public/favicon.ico
--------------------------------------------------------------------------------
/react-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 |
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/react-app/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/react-app/public/logo192.png
--------------------------------------------------------------------------------
/react-app/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/react-app/public/logo512.png
--------------------------------------------------------------------------------
/react-app/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "short_name": "React App",
3 | "name": "Create React App Sample",
4 | "icons": [
5 | {
6 | "src": "favicon.ico",
7 | "sizes": "64x64 32x32 24x24 16x16",
8 | "type": "image/x-icon"
9 | },
10 | {
11 | "src": "logo192.png",
12 | "type": "image/png",
13 | "sizes": "192x192"
14 | },
15 | {
16 | "src": "logo512.png",
17 | "type": "image/png",
18 | "sizes": "512x512"
19 | }
20 | ],
21 | "start_url": ".",
22 | "display": "standalone",
23 | "theme_color": "#000000",
24 | "background_color": "#ffffff"
25 | }
26 |
--------------------------------------------------------------------------------
/react-app/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/react-app/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | height: 40vmin;
7 | pointer-events: none;
8 | }
9 |
10 | @media (prefers-reduced-motion: no-preference) {
11 | .App-logo {
12 | animation: App-logo-spin infinite 20s linear;
13 | }
14 | }
15 |
16 | .App-header {
17 | background-color: #282c34;
18 | min-height: 100vh;
19 | display: flex;
20 | flex-direction: column;
21 | align-items: center;
22 | justify-content: center;
23 | font-size: calc(10px + 2vmin);
24 | color: white;
25 | }
26 |
27 | .App-link {
28 | color: #61dafb;
29 | }
30 |
31 | @keyframes App-logo-spin {
32 | from {
33 | transform: rotate(0deg);
34 | }
35 | to {
36 | transform: rotate(360deg);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/react-app/src/App.js:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef, useState } from 'react';
2 | import './App.css';
3 |
4 | function App() {
5 |
6 | // State
7 | const [todos, setTodos] = useState([]);
8 |
9 | // Binding
10 | const todoText = useRef();
11 |
12 | // Side Effects / Lifecycle
13 | useEffect(() => {
14 | const existingTodos = localStorage.getItem('todos');
15 | setTodos(existingTodos ? JSON.parse(existingTodos) : []);
16 | }, []);
17 |
18 | // Events
19 | function addTodo(event) {
20 | event.preventDefault();
21 | const next = [...todos, todoText.current.value];
22 | setTodos(next);
23 | localStorage.setItem('todos', JSON.stringify(next));
24 | }
25 |
26 | return (
27 |
28 |
29 | {todos.map(todo => (- {todo}
))}
30 |
31 |
32 |
36 |
37 |
38 | );
39 | }
40 |
41 | export default App;
42 |
--------------------------------------------------------------------------------
/react-app/src/App.test.js:
--------------------------------------------------------------------------------
1 | import { render, screen } from '@testing-library/react';
2 | import App from './App';
3 |
4 | test('renders learn react link', () => {
5 | render();
6 | const linkElement = screen.getByText(/learn react/i);
7 | expect(linkElement).toBeInTheDocument();
8 | });
9 |
--------------------------------------------------------------------------------
/react-app/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/react-app/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App';
5 | import reportWebVitals from './reportWebVitals';
6 |
7 | ReactDOM.render(
8 |
9 |
10 | ,
11 | document.getElementById('root')
12 | );
13 |
14 | // If you want to start measuring performance in your app, pass a function
15 | // to log results (for example: reportWebVitals(console.log))
16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 | reportWebVitals();
18 |
--------------------------------------------------------------------------------
/react-app/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/react-app/src/reportWebVitals.js:
--------------------------------------------------------------------------------
1 | const reportWebVitals = onPerfEntry => {
2 | if (onPerfEntry && onPerfEntry instanceof Function) {
3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 | getCLS(onPerfEntry);
5 | getFID(onPerfEntry);
6 | getFCP(onPerfEntry);
7 | getLCP(onPerfEntry);
8 | getTTFB(onPerfEntry);
9 | });
10 | }
11 | };
12 |
13 | export default reportWebVitals;
14 |
--------------------------------------------------------------------------------
/react-app/src/setupTests.js:
--------------------------------------------------------------------------------
1 | // jest-dom adds custom jest matchers for asserting on DOM nodes.
2 | // allows you to do things like:
3 | // expect(element).toHaveTextContent(/react/i)
4 | // learn more: https://github.com/testing-library/jest-dom
5 | import '@testing-library/jest-dom';
6 |
--------------------------------------------------------------------------------
/solid-app/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | dist
--------------------------------------------------------------------------------
/solid-app/README.md:
--------------------------------------------------------------------------------
1 | ## Usage
2 |
3 | Those templates dependencies are maintained via [pnpm](https://pnpm.js.org/) via `pnpm up -Lri`.
4 |
5 | This is the reason you see a `pnpm-lock.yaml`. That being said, any package manager will work. This file can be safely be removed once you clone a template.
6 |
7 | ```bash
8 | $ npm install # or pnpm install or yarn install
9 | ```
10 | ### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs)
11 |
12 | ## Available Scripts
13 |
14 | In the project directory, you can run:
15 |
16 | ### `npm dev` or `npm start`
17 |
18 | Runs the app in the development mode.
19 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
20 |
21 | The page will reload if you make edits.
22 |
23 | ### `npm run build`
24 |
25 | Builds the app for production to the `dist` folder.
26 | It correctly bundles Solid in production mode and optimizes the build for the best performance.
27 |
28 | The build is minified and the filenames include the hashes.
29 | Your app is ready to be deployed!
30 |
31 | ## Deployment
32 |
33 | You can deploy the `dist` folder to any static host provider (netlify, surge, now, etc.)
34 |
--------------------------------------------------------------------------------
/solid-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Solid App
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/solid-app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-template-solid",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.14.5",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
10 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.14.5"
14 | }
15 | },
16 | "@babel/compat-data": {
17 | "version": "7.15.0",
18 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
19 | "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
20 | "dev": true
21 | },
22 | "@babel/core": {
23 | "version": "7.15.0",
24 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz",
25 | "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/code-frame": "^7.14.5",
29 | "@babel/generator": "^7.15.0",
30 | "@babel/helper-compilation-targets": "^7.15.0",
31 | "@babel/helper-module-transforms": "^7.15.0",
32 | "@babel/helpers": "^7.14.8",
33 | "@babel/parser": "^7.15.0",
34 | "@babel/template": "^7.14.5",
35 | "@babel/traverse": "^7.15.0",
36 | "@babel/types": "^7.15.0",
37 | "convert-source-map": "^1.7.0",
38 | "debug": "^4.1.0",
39 | "gensync": "^1.0.0-beta.2",
40 | "json5": "^2.1.2",
41 | "semver": "^6.3.0",
42 | "source-map": "^0.5.0"
43 | }
44 | },
45 | "@babel/generator": {
46 | "version": "7.15.0",
47 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz",
48 | "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==",
49 | "dev": true,
50 | "requires": {
51 | "@babel/types": "^7.15.0",
52 | "jsesc": "^2.5.1",
53 | "source-map": "^0.5.0"
54 | }
55 | },
56 | "@babel/helper-annotate-as-pure": {
57 | "version": "7.14.5",
58 | "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz",
59 | "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==",
60 | "dev": true,
61 | "requires": {
62 | "@babel/types": "^7.14.5"
63 | }
64 | },
65 | "@babel/helper-compilation-targets": {
66 | "version": "7.15.0",
67 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz",
68 | "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==",
69 | "dev": true,
70 | "requires": {
71 | "@babel/compat-data": "^7.15.0",
72 | "@babel/helper-validator-option": "^7.14.5",
73 | "browserslist": "^4.16.6",
74 | "semver": "^6.3.0"
75 | }
76 | },
77 | "@babel/helper-create-class-features-plugin": {
78 | "version": "7.15.0",
79 | "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz",
80 | "integrity": "sha512-MdmDXgvTIi4heDVX/e9EFfeGpugqm9fobBVg/iioE8kueXrOHdRDe36FAY7SnE9xXLVeYCoJR/gdrBEIHRC83Q==",
81 | "dev": true,
82 | "requires": {
83 | "@babel/helper-annotate-as-pure": "^7.14.5",
84 | "@babel/helper-function-name": "^7.14.5",
85 | "@babel/helper-member-expression-to-functions": "^7.15.0",
86 | "@babel/helper-optimise-call-expression": "^7.14.5",
87 | "@babel/helper-replace-supers": "^7.15.0",
88 | "@babel/helper-split-export-declaration": "^7.14.5"
89 | }
90 | },
91 | "@babel/helper-function-name": {
92 | "version": "7.14.5",
93 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz",
94 | "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==",
95 | "dev": true,
96 | "requires": {
97 | "@babel/helper-get-function-arity": "^7.14.5",
98 | "@babel/template": "^7.14.5",
99 | "@babel/types": "^7.14.5"
100 | }
101 | },
102 | "@babel/helper-get-function-arity": {
103 | "version": "7.14.5",
104 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz",
105 | "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==",
106 | "dev": true,
107 | "requires": {
108 | "@babel/types": "^7.14.5"
109 | }
110 | },
111 | "@babel/helper-hoist-variables": {
112 | "version": "7.14.5",
113 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz",
114 | "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==",
115 | "dev": true,
116 | "requires": {
117 | "@babel/types": "^7.14.5"
118 | }
119 | },
120 | "@babel/helper-member-expression-to-functions": {
121 | "version": "7.15.0",
122 | "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz",
123 | "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==",
124 | "dev": true,
125 | "requires": {
126 | "@babel/types": "^7.15.0"
127 | }
128 | },
129 | "@babel/helper-module-imports": {
130 | "version": "7.14.5",
131 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz",
132 | "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==",
133 | "dev": true,
134 | "requires": {
135 | "@babel/types": "^7.14.5"
136 | }
137 | },
138 | "@babel/helper-module-transforms": {
139 | "version": "7.15.0",
140 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz",
141 | "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==",
142 | "dev": true,
143 | "requires": {
144 | "@babel/helper-module-imports": "^7.14.5",
145 | "@babel/helper-replace-supers": "^7.15.0",
146 | "@babel/helper-simple-access": "^7.14.8",
147 | "@babel/helper-split-export-declaration": "^7.14.5",
148 | "@babel/helper-validator-identifier": "^7.14.9",
149 | "@babel/template": "^7.14.5",
150 | "@babel/traverse": "^7.15.0",
151 | "@babel/types": "^7.15.0"
152 | }
153 | },
154 | "@babel/helper-optimise-call-expression": {
155 | "version": "7.14.5",
156 | "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz",
157 | "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==",
158 | "dev": true,
159 | "requires": {
160 | "@babel/types": "^7.14.5"
161 | }
162 | },
163 | "@babel/helper-plugin-utils": {
164 | "version": "7.14.5",
165 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
166 | "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
167 | "dev": true
168 | },
169 | "@babel/helper-replace-supers": {
170 | "version": "7.15.0",
171 | "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz",
172 | "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==",
173 | "dev": true,
174 | "requires": {
175 | "@babel/helper-member-expression-to-functions": "^7.15.0",
176 | "@babel/helper-optimise-call-expression": "^7.14.5",
177 | "@babel/traverse": "^7.15.0",
178 | "@babel/types": "^7.15.0"
179 | }
180 | },
181 | "@babel/helper-simple-access": {
182 | "version": "7.14.8",
183 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz",
184 | "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==",
185 | "dev": true,
186 | "requires": {
187 | "@babel/types": "^7.14.8"
188 | }
189 | },
190 | "@babel/helper-split-export-declaration": {
191 | "version": "7.14.5",
192 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz",
193 | "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==",
194 | "dev": true,
195 | "requires": {
196 | "@babel/types": "^7.14.5"
197 | }
198 | },
199 | "@babel/helper-validator-identifier": {
200 | "version": "7.14.9",
201 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
202 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
203 | "dev": true
204 | },
205 | "@babel/helper-validator-option": {
206 | "version": "7.14.5",
207 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
208 | "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
209 | "dev": true
210 | },
211 | "@babel/helpers": {
212 | "version": "7.14.8",
213 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.8.tgz",
214 | "integrity": "sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==",
215 | "dev": true,
216 | "requires": {
217 | "@babel/template": "^7.14.5",
218 | "@babel/traverse": "^7.14.8",
219 | "@babel/types": "^7.14.8"
220 | }
221 | },
222 | "@babel/highlight": {
223 | "version": "7.14.5",
224 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
225 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
226 | "dev": true,
227 | "requires": {
228 | "@babel/helper-validator-identifier": "^7.14.5",
229 | "chalk": "^2.0.0",
230 | "js-tokens": "^4.0.0"
231 | }
232 | },
233 | "@babel/parser": {
234 | "version": "7.15.2",
235 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.2.tgz",
236 | "integrity": "sha512-bMJXql1Ss8lFnvr11TZDH4ArtwlAS5NG9qBmdiFW2UHHm6MVoR+GDc5XE2b9K938cyjc9O6/+vjjcffLDtfuDg==",
237 | "dev": true
238 | },
239 | "@babel/plugin-syntax-jsx": {
240 | "version": "7.14.5",
241 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz",
242 | "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==",
243 | "dev": true,
244 | "requires": {
245 | "@babel/helper-plugin-utils": "^7.14.5"
246 | }
247 | },
248 | "@babel/plugin-syntax-typescript": {
249 | "version": "7.14.5",
250 | "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz",
251 | "integrity": "sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==",
252 | "dev": true,
253 | "requires": {
254 | "@babel/helper-plugin-utils": "^7.14.5"
255 | }
256 | },
257 | "@babel/plugin-transform-typescript": {
258 | "version": "7.15.0",
259 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.0.tgz",
260 | "integrity": "sha512-WIIEazmngMEEHDaPTx0IZY48SaAmjVWe3TRSX7cmJXn0bEv9midFzAjxiruOWYIVf5iQ10vFx7ASDpgEO08L5w==",
261 | "dev": true,
262 | "requires": {
263 | "@babel/helper-create-class-features-plugin": "^7.15.0",
264 | "@babel/helper-plugin-utils": "^7.14.5",
265 | "@babel/plugin-syntax-typescript": "^7.14.5"
266 | }
267 | },
268 | "@babel/preset-typescript": {
269 | "version": "7.15.0",
270 | "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz",
271 | "integrity": "sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==",
272 | "dev": true,
273 | "requires": {
274 | "@babel/helper-plugin-utils": "^7.14.5",
275 | "@babel/helper-validator-option": "^7.14.5",
276 | "@babel/plugin-transform-typescript": "^7.15.0"
277 | }
278 | },
279 | "@babel/template": {
280 | "version": "7.14.5",
281 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz",
282 | "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==",
283 | "dev": true,
284 | "requires": {
285 | "@babel/code-frame": "^7.14.5",
286 | "@babel/parser": "^7.14.5",
287 | "@babel/types": "^7.14.5"
288 | }
289 | },
290 | "@babel/traverse": {
291 | "version": "7.15.0",
292 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz",
293 | "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==",
294 | "dev": true,
295 | "requires": {
296 | "@babel/code-frame": "^7.14.5",
297 | "@babel/generator": "^7.15.0",
298 | "@babel/helper-function-name": "^7.14.5",
299 | "@babel/helper-hoist-variables": "^7.14.5",
300 | "@babel/helper-split-export-declaration": "^7.14.5",
301 | "@babel/parser": "^7.15.0",
302 | "@babel/types": "^7.15.0",
303 | "debug": "^4.1.0",
304 | "globals": "^11.1.0"
305 | }
306 | },
307 | "@babel/types": {
308 | "version": "7.15.0",
309 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz",
310 | "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==",
311 | "dev": true,
312 | "requires": {
313 | "@babel/helper-validator-identifier": "^7.14.9",
314 | "to-fast-properties": "^2.0.0"
315 | }
316 | },
317 | "ansi-styles": {
318 | "version": "3.2.1",
319 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
320 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
321 | "dev": true,
322 | "requires": {
323 | "color-convert": "^1.9.0"
324 | }
325 | },
326 | "babel-plugin-jsx-dom-expressions": {
327 | "version": "0.29.11",
328 | "resolved": "https://registry.npmjs.org/babel-plugin-jsx-dom-expressions/-/babel-plugin-jsx-dom-expressions-0.29.11.tgz",
329 | "integrity": "sha512-Jzyxjv+1NebnZQRs5bxpF+i79/rknJiRXOapy0XBvfy7VRRkJWnUrA0VtkCkhGx/EGqrOzi5vgM0EkuZN9yKOA==",
330 | "dev": true,
331 | "requires": {
332 | "@babel/helper-module-imports": "^7.10.4",
333 | "@babel/plugin-syntax-jsx": "^7.10.4",
334 | "@babel/types": "^7.11.5"
335 | }
336 | },
337 | "babel-preset-solid": {
338 | "version": "1.0.6",
339 | "resolved": "https://registry.npmjs.org/babel-preset-solid/-/babel-preset-solid-1.0.6.tgz",
340 | "integrity": "sha512-D+VLpF8WCif5IQmojypImyhlarxcjCD/lBOd4DBEDStXGMGNdlFBgsuVkKFiJ1yQA2KsHLljpbqrv9GsZYrZ3w==",
341 | "dev": true,
342 | "requires": {
343 | "babel-plugin-jsx-dom-expressions": "^0.29.9"
344 | }
345 | },
346 | "browserslist": {
347 | "version": "4.16.7",
348 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.7.tgz",
349 | "integrity": "sha512-7I4qVwqZltJ7j37wObBe3SoTz+nS8APaNcrBOlgoirb6/HbEU2XxW/LpUDTCngM6iauwFqmRTuOMfyKnFGY5JA==",
350 | "dev": true,
351 | "requires": {
352 | "caniuse-lite": "^1.0.30001248",
353 | "colorette": "^1.2.2",
354 | "electron-to-chromium": "^1.3.793",
355 | "escalade": "^3.1.1",
356 | "node-releases": "^1.1.73"
357 | }
358 | },
359 | "caniuse-lite": {
360 | "version": "1.0.30001249",
361 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001249.tgz",
362 | "integrity": "sha512-vcX4U8lwVXPdqzPWi6cAJ3FnQaqXbBqy/GZseKNQzRj37J7qZdGcBtxq/QLFNLLlfsoXLUdHw8Iwenri86Tagw==",
363 | "dev": true
364 | },
365 | "chalk": {
366 | "version": "2.4.2",
367 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
368 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
369 | "dev": true,
370 | "requires": {
371 | "ansi-styles": "^3.2.1",
372 | "escape-string-regexp": "^1.0.5",
373 | "supports-color": "^5.3.0"
374 | }
375 | },
376 | "color-convert": {
377 | "version": "1.9.3",
378 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
379 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
380 | "dev": true,
381 | "requires": {
382 | "color-name": "1.1.3"
383 | }
384 | },
385 | "color-name": {
386 | "version": "1.1.3",
387 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
388 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
389 | "dev": true
390 | },
391 | "colorette": {
392 | "version": "1.2.2",
393 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz",
394 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==",
395 | "dev": true
396 | },
397 | "convert-source-map": {
398 | "version": "1.8.0",
399 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
400 | "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
401 | "dev": true,
402 | "requires": {
403 | "safe-buffer": "~5.1.1"
404 | }
405 | },
406 | "debug": {
407 | "version": "4.3.2",
408 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
409 | "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
410 | "dev": true,
411 | "requires": {
412 | "ms": "2.1.2"
413 | }
414 | },
415 | "electron-to-chromium": {
416 | "version": "1.3.799",
417 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.799.tgz",
418 | "integrity": "sha512-V2rbYWdGvSqrg+95KjkVuSi41bGfrhrOzjl1tSi2VLnm0mRe3FsSvhiqidSiSll9WiMhrQAhpDcW/wcqK3c+Yw==",
419 | "dev": true
420 | },
421 | "esbuild": {
422 | "version": "0.12.19",
423 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.19.tgz",
424 | "integrity": "sha512-5NuT1G6THW7l3fsSCDkcPepn24R0XtyPjKoqKHD8LfhqMXzCdz0mrS9HgO6hIhzVT7zt0T+JGbzCqF5AH8hS9w==",
425 | "dev": true
426 | },
427 | "escalade": {
428 | "version": "3.1.1",
429 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
430 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
431 | "dev": true
432 | },
433 | "escape-string-regexp": {
434 | "version": "1.0.5",
435 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
436 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
437 | "dev": true
438 | },
439 | "fsevents": {
440 | "version": "2.3.2",
441 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
442 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
443 | "dev": true,
444 | "optional": true
445 | },
446 | "function-bind": {
447 | "version": "1.1.1",
448 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
449 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
450 | "dev": true
451 | },
452 | "gensync": {
453 | "version": "1.0.0-beta.2",
454 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
455 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
456 | "dev": true
457 | },
458 | "globals": {
459 | "version": "11.12.0",
460 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
461 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
462 | "dev": true
463 | },
464 | "has": {
465 | "version": "1.0.3",
466 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
467 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
468 | "dev": true,
469 | "requires": {
470 | "function-bind": "^1.1.1"
471 | }
472 | },
473 | "has-flag": {
474 | "version": "3.0.0",
475 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
476 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
477 | "dev": true
478 | },
479 | "is-core-module": {
480 | "version": "2.5.0",
481 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz",
482 | "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==",
483 | "dev": true,
484 | "requires": {
485 | "has": "^1.0.3"
486 | }
487 | },
488 | "is-what": {
489 | "version": "3.14.1",
490 | "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz",
491 | "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==",
492 | "dev": true
493 | },
494 | "js-tokens": {
495 | "version": "4.0.0",
496 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
497 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
498 | "dev": true
499 | },
500 | "jsesc": {
501 | "version": "2.5.2",
502 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
503 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
504 | "dev": true
505 | },
506 | "json5": {
507 | "version": "2.2.0",
508 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz",
509 | "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==",
510 | "dev": true,
511 | "requires": {
512 | "minimist": "^1.2.5"
513 | }
514 | },
515 | "merge-anything": {
516 | "version": "4.0.1",
517 | "resolved": "https://registry.npmjs.org/merge-anything/-/merge-anything-4.0.1.tgz",
518 | "integrity": "sha512-KsFjBYc3juDoHz9Vzd5fte1nqp06H8SQ+yU344Dd0ZunwSgtltnC0kgKds8cbocJGyViLcBQuHkitbDXAqW+LQ==",
519 | "dev": true,
520 | "requires": {
521 | "is-what": "^3.14.1",
522 | "ts-toolbelt": "^9.3.12"
523 | }
524 | },
525 | "minimist": {
526 | "version": "1.2.5",
527 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
528 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
529 | "dev": true
530 | },
531 | "ms": {
532 | "version": "2.1.2",
533 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
534 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
535 | "dev": true
536 | },
537 | "nanoid": {
538 | "version": "3.1.23",
539 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz",
540 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==",
541 | "dev": true
542 | },
543 | "node-releases": {
544 | "version": "1.1.73",
545 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz",
546 | "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==",
547 | "dev": true
548 | },
549 | "path-parse": {
550 | "version": "1.0.7",
551 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
552 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
553 | "dev": true
554 | },
555 | "postcss": {
556 | "version": "8.3.6",
557 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
558 | "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
559 | "dev": true,
560 | "requires": {
561 | "colorette": "^1.2.2",
562 | "nanoid": "^3.1.23",
563 | "source-map-js": "^0.6.2"
564 | }
565 | },
566 | "resolve": {
567 | "version": "1.20.0",
568 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
569 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
570 | "dev": true,
571 | "requires": {
572 | "is-core-module": "^2.2.0",
573 | "path-parse": "^1.0.6"
574 | }
575 | },
576 | "rollup": {
577 | "version": "2.56.1",
578 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.1.tgz",
579 | "integrity": "sha512-KkrsNjeiTfGJMUFBi/PNfj3fnt70akqdoNXOjlzwo98uA1qrlkmgt6SGaK5OwhyDYCVnJb6jb2Xa2wbI47P4Nw==",
580 | "dev": true,
581 | "requires": {
582 | "fsevents": "~2.3.2"
583 | }
584 | },
585 | "safe-buffer": {
586 | "version": "5.1.2",
587 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
588 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
589 | "dev": true
590 | },
591 | "semver": {
592 | "version": "6.3.0",
593 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
594 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
595 | "dev": true
596 | },
597 | "solid-js": {
598 | "version": "1.0.7",
599 | "resolved": "https://registry.npmjs.org/solid-js/-/solid-js-1.0.7.tgz",
600 | "integrity": "sha512-2jHCXLwp/B7P4kh5tl0ospRaC2F++BU0uWwtfgK/8Zc/MROOyCmmkjHpLAQC2u2NWYVGnIclDIJ2FGDXJ0wcYg=="
601 | },
602 | "solid-refresh": {
603 | "version": "0.2.2",
604 | "resolved": "https://registry.npmjs.org/solid-refresh/-/solid-refresh-0.2.2.tgz",
605 | "integrity": "sha512-oQN3pUJ8fBd4ldMxZVqK7S4PGzAn1yx1B5bRRfANoxoqmHyY2QLfzrOzXsYnAkhh272K+W24oKgFWlmdUZ6HtQ==",
606 | "dev": true
607 | },
608 | "source-map": {
609 | "version": "0.5.7",
610 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
611 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
612 | "dev": true
613 | },
614 | "source-map-js": {
615 | "version": "0.6.2",
616 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
617 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
618 | "dev": true
619 | },
620 | "supports-color": {
621 | "version": "5.5.0",
622 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
623 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
624 | "dev": true,
625 | "requires": {
626 | "has-flag": "^3.0.0"
627 | }
628 | },
629 | "to-fast-properties": {
630 | "version": "2.0.0",
631 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
632 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
633 | "dev": true
634 | },
635 | "ts-toolbelt": {
636 | "version": "9.6.0",
637 | "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz",
638 | "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==",
639 | "dev": true
640 | },
641 | "vite": {
642 | "version": "2.4.4",
643 | "resolved": "https://registry.npmjs.org/vite/-/vite-2.4.4.tgz",
644 | "integrity": "sha512-m1wK6pFJKmaYA6AeZIUXyiAgUAAJzVXhIMYCdZUpCaFMGps0v0IlNJtbmPvkUhVEyautalajmnW5X6NboUPsnw==",
645 | "dev": true,
646 | "requires": {
647 | "esbuild": "^0.12.8",
648 | "fsevents": "~2.3.2",
649 | "postcss": "^8.3.6",
650 | "resolve": "^1.20.0",
651 | "rollup": "^2.38.5"
652 | }
653 | },
654 | "vite-plugin-solid": {
655 | "version": "2.0.1",
656 | "resolved": "https://registry.npmjs.org/vite-plugin-solid/-/vite-plugin-solid-2.0.1.tgz",
657 | "integrity": "sha512-C6ZHRmre4JmjgPMiaGfSiAwpR2dcOYXztPt+jlQisD7iFBe1pB8nURSmWfTF+tpFtPr2Ir7GmLZTYui9p5Wjmg==",
658 | "dev": true,
659 | "requires": {
660 | "@babel/core": "^7.14.6",
661 | "@babel/preset-typescript": "^7.14.5",
662 | "babel-preset-solid": "^1.0.1",
663 | "merge-anything": "^4.0.1",
664 | "solid-js": "^1.0.3",
665 | "solid-refresh": "^0.2.1",
666 | "vite": "^2.4.2"
667 | }
668 | }
669 | }
670 | }
671 |
--------------------------------------------------------------------------------
/solid-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vite-template-solid",
3 | "version": "0.0.0",
4 | "description": "",
5 | "scripts": {
6 | "start": "vite",
7 | "dev": "vite",
8 | "build": "vite build",
9 | "serve": "vite preview"
10 | },
11 | "license": "MIT",
12 | "devDependencies": {
13 | "vite": "^2.4.4",
14 | "vite-plugin-solid": "^2.0.1"
15 | },
16 | "dependencies": {
17 | "solid-js": "^1.0.7"
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/solid-app/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: 5.3
2 |
3 | specifiers:
4 | solid-js: ^1.0.7
5 | vite: ^2.4.4
6 | vite-plugin-solid: ^2.0.1
7 |
8 | dependencies:
9 | solid-js: 1.0.7
10 |
11 | devDependencies:
12 | vite: 2.4.4
13 | vite-plugin-solid: 2.0.1
14 |
15 | packages:
16 |
17 | /@babel/code-frame/7.14.5:
18 | resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==}
19 | engines: {node: '>=6.9.0'}
20 | dependencies:
21 | '@babel/highlight': 7.14.5
22 | dev: true
23 |
24 | /@babel/compat-data/7.14.7:
25 | resolution: {integrity: sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==}
26 | engines: {node: '>=6.9.0'}
27 | dev: true
28 |
29 | /@babel/core/7.14.8:
30 | resolution: {integrity: sha512-/AtaeEhT6ErpDhInbXmjHcUQXH0L0TEgscfcxk1qbOvLuKCa5aZT0SOOtDKFY96/CLROwbLSKyFor6idgNaU4Q==}
31 | engines: {node: '>=6.9.0'}
32 | dependencies:
33 | '@babel/code-frame': 7.14.5
34 | '@babel/generator': 7.14.8
35 | '@babel/helper-compilation-targets': 7.14.5_@babel+core@7.14.8
36 | '@babel/helper-module-transforms': 7.14.8
37 | '@babel/helpers': 7.14.8
38 | '@babel/parser': 7.14.8
39 | '@babel/template': 7.14.5
40 | '@babel/traverse': 7.14.8
41 | '@babel/types': 7.14.8
42 | convert-source-map: 1.8.0
43 | debug: 4.3.2
44 | gensync: 1.0.0-beta.2
45 | json5: 2.2.0
46 | semver: 6.3.0
47 | source-map: 0.5.7
48 | transitivePeerDependencies:
49 | - supports-color
50 | dev: true
51 |
52 | /@babel/generator/7.14.8:
53 | resolution: {integrity: sha512-cYDUpvIzhBVnMzRoY1fkSEhK/HmwEVwlyULYgn/tMQYd6Obag3ylCjONle3gdErfXBW61SVTlR9QR7uWlgeIkg==}
54 | engines: {node: '>=6.9.0'}
55 | dependencies:
56 | '@babel/types': 7.14.8
57 | jsesc: 2.5.2
58 | source-map: 0.5.7
59 | dev: true
60 |
61 | /@babel/helper-annotate-as-pure/7.14.5:
62 | resolution: {integrity: sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==}
63 | engines: {node: '>=6.9.0'}
64 | dependencies:
65 | '@babel/types': 7.14.8
66 | dev: true
67 |
68 | /@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8:
69 | resolution: {integrity: sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==}
70 | engines: {node: '>=6.9.0'}
71 | peerDependencies:
72 | '@babel/core': ^7.0.0
73 | dependencies:
74 | '@babel/compat-data': 7.14.7
75 | '@babel/core': 7.14.8
76 | '@babel/helper-validator-option': 7.14.5
77 | browserslist: 4.16.6
78 | semver: 6.3.0
79 | dev: true
80 |
81 | /@babel/helper-create-class-features-plugin/7.14.8_@babel+core@7.14.8:
82 | resolution: {integrity: sha512-bpYvH8zJBWzeqi1o+co8qOrw+EXzQ/0c74gVmY205AWXy9nifHrOg77y+1zwxX5lXE7Icq4sPlSQ4O2kWBrteQ==}
83 | engines: {node: '>=6.9.0'}
84 | peerDependencies:
85 | '@babel/core': ^7.0.0
86 | dependencies:
87 | '@babel/core': 7.14.8
88 | '@babel/helper-annotate-as-pure': 7.14.5
89 | '@babel/helper-function-name': 7.14.5
90 | '@babel/helper-member-expression-to-functions': 7.14.7
91 | '@babel/helper-optimise-call-expression': 7.14.5
92 | '@babel/helper-replace-supers': 7.14.5
93 | '@babel/helper-split-export-declaration': 7.14.5
94 | transitivePeerDependencies:
95 | - supports-color
96 | dev: true
97 |
98 | /@babel/helper-function-name/7.14.5:
99 | resolution: {integrity: sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==}
100 | engines: {node: '>=6.9.0'}
101 | dependencies:
102 | '@babel/helper-get-function-arity': 7.14.5
103 | '@babel/template': 7.14.5
104 | '@babel/types': 7.14.8
105 | dev: true
106 |
107 | /@babel/helper-get-function-arity/7.14.5:
108 | resolution: {integrity: sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==}
109 | engines: {node: '>=6.9.0'}
110 | dependencies:
111 | '@babel/types': 7.14.8
112 | dev: true
113 |
114 | /@babel/helper-hoist-variables/7.14.5:
115 | resolution: {integrity: sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==}
116 | engines: {node: '>=6.9.0'}
117 | dependencies:
118 | '@babel/types': 7.14.8
119 | dev: true
120 |
121 | /@babel/helper-member-expression-to-functions/7.14.7:
122 | resolution: {integrity: sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==}
123 | engines: {node: '>=6.9.0'}
124 | dependencies:
125 | '@babel/types': 7.14.8
126 | dev: true
127 |
128 | /@babel/helper-module-imports/7.14.5:
129 | resolution: {integrity: sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==}
130 | engines: {node: '>=6.9.0'}
131 | dependencies:
132 | '@babel/types': 7.14.8
133 | dev: true
134 |
135 | /@babel/helper-module-transforms/7.14.8:
136 | resolution: {integrity: sha512-RyE+NFOjXn5A9YU1dkpeBaduagTlZ0+fccnIcAGbv1KGUlReBj7utF7oEth8IdIBQPcux0DDgW5MFBH2xu9KcA==}
137 | engines: {node: '>=6.9.0'}
138 | dependencies:
139 | '@babel/helper-module-imports': 7.14.5
140 | '@babel/helper-replace-supers': 7.14.5
141 | '@babel/helper-simple-access': 7.14.8
142 | '@babel/helper-split-export-declaration': 7.14.5
143 | '@babel/helper-validator-identifier': 7.14.8
144 | '@babel/template': 7.14.5
145 | '@babel/traverse': 7.14.8
146 | '@babel/types': 7.14.8
147 | transitivePeerDependencies:
148 | - supports-color
149 | dev: true
150 |
151 | /@babel/helper-optimise-call-expression/7.14.5:
152 | resolution: {integrity: sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==}
153 | engines: {node: '>=6.9.0'}
154 | dependencies:
155 | '@babel/types': 7.14.8
156 | dev: true
157 |
158 | /@babel/helper-plugin-utils/7.14.5:
159 | resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==}
160 | engines: {node: '>=6.9.0'}
161 | dev: true
162 |
163 | /@babel/helper-replace-supers/7.14.5:
164 | resolution: {integrity: sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==}
165 | engines: {node: '>=6.9.0'}
166 | dependencies:
167 | '@babel/helper-member-expression-to-functions': 7.14.7
168 | '@babel/helper-optimise-call-expression': 7.14.5
169 | '@babel/traverse': 7.14.8
170 | '@babel/types': 7.14.8
171 | transitivePeerDependencies:
172 | - supports-color
173 | dev: true
174 |
175 | /@babel/helper-simple-access/7.14.8:
176 | resolution: {integrity: sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==}
177 | engines: {node: '>=6.9.0'}
178 | dependencies:
179 | '@babel/types': 7.14.8
180 | dev: true
181 |
182 | /@babel/helper-split-export-declaration/7.14.5:
183 | resolution: {integrity: sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==}
184 | engines: {node: '>=6.9.0'}
185 | dependencies:
186 | '@babel/types': 7.14.8
187 | dev: true
188 |
189 | /@babel/helper-validator-identifier/7.14.8:
190 | resolution: {integrity: sha512-ZGy6/XQjllhYQrNw/3zfWRwZCTVSiBLZ9DHVZxn9n2gip/7ab8mv2TWlKPIBk26RwedCBoWdjLmn+t9na2Gcow==}
191 | engines: {node: '>=6.9.0'}
192 | dev: true
193 |
194 | /@babel/helper-validator-option/7.14.5:
195 | resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==}
196 | engines: {node: '>=6.9.0'}
197 | dev: true
198 |
199 | /@babel/helpers/7.14.8:
200 | resolution: {integrity: sha512-ZRDmI56pnV+p1dH6d+UN6GINGz7Krps3+270qqI9UJ4wxYThfAIcI5i7j5vXC4FJ3Wap+S9qcebxeYiqn87DZw==}
201 | engines: {node: '>=6.9.0'}
202 | dependencies:
203 | '@babel/template': 7.14.5
204 | '@babel/traverse': 7.14.8
205 | '@babel/types': 7.14.8
206 | transitivePeerDependencies:
207 | - supports-color
208 | dev: true
209 |
210 | /@babel/highlight/7.14.5:
211 | resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==}
212 | engines: {node: '>=6.9.0'}
213 | dependencies:
214 | '@babel/helper-validator-identifier': 7.14.8
215 | chalk: 2.4.2
216 | js-tokens: 4.0.0
217 | dev: true
218 |
219 | /@babel/parser/7.14.8:
220 | resolution: {integrity: sha512-syoCQFOoo/fzkWDeM0dLEZi5xqurb5vuyzwIMNZRNun+N/9A4cUZeQaE7dTrB8jGaKuJRBtEOajtnmw0I5hvvA==}
221 | engines: {node: '>=6.0.0'}
222 | hasBin: true
223 | dev: true
224 |
225 | /@babel/plugin-syntax-jsx/7.14.5_@babel+core@7.14.8:
226 | resolution: {integrity: sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==}
227 | engines: {node: '>=6.9.0'}
228 | peerDependencies:
229 | '@babel/core': ^7.0.0-0
230 | dependencies:
231 | '@babel/core': 7.14.8
232 | '@babel/helper-plugin-utils': 7.14.5
233 | dev: true
234 |
235 | /@babel/plugin-syntax-typescript/7.14.5_@babel+core@7.14.8:
236 | resolution: {integrity: sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==}
237 | engines: {node: '>=6.9.0'}
238 | peerDependencies:
239 | '@babel/core': ^7.0.0-0
240 | dependencies:
241 | '@babel/core': 7.14.8
242 | '@babel/helper-plugin-utils': 7.14.5
243 | dev: true
244 |
245 | /@babel/plugin-transform-typescript/7.14.6_@babel+core@7.14.8:
246 | resolution: {integrity: sha512-XlTdBq7Awr4FYIzqhmYY80WN0V0azF74DMPyFqVHBvf81ZUgc4X7ZOpx6O8eLDK6iM5cCQzeyJw0ynTaefixRA==}
247 | engines: {node: '>=6.9.0'}
248 | peerDependencies:
249 | '@babel/core': ^7.0.0-0
250 | dependencies:
251 | '@babel/core': 7.14.8
252 | '@babel/helper-create-class-features-plugin': 7.14.8_@babel+core@7.14.8
253 | '@babel/helper-plugin-utils': 7.14.5
254 | '@babel/plugin-syntax-typescript': 7.14.5_@babel+core@7.14.8
255 | transitivePeerDependencies:
256 | - supports-color
257 | dev: true
258 |
259 | /@babel/preset-typescript/7.14.5_@babel+core@7.14.8:
260 | resolution: {integrity: sha512-u4zO6CdbRKbS9TypMqrlGH7sd2TAJppZwn3c/ZRLeO/wGsbddxgbPDUZVNrie3JWYLQ9vpineKlsrWFvO6Pwkw==}
261 | engines: {node: '>=6.9.0'}
262 | peerDependencies:
263 | '@babel/core': ^7.0.0-0
264 | dependencies:
265 | '@babel/core': 7.14.8
266 | '@babel/helper-plugin-utils': 7.14.5
267 | '@babel/helper-validator-option': 7.14.5
268 | '@babel/plugin-transform-typescript': 7.14.6_@babel+core@7.14.8
269 | transitivePeerDependencies:
270 | - supports-color
271 | dev: true
272 |
273 | /@babel/template/7.14.5:
274 | resolution: {integrity: sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==}
275 | engines: {node: '>=6.9.0'}
276 | dependencies:
277 | '@babel/code-frame': 7.14.5
278 | '@babel/parser': 7.14.8
279 | '@babel/types': 7.14.8
280 | dev: true
281 |
282 | /@babel/traverse/7.14.8:
283 | resolution: {integrity: sha512-kexHhzCljJcFNn1KYAQ6A5wxMRzq9ebYpEDV4+WdNyr3i7O44tanbDOR/xjiG2F3sllan+LgwK+7OMk0EmydHg==}
284 | engines: {node: '>=6.9.0'}
285 | dependencies:
286 | '@babel/code-frame': 7.14.5
287 | '@babel/generator': 7.14.8
288 | '@babel/helper-function-name': 7.14.5
289 | '@babel/helper-hoist-variables': 7.14.5
290 | '@babel/helper-split-export-declaration': 7.14.5
291 | '@babel/parser': 7.14.8
292 | '@babel/types': 7.14.8
293 | debug: 4.3.2
294 | globals: 11.12.0
295 | transitivePeerDependencies:
296 | - supports-color
297 | dev: true
298 |
299 | /@babel/types/7.14.8:
300 | resolution: {integrity: sha512-iob4soQa7dZw8nodR/KlOQkPh9S4I8RwCxwRIFuiMRYjOzH/KJzdUfDgz6cGi5dDaclXF4P2PAhCdrBJNIg68Q==}
301 | engines: {node: '>=6.9.0'}
302 | dependencies:
303 | '@babel/helper-validator-identifier': 7.14.8
304 | to-fast-properties: 2.0.0
305 | dev: true
306 |
307 | /ansi-styles/3.2.1:
308 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
309 | engines: {node: '>=4'}
310 | dependencies:
311 | color-convert: 1.9.3
312 | dev: true
313 |
314 | /babel-plugin-jsx-dom-expressions/0.29.9_@babel+core@7.14.8:
315 | resolution: {integrity: sha512-NuYjihC9A93gxhx9zefbdjD8doMPPOKuKzj+PSg5QBne25n/ikcRpcQy3bcbDBFw4OgJFtUfQQ1F9KAuy+ezcQ==}
316 | dependencies:
317 | '@babel/helper-module-imports': 7.14.5
318 | '@babel/plugin-syntax-jsx': 7.14.5_@babel+core@7.14.8
319 | '@babel/types': 7.14.8
320 | transitivePeerDependencies:
321 | - '@babel/core'
322 | dev: true
323 |
324 | /babel-preset-solid/1.0.6_@babel+core@7.14.8:
325 | resolution: {integrity: sha512-D+VLpF8WCif5IQmojypImyhlarxcjCD/lBOd4DBEDStXGMGNdlFBgsuVkKFiJ1yQA2KsHLljpbqrv9GsZYrZ3w==}
326 | dependencies:
327 | babel-plugin-jsx-dom-expressions: 0.29.9_@babel+core@7.14.8
328 | transitivePeerDependencies:
329 | - '@babel/core'
330 | dev: true
331 |
332 | /browserslist/4.16.6:
333 | resolution: {integrity: sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==}
334 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
335 | hasBin: true
336 | dependencies:
337 | caniuse-lite: 1.0.30001248
338 | colorette: 1.2.2
339 | electron-to-chromium: 1.3.791
340 | escalade: 3.1.1
341 | node-releases: 1.1.73
342 | dev: true
343 |
344 | /caniuse-lite/1.0.30001248:
345 | resolution: {integrity: sha512-NwlQbJkxUFJ8nMErnGtT0QTM2TJ33xgz4KXJSMIrjXIbDVdaYueGyjOrLKRtJC+rTiWfi6j5cnZN1NBiSBJGNw==}
346 | dev: true
347 |
348 | /chalk/2.4.2:
349 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
350 | engines: {node: '>=4'}
351 | dependencies:
352 | ansi-styles: 3.2.1
353 | escape-string-regexp: 1.0.5
354 | supports-color: 5.5.0
355 | dev: true
356 |
357 | /color-convert/1.9.3:
358 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
359 | dependencies:
360 | color-name: 1.1.3
361 | dev: true
362 |
363 | /color-name/1.1.3:
364 | resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
365 | dev: true
366 |
367 | /colorette/1.2.2:
368 | resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==}
369 | dev: true
370 |
371 | /convert-source-map/1.8.0:
372 | resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==}
373 | dependencies:
374 | safe-buffer: 5.1.2
375 | dev: true
376 |
377 | /debug/4.3.2:
378 | resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==}
379 | engines: {node: '>=6.0'}
380 | peerDependencies:
381 | supports-color: '*'
382 | peerDependenciesMeta:
383 | supports-color:
384 | optional: true
385 | dependencies:
386 | ms: 2.1.2
387 | dev: true
388 |
389 | /electron-to-chromium/1.3.791:
390 | resolution: {integrity: sha512-Tdx7w1fZpeWOOBluK+kXTAKCXyc79K65RB6Zp0+sPSZZhDjXlrxfGlXrlMGVVQUrKCyEZFQs1UBBLNz5IdbF0g==}
391 | dev: true
392 |
393 | /esbuild/0.12.17:
394 | resolution: {integrity: sha512-GshKJyVYUnlSXIZj/NheC2O0Kblh42CS7P1wJyTbbIHevTG4jYMS9NNw8EOd8dDWD0dzydYHS01MpZoUcQXB4g==}
395 | hasBin: true
396 | requiresBuild: true
397 | dev: true
398 |
399 | /escalade/3.1.1:
400 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
401 | engines: {node: '>=6'}
402 | dev: true
403 |
404 | /escape-string-regexp/1.0.5:
405 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
406 | engines: {node: '>=0.8.0'}
407 | dev: true
408 |
409 | /fsevents/2.3.2:
410 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
411 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
412 | os: [darwin]
413 | dev: true
414 | optional: true
415 |
416 | /function-bind/1.1.1:
417 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
418 | dev: true
419 |
420 | /gensync/1.0.0-beta.2:
421 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
422 | engines: {node: '>=6.9.0'}
423 | dev: true
424 |
425 | /globals/11.12.0:
426 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
427 | engines: {node: '>=4'}
428 | dev: true
429 |
430 | /has-flag/3.0.0:
431 | resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=}
432 | engines: {node: '>=4'}
433 | dev: true
434 |
435 | /has/1.0.3:
436 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
437 | engines: {node: '>= 0.4.0'}
438 | dependencies:
439 | function-bind: 1.1.1
440 | dev: true
441 |
442 | /is-core-module/2.5.0:
443 | resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==}
444 | dependencies:
445 | has: 1.0.3
446 | dev: true
447 |
448 | /is-what/3.14.1:
449 | resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==}
450 | dev: true
451 |
452 | /js-tokens/4.0.0:
453 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
454 | dev: true
455 |
456 | /jsesc/2.5.2:
457 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
458 | engines: {node: '>=4'}
459 | hasBin: true
460 | dev: true
461 |
462 | /json5/2.2.0:
463 | resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==}
464 | engines: {node: '>=6'}
465 | hasBin: true
466 | dependencies:
467 | minimist: 1.2.5
468 | dev: true
469 |
470 | /merge-anything/4.0.1:
471 | resolution: {integrity: sha512-KsFjBYc3juDoHz9Vzd5fte1nqp06H8SQ+yU344Dd0ZunwSgtltnC0kgKds8cbocJGyViLcBQuHkitbDXAqW+LQ==}
472 | dependencies:
473 | is-what: 3.14.1
474 | ts-toolbelt: 9.6.0
475 | dev: true
476 |
477 | /minimist/1.2.5:
478 | resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==}
479 | dev: true
480 |
481 | /ms/2.1.2:
482 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
483 | dev: true
484 |
485 | /nanoid/3.1.23:
486 | resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==}
487 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
488 | hasBin: true
489 | dev: true
490 |
491 | /node-releases/1.1.73:
492 | resolution: {integrity: sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==}
493 | dev: true
494 |
495 | /path-parse/1.0.7:
496 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
497 | dev: true
498 |
499 | /postcss/8.3.6:
500 | resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==}
501 | engines: {node: ^10 || ^12 || >=14}
502 | dependencies:
503 | colorette: 1.2.2
504 | nanoid: 3.1.23
505 | source-map-js: 0.6.2
506 | dev: true
507 |
508 | /resolve/1.20.0:
509 | resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==}
510 | dependencies:
511 | is-core-module: 2.5.0
512 | path-parse: 1.0.7
513 | dev: true
514 |
515 | /rollup/2.55.1:
516 | resolution: {integrity: sha512-1P9w5fpb6b4qroePh8vHKGIvPNxwoCQhjJpIqfZGHLKpZ0xcU2/XBmFxFbc9697/6bmHpmFTLk5R1dAQhFSo0g==}
517 | engines: {node: '>=10.0.0'}
518 | hasBin: true
519 | optionalDependencies:
520 | fsevents: 2.3.2
521 | dev: true
522 |
523 | /safe-buffer/5.1.2:
524 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
525 | dev: true
526 |
527 | /semver/6.3.0:
528 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==}
529 | hasBin: true
530 | dev: true
531 |
532 | /solid-js/1.0.7:
533 | resolution: {integrity: sha512-2jHCXLwp/B7P4kh5tl0ospRaC2F++BU0uWwtfgK/8Zc/MROOyCmmkjHpLAQC2u2NWYVGnIclDIJ2FGDXJ0wcYg==}
534 |
535 | /solid-refresh/0.2.2_solid-js@1.0.7:
536 | resolution: {integrity: sha512-oQN3pUJ8fBd4ldMxZVqK7S4PGzAn1yx1B5bRRfANoxoqmHyY2QLfzrOzXsYnAkhh272K+W24oKgFWlmdUZ6HtQ==}
537 | peerDependencies:
538 | solid-js: ^1.0.0
539 | dependencies:
540 | solid-js: 1.0.7
541 | dev: true
542 |
543 | /source-map-js/0.6.2:
544 | resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==}
545 | engines: {node: '>=0.10.0'}
546 | dev: true
547 |
548 | /source-map/0.5.7:
549 | resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
550 | engines: {node: '>=0.10.0'}
551 | dev: true
552 |
553 | /supports-color/5.5.0:
554 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
555 | engines: {node: '>=4'}
556 | dependencies:
557 | has-flag: 3.0.0
558 | dev: true
559 |
560 | /to-fast-properties/2.0.0:
561 | resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
562 | engines: {node: '>=4'}
563 | dev: true
564 |
565 | /ts-toolbelt/9.6.0:
566 | resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==}
567 | dev: true
568 |
569 | /vite-plugin-solid/2.0.1:
570 | resolution: {integrity: sha512-C6ZHRmre4JmjgPMiaGfSiAwpR2dcOYXztPt+jlQisD7iFBe1pB8nURSmWfTF+tpFtPr2Ir7GmLZTYui9p5Wjmg==}
571 | dependencies:
572 | '@babel/core': 7.14.8
573 | '@babel/preset-typescript': 7.14.5_@babel+core@7.14.8
574 | babel-preset-solid: 1.0.6_@babel+core@7.14.8
575 | merge-anything: 4.0.1
576 | solid-js: 1.0.7
577 | solid-refresh: 0.2.2_solid-js@1.0.7
578 | vite: 2.4.4
579 | transitivePeerDependencies:
580 | - supports-color
581 | dev: true
582 |
583 | /vite/2.4.4:
584 | resolution: {integrity: sha512-m1wK6pFJKmaYA6AeZIUXyiAgUAAJzVXhIMYCdZUpCaFMGps0v0IlNJtbmPvkUhVEyautalajmnW5X6NboUPsnw==}
585 | engines: {node: '>=12.0.0'}
586 | hasBin: true
587 | dependencies:
588 | esbuild: 0.12.17
589 | postcss: 8.3.6
590 | resolve: 1.20.0
591 | rollup: 2.55.1
592 | optionalDependencies:
593 | fsevents: 2.3.2
594 | dev: true
595 |
--------------------------------------------------------------------------------
/solid-app/src/App.jsx:
--------------------------------------------------------------------------------
1 | import { createSignal, onMount } from "solid-js";
2 |
3 | function App() {
4 |
5 | const [todos, setTodos] = createSignal([]);
6 | let todoText;
7 |
8 | onMount(() => {
9 | const existingTodos = localStorage.getItem('todos');
10 | setTodos(existingTodos ? JSON.parse(existingTodos) : []);
11 | });
12 |
13 | function addTodo(event) {
14 | event.preventDefault();
15 | const next = [...todos(), todoText.value];
16 | setTodos(next);
17 | localStorage.setItem('todos', JSON.stringify(next));
18 | }
19 |
20 | return (
21 |
22 |
23 | {todos().map(todo => (- {todo}
))}
24 |
25 |
26 |
30 |
31 | );
32 | }
33 |
34 | export default App;
35 |
--------------------------------------------------------------------------------
/solid-app/src/App.module.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .logo {
6 | animation: logo-spin infinite 20s linear;
7 | height: 40vmin;
8 | pointer-events: none;
9 | }
10 |
11 | .header {
12 | background-color: #282c34;
13 | min-height: 100vh;
14 | display: flex;
15 | flex-direction: column;
16 | align-items: center;
17 | justify-content: center;
18 | font-size: calc(10px + 2vmin);
19 | color: white;
20 | }
21 |
22 | .link {
23 | color: #b318f0;
24 | }
25 |
26 | @keyframes logo-spin {
27 | from {
28 | transform: rotate(0deg);
29 | }
30 | to {
31 | transform: rotate(360deg);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/solid-app/src/assets/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/solid-app/src/assets/favicon.ico
--------------------------------------------------------------------------------
/solid-app/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
12 | monospace;
13 | }
14 |
--------------------------------------------------------------------------------
/solid-app/src/index.jsx:
--------------------------------------------------------------------------------
1 | import { render } from "solid-js/web";
2 |
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | render(App, document.getElementById("root"));
7 |
--------------------------------------------------------------------------------
/solid-app/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/solid-app/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 | import solidPlugin from "vite-plugin-solid";
3 |
4 | export default defineConfig({
5 | plugins: [solidPlugin()],
6 | build: {
7 | target: "esnext",
8 | polyfillDynamicImport: false,
9 | },
10 | });
11 |
--------------------------------------------------------------------------------
/stencil-app/.editorconfig:
--------------------------------------------------------------------------------
1 | # http://editorconfig.org
2 |
3 | root = true
4 |
5 | [*]
6 | charset = utf-8
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | insert_final_newline = false
15 | trim_trailing_whitespace = false
16 |
--------------------------------------------------------------------------------
/stencil-app/.gitignore:
--------------------------------------------------------------------------------
1 | dist/
2 | www/
3 | loader/
4 |
5 | *~
6 | *.sw[mnpcod]
7 | *.log
8 | *.lock
9 | *.tmp
10 | *.tmp.*
11 | log.txt
12 | *.sublime-project
13 | *.sublime-workspace
14 |
15 | .stencil/
16 | .idea/
17 | .vscode/
18 | .sass-cache/
19 | .versions/
20 | node_modules/
21 | $RECYCLE.BIN/
22 |
23 | .DS_Store
24 | Thumbs.db
25 | UserInterfaceState.xcuserstate
26 | .env
27 |
--------------------------------------------------------------------------------
/stencil-app/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "arrowParens": "avoid",
3 | "bracketSpacing": true,
4 | "jsxBracketSameLine": false,
5 | "jsxSingleQuote": false,
6 | "quoteProps": "consistent",
7 | "printWidth": 180,
8 | "semi": true,
9 | "singleQuote": true,
10 | "tabWidth": 2,
11 | "trailingComma": "all",
12 | "useTabs": false
13 | }
14 |
--------------------------------------------------------------------------------
/stencil-app/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018
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.
22 |
--------------------------------------------------------------------------------
/stencil-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "stencil-app",
3 | "version": "0.0.1",
4 | "description": "Stencil Component Starter",
5 | "main": "dist/index.cjs.js",
6 | "module": "dist/custom-elements/index.js",
7 | "es2015": "dist/esm/index.mjs",
8 | "es2017": "dist/esm/index.mjs",
9 | "types": "dist/custom-elements/index.d.ts",
10 | "collection": "dist/collection/collection-manifest.json",
11 | "collection:main": "dist/collection/index.js",
12 | "unpkg": "dist/stencil-app/stencil-app.esm.js",
13 | "files": [
14 | "dist/",
15 | "loader/"
16 | ],
17 | "scripts": {
18 | "build": "stencil build --docs",
19 | "start": "stencil build --dev --watch --serve",
20 | "test": "stencil test --spec --e2e",
21 | "test.watch": "stencil test --spec --e2e --watchAll",
22 | "generate": "stencil generate"
23 | },
24 | "dependencies": {
25 | "@stencil/core": "^2.0.1"
26 | },
27 | "devDependencies": {
28 | "@types/jest": "^26.0.24",
29 | "jest": "^26.6.3",
30 | "jest-cli": "^26.6.3",
31 | "puppeteer": "^5.5.0",
32 | "@types/puppeteer": "^5.4.3"
33 | },
34 | "license": "MIT"
35 | }
36 |
--------------------------------------------------------------------------------
/stencil-app/readme.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Stencil Component Starter
4 |
5 | This is a starter project for building a standalone Web Component using Stencil.
6 |
7 | Stencil is also great for building entire apps. For that, use the [stencil-app-starter](https://github.com/ionic-team/stencil-app-starter) instead.
8 |
9 | # Stencil
10 |
11 | Stencil is a compiler for building fast web apps using Web Components.
12 |
13 | Stencil combines the best concepts of the most popular frontend frameworks into a compile-time rather than run-time tool. Stencil takes TypeScript, JSX, a tiny virtual DOM layer, efficient one-way data binding, an asynchronous rendering pipeline (similar to React Fiber), and lazy-loading out of the box, and generates 100% standards-based Web Components that run in any browser supporting the Custom Elements v1 spec.
14 |
15 | Stencil components are just Web Components, so they work in any major framework or with no framework at all.
16 |
17 | ## Getting Started
18 |
19 | To start building a new web component using Stencil, clone this repo to a new directory:
20 |
21 | ```bash
22 | git clone https://github.com/ionic-team/stencil-component-starter.git my-component
23 | cd my-component
24 | git remote rm origin
25 | ```
26 |
27 | and run:
28 |
29 | ```bash
30 | npm install
31 | npm start
32 | ```
33 |
34 | To build the component for production, run:
35 |
36 | ```bash
37 | npm run build
38 | ```
39 |
40 | To run the unit tests for the components, run:
41 |
42 | ```bash
43 | npm test
44 | ```
45 |
46 | Need help? Check out our docs [here](https://stenciljs.com/docs/my-first-component).
47 |
48 |
49 | ## Naming Components
50 |
51 | When creating new component tags, we recommend _not_ using `stencil` in the component name (ex: ``). This is because the generated component has little to nothing to do with Stencil; it's just a web component!
52 |
53 | Instead, use a prefix that fits your company or any name for a group of related components. For example, all of the Ionic generated web components use the prefix `ion`.
54 |
55 |
56 | ## Using this component
57 |
58 | There are three strategies we recommend for using web components built with Stencil.
59 |
60 | The first step for all three of these strategies is to [publish to NPM](https://docs.npmjs.com/getting-started/publishing-npm-packages).
61 |
62 | ### Script tag
63 |
64 | - Put a script tag similar to this `` in the head of your index.html
65 | - Then you can use the element anywhere in your template, JSX, html etc
66 |
67 | ### Node Modules
68 | - Run `npm install my-component --save`
69 | - Put a script tag similar to this `` in the head of your index.html
70 | - Then you can use the element anywhere in your template, JSX, html etc
71 |
72 | ### In a stencil-starter app
73 | - Run `npm install my-component --save`
74 | - Add an import to the npm packages `import my-component;`
75 | - Then you can use the element anywhere in your template, JSX, html etc
76 |
--------------------------------------------------------------------------------
/stencil-app/src/components.d.ts:
--------------------------------------------------------------------------------
1 | /* eslint-disable */
2 | /* tslint:disable */
3 | /**
4 | * This is an autogenerated file created by the Stencil compiler.
5 | * It contains typing information for all components that exist in this project.
6 | */
7 | import { HTMLStencilElement, JSXBase } from "@stencil/core/internal";
8 | export namespace Components {
9 | interface MyComponent {
10 | }
11 | }
12 | declare global {
13 | interface HTMLMyComponentElement extends Components.MyComponent, HTMLStencilElement {
14 | }
15 | var HTMLMyComponentElement: {
16 | prototype: HTMLMyComponentElement;
17 | new (): HTMLMyComponentElement;
18 | };
19 | interface HTMLElementTagNameMap {
20 | "my-component": HTMLMyComponentElement;
21 | }
22 | }
23 | declare namespace LocalJSX {
24 | interface MyComponent {
25 | }
26 | interface IntrinsicElements {
27 | "my-component": MyComponent;
28 | }
29 | }
30 | export { LocalJSX as JSX };
31 | declare module "@stencil/core" {
32 | export namespace JSX {
33 | interface IntrinsicElements {
34 | "my-component": LocalJSX.MyComponent & JSXBase.HTMLAttributes;
35 | }
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/stencil-app/src/components/my-component/my-component.css:
--------------------------------------------------------------------------------
1 | :host {
2 | display: block;
3 | }
4 |
--------------------------------------------------------------------------------
/stencil-app/src/components/my-component/my-component.e2e.ts:
--------------------------------------------------------------------------------
1 | import { newE2EPage } from '@stencil/core/testing';
2 |
3 | describe('my-component', () => {
4 | it('renders', async () => {
5 | const page = await newE2EPage();
6 |
7 | await page.setContent('');
8 | const element = await page.find('my-component');
9 | expect(element).toHaveClass('hydrated');
10 | });
11 |
12 | it('renders changes to the name data', async () => {
13 | const page = await newE2EPage();
14 |
15 | await page.setContent('');
16 | const component = await page.find('my-component');
17 | const element = await page.find('my-component >>> div');
18 | expect(element.textContent).toEqual(`Hello, World! I'm `);
19 |
20 | component.setProperty('first', 'James');
21 | await page.waitForChanges();
22 | expect(element.textContent).toEqual(`Hello, World! I'm James`);
23 |
24 | component.setProperty('last', 'Quincy');
25 | await page.waitForChanges();
26 | expect(element.textContent).toEqual(`Hello, World! I'm James Quincy`);
27 |
28 | component.setProperty('middle', 'Earl');
29 | await page.waitForChanges();
30 | expect(element.textContent).toEqual(`Hello, World! I'm James Earl Quincy`);
31 | });
32 | });
33 |
--------------------------------------------------------------------------------
/stencil-app/src/components/my-component/my-component.spec.ts:
--------------------------------------------------------------------------------
1 | import { newSpecPage } from '@stencil/core/testing';
2 | import { MyComponent } from './my-component';
3 |
4 | describe('my-component', () => {
5 | it('renders', async () => {
6 | const { root } = await newSpecPage({
7 | components: [MyComponent],
8 | html: '',
9 | });
10 | expect(root).toEqualHtml(`
11 |
12 |
13 |
14 | Hello, World! I'm
15 |
16 |
17 |
18 | `);
19 | });
20 |
21 | it('renders with values', async () => {
22 | const { root } = await newSpecPage({
23 | components: [MyComponent],
24 | html: ``,
25 | });
26 | expect(root).toEqualHtml(`
27 |
28 |
29 |
30 | Hello, World! I'm Stencil 'Don't call me a framework' JS
31 |
32 |
33 |
34 | `);
35 | });
36 | });
37 |
--------------------------------------------------------------------------------
/stencil-app/src/components/my-component/my-component.tsx:
--------------------------------------------------------------------------------
1 | import { Component, Prop, h, State } from '@stencil/core';
2 |
3 | @Component({
4 | tag: 'my-component',
5 | styleUrl: 'my-component.css',
6 | shadow: true,
7 | })
8 | export class MyComponent {
9 |
10 | @State() todoText = '';
11 | @State() todos = [];
12 |
13 | componentWillLoad() {
14 | const existingTodos = localStorage.getItem('todos');
15 | this.todos = JSON.parse(existingTodos as string) || [];
16 | }
17 |
18 | private addTodo(event) {
19 | event.preventDefault();
20 | this.todos = [...this.todos, this.todoText]
21 | localStorage.setItem('todos', JSON.stringify(this.todos));
22 | }
23 |
24 | render() {
25 | return (
26 |
27 |
28 | {this.todos.map(todo => (- {todo}
))}
29 |
30 |
31 |
35 |
36 |
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/stencil-app/src/components/my-component/readme.md:
--------------------------------------------------------------------------------
1 | # my-component
2 |
3 |
4 |
5 |
6 |
7 |
8 | ## Properties
9 |
10 | | Property | Attribute | Description | Type | Default |
11 | | -------- | --------- | --------------- | -------- | ----------- |
12 | | `first` | `first` | The first name | `string` | `undefined` |
13 | | `last` | `last` | The last name | `string` | `undefined` |
14 | | `middle` | `middle` | The middle name | `string` | `undefined` |
15 |
16 |
17 | ----------------------------------------------
18 |
19 | *Built with [StencilJS](https://stenciljs.com/)*
20 |
--------------------------------------------------------------------------------
/stencil-app/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Stencil Component Starter
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/stencil-app/src/index.ts:
--------------------------------------------------------------------------------
1 | export { Components, JSX } from './components';
2 |
--------------------------------------------------------------------------------
/stencil-app/src/utils/utils.spec.ts:
--------------------------------------------------------------------------------
1 | import { format } from './utils';
2 |
3 | describe('format', () => {
4 | it('returns empty string for no names defined', () => {
5 | expect(format(undefined, undefined, undefined)).toEqual('');
6 | });
7 |
8 | it('formats just first names', () => {
9 | expect(format('Joseph', undefined, undefined)).toEqual('Joseph');
10 | });
11 |
12 | it('formats first and last names', () => {
13 | expect(format('Joseph', undefined, 'Publique')).toEqual('Joseph Publique');
14 | });
15 |
16 | it('formats first, middle and last names', () => {
17 | expect(format('Joseph', 'Quincy', 'Publique')).toEqual('Joseph Quincy Publique');
18 | });
19 | });
20 |
--------------------------------------------------------------------------------
/stencil-app/src/utils/utils.ts:
--------------------------------------------------------------------------------
1 | export function format(first: string, middle: string, last: string): string {
2 | return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');
3 | }
4 |
--------------------------------------------------------------------------------
/stencil-app/stencil.config.ts:
--------------------------------------------------------------------------------
1 | import { Config } from '@stencil/core';
2 |
3 | export const config: Config = {
4 | namespace: 'stencil-app',
5 | outputTargets: [
6 | {
7 | type: 'dist',
8 | esmLoaderPath: '../loader',
9 | },
10 | {
11 | type: 'dist-custom-elements-bundle',
12 | },
13 | {
14 | type: 'docs-readme',
15 | },
16 | {
17 | type: 'www',
18 | serviceWorker: null, // disable service workers
19 | },
20 | ],
21 | };
22 |
--------------------------------------------------------------------------------
/stencil-app/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowSyntheticDefaultImports": true,
4 | "allowUnreachableCode": false,
5 | "declaration": false,
6 | "experimentalDecorators": true,
7 | "lib": [
8 | "dom",
9 | "es2017"
10 | ],
11 | "moduleResolution": "node",
12 | "module": "esnext",
13 | "target": "es2017",
14 | "noUnusedLocals": true,
15 | "noUnusedParameters": true,
16 | "jsx": "react",
17 | "jsxFactory": "h"
18 | },
19 | "include": [
20 | "src"
21 | ],
22 | "exclude": [
23 | "node_modules"
24 | ]
25 | }
26 |
--------------------------------------------------------------------------------
/svelte-app/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules/
2 | /public/build/
3 |
4 | .DS_Store
5 |
--------------------------------------------------------------------------------
/svelte-app/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 |
--------------------------------------------------------------------------------
/svelte-app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-app",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@babel/code-frame": {
8 | "version": "7.14.5",
9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz",
10 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==",
11 | "dev": true,
12 | "requires": {
13 | "@babel/highlight": "^7.14.5"
14 | }
15 | },
16 | "@babel/helper-validator-identifier": {
17 | "version": "7.14.9",
18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz",
19 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==",
20 | "dev": true
21 | },
22 | "@babel/highlight": {
23 | "version": "7.14.5",
24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
25 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
26 | "dev": true,
27 | "requires": {
28 | "@babel/helper-validator-identifier": "^7.14.5",
29 | "chalk": "^2.0.0",
30 | "js-tokens": "^4.0.0"
31 | }
32 | },
33 | "@polka/url": {
34 | "version": "1.0.0-next.15",
35 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.15.tgz",
36 | "integrity": "sha512-15spi3V28QdevleWBNXE4pIls3nFZmBbUGrW9IVPwiQczuSb9n76TCB4bsk8TSel+I1OkHEdPhu5QKMfY6rQHA=="
37 | },
38 | "@rollup/plugin-commonjs": {
39 | "version": "17.1.0",
40 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz",
41 | "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==",
42 | "dev": true,
43 | "requires": {
44 | "@rollup/pluginutils": "^3.1.0",
45 | "commondir": "^1.0.1",
46 | "estree-walker": "^2.0.1",
47 | "glob": "^7.1.6",
48 | "is-reference": "^1.2.1",
49 | "magic-string": "^0.25.7",
50 | "resolve": "^1.17.0"
51 | }
52 | },
53 | "@rollup/plugin-node-resolve": {
54 | "version": "11.2.1",
55 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz",
56 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==",
57 | "dev": true,
58 | "requires": {
59 | "@rollup/pluginutils": "^3.1.0",
60 | "@types/resolve": "1.17.1",
61 | "builtin-modules": "^3.1.0",
62 | "deepmerge": "^4.2.2",
63 | "is-module": "^1.0.0",
64 | "resolve": "^1.19.0"
65 | }
66 | },
67 | "@rollup/pluginutils": {
68 | "version": "3.1.0",
69 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
70 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
71 | "dev": true,
72 | "requires": {
73 | "@types/estree": "0.0.39",
74 | "estree-walker": "^1.0.1",
75 | "picomatch": "^2.2.2"
76 | },
77 | "dependencies": {
78 | "estree-walker": {
79 | "version": "1.0.1",
80 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
81 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
82 | "dev": true
83 | }
84 | }
85 | },
86 | "@types/estree": {
87 | "version": "0.0.39",
88 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
89 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
90 | "dev": true
91 | },
92 | "@types/node": {
93 | "version": "16.4.13",
94 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz",
95 | "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==",
96 | "dev": true
97 | },
98 | "@types/resolve": {
99 | "version": "1.17.1",
100 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
101 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
102 | "dev": true,
103 | "requires": {
104 | "@types/node": "*"
105 | }
106 | },
107 | "ansi-styles": {
108 | "version": "3.2.1",
109 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
110 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
111 | "dev": true,
112 | "requires": {
113 | "color-convert": "^1.9.0"
114 | }
115 | },
116 | "anymatch": {
117 | "version": "3.1.2",
118 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
119 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
120 | "dev": true,
121 | "requires": {
122 | "normalize-path": "^3.0.0",
123 | "picomatch": "^2.0.4"
124 | }
125 | },
126 | "balanced-match": {
127 | "version": "1.0.2",
128 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
129 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
130 | "dev": true
131 | },
132 | "binary-extensions": {
133 | "version": "2.2.0",
134 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
135 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
136 | "dev": true
137 | },
138 | "brace-expansion": {
139 | "version": "1.1.11",
140 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
141 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
142 | "dev": true,
143 | "requires": {
144 | "balanced-match": "^1.0.0",
145 | "concat-map": "0.0.1"
146 | }
147 | },
148 | "braces": {
149 | "version": "3.0.2",
150 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
151 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
152 | "dev": true,
153 | "requires": {
154 | "fill-range": "^7.0.1"
155 | }
156 | },
157 | "buffer-from": {
158 | "version": "1.1.2",
159 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
160 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
161 | "dev": true
162 | },
163 | "builtin-modules": {
164 | "version": "3.2.0",
165 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
166 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
167 | "dev": true
168 | },
169 | "chalk": {
170 | "version": "2.4.2",
171 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
172 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
173 | "dev": true,
174 | "requires": {
175 | "ansi-styles": "^3.2.1",
176 | "escape-string-regexp": "^1.0.5",
177 | "supports-color": "^5.3.0"
178 | }
179 | },
180 | "chokidar": {
181 | "version": "3.5.2",
182 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
183 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
184 | "dev": true,
185 | "requires": {
186 | "anymatch": "~3.1.2",
187 | "braces": "~3.0.2",
188 | "fsevents": "~2.3.2",
189 | "glob-parent": "~5.1.2",
190 | "is-binary-path": "~2.1.0",
191 | "is-glob": "~4.0.1",
192 | "normalize-path": "~3.0.0",
193 | "readdirp": "~3.6.0"
194 | }
195 | },
196 | "color-convert": {
197 | "version": "1.9.3",
198 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
199 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
200 | "dev": true,
201 | "requires": {
202 | "color-name": "1.1.3"
203 | }
204 | },
205 | "color-name": {
206 | "version": "1.1.3",
207 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
208 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
209 | "dev": true
210 | },
211 | "commander": {
212 | "version": "2.20.3",
213 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
214 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
215 | "dev": true
216 | },
217 | "commondir": {
218 | "version": "1.0.1",
219 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
220 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
221 | "dev": true
222 | },
223 | "concat-map": {
224 | "version": "0.0.1",
225 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
226 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
227 | "dev": true
228 | },
229 | "console-clear": {
230 | "version": "1.1.1",
231 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
232 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ=="
233 | },
234 | "deepmerge": {
235 | "version": "4.2.2",
236 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
237 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
238 | "dev": true
239 | },
240 | "escape-string-regexp": {
241 | "version": "1.0.5",
242 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
243 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
244 | "dev": true
245 | },
246 | "estree-walker": {
247 | "version": "2.0.2",
248 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
249 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
250 | "dev": true
251 | },
252 | "fill-range": {
253 | "version": "7.0.1",
254 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
255 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
256 | "dev": true,
257 | "requires": {
258 | "to-regex-range": "^5.0.1"
259 | }
260 | },
261 | "fs.realpath": {
262 | "version": "1.0.0",
263 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
264 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
265 | "dev": true
266 | },
267 | "fsevents": {
268 | "version": "2.3.2",
269 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
270 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
271 | "dev": true,
272 | "optional": true
273 | },
274 | "function-bind": {
275 | "version": "1.1.1",
276 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
277 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
278 | "dev": true
279 | },
280 | "get-port": {
281 | "version": "3.2.0",
282 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
283 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw="
284 | },
285 | "glob": {
286 | "version": "7.1.7",
287 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
288 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
289 | "dev": true,
290 | "requires": {
291 | "fs.realpath": "^1.0.0",
292 | "inflight": "^1.0.4",
293 | "inherits": "2",
294 | "minimatch": "^3.0.4",
295 | "once": "^1.3.0",
296 | "path-is-absolute": "^1.0.0"
297 | }
298 | },
299 | "glob-parent": {
300 | "version": "5.1.2",
301 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
302 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
303 | "dev": true,
304 | "requires": {
305 | "is-glob": "^4.0.1"
306 | }
307 | },
308 | "has": {
309 | "version": "1.0.3",
310 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
311 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
312 | "dev": true,
313 | "requires": {
314 | "function-bind": "^1.1.1"
315 | }
316 | },
317 | "has-flag": {
318 | "version": "3.0.0",
319 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
320 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
321 | "dev": true
322 | },
323 | "inflight": {
324 | "version": "1.0.6",
325 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
326 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
327 | "dev": true,
328 | "requires": {
329 | "once": "^1.3.0",
330 | "wrappy": "1"
331 | }
332 | },
333 | "inherits": {
334 | "version": "2.0.4",
335 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
336 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
337 | "dev": true
338 | },
339 | "is-binary-path": {
340 | "version": "2.1.0",
341 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
342 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
343 | "dev": true,
344 | "requires": {
345 | "binary-extensions": "^2.0.0"
346 | }
347 | },
348 | "is-core-module": {
349 | "version": "2.5.0",
350 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz",
351 | "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==",
352 | "dev": true,
353 | "requires": {
354 | "has": "^1.0.3"
355 | }
356 | },
357 | "is-extglob": {
358 | "version": "2.1.1",
359 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
360 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
361 | "dev": true
362 | },
363 | "is-glob": {
364 | "version": "4.0.1",
365 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
366 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
367 | "dev": true,
368 | "requires": {
369 | "is-extglob": "^2.1.1"
370 | }
371 | },
372 | "is-module": {
373 | "version": "1.0.0",
374 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
375 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
376 | "dev": true
377 | },
378 | "is-number": {
379 | "version": "7.0.0",
380 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
381 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
382 | "dev": true
383 | },
384 | "is-reference": {
385 | "version": "1.2.1",
386 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
387 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
388 | "dev": true,
389 | "requires": {
390 | "@types/estree": "*"
391 | }
392 | },
393 | "jest-worker": {
394 | "version": "26.6.2",
395 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
396 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
397 | "dev": true,
398 | "requires": {
399 | "@types/node": "*",
400 | "merge-stream": "^2.0.0",
401 | "supports-color": "^7.0.0"
402 | },
403 | "dependencies": {
404 | "has-flag": {
405 | "version": "4.0.0",
406 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
407 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
408 | "dev": true
409 | },
410 | "supports-color": {
411 | "version": "7.2.0",
412 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
413 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
414 | "dev": true,
415 | "requires": {
416 | "has-flag": "^4.0.0"
417 | }
418 | }
419 | }
420 | },
421 | "js-tokens": {
422 | "version": "4.0.0",
423 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
424 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
425 | "dev": true
426 | },
427 | "kleur": {
428 | "version": "3.0.3",
429 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
430 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="
431 | },
432 | "livereload": {
433 | "version": "0.9.3",
434 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz",
435 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==",
436 | "dev": true,
437 | "requires": {
438 | "chokidar": "^3.5.0",
439 | "livereload-js": "^3.3.1",
440 | "opts": ">= 1.2.0",
441 | "ws": "^7.4.3"
442 | }
443 | },
444 | "livereload-js": {
445 | "version": "3.3.2",
446 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz",
447 | "integrity": "sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA==",
448 | "dev": true
449 | },
450 | "local-access": {
451 | "version": "1.1.0",
452 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz",
453 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw=="
454 | },
455 | "magic-string": {
456 | "version": "0.25.7",
457 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
458 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
459 | "dev": true,
460 | "requires": {
461 | "sourcemap-codec": "^1.4.4"
462 | }
463 | },
464 | "merge-stream": {
465 | "version": "2.0.0",
466 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
467 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
468 | "dev": true
469 | },
470 | "mime": {
471 | "version": "2.5.2",
472 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz",
473 | "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg=="
474 | },
475 | "minimatch": {
476 | "version": "3.0.4",
477 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
478 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
479 | "dev": true,
480 | "requires": {
481 | "brace-expansion": "^1.1.7"
482 | }
483 | },
484 | "mri": {
485 | "version": "1.1.6",
486 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz",
487 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ=="
488 | },
489 | "normalize-path": {
490 | "version": "3.0.0",
491 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
492 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
493 | "dev": true
494 | },
495 | "once": {
496 | "version": "1.4.0",
497 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
498 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
499 | "dev": true,
500 | "requires": {
501 | "wrappy": "1"
502 | }
503 | },
504 | "opts": {
505 | "version": "2.0.2",
506 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz",
507 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==",
508 | "dev": true
509 | },
510 | "path-is-absolute": {
511 | "version": "1.0.1",
512 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
513 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
514 | "dev": true
515 | },
516 | "path-parse": {
517 | "version": "1.0.7",
518 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
519 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
520 | "dev": true
521 | },
522 | "picomatch": {
523 | "version": "2.3.0",
524 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz",
525 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==",
526 | "dev": true
527 | },
528 | "randombytes": {
529 | "version": "2.1.0",
530 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
531 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
532 | "dev": true,
533 | "requires": {
534 | "safe-buffer": "^5.1.0"
535 | }
536 | },
537 | "readdirp": {
538 | "version": "3.6.0",
539 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
540 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
541 | "dev": true,
542 | "requires": {
543 | "picomatch": "^2.2.1"
544 | }
545 | },
546 | "require-relative": {
547 | "version": "0.8.7",
548 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz",
549 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=",
550 | "dev": true
551 | },
552 | "resolve": {
553 | "version": "1.20.0",
554 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
555 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
556 | "dev": true,
557 | "requires": {
558 | "is-core-module": "^2.2.0",
559 | "path-parse": "^1.0.6"
560 | }
561 | },
562 | "rollup": {
563 | "version": "2.56.0",
564 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.0.tgz",
565 | "integrity": "sha512-weEafgbjbHCnrtJPNyCrhYnjP62AkF04P0BcV/1mofy1+gytWln4VVB1OK462cq2EAyWzRDpTMheSP/o+quoiA==",
566 | "dev": true,
567 | "requires": {
568 | "fsevents": "~2.3.2"
569 | }
570 | },
571 | "rollup-plugin-css-only": {
572 | "version": "3.1.0",
573 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz",
574 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==",
575 | "dev": true,
576 | "requires": {
577 | "@rollup/pluginutils": "4"
578 | },
579 | "dependencies": {
580 | "@rollup/pluginutils": {
581 | "version": "4.1.1",
582 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.1.tgz",
583 | "integrity": "sha512-clDjivHqWGXi7u+0d2r2sBi4Ie6VLEAzWMIkvJLnDmxoOhBYOTfzGbOQBA32THHm11/LiJbd01tJUpJsbshSWQ==",
584 | "dev": true,
585 | "requires": {
586 | "estree-walker": "^2.0.1",
587 | "picomatch": "^2.2.2"
588 | }
589 | }
590 | }
591 | },
592 | "rollup-plugin-livereload": {
593 | "version": "2.0.5",
594 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz",
595 | "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==",
596 | "dev": true,
597 | "requires": {
598 | "livereload": "^0.9.1"
599 | }
600 | },
601 | "rollup-plugin-svelte": {
602 | "version": "7.1.0",
603 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz",
604 | "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==",
605 | "dev": true,
606 | "requires": {
607 | "require-relative": "^0.8.7",
608 | "rollup-pluginutils": "^2.8.2"
609 | }
610 | },
611 | "rollup-plugin-terser": {
612 | "version": "7.0.2",
613 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz",
614 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==",
615 | "dev": true,
616 | "requires": {
617 | "@babel/code-frame": "^7.10.4",
618 | "jest-worker": "^26.2.1",
619 | "serialize-javascript": "^4.0.0",
620 | "terser": "^5.0.0"
621 | }
622 | },
623 | "rollup-pluginutils": {
624 | "version": "2.8.2",
625 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz",
626 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==",
627 | "dev": true,
628 | "requires": {
629 | "estree-walker": "^0.6.1"
630 | },
631 | "dependencies": {
632 | "estree-walker": {
633 | "version": "0.6.1",
634 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz",
635 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==",
636 | "dev": true
637 | }
638 | }
639 | },
640 | "sade": {
641 | "version": "1.7.4",
642 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz",
643 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==",
644 | "requires": {
645 | "mri": "^1.1.0"
646 | }
647 | },
648 | "safe-buffer": {
649 | "version": "5.2.1",
650 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
651 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
652 | "dev": true
653 | },
654 | "semiver": {
655 | "version": "1.1.0",
656 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
657 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg=="
658 | },
659 | "serialize-javascript": {
660 | "version": "4.0.0",
661 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
662 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
663 | "dev": true,
664 | "requires": {
665 | "randombytes": "^2.1.0"
666 | }
667 | },
668 | "sirv": {
669 | "version": "1.0.12",
670 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.12.tgz",
671 | "integrity": "sha512-+jQoCxndz7L2tqQL4ZyzfDhky0W/4ZJip3XoOuxyQWnAwMxindLl3Xv1qT4x1YX/re0leShvTm8Uk0kQspGhBg==",
672 | "requires": {
673 | "@polka/url": "^1.0.0-next.15",
674 | "mime": "^2.3.1",
675 | "totalist": "^1.0.0"
676 | }
677 | },
678 | "sirv-cli": {
679 | "version": "1.0.12",
680 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.12.tgz",
681 | "integrity": "sha512-Rs5PvF3a48zuLmrl8vcqVv9xF/WWPES19QawVkpdzqx7vD5SMZS07+ece1gK4umbslXN43YeIksYtQM5csgIzQ==",
682 | "requires": {
683 | "console-clear": "^1.1.0",
684 | "get-port": "^3.2.0",
685 | "kleur": "^3.0.0",
686 | "local-access": "^1.0.1",
687 | "sade": "^1.6.0",
688 | "semiver": "^1.0.0",
689 | "sirv": "^1.0.12",
690 | "tinydate": "^1.0.0"
691 | }
692 | },
693 | "source-map": {
694 | "version": "0.7.3",
695 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
696 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
697 | "dev": true
698 | },
699 | "source-map-support": {
700 | "version": "0.5.19",
701 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
702 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
703 | "dev": true,
704 | "requires": {
705 | "buffer-from": "^1.0.0",
706 | "source-map": "^0.6.0"
707 | },
708 | "dependencies": {
709 | "source-map": {
710 | "version": "0.6.1",
711 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
712 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
713 | "dev": true
714 | }
715 | }
716 | },
717 | "sourcemap-codec": {
718 | "version": "1.4.8",
719 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
720 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
721 | "dev": true
722 | },
723 | "supports-color": {
724 | "version": "5.5.0",
725 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
726 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
727 | "dev": true,
728 | "requires": {
729 | "has-flag": "^3.0.0"
730 | }
731 | },
732 | "svelte": {
733 | "version": "3.42.1",
734 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.42.1.tgz",
735 | "integrity": "sha512-XtExLd2JAU3T7M2g/DkO3UNj/3n1WdTXrfL63OZ5nZq7nAqd9wQw+lR4Pv/wkVbrWbAIPfLDX47UjFdmnY+YtQ==",
736 | "dev": true
737 | },
738 | "terser": {
739 | "version": "5.7.1",
740 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz",
741 | "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==",
742 | "dev": true,
743 | "requires": {
744 | "commander": "^2.20.0",
745 | "source-map": "~0.7.2",
746 | "source-map-support": "~0.5.19"
747 | }
748 | },
749 | "tinydate": {
750 | "version": "1.3.0",
751 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
752 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w=="
753 | },
754 | "to-regex-range": {
755 | "version": "5.0.1",
756 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
757 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
758 | "dev": true,
759 | "requires": {
760 | "is-number": "^7.0.0"
761 | }
762 | },
763 | "totalist": {
764 | "version": "1.1.0",
765 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz",
766 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g=="
767 | },
768 | "wrappy": {
769 | "version": "1.0.2",
770 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
771 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
772 | "dev": true
773 | },
774 | "ws": {
775 | "version": "7.5.3",
776 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
777 | "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
778 | "dev": true
779 | }
780 | }
781 | }
782 |
--------------------------------------------------------------------------------
/svelte-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "svelte-app",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "build": "rollup -c",
7 | "dev": "rollup -c -w",
8 | "start": "sirv public --no-clear"
9 | },
10 | "devDependencies": {
11 | "@rollup/plugin-commonjs": "^17.0.0",
12 | "@rollup/plugin-node-resolve": "^11.0.0",
13 | "rollup": "^2.3.4",
14 | "rollup-plugin-css-only": "^3.1.0",
15 | "rollup-plugin-livereload": "^2.0.0",
16 | "rollup-plugin-svelte": "^7.0.0",
17 | "rollup-plugin-terser": "^7.0.0",
18 | "svelte": "^3.0.0"
19 | },
20 | "dependencies": {
21 | "sirv-cli": "^1.0.0"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/svelte-app/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/svelte-app/public/favicon.png
--------------------------------------------------------------------------------
/svelte-app/public/global.css:
--------------------------------------------------------------------------------
1 | html, body {
2 | position: relative;
3 | width: 100%;
4 | height: 100%;
5 | }
6 |
7 | body {
8 | color: #333;
9 | margin: 0;
10 | padding: 8px;
11 | box-sizing: border-box;
12 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
13 | }
14 |
15 | a {
16 | color: rgb(0,100,200);
17 | text-decoration: none;
18 | }
19 |
20 | a:hover {
21 | text-decoration: underline;
22 | }
23 |
24 | a:visited {
25 | color: rgb(0,80,160);
26 | }
27 |
28 | label {
29 | display: block;
30 | }
31 |
32 | input, button, select, textarea {
33 | font-family: inherit;
34 | font-size: inherit;
35 | -webkit-padding: 0.4em 0;
36 | padding: 0.4em;
37 | margin: 0 0 0.5em 0;
38 | box-sizing: border-box;
39 | border: 1px solid #ccc;
40 | border-radius: 2px;
41 | }
42 |
43 | input:disabled {
44 | color: #ccc;
45 | }
46 |
47 | button {
48 | color: #333;
49 | background-color: #f4f4f4;
50 | outline: none;
51 | }
52 |
53 | button:disabled {
54 | color: #999;
55 | }
56 |
57 | button:not(:disabled):active {
58 | background-color: #ddd;
59 | }
60 |
61 | button:focus {
62 | border-color: #666;
63 | }
64 |
--------------------------------------------------------------------------------
/svelte-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Svelte app
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/svelte-app/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 css from 'rollup-plugin-css-only';
7 |
8 | const production = !process.env.ROLLUP_WATCH;
9 |
10 | function serve() {
11 | let server;
12 |
13 | function toExit() {
14 | if (server) server.kill(0);
15 | }
16 |
17 | return {
18 | writeBundle() {
19 | if (server) return;
20 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
21 | stdio: ['ignore', 'inherit', 'inherit'],
22 | shell: true
23 | });
24 |
25 | process.on('SIGTERM', toExit);
26 | process.on('exit', toExit);
27 | }
28 | };
29 | }
30 |
31 | export default {
32 | input: 'src/main.js',
33 | output: {
34 | sourcemap: true,
35 | format: 'iife',
36 | name: 'app',
37 | file: 'public/build/bundle.js'
38 | },
39 | plugins: [
40 | svelte({
41 | compilerOptions: {
42 | // enable run-time checks when not in production
43 | dev: !production
44 | }
45 | }),
46 | // we'll extract any component CSS out into
47 | // a separate file - better for performance
48 | css({ output: 'bundle.css' }),
49 |
50 | // If you have external dependencies installed from
51 | // npm, you'll most likely need these plugins. In
52 | // some cases you'll need additional configuration -
53 | // consult the documentation for details:
54 | // https://github.com/rollup/plugins/tree/master/packages/commonjs
55 | resolve({
56 | browser: true,
57 | dedupe: ['svelte']
58 | }),
59 | commonjs(),
60 |
61 | // In dev mode, call `npm run start` once
62 | // the bundle has been generated
63 | !production && serve(),
64 |
65 | // Watch the `public` directory and refresh the
66 | // browser on changes when not in production
67 | !production && livereload('public'),
68 |
69 | // If we're building for production (npm run build
70 | // instead of npm run dev), minify
71 | production && terser()
72 | ],
73 | watch: {
74 | clearScreen: false
75 | }
76 | };
77 |
--------------------------------------------------------------------------------
/svelte-app/scripts/setupTypeScript.js:
--------------------------------------------------------------------------------
1 | // @ts-check
2 |
3 | /** This script modifies the project to support TS code in .svelte files like:
4 |
5 |
8 |
9 | As well as validating the code for CI.
10 | */
11 |
12 | /** To work on this script:
13 | rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template
14 | */
15 |
16 | const fs = require("fs")
17 | const path = require("path")
18 | const { argv } = require("process")
19 |
20 | const projectRoot = argv[2] || path.join(__dirname, "..")
21 |
22 | // Add deps to pkg.json
23 | const packageJSON = JSON.parse(fs.readFileSync(path.join(projectRoot, "package.json"), "utf8"))
24 | packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, {
25 | "svelte-check": "^1.0.0",
26 | "svelte-preprocess": "^4.0.0",
27 | "@rollup/plugin-typescript": "^8.0.0",
28 | "typescript": "^4.0.0",
29 | "tslib": "^2.0.0",
30 | "@tsconfig/svelte": "^1.0.0"
31 | })
32 |
33 | // Add script for checking
34 | packageJSON.scripts = Object.assign(packageJSON.scripts, {
35 | "validate": "svelte-check"
36 | })
37 |
38 | // Write the package JSON
39 | fs.writeFileSync(path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " "))
40 |
41 | // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too
42 | const beforeMainJSPath = path.join(projectRoot, "src", "main.js")
43 | const afterMainTSPath = path.join(projectRoot, "src", "main.ts")
44 | fs.renameSync(beforeMainJSPath, afterMainTSPath)
45 |
46 | // Switch the app.svelte file to use TS
47 | const appSveltePath = path.join(projectRoot, "src", "App.svelte")
48 | let appFile = fs.readFileSync(appSveltePath, "utf8")
49 | appFile = appFile.replace("
18 |
19 |
20 |
21 |
22 | {#each todos as todo}
23 | - {todo}
24 | {/each}
25 |
26 |
27 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/svelte-app/src/main.js:
--------------------------------------------------------------------------------
1 | import App from './App.svelte';
2 |
3 | const app = new App({
4 | target: document.body,
5 | });
6 |
7 | export default app;
--------------------------------------------------------------------------------
/vanilla-app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Document
8 |
9 |
10 |
11 |
12 |
13 |
17 |
18 |
19 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/vue-app/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/vue-app/README.md:
--------------------------------------------------------------------------------
1 | # vue-app
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | npm run lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
--------------------------------------------------------------------------------
/vue-app/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/vue-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "build": "vue-cli-service build",
8 | "lint": "vue-cli-service lint"
9 | },
10 | "dependencies": {
11 | "core-js": "^3.6.5",
12 | "vue": "^2.6.11"
13 | },
14 | "devDependencies": {
15 | "@vue/cli-plugin-babel": "~4.5.0",
16 | "@vue/cli-plugin-eslint": "~4.5.0",
17 | "@vue/cli-service": "~4.5.0",
18 | "babel-eslint": "^10.1.0",
19 | "eslint": "^6.7.2",
20 | "eslint-plugin-vue": "^6.2.2",
21 | "vue-template-compiler": "^2.6.11"
22 | },
23 | "eslintConfig": {
24 | "root": true,
25 | "env": {
26 | "node": true
27 | },
28 | "extends": [
29 | "plugin:vue/essential",
30 | "eslint:recommended"
31 | ],
32 | "parserOptions": {
33 | "parser": "babel-eslint"
34 | },
35 | "rules": {}
36 | },
37 | "browserslist": [
38 | "> 1%",
39 | "last 2 versions",
40 | "not dead"
41 | ]
42 | }
43 |
--------------------------------------------------------------------------------
/vue-app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/vue-app/public/favicon.ico
--------------------------------------------------------------------------------
/vue-app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | <%= htmlWebpackPlugin.options.title %>
9 |
10 |
11 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/vue-app/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
17 |
18 |
23 |
--------------------------------------------------------------------------------
/vue-app/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fireship-io/10-javascript-frameworks/8f75a942817fd9cade5c8a852e2aa4bd72d9d24e/vue-app/src/assets/logo.png
--------------------------------------------------------------------------------
/vue-app/src/components/HelloWorld.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
12 |
13 |
14 |
15 |
16 |
37 |
38 |
39 |
41 |
--------------------------------------------------------------------------------
/vue-app/src/main.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 | import App from './App.vue'
3 |
4 | Vue.config.productionTip = false
5 |
6 | new Vue({
7 | render: h => h(App),
8 | }).$mount('#app')
9 |
--------------------------------------------------------------------------------