Compare commits

...

16 Commits

Author SHA1 Message Date
Nathan Rajlich
7003531d5d Publish Stable
- @vercel/build-utils@5.5.9
 - vercel@28.5.6
 - @vercel/client@12.2.19
 - @vercel/go@2.2.17
 - @vercel/hydrogen@0.0.31
 - @vercel/next@3.2.13
 - @vercel/node@2.6.4
 - @vercel/python@3.1.27
 - @vercel/redwood@1.0.37
 - @vercel/remix@1.0.37
 - @vercel/ruby@1.3.43
 - @vercel/static-build@1.0.39
2022-11-21 11:46:27 -08:00
Nathan Rajlich
13bfc29cec [cli] Fix failing tests after Node 18 default change (#8950) 2022-11-21 11:39:32 -08:00
github-actions[bot]
26ea6b8860 [examples] Upgrade Next.js to version 13.0.4 (#8946) 2022-11-18 15:26:58 -08:00
Lee Robinson
0ecc356103 [examples] Move some framework templates to pnpm. (#8883)
`pnpm` is our package manager of choice. This repository contains
framework starter templates, which check-in lockfiles to speed up clone
& deploy time. This PR updates a few frameworks to use `pnpm` instead of
`yarn` or `npm`.

- Updates Gatsby to Gatsby 5 given Node.js 18 support
- Updates to latest Nuxt 3 template for stable version
- Updates Astro to latest stable version, previously on RC
- Updates Angular to v15, previously on v13
2022-11-18 13:58:07 -06:00
Nathan Rajlich
e200bf2ddc [build-utils] Remove Node 18 env var check (#8947)
Node 18 is the new default.
2022-11-18 19:23:25 +00:00
Chris Barber
1542aff9ec [cli][next] Removed --forceExit from jest args (#8718)
Remove `--forceExit` and wait for the child `vc dev` process to close
before continuing.

Listen to the `'close'` event instead of `'exit'` to ensure stdio has
been flushed and closed before continuing.

Some tests cause `vc dev` to spawn child processes that in turn spawn
nested child processes that do not exit when the parent exits, so a
`nukeProcessTree()` helper was added to ensure all spawned processes are
cleaned up. Furthermore, some of the nested child processes don't
respond well to `SIGTERM` and we need to use `SIGKILL` if `SIGTERM`
doesn't do the job.

I uncovered a larger issue exposed by removing the `--forceExit` flag.
The go builder uses `go run` to build and run the go-based serverless
function. Turns out that `go run` will build the executable, then spawn
it with a parent process id (ppid) of `1` (launchd) on macOS. This means
that the go serverless function executable is not detected as a child
process of `vc dev` and won't be cleaned up, yet has inherited `stdout`
and `stderr` keeping Jest alive. The solution is to explicitly `go
build` the serverless executable, then run it.

### 📋 Checklist

<!--
  Please keep your PR as a Draft until the checklist is complete
-->

#### Tests

- [x] The code changed/added as part of this PR has been covered with
tests
- [x] All tests pass locally with `yarn test-unit`

#### Code Review

- [ ] This PR has a concise title and thorough description useful to a
reviewer
- [ ] Issue from task tracker has a link to this PR

Co-authored-by: Sean Massa <EndangeredMassa@gmail.com>
2022-11-18 11:26:53 -06:00
Ethan Arrowood
6796fd721d Publish Stable
- vercel@28.5.5
2022-11-17 14:48:37 -07:00
Ethan Arrowood
15e9562970 [cli] Add more guards to vc build monorepo support feature (#8939)
### Related Issues

Includes a guard checking for `vercel-build` and a LD flag to control
rollout.

### 📋 Checklist

<!--
  Please keep your PR as a Draft until the checklist is complete
-->

#### Tests

- [ ] The code changed/added as part of this PR has been covered with
tests
- [ ] All tests pass locally with `yarn test-unit`

#### Code Review

- [ ] This PR has a concise title and thorough description useful to a
reviewer
- [ ] Issue from task tracker has a link to this PR
2022-11-17 14:47:52 -07:00
Steven Tey
2cafcdab9d [examples] Updated Nuxt starter to v3 stable (#8928) 2022-11-17 14:27:02 -06:00
Ethan Arrowood
bef3a4bef2 Publish Stable
- vercel@28.5.4
 - @vercel/fs-detectors@3.5.2
2022-11-17 07:34:31 -07:00
Ethan Arrowood
9be16605ec [cli] support package.json based turbo config in vc build automatic build/install command feature (#8926)
### Related Issues

Adds support for package.json based turbo configuration. 

Includes test.

Confirmed with Turbo that `turbo.json` takes precedence over
`package.json` based config so that is how it is processed here.

### 📋 Checklist

<!--
  Please keep your PR as a Draft until the checklist is complete
-->

#### Tests

- [ ] The code changed/added as part of this PR has been covered with
tests
- [ ] All tests pass locally with `yarn test-unit`

#### Code Review

- [ ] This PR has a concise title and thorough description useful to a
reviewer
- [ ] Issue from task tracker has a link to this PR
2022-11-16 16:01:30 -07:00
Rich Harris
759744144a [cli] fix typo: configuarion -> configuration (#8925)
### Related Issues

No related issue, this is a drive-by fix

### 📋 Checklist

<!--
  Please keep your PR as a Draft until the checklist is complete
-->

#### Tests

- [x] The code changed/added as part of this PR has been covered with tests
- [x] All tests pass locally with `yarn test-unit`

#### Code Review

- [x] This PR has a concise title and thorough description useful to a reviewer
- [ ] Issue from task tracker has a link to this PR
2022-11-16 21:33:51 +00:00
Nathan Rajlich
896dd04cd7 [fs-detectors] Don't add "api/*" 404 route when only a middleware is present (#8920)
This route should not be added when there are no explicit builds under
the "api" directory.

Fixes https://github.com/sveltejs/kit/issues/6777.
2022-11-16 09:33:17 -08:00
Nathan Rajlich
2dae293c1e [fs-detectors] Remove limitedRoutes (#8921)
These were only used for FS API v2, and are no longer needed.
2022-11-16 17:21:45 +00:00
Sean Massa
4159b498b9 Publish Stable
- vercel@28.5.3
 - @vercel/static-build@1.0.38
2022-11-15 16:43:09 -06:00
Douglas Parsons
feabd64d5e [static-build] support gatsby-config as typescript (#8894)
### Related Issues

A customer issue was raised that web-vitals analytics were not working for their Gatsby application, even though this is meant to be zero config. 

It turns out the issue is due to their `gatsby-config` file being declared as a `ts` file, rather than `js`. This is perfectly valid and supported in Gatsby. 

However, the static-build modifications that are made to automatically add the `gatsby-plugin-vercel` only apply to existing `js` files. 

This lead to their deployments containing both a `js` and `ts` version of `gatsby-config`. Luckily, the `ts` version has higher precedence, so _only_ web-vitals were affected. 

Closes https://linear.app/vercel/issue/FLA-364/investigate-gatsby-and-nuxt-data-issues

#### Tests

- [X] The code changed/added as part of this PR has been covered with tests
- [X] All tests pass locally with `yarn test-unit`

#### Code Review

- [X] This PR has a concise title and thorough description useful to a reviewer
- [X] Issue from task tracker has a link to this PR
2022-11-15 22:37:18 +00:00
140 changed files with 65918 additions and 84468 deletions

View File

@@ -33,7 +33,7 @@ jobs:
fetch-depth: 2 fetch-depth: 2
- uses: actions/setup-go@v3 - uses: actions/setup-go@v3
with: with:
go-version: '1.13.15' go-version: '1.18'
- uses: actions/setup-node@v3 - uses: actions/setup-node@v3
timeout-minutes: 5 # See https://github.com/actions/cache/issues/810 timeout-minutes: 5 # See https://github.com/actions/cache/issues/810
with: with:

View File

@@ -216,7 +216,7 @@ If a custom runtime is based on one of these Lambda runtimes, large environment
support will be available without further configuration. Custom runtimes based on support will be available without further configuration. Custom runtimes based on
other Lambda runtimes, including those that provide the runtime via `provided` and other Lambda runtimes, including those that provide the runtime via `provided` and
`provided.al2`, must implement runtime wrapper support and indicate it via the `provided.al2`, must implement runtime wrapper support and indicate it via the
`supportsWrapper` flag when calling [`createLambda`](#createlambda()). `supportsWrapper` flag when calling [`createLambda`](<#createlambda()>).
To add support for runtime wrappers to a custom runtime, first check the value of the To add support for runtime wrappers to a custom runtime, first check the value of the
`AWS_LAMBDA_EXEC_WRAPPER` environment variable in the bootstrap script. Its value is `AWS_LAMBDA_EXEC_WRAPPER` environment variable in the bootstrap script. Its value is
@@ -264,7 +264,7 @@ This is achieved by using `exec` in `bash` to replace the running process with t
maintaining the same PID and environment. maintaining the same PID and environment.
Once support for runtime wrappers is included, ensure `supportsWrapper` is set to Once support for runtime wrappers is included, ensure `supportsWrapper` is set to
`true` in the call to [`createLambda`](#createlambda()). This will inform the build `true` in the call to [`createLambda`](<#createlambda()>). This will inform the build
process to enable large environment support for this runtime. process to enable large environment support for this runtime.
### Utilities as peerDependencies ### Utilities as peerDependencies
@@ -380,6 +380,7 @@ This is a [class](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refere
This is an abstract enumeration type that is implemented by one of the following possible `String` values: This is an abstract enumeration type that is implemented by one of the following possible `String` values:
- `nodejs18.x`
- `nodejs16.x` - `nodejs16.x`
- `nodejs14.x` - `nodejs14.x`
- `go1.x` - `go1.x`

View File

@@ -1,16 +0,0 @@
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# For the full list of supported browsers by the Angular framework, please see:
# https://angular.io/guide/browser-support
# You can see what browsers were selected by your queries by running:
# npx browserslist
last 1 Chrome version
last 1 Firefox version
last 2 Edge major versions
last 2 Safari major versions
last 2 iOS major versions
Firefox ESR

View File

@@ -0,0 +1,16 @@
# Editor configuration, see https://editorconfig.org
root = true
[*]
charset = utf-8
indent_style = space
indent_size = 2
insert_final_newline = true
trim_trailing_whitespace = true
[*.ts]
quote_type = single
[*.md]
max_line_length = off
trim_trailing_whitespace = false

View File

@@ -41,3 +41,4 @@ testem.log
.DS_Store .DS_Store
Thumbs.db Thumbs.db
.vercel .vercel
.angular

View File

@@ -14,7 +14,7 @@ _Live Example: https://angular-template.vercel.app_
## Development server ## Development server
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. Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files.
## Code scaffolding ## Code scaffolding

View File

@@ -3,13 +3,9 @@
"version": 1, "version": 1,
"newProjectRoot": "projects", "newProjectRoot": "projects",
"projects": { "projects": {
"my-app": { "angular-test": {
"projectType": "application", "projectType": "application",
"schematics": { "schematics": {},
"@schematics/angular:application": {
"strict": true
}
},
"root": "", "root": "",
"sourceRoot": "src", "sourceRoot": "src",
"prefix": "app", "prefix": "app",
@@ -17,18 +13,13 @@
"build": { "build": {
"builder": "@angular-devkit/build-angular:browser", "builder": "@angular-devkit/build-angular:browser",
"options": { "options": {
"outputPath": "dist/my-app", "outputPath": "dist/angular-test",
"index": "src/index.html", "index": "src/index.html",
"main": "src/main.ts", "main": "src/main.ts",
"polyfills": "src/polyfills.ts", "polyfills": ["zone.js"],
"tsConfig": "tsconfig.app.json", "tsConfig": "tsconfig.app.json",
"assets": [ "assets": ["src/favicon.ico", "src/assets"],
"src/favicon.ico", "styles": ["src/styles.css"],
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": [] "scripts": []
}, },
"configurations": { "configurations": {
@@ -45,12 +36,6 @@
"maximumError": "4kb" "maximumError": "4kb"
} }
], ],
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"outputHashing": "all" "outputHashing": "all"
}, },
"development": { "development": {
@@ -68,10 +53,10 @@
"builder": "@angular-devkit/build-angular:dev-server", "builder": "@angular-devkit/build-angular:dev-server",
"configurations": { "configurations": {
"production": { "production": {
"browserTarget": "my-app:build:production" "browserTarget": "angular-test:build:production"
}, },
"development": { "development": {
"browserTarget": "my-app:build:development" "browserTarget": "angular-test:build:development"
} }
}, },
"defaultConfiguration": "development" "defaultConfiguration": "development"
@@ -79,28 +64,20 @@
"extract-i18n": { "extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n", "builder": "@angular-devkit/build-angular:extract-i18n",
"options": { "options": {
"browserTarget": "my-app:build" "browserTarget": "angular-test:build"
} }
}, },
"test": { "test": {
"builder": "@angular-devkit/build-angular:karma", "builder": "@angular-devkit/build-angular:karma",
"options": { "options": {
"main": "src/test.ts", "polyfills": ["zone.js", "zone.js/testing"],
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json", "tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js", "assets": ["src/favicon.ico", "src/assets"],
"assets": [ "styles": ["src/styles.css"],
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.css"
],
"scripts": [] "scripts": []
} }
} }
} }
} }
}, }
"defaultProject": "my-app"
} }

View File

@@ -1,44 +0,0 @@
// Karma configuration file, see link for more information
// https://karma-runner.github.io/1.0/config/configuration-file.html
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', '@angular-devkit/build-angular'],
plugins: [
require('karma-jasmine'),
require('karma-chrome-launcher'),
require('karma-jasmine-html-reporter'),
require('karma-coverage'),
require('@angular-devkit/build-angular/plugins/karma')
],
client: {
jasmine: {
// you can add configuration options for Jasmine here
// the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html
// for example, you can disable the random execution with `random: false`
// or set a specific seed with `seed: 4321`
},
clearContext: false // leave Jasmine Spec Runner output visible in browser
},
jasmineHtmlReporter: {
suppressAll: true // removes the duplicated traces
},
coverageReporter: {
dir: require('path').join(__dirname, './coverage/my-app'),
subdir: '.',
reporters: [
{ type: 'html' },
{ type: 'text-summary' }
]
},
reporters: ['progress', 'kjhtml'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
restartOnFileChange: true
});
};

19033
examples/angular/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -8,30 +8,29 @@
"test": "ng test" "test": "ng test"
}, },
"dependencies": { "dependencies": {
"@angular/animations": "~13.1.0", "@angular/animations": "^15.0.0",
"@angular/common": "~13.1.0", "@angular/common": "^15.0.0",
"@angular/compiler": "~13.1.0", "@angular/compiler": "^15.0.0",
"@angular/core": "~13.1.0", "@angular/core": "^15.0.0",
"@angular/forms": "~13.1.0", "@angular/forms": "^15.0.0",
"@angular/platform-browser": "~13.1.0", "@angular/platform-browser": "^15.0.0",
"@angular/platform-browser-dynamic": "~13.1.0", "@angular/platform-browser-dynamic": "^15.0.0",
"@angular/router": "~13.1.0", "@angular/router": "^15.0.0",
"rxjs": "~7.4.0", "rxjs": "~7.5.0",
"tslib": "^2.3.0", "tslib": "^2.3.0",
"zone.js": "~0.11.4" "zone.js": "~0.12.0"
}, },
"devDependencies": { "devDependencies": {
"@angular-devkit/build-angular": "~13.1.3", "@angular-devkit/build-angular": "^15.0.0",
"@angular/cli": "~13.1.3", "@angular/cli": "~15.0.0",
"@angular/compiler-cli": "~13.1.0", "@angular/compiler-cli": "^15.0.0",
"@types/jasmine": "~3.10.0", "@types/jasmine": "~4.3.0",
"@types/node": "^12.11.1", "jasmine-core": "~4.5.0",
"jasmine-core": "~3.10.0", "karma": "~6.4.0",
"karma": "~6.3.0",
"karma-chrome-launcher": "~3.1.0", "karma-chrome-launcher": "~3.1.0",
"karma-coverage": "~2.1.0", "karma-coverage": "~2.2.0",
"karma-jasmine": "~4.0.0", "karma-jasmine": "~5.1.0",
"karma-jasmine-html-reporter": "~1.7.0", "karma-jasmine-html-reporter": "~2.0.0",
"typescript": "~4.5.2" "typescript": "~4.8.2"
} }
} }

View File

@@ -0,0 +1,10 @@
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
const routes: Routes = [];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }

View File

@@ -367,7 +367,7 @@
</a> </a>
<a class="card" target="_blank" rel="noopener" href="https://material.angular.io"> <a class="card" target="_blank" rel="noopener" href="https://material.angular.io">
<svg xmlns="http://www.w3.org/2000/svg" style="margin-right: 8px" width="21.813" height="23.453" viewBox="0 0 21.813 23.453"><path d="M4099.584,972.736h0l-10.882,3.9,1.637,14.4,9.245,5.153,9.245-5.153,1.686-14.4Z" transform="translate(-4088.702 -972.736)" fill="#808080"/><path d="M4181.516,972.736v23.453l9.245-5.153,1.686-14.4Z" transform="translate(-4170.633 -972.736)" fill="#808080"/><path d="M4137.529,1076.127l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1058.315)" fill="#ffe0b2"/><path d="M4137.529,1051.705l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1036.757)" fill="#fff3e0"/><path d="M4137.529,1027.283l-7.7-3.723,4.417-2.721,7.753,3.723Z" transform="translate(-4125.003 -1015.199)" fill="#fff"/></svg> <svg xmlns="http://www.w3.org/2000/svg" style="margin-right: 8px" width="21.813" height="23.453" viewBox="0 0 179.2 192.7"><path fill="#ffa726" d="M89.4 0 0 32l13.5 118.4 75.9 42.3 76-42.3L179.2 32 89.4 0z"/><path fill="#fb8c00" d="M89.4 0v192.7l76-42.3L179.2 32 89.4 0z"/><path fill="#ffe0b2" d="m102.9 146.3-63.3-30.5 36.3-22.4 63.7 30.6-36.7 22.3z"/><path fill="#fff3e0" d="M102.9 122.8 39.6 92.2l36.3-22.3 63.7 30.6-36.7 22.3z"/><path fill="#fff" d="M102.9 99.3 39.6 68.7l36.3-22.4 63.7 30.6-36.7 22.4z"/></svg>
<span>Angular Material</span> <span>Angular Material</span>
<svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg> <svg class="material-icons" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/></svg>
</a> </a>
@@ -481,3 +481,4 @@
<!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * --> <!-- * * * * * * * * * * End of Placeholder * * * * * * * * * * * -->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> <!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -->
<router-outlet></router-outlet>

View File

@@ -1,9 +1,13 @@
import { TestBed } from '@angular/core/testing'; import { TestBed } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
describe('AppComponent', () => { describe('AppComponent', () => {
beforeEach(async () => { beforeEach(async () => {
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [
RouterTestingModule
],
declarations: [ declarations: [
AppComponent AppComponent
], ],
@@ -16,16 +20,16 @@ describe('AppComponent', () => {
expect(app).toBeTruthy(); expect(app).toBeTruthy();
}); });
it(`should have as title 'my-app'`, () => { it(`should have as title 'angular-test'`, () => {
const fixture = TestBed.createComponent(AppComponent); const fixture = TestBed.createComponent(AppComponent);
const app = fixture.componentInstance; const app = fixture.componentInstance;
expect(app.title).toEqual('my-app'); expect(app.title).toEqual('angular-test');
}); });
it('should render title', () => { it('should render title', () => {
const fixture = TestBed.createComponent(AppComponent); const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges(); fixture.detectChanges();
const compiled = fixture.nativeElement as HTMLElement; const compiled = fixture.nativeElement as HTMLElement;
expect(compiled.querySelector('.content span')?.textContent).toContain('my-app app is running!'); expect(compiled.querySelector('.content span')?.textContent).toContain('angular-test app is running!');
}); });
}); });

View File

@@ -6,5 +6,5 @@ import { Component } from '@angular/core';
styleUrls: ['./app.component.css'] styleUrls: ['./app.component.css']
}) })
export class AppComponent { export class AppComponent {
title = 'my-app'; title = 'angular-test';
} }

View File

@@ -1,6 +1,7 @@
import { NgModule } from '@angular/core'; import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser'; import { BrowserModule } from '@angular/platform-browser';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component'; import { AppComponent } from './app.component';
@NgModule({ @NgModule({
@@ -8,7 +9,8 @@ import { AppComponent } from './app.component';
AppComponent AppComponent
], ],
imports: [ imports: [
BrowserModule BrowserModule,
AppRoutingModule
], ],
providers: [], providers: [],
bootstrap: [AppComponent] bootstrap: [AppComponent]

View File

@@ -1,3 +0,0 @@
export const environment = {
production: true
};

View File

@@ -1,16 +0,0 @@
// This file can be replaced during build by using the `fileReplacements` array.
// `ng build` replaces `environment.ts` with `environment.prod.ts`.
// The list of file replacements can be found in `angular.json`.
export const environment = {
production: false
};
/*
* For easier debugging in development mode, you can import the following file
* to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`.
*
* This import should be commented out in production mode because it will have a negative impact
* on performance if an error is thrown.
*/
// import 'zone.js/plugins/zone-error'; // Included with Angular CLI.

View File

@@ -1,13 +1,13 @@
<!doctype html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8" />
<title>Angular</title> <title>Angular</title>
<base href="/"> <base href="/" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" type="image/x-icon" href="favicon.ico"> <link rel="icon" type="image/x-icon" href="favicon.ico" />
</head> </head>
<body> <body>
<app-root></app-root> <app-root></app-root>
</body> </body>
</html> </html>

View File

@@ -1,12 +1,7 @@
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app/app.module'; import { AppModule } from './app/app.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule) platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.error(err)); .catch(err => console.error(err));

View File

@@ -1,53 +0,0 @@
/**
* This file includes polyfills needed by Angular and is loaded before the app.
* You can add your own extra polyfills to this file.
*
* This file is divided into 2 sections:
* 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.
* 2. Application imports. Files imported after ZoneJS that should be loaded before your main
* file.
*
* The current setup is for so-called "evergreen" browsers; the last versions of browsers that
* automatically update themselves. This includes recent versions of Safari, Chrome (including
* Opera), Edge on the desktop, and iOS and Chrome on mobile.
*
* Learn more in https://angular.io/guide/browser-support
*/
/***************************************************************************************************
* BROWSER POLYFILLS
*/
/**
* By default, zone.js will patch all possible macroTask and DomEvents
* user can disable parts of macroTask/DomEvents patch by setting following flags
* because those flags need to be set before `zone.js` being loaded, and webpack
* will put import in the top of bundle, so user need to create a separate file
* in this directory (for example: zone-flags.ts), and put the following flags
* into that file, and then add the following code before importing zone.js.
* import './zone-flags';
*
* The flags allowed in zone-flags.ts are listed here.
*
* The following flags will work for all browsers.
*
* (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame
* (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick
* (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames
*
* in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js
* with the following flag, it will bypass `zone.js` patch for IE/Edge
*
* (window as any).__Zone_enable_cross_context_check = true;
*
*/
/***************************************************************************************************
* Zone JS is required by default for Angular itself.
*/
import 'zone.js'; // Included with Angular CLI.
/***************************************************************************************************
* APPLICATION IMPORTS
*/

View File

@@ -1,26 +0,0 @@
// This file is required by karma.conf.js and loads recursively all the .spec and framework files
import 'zone.js/testing';
import { getTestBed } from '@angular/core/testing';
import {
BrowserDynamicTestingModule,
platformBrowserDynamicTesting
} from '@angular/platform-browser-dynamic/testing';
declare const require: {
context(path: string, deep?: boolean, filter?: RegExp): {
<T>(id: string): T;
keys(): string[];
};
};
// First, initialize the Angular testing environment.
getTestBed().initTestEnvironment(
BrowserDynamicTestingModule,
platformBrowserDynamicTesting(),
);
// Then we find all the tests.
const context = require.context('./', true, /\.spec\.ts$/);
// And load the modules.
context.keys().map(context);

View File

@@ -5,11 +5,6 @@
"outDir": "./out-tsc/app", "outDir": "./out-tsc/app",
"types": [] "types": []
}, },
"files": [ "files": ["src/main.ts"],
"src/main.ts", "include": ["src/**/*.d.ts"]
"src/polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
} }

View File

@@ -16,12 +16,10 @@
"experimentalDecorators": true, "experimentalDecorators": true,
"moduleResolution": "node", "moduleResolution": "node",
"importHelpers": true, "importHelpers": true,
"target": "es2017", "target": "ES2022",
"module": "es2020", "module": "ES2022",
"lib": [ "useDefineForClassFields": false,
"es2020", "lib": ["ES2022", "dom"]
"dom"
]
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"enableI18nLegacyMessageIdFormat": false, "enableI18nLegacyMessageIdFormat": false,

View File

@@ -3,16 +3,7 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "./out-tsc/spec", "outDir": "./out-tsc/spec",
"types": [ "types": ["jasmine"]
"jasmine"
]
}, },
"files": [ "include": ["src/**/*.spec.ts", "src/**/*.d.ts"]
"src/test.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.spec.ts",
"src/**/*.d.ts"
]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -8,7 +8,7 @@
"astro": "astro" "astro": "astro"
}, },
"devDependencies": { "devDependencies": {
"astro": "^1.0.0-rc.8", "astro": "^1.6.10",
"web-vitals": "^3.0.0" "web-vitals": "^3.1.0"
} }
} }

3599
examples/astro/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,13 @@
{ {
"private": true, "private": true,
"dependencies": { "dependencies": {
"@testing-library/jest-dom": "^5.16.4", "@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.3.0", "@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^14.2.0", "@testing-library/user-event": "^14.4.3",
"react": "^18.1.0", "react": "^18.2.0",
"react-dom": "^18.1.0", "react-dom": "^18.2.0",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"web-vitals": "^2.1.4" "web-vitals": "^3.0.4"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",

10061
examples/create-react-app/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,72 +1,4 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/ node_modules/
jspm_packages/
# Typescript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# dotenv environment variables file
.env
.env.build
# gatsby files
.cache/ .cache/
public public
# Mac files
.DS_Store
# Yarn
yarn-error.log
.pnp/
.pnp.js
# Yarn Integrity file
.yarn-integrity
.vercel .vercel

View File

@@ -1,6 +1,8 @@
# Gatsby # Gatsby
This directory is a brief example of a [Gatsby](https://www.gatsbyjs.org/) app with [Serverless Functions](https://vercel.com/docs/concepts/functions/serverless-functions) that can be deployed to Vercel with zero configuration. This directory is a brief example of a [Gatsby](https://www.gatsbyjs.org/) app that can be deployed to Vercel with zero configuration.
> **Note:** We do not currently support some Gatsby v5 features, including API Routes and DSG. We are actively working on adding support for these features.
## Deploy Your Own ## Deploy Your Own
@@ -10,19 +12,42 @@ Deploy your own Gatsby project, along with Serverless Functions, with Vercel.
_Live Example: https://gatsby.vercel.app_ _Live Example: https://gatsby.vercel.app_
## Running Locally ## Quickstart
> **Note:** [Gatsby Functions](https://www.gatsbyjs.com/docs/reference/functions/getting-started/) are not yet supported on Vercel, which is why the API Route is in `/api` instead of `/src/api`. 1. **Create a Gatsby site.**
To run your Gatsby application and your API Route, you'll need to use the [Vercel CLI](https://vercel.com/cli): Use the Gatsby CLI to create a new site, specifying the minimal starter.
```shell ```shell
$ npm i -g vercel # create a new Gatsby site using the minimal starter
$ vercel npm init gatsby
``` ```
Alternatively, you can remove the API and just use Gatsby: 2. **Start developing.**
```shell Navigate into your new sites directory and start it up.
$ yarn develop
``` ```shell
cd my-gatsby-site/
npm run develop
```
3. **Open the code and start customizing!**
Your site is now running at http://localhost:8000!
Edit `src/pages/index.js` to see your site update in real-time!
4. **Learn more**
- [Documentation](https://www.gatsbyjs.com/docs/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
- [Tutorials](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
- [Guides](https://www.gatsbyjs.com/tutorial/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
- [API Reference](https://www.gatsbyjs.com/docs/api-reference/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
- [Plugin Library](https://www.gatsbyjs.com/plugins?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)
- [Cheat Sheet](https://www.gatsbyjs.com/docs/cheat-sheet/?utm_source=starter&utm_medium=readme&utm_campaign=minimal-starter)

View File

@@ -1,4 +0,0 @@
export default function handler(req, res) {
const date = new Date().toString();
res.status(200).send(date);
};

View File

@@ -1,9 +1,10 @@
/**
* @type {import('gatsby').GatsbyConfig}
*/
module.exports = { module.exports = {
siteMetadata: { siteMetadata: {
title: `Gatsby + Node.js API`, title: `Gatsby + Vercel`,
siteUrl: `https://gatsby-template.vercel.app`, siteUrl: `https://gatsby-template.vercel.app/`,
}, },
plugins: [ plugins: [],
};
]
}

View File

@@ -8,8 +8,8 @@
"clean": "gatsby clean" "clean": "gatsby clean"
}, },
"dependencies": { "dependencies": {
"gatsby": "^4.5.3", "gatsby": "^5.0.0",
"react": "^17.0.1", "react": "^18.2.0",
"react-dom": "^17.0.1" "react-dom": "^18.2.0"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,49 @@
import * as React from 'react';
import { Link } from 'gatsby';
const pageStyles = {
color: '#232129',
padding: '96px',
fontFamily: '-apple-system, Roboto, sans-serif, serif',
};
const headingStyles = {
marginTop: 0,
marginBottom: 64,
maxWidth: 320,
};
const paragraphStyles = {
marginBottom: 48,
};
const codeStyles = {
color: '#8A6534',
padding: 4,
backgroundColor: '#FFF4DB',
fontSize: '1.25rem',
borderRadius: 4,
};
const NotFoundPage = () => {
return (
<main style={pageStyles}>
<h1 style={headingStyles}>Page not found</h1>
<p style={paragraphStyles}>
Sorry 😔, we couldnt find what you were looking for.
<br />
{process.env.NODE_ENV === 'development' ? (
<>
<br />
Try creating a page in <code style={codeStyles}>src/pages/</code>.
<br />
</>
) : null}
<br />
<Link to="/">Go home</Link>.
</p>
</main>
);
};
export default NotFoundPage;
export const Head = () => <title>Not found</title>;

View File

@@ -1,53 +1,170 @@
import React, { useEffect, useState } from 'react'; import * as React from 'react';
import '../styles/index.css';
function Index() { const pageStyles = {
const [date, setDate] = useState(null); color: '#232129',
useEffect(() => { padding: 96,
async function getDate() { fontFamily: '-apple-system, Roboto, sans-serif, serif',
const res = await fetch('/api/date'); };
const newDate = await res.text(); const headingStyles = {
setDate(newDate); marginTop: 0,
} marginBottom: 64,
getDate(); maxWidth: 320,
}, []); };
const headingAccentStyles = {
color: '#663399',
};
const paragraphStyles = {
marginBottom: 48,
};
const codeStyles = {
color: '#8A6534',
padding: 4,
backgroundColor: '#FFF4DB',
fontSize: '1.25rem',
borderRadius: 4,
};
const listStyles = {
marginBottom: 96,
paddingLeft: 0,
};
const listItemStyles = {
fontWeight: 300,
fontSize: 24,
maxWidth: 560,
marginBottom: 30,
};
const linkStyle = {
color: '#8954A8',
fontWeight: 'bold',
fontSize: 16,
verticalAlign: '5%',
};
const docLinkStyle = {
...linkStyle,
listStyleType: 'none',
marginBottom: 24,
};
const descriptionStyle = {
color: '#232129',
fontSize: 14,
marginTop: 10,
marginBottom: 0,
lineHeight: 1.25,
};
const docLink = {
text: 'Documentation',
url: 'https://www.gatsbyjs.com/docs/',
color: '#8954A8',
};
const badgeStyle = {
color: '#fff',
backgroundColor: '#088413',
border: '1px solid #088413',
fontSize: 11,
fontWeight: 'bold',
letterSpacing: 1,
borderRadius: 4,
padding: '4px 6px',
display: 'inline-block',
position: 'relative',
top: -2,
marginLeft: 10,
lineHeight: 1,
};
const links = [
{
text: 'Tutorial',
url: 'https://www.gatsbyjs.com/docs/tutorial/',
description:
"A great place to get started if you're new to web development. Designed to guide you through setting up your first Gatsby site.",
color: '#E95800',
},
{
text: 'How to Guides',
url: 'https://www.gatsbyjs.com/docs/how-to/',
description:
"Practical step-by-step guides to help you achieve a specific goal. Most useful when you're trying to get something done.",
color: '#1099A8',
},
{
text: 'Reference Guides',
url: 'https://www.gatsbyjs.com/docs/reference/',
description:
"Nitty-gritty technical descriptions of how Gatsby works. Most useful when you need detailed information about Gatsby's APIs.",
color: '#BC027F',
},
{
text: 'Conceptual Guides',
url: 'https://www.gatsbyjs.com/docs/conceptual/',
description:
'Big-picture explanations of higher-level Gatsby concepts. Most useful for building understanding of a particular topic.',
color: '#0D96F2',
},
{
text: 'Plugin Library',
url: 'https://www.gatsbyjs.com/plugins',
description:
'Add functionality and customize your Gatsby site or app with thousands of plugins built by our amazing developer community.',
color: '#8EB814',
},
];
const IndexPage = () => {
return ( return (
<main> <main style={pageStyles}>
<h1>Gatsby + API Route</h1> <h1 style={headingStyles}>
<h2> Congratulations
Deployed with{' '} <br />
<a <span style={headingAccentStyles}>
href="https://vercel.com/docs" you just made a Gatsby site! 🎉🎉🎉
target="_blank" </span>
rel="noreferrer noopener" </h1>
> <p style={paragraphStyles}>
Vercel Edit <code style={codeStyles}>src/pages/index.js</code> to see this page
</a> update in real-time. 😎
!
</h2>
<p>
<a
href="https://github.com/vercel/vercel/tree/main/examples/gatsby"
target="_blank"
rel="noreferrer noopener"
>
This project
</a>{' '}
is a <a href="https://www.gatsbyjs.org/">Gatsby</a> app with two
directories, <code>/src</code> for static content and <code>/api</code>{' '}
which contains a serverless{' '}
<a href="https://nodejs.org/en/">Node.js</a> function. See{' '}
<a href="/api/date">
<code>api/date</code> for the Date API with Node.js
</a>
.
</p> </p>
<br /> <ul style={listStyles}>
<h2>The date according to Node.js is:</h2> <li style={docLinkStyle}>
<p>{date ? date : 'Loading date...'}</p> <a
style={linkStyle}
href={`${docLink.url}?utm_source=starter&utm_medium=start-page&utm_campaign=minimal-starter`}
>
{docLink.text}
</a>
</li>
{links.map(link => (
<li key={link.url} style={{ ...listItemStyles, color: link.color }}>
<span>
<a
style={linkStyle}
href={`${link.url}?utm_source=starter&utm_medium=start-page&utm_campaign=minimal-starter`}
>
{link.text}
</a>
{link.badge && (
<span style={badgeStyle} aria-label="New Badge">
NEW!
</span>
)}
<p style={descriptionStyle}>{link.description}</p>
</span>
</li>
))}
</ul>
<img
alt="Gatsby G Logo"
src="data:image/svg+xml,%3Csvg width='24' height='24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 2a10 10 0 110 20 10 10 0 010-20zm0 2c-3.73 0-6.86 2.55-7.75 6L14 19.75c3.45-.89 6-4.02 6-7.75h-5.25v1.5h3.45a6.37 6.37 0 01-3.89 4.44L6.06 9.69C7 7.31 9.3 5.63 12 5.63c2.13 0 4 1.04 5.18 2.65l1.23-1.06A7.959 7.959 0 0012 4zm-8 8a8 8 0 008 8c.04 0 .09 0-8-8z' fill='%23639'/%3E%3C/svg%3E"
/>
</main> </main>
); );
} };
export default Index; export default IndexPage;
export const Head = () => <title>Home Page</title>;

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
reactStrictMode: true, reactStrictMode: true,
} };
module.exports = nextConfig module.exports = nextConfig;

File diff suppressed because it is too large Load Diff

View File

@@ -10,8 +10,8 @@
}, },
"dependencies": { "dependencies": {
"eslint": "8.27.0", "eslint": "8.27.0",
"eslint-config-next": "13.0.3", "eslint-config-next": "13.0.4",
"next": "13.0.3", "next": "13.0.4",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0"
} }

View File

@@ -1,7 +1,7 @@
import '../styles/globals.css' import '../styles/globals.css';
function MyApp({ Component, pageProps }) { function MyApp({ Component, pageProps }) {
return <Component {...pageProps} /> return <Component {...pageProps} />;
} }
export default MyApp export default MyApp;

View File

@@ -1,5 +1,4 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
export default function handler(req, res) { export default function handler(req, res) {
res.status(200).json({ name: 'John Doe' }) res.status(200).json({ name: 'John Doe' });
} }

View File

@@ -1,6 +1,6 @@
import Head from 'next/head' import Head from 'next/head';
import Image from 'next/image' import Image from 'next/image';
import styles from '../styles/Home.module.css' import styles from '../styles/Home.module.css';
export default function Home() { export default function Home() {
return ( return (
@@ -67,5 +67,5 @@ export default function Home() {
</a> </a>
</footer> </footer>
</div> </div>
) );
} }

View File

@@ -68,6 +68,7 @@ typings/
# nuxt.js build output # nuxt.js build output
.nuxt .nuxt
.output
# Nuxt generate # Nuxt generate
dist dist

View File

@@ -1,5 +0,0 @@
README.md
.nuxt
node_modules
*.log
.output

View File

@@ -1,34 +1,48 @@
# Nuxt.js Example # Nuxt Example
Deploy your [Nuxt.js](https://nuxtjs.org) project to Vercel with zero configuration. Deploy your [Nuxt](https://nuxt.com) project to Vercel with zero configuration.
[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/vercel/tree/main/examples/nuxtjs&template=nuxtjs) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https://github.com/vercel/vercel/tree/main/examples/nuxtjs&template=nuxtjs)
_Live Example: https://nuxtjs-template.vercel.app_ _Live Example: https://nuxtjs-template.vercel.app_
Look at the [Nuxt 3 documentation](https://v3.nuxtjs.org) to learn more.
## Setup ## Setup
Install the dependencies: Make sure to install the dependencies:
```bash ```bash
yarn install # yarn
yarn
# npm
npm install
# pnpm
pnpm install --shamefully-hoist
``` ```
## Development ## Development Server
Start the development server on http://localhost:3000: Start the development server on http://localhost:3000
```bash ```bash
yarn dev npm run dev
``` ```
## Deploy Your Own ## Production
Build the application for production: Build the application for production:
```bash ```bash
yarn build npm run build
``` ```
Locally preview production build:
```bash
npm run preview
```
Checkout the [deployment documentation](https://v3.nuxtjs.org/guide/deploy/presets) for more information.

View File

@@ -2,4 +2,4 @@
<div> <div>
<NuxtWelcome /> <NuxtWelcome />
</div> </div>
</template> </template>

View File

@@ -1,6 +1,5 @@
import { defineNuxtConfig } from 'nuxt3' export default {
nitro: {
// https://v3.nuxtjs.org/docs/directory-structure/nuxt.config preset: 'vercel-edge',
export default defineNuxtConfig({ },
};
})

View File

@@ -1,11 +1,13 @@
{ {
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "nuxi dev", "build": "nuxt build",
"build": "nuxi build", "dev": "nuxt dev",
"start": "node .output/server/index.mjs" "generate": "nuxt generate",
"preview": "nuxt preview",
"postinstall": "nuxt prepare"
}, },
"devDependencies": { "devDependencies": {
"nuxt3": "latest" "nuxt": "^3.0.0"
} }
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -6,22 +6,22 @@
"dev": "remix dev" "dev": "remix dev"
}, },
"dependencies": { "dependencies": {
"@remix-run/node": "^1.7.5", "@remix-run/node": "^1.7.6",
"@remix-run/react": "^1.7.5", "@remix-run/react": "^1.7.6",
"@remix-run/vercel": "^1.7.5", "@remix-run/vercel": "^1.7.6",
"@vercel/analytics": "^0.1.3", "@vercel/analytics": "^0.1.5",
"@vercel/node": "^2.4.4", "@vercel/node": "^2.6.3",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0" "react-dom": "^18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@remix-run/dev": "^1.7.5", "@remix-run/dev": "^1.7.6",
"@remix-run/eslint-config": "^1.7.5", "@remix-run/eslint-config": "^1.7.6",
"@remix-run/serve": "^1.7.5", "@remix-run/serve": "^1.7.6",
"@types/react": "^18.0.15", "@types/react": "^18.0.25",
"@types/react-dom": "^18.0.6", "@types/react-dom": "^18.0.9",
"eslint": "^8.23.1", "eslint": "^8.27.0",
"typescript": "^4.7.4" "typescript": "^4.9.3"
}, },
"engines": { "engines": {
"node": ">=14" "node": ">=14"

7969
examples/remix/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

710
examples/svelte/pnpm-lock.yaml generated Normal file
View File

@@ -0,0 +1,710 @@
lockfileVersion: 5.4
specifiers:
'@rollup/plugin-commonjs': ^17.0.0
'@rollup/plugin-node-resolve': ^11.0.0
rollup: ^2.3.4
rollup-plugin-css-only: ^3.1.0
rollup-plugin-livereload: ^2.0.0
rollup-plugin-svelte: ^7.0.0
rollup-plugin-terser: ^7.0.0
sirv-cli: ^2.0.0
svelte: ^3.0.0
dependencies:
sirv-cli: 2.0.2
devDependencies:
'@rollup/plugin-commonjs': 17.1.0_rollup@2.79.1
'@rollup/plugin-node-resolve': 11.2.1_rollup@2.79.1
rollup: 2.79.1
rollup-plugin-css-only: 3.1.0_rollup@2.79.1
rollup-plugin-livereload: 2.0.5
rollup-plugin-svelte: 7.1.0_fmmd6z6ko3ewxolgbmmnvvpp7y
rollup-plugin-terser: 7.0.2_rollup@2.79.1
svelte: 3.53.0
packages:
/@babel/code-frame/7.18.6:
resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/highlight': 7.18.6
dev: true
/@babel/helper-validator-identifier/7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
dev: true
/@babel/highlight/7.18.6:
resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-validator-identifier': 7.19.1
chalk: 2.4.2
js-tokens: 4.0.0
dev: true
/@jridgewell/gen-mapping/0.3.2:
resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
engines: {node: '>=6.0.0'}
dependencies:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.14
'@jridgewell/trace-mapping': 0.3.17
dev: true
/@jridgewell/resolve-uri/3.1.0:
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/set-array/1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
dev: true
/@jridgewell/source-map/0.3.2:
resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==}
dependencies:
'@jridgewell/gen-mapping': 0.3.2
'@jridgewell/trace-mapping': 0.3.17
dev: true
/@jridgewell/sourcemap-codec/1.4.14:
resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
dev: true
/@jridgewell/trace-mapping/0.3.17:
resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
dependencies:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.14
dev: true
/@polka/url/1.0.0-next.21:
resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==}
dev: false
/@rollup/plugin-commonjs/17.1.0_rollup@2.79.1:
resolution: {integrity: sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==}
engines: {node: '>= 8.0.0'}
peerDependencies:
rollup: ^2.30.0
dependencies:
'@rollup/pluginutils': 3.1.0_rollup@2.79.1
commondir: 1.0.1
estree-walker: 2.0.2
glob: 7.2.3
is-reference: 1.2.1
magic-string: 0.25.9
resolve: 1.22.1
rollup: 2.79.1
dev: true
/@rollup/plugin-node-resolve/11.2.1_rollup@2.79.1:
resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
engines: {node: '>= 10.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0
dependencies:
'@rollup/pluginutils': 3.1.0_rollup@2.79.1
'@types/resolve': 1.17.1
builtin-modules: 3.3.0
deepmerge: 4.2.2
is-module: 1.0.0
resolve: 1.22.1
rollup: 2.79.1
dev: true
/@rollup/pluginutils/3.1.0_rollup@2.79.1:
resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
engines: {node: '>= 8.0.0'}
peerDependencies:
rollup: ^1.20.0||^2.0.0
dependencies:
'@types/estree': 0.0.39
estree-walker: 1.0.1
picomatch: 2.3.1
rollup: 2.79.1
dev: true
/@rollup/pluginutils/4.2.1:
resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==}
engines: {node: '>= 8.0.0'}
dependencies:
estree-walker: 2.0.2
picomatch: 2.3.1
dev: true
/@types/estree/0.0.39:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
/@types/estree/1.0.0:
resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
dev: true
/@types/node/18.11.9:
resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==}
dev: true
/@types/resolve/1.17.1:
resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
dependencies:
'@types/node': 18.11.9
dev: true
/acorn/8.8.1:
resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==}
engines: {node: '>=0.4.0'}
hasBin: true
dev: true
/ansi-styles/3.2.1:
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
dev: true
/anymatch/3.1.2:
resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==}
engines: {node: '>= 8'}
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
dev: true
/balanced-match/1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
dev: true
/binary-extensions/2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
dev: true
/brace-expansion/1.1.11:
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
dev: true
/braces/3.0.2:
resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
engines: {node: '>=8'}
dependencies:
fill-range: 7.0.1
dev: true
/buffer-from/1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
dev: true
/builtin-modules/3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
dev: true
/chalk/2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
engines: {node: '>=4'}
dependencies:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
dev: true
/chokidar/3.5.3:
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
engines: {node: '>= 8.10.0'}
dependencies:
anymatch: 3.1.2
braces: 3.0.2
glob-parent: 5.1.2
is-binary-path: 2.1.0
is-glob: 4.0.3
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.2
dev: true
/color-convert/1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
dev: true
/color-name/1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
dev: true
/commander/2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: true
/commondir/1.0.1:
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
dev: true
/concat-map/0.0.1:
resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
dev: true
/console-clear/1.1.1:
resolution: {integrity: sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==}
engines: {node: '>=4'}
dev: false
/deepmerge/4.2.2:
resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==}
engines: {node: '>=0.10.0'}
dev: true
/escape-string-regexp/1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
dev: true
/estree-walker/0.6.1:
resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
dev: true
/estree-walker/1.0.1:
resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
dev: true
/estree-walker/2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
dev: true
/fill-range/7.0.1:
resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
engines: {node: '>=8'}
dependencies:
to-regex-range: 5.0.1
dev: true
/fs.realpath/1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
dev: true
/fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind/1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
/get-port/3.2.0:
resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==}
engines: {node: '>=4'}
dev: false
/glob-parent/5.1.2:
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
engines: {node: '>= 6'}
dependencies:
is-glob: 4.0.3
dev: true
/glob/7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
dependencies:
fs.realpath: 1.0.0
inflight: 1.0.6
inherits: 2.0.4
minimatch: 3.1.2
once: 1.4.0
path-is-absolute: 1.0.1
dev: true
/has-flag/3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
dev: true
/has-flag/4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
engines: {node: '>=8'}
dev: true
/has/1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
dev: true
/inflight/1.0.6:
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
dependencies:
once: 1.4.0
wrappy: 1.0.2
dev: true
/inherits/2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
dev: true
/is-binary-path/2.1.0:
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
engines: {node: '>=8'}
dependencies:
binary-extensions: 2.2.0
dev: true
/is-core-module/2.11.0:
resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
dependencies:
has: 1.0.3
dev: true
/is-extglob/2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
engines: {node: '>=0.10.0'}
dev: true
/is-glob/4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
dependencies:
is-extglob: 2.1.1
dev: true
/is-module/1.0.0:
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
dev: true
/is-number/7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
dev: true
/is-reference/1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
dependencies:
'@types/estree': 1.0.0
dev: true
/jest-worker/26.6.2:
resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
engines: {node: '>= 10.13.0'}
dependencies:
'@types/node': 18.11.9
merge-stream: 2.0.0
supports-color: 7.2.0
dev: true
/js-tokens/4.0.0:
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
dev: true
/kleur/4.1.5:
resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
engines: {node: '>=6'}
dev: false
/livereload-js/3.4.1:
resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==}
dev: true
/livereload/0.9.3:
resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==}
engines: {node: '>=8.0.0'}
hasBin: true
dependencies:
chokidar: 3.5.3
livereload-js: 3.4.1
opts: 2.0.2
ws: 7.5.9
transitivePeerDependencies:
- bufferutil
- utf-8-validate
dev: true
/local-access/1.1.0:
resolution: {integrity: sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==}
engines: {node: '>=6'}
dev: false
/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
dev: true
/merge-stream/2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
dev: true
/minimatch/3.1.2:
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
dependencies:
brace-expansion: 1.1.11
dev: true
/mri/1.2.0:
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
engines: {node: '>=4'}
dev: false
/mrmime/1.0.1:
resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==}
engines: {node: '>=10'}
dev: false
/normalize-path/3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
dev: true
/once/1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
dependencies:
wrappy: 1.0.2
dev: true
/opts/2.0.2:
resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==}
dev: true
/path-is-absolute/1.0.1:
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
engines: {node: '>=0.10.0'}
dev: true
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/picomatch/2.3.1:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
dev: true
/randombytes/2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
dependencies:
safe-buffer: 5.2.1
dev: true
/readdirp/3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
dev: true
/require-relative/0.8.7:
resolution: {integrity: sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==}
dev: true
/resolve/1.22.1:
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
hasBin: true
dependencies:
is-core-module: 2.11.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/rollup-plugin-css-only/3.1.0_rollup@2.79.1:
resolution: {integrity: sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==}
engines: {node: '>=10.12.0'}
peerDependencies:
rollup: 1 || 2
dependencies:
'@rollup/pluginutils': 4.2.1
rollup: 2.79.1
dev: true
/rollup-plugin-livereload/2.0.5:
resolution: {integrity: sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==}
engines: {node: '>=8.3'}
dependencies:
livereload: 0.9.3
transitivePeerDependencies:
- bufferutil
- utf-8-validate
dev: true
/rollup-plugin-svelte/7.1.0_fmmd6z6ko3ewxolgbmmnvvpp7y:
resolution: {integrity: sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==}
engines: {node: '>=10'}
peerDependencies:
rollup: '>=2.0.0'
svelte: '>=3.5.0'
dependencies:
require-relative: 0.8.7
rollup: 2.79.1
rollup-pluginutils: 2.8.2
svelte: 3.53.0
dev: true
/rollup-plugin-terser/7.0.2_rollup@2.79.1:
resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
peerDependencies:
rollup: ^2.0.0
dependencies:
'@babel/code-frame': 7.18.6
jest-worker: 26.6.2
rollup: 2.79.1
serialize-javascript: 4.0.0
terser: 5.15.1
dev: true
/rollup-pluginutils/2.8.2:
resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
dependencies:
estree-walker: 0.6.1
dev: true
/rollup/2.79.1:
resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/sade/1.8.1:
resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==}
engines: {node: '>=6'}
dependencies:
mri: 1.2.0
dev: false
/safe-buffer/5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
dev: true
/semiver/1.1.0:
resolution: {integrity: sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==}
engines: {node: '>=6'}
dev: false
/serialize-javascript/4.0.0:
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
dependencies:
randombytes: 2.1.0
dev: true
/sirv-cli/2.0.2:
resolution: {integrity: sha512-OtSJDwxsF1NWHc7ps3Sa0s+dPtP15iQNJzfKVz+MxkEo3z72mCD+yu30ct79rPr0CaV1HXSOBp+MIY5uIhHZ1A==}
engines: {node: '>= 10'}
hasBin: true
dependencies:
console-clear: 1.1.1
get-port: 3.2.0
kleur: 4.1.5
local-access: 1.1.0
sade: 1.8.1
semiver: 1.1.0
sirv: 2.0.2
tinydate: 1.3.0
dev: false
/sirv/2.0.2:
resolution: {integrity: sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==}
engines: {node: '>= 10'}
dependencies:
'@polka/url': 1.0.0-next.21
mrmime: 1.0.1
totalist: 3.0.0
dev: false
/source-map-support/0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
dev: true
/source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
dev: true
/sourcemap-codec/1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
dev: true
/supports-color/5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
dev: true
/supports-color/7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
dependencies:
has-flag: 4.0.0
dev: true
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/svelte/3.53.0:
resolution: {integrity: sha512-QwR6zwpcdpz5OqybIHlghM+qP2qKbzsKQuU9npgAmnI6zoTDIcjbcseUZA0AJGbotorltpQ0f413euKK4w+Piw==}
engines: {node: '>= 8'}
dev: true
/terser/5.15.1:
resolution: {integrity: sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==}
engines: {node: '>=10'}
hasBin: true
dependencies:
'@jridgewell/source-map': 0.3.2
acorn: 8.8.1
commander: 2.20.3
source-map-support: 0.5.21
dev: true
/tinydate/1.3.0:
resolution: {integrity: sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==}
engines: {node: '>=4'}
dev: false
/to-regex-range/5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
dependencies:
is-number: 7.0.0
dev: true
/totalist/3.0.0:
resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
engines: {node: '>=6'}
dev: false
/wrappy/1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
dev: true
/ws/7.5.9:
resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
engines: {node: '>=8.3.0'}
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
peerDependenciesMeta:
bufferutil:
optional: true
utf-8-validate:
optional: true
dev: true

472
examples/vite/pnpm-lock.yaml generated Normal file
View File

@@ -0,0 +1,472 @@
lockfileVersion: 5.4
specifiers:
'@vitejs/plugin-vue': ^1.2.4
'@vue/compiler-sfc': ^3.0.5
vite: ^2.4.0
vue: ^3.0.5
dependencies:
vue: 3.2.44
devDependencies:
'@vitejs/plugin-vue': 1.10.2_vite@2.9.15
'@vue/compiler-sfc': 3.2.44
vite: 2.9.15
packages:
/@babel/helper-string-parser/7.19.4:
resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
engines: {node: '>=6.9.0'}
/@babel/helper-validator-identifier/7.19.1:
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
engines: {node: '>=6.9.0'}
/@babel/parser/7.20.3:
resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
'@babel/types': 7.20.2
/@babel/types/7.20.2:
resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.19.4
'@babel/helper-validator-identifier': 7.19.1
to-fast-properties: 2.0.0
/@esbuild/linux-loong64/0.14.54:
resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==}
engines: {node: '>=12'}
cpu: [loong64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/@vitejs/plugin-vue/1.10.2_vite@2.9.15:
resolution: {integrity: sha512-/QJ0Z9qfhAFtKRY+r57ziY4BSbGUTGsPRMpB/Ron3QPwBZM4OZAZHdTa4a8PafCwU5DTatXG8TMDoP8z+oDqJw==}
engines: {node: '>=12.0.0'}
peerDependencies:
vite: ^2.5.10
dependencies:
vite: 2.9.15
dev: true
/@vue/compiler-core/3.2.44:
resolution: {integrity: sha512-TwzeVSnaklb8wIvMtwtkPkt9wnU+XD70xJ7N9+eIHtjKAG7OoZttm+14ZL6vWOL+2RcMtSZ+cYH+gvkUqsrmSQ==}
dependencies:
'@babel/parser': 7.20.3
'@vue/shared': 3.2.44
estree-walker: 2.0.2
source-map: 0.6.1
/@vue/compiler-dom/3.2.44:
resolution: {integrity: sha512-wPDR+gOn2Qi7SudPJ+gE62vuO/aKXIiIFALvHpztXmDdbAHGy3CDfmBgOGchTgTlSeDJHe9olEMkgOdmyXTjUg==}
dependencies:
'@vue/compiler-core': 3.2.44
'@vue/shared': 3.2.44
/@vue/compiler-sfc/3.2.44:
resolution: {integrity: sha512-8cFZcUWlrtnfM/GlRwYJdlfgbEOy0OZ/osLDU3h/wJu24HuYAc7QIML1USaKqiZzkjOaTd4y8mvYvcWXq3o5dA==}
dependencies:
'@babel/parser': 7.20.3
'@vue/compiler-core': 3.2.44
'@vue/compiler-dom': 3.2.44
'@vue/compiler-ssr': 3.2.44
'@vue/reactivity-transform': 3.2.44
'@vue/shared': 3.2.44
estree-walker: 2.0.2
magic-string: 0.25.9
postcss: 8.4.18
source-map: 0.6.1
/@vue/compiler-ssr/3.2.44:
resolution: {integrity: sha512-tAkUFLgvxds3l5KPyAH77OIYrEeLngNYQfWA9GocHiy2nlyajjqAH/Jq93Bq29Y20GeJzblmRp9DVYCVkJ5Rsw==}
dependencies:
'@vue/compiler-dom': 3.2.44
'@vue/shared': 3.2.44
/@vue/reactivity-transform/3.2.44:
resolution: {integrity: sha512-WGbEiXaS2qAOTS9Z3kKk2Nk4bi8OUl73Sih+h0XV9RTUATnaJSEQedveHUDQnHyXiZwyBMKosrxJg8aThHO/rw==}
dependencies:
'@babel/parser': 7.20.3
'@vue/compiler-core': 3.2.44
'@vue/shared': 3.2.44
estree-walker: 2.0.2
magic-string: 0.25.9
/@vue/reactivity/3.2.44:
resolution: {integrity: sha512-Fe0s52fTsPl+RSdvoqUZ3HRKlaVsKhIh1mea5EWOedFvZCjnymzlj3YC1wZMxi89qXRFSdEASVA/BWUGypk0Ig==}
dependencies:
'@vue/shared': 3.2.44
dev: false
/@vue/runtime-core/3.2.44:
resolution: {integrity: sha512-uwEV1cttL33k2dC+CNGYhKEYqGejT9KmgQ+4n/LmYUfZ1Gorl8F32DlIX+1pANyGHL1tBAisqHDxKyQBp2oBNA==}
dependencies:
'@vue/reactivity': 3.2.44
'@vue/shared': 3.2.44
dev: false
/@vue/runtime-dom/3.2.44:
resolution: {integrity: sha512-LDzNwXpU/nSpxrLk5jS0bfStgt88msgsgFzj6vHrl7es3QktIrCGybQS5CB/p/TO0q98iAiYtEVmi+Lej7Vgjg==}
dependencies:
'@vue/runtime-core': 3.2.44
'@vue/shared': 3.2.44
csstype: 2.6.21
dev: false
/@vue/server-renderer/3.2.44_vue@3.2.44:
resolution: {integrity: sha512-3+ArN07UgOAdbGKIp3uVqeC3bnR3J324QNjPR6vxHbLrTlkibFv8QNled/ux3fVq0KDCkVVKGOKB2V4sCIYOgg==}
peerDependencies:
vue: 3.2.44
dependencies:
'@vue/compiler-ssr': 3.2.44
'@vue/shared': 3.2.44
vue: 3.2.44
dev: false
/@vue/shared/3.2.44:
resolution: {integrity: sha512-mGZ44bnn0zpZ36nXtxbrBPno43yr96wjQE1dBEKS1Sieugt27HS4OGZVBRIgsdGzosB7vqZAvu0ttu1FDVdolA==}
/csstype/2.6.21:
resolution: {integrity: sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==}
dev: false
/esbuild-android-64/0.14.54:
resolution: {integrity: sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-android-arm64/0.14.54:
resolution: {integrity: sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-64/0.14.54:
resolution: {integrity: sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==}
engines: {node: '>=12'}
cpu: [x64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-darwin-arm64/0.14.54:
resolution: {integrity: sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==}
engines: {node: '>=12'}
cpu: [arm64]
os: [darwin]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-64/0.14.54:
resolution: {integrity: sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==}
engines: {node: '>=12'}
cpu: [x64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-freebsd-arm64/0.14.54:
resolution: {integrity: sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==}
engines: {node: '>=12'}
cpu: [arm64]
os: [freebsd]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-32/0.14.54:
resolution: {integrity: sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==}
engines: {node: '>=12'}
cpu: [ia32]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-64/0.14.54:
resolution: {integrity: sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==}
engines: {node: '>=12'}
cpu: [x64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm/0.14.54:
resolution: {integrity: sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==}
engines: {node: '>=12'}
cpu: [arm]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-arm64/0.14.54:
resolution: {integrity: sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==}
engines: {node: '>=12'}
cpu: [arm64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-mips64le/0.14.54:
resolution: {integrity: sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==}
engines: {node: '>=12'}
cpu: [mips64el]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-ppc64le/0.14.54:
resolution: {integrity: sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==}
engines: {node: '>=12'}
cpu: [ppc64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-riscv64/0.14.54:
resolution: {integrity: sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==}
engines: {node: '>=12'}
cpu: [riscv64]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-linux-s390x/0.14.54:
resolution: {integrity: sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==}
engines: {node: '>=12'}
cpu: [s390x]
os: [linux]
requiresBuild: true
dev: true
optional: true
/esbuild-netbsd-64/0.14.54:
resolution: {integrity: sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==}
engines: {node: '>=12'}
cpu: [x64]
os: [netbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-openbsd-64/0.14.54:
resolution: {integrity: sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==}
engines: {node: '>=12'}
cpu: [x64]
os: [openbsd]
requiresBuild: true
dev: true
optional: true
/esbuild-sunos-64/0.14.54:
resolution: {integrity: sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==}
engines: {node: '>=12'}
cpu: [x64]
os: [sunos]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-32/0.14.54:
resolution: {integrity: sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==}
engines: {node: '>=12'}
cpu: [ia32]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-64/0.14.54:
resolution: {integrity: sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==}
engines: {node: '>=12'}
cpu: [x64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild-windows-arm64/0.14.54:
resolution: {integrity: sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==}
engines: {node: '>=12'}
cpu: [arm64]
os: [win32]
requiresBuild: true
dev: true
optional: true
/esbuild/0.14.54:
resolution: {integrity: sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
'@esbuild/linux-loong64': 0.14.54
esbuild-android-64: 0.14.54
esbuild-android-arm64: 0.14.54
esbuild-darwin-64: 0.14.54
esbuild-darwin-arm64: 0.14.54
esbuild-freebsd-64: 0.14.54
esbuild-freebsd-arm64: 0.14.54
esbuild-linux-32: 0.14.54
esbuild-linux-64: 0.14.54
esbuild-linux-arm: 0.14.54
esbuild-linux-arm64: 0.14.54
esbuild-linux-mips64le: 0.14.54
esbuild-linux-ppc64le: 0.14.54
esbuild-linux-riscv64: 0.14.54
esbuild-linux-s390x: 0.14.54
esbuild-netbsd-64: 0.14.54
esbuild-openbsd-64: 0.14.54
esbuild-sunos-64: 0.14.54
esbuild-windows-32: 0.14.54
esbuild-windows-64: 0.14.54
esbuild-windows-arm64: 0.14.54
dev: true
/estree-walker/2.0.2:
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
/fsevents/2.3.2:
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
dev: true
optional: true
/function-bind/1.1.1:
resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
dev: true
/has/1.0.3:
resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
engines: {node: '>= 0.4.0'}
dependencies:
function-bind: 1.1.1
dev: true
/is-core-module/2.11.0:
resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
dependencies:
has: 1.0.3
dev: true
/magic-string/0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
dependencies:
sourcemap-codec: 1.4.8
/nanoid/3.3.4:
resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
/path-parse/1.0.7:
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
dev: true
/picocolors/1.0.0:
resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
/postcss/8.4.18:
resolution: {integrity: sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==}
engines: {node: ^10 || ^12 || >=14}
dependencies:
nanoid: 3.3.4
picocolors: 1.0.0
source-map-js: 1.0.2
/resolve/1.22.1:
resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==}
hasBin: true
dependencies:
is-core-module: 2.11.0
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
dev: true
/rollup/2.77.3:
resolution: {integrity: sha512-/qxNTG7FbmefJWoeeYJFbHehJ2HNWnjkAFRKzWN/45eNBBF/r8lo992CwcJXEzyVxs5FmfId+vTSTQDb+bxA+g==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/source-map-js/1.0.2:
resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
engines: {node: '>=0.10.0'}
/source-map/0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
/sourcemap-codec/1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
/supports-preserve-symlinks-flag/1.0.0:
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
engines: {node: '>= 0.4'}
dev: true
/to-fast-properties/2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
/vite/2.9.15:
resolution: {integrity: sha512-fzMt2jK4vQ3yK56te3Kqpkaeq9DkcZfBbzHwYpobasvgYmP2SoAr6Aic05CsB4CzCZbsDv4sujX3pkEGhLabVQ==}
engines: {node: '>=12.2.0'}
hasBin: true
peerDependencies:
less: '*'
sass: '*'
stylus: '*'
peerDependenciesMeta:
less:
optional: true
sass:
optional: true
stylus:
optional: true
dependencies:
esbuild: 0.14.54
postcss: 8.4.18
resolve: 1.22.1
rollup: 2.77.3
optionalDependencies:
fsevents: 2.3.2
dev: true
/vue/3.2.44:
resolution: {integrity: sha512-nyNtFDh+0TpRgYCUVfPD1mJ9PpIsCPXaOF4DeGNIT5vQ4X23ykflGq3Sy2P+tEt1/pQZxZnAysuRKwyhNj+Cjw==}
dependencies:
'@vue/compiler-dom': 3.2.44
'@vue/compiler-sfc': 3.2.44
'@vue/runtime-dom': 3.2.44
'@vue/server-renderer': 3.2.44_vue@3.2.44
'@vue/shared': 3.2.44
dev: false

View File

@@ -1,395 +0,0 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@babel/helper-validator-identifier@^7.14.5":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8"
integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==
"@babel/parser@^7.12.0", "@babel/parser@^7.13.9":
version "7.14.7"
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595"
integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==
"@babel/types@^7.12.0", "@babel/types@^7.13.0":
version "7.14.5"
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff"
integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==
dependencies:
"@babel/helper-validator-identifier" "^7.14.5"
to-fast-properties "^2.0.0"
"@types/estree@^0.0.48":
version "0.0.48"
resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74"
integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==
"@vitejs/plugin-vue@^1.2.4":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-1.2.4.tgz#a7aa6e6a31c556a8b781de730316deeecf7f56f2"
integrity sha512-D/3H9plevPQGgQGwmV6eecvOnooLTecPR63HPffVVWPEhbfvmtYLWgznzs456NBb2DItiRTCIa1yWxvGqC+I8A==
"@vue/compiler-core@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.1.4.tgz#a3a74cf52e8f01af386d364ac8a099cbeb260424"
integrity sha512-TnUz+1z0y74O/A4YKAbzsdUfamyHV73MihrEfvettWpm9bQKVoZd1nEmR1cGN9LsXWlwAvVQBetBlWdOjmQO5Q==
dependencies:
"@babel/parser" "^7.12.0"
"@babel/types" "^7.12.0"
"@vue/shared" "3.1.4"
estree-walker "^2.0.1"
source-map "^0.6.1"
"@vue/compiler-dom@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.1.4.tgz#bf3795e1449f32c965d38c4ea6d808ca05fdfc97"
integrity sha512-3tG2ScHkghhUBuFwl9KgyZhrS8CPFZsO7hUDekJgIp5b1OMkROr4AvxHu6rRMl4WkyvYkvidFNBS2VfOnwa6Kw==
dependencies:
"@vue/compiler-core" "3.1.4"
"@vue/shared" "3.1.4"
"@vue/compiler-sfc@^3.0.5":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.1.4.tgz#93e87db950e0711339c18baa7bb7d28d3522d7bc"
integrity sha512-4KDQg60Khy3SgnF+V/TB2NZqzmM4TyGRmzsxqG1SebGdMSecCweFDSlI/F1vDYk6dKiCHgmpoT9A1sLxswkJ0A==
dependencies:
"@babel/parser" "^7.13.9"
"@babel/types" "^7.13.0"
"@types/estree" "^0.0.48"
"@vue/compiler-core" "3.1.4"
"@vue/compiler-dom" "3.1.4"
"@vue/compiler-ssr" "3.1.4"
"@vue/shared" "3.1.4"
consolidate "^0.16.0"
estree-walker "^2.0.1"
hash-sum "^2.0.0"
lru-cache "^5.1.1"
magic-string "^0.25.7"
merge-source-map "^1.1.0"
postcss "^8.1.10"
postcss-modules "^4.0.0"
postcss-selector-parser "^6.0.4"
source-map "^0.6.1"
"@vue/compiler-ssr@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.1.4.tgz#7f6eaac5b1851fc15c82c083e8179eb1216b303c"
integrity sha512-Box8fCuCFPp0FuimIswjDkjwiSDCBkHvt/xVALyFkYCiIMWv2eR53fIjmlsnEHhcBuZ+VgRC+UanCTcKvSA1gA==
dependencies:
"@vue/compiler-dom" "3.1.4"
"@vue/shared" "3.1.4"
"@vue/reactivity@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.1.4.tgz#d926ed46fb0d48582ccf8665b062d37b5d35ba99"
integrity sha512-YDlgii2Cr9yAoKVZFzgY4j0mYlVT73986X3e5SPp6ifqckSEoFSUWXZK2Tb53TB/9qO29BEEbspnKD3m3wAwkA==
dependencies:
"@vue/shared" "3.1.4"
"@vue/runtime-core@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.1.4.tgz#3e30ae6ecbfff06df5adc9414491143191a375ba"
integrity sha512-qmVJgJuFxfT7M4qHQ4M6KqhKC66fjuswK+aBivE8dWiZ2rtIGl9gtJGpwqwjQEcKEBTOfvvrtrwBncYArJUO8Q==
dependencies:
"@vue/reactivity" "3.1.4"
"@vue/shared" "3.1.4"
"@vue/runtime-dom@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.1.4.tgz#acfeee200d5c45fc2cbdf7058cda1498f9b45849"
integrity sha512-vbmwgTxku1BU87Kw7r29adv0OIrDXCW0PslOPQT0O/9R5SqcXgS94Yj6zsztDjvghegenwIAPNLlDR1Auh5s+w==
dependencies:
"@vue/runtime-core" "3.1.4"
"@vue/shared" "3.1.4"
csstype "^2.6.8"
"@vue/shared@3.1.4":
version "3.1.4"
resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.1.4.tgz#c14c461ec42ea2c1556e86f60b0354341d91adc3"
integrity sha512-6O45kZAmkLvzGLToBxEz4lR2W6kXohCtebV2UxjH9GXjd8X9AhEn68FN9eNanFtWNzvgw1hqd6HkPRVQalqf7Q==
big.js@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==
bluebird@^3.7.2:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==
colorette@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94"
integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==
consolidate@^0.16.0:
version "0.16.0"
resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.16.0.tgz#a11864768930f2f19431660a65906668f5fbdc16"
integrity sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==
dependencies:
bluebird "^3.7.2"
cssesc@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee"
integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==
csstype@^2.6.8:
version "2.6.17"
resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.17.tgz#4cf30eb87e1d1a005d8b6510f95292413f6a1c0e"
integrity sha512-u1wmTI1jJGzCJzWndZo8mk4wnPTZd1eOIYTYvuEyOQGfmDl3TrabCCfKnOC86FZwW/9djqTl933UF/cS425i9A==
emojis-list@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78"
integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==
esbuild@^0.12.8:
version "0.12.15"
resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.12.15.tgz#9d99cf39aeb2188265c5983e983e236829f08af0"
integrity sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==
estree-walker@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
fsevents@~2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
generic-names@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-2.0.1.tgz#f8a378ead2ccaa7a34f0317b05554832ae41b872"
integrity sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==
dependencies:
loader-utils "^1.1.0"
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
hash-sum@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-2.0.0.tgz#81d01bb5de8ea4a214ad5d6ead1b523460b0b45a"
integrity sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==
icss-replace-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
icss-utils@^5.0.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==
is-core-module@^2.2.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
dependencies:
has "^1.0.3"
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
dependencies:
minimist "^1.2.0"
loader-utils@^1.1.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
dependencies:
big.js "^5.2.2"
emojis-list "^3.0.0"
json5 "^1.0.1"
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
lru-cache@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
dependencies:
yallist "^3.0.2"
magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==
dependencies:
sourcemap-codec "^1.4.4"
merge-source-map@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646"
integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==
dependencies:
source-map "^0.6.1"
minimist@^1.2.0:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
nanoid@^3.1.23:
version "3.1.23"
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.23.tgz#f744086ce7c2bc47ee0a8472574d5c78e4183a81"
integrity sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==
path-parse@^1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
postcss-modules-extract-imports@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d"
integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==
postcss-modules-local-by-default@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c"
integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==
dependencies:
icss-utils "^5.0.0"
postcss-selector-parser "^6.0.2"
postcss-value-parser "^4.1.0"
postcss-modules-scope@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06"
integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==
dependencies:
postcss-selector-parser "^6.0.4"
postcss-modules-values@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c"
integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==
dependencies:
icss-utils "^5.0.0"
postcss-modules@^4.0.0:
version "4.1.3"
resolved "https://registry.yarnpkg.com/postcss-modules/-/postcss-modules-4.1.3.tgz#c4c4c41d98d97d24c70e88dacfc97af5a4b3e21d"
integrity sha512-dBT39hrXe4OAVYJe/2ZuIZ9BzYhOe7t+IhedYeQ2OxKwDpAGlkEN/fR0fGnrbx4BvgbMReRX4hCubYK9cE/pJQ==
dependencies:
generic-names "^2.0.1"
icss-replace-symbols "^1.1.0"
lodash.camelcase "^4.3.0"
postcss-modules-extract-imports "^3.0.0"
postcss-modules-local-by-default "^4.0.0"
postcss-modules-scope "^3.0.0"
postcss-modules-values "^4.0.0"
string-hash "^1.1.1"
postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4:
version "6.0.6"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz#2c5bba8174ac2f6981ab631a42ab0ee54af332ea"
integrity sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==
dependencies:
cssesc "^3.0.0"
util-deprecate "^1.0.2"
postcss-value-parser@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb"
integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==
postcss@^8.1.10, postcss@^8.3.5:
version "8.3.5"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.3.5.tgz#982216b113412bc20a86289e91eb994952a5b709"
integrity sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==
dependencies:
colorette "^1.2.2"
nanoid "^3.1.23"
source-map-js "^0.6.2"
resolve@^1.20.0:
version "1.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
dependencies:
is-core-module "^2.2.0"
path-parse "^1.0.6"
rollup@^2.38.5:
version "2.52.7"
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.52.7.tgz#e15a8bf734f6e4c204b7cdf33521151310250cb2"
integrity sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==
optionalDependencies:
fsevents "~2.3.2"
source-map-js@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e"
integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==
source-map@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
sourcemap-codec@^1.4.4:
version "1.4.8"
resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
string-hash@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b"
integrity sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=
util-deprecate@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
vite@^2.4.0:
version "2.4.1"
resolved "https://registry.yarnpkg.com/vite/-/vite-2.4.1.tgz#2e48b8dbfc69e4edbf7f4d1c0798d621585cb8da"
integrity sha512-4BpKRis9uxIqPfIEcJ18LTBsamqnDFxTx45CXwagHjNltHa6PFEvf8Pe6OpgIHb0OyWT30OXOSSQvdOaX4OBiQ==
dependencies:
esbuild "^0.12.8"
postcss "^8.3.5"
resolve "^1.20.0"
rollup "^2.38.5"
optionalDependencies:
fsevents "~2.3.2"
vue@^3.0.5:
version "3.1.4"
resolved "https://registry.yarnpkg.com/vue/-/vue-3.1.4.tgz#120d6818c51eaa35d0879e5bc1cff60135bc69fd"
integrity sha512-p8dcdyeCgmaAiZsbLyDkmOLcFGZb/jEVdCLW65V68LRCXTNX8jKsgah2F7OZ/v/Ai2V0Fb1MNO0vz/GFqsPVMA==
dependencies:
"@vue/compiler-dom" "3.1.4"
"@vue/runtime-dom" "3.1.4"
"@vue/shared" "3.1.4"
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==

View File

@@ -1,6 +1,6 @@
{ {
"name": "@vercel/build-utils", "name": "@vercel/build-utils",
"version": "5.5.8", "version": "5.5.9",
"license": "MIT", "license": "MIT",
"main": "./dist/index.js", "main": "./dist/index.js",
"types": "./dist/index.d.js", "types": "./dist/index.d.js",

View File

@@ -5,6 +5,7 @@ import debug from '../debug';
function getOptions() { function getOptions() {
const options = [ const options = [
{ major: 18, range: '18.x', runtime: 'nodejs18.x' },
{ major: 16, range: '16.x', runtime: 'nodejs16.x' }, { major: 16, range: '16.x', runtime: 'nodejs16.x' },
{ major: 14, range: '14.x', runtime: 'nodejs14.x' }, { major: 14, range: '14.x', runtime: 'nodejs14.x' },
{ {
@@ -26,12 +27,6 @@ function getOptions() {
discontinueDate: new Date('2020-01-06'), discontinueDate: new Date('2020-01-06'),
}, },
] as const; ] as const;
if (process.env.VERCEL_ALLOW_NODEJS18 === '1') {
return [
{ major: 18, range: '18.x', runtime: 'nodejs18.x' },
...options,
] as const;
}
return options; return options;
} }

View File

@@ -7,5 +7,8 @@
"dependencies": { "dependencies": {
"swr": "1.3.0", "swr": "1.3.0",
"react": "16.8.0" "react": "16.8.0"
},
"engines": {
"node": "16.x"
} }
} }

View File

@@ -19,5 +19,8 @@
"dependencies": { "dependencies": {
"camel-case": "^4.1.2", "camel-case": "^4.1.2",
"sirv-cli": "^0.4.4" "sirv-cli": "^0.4.4"
},
"engines": {
"node": "16.x"
} }
} }

View File

@@ -226,7 +226,7 @@ it('should only match supported node versions, otherwise throw an error', async
); );
const autoMessage = const autoMessage =
'Please set Node.js Version to 16.x in your Project Settings to use Node.js 16.'; 'Please set Node.js Version to 18.x in your Project Settings to use Node.js 18.';
await expectBuilderError( await expectBuilderError(
getSupportedNodeVersion('8.11.x', true), getSupportedNodeVersion('8.11.x', true),
autoMessage autoMessage
@@ -246,7 +246,7 @@ it('should only match supported node versions, otherwise throw an error', async
); );
const foundMessage = const foundMessage =
'Please set "engines": { "node": "16.x" } in your `package.json` file to use Node.js 16.'; 'Please set "engines": { "node": "18.x" } in your `package.json` file to use Node.js 18.';
await expectBuilderError( await expectBuilderError(
getSupportedNodeVersion('8.11.x', false), getSupportedNodeVersion('8.11.x', false),
foundMessage foundMessage
@@ -267,8 +267,8 @@ it('should match all semver ranges', async () => {
// See https://docs.npmjs.com/files/package.json#engines // See https://docs.npmjs.com/files/package.json#engines
expect(await getSupportedNodeVersion('14.0.0')).toHaveProperty('major', 14); expect(await getSupportedNodeVersion('14.0.0')).toHaveProperty('major', 14);
expect(await getSupportedNodeVersion('14.x')).toHaveProperty('major', 14); expect(await getSupportedNodeVersion('14.x')).toHaveProperty('major', 14);
expect(await getSupportedNodeVersion('>=10')).toHaveProperty('major', 16); expect(await getSupportedNodeVersion('>=10')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('>=10.3.0')).toHaveProperty('major', 16); expect(await getSupportedNodeVersion('>=10.3.0')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('16.5.0 - 16.9.0')).toHaveProperty( expect(await getSupportedNodeVersion('16.5.0 - 16.9.0')).toHaveProperty(
'major', 'major',
16 16
@@ -285,21 +285,12 @@ it('should match all semver ranges', async () => {
); );
}); });
it('should only allow nodejs18.x when env var is set', async () => { it('should allow nodejs18.x', async () => {
try { expect(getLatestNodeVersion()).toHaveProperty('major', 18);
expect(getLatestNodeVersion()).toHaveProperty('major', 16); expect(await getSupportedNodeVersion('18.x')).toHaveProperty('major', 18);
expect(getSupportedNodeVersion('18.x')).rejects.toThrow(); expect(await getSupportedNodeVersion('18')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('18.1.0')).toHaveProperty('major', 18);
process.env.VERCEL_ALLOW_NODEJS18 = '1'; expect(await getSupportedNodeVersion('>=16')).toHaveProperty('major', 18);
expect(getLatestNodeVersion()).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('18.x')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('18')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('18.1.0')).toHaveProperty('major', 18);
expect(await getSupportedNodeVersion('>=16')).toHaveProperty('major', 18);
} finally {
delete process.env.VERCEL_ALLOW_NODEJS18;
}
}); });
it('should ignore node version in vercel dev getNodeVersion()', async () => { it('should ignore node version in vercel dev getNodeVersion()', async () => {
@@ -356,7 +347,7 @@ it('should warn when package.json engines is greater than', async () => {
{}, {},
{} {}
) )
).toHaveProperty('range', '16.x'); ).toHaveProperty('range', '18.x');
expect(warningMessages).toStrictEqual([ expect(warningMessages).toStrictEqual([
'Warning: Detected "engines": { "node": ">=16" } in your `package.json` that will automatically upgrade when a new major Node.js Version is released. Learn More: http://vercel.link/node-version', 'Warning: Detected "engines": { "node": ">=16" } in your `package.json` that will automatically upgrade when a new major Node.js Version is released. Learn More: http://vercel.link/node-version',
]); ]);
@@ -395,7 +386,7 @@ it('should not warn when package.json engines matches project setting from confi
}); });
it('should get latest node version', async () => { it('should get latest node version', async () => {
expect(getLatestNodeVersion()).toHaveProperty('major', 16); expect(getLatestNodeVersion()).toHaveProperty('major', 18);
}); });
it('should throw for discontinued versions', async () => { it('should throw for discontinued versions', async () => {
@@ -441,10 +432,10 @@ it('should warn for deprecated versions, soon to be discontinued', async () => {
12 12
); );
expect(warningMessages).toStrictEqual([ expect(warningMessages).toStrictEqual([
'Error: Node.js version 10.x has reached End-of-Life. Deployments created on or after 2021-04-20 will fail to build. Please set "engines": { "node": "16.x" } in your `package.json` file to use Node.js 16.', 'Error: Node.js version 10.x has reached End-of-Life. Deployments created on or after 2021-04-20 will fail to build. Please set "engines": { "node": "18.x" } in your `package.json` file to use Node.js 18.',
'Error: Node.js version 10.x has reached End-of-Life. Deployments created on or after 2021-04-20 will fail to build. Please set Node.js Version to 16.x in your Project Settings to use Node.js 16.', 'Error: Node.js version 10.x has reached End-of-Life. Deployments created on or after 2021-04-20 will fail to build. Please set Node.js Version to 18.x in your Project Settings to use Node.js 18.',
'Error: Node.js version 12.x has reached End-of-Life. Deployments created on or after 2022-10-03 will fail to build. Please set "engines": { "node": "16.x" } in your `package.json` file to use Node.js 16.', 'Error: Node.js version 12.x has reached End-of-Life. Deployments created on or after 2022-10-03 will fail to build. Please set "engines": { "node": "18.x" } in your `package.json` file to use Node.js 18.',
'Error: Node.js version 12.x has reached End-of-Life. Deployments created on or after 2022-10-03 will fail to build. Please set Node.js Version to 16.x in your Project Settings to use Node.js 16.', 'Error: Node.js version 12.x has reached End-of-Life. Deployments created on or after 2022-10-03 will fail to build. Please set Node.js Version to 18.x in your Project Settings to use Node.js 18.',
]); ]);
global.Date.now = realDateNow; global.Date.now = realDateNow;

View File

@@ -1,6 +1,6 @@
{ {
"name": "vercel", "name": "vercel",
"version": "28.5.2", "version": "28.5.6",
"preferGlobal": true, "preferGlobal": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"description": "The command-line interface for Vercel", "description": "The command-line interface for Vercel",
@@ -12,7 +12,7 @@
}, },
"scripts": { "scripts": {
"preinstall": "node ./scripts/preinstall.js", "preinstall": "node ./scripts/preinstall.js",
"test": "jest --env node --verbose --bail --forceExit", "test": "jest --env node --verbose --bail",
"test-unit": "yarn test test/unit/", "test-unit": "yarn test test/unit/",
"test-integration-cli": "rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose", "test-integration-cli": "rimraf test/fixtures/integration && ava test/integration.js --serial --fail-fast --verbose",
"test-integration-dev": "yarn test test/dev/", "test-integration-dev": "yarn test test/dev/",
@@ -41,16 +41,16 @@
"node": ">= 14" "node": ">= 14"
}, },
"dependencies": { "dependencies": {
"@vercel/build-utils": "5.5.8", "@vercel/build-utils": "5.5.9",
"@vercel/go": "2.2.16", "@vercel/go": "2.2.17",
"@vercel/hydrogen": "0.0.30", "@vercel/hydrogen": "0.0.31",
"@vercel/next": "3.2.12", "@vercel/next": "3.2.13",
"@vercel/node": "2.6.3", "@vercel/node": "2.6.4",
"@vercel/python": "3.1.26", "@vercel/python": "3.1.27",
"@vercel/redwood": "1.0.36", "@vercel/redwood": "1.0.37",
"@vercel/remix": "1.0.36", "@vercel/remix": "1.0.37",
"@vercel/ruby": "1.3.42", "@vercel/ruby": "1.3.43",
"@vercel/static-build": "1.0.37", "@vercel/static-build": "1.0.39",
"json5": "2.2.1", "json5": "2.2.1",
"update-notifier": "5.1.0" "update-notifier": "5.1.0"
}, },
@@ -96,10 +96,10 @@
"@types/which": "1.3.2", "@types/which": "1.3.2",
"@types/write-json-file": "2.2.1", "@types/write-json-file": "2.2.1",
"@types/yauzl-promise": "2.1.0", "@types/yauzl-promise": "2.1.0",
"@vercel/client": "12.2.18", "@vercel/client": "12.2.19",
"@vercel/error-utils": "1.0.3", "@vercel/error-utils": "1.0.3",
"@vercel/frameworks": "1.1.12", "@vercel/frameworks": "1.1.12",
"@vercel/fs-detectors": "3.5.1", "@vercel/fs-detectors": "3.5.2",
"@vercel/fun": "1.0.4", "@vercel/fun": "1.0.4",
"@vercel/ncc": "0.24.0", "@vercel/ncc": "0.24.0",
"@zeit/source-map-support": "0.6.2", "@zeit/source-map-support": "0.6.2",

View File

@@ -305,6 +305,8 @@ async function doBuild(
}; };
if ( if (
process.env.VERCEL_BUILD_MONOREPO_SUPPORT === '1' &&
pkg?.scripts?.['vercel-build'] === undefined &&
projectSettings.rootDirectory !== null && projectSettings.rootDirectory !== null &&
projectSettings.rootDirectory !== '.' projectSettings.rootDirectory !== '.'
) { ) {

View File

@@ -77,6 +77,9 @@ export default async function dev(
envValues, envValues,
}); });
// listen to SIGTERM for graceful shutdown
process.on('SIGTERM', () => devServer.stop());
// If there is no Development Command, we must delete the // If there is no Development Command, we must delete the
// v3 Build Output because it will incorrectly be detected by // v3 Build Output because it will incorrectly be detected by
// @vercel/static-build in BuildOutputV3.getBuildOutputDirectory() // @vercel/static-build in BuildOutputV3.getBuildOutputDirectory()

View File

@@ -39,7 +39,7 @@ export async function setMonorepoDefaultSettings(
) => { ) => {
if (projectSettings[command]) { if (projectSettings[command]) {
output.warn( output.warn(
`Cannot automatically assign ${command} as it is already set via project settings or configuarion overrides.` `Cannot automatically assign ${command} as it is already set via project settings or configuration overrides.`
); );
} else { } else {
projectSettings[command] = value; projectSettings[command] = value;
@@ -55,21 +55,40 @@ export async function setMonorepoDefaultSettings(
} }
if (monorepoManager === 'turbo') { if (monorepoManager === 'turbo') {
// No ENOENT handling required here since conditional wouldn't be `true` unless `turbo.json` was found. const [turboJSONBuf, packageJSONBuf] = await Promise.all([
const turboJSON = JSON5.parse( fs.readFile(join(cwd, 'turbo.json')).catch(() => null),
fs.readFileSync(join(cwd, 'turbo.json'), 'utf-8') fs.readFile(join(cwd, 'package.json')).catch(() => null),
); ]);
if (!turboJSON?.pipeline?.build) { let hasBuildPipeline = false;
if (turboJSONBuf !== null) {
const turboJSON = JSON5.parse(turboJSONBuf.toString('utf-8'));
if (turboJSON?.pipeline?.build) {
hasBuildPipeline = true;
}
} else if (packageJSONBuf !== null) {
const packageJSON = JSON.parse(packageJSONBuf.toString('utf-8'));
if (packageJSON?.turbo?.pipeline?.build) {
hasBuildPipeline = true;
}
}
if (!hasBuildPipeline) {
output.warn( output.warn(
'Missing required `build` pipeline in turbo.json. Skipping automatic setting assignment.' 'Missing required `build` pipeline in turbo.json or package.json Turbo configuration. Skipping automatic setting assignment.'
); );
return; return;
} }
setCommand( setCommand(
'buildCommand', 'buildCommand',
`cd ${relativeToRoot} && npx turbo run build --filter=${projectName}...` `cd ${relativeToRoot} && npx turbo run build --filter={./${relative(
cwd,
workPath
)}}...`
); );
setCommand( setCommand(
'installCommand', 'installCommand',
@@ -84,7 +103,7 @@ export async function setMonorepoDefaultSettings(
'Missing default `build` target in nx.json. Checking for project level Nx configuration...' 'Missing default `build` target in nx.json. Checking for project level Nx configuration...'
); );
const [projectJSONBuf, packageJsonBuf] = await Promise.all([ const [projectJSONBuf, packageJSONBuf] = await Promise.all([
fs.readFile(join(workPath, 'project.json')).catch(() => null), fs.readFile(join(workPath, 'project.json')).catch(() => null),
fs.readFile(join(workPath, 'package.json')).catch(() => null), fs.readFile(join(workPath, 'package.json')).catch(() => null),
]); ]);
@@ -99,8 +118,8 @@ export async function setMonorepoDefaultSettings(
} }
} }
if (packageJsonBuf) { if (packageJSONBuf) {
const packageJSON = JSON5.parse(packageJsonBuf.toString('utf-8')); const packageJSON = JSON5.parse(packageJSONBuf.toString('utf-8'));
if (packageJSON?.nx) { if (packageJSON?.nx) {
output.log('Found package.json Nx configuration.'); output.log('Found package.json Nx configuration.');
if (packageJSON.nx.targets?.build) { if (packageJSON.nx.targets?.build) {

View File

@@ -86,6 +86,7 @@ export function isDirty(directory: string, output: Output): Promise<boolean> {
{ cwd: directory }, { cwd: directory },
function (err, stdout, stderr) { function (err, stdout, stderr) {
let debugMessage = `Failed to determine if Git repo has been modified:`; let debugMessage = `Failed to determine if Git repo has been modified:`;
stderr = stderr && stderr.trim();
if (err || stderr) { if (err || stderr) {
if (err) debugMessage += `\n${err}`; if (err) debugMessage += `\n${err}`;
if (stderr) debugMessage += `\n${stderr.trim()}`; if (stderr) debugMessage += `\n${stderr.trim()}`;

View File

@@ -78,7 +78,7 @@ async function createBuildProcess(
}); });
match.buildProcess = buildProcess; match.buildProcess = buildProcess;
buildProcess.on('exit', (code, signal) => { buildProcess.on('close', (code, signal) => {
output.debug( output.debug(
`Build process for "${match.entrypoint}" exited with ${signal || code}` `Build process for "${match.entrypoint}" exited with ${signal || code}`
); );
@@ -191,10 +191,10 @@ export async function executeBuild(
reject(err); reject(err);
} }
function cleanup() { function cleanup() {
buildProcess!.removeListener('exit', onExit); buildProcess!.removeListener('close', onExit);
buildProcess!.removeListener('message', onMessage); buildProcess!.removeListener('message', onMessage);
} }
buildProcess!.on('exit', onExit); buildProcess!.on('close', onExit);
buildProcess!.on('message', onMessage); buildProcess!.on('message', onMessage);
}); });
} else { } else {

View File

@@ -1026,7 +1026,7 @@ export default class DevServer {
debug(`Killing builder dev server with PID ${pid}`); debug(`Killing builder dev server with PID ${pid}`);
this.devServerPids.delete(pid); this.devServerPids.delete(pid);
try { try {
process.kill(pid, 'SIGTERM'); await treeKill(pid);
debug(`Killed builder dev server with PID ${pid}`); debug(`Killed builder dev server with PID ${pid}`);
} catch (err) { } catch (err) {
debug(`Failed to kill builder dev server with PID ${pid}: ${err}`); debug(`Failed to kill builder dev server with PID ${pid}: ${err}`);
@@ -2279,6 +2279,10 @@ export default class DevServer {
p.on('exit', (code, signal) => { p.on('exit', (code, signal) => {
this.output.debug(`Dev command exited with "${signal || code}"`); this.output.debug(`Dev command exited with "${signal || code}"`);
});
p.on('close', (code, signal) => {
this.output.debug(`Dev command closed with "${signal || code}"`);
this.devProcessOrigin = undefined; this.devProcessOrigin = undefined;
}); });

View File

@@ -3,9 +3,9 @@
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"dependencies": { "dependencies": {
"react": "^16.8.6", "react": "18.2.0",
"react-dom": "^16.8.6", "react-dom": "18.2.0",
"react-scripts": "3.0.1" "react-scripts": "5.0.1"
}, },
"scripts": { "scripts": {
"start": "react-scripts start", "start": "react-scripts start",

File diff suppressed because it is too large Load Diff

View File

@@ -8,5 +8,8 @@
}, },
"dependencies": { "dependencies": {
"gridsome": "0.7.23" "gridsome": "0.7.23"
},
"engines": {
"node": "14.x"
} }
} }

View File

@@ -6,8 +6,8 @@
"build": "next build" "build": "next build"
}, },
"dependencies": { "dependencies": {
"next": "^9.0.0", "next": "13.0.4",
"react": "^16.7.0", "react": "18.2.0",
"react-dom": "^16.7.0" "react-dom": "18.2.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,8 +1,8 @@
{ {
"private": true, "private": true,
"dependencies": { "dependencies": {
"next": "9.5.3", "next": "13.0.4",
"react": "16.13.1", "react": "18.2.0",
"react-dom": "16.13.1" "react-dom": "18.2.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -6,8 +6,8 @@
"build": "next build" "build": "next build"
}, },
"dependencies": { "dependencies": {
"next": "^9.1.1", "next": "13.0.4",
"react": "^16.7.0", "react": "18.2.0",
"react-dom": "^16.7.0" "react-dom": "18.2.0"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -6,7 +6,7 @@
}, },
"dependencies": { "dependencies": {
"next": "latest", "next": "latest",
"react": "^18.2.0", "react": "latest",
"react-dom": "^18.2.0" "react-dom": "latest"
} }
} }

View File

@@ -1,2 +1,5 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/types/global" /> /// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@@ -7,13 +7,13 @@
"start": "next start" "start": "next start"
}, },
"dependencies": { "dependencies": {
"next": "^9.3.4", "next": "13.0.4",
"react": "^16.13.1", "react": "18.2.0",
"react-dom": "^16.13.1" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "14.0.9", "@types/node": "18.x",
"@types/react": "^16.9.32", "@types/react": "18.0.25",
"typescript": "^3.8.3" "typescript": "4.9.3"
} }
} }

View File

@@ -18,7 +18,8 @@
"paths": { "paths": {
"@components/*": ["components/*"], "@components/*": ["components/*"],
"@lib/*": ["lib/*"] "@lib/*": ["lib/*"]
} },
"incremental": true
}, },
"exclude": ["node_modules", "api"], "exclude": ["node_modules", "api"],
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"] "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"]

File diff suppressed because it is too large Load Diff

View File

@@ -1,2 +1,5 @@
/// <reference types="next" /> /// <reference types="next" />
/// <reference types="next/types/global" /> /// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View File

@@ -7,13 +7,13 @@
"start": "next start" "start": "next start"
}, },
"dependencies": { "dependencies": {
"next": "^9.3.4", "next": "13.0.4",
"react": "^16.13.1", "react": "18.2.0",
"react-dom": "^16.13.1" "react-dom": "18.2.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "14.0.9", "@types/node": "18.x",
"@types/react": "^16.9.32", "@types/react": "18.0.25",
"typescript": "^3.8.3" "typescript": "4.9.3"
} }
} }

File diff suppressed because it is too large Load Diff

View File

@@ -2,8 +2,6 @@
"name": "vc-dev-static-build-routing", "name": "vc-dev-static-build-routing",
"private": true, "private": true,
"scripts": { "scripts": {
"now-dev": "serve -l $PORT src",
"now-build": "rm -Rf public && cp -r src public",
"start": "serve public" "start": "serve public"
}, },
"dependencies": { "dependencies": {

View File

@@ -13,5 +13,7 @@
"use": "@vercel/node" "use": "@vercel/node"
} }
], ],
"buildCommand": "rm -Rf public && cp -r src public",
"devCommand": "serve -l $PORT src",
"routes": [{ "src": "^/api/date$", "dest": "api/date.js" }] "routes": [{ "src": "^/api/date$", "dest": "api/date.js" }]
} }

View File

@@ -50,7 +50,7 @@ test('[vercel dev] should support edge functions', async () => {
ENV_VAR_IN_EDGE: '1', ENV_VAR_IN_EDGE: '1',
}); });
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -77,7 +77,7 @@ test('[vercel dev] edge functions support WebAssembly files', async () => {
await expect(res.text()).resolves.toEqual(`${number} + 1 = ${result}`); await expect(res.text()).resolves.toEqual(`${number} + 1 = ${result}`);
} }
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -100,7 +100,7 @@ test('[vercel dev] throws an error when an edge function has no response', async
let res = await fetch(`http://localhost:${port}/api/edge-no-response`); let res = await fetch(`http://localhost:${port}/api/edge-no-response`);
validateResponseHeaders(res); validateResponseHeaders(res);
const { stdout, stderr } = await dev.kill('SIGTERM'); const { stdout, stderr } = await dev.kill();
expect(await res.status).toBe(500); expect(await res.status).toBe(500);
expect(await res.text()).toMatch('FUNCTION_INVOCATION_FAILED'); expect(await res.text()).toMatch('FUNCTION_INVOCATION_FAILED');
@@ -111,7 +111,7 @@ test('[vercel dev] throws an error when an edge function has no response', async
/Failed to complete request to \/api\/edge-no-response: Error: socket hang up/g /Failed to complete request to \/api\/edge-no-response: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -138,7 +138,7 @@ test('[vercel dev] should support edge functions returning intentional 500 respo
'responding with intentional 500 from user code' 'responding with intentional 500 from user code'
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -158,7 +158,7 @@ test('[vercel dev] should handle runtime errors thrown in edge functions', async
}); });
validateResponseHeaders(res); validateResponseHeaders(res);
const { stdout, stderr } = await dev.kill('SIGTERM'); const { stdout, stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -168,7 +168,7 @@ test('[vercel dev] should handle runtime errors thrown in edge functions', async
/Failed to complete request to \/api\/edge-error-runtime: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-runtime: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -188,7 +188,7 @@ test('[vercel dev] should handle config errors thrown in edge functions', async
}); });
validateResponseHeaders(res); validateResponseHeaders(res);
const { stderr } = await dev.kill('SIGTERM'); const { stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -200,7 +200,7 @@ test('[vercel dev] should handle config errors thrown in edge functions', async
/Failed to complete request to \/api\/edge-error-config: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-config: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -220,7 +220,7 @@ test('[vercel dev] should handle startup errors thrown in edge functions', async
}); });
validateResponseHeaders(res); validateResponseHeaders(res);
const { stderr } = await dev.kill('SIGTERM'); const { stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -231,7 +231,7 @@ test('[vercel dev] should handle startup errors thrown in edge functions', async
/Failed to complete request to \/api\/edge-error-startup: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-startup: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -251,7 +251,7 @@ test('[vercel dev] should handle syntax errors thrown in edge functions', async
}); });
validateResponseHeaders(res); validateResponseHeaders(res);
const { stderr } = await dev.kill('SIGTERM'); const { stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -262,7 +262,7 @@ test('[vercel dev] should handle syntax errors thrown in edge functions', async
/Failed to complete request to \/api\/edge-error-syntax: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-syntax: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -285,7 +285,7 @@ test('[vercel dev] should handle import errors thrown in edge functions', async
); );
validateResponseHeaders(res); validateResponseHeaders(res);
const { stderr } = await dev.kill('SIGTERM'); const { stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -297,7 +297,7 @@ test('[vercel dev] should handle import errors thrown in edge functions', async
/Failed to complete request to \/api\/edge-error-unknown-import: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-unknown-import: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -320,7 +320,7 @@ test('[vercel dev] should handle missing handler errors thrown in edge functions
); );
validateResponseHeaders(res); validateResponseHeaders(res);
const { stdout, stderr } = await dev.kill('SIGTERM'); const { stdout, stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -332,7 +332,7 @@ test('[vercel dev] should handle missing handler errors thrown in edge functions
/Failed to complete request to \/api\/edge-error-no-handler: Error: socket hang up/g /Failed to complete request to \/api\/edge-error-no-handler: Error: socket hang up/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -352,7 +352,7 @@ test('[vercel dev] should handle invalid middleware config', async () => {
}); });
validateResponseHeaders(res); validateResponseHeaders(res);
const { stderr } = await dev.kill('SIGTERM'); const { stderr } = await dev.kill();
expect(await res.text()).toMatch( expect(await res.text()).toMatch(
/<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g /<strong>500<\/strong>: INTERNAL_SERVER_ERROR/g
@@ -361,7 +361,7 @@ test('[vercel dev] should handle invalid middleware config', async () => {
/Middleware's `config.matcher` .+ Received: not-a-valid-matcher/g /Middleware's `config.matcher` .+ Received: not-a-valid-matcher/g
); );
} finally { } finally {
await dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -394,7 +394,7 @@ test('[vercel dev] should support request body', async () => {
body: JSON.stringify(body), body: JSON.stringify(body),
}); });
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -414,7 +414,7 @@ test('[vercel dev] should maintain query when invoking serverless function', asy
expect(parsed.query['url-param']).toEqual('a'); expect(parsed.query['url-param']).toEqual('a');
expect(parsed.query['route-param']).toEqual('b'); expect(parsed.query['route-param']).toEqual('b');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -445,7 +445,7 @@ test('[vercel dev] should maintain query when proxy passing', async () => {
expect(parsed.query['route-param']).toEqual('b'); expect(parsed.query['route-param']).toEqual('b');
} finally { } finally {
dest.close(); dest.close();
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -475,7 +475,7 @@ test('[vercel dev] should maintain query when dev server defines routes', async
expect(query['url-param']).toEqual('a'); expect(query['url-param']).toEqual('a');
expect(query['route-param']).toEqual('b'); expect(query['route-param']).toEqual('b');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -491,7 +491,7 @@ test('[vercel dev] should allow `cache-control` to be overwritten', async () =>
); );
expect(res.headers.get('cache-control')).toEqual('immutable'); expect(res.headers.get('cache-control')).toEqual('immutable');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -508,7 +508,7 @@ test('[vercel dev] should send `etag` header for static files', async () => {
const body = await res.text(); const body = await res.text();
expect(body.trim()).toEqual('hi'); expect(body.trim()).toEqual('hi');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -542,7 +542,7 @@ test('[vercel dev] should frontend dev server and routes', async () => {
body = await res.text(); body = await res.text();
expect(body).toEqual('hello and welcome'); expect(body).toEqual('hello and welcome');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -558,7 +558,7 @@ test('[vercel dev] should support `@vercel/static` routing', async () => {
const body = await res.text(); const body = await res.text();
expect(body.trim()).toEqual('<body>Hello!</body>'); expect(body.trim()).toEqual('<body>Hello!</body>');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -574,7 +574,7 @@ test('[vercel dev] should support `@vercel/static-build` routing', async () => {
const body = await res.text(); const body = await res.text();
expect(body.startsWith('The current date:')).toBeTruthy(); expect(body.startsWith('The current date:')).toBeTruthy();
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -607,7 +607,7 @@ test('[vercel dev] should support directory listing', async () => {
res = await fetch(`http://localhost:${port}/does-not-exist`); res = await fetch(`http://localhost:${port}/does-not-exist`);
expect(res.status).toEqual(404); expect(res.status).toEqual(404);
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -651,7 +651,7 @@ test('[vercel dev] should respond with 404 listing with Accept header support',
); );
expect(body).toEqual('The page could not be found.\n\nNOT_FOUND\n'); expect(body).toEqual('The page could not be found.\n\nNOT_FOUND\n');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -670,7 +670,7 @@ test('[vercel dev] should support `public` directory with zero config', async ()
body = await res.text(); body = await res.text();
expect(body.startsWith('<h1>hello world</h1>')).toBeTruthy(); expect(body.startsWith('<h1>hello world</h1>')).toBeTruthy();
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -689,7 +689,7 @@ test('[vercel dev] should support static files with zero config', async () => {
body = await res.text(); body = await res.text();
expect(body.startsWith('<h1>goodbye world</h1>')).toBeTruthy(); expect(body.startsWith('<h1>goodbye world</h1>')).toBeTruthy();
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -718,7 +718,7 @@ test('[vercel dev] should support custom 404 routes', async () => {
body = await res.text(); body = await res.text();
expect(body).toEqual('The page could not be found.\n\nNOT_FOUND\n'); expect(body).toEqual('The page could not be found.\n\nNOT_FOUND\n');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -762,7 +762,7 @@ test('[vercel dev] `vercel.json` should be invalidated if deleted', async () =>
expect(body.FOO).toBe(undefined); expect(body.FOO).toBe(undefined);
} }
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
await fs.writeJSON(configPath, originalConfig); await fs.writeJSON(configPath, originalConfig);
} }
}); });
@@ -862,7 +862,7 @@ test('[vercel dev] reflects changes to config and env without restart', async ()
expect(body.query.foo).toBe('boo'); expect(body.query.foo).toBe('boo');
} }
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
await fs.writeJSON(configPath, originalConfig); await fs.writeJSON(configPath, originalConfig);
} }
}); });
@@ -891,7 +891,7 @@ test('[vercel dev] `@vercel/node` TypeScript should be resolved by default', asy
const body = await res.text(); const body = await res.text();
expect(body).toBe('world'); expect(body).toBe('world');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
await fs.remove(dir); await fs.remove(dir);
} }
}); });

View File

@@ -1,4 +1,3 @@
// eslint-disable-next-line
import { join } from 'path'; import { join } from 'path';
import ms from 'ms'; import ms from 'ms';
import fs, { mkdirp } from 'fs-extra'; import fs, { mkdirp } from 'fs-extra';
@@ -44,19 +43,16 @@ test('[vercel dev] validate mixed routes and rewrites', async () => {
expect(output.stderr).toMatch(/vercel\.link\/mix-routing-props/m); expect(output.stderr).toMatch(/vercel\.link\/mix-routing-props/m);
}); });
// Test seems unstable: It won't return sometimes.
test('[vercel dev] validate env var names', async () => { test('[vercel dev] validate env var names', async () => {
const directory = fixture('invalid-env-var-name'); const directory = fixture('invalid-env-var-name');
const { dev } = await testFixture(directory, { stdio: 'pipe' }); const { dev } = await testFixture(directory, { encoding: 'utf8' });
try { try {
let stderr = ''; let stderr = '';
dev.stderr.setEncoding('utf8');
await new Promise<void>((resolve, reject) => { await new Promise<void>((resolve, reject) => {
dev.stderr.on('data', (b: any) => { dev.stderr.on('data', (b: string) => {
stderr += b.toString(); stderr += b;
if ( if (
stderr.includes('Ignoring env var "1" because name is invalid') && stderr.includes('Ignoring env var "1" because name is invalid') &&
stderr.includes( stderr.includes(
@@ -71,10 +67,10 @@ test('[vercel dev] validate env var names', async () => {
}); });
dev.on('error', reject); dev.on('error', reject);
dev.on('exit', resolve); dev.on('close', resolve);
}); });
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });

View File

@@ -41,7 +41,7 @@ test('[vercel dev] 02-angular-node', async () => {
const body = await response.text(); const body = await response.text();
expect(body).toMatch(/Angular \+ Node.js API/m); expect(body).toMatch(/Angular \+ Node.js API/m);
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
await sleep(5000); await sleep(5000);

View File

@@ -109,7 +109,7 @@ test('[vercel dev] no build matches warning', async () => {
}); });
}); });
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -147,7 +147,7 @@ test('[vercel dev] render warning for empty cwd dir', async () => {
validateResponseHeaders(response); validateResponseHeaders(response);
expect(response.status).toBe(404); expect(response.status).toBe(404);
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -187,7 +187,7 @@ test('[vercel dev] do not rebuild for changes in the output directory', async ()
const text2 = await resp2.text(); const text2 = await resp2.text();
expect(text2.trim()).toBe('hello second'); expect(text2.trim()).toBe('hello second');
} finally { } finally {
dev.kill('SIGTERM'); await dev.kill();
} }
}); });
@@ -490,7 +490,7 @@ test('[vercel dev] Middleware rewrites with same origin', async () => {
expect(response.status).toBe(200); expect(response.status).toBe(200);
expect(await response.text()).toMatch(/<h1>Index<\/h1>/); expect(await response.text()).toMatch(/<h1>Index<\/h1>/);
} finally { } finally {
await dev.kill('SIGTERM'); await await dev.kill();
} }
}); });

View File

@@ -10,6 +10,7 @@ const { version: cliVersion } = require('../../package.json');
const { const {
fetchCachedToken, fetchCachedToken,
} = require('../../../../test/lib/deployment/now-deploy'); } = require('../../../../test/lib/deployment/now-deploy');
const { spawnSync } = require('child_process');
jest.setTimeout(6 * 60 * 1000); jest.setTimeout(6 * 60 * 1000);
@@ -33,7 +34,7 @@ function execa(...args) {
const child = _execa(...args); const child = _execa(...args);
processList.set(procId, child); processList.set(procId, child);
child.on('exit', () => processList.delete(procId)); child.on('close', () => processList.delete(procId));
return child; return child;
} }
@@ -212,7 +213,6 @@ async function testFixture(directory, opts = {}, args = []) {
], ],
{ {
reject: false, reject: false,
detached: true,
shell: true, shell: true,
stdio: 'pipe', stdio: 'pipe',
...opts, ...opts,
@@ -240,8 +240,22 @@ async function testFixture(directory, opts = {}, args = []) {
}); });
let printedOutput = false; let printedOutput = false;
let devTimer = null;
dev.on('exit', () => { dev.on('exit', code => {
devTimer = setTimeout(async () => {
const pids = Object.keys(await ps(dev.pid)).join(', ');
console.error(
`Test ${directory} exited with code ${code}, but has timed out closing stdio\n` +
(pids
? `Hanging child processes: ${pids}`
: `${dev.pid} already exited`)
);
}, 5000);
});
dev.on('close', () => {
clearTimeout(devTimer);
if (!printedOutput) { if (!printedOutput) {
printOutput(directory, stdout, stderr); printOutput(directory, stdout, stderr);
printedOutput = true; printedOutput = true;
@@ -260,8 +274,12 @@ async function testFixture(directory, opts = {}, args = []) {
}); });
dev._kill = dev.kill; dev._kill = dev.kill;
dev.kill = async (...args) => { dev.kill = async () => {
dev._kill(...args); // kill the entire process tree for the child as some tests will spawn
// child processes that either become defunct or assigned a new parent
// process
await nukeProcessTree(dev.pid);
await exitResolver; await exitResolver;
return { return {
stdout, stdout,
@@ -443,7 +461,7 @@ function testFixtureStdio(
stdout += data; stdout += data;
}); });
dev.stderr.on('data', data => { dev.stderr.on('data', async data => {
stderr += data; stderr += data;
if (stripAnsi(data).includes('Ready! Available at')) { if (stripAnsi(data).includes('Ready! Available at')) {
@@ -452,19 +470,19 @@ function testFixtureStdio(
} }
if (stderr.includes(`Requested port ${port} is already in use`)) { if (stderr.includes(`Requested port ${port} is already in use`)) {
dev.kill('SIGTERM'); await nukeProcessTree(dev.pid);
throw new Error( throw new Error(
`Failed for "${directory}" with port ${port} with stderr "${stderr}".` `Failed for "${directory}" with port ${port} with stderr "${stderr}".`
); );
} }
if (stderr.includes('Command failed')) { if (stderr.includes('Command failed')) {
dev.kill('SIGTERM'); await nukeProcessTree(dev.pid);
throw new Error(`Failed for "${directory}" with stderr "${stderr}".`); throw new Error(`Failed for "${directory}" with stderr "${stderr}".`);
} }
}); });
dev.on('exit', () => { dev.on('close', () => {
if (!printedOutput) { if (!printedOutput) {
printOutput(directory, stdout, stderr); printOutput(directory, stdout, stderr);
printedOutput = true; printedOutput = true;
@@ -490,12 +508,80 @@ function testFixtureStdio(
}; };
await fn(helperTestPath, port); await fn(helperTestPath, port);
} finally { } finally {
dev.kill('SIGTERM'); await nukeProcessTree(dev.pid);
await exitResolver; await exitResolver;
} }
}; };
} }
async function ps(parentPid, pids = {}) {
const cmd =
process.platform === 'darwin'
? ['pgrep', '-P', parentPid]
: ['ps', '-o', 'pid', '--no-headers', '--ppid', parentPid];
try {
const { stdout: buf } = spawnSync(cmd[0], cmd.slice(1), {
encoding: 'utf-8',
});
for (let pid of buf.match(/\d+/g)) {
pid = parseInt(pid);
const recurse = Object.prototype.hasOwnProperty.call(pids, pid);
pids[parentPid].push(pid);
pids[pid] = [];
if (recurse) {
await ps(pid, pids);
}
}
} catch (e) {
console.log(`Failed to get processes: ${e.toString()}`);
}
return pids;
}
async function nukePID(pid, signal = 'SIGTERM', retries = 10) {
if (retries === 0) {
console.log(`pid ${pid} won't die, giving up`);
return;
}
// kill the process
try {
process.kill(pid, signal);
} catch (e) {
// process does not exist
console.log(`pid ${pid} is not running`);
return;
}
await sleep(250);
try {
// check if killed
process.kill(pid, 0);
} catch (e) {
console.log(`pid ${pid} is not running`);
return;
}
console.log(`pid ${pid} didn't exit, sending SIGKILL (retries ${retries})`);
await nukePID(pid, 'SIGKILL', retries - 1);
}
async function nukeProcessTree(pid, signal) {
if (process.platform === 'win32') {
spawnSync('taskkill', ['/pid', pid, '/T', '/F'], { stdio: 'inherit' });
return;
}
const pids = await ps(pid, {
[pid]: [],
});
console.log(`Nuking pids: ${Object.keys(pids).join(', ')}`);
await Promise.all(Object.keys(pids).map(pid => nukePID(pid, signal)));
}
beforeEach(() => { beforeEach(() => {
port = ++port; port = ++port;
}); });
@@ -503,17 +589,15 @@ beforeEach(() => {
afterEach(async () => { afterEach(async () => {
await Promise.all( await Promise.all(
// eslint-disable-next-line @typescript-eslint/no-unused-vars // eslint-disable-next-line @typescript-eslint/no-unused-vars
Array.from(processList).map(([_procId, proc]) => { Array.from(processList).map(async ([_procId, proc]) => {
if (proc.killed === false) { console.log(`killing process ${proc.pid} "${proc.spawnargs.join(' ')}"`);
console.log(
`killing process ${proc.pid} "${proc.spawnargs.join(' ')}"`
);
try { try {
process.kill(proc.pid, 'SIGTERM'); await nukeProcessTree(proc.pid);
} catch (err) { } catch (err) {
// Was already killed // Was already killed
console.error(`Failed to kill process`, proc.pid, err); if (err.code !== 'ESRCH') {
console.error('Failed to kill process', proc.pid, err);
} }
} }
}) })

View File

@@ -0,0 +1,4 @@
{
"name": "lambda-with-128-memory",
"private": true
}

View File

@@ -1 +1,7 @@
{ "functions": { "api/**/*.js": { "memory": 128 } } } {
"functions": {
"api/**/*.js": {
"memory": 128
}
}
}

View File

@@ -1,7 +1,6 @@
const path = require('node:path'); const path = require('node:path');
const fs = require('node:fs'); const fs = require('node:fs');
const public = path.join(__dirname, 'public'); fs.rmSync('public', { recursive: true, force: true });
fs.rmSync(public, { recursive: true, force: true }); fs.mkdirSync('public');
fs.mkdirSync(public); fs.writeFileSync(path.join('public', 'index.txt'), `Hello, from build.js`);
fs.writeFileSync(path.join(public, 'index.txt'), `Hello, world`);

View File

@@ -1,7 +1,6 @@
const path = require('node:path'); const path = require('node:path');
const fs = require('node:fs'); const fs = require('node:fs');
const public = path.join(__dirname, 'public'); fs.rmSync('public', { recursive: true, force: true });
fs.rmSync(public, { recursive: true, force: true }); fs.mkdirSync('public');
fs.mkdirSync(public); fs.writeFileSync(path.join('public', 'index.txt'), `Hello, from build.js`);
fs.writeFileSync(path.join(public, 'index.txt'), `Hello, world`);

Some files were not shown because too many files have changed in this diff Show More