diff --git a/angular.json b/angular.json index f644ca457..a16c99338 100644 --- a/angular.json +++ b/angular.json @@ -3,6 +3,7 @@ "version": 2, "projects": { "analog-app": "apps/analog-app", - "analog-app-e2e": "apps/analog-app-e2e" + "analog-app-e2e": "apps/analog-app-e2e", + "vite-plugin-angular": "libs/vite-plugin-angular" } } diff --git a/apps/analog-app/project.json b/apps/analog-app/project.json index d37e41c6d..84c6af256 100644 --- a/apps/analog-app/project.json +++ b/apps/analog-app/project.json @@ -4,65 +4,20 @@ "prefix": "analogjs", "targets": { "build": { - "executor": "@angular-devkit/build-angular:browser", + "executor": "nx:run-commands", "outputs": ["{options.outputPath}"], "options": { - "outputPath": "dist/apps/analog-app", - "index": "apps/analog-app/src/index.html", - "main": "apps/analog-app/src/main.ts", - "polyfills": "apps/analog-app/src/polyfills.ts", - "tsConfig": "apps/analog-app/tsconfig.app.json", - "assets": [ - "apps/analog-app/src/favicon.ico", - "apps/analog-app/src/assets" - ], - "styles": ["apps/analog-app/src/styles.css"], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "2kb", - "maximumError": "4kb" - } - ], - "fileReplacements": [ - { - "replace": "apps/analog-app/src/environments/environment.ts", - "with": "apps/analog-app/src/environments/environment.prod.ts" - } - ], - "outputHashing": "all" - }, - "development": { - "buildOptimizer": false, - "optimization": false, - "vendorChunk": true, - "extractLicenses": false, - "sourceMap": true, - "namedChunks": true - } - }, - "defaultConfiguration": "production" + "outputPath": "../../dist/apps/analog-app", + "command": "vite build", + "cwd": "apps/analog-app" + } }, "serve": { - "executor": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "browserTarget": "analog-app:build:production" - }, - "development": { - "browserTarget": "analog-app:build:development" - } - }, - "defaultConfiguration": "development" + "executor": "nx:run-commands", + "options": { + "cwd": "apps/analog-app", + "command": "vite" + } }, "extract-i18n": { "executor": "@angular-devkit/build-angular:extract-i18n", diff --git a/apps/analog-app/src/index.html b/apps/analog-app/src/index.html index 608e41273..f004b4f25 100644 --- a/apps/analog-app/src/index.html +++ b/apps/analog-app/src/index.html @@ -9,5 +9,6 @@ + diff --git a/apps/analog-app/src/main.ts b/apps/analog-app/src/main.ts index d9a2e7e4a..0d19b4e0c 100644 --- a/apps/analog-app/src/main.ts +++ b/apps/analog-app/src/main.ts @@ -1,3 +1,4 @@ +import './polyfills'; import { enableProdMode } from '@angular/core'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; diff --git a/apps/analog-app/vite.config.ts b/apps/analog-app/vite.config.ts new file mode 100644 index 000000000..3b4c091a1 --- /dev/null +++ b/apps/analog-app/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite'; +import angular from '../../dist/libs/vite-plugin-angular'; + +// https://vitejs.dev/config/ +export default defineConfig({ + root: 'src', + build: { + outDir: '../../dist/analog-app', + emptyOutDir: true + }, + resolve: { + mainFields: ['module'], + }, + + plugins: [angular()], +}); diff --git a/libs/vite-plugin-angular/.eslintrc.json b/libs/vite-plugin-angular/.eslintrc.json new file mode 100644 index 000000000..9d9c0db55 --- /dev/null +++ b/libs/vite-plugin-angular/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/libs/vite-plugin-angular/README.md b/libs/vite-plugin-angular/README.md new file mode 100644 index 000000000..d0aa578ba --- /dev/null +++ b/libs/vite-plugin-angular/README.md @@ -0,0 +1,11 @@ +# vite-plugin-angular + +This library was generated with [Nx](https://nx.dev). + +## Building + +Run `nx build vite-plugin-angular` to build the library. + +## Running unit tests + +Run `nx test vite-plugin-angular` to execute the unit tests via [Jest](https://jestjs.io). diff --git a/libs/vite-plugin-angular/jest.config.ts b/libs/vite-plugin-angular/jest.config.ts new file mode 100644 index 000000000..5301fb890 --- /dev/null +++ b/libs/vite-plugin-angular/jest.config.ts @@ -0,0 +1,15 @@ +/* eslint-disable */ +export default { + displayName: 'vite-plugin-angular', + preset: '../../jest.preset.js', + globals: { + 'ts-jest': { + tsconfig: '/tsconfig.spec.json', + }, + }, + transform: { + '^.+\\.[tj]s$': 'ts-jest', + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/libs/vite-plugin-angular', +}; diff --git a/libs/vite-plugin-angular/package.json b/libs/vite-plugin-angular/package.json new file mode 100644 index 000000000..613e38317 --- /dev/null +++ b/libs/vite-plugin-angular/package.json @@ -0,0 +1,5 @@ +{ + "name": "@analogjs/vite-plugin-angular", + "version": "0.0.1", + "type": "commonjs" +} diff --git a/libs/vite-plugin-angular/project.json b/libs/vite-plugin-angular/project.json new file mode 100644 index 000000000..81341f969 --- /dev/null +++ b/libs/vite-plugin-angular/project.json @@ -0,0 +1,33 @@ +{ + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "libs/vite-plugin-angular/src", + "projectType": "library", + "targets": { + "build": { + "executor": "@nrwl/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/libs/vite-plugin-angular", + "main": "libs/vite-plugin-angular/src/index.ts", + "tsConfig": "libs/vite-plugin-angular/tsconfig.lib.json", + "assets": ["libs/vite-plugin-angular/*.md"] + } + }, + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["libs/vite-plugin-angular/**/*.ts"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["coverage/libs/vite-plugin-angular"], + "options": { + "jestConfig": "libs/vite-plugin-angular/jest.config.ts", + "passWithNoTests": true + } + } + }, + "tags": [] +} diff --git a/libs/vite-plugin-angular/src/index.ts b/libs/vite-plugin-angular/src/index.ts new file mode 100644 index 000000000..d12a2f095 --- /dev/null +++ b/libs/vite-plugin-angular/src/index.ts @@ -0,0 +1,3 @@ +import { angular } from './lib/angular-vite-plugin'; + +export default angular; diff --git a/libs/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts b/libs/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts new file mode 100644 index 000000000..cb75e5b00 --- /dev/null +++ b/libs/vite-plugin-angular/src/lib/angular-vite-plugin.spec.ts @@ -0,0 +1,7 @@ +import { angularVitePlugin } from './angular-vite-plugin'; + +describe('angularVitePlugin', () => { + it('should work', () => { + expect(angularVitePlugin()).toEqual('angular-vite-plugin'); + }); +}); diff --git a/libs/vite-plugin-angular/src/lib/angular-vite-plugin.ts b/libs/vite-plugin-angular/src/lib/angular-vite-plugin.ts new file mode 100644 index 000000000..eddc17c4a --- /dev/null +++ b/libs/vite-plugin-angular/src/lib/angular-vite-plugin.ts @@ -0,0 +1,264 @@ +import type { CompilerHost, NgtscProgram } from '@angular/compiler-cli'; +import { transformAsync } from '@babel/core'; +import { promises as fs } from 'fs'; +import * as path from 'path'; +import angularApplicationPreset from '@angular-devkit/build-angular/src/babel/presets/application'; +import { requiresLinking } from '@angular-devkit/build-angular/src/babel/webpack-loader'; +import { + BundleStylesheetOptions, + bundleStylesheetText, +} from '@angular-devkit/build-angular/src/builders/browser-esbuild/stylesheets'; +import * as ts from 'typescript'; +import { Plugin } from 'vite'; +import { Plugin as ESBuildPlugin } from 'esbuild'; +import { createCompilerPlugin } from '@angular-devkit/build-angular/src/builders/browser-esbuild/compiler-plugin'; +import { loadEsmModule } from '@angular-devkit/build-angular/src/utils/load-esm'; + +interface EmitFileResult { + content?: string; + map?: string; + dependencies: readonly string[]; + hash?: Uint8Array; +} +type FileEmitter = (file: string) => Promise; + +export function angular( + pluginOptions = { + tsconfig: './tsconfig.app.json', + sourcemap: false, + advancedOptimizations: false, + }, + styleOptions: BundleStylesheetOptions = { + optimization: false, + sourcemap: true, + } +): Plugin { + // The file emitter created during `onStart` that will be used during the build in `onLoad` callbacks for TS files + let fileEmitter: FileEmitter | undefined; + let compilerOptions = {}; + // Temporary deep import for transformer support + const { + mergeTransformers, + replaceBootstrap, + } = require('@ngtools/webpack/src/ivy/transformation'); + const { + augmentProgramWithVersioning, + } = require('@ngtools/webpack/src/ivy/host'); + let compilerCli: typeof import('@angular/compiler-cli'); + let rootNames: string[]; + let host: ts.CompilerHost; + let nextProgram: NgtscProgram; + let builderProgram: ts.EmitAndSemanticDiagnosticsBuilderProgram; + let mode: 'build' | 'serve'; + + return { + name: 'vite-plugin-angular', + config(config, { command }) { + mode = command; + return { + optimizeDeps: { + esbuildOptions: { + plugins: [ + createCompilerPlugin( + { + tsconfig: pluginOptions.tsconfig, + sourcemap: pluginOptions.sourcemap, + advancedOptimizations: pluginOptions.advancedOptimizations, + }, + { + sourcemap: styleOptions.sourcemap, + optimization: styleOptions.optimization, + } + ) as ESBuildPlugin as any, + ], + }, + }, + }; + }, + async buildStart() { + compilerCli = await loadEsmModule( + '@angular/compiler-cli' + ); + + const { options: tsCompilerOptions, rootNames: rn } = + compilerCli.readConfiguration(pluginOptions.tsconfig, { + enableIvy: true, + noEmitOnError: false, + suppressOutputPathCheck: true, + outDir: undefined, + inlineSources: pluginOptions.sourcemap, + inlineSourceMap: pluginOptions.sourcemap, + sourceMap: false, + mapRoot: undefined, + sourceRoot: undefined, + declaration: false, + declarationMap: false, + allowEmptyCodegenFiles: false, + annotationsAs: 'decorators', + enableResourceInlining: false, + }); + + rootNames = rn; + compilerOptions = tsCompilerOptions; + host = ts.createIncrementalCompilerHost(compilerOptions); + }, + async transform(code, id) { + // Create the Angular specific program that contains the Angular compiler + const angularProgram: NgtscProgram = new compilerCli.NgtscProgram( + rootNames, + compilerOptions, + host as CompilerHost, + nextProgram + ); + const angularCompiler = angularProgram.compiler; + const typeScriptProgram = angularProgram.getTsProgram(); + augmentProgramWithVersioning(typeScriptProgram); + + let builder: + | ts.BuilderProgram + | ts.EmitAndSemanticDiagnosticsBuilderProgram; + + if (mode === 'serve') { + builder = builderProgram = + ts.createEmitAndSemanticDiagnosticsBuilderProgram( + typeScriptProgram, + host, + builderProgram + ); + + nextProgram = angularProgram; + } else { + // When not in watch mode, the startup cost of the incremental analysis can be avoided by + // using an abstract builder that only wraps a TypeScript program. + builder = ts.createAbstractBuilder(typeScriptProgram, host); + } + + await angularCompiler.analyzeAsync(); + + fileEmitter = createFileEmitter( + builder, + mergeTransformers(angularCompiler.prepareEmit().transformers, { + before: [ + replaceBootstrap(() => builder.getProgram().getTypeChecker()), + ], + }), + () => [] + ); + + if (/\.[cm]?js$/.test(id) && id.includes('@angular')) { + const angularPackage = /[\\/]node_modules[\\/]@angular[\\/]/.test(id); + + const linkerPluginCreator = ( + await loadEsmModule< + typeof import('@angular/compiler-cli/linker/babel') + >('@angular/compiler-cli/linker/babel') + ).createEs2015LinkerPlugin; + + const data = await fs.readFile(id, 'utf-8'); + const result = await transformAsync(data, { + filename: id, + inputSourceMap: (pluginOptions.sourcemap + ? undefined + : false) as undefined, + sourceMaps: pluginOptions.sourcemap ? 'inline' : false, + compact: false, + configFile: false, + babelrc: false, + browserslistConfigFile: false, + plugins: [], + presets: [ + [ + angularApplicationPreset, + { + angularLinker: { + shouldLink: await requiresLinking(id, data), + jitMode: false, + linkerPluginCreator, + }, + forceAsyncTransformation: + !/[\\/][_f]?esm2015[\\/]/.test(id) && data.includes('async'), + optimize: pluginOptions.advancedOptimizations && { + looseEnums: angularPackage, + pureTopLevel: angularPackage, + }, + }, + ], + ], + }); + + return { + code: result?.code ?? data, + map: result?.map, + }; + } + + if (/\.[cm]?tsx?$/.test(id)) { + const typescriptResult = await fileEmitter(id); + + // return fileEmitter + const data = typescriptResult?.content ?? ''; + // console.log(id, data); + const babelResult = await transformAsync(data, { + filename: id, + inputSourceMap: (pluginOptions.sourcemap + ? undefined + : false) as undefined, + sourceMaps: pluginOptions.sourcemap ? 'inline' : false, + compact: false, + configFile: false, + babelrc: false, + browserslistConfigFile: false, + plugins: [], + presets: [ + [ + angularApplicationPreset, + { + forceAsyncTransformation: data.includes('async'), + optimize: pluginOptions.advancedOptimizations && {}, + }, + ], + ], + }); + + return { + code: babelResult?.code ?? '', + map: babelResult?.map, + }; + } + + return { + code, + }; + }, + }; +} + +export function createFileEmitter( + program: ts.BuilderProgram, + transformers: ts.CustomTransformers = {}, + onAfterEmit?: (sourceFile: ts.SourceFile) => void +): FileEmitter { + return async (file: string) => { + const sourceFile = program.getSourceFile(file); + if (!sourceFile) { + return undefined; + } + + let content: string | undefined; + program.emit( + sourceFile, + (filename, data) => { + if (/\.[cm]?js$/.test(filename)) { + content = data; + } + }, + undefined /* cancellationToken */, + undefined /* emitOnlyDtsFiles */, + transformers + ); + + onAfterEmit?.(sourceFile); + + return { content, dependencies: [] }; + }; +} diff --git a/libs/vite-plugin-angular/tsconfig.json b/libs/vite-plugin-angular/tsconfig.json new file mode 100644 index 000000000..f5b85657a --- /dev/null +++ b/libs/vite-plugin-angular/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "commonjs", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/libs/vite-plugin-angular/tsconfig.lib.json b/libs/vite-plugin-angular/tsconfig.lib.json new file mode 100644 index 000000000..e85ef50f6 --- /dev/null +++ b/libs/vite-plugin-angular/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": [] + }, + "include": ["**/*.ts"], + "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"] +} diff --git a/libs/vite-plugin-angular/tsconfig.spec.json b/libs/vite-plugin-angular/tsconfig.spec.json new file mode 100644 index 000000000..546f12877 --- /dev/null +++ b/libs/vite-plugin-angular/tsconfig.spec.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"] +} diff --git a/package.json b/package.json index 879c8915b..76a9e7046 100644 --- a/package.json +++ b/package.json @@ -52,6 +52,7 @@ "prettier": "^2.6.2", "ts-jest": "27.1.4", "ts-node": "~10.8.0", - "typescript": "~4.7.2" + "typescript": "~4.7.2", + "vite": "^2.9.13" } } diff --git a/tsconfig.base.json b/tsconfig.base.json index 11253ac5c..9ae8d39bb 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -14,7 +14,9 @@ "skipLibCheck": true, "skipDefaultLibCheck": true, "baseUrl": ".", - "paths": {} + "paths": { + "@analogjs/vite-plugin-angular": ["libs/vite-plugin-angular/src/index.ts"] + } }, "exclude": ["node_modules", "tmp"] } diff --git a/yarn.lock b/yarn.lock index d472bb887..d73a95d79 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4636,6 +4636,11 @@ esbuild-android-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz#5b94a1306df31d55055f64a62ff6b763a47b7f64" integrity sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw== +esbuild-android-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz#7e6394a0e517f738641385aaf553c7e4fb6d1ae3" + integrity sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg== + esbuild-android-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz#b8b34e35a5b43880664ac7a3fbc70243d7ed894f" @@ -4646,6 +4651,11 @@ esbuild-android-arm64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz#78acc80773d16007de5219ccce544c036abd50b8" integrity sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA== +esbuild-android-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz#6877566be0f82dd5a43030c0007d06ece7f7c02f" + integrity sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g== + esbuild-darwin-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz#ba805de98c0412e50fcd0636451797da157b0625" @@ -4656,6 +4666,11 @@ esbuild-darwin-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz#e02b1291f629ebdc2aa46fabfacc9aa28ff6aa46" integrity sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA== +esbuild-darwin-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz#ea3caddb707d88f844b1aa1dea5ff3b0a71ef1fd" + integrity sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA== + esbuild-darwin-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz#4d3573e448af76ce33e16231f3d9f878542d6fe8" @@ -4666,6 +4681,11 @@ esbuild-darwin-arm64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz#01eb6650ec010b18c990e443a6abcca1d71290a9" integrity sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ== +esbuild-darwin-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz#4e5eaab54df66cc319b76a2ac0e8af4e6f0d9c2f" + integrity sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA== + esbuild-freebsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz#9294e6ab359ec93590ab097b0f2017de7c78ab4d" @@ -4676,6 +4696,11 @@ esbuild-freebsd-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz#790b8786729d4aac7be17648f9ea8e0e16475b5e" integrity sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig== +esbuild-freebsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz#47b5abc7426eae66861490ffbb380acc67af5b15" + integrity sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA== + esbuild-freebsd-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz#ae3e0b09173350b66cf8321583c9a1c1fcb8bb55" @@ -4686,6 +4711,11 @@ esbuild-freebsd-arm64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz#b66340ab28c09c1098e6d9d8ff656db47d7211e6" integrity sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ== +esbuild-freebsd-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz#e8c54c8637cd44feed967ea12338b0a4da3a7b11" + integrity sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw== + esbuild-linux-32@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz#ddadbc7038aa5a6b1675bb1503cf79a0cbf1229a" @@ -4696,6 +4726,11 @@ esbuild-linux-32@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz#7927f950986fd39f0ff319e92839455912b67f70" integrity sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g== +esbuild-linux-32@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz#229cf3246de2b7937c3ac13fac622d4d7a1344c5" + integrity sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ== + esbuild-linux-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz#d698e3ce3a231ddfeec6b5df8c546ae8883fcd88" @@ -4706,6 +4741,11 @@ esbuild-linux-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz#4893d07b229d9cfe34a2b3ce586399e73c3ac519" integrity sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q== +esbuild-linux-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz#7c0e7226c02c42aacc5656c36977493dc1e96c4f" + integrity sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug== + esbuild-linux-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz#85faea9fa99ad355b5e3b283197a4dfd0a110fe7" @@ -4716,6 +4756,11 @@ esbuild-linux-arm64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz#8442402e37d0b8ae946ac616784d9c1a2041056a" integrity sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA== +esbuild-linux-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz#0af1eda474b5c6cc0cace8235b74d0cb8fcf57a7" + integrity sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw== + esbuild-linux-arm@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz#74cbcf0b8a22c8401bcbcd6ebd4cbf2baca8b7b4" @@ -4726,6 +4771,11 @@ esbuild-linux-arm@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz#d5dbf32d38b7f79be0ec6b5fb2f9251fd9066986" integrity sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA== +esbuild-linux-arm@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz#de4d1fa6b77cdcd00e2bb43dd0801e4680f0ab52" + integrity sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw== + esbuild-linux-mips64le@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz#490429211a3233f5cbbd8575b7758b897e42979a" @@ -4736,6 +4786,11 @@ esbuild-linux-mips64le@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz#95081e42f698bbe35d8ccee0e3a237594b337eb5" integrity sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ== +esbuild-linux-mips64le@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz#822c1778495f7868e990d4da47ad7281df28fd15" + integrity sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA== + esbuild-linux-ppc64le@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz#fc79d60710213b5b98345f5b138d48245616827a" @@ -4746,11 +4801,21 @@ esbuild-linux-ppc64le@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz#dceb0a1b186f5df679618882a7990bd422089b47" integrity sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q== +esbuild-linux-ppc64le@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz#55de0a9ec4a48fedfe82a63e083164d001709447" + integrity sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ== + esbuild-linux-riscv64@0.14.38: version "0.14.38" resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz#61fb8edb75f475f9208c4a93ab2bfab63821afd2" integrity sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ== +esbuild-linux-riscv64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz#cd2b7381880b2f4b21a5a598fb673492120f18a5" + integrity sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA== + esbuild-linux-s390x@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz#ca4b93556bbba6cc95b0644f2ee93c982165ba07" @@ -4761,6 +4826,11 @@ esbuild-linux-s390x@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz#34c7126a4937406bf6a5e69100185fd702d12fe0" integrity sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ== +esbuild-linux-s390x@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz#4b319eca2a5c64637fc7397ffbd9671719cdb6bf" + integrity sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g== + esbuild-netbsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz#edb340bc6653c88804cac2253e21b74258fce165" @@ -4771,6 +4841,11 @@ esbuild-netbsd-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz#322ea9937d9e529183ee281c7996b93eb38a5d95" integrity sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q== +esbuild-netbsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz#c27cde8b5cb55dcc227943a18ab078fb98d0adbf" + integrity sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw== + esbuild-openbsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz#caeff5f946f79a60ce7bcf88871ca4c71d3476e8" @@ -4781,6 +4856,11 @@ esbuild-openbsd-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz#1ca29bb7a2bf09592dcc26afdb45108f08a2cdbd" integrity sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ== +esbuild-openbsd-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz#af5ab2d1cb41f09064bba9465fc8bf1309150df1" + integrity sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA== + esbuild-sunos-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz#90ce7e1749c2958a53509b4bae7b8f7d98f276d6" @@ -4791,6 +4871,11 @@ esbuild-sunos-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz#c9446f7d8ebf45093e7bb0e7045506a88540019b" integrity sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA== +esbuild-sunos-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz#db3ae20526055cf6fd5c4582676233814603ac54" + integrity sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA== + esbuild-wasm@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-wasm/-/esbuild-wasm-0.14.11.tgz#bd09f4c42969cddcae39007d284f8ef747aae85d" @@ -4811,6 +4896,11 @@ esbuild-windows-32@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz#f8e9b4602fd0ccbd48e5c8d117ec0ba4040f2ad1" integrity sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw== +esbuild-windows-32@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz#021ffceb0a3f83078262870da88a912293c57475" + integrity sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg== + esbuild-windows-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz#13e86dd37a6cd61a5276fa2d271342d0f74da864" @@ -4821,6 +4911,11 @@ esbuild-windows-64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz#280f58e69f78535f470905ce3e43db1746518107" integrity sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw== +esbuild-windows-64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz#a4d3407b580f9faac51f61eec095fa985fb3fee4" + integrity sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA== + esbuild-windows-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz#e8edfdf1d712085e6dc3fba18a0c225aaae32b75" @@ -4831,6 +4926,11 @@ esbuild-windows-arm64@0.14.38: resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz#d97e9ac0f95a4c236d9173fa9f86c983d6a53f54" integrity sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw== +esbuild-windows-arm64@0.14.48: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz#762c0562127d8b09bfb70a3c816460742dd82880" + integrity sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g== + esbuild@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.11.tgz#ac4acb78907874832afb704c3afe58ad37715c27" @@ -4881,6 +4981,32 @@ esbuild@0.14.38: esbuild-windows-64 "0.14.38" esbuild-windows-arm64 "0.14.38" +esbuild@^0.14.27: + version "0.14.48" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.48.tgz#da5d8d25cd2d940c45ea0cfecdca727f7aee2b85" + integrity sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA== + optionalDependencies: + esbuild-android-64 "0.14.48" + esbuild-android-arm64 "0.14.48" + esbuild-darwin-64 "0.14.48" + esbuild-darwin-arm64 "0.14.48" + esbuild-freebsd-64 "0.14.48" + esbuild-freebsd-arm64 "0.14.48" + esbuild-linux-32 "0.14.48" + esbuild-linux-64 "0.14.48" + esbuild-linux-arm "0.14.48" + esbuild-linux-arm64 "0.14.48" + esbuild-linux-mips64le "0.14.48" + esbuild-linux-ppc64le "0.14.48" + esbuild-linux-riscv64 "0.14.48" + esbuild-linux-s390x "0.14.48" + esbuild-netbsd-64 "0.14.48" + esbuild-openbsd-64 "0.14.48" + esbuild-sunos-64 "0.14.48" + esbuild-windows-32 "0.14.48" + esbuild-windows-64 "0.14.48" + esbuild-windows-arm64 "0.14.48" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -8623,7 +8749,7 @@ postcss@8.4.13: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@^8.2.13, postcss@^8.2.14, postcss@^8.3.5, postcss@^8.3.7, postcss@^8.4.7: +postcss@^8.2.13, postcss@^8.2.14, postcss@^8.3.5, postcss@^8.3.7, postcss@^8.4.13, postcss@^8.4.7: version "8.4.14" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== @@ -8978,7 +9104,7 @@ resolve@1.22.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.1.7, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0: +resolve@^1.1.7, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -9076,7 +9202,7 @@ rollup-pluginutils@^2.8.2: dependencies: estree-walker "^0.6.1" -rollup@^2.56.2: +rollup@^2.56.2, rollup@^2.59.0: version "2.75.7" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.75.7.tgz#221ff11887ae271e37dcc649ba32ce1590aaa0b9" integrity sha512-VSE1iy0eaAYNCxEXaleThdFXqZJ42qDBatAwrfnPlENEZ8erQ+0LYX4JXOLPceWfZpV1VtZwZ3dFCuOZiSyFtQ== @@ -10279,6 +10405,18 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vite@^2.9.13: + version "2.9.13" + resolved "https://registry.yarnpkg.com/vite/-/vite-2.9.13.tgz#859cb5d4c316c0d8c6ec9866045c0f7858ca6abc" + integrity sha512-AsOBAaT0AD7Mhe8DuK+/kE4aWYFMx/i0ZNi98hJclxb4e0OhQcZYUrvLjIaQ8e59Ui7txcvKMiJC1yftqpQoDw== + dependencies: + esbuild "^0.14.27" + postcss "^8.4.13" + resolve "^1.22.0" + rollup "^2.59.0" + optionalDependencies: + fsevents "~2.3.2" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"