diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 64d91e0..6dbfebe 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -8,8 +8,7 @@ on: env: CI: true - # ASDF_DIR: /home/runner/.asdf - # FIREBASE_EMULATORS_PATH: ${{ github.workspace }}/emulator-cache + FIREBASE_EMULATORS_PATH: ${{ github.workspace }}/emulator-cache jobs: unit: @@ -22,65 +21,59 @@ jobs: - run: pnpm run test integration: - runs-on: ${{ matrix.os }} + runs-on: ubuntu-latest + needs: + - unit strategy: - fail-fast: false + fail-fast: true matrix: - dirs: - - examples/functions_single_site - - examples/nested_app_dirs/app - - examples/run_custom_build_dir - - examples/run_single_site - os: - - ubuntu-latest - - macos-latest - - windows-latest + params: + - { + test_dir: "functions_single_site", + validation_app_dir: "public/about/index.html", + validation_compute_dir: "functions/sveltekit/index.js", + nested_dir: "." + } + - { + test_dir: "nested_app_dirs", + validation_app_dir: "public/about/index.html", + validation_compute_dir: "functions/sveltekit/index.js", + nested_dir: "app" + } + - { + test_dir: "run_custom_build_dir", + validation_app_dir: "public/about/index.html", + validation_compute_dir: "custom-cloud-run-build-dir/index.js", + nested_dir: "." + } + - { + test_dir: "run_single_site", + validation_app_dir: "public/about/index.html", + validation_compute_dir: ".cloudrun/index.js", + nested_dir: "." + } + steps: + - uses: actions/checkout@v2 + - name: install asdf + uses: asdf-vm/actions/install@v1 + - name: Run Integration test for ${{ matrix.params.test_dir }} + run: | + bash ./tests/integration/integration-test.bash ${{ matrix.params.test_dir }} ${{ matrix.params.validation_app_dir }} ${{ matrix.params.validation_compute_dir }} ${{ matrix.params.nested_dir }} + + end-to-end: + runs-on: ubuntu-latest + needs: + - unit steps: - uses: actions/checkout@v2 - name: install asdf - if: matrix.os != 'windows-latest' uses: asdf-vm/actions/install@v1 - # START: Windows - - name: install Node.js on Windows - if: matrix.os == 'windows-latest' - uses: actions/setup-node@v2 + - name: Cache firebase emulators + uses: actions/cache@v2 with: - node-version: 14.16.1 - - name: install pnpm on Windows - if: matrix.os == 'windows-latest' - run: curl -f https://get.pnpm.io/v6.js | node - add --global pnpm@6 - # END: Windows - - name: Install svelte-adapter-firebase deps - run: pnpm install - - name: Install example app deps - run: pnpm install - working-directory: ${{ matrix.dirs }} - - name: Build example app - run: pnpm run build - working-directory: ${{ matrix.dirs }} - # end-to-end: - # runs-on: ubuntu-latest - # if: github.event_name == 'push' - # needs: [unit, integration] - # steps: - # - uses: actions/checkout@v2 - # - name: install asdf - # uses: asdf-vm/actions/install@v1 - # with: - # before_install: bash -c '${ASDF_DATA_DIR:=$HOME/.asdf}/plugins/nodejs/bin/import-release-team-keyring' - # - name: Cache firebase emulators - # uses: actions/cache@v2 - # with: - # path: ${{ env.FIREBASE_EMULATORS_PATH }} - # key: ${{ runner.os }}-firebase-emulators-${{ hashFiles('emulator-cache/**') }} - # - name: Install svelte-adapter-firebase deps - # run: pnpm install - # - name: Install example app deps - # run: pnpm install - # working-directory: examples/functions_single_site - # - name: Build example app - # run: pnpm run build - # working-directory: examples/functions_single_site - # - name: E2E tests with Firebase Emulator - # run: firebase emulators:exec --only hosting,functions - # working-directory: examples/functions_single_site '[ "$(curl localhost:5000/ -o /dev/stderr -w "%{http_code}")" -eq 200 ]' + path: ${{ env.FIREBASE_EMULATORS_PATH }} + key: ${{ runner.os }}-firebase-emulators-${{ hashFiles('emulator-cache/**') }} + continue-on-error: true + - name: Run end-to-end test script + run: | + bash ./tests/end-to-end/test.bash diff --git a/.tool-versions b/.tool-versions index 8f24d54..354bc5c 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1,4 +1,5 @@ -firebase 9.10.2 -nodejs 14.17.0 -pnpm 6.3.0 +firebase 9.16.5 +nodejs 14.17.5 +pnpm 6.13.0 +# use for Firebase Emulator java openjdk-14.0.2 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dfa48e6..adc839b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -27,3 +27,31 @@ pnpm i See the [GitHub Issues](https://github.com/jthegedus/svelte-adatper-firebase/issues) list for any open Issue, especially those marked as `help wanted` General improvements to any aspect of this adapter are welcome, just ensure major work is preceeded by a conversation in a [GitHub Issue](https://github.com/jthegedus/svelte-adatper-firebase/issues). + +## Tests + +As an integration point between [SvelteKit](https://kit.svelte.dev) and Firebase Hosting with Function rewrites the tests for this package are **important**. + +The test suite is broken into three categories: + +- **unit**: test internal functions to the CLI & entrypoint JS code +- **integration**: runs the `build` command of SvelteKit with demo apps that tests each path of the src/index.js CLI entrypoint. +- **end-to-end**: runs a shell script which: + - creates the SvelteKit Todo skeleton app (via `npm init@svelte `) + - adds Firebase configuration for Hosting & Cloud Functions + - adds `svelte-adapter-firebase` (relative add of the repo root, not from `npmjs.com`, to test current code changes before publishing) + - creates the Cloud Function which hosts the compiled SvelteKit app (this is the code in `functions/index.js` that the CLI would prompt the user to add) + - installs all dependencies for the Todo app & Cloud Functions + - builds the app + - starts the Firebase Emulator with Hosting & Functions + - makes `curl` requests to the Todo app + - GET to `/` + - GET to `/about` + - GET to `/todos` + - POST with formdata to `/todos` + +- Unit tests are run pre-push. They can be run manually with `pnpm run test` +- Integration tests are run in CI. +- End-to-end tests are run in CI. This script can be run locally with `./tests/end-to-end/test.bash` + +All test suites are run in CI pipelines on PR creation. diff --git a/README.md b/README.md index bbe4263..0bd0816 100644 --- a/README.md +++ b/README.md @@ -11,17 +11,28 @@ # svelte-adapter-firebase -[![GitHub Release](https://img.shields.io/github/release/jthegedus/svelte-adapter-firebase.svg?color=green)](https://github.com/jthegedus/svelte-adapter-firebase/releases) [![npm](https://img.shields.io/npm/v/svelte-adapter-firebase?color=green)](https://www.npmjs.com/package/svelte-adapter-firebase) [![Tests](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/test.yaml/badge.svg)](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/test.yaml) [![CodeQL](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/codeql-analysis.yaml/badge.svg)](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/codeql-analysis.yaml) - -[Firebase](https://firebase.google.com/) adapter for [SvelteKit](https://github.com/sveltejs/kit). - -Utilise the Firebase Hosting CDN with dynamic content served by SvelteKit on Cloud Functions or Cloud Run! - -:heavy_check_mark: SSR on [Cloud Run](https://firebase.google.com/docs/hosting/cloud-run)
-:heavy_check_mark: SSR on [Cloud Functions](https://firebase.google.com/docs/hosting/functions)
-:heavy_check_mark: Integrates with existing [JavaScript ~or TypeScript~ Cloud Functions](https://firebase.google.com/docs/functions/typescript)!
-:heavy_check_mark: Local production testing with [Firebase Emulator](https://firebase.google.com/docs/emulator-suite)
-:heavy_check_mark: [Multiple Hosting Sites](https://firebase.google.com/docs/hosting/multisites#add_additional_sites)
+[![GitHub Release](https://img.shields.io/github/release/jthegedus/svelte-adapter-firebase.svg?color=green)](https://github.com/jthegedus/svelte-adapter-firebase/releases) +[![npm](https://img.shields.io/npm/v/svelte-adapter-firebase?color=green)](https://www.npmjs.com/package/svelte-adapter-firebase) +[![Tests](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/test.yaml/badge.svg)](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/test.yaml) +[![CodeQL](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/codeql-analysis.yaml/badge.svg)](https://github.com/jthegedus/svelte-adapter-firebase/actions/workflows/codeql-analysis.yaml) + +[Firebase](https://firebase.google.com/) adapter for +[SvelteKit](https://github.com/sveltejs/kit). + +Utilise the Firebase Hosting CDN with dynamic content served by SvelteKit on +Cloud Functions or Cloud Run! + +:heavy_check_mark: SSR on +[Cloud Run](https://firebase.google.com/docs/hosting/cloud-run)
+:heavy_check_mark: SSR on +[Cloud Functions](https://firebase.google.com/docs/hosting/functions)
+:heavy_check_mark: Integrates with existing +[JavaScript ~or TypeScript~ Cloud +Functions](https://firebase.google.com/docs/functions/typescript)!
+:heavy_check_mark: Local production testing with +[Firebase Emulator](https://firebase.google.com/docs/emulator-suite)
+:heavy_check_mark: +[Multiple Hosting Sites](https://firebase.google.com/docs/hosting/multisites#add_additional_sites)
@@ -50,12 +61,15 @@ Utilise the Firebase Hosting CDN with dynamic content served by SvelteKit on Clo ## Setup -This adapter reads `firebase.json` to determine whether Cloud Functions or Cloud Run is being used and outputs the server pieces accordingly. Static assets are output to the configured dir in `firebase.json:hosting.public`. +This adapter reads `firebase.json` to determine whether Cloud Functions or Cloud +Run is being used and outputs the server pieces accordingly. Static assets are +output to the configured dir in `firebase.json:hosting.public`. In your standard SvelteKit project: - `npm install --save-dev svelte-adapter-firebase` -- add adapter to `svelte.config.js` (see options in [Adapter Configurations](#adapter-configurations)): +- add adapter to `svelte.config.js` (see options in + [Adapter Configurations](#adapter-configurations)): ```diff +import firebase from "svelte-adapter-firebase"; @@ -69,10 +83,12 @@ export default { }; ``` -- in the SvelteKit project's `package.json` remove Firebase Hosting public directory before `svelte-kit build` to work around https://github.com/sveltejs/kit/issues/587 +- in the SvelteKit project's `package.json` remove Firebase Hosting public + directory before `svelte-kit build` to work around + https://github.com/sveltejs/kit/issues/587 ```diff - "scripts": { +"scripts": { "dev": "svelte-kit dev", - "build": "svelte-kit build --verbose" + "build": "npx rimraf && svelte-kit build --verbose" @@ -85,24 +101,26 @@ export default { ### Beta Adapter Version Compatibility -SvelteKit is still in Beta and the Adapter API is in flux, this can result in the Adapter and SvelteKit becoming incompatible. Here is a compatibility table: - -| Adapter Version | SvelteKit Version | -| --------------- | ----------------- | -| WIP | `1.0.0-next.152` | -| `0.10.x` | `1.0.0-next.132` | -| `0.9.1` | `1.0.0-next.122` | -| `0.9.0` | `1.0.0-next.120` | -| `0.8.x` | `1.0.0-next.111` | -| `NA` | `1.0.0-next.110` | -| `NA` | `1.0.0-next.109` | -| `0.7.x` | `1.0.0-next.107` | -| `0.6.x` | `1.0.0-next.103` | -| `0.5.x` | `1.0.0-next.54` | -| `0.4.x` | `1.0.0-next.46` | -| `0.3.x` | `1.0.0-next.27` | - -**Note**: only the versions listed have been tested together, if others happen to work, it is just coincidence. This is beta software after all. +SvelteKit is still in Beta and the Adapter API is in flux, this can result in +the Adapter and SvelteKit becoming incompatible. Here is a compatibility table: + +| Adapter Version | SvelteKit Version | +| --------------- | -------------------- | +| `0.11.x` | `1.0.0-next.155` | +| `NA` | `1.0.0-next.152-154` | +| `0.10.x` | `1.0.0-next.132` | +| `0.9.1` | `1.0.0-next.122` | +| `0.9.0` | `1.0.0-next.120` | +| `0.8.x` | `1.0.0-next.111` | +| `NA` | `1.0.0-next.109-110` | +| `0.7.x` | `1.0.0-next.107` | +| `0.6.x` | `1.0.0-next.103` | +| `0.5.x` | `1.0.0-next.54` | +| `0.4.x` | `1.0.0-next.46` | +| `0.3.x` | `1.0.0-next.27` | + +**Note**: only the versions listed have been tested together, if others happen +to work, it is just coincidence. This is beta software after all. @@ -111,36 +129,51 @@ SvelteKit is still in Beta and the Adapter API is in flux, this can result in th Adapter options: - `hostingSite` - - required when `firebase.json:hosting` is an array (contains many site configurations) + - required when `firebase.json:hosting` is an array (contains many site + configurations) - default: no default value - `sourceRewriteMatch` - - used to lookup the rewrite config to determine whether to output SSR code for Cloud Functions or Cloud Run. See [Firebase Rewrite configuration docs](https://firebase.google.com/docs/hosting/full-config#rewrite-functions). + - used to lookup the rewrite config to determine whether to output SSR code + for Cloud Functions or Cloud Run. See + [Firebase Rewrite configuration docs](https://firebase.google.com/docs/hosting/full-config#rewrite-functions). - default: `**` - `firebaseJson` - - path to your `firebase.json` file, relative from where `svelte build` is called + - path to your `firebase.json` file, relative from where `svelte build` is + called - default: `./firebase.json` - `cloudRunBuildDir` - output dir of Cloud Run service, relative from the `firebaseJson` location - - default: `./.${run.serviceId}` where `run.serviceId` is pulled from the `firebase.json` rewrite rule + - default: `./.${run.serviceId}` where `run.serviceId` is pulled from the + `firebase.json` rewrite rule Adapter output: -- static assets (images, CSS, Client-side JavaScript) of your SvelteKit app output to the directory defined by `firebase.json:hosting.public` -- server assets (SSR JavaScript) output alongside your Cloud Functions defined by `firebase.json:functions.source` or the `cloudRunBuildDir` depending on which service you are targeting in `firebase.json:hosting:rewrites` +- static assets (images, CSS, Client-side JavaScript) of your SvelteKit app + output to the directory defined by `firebase.json:hosting.public` +- server assets (SSR JavaScript) output alongside your Cloud Functions defined + by `firebase.json:functions.source` or the `cloudRunBuildDir` depending on + which service you are targeting in `firebase.json:hosting:rewrites` ## Details -[Setup](#setup) outlines the steps most commonly used with a single SvelteKit app. Here we go into the details of each configuration and how it interacts with the `firebase.json` config. +[Setup](#setup) outlines the steps most commonly used with a single SvelteKit +app. Here we go into the details of each configuration and how it interacts with +the `firebase.json` config. The 3 step process is: -1. select Hosting config from `firebase.json`. If more than one site, match using `hostingSite` +1. select Hosting config from `firebase.json`. If more than one site, match + using `hostingSite` 2. output static assets to the directory in the `public` field -3. identify the rewrite rule for SSR to determine Cloud Function or Cloud Run output. The rewrite rule is determined by a lookup of the `rewrites.source` against `sourceRewriteMatch` +3. identify the rewrite rule for SSR to determine Cloud Function or Cloud Run + output. The rewrite rule is determined by a lookup of the `rewrites.source` + against `sourceRewriteMatch` ### `firebase.json` Configurations -Due to the relaxed rules of `firebase.json` we can have many valid configs. At a minimum, one or more Hosting sites is required with an associated Functions config if a Cloud Function rewrite is used. These are the combintations: +Due to the relaxed rules of `firebase.json` we can have many valid configs. At a +minimum, one or more Hosting sites is required with an associated Functions +config if a Cloud Function rewrite is used. These are the combintations:
single Hosting site with Cloud Function rewrite @@ -190,7 +223,8 @@ Due to the relaxed rules of `firebase.json` we can have many valid configs. At a } ``` -To correctly lookup the `blog` site, `hostingSite` will need to be set in `svelte.config.js`: +To correctly lookup the `blog` site, `hostingSite` will need to be set in +`svelte.config.js`: ```js import firebase from "svelte-adapter-firebase"; @@ -252,7 +286,8 @@ export default { } ``` -To correctly lookup the `blog` site, `hostingSite` will need to be set in `svelte.config.js`: +To correctly lookup the `blog` site, `hostingSite` will need to be set in +`svelte.config.js`: ```js import firebase from "svelte-adapter-firebase"; @@ -295,7 +330,8 @@ export default {
hostingSite -If `firebase.json:hosting` is an array of sites, then you must provide a `site` with `hostingSite` to correctly match against. For example: +If `firebase.json:hosting` is an array of sites, then you must provide a `site` +with `hostingSite` to correctly match against. For example: ```json // firebase.json @@ -338,7 +374,9 @@ export default {
sourceRewriteMatch -If the rewrite `source` pattern is not `**`, then `svelte.config.js` `sourceRewriteMatch` will need to be set to match your desired rewrite rule. For example: +If the rewrite `source` pattern is not `**`, then `svelte.config.js` +`sourceRewriteMatch` will need to be set to match your desired rewrite rule. For +example: ```json // firebase.json @@ -374,7 +412,8 @@ export default {
firebaseJson -If the `firebase.json` file is not in the directory you run `svelte build`, then you can set a relative path in `svelte.config.js`: +If the `firebase.json` file is not in the directory you run `svelte build`, then +you can set a relative path in `svelte.config.js`: ``` .gitignore @@ -408,7 +447,9 @@ export default {
cloudRunBuildDir -By default, a Node.js Cloud Run service is output to the directory named after the `run.serviceId` prefixed with a `.` relative to the dir in which `svelte build` was executed. IE: `./.${run.serviceId}`. So with this config: +By default, a Node.js Cloud Run service is output to the directory named after +the `run.serviceId` prefixed with a `.` relative to the dir in which +`svelte build` was executed. IE: `./.${run.serviceId}`. So with this config: ```json // firebase.json @@ -444,7 +485,8 @@ functions/ index.js ``` -If you wish to customise this output dir, then you can specify it in the adapter config: +If you wish to customise this output dir, then you can specify it in the adapter +config: ```js import firebase from "svelte-adapter-firebase"; @@ -458,14 +500,18 @@ export default { }; ``` -`cloudRunBuildDir` is relative from the `firebase.json` file loaded by `firebaseJson` option (which has default `./firebase.json`). +`cloudRunBuildDir` is relative from the `firebase.json` file loaded by +`firebaseJson` option (which has default `./firebase.json`).
esbuildBuildOptions -As an escape hatch, you may optionally specify a function which will receive the final esbuild options generated by this adapter and returns a modified esbuild configuration. The result of this function will be passed as-is to esbuild. The function can be async. +As an escape hatch, you may optionally specify a function which will receive the +final esbuild options generated by this adapter and returns a modified esbuild +configuration. The result of this function will be passed as-is to esbuild. The +function can be async. For example, you may wish to add a plugin: @@ -479,9 +525,9 @@ export default { esbuildBuildOptions(defaultOptions) { return { ...defaultOptions, - plugins: [] - } - } + plugins: [], + }; + }, }), target: "#svelte", }, @@ -502,10 +548,10 @@ The default options for this version are as follows:
- ## Cloud Function -With this `firebase.json` and `functions/` dir in a standard SvelteKit app structure and default `svelte-adapter-firebase` config: +With this `firebase.json` and `functions/` dir in a standard SvelteKit app +structure and default `svelte-adapter-firebase` config: ```json // firebase.json @@ -541,12 +587,15 @@ functions/ myApp/ <-- Static assets to go to Firebase Hosting CDN ``` -The `firebase.json functions.source` dir is used to find `functions/package.json` whose `main` field is used to find the Cloud Function build dir. This is used as the server asset output dir. +The `firebase.json functions.source` dir is used to find +`functions/package.json` whose `main` field is used to find the Cloud Function +build dir. This is used as the server asset output dir.
TypeScript Cloud Functions -Because we use the above method to determine the output dir the server assets are output to the correct place when using TypeScript. +Because we use the above method to determine the output dir the server assets +are output to the correct place when using TypeScript. ``` firebase.json ("public": "myApp") @@ -570,7 +619,8 @@ myApp/ <-- Static assets to go to Firebase Hosting CDN
Output with Multiple Sites -In a multi-site setup, the `site` name from hosting config in `firebase.json` is used as the server output dir: +In a multi-site setup, the `site` name from hosting config in `firebase.json` is +used as the server output dir: ``` firebase.json ("site": "myCoolSite","public": "myApp") @@ -589,9 +639,15 @@ myApp/ <-- Static assets to go to Firebase Hosting CDN
-The final piece is to write the actual Cloud Function source code to reference the output server assets. The code is printed during `svelte build` and should be placed in your `index.js` or `index.ts` manually. +The final piece is to write the actual Cloud Function source code to reference +the output server assets. The code is printed during `svelte build` and should +be placed in your `index.js` or `index.ts` manually. -This is a flexible solution that allows integrating with other Cloud Functions in your project. You can edit the provided code as you see fit. The import/require of the generated code will not change unless you change the `firebase.json:hosting.site` or `package.json:main` fields, so you shouldn't need to update this code after adding it. +This is a flexible solution that allows integrating with other Cloud Functions +in your project. You can edit the provided code as you see fit. The +import/require of the generated code will not change unless you change the +`firebase.json:hosting.site` or `package.json:main` fields, so you shouldn't +need to update this code after adding it. ### Cloud Function Firebase Emulator local Testing @@ -607,7 +663,8 @@ Test your production build locally before pushing to git or deploying! ## Cloud Run -With this `firebase.json` a standard SvelteKit app structure and default `svelte-adapter-firebase` config: +With this `firebase.json` a standard SvelteKit app structure and default +`svelte-adapter-firebase` config: ```json // firebase.json @@ -642,142 +699,243 @@ functions/ index.js ``` -See the [official Hosting/Cloud Run docs here](https://firebase.google.com/docs/hosting/cloud-run) for more setup information (enabling required APIs etc). +See the +[official Hosting/Cloud Run docs here](https://firebase.google.com/docs/hosting/cloud-run) +for more setup information (enabling required APIs etc). -For those interested, we support Cloud Run with the same JS code as Cloud Functions, via the NodeJS [Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs) and reliance on the [Node.js 14 Buildpacks](https://github.com/GoogleCloudPlatform/buildpacks/tree/main/builders/gcf/nodejs14), which is what essentially powers Cloud Functions. +For those interested, we support Cloud Run with the same JS code as Cloud +Functions, via the NodeJS +[Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs) +and reliance on the +[Node.js 14 Buildpacks](https://github.com/GoogleCloudPlatform/buildpacks/tree/main/builders/gcf/nodejs14), +which is what essentially powers Cloud Functions. ### Cloud Run Local Testing -Cloud Run cannot be tested locally with the Firebase Emulator. However, you can still build and run it locally with `gcloud` cli: +Cloud Run cannot be tested locally with the Firebase Emulator. However, you can +still build and run it locally with `gcloud` cli: ```shell gcloud beta code dev --builder ``` -This will build the container using the Google Node 14 buildpack image, run the image locally, and rebuild the image on code changes. For more details, see - https://cloud.google.com/run/docs/testing/local#cloud-sdk_ +This will build the container using the Google Node 14 buildpack image, run the +image locally, and rebuild the image on code changes. For more details, see - +https://cloud.google.com/run/docs/testing/local#cloud-sdk_ -When you route to the hosted image you should be able to navigate your Cloud Run app but your CDN hosted resources (css, images, etc) will not load properly. This can be used as a sanity check +When you route to the hosted image you should be able to navigate your Cloud Run +app but your CDN hosted resources (css, images, etc) will not load properly. +This can be used as a sanity check ### Cloud Run Deployment -`gcloud` CLI is required to build & deploy Cloud Run services. The recommended build & deploy command for Cloud Run will be output when the adapter is run. +`gcloud` CLI is required to build & deploy Cloud Run services. The recommended +build & deploy command for Cloud Run will be output when the adapter is run. ```shell gcloud beta run deploy ${serviceId} --platform managed --region ${region} --source ${serverOutputDir} --allow-unauthenticated ``` -Notably, this command **builds** and **deploys** your container, which is traditionally a two step process for container runtimes. You can orchestrate your deployment however you wish. Feel free to modify the command with any other Cloud Run features you may want to use, like increasing the `concurrency` or setting `min_instances` +Notably, this command **builds** and **deploys** your container, which is +traditionally a two step process for container runtimes. You can orchestrate +your deployment however you wish. Feel free to modify the command with any other +Cloud Run features you may want to use, like increasing the `concurrency` or +setting `min_instances` -This deploy command uses [Cloud Build](https://cloud.google.com/cloud-build) and the aforementioned [Buildpacks](https://cloud.google.com/blog/products/containers-kubernetes/google-cloud-now-supports-buildpacks) and [Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs). +This deploy command uses [Cloud Build](https://cloud.google.com/cloud-build) and +the aforementioned +[Buildpacks](https://cloud.google.com/blog/products/containers-kubernetes/google-cloud-now-supports-buildpacks) +and +[Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs). -:warning: Each build of your app will require `firebase deploy --only hosting` alongside your Cloud Run deployment as your CDN content will need to be updated as the filename hashes of static resources is rewritten on each `svelte-kit build` +:warning: Each build of your app will require `firebase deploy --only hosting` +alongside your Cloud Run deployment as your CDN content will need to be updated +as the filename hashes of static resources is rewritten on each +`svelte-kit build` ### Cloud Run Caveats -- testing of a Cloud Run service with Firebase Hosting CDN and other backend features (PubSub/Cloud Functions) will require a full deployment to a Firebase project. The suggestion is a `dev` project per engineer and manual deployments to each env to test. No environment per PR here. +- testing of a Cloud Run service with Firebase Hosting CDN and other backend + features (PubSub/Cloud Functions) will require a full deployment to a Firebase + project. The suggestion is a `dev` project per engineer and manual deployments + to each env to test. No environment per PR here. ## Function vs Run -Choice is a good thing, hopefully this comparison table helps you decide which compute environment is best for your application: +Choice is a good thing, hopefully this comparison table helps you decide which +compute environment is best for your application: -| Feature | Functions | Run | -| ----------------------------------------------------------------- | ------------------ | --------------------------------------------------------------------------------------------------- | -| Firebase Emulator Integration | :heavy_check_mark: | :x: | -| Unified deployment - Firebase Hosting & Compute deployed together | :heavy_check_mark: | :x: | -| Cold start mitigations | :x: (stay tuned) | :heavy_check_mark: ([`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances)) | -| Regions | :x: only ```us-central1``` shown in [docs](https://firebase.google.com/docs/hosting/functions) (stay tuned) | :heavy_check_mark: full list in [docs](https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container) | +| Feature | Functions | Run | +| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | +| Firebase Emulator Integration | :heavy_check_mark: | :x: | +| Unified deployment - Firebase Hosting & Compute deployed together | :heavy_check_mark: | :x: | +| Cold start mitigations | :x: (stay tuned) | :heavy_check_mark: ([`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances)) | +| Regions | :x: only `us-central1` shown in [docs](https://firebase.google.com/docs/hosting/functions) (stay tuned) | :heavy_check_mark: full list in [docs](https://firebase.google.com/docs/hosting/full-config#rewrite-cloud-run-container) | -Cloud Functions seems do be a better default, with some improvements coming in the future. +Cloud Functions seems do be a better default, with some improvements coming in +the future. ## Non-goals -> Write Cloud Function code directly into `.js` file instead of printing in console. +> Write Cloud Function code directly into `.js` file instead of printing in +> console. -Firebase Cloud Functions have a long history of people configuring their index files completely differently, some even generating them from directories. Accommodating these would be a headache. Instead, all we look for is a match against this string, `${name} =`, where `name` is your Cloud Functions name. We may make this configurable to a specific file in future. +Firebase Cloud Functions have a long history of people configuring their index +files completely differently, some even generating them from directories. +Accommodating these would be a headache. Instead, all we look for is a match +against this string, `${name} =`, where `name` is your Cloud Functions name. We +may make this configurable to a specific file in future. -Additionally, this allows for users to customise their Firebase Cloud Function API like `runWith()` options for memory/CPU and VPC/Ingress/Egress configuration settings, without complex support for options in the adapter. This keeps the Function config where it should, close to the executing code. +Additionally, this allows for users to customise their Firebase Cloud Function +API like `runWith()` options for memory/CPU and VPC/Ingress/Egress configuration +settings, without complex support for options in the adapter. This keeps the +Function config where it should, close to the executing code. > Handle the deployment of the app to Firebase. -Firebase apps consist of many different services with the CLI providing optional deployments. We do not want to dictate full deployments with your frontend nor perform partial deployments if it does not fit your app. The only option then is to leave it to you :tada: +Firebase apps consist of many different services with the CLI providing optional +deployments. We do not want to dictate full deployments with your frontend nor +perform partial deployments if it does not fit your app. The only option then is +to leave it to you :tada: > Custom Docker images -We support Cloud Run with the same JS code as Cloud Functions, via the NodeJS [Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs) and reliance on the [Node14 Buildpacks](https://github.com/GoogleCloudPlatform/buildpacks/tree/main/builders/gcf/nodejs14), which is what essentially powers Cloud Functions. Diverging from this would make supporting Cloud Run more difficult. The idea behind the support is to allow usage of Cloud Run features, for example, [`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances) and [concurrent requests](https://cloud.google.com/run/docs/about-concurrency) which both reduce cold starts (if that matters to you, use the CDN!) - -We are open to discussion on this topic, but it was not a goal when setting out to build this adapter (consider the cost/benefit to implement this feature well). +We support Cloud Run with the same JS code as Cloud Functions, via the NodeJS +[Functions Framework](https://github.com/GoogleCloudPlatform/functions-framework-nodejs) +and reliance on the +[Node14 Buildpacks](https://github.com/GoogleCloudPlatform/buildpacks/tree/main/builders/gcf/nodejs14), +which is what essentially powers Cloud Functions. Diverging from this would make +supporting Cloud Run more difficult. The idea behind the support is to allow +usage of Cloud Run features, for example, +[`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances) +and [concurrent requests](https://cloud.google.com/run/docs/about-concurrency) +which both reduce cold starts (if that matters to you, use the CDN!) + +We are open to discussion on this topic, but it was not a goal when setting out +to build this adapter (consider the cost/benefit to implement this feature +well). ## FAQ -> Why is the Cloud Function code output to the terminal for me to add manually instead of being written to `functions/index.js`? +> Why is the Cloud Function code output to the terminal for me to add manually +> instead of being written to `functions/index.js`? -See [non-goals](#non-goals) _Write Cloud Function code directly into `.js` file instead of printing in console._ +See [non-goals](#non-goals) _Write Cloud Function code directly into `.js` file +instead of printing in console._ > Firebase libs in SvelteKit -As recommended in the [SvelteKit FAQ](https://kit.svelte.dev/faq), please use [Firebase JS SDK v9](https://firebase.google.com/docs/web/learn-more#modular-version) as the older version of the SDK has issues and a larger bundle size. +As recommended in the [SvelteKit FAQ](https://kit.svelte.dev/faq), please use +[Firebase JS SDK v9](https://firebase.google.com/docs/web/learn-more#modular-version) +as the older version of the SDK has issues and a larger bundle size. > Cold Starts -Depends on your application load. Typically, Cloud Functions will require more instances to handle the same number of requests as each Cloud Run as each CR instance can handle up to 250 (default maximum at the time of writing). Though in my experience, bumping the memory/cpu configuration dramatically reduces the response times. - -Since the purpose of using this adapter is to leverage the Firebase Hosting CDN, you should consider improving the user experience with targetted caching/TTLs. - -If cold starts are still an issue for your application, Cloud Run has support for [`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances) which will keep `x` number of instances warm. This incurs additional costs, though [as discussed by Ahmet Alp Balkan here](https://github.com/ahmetb/cloud-run-faq#how-to-keep-a-cloud-run-service-warm) can be cheaper than an equivalent Compute Engine instance. See the [official Cloud Run pricing documentation](https://cloud.google.com/run/pricing) for more. +Depends on your application load. Typically, Cloud Functions will require more +instances to handle the same number of requests as each Cloud Run as each CR +instance can handle up to 250 (default maximum at the time of writing). Though +in my experience, bumping the memory/cpu configuration dramatically reduces the +response times. + +Since the purpose of using this adapter is to leverage the Firebase Hosting CDN, +you should consider improving the user experience with targetted caching/TTLs. + +If cold starts are still an issue for your application, Cloud Run has support +for +[`min_instances`](https://cloud.google.com/run/docs/configuring/min-instances) +which will keep `x` number of instances warm. This incurs additional costs, +though +[as discussed by Ahmet Alp Balkan here](https://github.com/ahmetb/cloud-run-faq#how-to-keep-a-cloud-run-service-warm) +can be cheaper than an equivalent Compute Engine instance. See the +[official Cloud Run pricing documentation](https://cloud.google.com/run/pricing) +for more. ## Caveats -- [Firebase Hosting Preview Channels](https://firebase.google.com/docs/hosting/test-preview-deploy) currently lacks first-party support for SSR applications. This adapter doesn't attempt to remedy this issue and doesn't produce a different SSR Function/Run for preview channel deployments. -- :warning: Cloud Function rewrites only support **us-central1**, other regions will error. The official warning about this can be found in [these docs](https://firebase.google.com/docs/hosting/functions). +- [Firebase Hosting Preview Channels](https://firebase.google.com/docs/hosting/test-preview-deploy) + currently lacks first-party support for SSR applications. This adapter doesn't + attempt to remedy this issue and doesn't produce a different SSR Function/Run + for preview channel deployments. +- :warning: Cloud Function rewrites only support **us-central1**, other regions + will error. The official warning about this can be found in + [these docs](https://firebase.google.com/docs/hosting/functions). + -- `1.0.0` will not be published until the SvelteKit Adapter API is declared stable and SvelteKit is released for general use. + +- `1.0.0` will not be published until the SvelteKit Adapter API is declared + stable and SvelteKit is released for general use. + ## Hints with Codes -The adapter is intended to guide you through the configuration of your `firebase.json` and `svelte.config.js` file. As such, when you have a misconfiguration the adapter will log a hint. Codes for these hints are listed here: +The adapter is intended to guide you through the configuration of your +`firebase.json` and `svelte.config.js` file. As such, when you have a +misconfiguration the adapter will log a hint. Codes for these hints are listed +here: **firebase.json file** -- SAF1000: provided `firebase.json` file does not exist. It is computed from adapter config `firebaseJson`. If the default adapter config is not working, consider updating it in `svelte.config.js` +- SAF1000: provided `firebase.json` file does not exist. It is computed from + adapter config `firebaseJson`. If the default adapter config is not working, + consider updating it in `svelte.config.js` - SAF1001: `JSON.parse` error of `firebase.json` **firebase.json:hosting[]** - SAF1010: `hosting` field required in `firebase.json` -- SAF1011: Multiple hosting configurations found, which requires each to have a `site` field, one does not. -- SAF1012: Multiple `hosting` configurations found in `firebase.json` but no `hostingSite` specified in `svelte.config.js` adapter config. -- SAF1013: Multiple `hosting` configurations found in `firebase.json` but no match found for `hostingSite` specified in `svelte.config.js` adapter config. +- SAF1011: Multiple hosting configurations found, which requires each to have a + `site` field, one does not. +- SAF1012: Multiple `hosting` configurations found in `firebase.json` but no + `hostingSite` specified in `svelte.config.js` adapter config. +- SAF1013: Multiple `hosting` configurations found in `firebase.json` but no + match found for `hostingSite` specified in `svelte.config.js` adapter config. **firebase.json:hosting[].rewrites** -- SAF1020: Required `hosting[].rewrites` field not found for matched hosting config. -- SAF1021: Required `hosting[].rewrites[]` does not contain a config with `source` matching adapter config `sourceRewriteMatch` and either `function` or `run` entries. +- SAF1020: Required `hosting[].rewrites` field not found for matched hosting + config. +- SAF1021: Required `hosting[].rewrites[]` does not contain a config with + `source` matching adapter config `sourceRewriteMatch` and either `function` or + `run` entries. **firebase.json:hosting[].rewrites Cloud Run config** -- SAF1030: Required `serviceId` field not found for Cloud Run rewrite rule in `firebase.json`. -- SAF1031: Cloud Run `serviceId` is invalid. Cloud Run `serviceId` must use only lowercase alphanumeric characters and dashes, cannot begin or end with a dash, and cannot be longer than 63 characters. Update `firebase.json` accordingly. -- SAF1032: Cloud Run `region` is invalid. Firebase Hosting rewrites only support `"regions":"us-central1"`. Update `firebase.json` accordingly. +- SAF1030: Required `serviceId` field not found for Cloud Run rewrite rule in + `firebase.json`. +- SAF1031: Cloud Run `serviceId` is invalid. Cloud Run `serviceId` must use only + lowercase alphanumeric characters and dashes, cannot begin or end with a dash, + and cannot be longer than 63 characters. Update `firebase.json` accordingly. +- SAF1032: Cloud Run `region` is invalid. Firebase Hosting rewrites only support + `"regions":"us-central1"`. Update `firebase.json` accordingly. **firebase.json:hosting[].rewrites Cloud Function config** -- SAF1040: Function name for rewrite rule is invalid. Function name must use only alphanumeric characters and underscores and cannot be longer than 62 characters. Update `firebase.json` accordingly. +- SAF1040: Function name for rewrite rule is invalid. Function name must use + only alphanumeric characters and underscores and cannot be longer than 62 + characters. Update `firebase.json` accordingly. **firebase.json:hosting[].public** -- SAF1050: Required `hosting.public` field not found for hosting configuration. Add a `public` field to the matched hosting config in `firebase.json`. -- SAF1051: `firebase.json:hosting.public` must be a different directory to `svelte.config.js:kit.files.assets`. -- SAF1052: Required "hosting.public" field is an empty string. "public" should be a directory name. +- SAF1050: Required `hosting.public` field not found for hosting configuration. + Add a `public` field to the matched hosting config in `firebase.json`. +- SAF1051: `firebase.json:hosting.public` must be a different directory to + `svelte.config.js:kit.files.assets`. +- SAF1052: Required "hosting.public" field is an empty string. "public" should + be a directory name. **firebase.json:functions** - SAF1060: Required `functions.source` field missing from `firebase.json` file. -- SAF1061: Node.js runtime not supported. SvelteKit on Cloud Functions requires Node.js 14 or newer runtime. Set the version in either: `/package.json:engines.node` or `firebase.json:functions.runtime`. +- SAF1061: Node.js runtime not supported. SvelteKit on Cloud Functions requires + Node.js 14 or newer runtime. Set the version in either: + `/package.json:engines.node` or + `firebase.json:functions.runtime`. ## Contributing -[Contributions of any kind welcome, just follow the guidelines](CONTRIBUTING.md)! +[Contributions of any kind welcome, just follow the +guidelines](CONTRIBUTING.md)! Short version: @@ -791,6 +949,9 @@ See [asdf](https://asdf-vm.com) to install set it up. ### external contributions -While building this adapter some issues were found with upstream components, these are captured here should someone wish to contribute them: +While building this adapter some issues were found with upstream components, +these are captured here should someone wish to contribute them: -- Cloud Function validation code linked in `utils.js` is from two different sources which indicates that it is being validated by `firebase-tools` in two separate places. PR a fix there. +- Cloud Function validation code linked in `utils.js` is from two different + sources which indicates that it is being validated by `firebase-tools` in two + separate places. PR a fix there. diff --git a/examples/functions_single_site/.firebaserc b/examples/functions_single_site/.firebaserc deleted file mode 100644 index 40d3dc9..0000000 --- a/examples/functions_single_site/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "demo" - } -} diff --git a/examples/functions_single_site/.gitignore b/examples/functions_single_site/.gitignore deleted file mode 100644 index 3cc1d73..0000000 --- a/examples/functions_single_site/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store -node_modules -/.svelte-kit -/build - -# Specific to this app's firebase.json -public/ - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -firebase-debug.log* -firebase-debug.*.log* - -# Firebase cache -.firebase/ diff --git a/examples/functions_single_site/.npmrc b/examples/functions_single_site/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/examples/functions_single_site/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/examples/functions_single_site/README.md b/examples/functions_single_site/README.md deleted file mode 100644 index 82510ca..0000000 --- a/examples/functions_single_site/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm init svelte@next - -# create a new project in my-app -npm init svelte@next my-app -``` - -> Note: the `@next` is temporary - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then: - -```bash -npm run build -``` - -> You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production. diff --git a/examples/functions_single_site/functions/pnpm-lock.yaml b/examples/functions_single_site/functions/pnpm-lock.yaml deleted file mode 100644 index 81f18c9..0000000 --- a/examples/functions_single_site/functions/pnpm-lock.yaml +++ /dev/null @@ -1,1613 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - firebase-admin: ^9.2.0 - firebase-functions: ^3.11.0 - firebase-functions-test: ^0.2.0 - -dependencies: - firebase-admin: 9.8.0 - firebase-functions: 3.13.2_firebase-admin@9.8.0 - -devDependencies: - firebase-functions-test: 0.2.3_80e614b780fa1f859e4be5fec9feb8a3 - -packages: - - /@firebase/app-types/0.6.2: - resolution: {integrity: sha512-2VXvq/K+n8XMdM4L2xy5bYp2ZXMawJXluUIDzUBvMthVR+lhxK4pfFiqr1mmDbv9ydXvEAuFsD+6DpcZuJcSSw==} - dev: false - - /@firebase/auth-interop-types/0.1.6_@firebase+util@1.1.0: - resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - dependencies: - '@firebase/util': 1.1.0 - dev: false - - /@firebase/component/0.5.0: - resolution: {integrity: sha512-v18csWtXb0ri+3m7wuGLY/UDgcb89vuMlZGQ//+7jEPLIQeLbylvZhol1uzW9WzoOpxMxOS2W5qyVGX36wZvEA==} - dependencies: - '@firebase/util': 1.1.0 - tslib: 2.2.0 - dev: false - - /@firebase/database-types/0.7.2: - resolution: {integrity: sha512-cdAd/dgwvC0r3oLEDUR+ULs1vBsEvy0b27nlzKhU6LQgm9fCDzgaH9nFGv8x+S9dly4B0egAXkONkVoWcOAisg==} - dependencies: - '@firebase/app-types': 0.6.2 - dev: false - - /@firebase/database/0.10.0: - resolution: {integrity: sha512-GsHvuES83Edtboij2h3txKg+yV/TD4b5Owc01SgXEQtvj1lulkHt4Ufmd9OZz1WreWQJMIqKpbVowIDHjlkZJQ==} - dependencies: - '@firebase/auth-interop-types': 0.1.6_@firebase+util@1.1.0 - '@firebase/component': 0.5.0 - '@firebase/database-types': 0.7.2 - '@firebase/logger': 0.2.6 - '@firebase/util': 1.1.0 - faye-websocket: 0.11.3 - tslib: 2.2.0 - transitivePeerDependencies: - - '@firebase/app-types' - dev: false - - /@firebase/logger/0.2.6: - resolution: {integrity: sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==} - dev: false - - /@firebase/util/1.1.0: - resolution: {integrity: sha512-lfuSASuPKNdfebuFR8rjFamMQUPH9iiZHcKS755Rkm/5gRT0qC7BMhCh3ZkHf7NVbplzIc/GhmX2jM+igDRCag==} - dependencies: - tslib: 2.2.0 - dev: false - - /@google-cloud/common/3.6.0: - resolution: {integrity: sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q==} - engines: {node: '>=10'} - dependencies: - '@google-cloud/projectify': 2.0.1 - '@google-cloud/promisify': 2.0.3 - arrify: 2.0.1 - duplexify: 4.1.1 - ent: 2.2.0 - extend: 3.0.2 - google-auth-library: 7.0.4 - retry-request: 4.1.3 - teeny-request: 7.0.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@google-cloud/firestore/4.11.0: - resolution: {integrity: sha512-Do9WJzEkFBBB+zVFvFfrrrIFEz086lrdgKQic7XsdoTgtYtq0yMu2u3kGLyxMbdasl2c2yf49FE4YvO3AYjQMQ==} - engines: {node: '>=10.10.0'} - dependencies: - fast-deep-equal: 3.1.3 - functional-red-black-tree: 1.0.1 - google-gax: 2.12.0 - protobufjs: 6.11.2 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@google-cloud/paginator/3.0.5: - resolution: {integrity: sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - dev: false - optional: true - - /@google-cloud/projectify/2.0.1: - resolution: {integrity: sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ==} - engines: {node: '>=10'} - dev: false - optional: true - - /@google-cloud/promisify/2.0.3: - resolution: {integrity: sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==} - engines: {node: '>=10'} - dev: false - optional: true - - /@google-cloud/storage/5.8.5: - resolution: {integrity: sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg==} - engines: {node: '>=10'} - dependencies: - '@google-cloud/common': 3.6.0 - '@google-cloud/paginator': 3.0.5 - '@google-cloud/promisify': 2.0.3 - arrify: 2.0.1 - async-retry: 1.3.1 - compressible: 2.0.18 - date-and-time: 1.0.0 - duplexify: 4.1.1 - extend: 3.0.2 - gaxios: 4.2.1 - gcs-resumable-upload: 3.1.4 - get-stream: 6.0.1 - hash-stream-validation: 0.2.4 - mime: 2.5.2 - mime-types: 2.1.30 - onetime: 5.1.2 - p-limit: 3.1.0 - pumpify: 2.0.1 - snakeize: 0.1.0 - stream-events: 1.0.5 - xdg-basedir: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@grpc/grpc-js/1.3.0: - resolution: {integrity: sha512-fiL7ZaGg2HBiFtmv6m34d5jEgEtNXfctjzB3f7b3iuT7olBX4mHLMOqOBmGTTSOTfNRQJH5+vsyk6mEz3I0Q7Q==} - engines: {node: ^8.13.0 || >=10.10.0} - dependencies: - '@types/node': 15.0.2 - dev: false - optional: true - - /@grpc/proto-loader/0.6.1: - resolution: {integrity: sha512-4DIvEOZhw5nGj3RQngIoiMXRsre3InEH136krZTcirs/G2em3WMXdtx4Lqlnb4E2ertbWGs5gPeVDKU5BHffXw==} - engines: {node: '>=6'} - hasBin: true - dependencies: - '@types/long': 4.0.1 - lodash.camelcase: 4.3.0 - long: 4.0.0 - protobufjs: 6.11.2 - yargs: 16.2.0 - dev: false - optional: true - - /@panva/asn1.js/1.0.0: - resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} - engines: {node: '>=10.13.0'} - dev: false - - /@protobufjs/aspromise/1.1.2: - resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} - dev: false - optional: true - - /@protobufjs/base64/1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false - optional: true - - /@protobufjs/codegen/2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false - optional: true - - /@protobufjs/eventemitter/1.1.0: - resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=} - dev: false - optional: true - - /@protobufjs/fetch/1.1.0: - resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=} - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: false - optional: true - - /@protobufjs/float/1.0.2: - resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} - dev: false - optional: true - - /@protobufjs/inquire/1.1.0: - resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=} - dev: false - optional: true - - /@protobufjs/path/1.1.2: - resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} - dev: false - optional: true - - /@protobufjs/pool/1.1.0: - resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} - dev: false - optional: true - - /@protobufjs/utf8/1.1.0: - resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=} - dev: false - optional: true - - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - optional: true - - /@types/body-parser/1.19.0: - resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==} - dependencies: - '@types/connect': 3.4.34 - '@types/node': 15.0.2 - dev: false - - /@types/connect/3.4.34: - resolution: {integrity: sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==} - dependencies: - '@types/node': 15.0.2 - dev: false - - /@types/express-jwt/0.0.42: - resolution: {integrity: sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==} - dependencies: - '@types/express': 4.17.11 - '@types/express-unless': 0.5.1 - dev: false - - /@types/express-serve-static-core/4.17.19: - resolution: {integrity: sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==} - dependencies: - '@types/node': 15.0.2 - '@types/qs': 6.9.6 - '@types/range-parser': 1.2.3 - dev: false - - /@types/express-unless/0.5.1: - resolution: {integrity: sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==} - dependencies: - '@types/express': 4.17.11 - dev: false - - /@types/express/4.17.11: - resolution: {integrity: sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==} - dependencies: - '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.19 - '@types/qs': 6.9.6 - '@types/serve-static': 1.13.9 - dev: false - - /@types/express/4.17.3: - resolution: {integrity: sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==} - dependencies: - '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.19 - '@types/serve-static': 1.13.9 - dev: false - - /@types/lodash/4.14.168: - resolution: {integrity: sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==} - dev: true - - /@types/long/4.0.1: - resolution: {integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==} - dev: false - optional: true - - /@types/mime/1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: false - - /@types/node/15.0.2: - resolution: {integrity: sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==} - dev: false - - /@types/qs/6.9.6: - resolution: {integrity: sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==} - dev: false - - /@types/range-parser/1.2.3: - resolution: {integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==} - dev: false - - /@types/serve-static/1.13.9: - resolution: {integrity: sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 15.0.2 - dev: false - - /abort-controller/3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - optional: true - - /accepts/1.3.7: - resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.30 - negotiator: 0.6.2 - dev: false - - /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /ansi-regex/5.0.0: - resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} - engines: {node: '>=8'} - dev: false - optional: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - optional: true - - /array-flatten/1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} - dev: false - - /arrify/2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: false - optional: true - - /async-retry/1.3.1: - resolution: {integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==} - dependencies: - retry: 0.12.0 - dev: false - optional: true - - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - optional: true - - /bignumber.js/9.0.1: - resolution: {integrity: sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==} - dev: false - optional: true - - /body-parser/1.19.0: - resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.0 - content-type: 1.0.4 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - on-finished: 2.3.0 - qs: 6.7.0 - raw-body: 2.4.0 - type-is: 1.6.18 - dev: false - - /buffer-equal-constant-time/1.0.1: - resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} - dev: false - - /bytes/3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} - engines: {node: '>= 0.8'} - dev: false - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 - wrap-ansi: 7.0.0 - dev: false - optional: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - optional: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - optional: true - - /compressible/2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.47.0 - dev: false - optional: true - - /configstore/5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.6 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: false - optional: true - - /content-disposition/0.5.3: - resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - dev: false - - /cookie-signature/1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} - dev: false - - /cookie/0.4.0: - resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} - engines: {node: '>= 0.6'} - dev: false - - /cors/2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: false - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - optional: true - - /date-and-time/1.0.0: - resolution: {integrity: sha512-477D7ypIiqlXBkxhU7YtG9wWZJEQ+RUpujt2quTfgf4+E8g5fNUkB0QIL0bVyP5/TKBg8y55Hfa1R/c4bt3dEw==} - dev: false - optional: true - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - dependencies: - ms: 2.0.0 - dev: false - - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /depd/1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} - dev: false - - /destroy/1.0.4: - resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} - dev: false - - /dicer/0.3.0: - resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} - engines: {node: '>=4.5.0'} - dependencies: - streamsearch: 0.1.2 - dev: false - - /dot-prop/5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: false - optional: true - - /duplexify/4.1.1: - resolution: {integrity: sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 3.6.0 - stream-shift: 1.0.1 - dev: false - optional: true - - /ecdsa-sig-formatter/1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} - dev: false - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - optional: true - - /encodeurl/1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} - engines: {node: '>= 0.8'} - dev: false - - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: false - optional: true - - /ent/2.2.0: - resolution: {integrity: sha1-6WQhkyWiHQX0RGai9obtbOX13R0=} - dev: false - optional: true - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - optional: true - - /escape-html/1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} - dev: false - - /etag/1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} - engines: {node: '>= 0.6'} - dev: false - - /event-target-shim/5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false - optional: true - - /express/4.17.1: - resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.7 - array-flatten: 1.1.1 - body-parser: 1.19.0 - content-disposition: 0.5.3 - content-type: 1.0.4 - cookie: 0.4.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.2 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.6 - qs: 6.7.0 - range-parser: 1.2.1 - safe-buffer: 5.1.2 - send: 0.17.1 - serve-static: 1.14.1 - setprototypeof: 1.1.1 - statuses: 1.5.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - dev: false - - /extend/3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false - optional: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - optional: true - - /fast-text-encoding/1.0.3: - resolution: {integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==} - dev: false - optional: true - - /faye-websocket/0.11.3: - resolution: {integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /finalhandler/1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - dev: false - - /firebase-admin/9.8.0: - resolution: {integrity: sha512-v8B1qU8McZZT2hlLZ018TKz2FoKlfFkZq9mOIyzN7wJUOlAywqQX0JyqNpVGyPeU+B+77ojlvmkGTNXt2OFkgw==} - engines: {node: '>=10.10.0'} - dependencies: - '@firebase/database': 0.10.0 - '@firebase/database-types': 0.7.2 - '@types/node': 15.0.2 - dicer: 0.3.0 - jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.3 - node-forge: 0.10.0 - optionalDependencies: - '@google-cloud/firestore': 4.11.0 - '@google-cloud/storage': 5.8.5 - transitivePeerDependencies: - - '@firebase/app-types' - - supports-color - dev: false - - /firebase-functions-test/0.2.3_80e614b780fa1f859e4be5fec9feb8a3: - resolution: {integrity: sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==} - engines: {node: '>=8.0.0'} - peerDependencies: - firebase-admin: '>=6.0.0' - firebase-functions: '>=2.0.0' - dependencies: - '@types/lodash': 4.14.168 - firebase-admin: 9.8.0 - firebase-functions: 3.13.2_firebase-admin@9.8.0 - lodash: 4.17.21 - dev: true - - /firebase-functions/3.13.2_firebase-admin@9.8.0: - resolution: {integrity: sha512-XHgAQZqA62awr4l9mNlJv6qnv5MkMkLuo+hafdW0T7IJj1PgrZtuIo5x+ib2npAcB0XhX5Sg0QR1hMYPAlfbaA==} - engines: {node: ^8.13.0 || >=10.10.0} - peerDependencies: - firebase-admin: ^8.0.0 || ^9.0.0 - dependencies: - '@types/express': 4.17.3 - cors: 2.8.5 - express: 4.17.1 - firebase-admin: 9.8.0 - lodash: 4.17.21 - dev: false - - /forwarded/0.1.2: - resolution: {integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=} - engines: {node: '>= 0.6'} - dev: false - - /fresh/0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} - dev: false - - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} - dev: false - optional: true - - /gaxios/4.2.1: - resolution: {integrity: sha512-s+rTywpw6CmfB8r9TXYkpix7YFeuRjnR/AqhaJrQqsNhsAqej+IAiCc3hadzQH3gHyWth30tvYjxH8EVjQt/8Q==} - engines: {node: '>=10'} - dependencies: - abort-controller: 3.0.0 - extend: 3.0.2 - https-proxy-agent: 5.0.0 - is-stream: 2.0.0 - node-fetch: 2.6.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /gcp-metadata/4.2.1: - resolution: {integrity: sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==} - engines: {node: '>=10'} - dependencies: - gaxios: 4.2.1 - json-bigint: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /gcs-resumable-upload/3.1.4: - resolution: {integrity: sha512-5dyDfHrrVcIskiw/cPssVD4HRiwoHjhk1Nd6h5W3pQ/qffDvhfy4oNCr1f3ZXFPwTnxkCbibsB+73oOM+NvmJQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - abort-controller: 3.0.0 - configstore: 5.0.1 - extend: 3.0.2 - gaxios: 4.2.1 - google-auth-library: 7.0.4 - pumpify: 2.0.1 - stream-events: 1.0.5 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - optional: true - - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - optional: true - - /google-auth-library/7.0.4: - resolution: {integrity: sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.3 - gaxios: 4.2.1 - gcp-metadata: 4.2.1 - gtoken: 5.2.1 - jws: 4.0.0 - lru-cache: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /google-gax/2.12.0: - resolution: {integrity: sha512-UDx4ZZx85vXBe6GZ0sdRSzuegLrRQdRjCxlauX+U7i5YwOoSgcSaIM71BhcdHwGPhEkvO/SSHrEfc1wpL/J6JA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@grpc/grpc-js': 1.3.0 - '@grpc/proto-loader': 0.6.1 - '@types/long': 4.0.1 - abort-controller: 3.0.0 - duplexify: 4.1.1 - fast-text-encoding: 1.0.3 - google-auth-library: 7.0.4 - is-stream-ended: 0.1.4 - node-fetch: 2.6.1 - object-hash: 2.1.1 - protobufjs: 6.11.2 - retry-request: 4.1.3 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /google-p12-pem/3.0.3: - resolution: {integrity: sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - node-forge: 0.10.0 - dev: false - optional: true - - /graceful-fs/4.2.6: - resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} - dev: false - optional: true - - /gtoken/5.2.1: - resolution: {integrity: sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==} - engines: {node: '>=10'} - dependencies: - gaxios: 4.2.1 - google-p12-pem: 3.0.3 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /hash-stream-validation/0.2.4: - resolution: {integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==} - dev: false - optional: true - - /http-errors/1.7.2: - resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: false - - /http-errors/1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: false - - /http-parser-js/0.5.3: - resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} - dev: false - - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /https-proxy-agent/5.0.0: - resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /imurmurhash/0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} - dev: false - optional: true - - /inherits/2.0.3: - resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} - dev: false - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ipaddr.js/1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-stream-ended/0.1.4: - resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} - dev: false - optional: true - - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: false - optional: true - - /jose/2.0.5: - resolution: {integrity: sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==} - engines: {node: '>=10.13.0 < 13 || >=13.7.0'} - dependencies: - '@panva/asn1.js': 1.0.0 - dev: false - - /json-bigint/1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.0.1 - dev: false - optional: true - - /jsonwebtoken/8.5.1: - resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} - engines: {node: '>=4', npm: '>=1.4.28'} - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 5.7.1 - dev: false - - /jwa/1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - - /jwa/2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - optional: true - - /jwks-rsa/2.0.3: - resolution: {integrity: sha512-/rkjXRWAp0cS00tunsHResw68P5iTQru8+jHufLNv3JHc4nObFEndfEUSuPugh09N+V9XYxKUqi7QrkmCHSSSg==} - engines: {node: '>=10 < 13 || >=14'} - dependencies: - '@types/express-jwt': 0.0.42 - debug: 4.3.1 - jose: 2.0.5 - limiter: 1.1.5 - lru-memoizer: 2.1.4 - transitivePeerDependencies: - - supports-color - dev: false - - /jws/3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - dev: false - - /jws/4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - dependencies: - jwa: 2.0.0 - safe-buffer: 5.2.1 - dev: false - optional: true - - /limiter/1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - dev: false - - /lodash.camelcase/4.3.0: - resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} - dev: false - optional: true - - /lodash.clonedeep/4.5.0: - resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - dev: false - - /lodash.includes/4.3.0: - resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} - dev: false - - /lodash.isboolean/3.0.3: - resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} - dev: false - - /lodash.isinteger/4.0.4: - resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} - dev: false - - /lodash.isnumber/3.0.3: - resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} - dev: false - - /lodash.isplainobject/4.0.6: - resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} - dev: false - - /lodash.isstring/4.0.1: - resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} - dev: false - - /lodash.once/4.1.1: - resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} - dev: false - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - /long/4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: false - optional: true - - /lru-cache/4.0.2: - resolution: {integrity: sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: false - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - optional: true - - /lru-memoizer/2.1.4: - resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==} - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 4.0.2 - dev: false - - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: false - optional: true - - /media-typer/0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - dev: false - - /merge-descriptors/1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} - dev: false - - /methods/1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} - engines: {node: '>= 0.6'} - dev: false - - /mime-db/1.47.0: - resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types/2.1.30: - resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.47.0 - dev: false - - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mime/2.5.2: - resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: false - optional: true - - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - optional: true - - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} - dev: false - - /ms/2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - dev: false - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /ms/2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /negotiator/0.6.2: - resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} - engines: {node: '>= 0.6'} - dev: false - - /node-fetch/2.6.1: - resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} - engines: {node: 4.x || >=6.0.0} - dev: false - optional: true - - /node-forge/0.10.0: - resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} - engines: {node: '>= 6.0.0'} - dev: false - - /object-assign/4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} - engines: {node: '>=0.10.0'} - dev: false - - /object-hash/2.1.1: - resolution: {integrity: sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==} - engines: {node: '>= 6'} - dev: false - optional: true - - /on-finished/2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - dependencies: - wrappy: 1.0.2 - dev: false - optional: true - - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - optional: true - - /p-limit/3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: false - optional: true - - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /path-to-regexp/0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} - dev: false - - /protobufjs/6.11.2: - resolution: {integrity: sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.1 - '@types/node': 15.0.2 - long: 4.0.0 - dev: false - optional: true - - /proxy-addr/2.0.6: - resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.1.2 - ipaddr.js: 1.9.1 - dev: false - - /pseudomap/1.0.2: - resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} - dev: false - - /pump/3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: false - optional: true - - /pumpify/2.0.1: - resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} - dependencies: - duplexify: 4.1.1 - inherits: 2.0.4 - pump: 3.0.0 - dev: false - optional: true - - /qs/6.7.0: - resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} - engines: {node: '>=0.6'} - dev: false - - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body/2.4.0: - resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.0 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - optional: true - - /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} - dev: false - optional: true - - /retry-request/4.1.3: - resolution: {integrity: sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==} - engines: {node: '>=8.10.0'} - dependencies: - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /retry/0.12.0: - resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=} - engines: {node: '>= 4'} - dev: false - optional: true - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: false - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: false - optional: true - - /send/0.17.1: - resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.7.3 - mime: 1.6.0 - ms: 2.1.1 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.5.0 - dev: false - - /serve-static/1.14.1: - resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.17.1 - dev: false - - /setprototypeof/1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} - dev: false - - /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} - dev: false - optional: true - - /snakeize/0.1.0: - resolution: {integrity: sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=} - dev: false - optional: true - - /statuses/1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} - dev: false - - /stream-events/1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - dependencies: - stubs: 3.0.0 - dev: false - optional: true - - /stream-shift/1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - dev: false - optional: true - - /streamsearch/0.1.2: - resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} - engines: {node: '>=0.8.0'} - dev: false - - /string-width/4.2.2: - resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.0 - dev: false - optional: true - - /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - optional: true - - /strip-ansi/6.0.0: - resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.0 - dev: false - optional: true - - /stubs/3.0.0: - resolution: {integrity: sha1-6NK6H6nJBXAwPAMLaQD31fiavls=} - dev: false - optional: true - - /teeny-request/7.0.1: - resolution: {integrity: sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw==} - engines: {node: '>=10'} - dependencies: - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - node-fetch: 2.6.1 - stream-events: 1.0.5 - uuid: 8.3.2 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /toidentifier/1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} - engines: {node: '>=0.6'} - dev: false - - /tslib/2.2.0: - resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} - dev: false - - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.30 - dev: false - - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - optional: true - - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - optional: true - - /unpipe/1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} - dev: false - - /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: false - optional: true - - /utils-merge/1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - optional: true - - /vary/1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} - engines: {node: '>= 0.8'} - dev: false - - /websocket-driver/0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.3 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions/0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: false - optional: true - - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: false - optional: true - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.3 - typedarray-to-buffer: 3.1.5 - dev: false - optional: true - - /xdg-basedir/4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: false - optional: true - - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false - optional: true - - /yallist/2.1.2: - resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} - dev: false - - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - optional: true - - /yargs-parser/20.2.7: - resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} - engines: {node: '>=10'} - dev: false - optional: true - - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.2 - y18n: 5.0.8 - yargs-parser: 20.2.7 - dev: false - optional: true - - /yocto-queue/0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: false - optional: true diff --git a/examples/functions_single_site/jsconfig.json b/examples/functions_single_site/jsconfig.json deleted file mode 100644 index 893781f..0000000 --- a/examples/functions_single_site/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/examples/functions_single_site/package.json b/examples/functions_single_site/package.json deleted file mode 100644 index 761a088..0000000 --- a/examples/functions_single_site/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "~TODO~", - "version": "0.0.1", - "scripts": { - "dev": "svelte-kit dev", - "build": "npx rimraf public && svelte-kit build --verbose", - "preview": "svelte-kit preview" - }, - "devDependencies": { - "@sveltejs/kit": "^1.0.0-next.111", - "svelte": "^3.34.0" - }, - "type": "module", - "dependencies": { - "@fontsource/fira-mono": "^4.2.2", - "@lukeed/uuid": "^2.0.0", - "cookie": "^0.4.1", - "svelte-adapter-firebase": "link:../.." - } -} diff --git a/examples/functions_single_site/pnpm-lock.yaml b/examples/functions_single_site/pnpm-lock.yaml deleted file mode 100644 index a43f930..0000000 --- a/examples/functions_single_site/pnpm-lock.yaml +++ /dev/null @@ -1,288 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - '@fontsource/fira-mono': ^4.2.2 - '@lukeed/uuid': ^2.0.0 - '@sveltejs/kit': ^1.0.0-next.111 - cookie: ^0.4.1 - svelte: ^3.34.0 - svelte-adapter-firebase: link:../.. - -dependencies: - '@fontsource/fira-mono': 4.3.0 - '@lukeed/uuid': 2.0.0 - cookie: 0.4.1 - svelte-adapter-firebase: link:../.. - -devDependencies: - '@sveltejs/kit': 1.0.0-next.111_svelte@3.38.2 - svelte: 3.38.2 - -packages: - - /@fontsource/fira-mono/4.3.0: - resolution: {integrity: sha512-EizsZfvV/MLLbOUyonZV6vzispTKOkZrIhWcy3W2Ryn8OLaYw+af34DOfUpIN8U8Q8/wO5lU90iPyXePqmpRdg==} - dev: false - - /@lukeed/csprng/1.0.0: - resolution: {integrity: sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==} - engines: {node: '>=8'} - dev: false - - /@lukeed/uuid/2.0.0: - resolution: {integrity: sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==} - engines: {node: '>=8'} - dependencies: - '@lukeed/csprng': 1.0.0 - dev: false - - /@rollup/pluginutils/4.1.0: - resolution: {integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.0 - dev: true - - /@sveltejs/kit/1.0.0-next.111_svelte@3.38.2: - resolution: {integrity: sha512-w3irGw6nqK78YBzSi37MvH67EZJxoACUOnihp1nVOGOJjcHSKysjNeF8qB5/jK7It1TJwxYeu+KrK3mBAg7jqQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - hasBin: true - peerDependencies: - svelte: ^3.38.2 - dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.3 - cheap-watch: 1.0.3 - sade: 1.7.4 - svelte: 3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.3: - resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} - engines: {node: '>=12.0.0'} - peerDependencies: - svelte: ^3.37.0 - vite: ^2.2.3 - dependencies: - '@rollup/pluginutils': 4.1.0 - chalk: 4.1.1 - debug: 4.3.2 - hash-sum: 2.0.0 - require-relative: 0.8.7 - slash: 4.0.0 - source-map: 0.7.3 - svelte: 3.38.2 - svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /cheap-watch/1.0.3: - resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} - engines: {node: '>=8'} - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: true - - /cookie/0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} - engines: {node: '>= 0.6'} - dev: false - - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} - hasBin: true - requiresBuild: true - dev: true - - /estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - 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] - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - 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 - - /hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /mri/1.1.6: - resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} - engines: {node: '>=4'} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /nanoid/3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - - /postcss/8.3.0: - resolution: {integrity: sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - colorette: 1.2.2 - nanoid: 3.1.23 - source-map-js: 0.6.2 - dev: true - - /require-relative/0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.7 - dev: true - - /rollup/2.50.4: - resolution: {integrity: sha512-mBQa9O6bdqur7a6R+TXcbdYgfO2arXlDG+rSrWfwAvsiumpJjD4OS23R9QuhItuz8ysWb8mZ91CFFDQUhJY+8Q==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /sade/1.7.4: - resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} - engines: {node: '>= 6'} - dependencies: - mri: 1.1.6 - dev: true - - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /source-map-js/0.6.2: - resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - 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 - - /svelte-hmr/0.14.4_svelte@3.38.2: - resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} - peerDependencies: - svelte: '>=3.19.0' - dependencies: - svelte: 3.38.2 - dev: true - - /svelte/3.38.2: - resolution: {integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==} - engines: {node: '>= 8'} - dev: true - - /vite/2.3.3: - resolution: {integrity: sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - esbuild: 0.11.23 - postcss: 8.3.0 - resolve: 1.20.0 - rollup: 2.50.4 - optionalDependencies: - fsevents: 2.3.2 - dev: true diff --git a/examples/functions_single_site/src/app.css b/examples/functions_single_site/src/app.css deleted file mode 100644 index 426f60f..0000000 --- a/examples/functions_single_site/src/app.css +++ /dev/null @@ -1,108 +0,0 @@ -@import '@fontsource/fira-mono'; - -:root { - font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-mono: 'Fira Mono', monospace; - --pure-white: #ffffff; - --primary-color: #b9c6d2; - --secondary-color: #d0dde9; - --tertiary-color: #edf0f8; - --accent-color: #ff3e00; - --heading-color: rgba(0, 0, 0, 0.7); - --text-color: #444444; - --background-without-opacity: rgba(255, 255, 255, 0.7); - --column-width: 42rem; - --column-margin-top: 4rem; -} - -body { - min-height: 100vh; - margin: 0; - background-color: var(--primary-color); - background: linear-gradient( - 180deg, - var(--primary-color) 0%, - var(--secondary-color) 10.45%, - var(--tertiary-color) 41.35% - ); -} - -body::before { - content: ''; - width: 80vw; - height: 100vh; - position: absolute; - top: 0; - left: 10vw; - z-index: -1; - background: radial-gradient( - 50% 50% at 50% 50%, - var(--pure-white) 0%, - rgba(255, 255, 255, 0) 100% - ); - opacity: 0.05; -} - -#svelte { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -h1, -h2, -p { - font-weight: 400; - color: var(--heading-color); -} - -p { - line-height: 1.5; -} - -a { - color: var(--accent-color); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1 { - font-size: 2rem; - margin-bottom: 0 0 1em 0; - text-align: center; -} - -h2 { - font-size: 1rem; -} - -pre { - font-size: 16px; - font-family: var(--font-mono); - background-color: rgba(255, 255, 255, 0.45); - border-radius: 3px; - box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); - padding: 0.5em; - overflow-x: auto; - color: var(--text-color); -} - -input, -button { - font-size: inherit; - font-family: inherit; -} - -button:focus:not(:focus-visible) { - outline: none; -} - -@media (min-width: 720px) { - h1 { - font-size: 2.4rem; - } -} diff --git a/examples/functions_single_site/src/app.html b/examples/functions_single_site/src/app.html deleted file mode 100644 index 83011ca..0000000 --- a/examples/functions_single_site/src/app.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - %svelte.head% - - -
%svelte.body%
- - diff --git a/examples/functions_single_site/src/global.d.ts b/examples/functions_single_site/src/global.d.ts deleted file mode 100644 index 63908c6..0000000 --- a/examples/functions_single_site/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/functions_single_site/src/hooks.js b/examples/functions_single_site/src/hooks.js deleted file mode 100644 index 228c2bf..0000000 --- a/examples/functions_single_site/src/hooks.js +++ /dev/null @@ -1,22 +0,0 @@ -import cookie from 'cookie'; -import {v4 as uuid} from '@lukeed/uuid'; - -export const handle = async ({request, resolve}) => { - const cookies = cookie.parse(request.headers.cookie || ''); - request.locals.userid = cookies.userid || uuid(); - - // TODO https://github.com/sveltejs/kit/issues/1046 - if (request.query.has('_method')) { - request.method = request.query.get('_method').toUpperCase(); - } - - const response = await resolve(request); - - if (!cookies.userid) { - // If this is the first time the user has visited this app, - // set a cookie so that we recognise them when they return - response.headers['set-cookie'] = `userid=${request.locals.userid}; Path=/; HttpOnly`; - } - - return response; -}; diff --git a/examples/functions_single_site/src/lib/Counter/index.svelte b/examples/functions_single_site/src/lib/Counter/index.svelte deleted file mode 100644 index 166bd52..0000000 --- a/examples/functions_single_site/src/lib/Counter/index.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - -
- - -
-
- - {Math.floor($displayed_count)} -
-
- - -
- - diff --git a/examples/functions_single_site/src/lib/Header/index.svelte b/examples/functions_single_site/src/lib/Header/index.svelte deleted file mode 100644 index c156d45..0000000 --- a/examples/functions_single_site/src/lib/Header/index.svelte +++ /dev/null @@ -1,120 +0,0 @@ - - -
-
- - SvelteKit - -
- - - -
- -
-
- - diff --git a/examples/functions_single_site/src/lib/Header/svelte-logo.svg b/examples/functions_single_site/src/lib/Header/svelte-logo.svg deleted file mode 100644 index 49492a8..0000000 --- a/examples/functions_single_site/src/lib/Header/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ -svelte-logo \ No newline at end of file diff --git a/examples/functions_single_site/src/lib/form.js b/examples/functions_single_site/src/lib/form.js deleted file mode 100644 index 61df368..0000000 --- a/examples/functions_single_site/src/lib/form.js +++ /dev/null @@ -1,53 +0,0 @@ -// This action (https://svelte.dev/tutorial/actions) allows us to -// progressively enhance a
that already works without JS -export function enhance(form, {pending, error, result}) { - let current_token; - - async function handle_submit(e) { - const token = (current_token = {}); - - e.preventDefault(); - - const body = new FormData(form); - - if (pending) { - pending(body, form); - } - - try { - const res = await fetch(form.action, { - method: form.method, - headers: { - accept: 'application/json' - }, - body - }); - - if (token !== current_token) { - return; - } - - if (res.ok) { - result(res, form); - } else if (error) { - error(res, null, form); - } else { - console.error(await res.text()); - } - } catch (error_) { - if (error) { - error(null, error_, form); - } else { - throw error_; - } - } - } - - form.addEventListener('submit', handle_submit); - - return { - destroy() { - form.removeEventListener('submit', handle_submit); - } - }; -} diff --git a/examples/functions_single_site/src/routes/__layout.svelte b/examples/functions_single_site/src/routes/__layout.svelte deleted file mode 100644 index eca95e7..0000000 --- a/examples/functions_single_site/src/routes/__layout.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
- -
- -
- - - - diff --git a/examples/functions_single_site/src/routes/about.svelte b/examples/functions_single_site/src/routes/about.svelte deleted file mode 100644 index 569d3e1..0000000 --- a/examples/functions_single_site/src/routes/about.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - About - - -
-

About this app

- -

- This is a SvelteKit app. You can make your own by typing the - following into your command line and following the prompts: -

- - -
npm init svelte@next
- -

- The page you're looking at is purely static HTML, with no client-side interactivity needed. - Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening - the devtools network panel and reloading. -

- -

- The TODOs page illustrates SvelteKit's data loading and form handling. Try using - it with JavaScript disabled! -

-
- - diff --git a/examples/functions_single_site/src/routes/index.svelte b/examples/functions_single_site/src/routes/index.svelte deleted file mode 100644 index a2f0da4..0000000 --- a/examples/functions_single_site/src/routes/index.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Home - - -
-

-
- - - Welcome - -
- - to your new
SvelteKit app -

- -

- try editing src/routes/index.svelte -

- - -
- - diff --git a/examples/functions_single_site/src/routes/todos/[uid].json.js b/examples/functions_single_site/src/routes/todos/[uid].json.js deleted file mode 100644 index 6f714df..0000000 --- a/examples/functions_single_site/src/routes/todos/[uid].json.js +++ /dev/null @@ -1,14 +0,0 @@ -import {api} from './_api.js'; - -// PATCH /todos/:uid.json -export const patch = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`, { - text: request.body.get('text'), - done: request.body.has('done') ? Boolean(request.body.get('done')) : undefined - }); -}; - -// DELETE /todos/:uid.json -export const del = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`); -}; diff --git a/examples/functions_single_site/src/routes/todos/_api.js b/examples/functions_single_site/src/routes/todos/_api.js deleted file mode 100644 index 3969c90..0000000 --- a/examples/functions_single_site/src/routes/todos/_api.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - This module is used by the /todos.json and /todos/[uid].json - endpoints to make calls to api.svelte.dev, which stores todos - for each user. The leading underscore indicates that this is - a private module, _not_ an endpoint — visiting /todos/_api - will net you a 404 response. - - (The data on the todo app will expire periodically; no - guarantees are made. Don't use it to organise your life.) -*/ - -const base = 'https://api.svelte.dev'; - -export async function api(request, resource, data) { - // User must have a cookie set - if (!request.locals.userid) { - return {status: 401}; - } - - const res = await fetch(`${base}/${resource}`, { - method: request.method, - headers: { - 'content-type': 'application/json' - }, - body: data && JSON.stringify(data) - }); - - // If the request came from a submission, the browser's default - // behaviour is to show the URL corresponding to the form's "action" - // attribute. in those cases, we want to redirect them back to the - // /todos page, rather than showing the response - if (res.ok && request.method !== 'GET' && request.headers.accept !== 'application/json') { - return { - status: 303, - headers: { - location: '/todos' - } - }; - } - - return { - status: res.status, - body: await res.json() - }; -} diff --git a/examples/functions_single_site/src/routes/todos/index.json.js b/examples/functions_single_site/src/routes/todos/index.json.js deleted file mode 100644 index ffa7196..0000000 --- a/examples/functions_single_site/src/routes/todos/index.json.js +++ /dev/null @@ -1,28 +0,0 @@ -import {api} from './_api.js'; - -// GET /todos.json -export const get = async request => { - // Request.locals.userid comes from src/hooks.js - const response = await api(request, `todos/${request.locals.userid}`); - - if (response.status === 404) { - // User hasn't created a todo list. - // start with an empty array - return {body: []}; - } - - return response; -}; - -// POST /todos.json -export const post = async request => { - const response = await api(request, `todos/${request.locals.userid}`, { - // Because index.svelte posts a FormData object, - // request.body is _also_ a (readonly) FormData - // object, which allows us to get form data - // with the `body.get(key)` method - text: request.body.get('text') - }); - - return response; -}; diff --git a/examples/functions_single_site/src/routes/todos/index.svelte b/examples/functions_single_site/src/routes/todos/index.svelte deleted file mode 100644 index 7b75ff4..0000000 --- a/examples/functions_single_site/src/routes/todos/index.svelte +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - Todos - - -
-

Todos

- - { - const created = await res.json(); - todos = [...todos, created]; - - form.reset(); - } - }} - > - - - - {#each todos as todo (todo.uid)} -
-
{ - todo.done = !!data.get('done'); - }, - result: patch - }} - > - -
- {/each} -
- - diff --git a/examples/functions_single_site/static/favicon.ico b/examples/functions_single_site/static/favicon.ico deleted file mode 100644 index d75d248..0000000 Binary files a/examples/functions_single_site/static/favicon.ico and /dev/null differ diff --git a/examples/functions_single_site/static/robots.txt b/examples/functions_single_site/static/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/examples/functions_single_site/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/functions_single_site/static/svelte-welcome.png b/examples/functions_single_site/static/svelte-welcome.png deleted file mode 100644 index fe7d2d6..0000000 Binary files a/examples/functions_single_site/static/svelte-welcome.png and /dev/null differ diff --git a/examples/functions_single_site/static/svelte-welcome.webp b/examples/functions_single_site/static/svelte-welcome.webp deleted file mode 100644 index 6ec1a28..0000000 Binary files a/examples/functions_single_site/static/svelte-welcome.webp and /dev/null differ diff --git a/examples/nested_app_dirs/.firebaserc b/examples/nested_app_dirs/.firebaserc deleted file mode 100644 index 40d3dc9..0000000 --- a/examples/nested_app_dirs/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "demo" - } -} diff --git a/examples/nested_app_dirs/app/.gitignore b/examples/nested_app_dirs/app/.gitignore deleted file mode 100644 index 3cc1d73..0000000 --- a/examples/nested_app_dirs/app/.gitignore +++ /dev/null @@ -1,19 +0,0 @@ -.DS_Store -node_modules -/.svelte-kit -/build - -# Specific to this app's firebase.json -public/ - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -firebase-debug.log* -firebase-debug.*.log* - -# Firebase cache -.firebase/ diff --git a/examples/nested_app_dirs/app/.npmrc b/examples/nested_app_dirs/app/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/examples/nested_app_dirs/app/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/examples/nested_app_dirs/app/README.md b/examples/nested_app_dirs/app/README.md deleted file mode 100644 index 82510ca..0000000 --- a/examples/nested_app_dirs/app/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm init svelte@next - -# create a new project in my-app -npm init svelte@next my-app -``` - -> Note: the `@next` is temporary - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then: - -```bash -npm run build -``` - -> You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production. diff --git a/examples/nested_app_dirs/app/jsconfig.json b/examples/nested_app_dirs/app/jsconfig.json deleted file mode 100644 index 893781f..0000000 --- a/examples/nested_app_dirs/app/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/examples/nested_app_dirs/app/package.json b/examples/nested_app_dirs/app/package.json deleted file mode 100644 index e860e9b..0000000 --- a/examples/nested_app_dirs/app/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "~TODO~", - "version": "0.0.1", - "scripts": { - "dev": "svelte-kit dev", - "build": "npx rimraf public && svelte-kit build --verbose", - "preview": "svelte-kit preview" - }, - "devDependencies": { - "@sveltejs/kit": "^1.0.0-next.111", - "svelte": "^3.34.0" - }, - "type": "module", - "dependencies": { - "@fontsource/fira-mono": "^4.2.2", - "@lukeed/uuid": "^2.0.0", - "cookie": "^0.4.1", - "svelte-adapter-firebase": "link:../../.." - } -} diff --git a/examples/nested_app_dirs/app/pnpm-lock.yaml b/examples/nested_app_dirs/app/pnpm-lock.yaml deleted file mode 100644 index 7f43b76..0000000 --- a/examples/nested_app_dirs/app/pnpm-lock.yaml +++ /dev/null @@ -1,288 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - '@fontsource/fira-mono': ^4.2.2 - '@lukeed/uuid': ^2.0.0 - '@sveltejs/kit': ^1.0.0-next.111 - cookie: ^0.4.1 - svelte: ^3.34.0 - svelte-adapter-firebase: link:../../.. - -dependencies: - '@fontsource/fira-mono': 4.3.0 - '@lukeed/uuid': 2.0.0 - cookie: 0.4.1 - svelte-adapter-firebase: link:../../.. - -devDependencies: - '@sveltejs/kit': 1.0.0-next.111_svelte@3.38.2 - svelte: 3.38.2 - -packages: - - /@fontsource/fira-mono/4.3.0: - resolution: {integrity: sha512-EizsZfvV/MLLbOUyonZV6vzispTKOkZrIhWcy3W2Ryn8OLaYw+af34DOfUpIN8U8Q8/wO5lU90iPyXePqmpRdg==} - dev: false - - /@lukeed/csprng/1.0.0: - resolution: {integrity: sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==} - engines: {node: '>=8'} - dev: false - - /@lukeed/uuid/2.0.0: - resolution: {integrity: sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==} - engines: {node: '>=8'} - dependencies: - '@lukeed/csprng': 1.0.0 - dev: false - - /@rollup/pluginutils/4.1.0: - resolution: {integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.0 - dev: true - - /@sveltejs/kit/1.0.0-next.111_svelte@3.38.2: - resolution: {integrity: sha512-w3irGw6nqK78YBzSi37MvH67EZJxoACUOnihp1nVOGOJjcHSKysjNeF8qB5/jK7It1TJwxYeu+KrK3mBAg7jqQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - hasBin: true - peerDependencies: - svelte: ^3.38.2 - dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.3 - cheap-watch: 1.0.3 - sade: 1.7.4 - svelte: 3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.3: - resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} - engines: {node: '>=12.0.0'} - peerDependencies: - svelte: ^3.37.0 - vite: ^2.2.3 - dependencies: - '@rollup/pluginutils': 4.1.0 - chalk: 4.1.1 - debug: 4.3.2 - hash-sum: 2.0.0 - require-relative: 0.8.7 - slash: 4.0.0 - source-map: 0.7.3 - svelte: 3.38.2 - svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /cheap-watch/1.0.3: - resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} - engines: {node: '>=8'} - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: true - - /cookie/0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} - engines: {node: '>= 0.6'} - dev: false - - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} - hasBin: true - requiresBuild: true - dev: true - - /estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - 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] - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - 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 - - /hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /mri/1.1.6: - resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} - engines: {node: '>=4'} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /nanoid/3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - - /postcss/8.3.0: - resolution: {integrity: sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - colorette: 1.2.2 - nanoid: 3.1.23 - source-map-js: 0.6.2 - dev: true - - /require-relative/0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.7 - dev: true - - /rollup/2.50.4: - resolution: {integrity: sha512-mBQa9O6bdqur7a6R+TXcbdYgfO2arXlDG+rSrWfwAvsiumpJjD4OS23R9QuhItuz8ysWb8mZ91CFFDQUhJY+8Q==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /sade/1.7.4: - resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} - engines: {node: '>= 6'} - dependencies: - mri: 1.1.6 - dev: true - - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /source-map-js/0.6.2: - resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - 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 - - /svelte-hmr/0.14.4_svelte@3.38.2: - resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} - peerDependencies: - svelte: '>=3.19.0' - dependencies: - svelte: 3.38.2 - dev: true - - /svelte/3.38.2: - resolution: {integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==} - engines: {node: '>= 8'} - dev: true - - /vite/2.3.3: - resolution: {integrity: sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - esbuild: 0.11.23 - postcss: 8.3.0 - resolve: 1.20.0 - rollup: 2.50.4 - optionalDependencies: - fsevents: 2.3.2 - dev: true diff --git a/examples/nested_app_dirs/app/src/app.css b/examples/nested_app_dirs/app/src/app.css deleted file mode 100644 index 426f60f..0000000 --- a/examples/nested_app_dirs/app/src/app.css +++ /dev/null @@ -1,108 +0,0 @@ -@import '@fontsource/fira-mono'; - -:root { - font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-mono: 'Fira Mono', monospace; - --pure-white: #ffffff; - --primary-color: #b9c6d2; - --secondary-color: #d0dde9; - --tertiary-color: #edf0f8; - --accent-color: #ff3e00; - --heading-color: rgba(0, 0, 0, 0.7); - --text-color: #444444; - --background-without-opacity: rgba(255, 255, 255, 0.7); - --column-width: 42rem; - --column-margin-top: 4rem; -} - -body { - min-height: 100vh; - margin: 0; - background-color: var(--primary-color); - background: linear-gradient( - 180deg, - var(--primary-color) 0%, - var(--secondary-color) 10.45%, - var(--tertiary-color) 41.35% - ); -} - -body::before { - content: ''; - width: 80vw; - height: 100vh; - position: absolute; - top: 0; - left: 10vw; - z-index: -1; - background: radial-gradient( - 50% 50% at 50% 50%, - var(--pure-white) 0%, - rgba(255, 255, 255, 0) 100% - ); - opacity: 0.05; -} - -#svelte { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -h1, -h2, -p { - font-weight: 400; - color: var(--heading-color); -} - -p { - line-height: 1.5; -} - -a { - color: var(--accent-color); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1 { - font-size: 2rem; - margin-bottom: 0 0 1em 0; - text-align: center; -} - -h2 { - font-size: 1rem; -} - -pre { - font-size: 16px; - font-family: var(--font-mono); - background-color: rgba(255, 255, 255, 0.45); - border-radius: 3px; - box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); - padding: 0.5em; - overflow-x: auto; - color: var(--text-color); -} - -input, -button { - font-size: inherit; - font-family: inherit; -} - -button:focus:not(:focus-visible) { - outline: none; -} - -@media (min-width: 720px) { - h1 { - font-size: 2.4rem; - } -} diff --git a/examples/nested_app_dirs/app/src/app.html b/examples/nested_app_dirs/app/src/app.html deleted file mode 100644 index 83011ca..0000000 --- a/examples/nested_app_dirs/app/src/app.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - %svelte.head% - - -
%svelte.body%
- - diff --git a/examples/nested_app_dirs/app/src/global.d.ts b/examples/nested_app_dirs/app/src/global.d.ts deleted file mode 100644 index 63908c6..0000000 --- a/examples/nested_app_dirs/app/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/nested_app_dirs/app/src/hooks.js b/examples/nested_app_dirs/app/src/hooks.js deleted file mode 100644 index 228c2bf..0000000 --- a/examples/nested_app_dirs/app/src/hooks.js +++ /dev/null @@ -1,22 +0,0 @@ -import cookie from 'cookie'; -import {v4 as uuid} from '@lukeed/uuid'; - -export const handle = async ({request, resolve}) => { - const cookies = cookie.parse(request.headers.cookie || ''); - request.locals.userid = cookies.userid || uuid(); - - // TODO https://github.com/sveltejs/kit/issues/1046 - if (request.query.has('_method')) { - request.method = request.query.get('_method').toUpperCase(); - } - - const response = await resolve(request); - - if (!cookies.userid) { - // If this is the first time the user has visited this app, - // set a cookie so that we recognise them when they return - response.headers['set-cookie'] = `userid=${request.locals.userid}; Path=/; HttpOnly`; - } - - return response; -}; diff --git a/examples/nested_app_dirs/app/src/lib/Counter/index.svelte b/examples/nested_app_dirs/app/src/lib/Counter/index.svelte deleted file mode 100644 index 166bd52..0000000 --- a/examples/nested_app_dirs/app/src/lib/Counter/index.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - -
- - -
-
- - {Math.floor($displayed_count)} -
-
- - -
- - diff --git a/examples/nested_app_dirs/app/src/lib/Header/index.svelte b/examples/nested_app_dirs/app/src/lib/Header/index.svelte deleted file mode 100644 index c156d45..0000000 --- a/examples/nested_app_dirs/app/src/lib/Header/index.svelte +++ /dev/null @@ -1,120 +0,0 @@ - - -
-
- - SvelteKit - -
- - - -
- -
-
- - diff --git a/examples/nested_app_dirs/app/src/lib/Header/svelte-logo.svg b/examples/nested_app_dirs/app/src/lib/Header/svelte-logo.svg deleted file mode 100644 index 49492a8..0000000 --- a/examples/nested_app_dirs/app/src/lib/Header/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ -svelte-logo \ No newline at end of file diff --git a/examples/nested_app_dirs/app/src/lib/form.js b/examples/nested_app_dirs/app/src/lib/form.js deleted file mode 100644 index 61df368..0000000 --- a/examples/nested_app_dirs/app/src/lib/form.js +++ /dev/null @@ -1,53 +0,0 @@ -// This action (https://svelte.dev/tutorial/actions) allows us to -// progressively enhance a
that already works without JS -export function enhance(form, {pending, error, result}) { - let current_token; - - async function handle_submit(e) { - const token = (current_token = {}); - - e.preventDefault(); - - const body = new FormData(form); - - if (pending) { - pending(body, form); - } - - try { - const res = await fetch(form.action, { - method: form.method, - headers: { - accept: 'application/json' - }, - body - }); - - if (token !== current_token) { - return; - } - - if (res.ok) { - result(res, form); - } else if (error) { - error(res, null, form); - } else { - console.error(await res.text()); - } - } catch (error_) { - if (error) { - error(null, error_, form); - } else { - throw error_; - } - } - } - - form.addEventListener('submit', handle_submit); - - return { - destroy() { - form.removeEventListener('submit', handle_submit); - } - }; -} diff --git a/examples/nested_app_dirs/app/src/routes/__layout.svelte b/examples/nested_app_dirs/app/src/routes/__layout.svelte deleted file mode 100644 index eca95e7..0000000 --- a/examples/nested_app_dirs/app/src/routes/__layout.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
- -
- -
- - - - diff --git a/examples/nested_app_dirs/app/src/routes/about.svelte b/examples/nested_app_dirs/app/src/routes/about.svelte deleted file mode 100644 index 569d3e1..0000000 --- a/examples/nested_app_dirs/app/src/routes/about.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - About - - -
-

About this app

- -

- This is a SvelteKit app. You can make your own by typing the - following into your command line and following the prompts: -

- - -
npm init svelte@next
- -

- The page you're looking at is purely static HTML, with no client-side interactivity needed. - Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening - the devtools network panel and reloading. -

- -

- The TODOs page illustrates SvelteKit's data loading and form handling. Try using - it with JavaScript disabled! -

-
- - diff --git a/examples/nested_app_dirs/app/src/routes/index.svelte b/examples/nested_app_dirs/app/src/routes/index.svelte deleted file mode 100644 index a2f0da4..0000000 --- a/examples/nested_app_dirs/app/src/routes/index.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Home - - -
-

-
- - - Welcome - -
- - to your new
SvelteKit app -

- -

- try editing src/routes/index.svelte -

- - -
- - diff --git a/examples/nested_app_dirs/app/src/routes/todos/[uid].json.js b/examples/nested_app_dirs/app/src/routes/todos/[uid].json.js deleted file mode 100644 index 6f714df..0000000 --- a/examples/nested_app_dirs/app/src/routes/todos/[uid].json.js +++ /dev/null @@ -1,14 +0,0 @@ -import {api} from './_api.js'; - -// PATCH /todos/:uid.json -export const patch = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`, { - text: request.body.get('text'), - done: request.body.has('done') ? Boolean(request.body.get('done')) : undefined - }); -}; - -// DELETE /todos/:uid.json -export const del = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`); -}; diff --git a/examples/nested_app_dirs/app/src/routes/todos/_api.js b/examples/nested_app_dirs/app/src/routes/todos/_api.js deleted file mode 100644 index 3969c90..0000000 --- a/examples/nested_app_dirs/app/src/routes/todos/_api.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - This module is used by the /todos.json and /todos/[uid].json - endpoints to make calls to api.svelte.dev, which stores todos - for each user. The leading underscore indicates that this is - a private module, _not_ an endpoint — visiting /todos/_api - will net you a 404 response. - - (The data on the todo app will expire periodically; no - guarantees are made. Don't use it to organise your life.) -*/ - -const base = 'https://api.svelte.dev'; - -export async function api(request, resource, data) { - // User must have a cookie set - if (!request.locals.userid) { - return {status: 401}; - } - - const res = await fetch(`${base}/${resource}`, { - method: request.method, - headers: { - 'content-type': 'application/json' - }, - body: data && JSON.stringify(data) - }); - - // If the request came from a submission, the browser's default - // behaviour is to show the URL corresponding to the form's "action" - // attribute. in those cases, we want to redirect them back to the - // /todos page, rather than showing the response - if (res.ok && request.method !== 'GET' && request.headers.accept !== 'application/json') { - return { - status: 303, - headers: { - location: '/todos' - } - }; - } - - return { - status: res.status, - body: await res.json() - }; -} diff --git a/examples/nested_app_dirs/app/src/routes/todos/index.json.js b/examples/nested_app_dirs/app/src/routes/todos/index.json.js deleted file mode 100644 index ffa7196..0000000 --- a/examples/nested_app_dirs/app/src/routes/todos/index.json.js +++ /dev/null @@ -1,28 +0,0 @@ -import {api} from './_api.js'; - -// GET /todos.json -export const get = async request => { - // Request.locals.userid comes from src/hooks.js - const response = await api(request, `todos/${request.locals.userid}`); - - if (response.status === 404) { - // User hasn't created a todo list. - // start with an empty array - return {body: []}; - } - - return response; -}; - -// POST /todos.json -export const post = async request => { - const response = await api(request, `todos/${request.locals.userid}`, { - // Because index.svelte posts a FormData object, - // request.body is _also_ a (readonly) FormData - // object, which allows us to get form data - // with the `body.get(key)` method - text: request.body.get('text') - }); - - return response; -}; diff --git a/examples/nested_app_dirs/app/src/routes/todos/index.svelte b/examples/nested_app_dirs/app/src/routes/todos/index.svelte deleted file mode 100644 index 7b75ff4..0000000 --- a/examples/nested_app_dirs/app/src/routes/todos/index.svelte +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - Todos - - -
-

Todos

- - { - const created = await res.json(); - todos = [...todos, created]; - - form.reset(); - } - }} - > - - - - {#each todos as todo (todo.uid)} -
-
{ - todo.done = !!data.get('done'); - }, - result: patch - }} - > - -
- {/each} -
- - diff --git a/examples/nested_app_dirs/app/static/favicon.ico b/examples/nested_app_dirs/app/static/favicon.ico deleted file mode 100644 index d75d248..0000000 Binary files a/examples/nested_app_dirs/app/static/favicon.ico and /dev/null differ diff --git a/examples/nested_app_dirs/app/static/robots.txt b/examples/nested_app_dirs/app/static/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/examples/nested_app_dirs/app/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/nested_app_dirs/app/static/svelte-welcome.png b/examples/nested_app_dirs/app/static/svelte-welcome.png deleted file mode 100644 index fe7d2d6..0000000 Binary files a/examples/nested_app_dirs/app/static/svelte-welcome.png and /dev/null differ diff --git a/examples/nested_app_dirs/app/static/svelte-welcome.webp b/examples/nested_app_dirs/app/static/svelte-welcome.webp deleted file mode 100644 index 6ec1a28..0000000 Binary files a/examples/nested_app_dirs/app/static/svelte-welcome.webp and /dev/null differ diff --git a/examples/nested_app_dirs/functions/pnpm-lock.yaml b/examples/nested_app_dirs/functions/pnpm-lock.yaml deleted file mode 100644 index 81f18c9..0000000 --- a/examples/nested_app_dirs/functions/pnpm-lock.yaml +++ /dev/null @@ -1,1613 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - firebase-admin: ^9.2.0 - firebase-functions: ^3.11.0 - firebase-functions-test: ^0.2.0 - -dependencies: - firebase-admin: 9.8.0 - firebase-functions: 3.13.2_firebase-admin@9.8.0 - -devDependencies: - firebase-functions-test: 0.2.3_80e614b780fa1f859e4be5fec9feb8a3 - -packages: - - /@firebase/app-types/0.6.2: - resolution: {integrity: sha512-2VXvq/K+n8XMdM4L2xy5bYp2ZXMawJXluUIDzUBvMthVR+lhxK4pfFiqr1mmDbv9ydXvEAuFsD+6DpcZuJcSSw==} - dev: false - - /@firebase/auth-interop-types/0.1.6_@firebase+util@1.1.0: - resolution: {integrity: sha512-etIi92fW3CctsmR9e3sYM3Uqnoq861M0Id9mdOPF6PWIg38BXL5k4upCNBggGUpLIS0H1grMOvy/wn1xymwe2g==} - peerDependencies: - '@firebase/app-types': 0.x - '@firebase/util': 1.x - dependencies: - '@firebase/util': 1.1.0 - dev: false - - /@firebase/component/0.5.0: - resolution: {integrity: sha512-v18csWtXb0ri+3m7wuGLY/UDgcb89vuMlZGQ//+7jEPLIQeLbylvZhol1uzW9WzoOpxMxOS2W5qyVGX36wZvEA==} - dependencies: - '@firebase/util': 1.1.0 - tslib: 2.2.0 - dev: false - - /@firebase/database-types/0.7.2: - resolution: {integrity: sha512-cdAd/dgwvC0r3oLEDUR+ULs1vBsEvy0b27nlzKhU6LQgm9fCDzgaH9nFGv8x+S9dly4B0egAXkONkVoWcOAisg==} - dependencies: - '@firebase/app-types': 0.6.2 - dev: false - - /@firebase/database/0.10.0: - resolution: {integrity: sha512-GsHvuES83Edtboij2h3txKg+yV/TD4b5Owc01SgXEQtvj1lulkHt4Ufmd9OZz1WreWQJMIqKpbVowIDHjlkZJQ==} - dependencies: - '@firebase/auth-interop-types': 0.1.6_@firebase+util@1.1.0 - '@firebase/component': 0.5.0 - '@firebase/database-types': 0.7.2 - '@firebase/logger': 0.2.6 - '@firebase/util': 1.1.0 - faye-websocket: 0.11.3 - tslib: 2.2.0 - transitivePeerDependencies: - - '@firebase/app-types' - dev: false - - /@firebase/logger/0.2.6: - resolution: {integrity: sha512-KIxcUvW/cRGWlzK9Vd2KB864HlUnCfdTH0taHE0sXW5Xl7+W68suaeau1oKNEqmc3l45azkd4NzXTCWZRZdXrw==} - dev: false - - /@firebase/util/1.1.0: - resolution: {integrity: sha512-lfuSASuPKNdfebuFR8rjFamMQUPH9iiZHcKS755Rkm/5gRT0qC7BMhCh3ZkHf7NVbplzIc/GhmX2jM+igDRCag==} - dependencies: - tslib: 2.2.0 - dev: false - - /@google-cloud/common/3.6.0: - resolution: {integrity: sha512-aHIFTqJZmeTNO9md8XxV+ywuvXF3xBm5WNmgWeeCK+XN5X+kGW0WEX94wGwj+/MdOnrVf4dL2RvSIt9J5yJG6Q==} - engines: {node: '>=10'} - dependencies: - '@google-cloud/projectify': 2.0.1 - '@google-cloud/promisify': 2.0.3 - arrify: 2.0.1 - duplexify: 4.1.1 - ent: 2.2.0 - extend: 3.0.2 - google-auth-library: 7.0.4 - retry-request: 4.1.3 - teeny-request: 7.0.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@google-cloud/firestore/4.11.0: - resolution: {integrity: sha512-Do9WJzEkFBBB+zVFvFfrrrIFEz086lrdgKQic7XsdoTgtYtq0yMu2u3kGLyxMbdasl2c2yf49FE4YvO3AYjQMQ==} - engines: {node: '>=10.10.0'} - dependencies: - fast-deep-equal: 3.1.3 - functional-red-black-tree: 1.0.1 - google-gax: 2.12.0 - protobufjs: 6.11.2 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@google-cloud/paginator/3.0.5: - resolution: {integrity: sha512-N4Uk4BT1YuskfRhKXBs0n9Lg2YTROZc6IMpkO/8DIHODtm5s3xY8K5vVBo23v/2XulY3azwITQlYWgT4GdLsUw==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - extend: 3.0.2 - dev: false - optional: true - - /@google-cloud/projectify/2.0.1: - resolution: {integrity: sha512-ZDG38U/Yy6Zr21LaR3BTiiLtpJl6RkPS/JwoRT453G+6Q1DhlV0waNf8Lfu+YVYGIIxgKnLayJRfYlFJfiI8iQ==} - engines: {node: '>=10'} - dev: false - optional: true - - /@google-cloud/promisify/2.0.3: - resolution: {integrity: sha512-d4VSA86eL/AFTe5xtyZX+ePUjE8dIFu2T8zmdeNBSa5/kNgXPCx/o/wbFNHAGLJdGnk1vddRuMESD9HbOC8irw==} - engines: {node: '>=10'} - dev: false - optional: true - - /@google-cloud/storage/5.8.5: - resolution: {integrity: sha512-i0gB9CRwQeOBYP7xuvn14M40LhHCwMjceBjxE4CTvsqL519sVY5yVKxLiAedHWGwUZHJNRa7Q2CmNfkdRwVNPg==} - engines: {node: '>=10'} - dependencies: - '@google-cloud/common': 3.6.0 - '@google-cloud/paginator': 3.0.5 - '@google-cloud/promisify': 2.0.3 - arrify: 2.0.1 - async-retry: 1.3.1 - compressible: 2.0.18 - date-and-time: 1.0.0 - duplexify: 4.1.1 - extend: 3.0.2 - gaxios: 4.2.1 - gcs-resumable-upload: 3.1.4 - get-stream: 6.0.1 - hash-stream-validation: 0.2.4 - mime: 2.5.2 - mime-types: 2.1.30 - onetime: 5.1.2 - p-limit: 3.1.0 - pumpify: 2.0.1 - snakeize: 0.1.0 - stream-events: 1.0.5 - xdg-basedir: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /@grpc/grpc-js/1.3.0: - resolution: {integrity: sha512-fiL7ZaGg2HBiFtmv6m34d5jEgEtNXfctjzB3f7b3iuT7olBX4mHLMOqOBmGTTSOTfNRQJH5+vsyk6mEz3I0Q7Q==} - engines: {node: ^8.13.0 || >=10.10.0} - dependencies: - '@types/node': 15.0.2 - dev: false - optional: true - - /@grpc/proto-loader/0.6.1: - resolution: {integrity: sha512-4DIvEOZhw5nGj3RQngIoiMXRsre3InEH136krZTcirs/G2em3WMXdtx4Lqlnb4E2ertbWGs5gPeVDKU5BHffXw==} - engines: {node: '>=6'} - hasBin: true - dependencies: - '@types/long': 4.0.1 - lodash.camelcase: 4.3.0 - long: 4.0.0 - protobufjs: 6.11.2 - yargs: 16.2.0 - dev: false - optional: true - - /@panva/asn1.js/1.0.0: - resolution: {integrity: sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==} - engines: {node: '>=10.13.0'} - dev: false - - /@protobufjs/aspromise/1.1.2: - resolution: {integrity: sha1-m4sMxmPWaafY9vXQiToU00jzD78=} - dev: false - optional: true - - /@protobufjs/base64/1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: false - optional: true - - /@protobufjs/codegen/2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: false - optional: true - - /@protobufjs/eventemitter/1.1.0: - resolution: {integrity: sha1-NVy8mLr61ZePntCV85diHx0Ga3A=} - dev: false - optional: true - - /@protobufjs/fetch/1.1.0: - resolution: {integrity: sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=} - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 - dev: false - optional: true - - /@protobufjs/float/1.0.2: - resolution: {integrity: sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=} - dev: false - optional: true - - /@protobufjs/inquire/1.1.0: - resolution: {integrity: sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=} - dev: false - optional: true - - /@protobufjs/path/1.1.2: - resolution: {integrity: sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=} - dev: false - optional: true - - /@protobufjs/pool/1.1.0: - resolution: {integrity: sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=} - dev: false - optional: true - - /@protobufjs/utf8/1.1.0: - resolution: {integrity: sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=} - dev: false - optional: true - - /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: false - optional: true - - /@types/body-parser/1.19.0: - resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==} - dependencies: - '@types/connect': 3.4.34 - '@types/node': 15.0.2 - dev: false - - /@types/connect/3.4.34: - resolution: {integrity: sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==} - dependencies: - '@types/node': 15.0.2 - dev: false - - /@types/express-jwt/0.0.42: - resolution: {integrity: sha512-WszgUddvM1t5dPpJ3LhWNH8kfNN8GPIBrAGxgIYXVCEGx6Bx4A036aAuf/r5WH9DIEdlmp7gHOYvSM6U87B0ag==} - dependencies: - '@types/express': 4.17.11 - '@types/express-unless': 0.5.1 - dev: false - - /@types/express-serve-static-core/4.17.19: - resolution: {integrity: sha512-DJOSHzX7pCiSElWaGR8kCprwibCB/3yW6vcT8VG3P0SJjnv19gnWG/AZMfM60Xj/YJIp/YCaDHyvzsFVeniARA==} - dependencies: - '@types/node': 15.0.2 - '@types/qs': 6.9.6 - '@types/range-parser': 1.2.3 - dev: false - - /@types/express-unless/0.5.1: - resolution: {integrity: sha512-5fuvg7C69lemNgl0+v+CUxDYWVPSfXHhJPst4yTLcqi4zKJpORCxnDrnnilk3k0DTq/WrAUdvXFs01+vUqUZHw==} - dependencies: - '@types/express': 4.17.11 - dev: false - - /@types/express/4.17.11: - resolution: {integrity: sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==} - dependencies: - '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.19 - '@types/qs': 6.9.6 - '@types/serve-static': 1.13.9 - dev: false - - /@types/express/4.17.3: - resolution: {integrity: sha512-I8cGRJj3pyOLs/HndoP+25vOqhqWkAZsWMEmq1qXy/b/M3ppufecUwaK2/TVDVxcV61/iSdhykUjQQ2DLSrTdg==} - dependencies: - '@types/body-parser': 1.19.0 - '@types/express-serve-static-core': 4.17.19 - '@types/serve-static': 1.13.9 - dev: false - - /@types/lodash/4.14.168: - resolution: {integrity: sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==} - dev: true - - /@types/long/4.0.1: - resolution: {integrity: sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==} - dev: false - optional: true - - /@types/mime/1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} - dev: false - - /@types/node/15.0.2: - resolution: {integrity: sha512-p68+a+KoxpoB47015IeYZYRrdqMUcpbK8re/zpFB8Ld46LHC1lPEbp3EXgkEhAYEcPvjJF6ZO+869SQ0aH1dcA==} - dev: false - - /@types/qs/6.9.6: - resolution: {integrity: sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==} - dev: false - - /@types/range-parser/1.2.3: - resolution: {integrity: sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==} - dev: false - - /@types/serve-static/1.13.9: - resolution: {integrity: sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==} - dependencies: - '@types/mime': 1.3.2 - '@types/node': 15.0.2 - dev: false - - /abort-controller/3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - dependencies: - event-target-shim: 5.0.1 - dev: false - optional: true - - /accepts/1.3.7: - resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} - engines: {node: '>= 0.6'} - dependencies: - mime-types: 2.1.30 - negotiator: 0.6.2 - dev: false - - /agent-base/6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /ansi-regex/5.0.0: - resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} - engines: {node: '>=8'} - dev: false - optional: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: false - optional: true - - /array-flatten/1.1.1: - resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} - dev: false - - /arrify/2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: false - optional: true - - /async-retry/1.3.1: - resolution: {integrity: sha512-aiieFW/7h3hY0Bq5d+ktDBejxuwR78vRu9hDUdR8rNhSaQ29VzPL4AoIRG7D/c7tdenwOcKvgPM6tIxB3cB6HA==} - dependencies: - retry: 0.12.0 - dev: false - optional: true - - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false - optional: true - - /bignumber.js/9.0.1: - resolution: {integrity: sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==} - dev: false - optional: true - - /body-parser/1.19.0: - resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.0 - content-type: 1.0.4 - debug: 2.6.9 - depd: 1.1.2 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - on-finished: 2.3.0 - qs: 6.7.0 - raw-body: 2.4.0 - type-is: 1.6.18 - dev: false - - /buffer-equal-constant-time/1.0.1: - resolution: {integrity: sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=} - dev: false - - /bytes/3.1.0: - resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} - engines: {node: '>= 0.8'} - dev: false - - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 - wrap-ansi: 7.0.0 - dev: false - optional: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: false - optional: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false - optional: true - - /compressible/2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.47.0 - dev: false - optional: true - - /configstore/5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.6 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: false - optional: true - - /content-disposition/0.5.3: - resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} - engines: {node: '>= 0.6'} - dependencies: - safe-buffer: 5.1.2 - dev: false - - /content-type/1.0.4: - resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} - engines: {node: '>= 0.6'} - dev: false - - /cookie-signature/1.0.6: - resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} - dev: false - - /cookie/0.4.0: - resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} - engines: {node: '>= 0.6'} - dev: false - - /cors/2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - dev: false - - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: false - optional: true - - /date-and-time/1.0.0: - resolution: {integrity: sha512-477D7ypIiqlXBkxhU7YtG9wWZJEQ+RUpujt2quTfgf4+E8g5fNUkB0QIL0bVyP5/TKBg8y55Hfa1R/c4bt3dEw==} - dev: false - optional: true - - /debug/2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - dependencies: - ms: 2.0.0 - dev: false - - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: false - - /depd/1.1.2: - resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} - engines: {node: '>= 0.6'} - dev: false - - /destroy/1.0.4: - resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} - dev: false - - /dicer/0.3.0: - resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==} - engines: {node: '>=4.5.0'} - dependencies: - streamsearch: 0.1.2 - dev: false - - /dot-prop/5.3.0: - resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} - engines: {node: '>=8'} - dependencies: - is-obj: 2.0.0 - dev: false - optional: true - - /duplexify/4.1.1: - resolution: {integrity: sha512-DY3xVEmVHTv1wSzKNbwoU6nVjzI369Y6sPoqfYr0/xlx3IdX2n94xIszTcjPO8W8ZIv0Wb0PXNcjuZyT4wiICA==} - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 3.6.0 - stream-shift: 1.0.1 - dev: false - optional: true - - /ecdsa-sig-formatter/1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - - /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} - dev: false - - /emoji-regex/8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false - optional: true - - /encodeurl/1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} - engines: {node: '>= 0.8'} - dev: false - - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: false - optional: true - - /ent/2.2.0: - resolution: {integrity: sha1-6WQhkyWiHQX0RGai9obtbOX13R0=} - dev: false - optional: true - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - dev: false - optional: true - - /escape-html/1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} - dev: false - - /etag/1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} - engines: {node: '>= 0.6'} - dev: false - - /event-target-shim/5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: false - optional: true - - /express/4.17.1: - resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} - engines: {node: '>= 0.10.0'} - dependencies: - accepts: 1.3.7 - array-flatten: 1.1.1 - body-parser: 1.19.0 - content-disposition: 0.5.3 - content-type: 1.0.4 - cookie: 0.4.0 - cookie-signature: 1.0.6 - debug: 2.6.9 - depd: 1.1.2 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - finalhandler: 1.1.2 - fresh: 0.5.2 - merge-descriptors: 1.0.1 - methods: 1.1.2 - on-finished: 2.3.0 - parseurl: 1.3.3 - path-to-regexp: 0.1.7 - proxy-addr: 2.0.6 - qs: 6.7.0 - range-parser: 1.2.1 - safe-buffer: 5.1.2 - send: 0.17.1 - serve-static: 1.14.1 - setprototypeof: 1.1.1 - statuses: 1.5.0 - type-is: 1.6.18 - utils-merge: 1.0.1 - vary: 1.1.2 - dev: false - - /extend/3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: false - optional: true - - /fast-deep-equal/3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: false - optional: true - - /fast-text-encoding/1.0.3: - resolution: {integrity: sha512-dtm4QZH9nZtcDt8qJiOH9fcQd1NAgi+K1O2DbE6GG1PPCK/BWfOH3idCTRQ4ImXRUOyopDEgDEnVEE7Y/2Wrig==} - dev: false - optional: true - - /faye-websocket/0.11.3: - resolution: {integrity: sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==} - engines: {node: '>=0.8.0'} - dependencies: - websocket-driver: 0.7.4 - dev: false - - /finalhandler/1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} - dependencies: - debug: 2.6.9 - encodeurl: 1.0.2 - escape-html: 1.0.3 - on-finished: 2.3.0 - parseurl: 1.3.3 - statuses: 1.5.0 - unpipe: 1.0.0 - dev: false - - /firebase-admin/9.8.0: - resolution: {integrity: sha512-v8B1qU8McZZT2hlLZ018TKz2FoKlfFkZq9mOIyzN7wJUOlAywqQX0JyqNpVGyPeU+B+77ojlvmkGTNXt2OFkgw==} - engines: {node: '>=10.10.0'} - dependencies: - '@firebase/database': 0.10.0 - '@firebase/database-types': 0.7.2 - '@types/node': 15.0.2 - dicer: 0.3.0 - jsonwebtoken: 8.5.1 - jwks-rsa: 2.0.3 - node-forge: 0.10.0 - optionalDependencies: - '@google-cloud/firestore': 4.11.0 - '@google-cloud/storage': 5.8.5 - transitivePeerDependencies: - - '@firebase/app-types' - - supports-color - dev: false - - /firebase-functions-test/0.2.3_80e614b780fa1f859e4be5fec9feb8a3: - resolution: {integrity: sha512-zYX0QTm53wCazuej7O0xqbHl90r/v1PTXt/hwa0jo1YF8nDM+iBKnLDlkIoW66MDd0R6aGg4BvKzTTdJpvigUA==} - engines: {node: '>=8.0.0'} - peerDependencies: - firebase-admin: '>=6.0.0' - firebase-functions: '>=2.0.0' - dependencies: - '@types/lodash': 4.14.168 - firebase-admin: 9.8.0 - firebase-functions: 3.13.2_firebase-admin@9.8.0 - lodash: 4.17.21 - dev: true - - /firebase-functions/3.13.2_firebase-admin@9.8.0: - resolution: {integrity: sha512-XHgAQZqA62awr4l9mNlJv6qnv5MkMkLuo+hafdW0T7IJj1PgrZtuIo5x+ib2npAcB0XhX5Sg0QR1hMYPAlfbaA==} - engines: {node: ^8.13.0 || >=10.10.0} - peerDependencies: - firebase-admin: ^8.0.0 || ^9.0.0 - dependencies: - '@types/express': 4.17.3 - cors: 2.8.5 - express: 4.17.1 - firebase-admin: 9.8.0 - lodash: 4.17.21 - dev: false - - /forwarded/0.1.2: - resolution: {integrity: sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=} - engines: {node: '>= 0.6'} - dev: false - - /fresh/0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} - engines: {node: '>= 0.6'} - dev: false - - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} - dev: false - optional: true - - /gaxios/4.2.1: - resolution: {integrity: sha512-s+rTywpw6CmfB8r9TXYkpix7YFeuRjnR/AqhaJrQqsNhsAqej+IAiCc3hadzQH3gHyWth30tvYjxH8EVjQt/8Q==} - engines: {node: '>=10'} - dependencies: - abort-controller: 3.0.0 - extend: 3.0.2 - https-proxy-agent: 5.0.0 - is-stream: 2.0.0 - node-fetch: 2.6.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /gcp-metadata/4.2.1: - resolution: {integrity: sha512-tSk+REe5iq/N+K+SK1XjZJUrFPuDqGZVzCy2vocIHIGmPlTGsa8owXMJwGkrXr73NO0AzhPW4MF2DEHz7P2AVw==} - engines: {node: '>=10'} - dependencies: - gaxios: 4.2.1 - json-bigint: 1.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /gcs-resumable-upload/3.1.4: - resolution: {integrity: sha512-5dyDfHrrVcIskiw/cPssVD4HRiwoHjhk1Nd6h5W3pQ/qffDvhfy4oNCr1f3ZXFPwTnxkCbibsB+73oOM+NvmJQ==} - engines: {node: '>=10'} - hasBin: true - dependencies: - abort-controller: 3.0.0 - configstore: 5.0.1 - extend: 3.0.2 - gaxios: 4.2.1 - google-auth-library: 7.0.4 - pumpify: 2.0.1 - stream-events: 1.0.5 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /get-caller-file/2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: false - optional: true - - /get-stream/6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: false - optional: true - - /google-auth-library/7.0.4: - resolution: {integrity: sha512-o8irYyeijEiecTXeoEe8UKNEzV1X+uhR4b2oNdapDMZixypp0J+eHimGOyx5Joa3UAeokGngdtDLXtq9vDqG2Q==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - fast-text-encoding: 1.0.3 - gaxios: 4.2.1 - gcp-metadata: 4.2.1 - gtoken: 5.2.1 - jws: 4.0.0 - lru-cache: 6.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /google-gax/2.12.0: - resolution: {integrity: sha512-UDx4ZZx85vXBe6GZ0sdRSzuegLrRQdRjCxlauX+U7i5YwOoSgcSaIM71BhcdHwGPhEkvO/SSHrEfc1wpL/J6JA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - '@grpc/grpc-js': 1.3.0 - '@grpc/proto-loader': 0.6.1 - '@types/long': 4.0.1 - abort-controller: 3.0.0 - duplexify: 4.1.1 - fast-text-encoding: 1.0.3 - google-auth-library: 7.0.4 - is-stream-ended: 0.1.4 - node-fetch: 2.6.1 - object-hash: 2.1.1 - protobufjs: 6.11.2 - retry-request: 4.1.3 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /google-p12-pem/3.0.3: - resolution: {integrity: sha512-wS0ek4ZtFx/ACKYF3JhyGe5kzH7pgiQ7J5otlumqR9psmWMYc+U9cErKlCYVYHoUaidXHdZ2xbo34kB+S+24hA==} - engines: {node: '>=10'} - hasBin: true - dependencies: - node-forge: 0.10.0 - dev: false - optional: true - - /graceful-fs/4.2.6: - resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} - dev: false - optional: true - - /gtoken/5.2.1: - resolution: {integrity: sha512-OY0BfPKe3QnMsY9MzTHTSKn+Vl2l1CcLe6BwDEQj00mbbkl5nyQ/7EUREstg4fQNZ8iYE7br4JJ7TdKeDOPWmw==} - engines: {node: '>=10'} - dependencies: - gaxios: 4.2.1 - google-p12-pem: 3.0.3 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /hash-stream-validation/0.2.4: - resolution: {integrity: sha512-Gjzu0Xn7IagXVkSu9cSFuK1fqzwtLwFhNhVL8IFJijRNMgUttFbBSIAzKuSIrsFMO1+g1RlsoN49zPIbwPDMGQ==} - dev: false - optional: true - - /http-errors/1.7.2: - resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: false - - /http-errors/1.7.3: - resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} - engines: {node: '>= 0.6'} - dependencies: - depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: 1.5.0 - toidentifier: 1.0.0 - dev: false - - /http-parser-js/0.5.3: - resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} - dev: false - - /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /https-proxy-agent/5.0.0: - resolution: {integrity: sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /iconv-lite/0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: false - - /imurmurhash/0.1.4: - resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} - engines: {node: '>=0.8.19'} - dev: false - optional: true - - /inherits/2.0.3: - resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} - dev: false - - /inherits/2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: false - - /ipaddr.js/1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: false - - /is-fullwidth-code-point/3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-obj/2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-stream-ended/0.1.4: - resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} - dev: false - optional: true - - /is-stream/2.0.0: - resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==} - engines: {node: '>=8'} - dev: false - optional: true - - /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: false - optional: true - - /jose/2.0.5: - resolution: {integrity: sha512-BAiDNeDKTMgk4tvD0BbxJ8xHEHBZgpeRZ1zGPPsitSyMgjoMWiLGYAE7H7NpP5h0lPppQajQs871E8NHUrzVPA==} - engines: {node: '>=10.13.0 < 13 || >=13.7.0'} - dependencies: - '@panva/asn1.js': 1.0.0 - dev: false - - /json-bigint/1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - dependencies: - bignumber.js: 9.0.1 - dev: false - optional: true - - /jsonwebtoken/8.5.1: - resolution: {integrity: sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==} - engines: {node: '>=4', npm: '>=1.4.28'} - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 5.7.1 - dev: false - - /jwa/1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - - /jwa/2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - dev: false - optional: true - - /jwks-rsa/2.0.3: - resolution: {integrity: sha512-/rkjXRWAp0cS00tunsHResw68P5iTQru8+jHufLNv3JHc4nObFEndfEUSuPugh09N+V9XYxKUqi7QrkmCHSSSg==} - engines: {node: '>=10 < 13 || >=14'} - dependencies: - '@types/express-jwt': 0.0.42 - debug: 4.3.1 - jose: 2.0.5 - limiter: 1.1.5 - lru-memoizer: 2.1.4 - transitivePeerDependencies: - - supports-color - dev: false - - /jws/3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - dependencies: - jwa: 1.4.1 - safe-buffer: 5.2.1 - dev: false - - /jws/4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} - dependencies: - jwa: 2.0.0 - safe-buffer: 5.2.1 - dev: false - optional: true - - /limiter/1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - dev: false - - /lodash.camelcase/4.3.0: - resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} - dev: false - optional: true - - /lodash.clonedeep/4.5.0: - resolution: {integrity: sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=} - dev: false - - /lodash.includes/4.3.0: - resolution: {integrity: sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=} - dev: false - - /lodash.isboolean/3.0.3: - resolution: {integrity: sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=} - dev: false - - /lodash.isinteger/4.0.4: - resolution: {integrity: sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=} - dev: false - - /lodash.isnumber/3.0.3: - resolution: {integrity: sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=} - dev: false - - /lodash.isplainobject/4.0.6: - resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} - dev: false - - /lodash.isstring/4.0.1: - resolution: {integrity: sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=} - dev: false - - /lodash.once/4.1.1: - resolution: {integrity: sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=} - dev: false - - /lodash/4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - /long/4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: false - optional: true - - /lru-cache/4.0.2: - resolution: {integrity: sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=} - dependencies: - pseudomap: 1.0.2 - yallist: 2.1.2 - dev: false - - /lru-cache/6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - optional: true - - /lru-memoizer/2.1.4: - resolution: {integrity: sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==} - dependencies: - lodash.clonedeep: 4.5.0 - lru-cache: 4.0.2 - dev: false - - /make-dir/3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: false - optional: true - - /media-typer/0.3.0: - resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} - engines: {node: '>= 0.6'} - dev: false - - /merge-descriptors/1.0.1: - resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} - dev: false - - /methods/1.1.2: - resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} - engines: {node: '>= 0.6'} - dev: false - - /mime-db/1.47.0: - resolution: {integrity: sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==} - engines: {node: '>= 0.6'} - dev: false - - /mime-types/2.1.30: - resolution: {integrity: sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==} - engines: {node: '>= 0.6'} - dependencies: - mime-db: 1.47.0 - dev: false - - /mime/1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: false - - /mime/2.5.2: - resolution: {integrity: sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: false - optional: true - - /mimic-fn/2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: false - optional: true - - /ms/2.0.0: - resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} - dev: false - - /ms/2.1.1: - resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} - dev: false - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: false - - /ms/2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: false - - /negotiator/0.6.2: - resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} - engines: {node: '>= 0.6'} - dev: false - - /node-fetch/2.6.1: - resolution: {integrity: sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==} - engines: {node: 4.x || >=6.0.0} - dev: false - optional: true - - /node-forge/0.10.0: - resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} - engines: {node: '>= 6.0.0'} - dev: false - - /object-assign/4.1.1: - resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} - engines: {node: '>=0.10.0'} - dev: false - - /object-hash/2.1.1: - resolution: {integrity: sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==} - engines: {node: '>= 6'} - dev: false - optional: true - - /on-finished/2.3.0: - resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} - engines: {node: '>= 0.8'} - dependencies: - ee-first: 1.1.1 - dev: false - - /once/1.4.0: - resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} - dependencies: - wrappy: 1.0.2 - dev: false - optional: true - - /onetime/5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - dependencies: - mimic-fn: 2.1.0 - dev: false - optional: true - - /p-limit/3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - dev: false - optional: true - - /parseurl/1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: false - - /path-to-regexp/0.1.7: - resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} - dev: false - - /protobufjs/6.11.2: - resolution: {integrity: sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw==} - hasBin: true - requiresBuild: true - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/long': 4.0.1 - '@types/node': 15.0.2 - long: 4.0.0 - dev: false - optional: true - - /proxy-addr/2.0.6: - resolution: {integrity: sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==} - engines: {node: '>= 0.10'} - dependencies: - forwarded: 0.1.2 - ipaddr.js: 1.9.1 - dev: false - - /pseudomap/1.0.2: - resolution: {integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM=} - dev: false - - /pump/3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: false - optional: true - - /pumpify/2.0.1: - resolution: {integrity: sha512-m7KOje7jZxrmutanlkS1daj1dS6z6BgslzOXmcSEpIlCxM3VJH7lG5QLeck/6hgF6F4crFf01UtQmNsJfweTAw==} - dependencies: - duplexify: 4.1.1 - inherits: 2.0.4 - pump: 3.0.0 - dev: false - optional: true - - /qs/6.7.0: - resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} - engines: {node: '>=0.6'} - dev: false - - /range-parser/1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: false - - /raw-body/2.4.0: - resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} - engines: {node: '>= 0.8'} - dependencies: - bytes: 3.1.0 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - dev: false - - /readable-stream/3.6.0: - resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} - engines: {node: '>= 6'} - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - dev: false - optional: true - - /require-directory/2.1.1: - resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} - engines: {node: '>=0.10.0'} - dev: false - optional: true - - /retry-request/4.1.3: - resolution: {integrity: sha512-QnRZUpuPNgX0+D1xVxul6DbJ9slvo4Rm6iV/dn63e048MvGbUZiKySVt6Tenp04JqmchxjiLltGerOJys7kJYQ==} - engines: {node: '>=8.10.0'} - dependencies: - debug: 4.3.1 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /retry/0.12.0: - resolution: {integrity: sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=} - engines: {node: '>= 4'} - dev: false - optional: true - - /safe-buffer/5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: false - - /safe-buffer/5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: false - - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false - - /semver/5.7.1: - resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} - hasBin: true - dev: false - - /semver/6.3.0: - resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} - hasBin: true - dev: false - optional: true - - /send/0.17.1: - resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} - engines: {node: '>= 0.8.0'} - dependencies: - debug: 2.6.9 - depd: 1.1.2 - destroy: 1.0.4 - encodeurl: 1.0.2 - escape-html: 1.0.3 - etag: 1.8.1 - fresh: 0.5.2 - http-errors: 1.7.3 - mime: 1.6.0 - ms: 2.1.1 - on-finished: 2.3.0 - range-parser: 1.2.1 - statuses: 1.5.0 - dev: false - - /serve-static/1.14.1: - resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} - engines: {node: '>= 0.8.0'} - dependencies: - encodeurl: 1.0.2 - escape-html: 1.0.3 - parseurl: 1.3.3 - send: 0.17.1 - dev: false - - /setprototypeof/1.1.1: - resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} - dev: false - - /signal-exit/3.0.3: - resolution: {integrity: sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==} - dev: false - optional: true - - /snakeize/0.1.0: - resolution: {integrity: sha1-EMCI2LWOsHazIpu1oE4jLOEmQi0=} - dev: false - optional: true - - /statuses/1.5.0: - resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} - engines: {node: '>= 0.6'} - dev: false - - /stream-events/1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} - dependencies: - stubs: 3.0.0 - dev: false - optional: true - - /stream-shift/1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - dev: false - optional: true - - /streamsearch/0.1.2: - resolution: {integrity: sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=} - engines: {node: '>=0.8.0'} - dev: false - - /string-width/4.2.2: - resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} - engines: {node: '>=8'} - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.0 - dev: false - optional: true - - /string_decoder/1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - dependencies: - safe-buffer: 5.2.1 - dev: false - optional: true - - /strip-ansi/6.0.0: - resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} - engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.0 - dev: false - optional: true - - /stubs/3.0.0: - resolution: {integrity: sha1-6NK6H6nJBXAwPAMLaQD31fiavls=} - dev: false - optional: true - - /teeny-request/7.0.1: - resolution: {integrity: sha512-sasJmQ37klOlplL4Ia/786M5YlOcoLGQyq2TE4WHSRupbAuDaQW0PfVxV4MtdBtRJ4ngzS+1qim8zP6Zp35qCw==} - engines: {node: '>=10'} - dependencies: - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.0 - node-fetch: 2.6.1 - stream-events: 1.0.5 - uuid: 8.3.2 - transitivePeerDependencies: - - supports-color - dev: false - optional: true - - /toidentifier/1.0.0: - resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} - engines: {node: '>=0.6'} - dev: false - - /tslib/2.2.0: - resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} - dev: false - - /type-is/1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.30 - dev: false - - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: false - optional: true - - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: false - optional: true - - /unpipe/1.0.0: - resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} - engines: {node: '>= 0.8'} - dev: false - - /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} - dev: false - optional: true - - /utils-merge/1.0.1: - resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} - engines: {node: '>= 0.4.0'} - dev: false - - /uuid/8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: false - optional: true - - /vary/1.1.2: - resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} - engines: {node: '>= 0.8'} - dev: false - - /websocket-driver/0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - dependencies: - http-parser-js: 0.5.3 - safe-buffer: 5.2.1 - websocket-extensions: 0.1.4 - dev: false - - /websocket-extensions/0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: false - - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: false - optional: true - - /wrappy/1.0.2: - resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} - dev: false - optional: true - - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.3 - typedarray-to-buffer: 3.1.5 - dev: false - optional: true - - /xdg-basedir/4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: false - optional: true - - /y18n/5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: false - optional: true - - /yallist/2.1.2: - resolution: {integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=} - dev: false - - /yallist/4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - optional: true - - /yargs-parser/20.2.7: - resolution: {integrity: sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==} - engines: {node: '>=10'} - dev: false - optional: true - - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.2 - y18n: 5.0.8 - yargs-parser: 20.2.7 - dev: false - optional: true - - /yocto-queue/0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: false - optional: true diff --git a/examples/run_custom_build_dir/.firebaserc b/examples/run_custom_build_dir/.firebaserc deleted file mode 100644 index 40d3dc9..0000000 --- a/examples/run_custom_build_dir/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "demo" - } -} diff --git a/examples/run_custom_build_dir/.gitignore b/examples/run_custom_build_dir/.gitignore deleted file mode 100644 index 17570b9..0000000 --- a/examples/run_custom_build_dir/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -.DS_Store -node_modules -/.svelte-kit -/build - -# Specific to this app's firebase.json -public/ -custom-cloud-run-build-dir - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -firebase-debug.log* -firebase-debug.*.log* - -# Firebase cache -.firebase/ diff --git a/examples/run_custom_build_dir/.npmrc b/examples/run_custom_build_dir/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/examples/run_custom_build_dir/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/examples/run_custom_build_dir/README.md b/examples/run_custom_build_dir/README.md deleted file mode 100644 index 82510ca..0000000 --- a/examples/run_custom_build_dir/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm init svelte@next - -# create a new project in my-app -npm init svelte@next my-app -``` - -> Note: the `@next` is temporary - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then: - -```bash -npm run build -``` - -> You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production. diff --git a/examples/run_custom_build_dir/jsconfig.json b/examples/run_custom_build_dir/jsconfig.json deleted file mode 100644 index 893781f..0000000 --- a/examples/run_custom_build_dir/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/examples/run_custom_build_dir/package.json b/examples/run_custom_build_dir/package.json deleted file mode 100644 index 761a088..0000000 --- a/examples/run_custom_build_dir/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "~TODO~", - "version": "0.0.1", - "scripts": { - "dev": "svelte-kit dev", - "build": "npx rimraf public && svelte-kit build --verbose", - "preview": "svelte-kit preview" - }, - "devDependencies": { - "@sveltejs/kit": "^1.0.0-next.111", - "svelte": "^3.34.0" - }, - "type": "module", - "dependencies": { - "@fontsource/fira-mono": "^4.2.2", - "@lukeed/uuid": "^2.0.0", - "cookie": "^0.4.1", - "svelte-adapter-firebase": "link:../.." - } -} diff --git a/examples/run_custom_build_dir/pnpm-lock.yaml b/examples/run_custom_build_dir/pnpm-lock.yaml deleted file mode 100644 index a43f930..0000000 --- a/examples/run_custom_build_dir/pnpm-lock.yaml +++ /dev/null @@ -1,288 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - '@fontsource/fira-mono': ^4.2.2 - '@lukeed/uuid': ^2.0.0 - '@sveltejs/kit': ^1.0.0-next.111 - cookie: ^0.4.1 - svelte: ^3.34.0 - svelte-adapter-firebase: link:../.. - -dependencies: - '@fontsource/fira-mono': 4.3.0 - '@lukeed/uuid': 2.0.0 - cookie: 0.4.1 - svelte-adapter-firebase: link:../.. - -devDependencies: - '@sveltejs/kit': 1.0.0-next.111_svelte@3.38.2 - svelte: 3.38.2 - -packages: - - /@fontsource/fira-mono/4.3.0: - resolution: {integrity: sha512-EizsZfvV/MLLbOUyonZV6vzispTKOkZrIhWcy3W2Ryn8OLaYw+af34DOfUpIN8U8Q8/wO5lU90iPyXePqmpRdg==} - dev: false - - /@lukeed/csprng/1.0.0: - resolution: {integrity: sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==} - engines: {node: '>=8'} - dev: false - - /@lukeed/uuid/2.0.0: - resolution: {integrity: sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==} - engines: {node: '>=8'} - dependencies: - '@lukeed/csprng': 1.0.0 - dev: false - - /@rollup/pluginutils/4.1.0: - resolution: {integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.0 - dev: true - - /@sveltejs/kit/1.0.0-next.111_svelte@3.38.2: - resolution: {integrity: sha512-w3irGw6nqK78YBzSi37MvH67EZJxoACUOnihp1nVOGOJjcHSKysjNeF8qB5/jK7It1TJwxYeu+KrK3mBAg7jqQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - hasBin: true - peerDependencies: - svelte: ^3.38.2 - dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.3 - cheap-watch: 1.0.3 - sade: 1.7.4 - svelte: 3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.3: - resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} - engines: {node: '>=12.0.0'} - peerDependencies: - svelte: ^3.37.0 - vite: ^2.2.3 - dependencies: - '@rollup/pluginutils': 4.1.0 - chalk: 4.1.1 - debug: 4.3.2 - hash-sum: 2.0.0 - require-relative: 0.8.7 - slash: 4.0.0 - source-map: 0.7.3 - svelte: 3.38.2 - svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /cheap-watch/1.0.3: - resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} - engines: {node: '>=8'} - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: true - - /cookie/0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} - engines: {node: '>= 0.6'} - dev: false - - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} - hasBin: true - requiresBuild: true - dev: true - - /estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - 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] - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - 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 - - /hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /mri/1.1.6: - resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} - engines: {node: '>=4'} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /nanoid/3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - - /postcss/8.3.0: - resolution: {integrity: sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - colorette: 1.2.2 - nanoid: 3.1.23 - source-map-js: 0.6.2 - dev: true - - /require-relative/0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.7 - dev: true - - /rollup/2.50.4: - resolution: {integrity: sha512-mBQa9O6bdqur7a6R+TXcbdYgfO2arXlDG+rSrWfwAvsiumpJjD4OS23R9QuhItuz8ysWb8mZ91CFFDQUhJY+8Q==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /sade/1.7.4: - resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} - engines: {node: '>= 6'} - dependencies: - mri: 1.1.6 - dev: true - - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /source-map-js/0.6.2: - resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - 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 - - /svelte-hmr/0.14.4_svelte@3.38.2: - resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} - peerDependencies: - svelte: '>=3.19.0' - dependencies: - svelte: 3.38.2 - dev: true - - /svelte/3.38.2: - resolution: {integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==} - engines: {node: '>= 8'} - dev: true - - /vite/2.3.3: - resolution: {integrity: sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - esbuild: 0.11.23 - postcss: 8.3.0 - resolve: 1.20.0 - rollup: 2.50.4 - optionalDependencies: - fsevents: 2.3.2 - dev: true diff --git a/examples/run_custom_build_dir/src/app.css b/examples/run_custom_build_dir/src/app.css deleted file mode 100644 index 426f60f..0000000 --- a/examples/run_custom_build_dir/src/app.css +++ /dev/null @@ -1,108 +0,0 @@ -@import '@fontsource/fira-mono'; - -:root { - font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-mono: 'Fira Mono', monospace; - --pure-white: #ffffff; - --primary-color: #b9c6d2; - --secondary-color: #d0dde9; - --tertiary-color: #edf0f8; - --accent-color: #ff3e00; - --heading-color: rgba(0, 0, 0, 0.7); - --text-color: #444444; - --background-without-opacity: rgba(255, 255, 255, 0.7); - --column-width: 42rem; - --column-margin-top: 4rem; -} - -body { - min-height: 100vh; - margin: 0; - background-color: var(--primary-color); - background: linear-gradient( - 180deg, - var(--primary-color) 0%, - var(--secondary-color) 10.45%, - var(--tertiary-color) 41.35% - ); -} - -body::before { - content: ''; - width: 80vw; - height: 100vh; - position: absolute; - top: 0; - left: 10vw; - z-index: -1; - background: radial-gradient( - 50% 50% at 50% 50%, - var(--pure-white) 0%, - rgba(255, 255, 255, 0) 100% - ); - opacity: 0.05; -} - -#svelte { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -h1, -h2, -p { - font-weight: 400; - color: var(--heading-color); -} - -p { - line-height: 1.5; -} - -a { - color: var(--accent-color); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1 { - font-size: 2rem; - margin-bottom: 0 0 1em 0; - text-align: center; -} - -h2 { - font-size: 1rem; -} - -pre { - font-size: 16px; - font-family: var(--font-mono); - background-color: rgba(255, 255, 255, 0.45); - border-radius: 3px; - box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); - padding: 0.5em; - overflow-x: auto; - color: var(--text-color); -} - -input, -button { - font-size: inherit; - font-family: inherit; -} - -button:focus:not(:focus-visible) { - outline: none; -} - -@media (min-width: 720px) { - h1 { - font-size: 2.4rem; - } -} diff --git a/examples/run_custom_build_dir/src/app.html b/examples/run_custom_build_dir/src/app.html deleted file mode 100644 index 83011ca..0000000 --- a/examples/run_custom_build_dir/src/app.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - %svelte.head% - - -
%svelte.body%
- - diff --git a/examples/run_custom_build_dir/src/global.d.ts b/examples/run_custom_build_dir/src/global.d.ts deleted file mode 100644 index 63908c6..0000000 --- a/examples/run_custom_build_dir/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/run_custom_build_dir/src/hooks.js b/examples/run_custom_build_dir/src/hooks.js deleted file mode 100644 index 228c2bf..0000000 --- a/examples/run_custom_build_dir/src/hooks.js +++ /dev/null @@ -1,22 +0,0 @@ -import cookie from 'cookie'; -import {v4 as uuid} from '@lukeed/uuid'; - -export const handle = async ({request, resolve}) => { - const cookies = cookie.parse(request.headers.cookie || ''); - request.locals.userid = cookies.userid || uuid(); - - // TODO https://github.com/sveltejs/kit/issues/1046 - if (request.query.has('_method')) { - request.method = request.query.get('_method').toUpperCase(); - } - - const response = await resolve(request); - - if (!cookies.userid) { - // If this is the first time the user has visited this app, - // set a cookie so that we recognise them when they return - response.headers['set-cookie'] = `userid=${request.locals.userid}; Path=/; HttpOnly`; - } - - return response; -}; diff --git a/examples/run_custom_build_dir/src/lib/Counter/index.svelte b/examples/run_custom_build_dir/src/lib/Counter/index.svelte deleted file mode 100644 index 166bd52..0000000 --- a/examples/run_custom_build_dir/src/lib/Counter/index.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - -
- - -
-
- - {Math.floor($displayed_count)} -
-
- - -
- - diff --git a/examples/run_custom_build_dir/src/lib/Header/index.svelte b/examples/run_custom_build_dir/src/lib/Header/index.svelte deleted file mode 100644 index c156d45..0000000 --- a/examples/run_custom_build_dir/src/lib/Header/index.svelte +++ /dev/null @@ -1,120 +0,0 @@ - - -
-
- - SvelteKit - -
- - - -
- -
-
- - diff --git a/examples/run_custom_build_dir/src/lib/Header/svelte-logo.svg b/examples/run_custom_build_dir/src/lib/Header/svelte-logo.svg deleted file mode 100644 index 49492a8..0000000 --- a/examples/run_custom_build_dir/src/lib/Header/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ -svelte-logo \ No newline at end of file diff --git a/examples/run_custom_build_dir/src/lib/form.js b/examples/run_custom_build_dir/src/lib/form.js deleted file mode 100644 index 61df368..0000000 --- a/examples/run_custom_build_dir/src/lib/form.js +++ /dev/null @@ -1,53 +0,0 @@ -// This action (https://svelte.dev/tutorial/actions) allows us to -// progressively enhance a
that already works without JS -export function enhance(form, {pending, error, result}) { - let current_token; - - async function handle_submit(e) { - const token = (current_token = {}); - - e.preventDefault(); - - const body = new FormData(form); - - if (pending) { - pending(body, form); - } - - try { - const res = await fetch(form.action, { - method: form.method, - headers: { - accept: 'application/json' - }, - body - }); - - if (token !== current_token) { - return; - } - - if (res.ok) { - result(res, form); - } else if (error) { - error(res, null, form); - } else { - console.error(await res.text()); - } - } catch (error_) { - if (error) { - error(null, error_, form); - } else { - throw error_; - } - } - } - - form.addEventListener('submit', handle_submit); - - return { - destroy() { - form.removeEventListener('submit', handle_submit); - } - }; -} diff --git a/examples/run_custom_build_dir/src/routes/__layout.svelte b/examples/run_custom_build_dir/src/routes/__layout.svelte deleted file mode 100644 index eca95e7..0000000 --- a/examples/run_custom_build_dir/src/routes/__layout.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
- -
- -
- - - - diff --git a/examples/run_custom_build_dir/src/routes/about.svelte b/examples/run_custom_build_dir/src/routes/about.svelte deleted file mode 100644 index 569d3e1..0000000 --- a/examples/run_custom_build_dir/src/routes/about.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - About - - -
-

About this app

- -

- This is a SvelteKit app. You can make your own by typing the - following into your command line and following the prompts: -

- - -
npm init svelte@next
- -

- The page you're looking at is purely static HTML, with no client-side interactivity needed. - Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening - the devtools network panel and reloading. -

- -

- The TODOs page illustrates SvelteKit's data loading and form handling. Try using - it with JavaScript disabled! -

-
- - diff --git a/examples/run_custom_build_dir/src/routes/index.svelte b/examples/run_custom_build_dir/src/routes/index.svelte deleted file mode 100644 index a2f0da4..0000000 --- a/examples/run_custom_build_dir/src/routes/index.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Home - - -
-

-
- - - Welcome - -
- - to your new
SvelteKit app -

- -

- try editing src/routes/index.svelte -

- - -
- - diff --git a/examples/run_custom_build_dir/src/routes/todos/[uid].json.js b/examples/run_custom_build_dir/src/routes/todos/[uid].json.js deleted file mode 100644 index 6f714df..0000000 --- a/examples/run_custom_build_dir/src/routes/todos/[uid].json.js +++ /dev/null @@ -1,14 +0,0 @@ -import {api} from './_api.js'; - -// PATCH /todos/:uid.json -export const patch = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`, { - text: request.body.get('text'), - done: request.body.has('done') ? Boolean(request.body.get('done')) : undefined - }); -}; - -// DELETE /todos/:uid.json -export const del = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`); -}; diff --git a/examples/run_custom_build_dir/src/routes/todos/_api.js b/examples/run_custom_build_dir/src/routes/todos/_api.js deleted file mode 100644 index 3969c90..0000000 --- a/examples/run_custom_build_dir/src/routes/todos/_api.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - This module is used by the /todos.json and /todos/[uid].json - endpoints to make calls to api.svelte.dev, which stores todos - for each user. The leading underscore indicates that this is - a private module, _not_ an endpoint — visiting /todos/_api - will net you a 404 response. - - (The data on the todo app will expire periodically; no - guarantees are made. Don't use it to organise your life.) -*/ - -const base = 'https://api.svelte.dev'; - -export async function api(request, resource, data) { - // User must have a cookie set - if (!request.locals.userid) { - return {status: 401}; - } - - const res = await fetch(`${base}/${resource}`, { - method: request.method, - headers: { - 'content-type': 'application/json' - }, - body: data && JSON.stringify(data) - }); - - // If the request came from a submission, the browser's default - // behaviour is to show the URL corresponding to the form's "action" - // attribute. in those cases, we want to redirect them back to the - // /todos page, rather than showing the response - if (res.ok && request.method !== 'GET' && request.headers.accept !== 'application/json') { - return { - status: 303, - headers: { - location: '/todos' - } - }; - } - - return { - status: res.status, - body: await res.json() - }; -} diff --git a/examples/run_custom_build_dir/src/routes/todos/index.json.js b/examples/run_custom_build_dir/src/routes/todos/index.json.js deleted file mode 100644 index ffa7196..0000000 --- a/examples/run_custom_build_dir/src/routes/todos/index.json.js +++ /dev/null @@ -1,28 +0,0 @@ -import {api} from './_api.js'; - -// GET /todos.json -export const get = async request => { - // Request.locals.userid comes from src/hooks.js - const response = await api(request, `todos/${request.locals.userid}`); - - if (response.status === 404) { - // User hasn't created a todo list. - // start with an empty array - return {body: []}; - } - - return response; -}; - -// POST /todos.json -export const post = async request => { - const response = await api(request, `todos/${request.locals.userid}`, { - // Because index.svelte posts a FormData object, - // request.body is _also_ a (readonly) FormData - // object, which allows us to get form data - // with the `body.get(key)` method - text: request.body.get('text') - }); - - return response; -}; diff --git a/examples/run_custom_build_dir/src/routes/todos/index.svelte b/examples/run_custom_build_dir/src/routes/todos/index.svelte deleted file mode 100644 index 7b75ff4..0000000 --- a/examples/run_custom_build_dir/src/routes/todos/index.svelte +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - Todos - - -
-

Todos

- - { - const created = await res.json(); - todos = [...todos, created]; - - form.reset(); - } - }} - > - - - - {#each todos as todo (todo.uid)} -
-
{ - todo.done = !!data.get('done'); - }, - result: patch - }} - > - -
- {/each} -
- - diff --git a/examples/run_custom_build_dir/static/favicon.ico b/examples/run_custom_build_dir/static/favicon.ico deleted file mode 100644 index d75d248..0000000 Binary files a/examples/run_custom_build_dir/static/favicon.ico and /dev/null differ diff --git a/examples/run_custom_build_dir/static/robots.txt b/examples/run_custom_build_dir/static/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/examples/run_custom_build_dir/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/run_custom_build_dir/static/svelte-welcome.png b/examples/run_custom_build_dir/static/svelte-welcome.png deleted file mode 100644 index fe7d2d6..0000000 Binary files a/examples/run_custom_build_dir/static/svelte-welcome.png and /dev/null differ diff --git a/examples/run_custom_build_dir/static/svelte-welcome.webp b/examples/run_custom_build_dir/static/svelte-welcome.webp deleted file mode 100644 index 6ec1a28..0000000 Binary files a/examples/run_custom_build_dir/static/svelte-welcome.webp and /dev/null differ diff --git a/examples/run_single_site/.firebaserc b/examples/run_single_site/.firebaserc deleted file mode 100644 index 40d3dc9..0000000 --- a/examples/run_single_site/.firebaserc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "projects": { - "default": "demo" - } -} diff --git a/examples/run_single_site/.gitignore b/examples/run_single_site/.gitignore deleted file mode 100644 index cc7e2ea..0000000 --- a/examples/run_single_site/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -.DS_Store -node_modules -/.svelte-kit -/build - -# Specific to this app's firebase.json -public/ -.cloudrun - -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -firebase-debug.log* -firebase-debug.*.log* - -# Firebase cache -.firebase/ diff --git a/examples/run_single_site/.npmrc b/examples/run_single_site/.npmrc deleted file mode 100644 index b6f27f1..0000000 --- a/examples/run_single_site/.npmrc +++ /dev/null @@ -1 +0,0 @@ -engine-strict=true diff --git a/examples/run_single_site/README.md b/examples/run_single_site/README.md deleted file mode 100644 index 82510ca..0000000 --- a/examples/run_single_site/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# create-svelte - -Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte); - -## Creating a project - -If you're seeing this, you've probably already done this step. Congrats! - -```bash -# create a new project in the current directory -npm init svelte@next - -# create a new project in my-app -npm init svelte@next my-app -``` - -> Note: the `@next` is temporary - -## Developing - -Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server: - -```bash -npm run dev - -# or start the server and open the app in a new browser tab -npm run dev -- --open -``` - -## Building - -Before creating a production version of your app, install an [adapter](https://kit.svelte.dev/docs#adapters) for your target environment. Then: - -```bash -npm run build -``` - -> You can preview the built app with `npm run preview`, regardless of whether you installed an adapter. This should _not_ be used to serve your app in production. diff --git a/examples/run_single_site/jsconfig.json b/examples/run_single_site/jsconfig.json deleted file mode 100644 index 893781f..0000000 --- a/examples/run_single_site/jsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "paths": { - "$lib/*": ["src/lib/*"] - } - }, - "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] -} diff --git a/examples/run_single_site/package.json b/examples/run_single_site/package.json deleted file mode 100644 index 761a088..0000000 --- a/examples/run_single_site/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "~TODO~", - "version": "0.0.1", - "scripts": { - "dev": "svelte-kit dev", - "build": "npx rimraf public && svelte-kit build --verbose", - "preview": "svelte-kit preview" - }, - "devDependencies": { - "@sveltejs/kit": "^1.0.0-next.111", - "svelte": "^3.34.0" - }, - "type": "module", - "dependencies": { - "@fontsource/fira-mono": "^4.2.2", - "@lukeed/uuid": "^2.0.0", - "cookie": "^0.4.1", - "svelte-adapter-firebase": "link:../.." - } -} diff --git a/examples/run_single_site/pnpm-lock.yaml b/examples/run_single_site/pnpm-lock.yaml deleted file mode 100644 index a43f930..0000000 --- a/examples/run_single_site/pnpm-lock.yaml +++ /dev/null @@ -1,288 +0,0 @@ -lockfileVersion: 5.3 - -specifiers: - '@fontsource/fira-mono': ^4.2.2 - '@lukeed/uuid': ^2.0.0 - '@sveltejs/kit': ^1.0.0-next.111 - cookie: ^0.4.1 - svelte: ^3.34.0 - svelte-adapter-firebase: link:../.. - -dependencies: - '@fontsource/fira-mono': 4.3.0 - '@lukeed/uuid': 2.0.0 - cookie: 0.4.1 - svelte-adapter-firebase: link:../.. - -devDependencies: - '@sveltejs/kit': 1.0.0-next.111_svelte@3.38.2 - svelte: 3.38.2 - -packages: - - /@fontsource/fira-mono/4.3.0: - resolution: {integrity: sha512-EizsZfvV/MLLbOUyonZV6vzispTKOkZrIhWcy3W2Ryn8OLaYw+af34DOfUpIN8U8Q8/wO5lU90iPyXePqmpRdg==} - dev: false - - /@lukeed/csprng/1.0.0: - resolution: {integrity: sha512-ruuGHsnabmObBdeMg3vKdGRmh06Oog3eFpf/Tk6X0kDSJDpJTDCj2dqdp1+0VjzIUgHlFF9GBm7uFqfYhhdX9g==} - engines: {node: '>=8'} - dev: false - - /@lukeed/uuid/2.0.0: - resolution: {integrity: sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==} - engines: {node: '>=8'} - dependencies: - '@lukeed/csprng': 1.0.0 - dev: false - - /@rollup/pluginutils/4.1.0: - resolution: {integrity: sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - estree-walker: 2.0.2 - picomatch: 2.3.0 - dev: true - - /@sveltejs/kit/1.0.0-next.111_svelte@3.38.2: - resolution: {integrity: sha512-w3irGw6nqK78YBzSi37MvH67EZJxoACUOnihp1nVOGOJjcHSKysjNeF8qB5/jK7It1TJwxYeu+KrK3mBAg7jqQ==} - engines: {node: ^12.20 || ^14.13.1 || >= 16} - hasBin: true - peerDependencies: - svelte: ^3.38.2 - dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.10_svelte@3.38.2+vite@2.3.3 - cheap-watch: 1.0.3 - sade: 1.7.4 - svelte: 3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /@sveltejs/vite-plugin-svelte/1.0.0-next.10_svelte@3.38.2+vite@2.3.3: - resolution: {integrity: sha512-ImvxbhPePm2hWNTKBSA3LHAYGwiEjHjvvgfPLXm4R87sfZ+BMXql9jBmDpzUC/URBLT4BB3Jxos/i523qkJBHg==} - engines: {node: '>=12.0.0'} - peerDependencies: - svelte: ^3.37.0 - vite: ^2.2.3 - dependencies: - '@rollup/pluginutils': 4.1.0 - chalk: 4.1.1 - debug: 4.3.2 - hash-sum: 2.0.0 - require-relative: 0.8.7 - slash: 4.0.0 - source-map: 0.7.3 - svelte: 3.38.2 - svelte-hmr: 0.14.4_svelte@3.38.2 - vite: 2.3.3 - transitivePeerDependencies: - - rollup - - supports-color - dev: true - - /ansi-styles/4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - dev: true - - /chalk/4.1.1: - resolution: {integrity: sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - dev: true - - /cheap-watch/1.0.3: - resolution: {integrity: sha512-xC5CruMhLzjPwJ5ecUxGu1uGmwJQykUhqd2QrCrYbwvsFYdRyviu6jG9+pccwDXJR/OpmOTOJ9yLFunVgQu9wg==} - engines: {node: '>=8'} - dev: true - - /color-convert/2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - dev: true - - /color-name/1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true - - /colorette/1.2.2: - resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} - dev: true - - /cookie/0.4.1: - resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} - engines: {node: '>= 0.6'} - dev: false - - /debug/4.3.2: - resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} - hasBin: true - requiresBuild: true - dev: true - - /estree-walker/2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - 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] - dev: true - optional: true - - /function-bind/1.1.1: - resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - 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 - - /hash-sum/2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - dev: true - - /is-core-module/2.4.0: - resolution: {integrity: sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==} - dependencies: - has: 1.0.3 - dev: true - - /mri/1.1.6: - resolution: {integrity: sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==} - engines: {node: '>=4'} - dev: true - - /ms/2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true - - /nanoid/3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /path-parse/1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true - - /picomatch/2.3.0: - resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} - engines: {node: '>=8.6'} - dev: true - - /postcss/8.3.0: - resolution: {integrity: sha512-+ogXpdAjWGa+fdYY5BQ96V/6tAo+TdSSIMP5huJBIygdWwKtVoB5JWZ7yUd4xZ8r+8Kvvx4nyg/PQ071H4UtcQ==} - engines: {node: ^10 || ^12 || >=14} - dependencies: - colorette: 1.2.2 - nanoid: 3.1.23 - source-map-js: 0.6.2 - dev: true - - /require-relative/0.8.7: - resolution: {integrity: sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=} - dev: true - - /resolve/1.20.0: - resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} - dependencies: - is-core-module: 2.4.0 - path-parse: 1.0.7 - dev: true - - /rollup/2.50.4: - resolution: {integrity: sha512-mBQa9O6bdqur7a6R+TXcbdYgfO2arXlDG+rSrWfwAvsiumpJjD4OS23R9QuhItuz8ysWb8mZ91CFFDQUhJY+8Q==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /sade/1.7.4: - resolution: {integrity: sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==} - engines: {node: '>= 6'} - dependencies: - mri: 1.1.6 - dev: true - - /slash/4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true - - /source-map-js/0.6.2: - resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} - engines: {node: '>=0.10.0'} - dev: true - - /source-map/0.7.3: - resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} - engines: {node: '>= 8'} - 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 - - /svelte-hmr/0.14.4_svelte@3.38.2: - resolution: {integrity: sha512-kItFF7vqzStckSigoFmMnxJpTOdB9TWnQAW6Js+yAB4277tLbJIIE5KBlGHNmJNpA7MguqidsPB27Uw5UzQPCA==} - peerDependencies: - svelte: '>=3.19.0' - dependencies: - svelte: 3.38.2 - dev: true - - /svelte/3.38.2: - resolution: {integrity: sha512-q5Dq0/QHh4BLJyEVWGe7Cej5NWs040LWjMbicBGZ+3qpFWJ1YObRmUDZKbbovddLC9WW7THTj3kYbTOFmU9fbg==} - engines: {node: '>= 8'} - dev: true - - /vite/2.3.3: - resolution: {integrity: sha512-eO1iwRbn3/BfkNVMNJDeANAFCZ5NobYOFPu7IqfY7DcI7I9nFGjJIZid0EViTmLDGwwSUPmRAq3cRBbO3+DsMA==} - engines: {node: '>=12.0.0'} - hasBin: true - dependencies: - esbuild: 0.11.23 - postcss: 8.3.0 - resolve: 1.20.0 - rollup: 2.50.4 - optionalDependencies: - fsevents: 2.3.2 - dev: true diff --git a/examples/run_single_site/src/app.css b/examples/run_single_site/src/app.css deleted file mode 100644 index 426f60f..0000000 --- a/examples/run_single_site/src/app.css +++ /dev/null @@ -1,108 +0,0 @@ -@import '@fontsource/fira-mono'; - -:root { - font-family: Arial, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, - Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - --font-mono: 'Fira Mono', monospace; - --pure-white: #ffffff; - --primary-color: #b9c6d2; - --secondary-color: #d0dde9; - --tertiary-color: #edf0f8; - --accent-color: #ff3e00; - --heading-color: rgba(0, 0, 0, 0.7); - --text-color: #444444; - --background-without-opacity: rgba(255, 255, 255, 0.7); - --column-width: 42rem; - --column-margin-top: 4rem; -} - -body { - min-height: 100vh; - margin: 0; - background-color: var(--primary-color); - background: linear-gradient( - 180deg, - var(--primary-color) 0%, - var(--secondary-color) 10.45%, - var(--tertiary-color) 41.35% - ); -} - -body::before { - content: ''; - width: 80vw; - height: 100vh; - position: absolute; - top: 0; - left: 10vw; - z-index: -1; - background: radial-gradient( - 50% 50% at 50% 50%, - var(--pure-white) 0%, - rgba(255, 255, 255, 0) 100% - ); - opacity: 0.05; -} - -#svelte { - min-height: 100vh; - display: flex; - flex-direction: column; -} - -h1, -h2, -p { - font-weight: 400; - color: var(--heading-color); -} - -p { - line-height: 1.5; -} - -a { - color: var(--accent-color); - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -h1 { - font-size: 2rem; - margin-bottom: 0 0 1em 0; - text-align: center; -} - -h2 { - font-size: 1rem; -} - -pre { - font-size: 16px; - font-family: var(--font-mono); - background-color: rgba(255, 255, 255, 0.45); - border-radius: 3px; - box-shadow: 2px 2px 6px rgb(255 255 255 / 25%); - padding: 0.5em; - overflow-x: auto; - color: var(--text-color); -} - -input, -button { - font-size: inherit; - font-family: inherit; -} - -button:focus:not(:focus-visible) { - outline: none; -} - -@media (min-width: 720px) { - h1 { - font-size: 2.4rem; - } -} diff --git a/examples/run_single_site/src/app.html b/examples/run_single_site/src/app.html deleted file mode 100644 index 83011ca..0000000 --- a/examples/run_single_site/src/app.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - %svelte.head% - - -
%svelte.body%
- - diff --git a/examples/run_single_site/src/global.d.ts b/examples/run_single_site/src/global.d.ts deleted file mode 100644 index 63908c6..0000000 --- a/examples/run_single_site/src/global.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/examples/run_single_site/src/hooks.js b/examples/run_single_site/src/hooks.js deleted file mode 100644 index 228c2bf..0000000 --- a/examples/run_single_site/src/hooks.js +++ /dev/null @@ -1,22 +0,0 @@ -import cookie from 'cookie'; -import {v4 as uuid} from '@lukeed/uuid'; - -export const handle = async ({request, resolve}) => { - const cookies = cookie.parse(request.headers.cookie || ''); - request.locals.userid = cookies.userid || uuid(); - - // TODO https://github.com/sveltejs/kit/issues/1046 - if (request.query.has('_method')) { - request.method = request.query.get('_method').toUpperCase(); - } - - const response = await resolve(request); - - if (!cookies.userid) { - // If this is the first time the user has visited this app, - // set a cookie so that we recognise them when they return - response.headers['set-cookie'] = `userid=${request.locals.userid}; Path=/; HttpOnly`; - } - - return response; -}; diff --git a/examples/run_single_site/src/lib/Counter/index.svelte b/examples/run_single_site/src/lib/Counter/index.svelte deleted file mode 100644 index 166bd52..0000000 --- a/examples/run_single_site/src/lib/Counter/index.svelte +++ /dev/null @@ -1,98 +0,0 @@ - - -
- - -
-
- - {Math.floor($displayed_count)} -
-
- - -
- - diff --git a/examples/run_single_site/src/lib/Header/index.svelte b/examples/run_single_site/src/lib/Header/index.svelte deleted file mode 100644 index c156d45..0000000 --- a/examples/run_single_site/src/lib/Header/index.svelte +++ /dev/null @@ -1,120 +0,0 @@ - - -
-
- - SvelteKit - -
- - - -
- -
-
- - diff --git a/examples/run_single_site/src/lib/Header/svelte-logo.svg b/examples/run_single_site/src/lib/Header/svelte-logo.svg deleted file mode 100644 index 49492a8..0000000 --- a/examples/run_single_site/src/lib/Header/svelte-logo.svg +++ /dev/null @@ -1 +0,0 @@ -svelte-logo \ No newline at end of file diff --git a/examples/run_single_site/src/lib/form.js b/examples/run_single_site/src/lib/form.js deleted file mode 100644 index 61df368..0000000 --- a/examples/run_single_site/src/lib/form.js +++ /dev/null @@ -1,53 +0,0 @@ -// This action (https://svelte.dev/tutorial/actions) allows us to -// progressively enhance a
that already works without JS -export function enhance(form, {pending, error, result}) { - let current_token; - - async function handle_submit(e) { - const token = (current_token = {}); - - e.preventDefault(); - - const body = new FormData(form); - - if (pending) { - pending(body, form); - } - - try { - const res = await fetch(form.action, { - method: form.method, - headers: { - accept: 'application/json' - }, - body - }); - - if (token !== current_token) { - return; - } - - if (res.ok) { - result(res, form); - } else if (error) { - error(res, null, form); - } else { - console.error(await res.text()); - } - } catch (error_) { - if (error) { - error(null, error_, form); - } else { - throw error_; - } - } - } - - form.addEventListener('submit', handle_submit); - - return { - destroy() { - form.removeEventListener('submit', handle_submit); - } - }; -} diff --git a/examples/run_single_site/src/routes/__layout.svelte b/examples/run_single_site/src/routes/__layout.svelte deleted file mode 100644 index eca95e7..0000000 --- a/examples/run_single_site/src/routes/__layout.svelte +++ /dev/null @@ -1,45 +0,0 @@ - - -
- -
- -
- - - - diff --git a/examples/run_single_site/src/routes/about.svelte b/examples/run_single_site/src/routes/about.svelte deleted file mode 100644 index 569d3e1..0000000 --- a/examples/run_single_site/src/routes/about.svelte +++ /dev/null @@ -1,50 +0,0 @@ - - - - About - - -
-

About this app

- -

- This is a SvelteKit app. You can make your own by typing the - following into your command line and following the prompts: -

- - -
npm init svelte@next
- -

- The page you're looking at is purely static HTML, with no client-side interactivity needed. - Because of that, we don't need to load any JavaScript. Try viewing the page's source, or opening - the devtools network panel and reloading. -

- -

- The TODOs page illustrates SvelteKit's data loading and form handling. Try using - it with JavaScript disabled! -

-
- - diff --git a/examples/run_single_site/src/routes/index.svelte b/examples/run_single_site/src/routes/index.svelte deleted file mode 100644 index a2f0da4..0000000 --- a/examples/run_single_site/src/routes/index.svelte +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Home - - -
-

-
- - - Welcome - -
- - to your new
SvelteKit app -

- -

- try editing src/routes/index.svelte -

- - -
- - diff --git a/examples/run_single_site/src/routes/todos/[uid].json.js b/examples/run_single_site/src/routes/todos/[uid].json.js deleted file mode 100644 index 6f714df..0000000 --- a/examples/run_single_site/src/routes/todos/[uid].json.js +++ /dev/null @@ -1,14 +0,0 @@ -import {api} from './_api.js'; - -// PATCH /todos/:uid.json -export const patch = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`, { - text: request.body.get('text'), - done: request.body.has('done') ? Boolean(request.body.get('done')) : undefined - }); -}; - -// DELETE /todos/:uid.json -export const del = async request => { - return api(request, `todos/${request.locals.userid}/${request.params.uid}`); -}; diff --git a/examples/run_single_site/src/routes/todos/_api.js b/examples/run_single_site/src/routes/todos/_api.js deleted file mode 100644 index 3969c90..0000000 --- a/examples/run_single_site/src/routes/todos/_api.js +++ /dev/null @@ -1,45 +0,0 @@ -/* - This module is used by the /todos.json and /todos/[uid].json - endpoints to make calls to api.svelte.dev, which stores todos - for each user. The leading underscore indicates that this is - a private module, _not_ an endpoint — visiting /todos/_api - will net you a 404 response. - - (The data on the todo app will expire periodically; no - guarantees are made. Don't use it to organise your life.) -*/ - -const base = 'https://api.svelte.dev'; - -export async function api(request, resource, data) { - // User must have a cookie set - if (!request.locals.userid) { - return {status: 401}; - } - - const res = await fetch(`${base}/${resource}`, { - method: request.method, - headers: { - 'content-type': 'application/json' - }, - body: data && JSON.stringify(data) - }); - - // If the request came from a submission, the browser's default - // behaviour is to show the URL corresponding to the form's "action" - // attribute. in those cases, we want to redirect them back to the - // /todos page, rather than showing the response - if (res.ok && request.method !== 'GET' && request.headers.accept !== 'application/json') { - return { - status: 303, - headers: { - location: '/todos' - } - }; - } - - return { - status: res.status, - body: await res.json() - }; -} diff --git a/examples/run_single_site/src/routes/todos/index.json.js b/examples/run_single_site/src/routes/todos/index.json.js deleted file mode 100644 index ffa7196..0000000 --- a/examples/run_single_site/src/routes/todos/index.json.js +++ /dev/null @@ -1,28 +0,0 @@ -import {api} from './_api.js'; - -// GET /todos.json -export const get = async request => { - // Request.locals.userid comes from src/hooks.js - const response = await api(request, `todos/${request.locals.userid}`); - - if (response.status === 404) { - // User hasn't created a todo list. - // start with an empty array - return {body: []}; - } - - return response; -}; - -// POST /todos.json -export const post = async request => { - const response = await api(request, `todos/${request.locals.userid}`, { - // Because index.svelte posts a FormData object, - // request.body is _also_ a (readonly) FormData - // object, which allows us to get form data - // with the `body.get(key)` method - text: request.body.get('text') - }); - - return response; -}; diff --git a/examples/run_single_site/src/routes/todos/index.svelte b/examples/run_single_site/src/routes/todos/index.svelte deleted file mode 100644 index 7b75ff4..0000000 --- a/examples/run_single_site/src/routes/todos/index.svelte +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - Todos - - -
-

Todos

- - { - const created = await res.json(); - todos = [...todos, created]; - - form.reset(); - } - }} - > - - - - {#each todos as todo (todo.uid)} -
-
{ - todo.done = !!data.get('done'); - }, - result: patch - }} - > - -
- {/each} -
- - diff --git a/examples/run_single_site/static/favicon.ico b/examples/run_single_site/static/favicon.ico deleted file mode 100644 index d75d248..0000000 Binary files a/examples/run_single_site/static/favicon.ico and /dev/null differ diff --git a/examples/run_single_site/static/robots.txt b/examples/run_single_site/static/robots.txt deleted file mode 100644 index e9e57dc..0000000 --- a/examples/run_single_site/static/robots.txt +++ /dev/null @@ -1,3 +0,0 @@ -# https://www.robotstxt.org/robotstxt.html -User-agent: * -Disallow: diff --git a/examples/run_single_site/static/svelte-welcome.png b/examples/run_single_site/static/svelte-welcome.png deleted file mode 100644 index fe7d2d6..0000000 Binary files a/examples/run_single_site/static/svelte-welcome.png and /dev/null differ diff --git a/examples/run_single_site/static/svelte-welcome.webp b/examples/run_single_site/static/svelte-welcome.webp deleted file mode 100644 index 6ec1a28..0000000 Binary files a/examples/run_single_site/static/svelte-welcome.webp and /dev/null differ diff --git a/package.json b/package.json index 94ce1ab..e7a29c5 100644 --- a/package.json +++ b/package.json @@ -35,33 +35,33 @@ "node": "^14.13.1 || >= 16" }, "dependencies": { - "esbuild": "^0.11.23", + "esbuild": "^0.12.20", "kleur": "^4.1.4" }, "peerDependencies": { - "@sveltejs/kit": "^1.0.0-next.132" + "@sveltejs/kit": "^1.0.0-next.155" }, "devDependencies": { "@commitlint/cli": "^11.0.0", "@commitlint/config-conventional": "^11.0.0", - "@sveltejs/kit": "1.0.0-next.132", + "@sveltejs/kit": "^1.0.0-next.155", "@types/express": "^4.17.12", "@types/node": "^14.14.35", - "ava": "^3.15.0", - "firebase-functions": "^3.14.1", + "firebase-functions": "^3.15.4", "husky": "^5.0.8", "typescript": "^4.2.3", + "uvu": "^0.5.1", "xo": "^0.40.3" }, "scripts": { "prepare": "husky install", "fix": "xo --fix", - "test": "xo && ava", - "test:e2e": "./tests/e2e-healthcheck.sh" + "test": "xo && uvu tests/unit" }, "xo": { "ignores": [ - "examples" + "tests/end-to-end", + "tests/integration" ], "rules": { "unicorn/prefer-node-protocol": "off" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f4ae7d1..3fca67f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,31 +3,31 @@ lockfileVersion: 5.3 specifiers: '@commitlint/cli': ^11.0.0 '@commitlint/config-conventional': ^11.0.0 - '@sveltejs/kit': 1.0.0-next.132 + '@sveltejs/kit': ^1.0.0-next.155 '@types/express': ^4.17.12 '@types/node': ^14.14.35 - ava: ^3.15.0 - esbuild: ^0.11.23 - firebase-functions: ^3.14.1 + esbuild: ^0.12.20 + firebase-functions: ^3.15.4 husky: ^5.0.8 kleur: ^4.1.4 typescript: ^4.2.3 + uvu: ^0.5.1 xo: ^0.40.3 dependencies: - esbuild: 0.11.23 + esbuild: 0.12.20 kleur: 4.1.4 devDependencies: '@commitlint/cli': 11.0.0 '@commitlint/config-conventional': 11.0.0 - '@sveltejs/kit': 1.0.0-next.132 + '@sveltejs/kit': 1.0.0-next.155 '@types/express': 4.17.12 '@types/node': 14.14.35 - ava: 3.15.0 - firebase-functions: 3.14.1 + firebase-functions: 3.15.4 husky: 5.1.3 typescript: 4.2.3 + uvu: 0.5.1 xo: 0.40.3 packages: @@ -408,13 +408,6 @@ packages: engines: {node: '>=v10.22.0'} dev: true - /@concordance/react/2.0.0: - resolution: {integrity: sha512-huLSkUuM2/P+U0uy2WwlKuixMsTODD8p4JVQBI4VKeopkiN0C7M3N9XYVawb4M+4spN5RrO/eLhk7KoQX6nsfA==} - engines: {node: '>=6.12.3 <7 || >=8.9.4 <9 || >=10.0.0'} - dependencies: - arrify: 1.0.1 - dev: true - /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -455,14 +448,6 @@ packages: glob-to-regexp: 0.3.0 dev: true - /@nodelib/fs.scandir/2.1.4: - resolution: {integrity: sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.4 - run-parallel: 1.2.0 - dev: true - /@nodelib/fs.scandir/2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -476,24 +461,11 @@ packages: engines: {node: '>= 6'} dev: true - /@nodelib/fs.stat/2.0.4: - resolution: {integrity: sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==} - engines: {node: '>= 8'} - dev: true - /@nodelib/fs.stat/2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.6: - resolution: {integrity: sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==} - engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.4 - fastq: 1.11.0 - dev: true - /@nodelib/fs.walk/1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} @@ -510,63 +482,59 @@ packages: picomatch: 2.3.0 dev: true - /@sindresorhus/is/0.14.0: - resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==} - engines: {node: '>=6'} - dev: true - - /@sveltejs/kit/1.0.0-next.132: - resolution: {integrity: sha512-mX3ihuyTQr3302ZpihG3gXfTBcDPODlJ6ZoYu6f7TGo8+1OdpuDdozgi1CKLkrUBHYGnPO4E75XOVKlgJLjBQw==} + /@sveltejs/kit/1.0.0-next.155: + resolution: {integrity: sha512-cAQxR0HS+ywEGPL8LvUdoWCsISYtdJ6d3fCNFhJxvDDMDUCnGxmueHNA0+jIkLaaLY6TCb0oJ54rRdqfn5gGEA==} engines: {node: ^12.20 || >=14.13} hasBin: true peerDependencies: - svelte: ^3.34.0 + svelte: ^3.39.0 dependencies: - '@sveltejs/vite-plugin-svelte': 1.0.0-next.13_vite@2.4.3 + '@sveltejs/vite-plugin-svelte': 1.0.0-next.17_vite@2.5.0 cheap-watch: 1.0.3 sade: 1.7.4 - vite: 2.4.3 + vite: 2.5.0 transitivePeerDependencies: + - diff-match-patch - supports-color dev: true - /@sveltejs/vite-plugin-svelte/1.0.0-next.13_vite@2.4.3: - resolution: {integrity: sha512-hzacNmIOR55aE+yQj750R90+BbQERRVGjlu6TQLgy+Aw2bPmRJMLKvS/NmwO+I66DEiWQdFFHR+lxtwH4bbbXw==} + /@sveltejs/vite-plugin-svelte/1.0.0-next.17_vite@2.5.0: + resolution: {integrity: sha512-Xh/YYqBMDJnDheutnGHk/I5TO6w9gZ2GMgvG+qQm/gpIRkaTLts6Mw5xDe6cac/nH/aVPPVPibhq2pf26d44fA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: + diff-match-patch: ^1.0.5 svelte: ^3.34.0 vite: ^2.3.7 + peerDependenciesMeta: + diff-match-patch: + optional: true dependencies: '@rollup/pluginutils': 4.1.1 debug: 4.3.2 - diff-match-patch: 1.0.5 kleur: 4.1.4 magic-string: 0.25.7 require-relative: 0.8.7 - svelte-hmr: 0.14.6 - vite: 2.4.3 + svelte-hmr: 0.14.7 + vite: 2.5.0 transitivePeerDependencies: - supports-color dev: true - /@szmarczak/http-timer/1.1.2: - resolution: {integrity: sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==} - engines: {node: '>=6'} - dependencies: - defer-to-connect: 1.1.3 - dev: true - /@types/body-parser/1.19.0: resolution: {integrity: sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==} dependencies: '@types/connect': 3.4.34 - '@types/node': 14.17.1 + '@types/node': 14.17.5 dev: true /@types/connect/3.4.34: resolution: {integrity: sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==} dependencies: - '@types/node': 14.17.1 + '@types/node': 14.17.5 + dev: true + + /@types/cors/2.8.12: + resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} dev: true /@types/eslint/7.28.0: @@ -583,7 +551,7 @@ packages: /@types/express-serve-static-core/4.17.20: resolution: {integrity: sha512-8qqFN4W53IEWa9bdmuVrUcVkFemQWnt5DKPQ/oa8xKDYgtjCr2OO6NX5TIK49NLFr3mPYU2cLh92DQquC3oWWQ==} dependencies: - '@types/node': 14.17.1 + '@types/node': 14.17.5 '@types/qs': 6.9.6 '@types/range-parser': 1.2.3 dev: true @@ -636,10 +604,6 @@ packages: resolution: {integrity: sha512-Lt+wj8NVPx0zUmUwumiVXapmaLUcAk3yPuHCFVXras9k5VT9TdhJqKqGVUQCD60OTMCl0qxJ57OiTL0Mic3Iag==} dev: true - /@types/node/14.17.1: - resolution: {integrity: sha512-/tpUyFD7meeooTRwl3sYlihx2BrJE7q9XF71EguPFIySj9B7qgnRtHsHTho+0AUm4m1SvWGm6uSncrR94q6Vtw==} - dev: true - /@types/node/14.17.5: resolution: {integrity: sha512-bjqH2cX/O33jXT/UmReo2pM7DIJREPMnarixbQ57DOOzzFaI6D2+IcwaJQaJpv0M1E9TIhPCYVxrkcityLjlqA==} dev: true @@ -664,7 +628,7 @@ packages: resolution: {integrity: sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==} dependencies: '@types/mime': 1.3.2 - '@types/node': 14.17.1 + '@types/node': 14.17.5 dev: true /@typescript-eslint/eslint-plugin/4.28.4_b1648df9f9ba40bdeef3710a5a5af353: @@ -796,23 +760,12 @@ packages: acorn: 7.4.1 dev: true - /acorn-walk/8.0.2: - resolution: {integrity: sha512-+bpA9MJsHdZ4bgfDcpk0ozQyhhVct7rzOmO0s1IIr0AGGgKBljss8n2zp11rRP2wid5VGeh04CgeKzgat5/25A==} - engines: {node: '>=0.4.0'} - dev: true - /acorn/7.4.1: resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /acorn/8.1.0: - resolution: {integrity: sha512-LWCF/Wn0nfHOmJ9rzQApGnxnvgfROzGilS8936rqN/lfcYkY9MYZzdMqN+2NJ4SlTc+m5HiSa+kNfDtI64dwUA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /aggregate-error/3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -839,12 +792,6 @@ packages: uri-js: 4.4.1 dev: true - /ansi-align/3.0.0: - resolution: {integrity: sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==} - dependencies: - string-width: 3.1.0 - dev: true - /ansi-colors/4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} @@ -857,11 +804,6 @@ packages: type-fest: 0.21.3 dev: true - /ansi-regex/4.1.0: - resolution: {integrity: sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==} - engines: {node: '>=6'} - dev: true - /ansi-regex/5.0.0: resolution: {integrity: sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==} engines: {node: '>=8'} @@ -881,19 +823,6 @@ packages: color-convert: 2.0.1 dev: true - /ansi-styles/5.1.0: - resolution: {integrity: sha512-osxifZo3ar56+e8tdYreU6p8FZGciBHo5O0JoDAxMUqZuyNUb+yHEwYtJZ+Z32R459jEgtwVf1u8D7qYwU0l6w==} - engines: {node: '>=10'} - dev: true - - /anymatch/3.1.1: - resolution: {integrity: sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==} - engines: {node: '>= 8'} - dependencies: - normalize-path: 3.0.0 - picomatch: 2.2.2 - dev: true - /argparse/1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: @@ -915,11 +844,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /array-find-index/1.0.2: - resolution: {integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=} - engines: {node: '>=0.10.0'} - dev: true - /array-find/1.0.0: resolution: {integrity: sha1-bI4obRHtdoMn+OYuzuhzU8o+eLg=} dev: true @@ -974,11 +898,6 @@ packages: es-abstract: 1.18.3 dev: true - /arrgv/1.0.2: - resolution: {integrity: sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw==} - engines: {node: '>=8.0.0'} - dev: true - /arrify/1.0.1: resolution: {integrity: sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=} engines: {node: '>=0.10.0'} @@ -1010,71 +929,6 @@ packages: hasBin: true dev: true - /ava/3.15.0: - resolution: {integrity: sha512-HGAnk1SHPk4Sx6plFAUkzV/XC1j9+iQhOzt4vBly18/yo0AV8Oytx7mtJd/CR8igCJ5p160N/Oo/cNJi2uSeWA==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <12.17.0 || >=12.17.0 <13 || >=14.0.0 <15 || >=15'} - hasBin: true - dependencies: - '@concordance/react': 2.0.0 - acorn: 8.1.0 - acorn-walk: 8.0.2 - ansi-styles: 5.1.0 - arrgv: 1.0.2 - arrify: 2.0.1 - callsites: 3.1.0 - chalk: 4.1.0 - chokidar: 3.5.1 - chunkd: 2.0.1 - ci-info: 2.0.0 - ci-parallel-vars: 1.0.1 - clean-yaml-object: 0.1.0 - cli-cursor: 3.1.0 - cli-truncate: 2.1.0 - code-excerpt: 3.0.0 - common-path-prefix: 3.0.0 - concordance: 5.0.4 - convert-source-map: 1.7.0 - currently-unhandled: 0.4.1 - debug: 4.3.1 - del: 6.0.0 - emittery: 0.8.1 - equal-length: 1.0.1 - figures: 3.2.0 - globby: 11.0.2 - ignore-by-default: 2.0.0 - import-local: 3.0.2 - indent-string: 4.0.0 - is-error: 2.2.2 - is-plain-object: 5.0.0 - is-promise: 4.0.0 - lodash: 4.17.21 - matcher: 3.0.0 - md5-hex: 3.0.1 - mem: 8.0.0 - ms: 2.1.3 - ora: 5.3.0 - p-event: 4.2.0 - p-map: 4.0.0 - picomatch: 2.2.2 - pkg-conf: 3.1.0 - plur: 4.0.0 - pretty-ms: 7.0.1 - read-pkg: 5.2.0 - resolve-cwd: 3.0.0 - slash: 3.0.0 - source-map-support: 0.5.19 - stack-utils: 2.0.3 - strip-ansi: 6.0.0 - supertap: 2.0.0 - temp-dir: 2.0.0 - trim-off-newlines: 1.0.1 - update-notifier: 5.1.0 - write-file-atomic: 3.0.3 - yargs: 16.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1092,27 +946,6 @@ packages: pascalcase: 0.1.1 dev: true - /base64-js/1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true - - /binary-extensions/2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} - engines: {node: '>=8'} - dev: true - - /bl/4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.0 - dev: true - - /blueimp-md5/2.18.0: - resolution: {integrity: sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==} - dev: true - /body-parser/1.19.0: resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} engines: {node: '>= 0.8'} @@ -1129,20 +962,6 @@ packages: type-is: 1.6.18 dev: true - /boxen/5.0.1: - resolution: {integrity: sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==} - engines: {node: '>=10'} - dependencies: - ansi-align: 3.0.0 - camelcase: 6.2.0 - chalk: 4.1.1 - cli-boxes: 2.2.1 - string-width: 4.2.2 - type-fest: 0.20.2 - widest-line: 3.1.0 - wrap-ansi: 7.0.0 - dev: true - /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -1190,17 +1009,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /buffer-from/1.1.1: - resolution: {integrity: sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==} - dev: true - - /buffer/5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - dev: true - /builtin-modules/3.2.0: resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} engines: {node: '>=6'} @@ -1226,19 +1034,6 @@ packages: unset-value: 1.0.0 dev: true - /cacheable-request/6.1.0: - resolution: {integrity: sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==} - engines: {node: '>=8'} - dependencies: - clone-response: 1.0.2 - get-stream: 5.2.0 - http-cache-semantics: 4.1.0 - keyv: 3.1.0 - lowercase-keys: 2.0.0 - normalize-url: 4.5.1 - responselike: 1.0.2 - dev: true - /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: @@ -1269,11 +1064,6 @@ packages: engines: {node: '>=6'} dev: true - /camelcase/6.2.0: - resolution: {integrity: sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==} - engines: {node: '>=10'} - dev: true - /caniuse-lite/1.0.30001245: resolution: {integrity: sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==} dev: true @@ -1308,37 +1098,10 @@ packages: engines: {node: '>=8'} dev: true - /chokidar/3.5.1: - resolution: {integrity: sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==} - engines: {node: '>= 8.10.0'} - dependencies: - anymatch: 3.1.1 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.1 - normalize-path: 3.0.0 - readdirp: 3.5.0 - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /chunkd/2.0.1: - resolution: {integrity: sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ==} - dev: true - - /ci-info/2.0.0: - resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} - dev: true - /ci-info/3.2.0: resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} dev: true - /ci-parallel-vars/1.0.1: - resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} - dev: true - /class-utils/0.3.6: resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} engines: {node: '>=0.10.0'} @@ -1361,36 +1124,6 @@ packages: engines: {node: '>=6'} dev: true - /clean-yaml-object/0.1.0: - resolution: {integrity: sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=} - engines: {node: '>=0.10.0'} - dev: true - - /cli-boxes/2.2.1: - resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} - engines: {node: '>=6'} - dev: true - - /cli-cursor/3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - dependencies: - restore-cursor: 3.1.0 - dev: true - - /cli-spinners/2.5.0: - resolution: {integrity: sha512-PC+AmIuK04E6aeSs/pUccSujsTzBhu4HzC2dL+CfJB/Jcc2qTRbEwZQDfIUpt2Xl8BodYBEq8w4fc0kU2I9DjQ==} - engines: {node: '>=6'} - dev: true - - /cli-truncate/2.1.0: - resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} - engines: {node: '>=8'} - dependencies: - slice-ansi: 3.0.0 - string-width: 4.2.2 - dev: true - /cliui/6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} dependencies: @@ -1399,32 +1132,6 @@ packages: wrap-ansi: 6.2.0 dev: true - /cliui/7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.2 - strip-ansi: 6.0.0 - wrap-ansi: 7.0.0 - dev: true - - /clone-response/1.0.2: - resolution: {integrity: sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=} - dependencies: - mimic-response: 1.0.1 - dev: true - - /clone/1.0.4: - resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=} - engines: {node: '>=0.8'} - dev: true - - /code-excerpt/3.0.0: - resolution: {integrity: sha512-VHNTVhd7KsLGOqfX3SyeO8RyYPMp1GJOg194VITk04WMYCv4plV68YWe6TJZxd9MhobjtpMRnVky01gqZsalaw==} - engines: {node: '>=10'} - dependencies: - convert-to-spaces: 1.0.2 - dev: true - /collection-visit/1.0.0: resolution: {integrity: sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=} engines: {node: '>=0.10.0'} @@ -1458,8 +1165,8 @@ packages: resolution: {integrity: sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==} dev: true - /common-path-prefix/3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + /colorette/1.3.0: + resolution: {integrity: sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==} dev: true /commondir/1.0.1: @@ -1481,32 +1188,6 @@ packages: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true - /concordance/5.0.4: - resolution: {integrity: sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw==} - engines: {node: '>=10.18.0 <11 || >=12.14.0 <13 || >=14'} - dependencies: - date-time: 3.1.0 - esutils: 2.0.3 - fast-diff: 1.2.0 - js-string-escape: 1.0.1 - lodash: 4.17.21 - md5-hex: 3.0.1 - semver: 7.3.4 - well-known-symbols: 2.0.0 - dev: true - - /configstore/5.0.1: - resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} - engines: {node: '>=8'} - dependencies: - dot-prop: 5.3.0 - graceful-fs: 4.2.6 - make-dir: 3.1.0 - unique-string: 2.0.0 - write-file-atomic: 3.0.3 - xdg-basedir: 4.0.0 - dev: true - /confusing-browser-globals/1.0.10: resolution: {integrity: sha512-gNld/3lySHwuhaVluJUKLePYirM3QNCKzVxqAdhJII9/WXKVX5PURzMVJspS1jTslSqjeuG4KMVTSouit5YPHA==} dev: true @@ -1554,23 +1235,12 @@ packages: trim-off-newlines: 1.0.1 dev: true - /convert-source-map/1.7.0: - resolution: {integrity: sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==} - dependencies: - safe-buffer: 5.1.2 - dev: true - /convert-source-map/1.8.0: resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} dependencies: safe-buffer: 5.1.2 dev: true - /convert-to-spaces/1.0.2: - resolution: {integrity: sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=} - engines: {node: '>= 4'} - dev: true - /cookie-signature/1.0.6: resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} dev: true @@ -1626,30 +1296,11 @@ packages: which: 2.0.2 dev: true - /crypto-random-string/2.0.0: - resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} - engines: {node: '>=8'} - dev: true - - /currently-unhandled/0.4.1: - resolution: {integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o=} - engines: {node: '>=0.10.0'} - dependencies: - array-find-index: 1.0.2 - dev: true - /dargs/7.0.0: resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} engines: {node: '>=8'} dev: true - /date-time/3.1.0: - resolution: {integrity: sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg==} - engines: {node: '>=6'} - dependencies: - time-zone: 1.0.0 - dev: true - /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} dependencies: @@ -1662,18 +1313,6 @@ packages: ms: 2.1.3 dev: true - /debug/4.3.1: - resolution: {integrity: sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - /debug/4.3.2: resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} engines: {node: '>=6.0'} @@ -1704,18 +1343,6 @@ packages: engines: {node: '>=0.10'} dev: true - /decompress-response/3.3.0: - resolution: {integrity: sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=} - engines: {node: '>=4'} - dependencies: - mimic-response: 1.0.1 - dev: true - - /deep-extend/0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true - /deep-is/0.1.3: resolution: {integrity: sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=} dev: true @@ -1727,16 +1354,6 @@ packages: core-assert: 0.2.1 dev: true - /defaults/1.0.3: - resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=} - dependencies: - clone: 1.0.4 - dev: true - - /defer-to-connect/1.1.3: - resolution: {integrity: sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==} - dev: true - /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -1771,31 +1388,23 @@ packages: isobject: 3.0.1 dev: true - /del/6.0.0: - resolution: {integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==} - engines: {node: '>=10'} - dependencies: - globby: 11.0.2 - graceful-fs: 4.2.6 - is-glob: 4.0.1 - is-path-cwd: 2.2.0 - is-path-inside: 3.0.3 - p-map: 4.0.0 - rimraf: 3.0.2 - slash: 3.0.0 - dev: true - /depd/1.1.2: resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} engines: {node: '>= 0.6'} dev: true + /dequal/2.0.2: + resolution: {integrity: sha512-q9K8BlJVxK7hQYqa6XISGmBZbtQQWVXSrRrWreHC94rMt1QL/Impruc+7p2CYSYuVIUr+YCt6hjrs1kkdJRTug==} + engines: {node: '>=6'} + dev: true + /destroy/1.0.4: resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} dev: true - /diff-match-patch/1.0.5: - resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} dev: true /dir-glob/2.2.2: @@ -1833,10 +1442,6 @@ packages: is-obj: 2.0.0 dev: true - /duplexer3/0.1.4: - resolution: {integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=} - dev: true - /ee-first/1.1.1: resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} dev: true @@ -1845,15 +1450,6 @@ packages: resolution: {integrity: sha512-2KQ9OYm9WMUNpAPA/4aerURl3hwRc9tNlpsiEj3Y8Gf7LVf26NzyLIX2v0hSagQwrS9+cWab+28A2GPKDoVNRA==} dev: true - /emittery/0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} - dev: true - - /emoji-regex/7.0.3: - resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - dev: true - /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true @@ -1863,12 +1459,6 @@ packages: engines: {node: '>= 0.8'} dev: true - /end-of-stream/1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - dependencies: - once: 1.4.0 - dev: true - /enhance-visitors/1.0.0: resolution: {integrity: sha1-qpRdBdpGVnKh69OP7i7T2oUY6Vo=} engines: {node: '>=4.0.0'} @@ -1897,11 +1487,6 @@ packages: engines: {node: '>=8'} dev: true - /equal-length/1.0.1: - resolution: {integrity: sha1-IcoRLUirJLTh5//A5TOdMf38J0w=} - engines: {node: '>=4'} - dev: true - /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -1939,28 +1524,16 @@ packages: is-symbol: 1.0.4 dev: true - /esbuild/0.11.23: - resolution: {integrity: sha512-iaiZZ9vUF5wJV8ob1tl+5aJTrwDczlvGP0JoMmnpC2B0ppiMCu8n8gmy5ZTGl5bcG081XBVn+U+jP+mPFm5T5Q==} - hasBin: true - requiresBuild: true - dev: false - - /esbuild/0.12.15: - resolution: {integrity: sha512-72V4JNd2+48eOVCXx49xoSWHgC3/cCy96e7mbXKY+WOWghN00cCmlGnwVLRhRHorvv0dgCyuMYBZlM2xDM5OQw==} + /esbuild/0.12.20: + resolution: {integrity: sha512-u7+0qTo9Z64MD9PhooEngCmzyEYJ6ovFhPp8PLNh3UasR5Ihjv6HWVXqm8uHmasdQlpsAf0IsY4U0YVUfCpt4Q==} hasBin: true requiresBuild: true - dev: true /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} dev: true - /escape-goat/2.1.1: - resolution: {integrity: sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==} - engines: {node: '>=8'} - dev: true - /escape-html/1.0.3: resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} dev: true @@ -1970,11 +1543,6 @@ packages: engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp/2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - dev: true - /escape-string-regexp/4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} @@ -2474,18 +2042,6 @@ packages: micromatch: 3.1.10 dev: true - /fast-glob/3.2.5: - resolution: {integrity: sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==} - engines: {node: '>=8'} - dependencies: - '@nodelib/fs.stat': 2.0.4 - '@nodelib/fs.walk': 1.2.6 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.2 - picomatch: 2.2.2 - dev: true - /fast-glob/3.2.7: resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} engines: {node: '>=8'} @@ -2505,25 +2061,12 @@ packages: resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} dev: true - /fastq/1.11.0: - resolution: {integrity: sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==} - dependencies: - reusify: 1.0.4 - dev: true - /fastq/1.11.1: resolution: {integrity: sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==} dependencies: reusify: 1.0.4 dev: true - /figures/3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - dependencies: - escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache/6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2581,13 +2124,6 @@ packages: locate-path: 2.0.0 dev: true - /find-up/3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - dependencies: - locate-path: 3.0.0 - dev: true - /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2604,12 +2140,13 @@ packages: path-exists: 4.0.0 dev: true - /firebase-functions/3.14.1: - resolution: {integrity: sha512-hL/qm+i5i1qKYmAFMlQ4mwRngDkP+3YT3F4E4Nd5Hj2QKeawBdZiMGgEt6zqTx08Zq04vHiSnSM0z75UJRSg6Q==} + /firebase-functions/3.15.4: + resolution: {integrity: sha512-6Zq+QIqdslZLsSwWg25Hv39cgFBZr0oUAbCjfe/MXqSHMy8ZK/1Vdy/WKx5IRC6hE7+JrmfVylIyEonTyNcheA==} engines: {node: ^8.13.0 || >=10.10.0} peerDependencies: firebase-admin: ^8.0.0 || ^9.0.0 dependencies: + '@types/cors': 2.8.12 '@types/express': 4.17.3 cors: 2.8.5 express: 4.17.1 @@ -2716,20 +2253,6 @@ packages: engines: {node: '>=10'} dev: true - /get-stream/4.1.0: - resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} - engines: {node: '>=6'} - dependencies: - pump: 3.0.0 - dev: true - - /get-stream/5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} - dependencies: - pump: 3.0.0 - dev: true - /get-stream/6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2788,13 +2311,6 @@ packages: ini: 1.3.8 dev: true - /global-dirs/3.0.0: - resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} - engines: {node: '>=10'} - dependencies: - ini: 2.0.0 - dev: true - /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -2807,18 +2323,6 @@ packages: type-fest: 0.20.2 dev: true - /globby/11.0.2: - resolution: {integrity: sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==} - engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.2.5 - ignore: 5.1.8 - merge2: 1.4.1 - slash: 3.0.0 - dev: true - /globby/11.0.4: resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} engines: {node: '>=10'} @@ -2845,23 +2349,6 @@ packages: slash: 2.0.0 dev: true - /got/9.6.0: - resolution: {integrity: sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==} - engines: {node: '>=8.6'} - dependencies: - '@sindresorhus/is': 0.14.0 - '@szmarczak/http-timer': 1.1.2 - cacheable-request: 6.1.0 - decompress-response: 3.3.0 - duplexer3: 0.1.4 - get-stream: 4.1.0 - lowercase-keys: 1.0.1 - mimic-response: 1.0.1 - p-cancelable: 1.1.0 - to-readable-stream: 1.0.0 - url-parse-lax: 3.0.0 - dev: true - /graceful-fs/4.2.6: resolution: {integrity: sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==} dev: true @@ -2921,11 +2408,6 @@ packages: kind-of: 4.0.0 dev: true - /has-yarn/2.1.0: - resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} - engines: {node: '>=8'} - dev: true - /has/1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} @@ -2951,10 +2433,6 @@ packages: lru-cache: 6.0.0 dev: true - /http-cache-semantics/4.1.0: - resolution: {integrity: sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==} - dev: true - /http-errors/1.7.2: resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} engines: {node: '>= 0.6'} @@ -2995,15 +2473,6 @@ packages: safer-buffer: 2.1.2 dev: true - /ieee754/1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true - - /ignore-by-default/2.0.0: - resolution: {integrity: sha512-+mQSgMRiFD3L3AOxLYOCxjIq4OnAmo5CIuC+lj5ehCJcPtV++QacEV7FdpzvYxH6DaOySWzQU6RR0lPLy37ckA==} - engines: {node: '>=10 <11 || >=12 <13 || >=14'} - dev: true - /ignore/4.0.6: resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} engines: {node: '>= 4'} @@ -3022,20 +2491,6 @@ packages: resolve-from: 4.0.0 dev: true - /import-lazy/2.1.0: - resolution: {integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=} - engines: {node: '>=4'} - dev: true - - /import-local/3.0.2: - resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} - engines: {node: '>=8'} - hasBin: true - dependencies: - pkg-dir: 4.2.0 - resolve-cwd: 3.0.0 - dev: true - /import-modules/2.1.0: resolution: {integrity: sha512-8HEWcnkbGpovH9yInoisxaSoIg9Brbul+Ju3Kqe2UsYDUBJD/iQjSgEj0zPcTDPKfPp2fs5xlv1i+JSye/m1/A==} engines: {node: '>=8'} @@ -3070,11 +2525,6 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /ini/2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - dev: true - /interpret/1.4.0: resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} engines: {node: '>= 0.10'} @@ -3120,13 +2570,6 @@ packages: resolution: {integrity: sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==} 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-boolean-object/1.1.1: resolution: {integrity: sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==} engines: {node: '>= 0.4'} @@ -3150,13 +2593,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-ci/2.0.0: - resolution: {integrity: sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==} - hasBin: true - dependencies: - ci-info: 2.0.0 - dev: true - /is-core-module/2.5.0: resolution: {integrity: sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==} dependencies: @@ -3227,11 +2663,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point/2.0.0: - resolution: {integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=} - engines: {node: '>=4'} - dev: true - /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} @@ -3258,19 +2689,6 @@ packages: is-extglob: 2.1.1 dev: true - /is-installed-globally/0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - dependencies: - global-dirs: 3.0.0 - is-path-inside: 3.0.3 - dev: true - - /is-interactive/1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true - /is-js-type/2.0.0: resolution: {integrity: sha1-c2FwBtZZtOtHKbunR9KHgt8PfiI=} dependencies: @@ -3287,11 +2705,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /is-npm/5.0.0: - resolution: {integrity: sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==} - engines: {node: '>=10'} - dev: true - /is-number-object/1.0.5: resolution: {integrity: sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==} engines: {node: '>= 0.4'} @@ -3321,11 +2734,6 @@ packages: engines: {node: '>=8'} dev: true - /is-path-cwd/2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true - /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} @@ -3343,15 +2751,6 @@ packages: isobject: 3.0.1 dev: true - /is-plain-object/5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true - - /is-promise/4.0.0: - resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} - dev: true - /is-proto-prop/2.0.0: resolution: {integrity: sha512-jl3NbQ/fGLv5Jhan4uX+Ge9ohnemqyblWVVCpAvtTQzNFvV2xhJq+esnkIbYQ9F1nITXoLfDDQLp7LBw/zzncg==} dependencies: @@ -3398,10 +2797,6 @@ packages: text-extensions: 1.9.0 dev: true - /is-typedarray/1.0.0: - resolution: {integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=} - dev: true - /is-unc-path/1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -3426,10 +2821,6 @@ packages: is-docker: 2.2.1 dev: true - /is-yarn-global/0.3.0: - resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - dev: true - /isarray/1.0.0: resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} dev: true @@ -3450,11 +2841,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /js-string-escape/1.0.1: - resolution: {integrity: sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=} - engines: {node: '>= 0.8'} - dev: true - /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -3478,10 +2864,6 @@ packages: hasBin: true dev: true - /json-buffer/3.0.0: - resolution: {integrity: sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=} - dev: true - /json-parse-better-errors/1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} dev: true @@ -3523,12 +2905,6 @@ packages: engines: {'0': node >= 0.2.0} dev: true - /keyv/3.1.0: - resolution: {integrity: sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==} - dependencies: - json-buffer: 3.0.0 - dev: true - /kind-of/3.2.2: resolution: {integrity: sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=} engines: {node: '>=0.10.0'} @@ -3557,13 +2933,6 @@ packages: resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} engines: {node: '>=6'} - /latest-version/5.1.0: - resolution: {integrity: sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==} - engines: {node: '>=8'} - dependencies: - package-json: 6.5.0 - dev: true - /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -3593,30 +2962,11 @@ packages: strip-bom: 3.0.0 dev: true - /load-json-file/5.3.0: - resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==} - engines: {node: '>=6'} - dependencies: - graceful-fs: 4.2.6 - parse-json: 4.0.0 - pify: 4.0.1 - strip-bom: 3.0.0 - type-fest: 0.3.1 - dev: true - /locate-path/2.0.0: resolution: {integrity: sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - - /locate-path/3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} + engines: {node: '>=4'} dependencies: - p-locate: 3.0.0 + p-locate: 2.0.0 path-exists: 3.0.0 dev: true @@ -3650,13 +3000,6 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /log-symbols/4.0.0: - resolution: {integrity: sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.0 - dev: true - /log-symbols/4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} @@ -3670,11 +3013,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /lowercase-keys/2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - dev: true - /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -3695,13 +3033,6 @@ packages: semver: 6.3.0 dev: true - /map-age-cleaner/0.1.3: - resolution: {integrity: sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==} - engines: {node: '>=6'} - dependencies: - p-defer: 1.0.0 - dev: true - /map-cache/0.2.2: resolution: {integrity: sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=} engines: {node: '>=0.10.0'} @@ -3724,33 +3055,11 @@ packages: object-visit: 1.0.1 dev: true - /matcher/3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 4.0.0 - dev: true - - /md5-hex/3.0.1: - resolution: {integrity: sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw==} - engines: {node: '>=8'} - dependencies: - blueimp-md5: 2.18.0 - dev: true - /media-typer/0.3.0: resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} engines: {node: '>= 0.6'} dev: true - /mem/8.0.0: - resolution: {integrity: sha512-qrcJOe6uD+EW8Wrci1Vdiua/15Xw3n/QnaNXE7varnB6InxSk7nu3/i5jfy3S6kWxr8WYJ6R1o0afMUtvorTsA==} - engines: {node: '>=10'} - dependencies: - map-age-cleaner: 0.1.3 - mimic-fn: 3.1.0 - dev: true - /memory-fs/0.2.0: resolution: {integrity: sha1-8rslNovBIeORwlIN6Slpyu4KApA=} dev: true @@ -3831,14 +3140,6 @@ packages: to-regex: 3.0.2 dev: true - /micromatch/4.0.2: - resolution: {integrity: sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==} - engines: {node: '>=8'} - dependencies: - braces: 3.0.2 - picomatch: 2.2.2 - dev: true - /micromatch/4.0.4: resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} engines: {node: '>=8.6'} @@ -3870,16 +3171,6 @@ packages: engines: {node: '>=6'} dev: true - /mimic-fn/3.1.0: - resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} - engines: {node: '>=8'} - dev: true - - /mimic-response/1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - dev: true - /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3937,8 +3228,8 @@ packages: resolution: {integrity: sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==} dev: true - /nanoid/3.1.23: - resolution: {integrity: sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==} + /nanoid/3.1.25: + resolution: {integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true @@ -4002,16 +3293,6 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true - - /normalize-url/4.5.1: - resolution: {integrity: sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==} - engines: {node: '>=8'} - dev: true - /npm-run-path/4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4130,37 +3411,6 @@ packages: word-wrap: 1.2.3 dev: true - /ora/5.3.0: - resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} - engines: {node: '>=10'} - dependencies: - bl: 4.1.0 - chalk: 4.1.0 - cli-cursor: 3.1.0 - cli-spinners: 2.5.0 - is-interactive: 1.0.0 - log-symbols: 4.0.0 - strip-ansi: 6.0.0 - wcwidth: 1.0.1 - dev: true - - /p-cancelable/1.1.0: - resolution: {integrity: sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==} - engines: {node: '>=6'} - dev: true - - /p-defer/1.0.0: - resolution: {integrity: sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=} - engines: {node: '>=4'} - dev: true - - /p-event/4.2.0: - resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} - engines: {node: '>=8'} - dependencies: - p-timeout: 3.2.0 - dev: true - /p-filter/2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} @@ -4168,11 +3418,6 @@ packages: p-map: 2.1.0 dev: true - /p-finally/1.0.0: - resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} - engines: {node: '>=4'} - dev: true - /p-limit/1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} @@ -4201,13 +3446,6 @@ packages: p-limit: 1.3.0 dev: true - /p-locate/3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - dependencies: - p-limit: 2.3.0 - dev: true - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4239,13 +3477,6 @@ packages: engines: {node: '>=8'} dev: true - /p-timeout/3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} - dependencies: - p-finally: 1.0.0 - dev: true - /p-try/1.0.0: resolution: {integrity: sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=} engines: {node: '>=4'} @@ -4256,16 +3487,6 @@ packages: engines: {node: '>=6'} dev: true - /package-json/6.5.0: - resolution: {integrity: sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==} - engines: {node: '>=8'} - dependencies: - got: 9.6.0 - registry-auth-token: 4.2.1 - registry-url: 5.1.0 - semver: 6.3.0 - dev: true - /parent-module/1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4291,11 +3512,6 @@ packages: lines-and-columns: 1.1.6 dev: true - /parse-ms/2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} - dev: true - /parseurl/1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4350,11 +3566,6 @@ packages: engines: {node: '>=8'} dev: true - /picomatch/2.2.2: - resolution: {integrity: sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==} - engines: {node: '>=8.6'} - dev: true - /picomatch/2.3.0: resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} engines: {node: '>=8.6'} @@ -4370,14 +3581,6 @@ packages: engines: {node: '>=6'} dev: true - /pkg-conf/3.1.0: - resolution: {integrity: sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==} - engines: {node: '>=6'} - dependencies: - find-up: 3.0.0 - load-json-file: 5.3.0 - dev: true - /pkg-dir/2.0.0: resolution: {integrity: sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=} engines: {node: '>=4'} @@ -4423,12 +3626,12 @@ packages: engines: {node: '>=0.10.0'} dev: true - /postcss/8.3.5: - resolution: {integrity: sha512-NxTuJocUhYGsMiMFHDUkmjSKT3EdH4/WbGF6GCi1NDGk+vbcUTun4fpbOqaPtD8IIsztA2ilZm2DhYCuyN58gA==} + /postcss/8.3.6: + resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==} engines: {node: ^10 || ^12 || >=14} dependencies: - colorette: 1.2.2 - nanoid: 3.1.23 + colorette: 1.3.0 + nanoid: 3.1.25 source-map-js: 0.6.2 dev: true @@ -4437,11 +3640,6 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prepend-http/2.0.0: - resolution: {integrity: sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=} - engines: {node: '>=4'} - dev: true - /prettier-linter-helpers/1.0.0: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} @@ -4455,13 +3653,6 @@ packages: hasBin: true dev: true - /pretty-ms/7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} - dependencies: - parse-ms: 2.1.0 - dev: true - /progress/2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -4480,25 +3671,11 @@ packages: ipaddr.js: 1.9.1 dev: true - /pump/3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - dependencies: - end-of-stream: 1.4.4 - once: 1.4.0 - dev: true - /punycode/2.1.1: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} dev: true - /pupa/2.1.1: - resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==} - engines: {node: '>=8'} - dependencies: - escape-goat: 2.1.1 - dev: true - /q/1.5.1: resolution: {integrity: sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=} engines: {node: '>=0.6.0', teleport: '>=0.2.0'} @@ -4533,16 +3710,6 @@ packages: unpipe: 1.0.0 dev: true - /rc/1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.5 - strip-json-comments: 2.0.1 - dev: true - /read-pkg-up/3.0.0: resolution: {integrity: sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=} engines: {node: '>=4'} @@ -4588,13 +3755,6 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.5.0: - resolution: {integrity: sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==} - engines: {node: '>=8.10.0'} - dependencies: - picomatch: 2.2.2 - dev: true - /redent/3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} @@ -4625,20 +3785,6 @@ packages: engines: {node: '>=8'} dev: true - /registry-auth-token/4.2.1: - resolution: {integrity: sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==} - engines: {node: '>=6.0.0'} - dependencies: - rc: 1.2.8 - dev: true - - /registry-url/5.1.0: - resolution: {integrity: sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==} - engines: {node: '>=8'} - dependencies: - rc: 1.2.8 - dev: true - /repeat-element/1.1.4: resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} engines: {node: '>=0.10.0'} @@ -4707,20 +3853,6 @@ packages: path-parse: 1.0.7 dev: true - /responselike/1.0.2: - resolution: {integrity: sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=} - dependencies: - lowercase-keys: 1.0.1 - dev: true - - /restore-cursor/3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.3 - dev: true - /ret/0.1.15: resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} engines: {node: '>=0.12'} @@ -4738,8 +3870,8 @@ packages: glob: 7.1.7 dev: true - /rollup/2.53.2: - resolution: {integrity: sha512-1CtEYuS5CRCzFZ7SNW5528SlDlk4VDXIRGwbm/2POQxA/G4+7/crIqJwkmnj8Q/74hGx4oVlNvh4E1CJQ5hZ6w==} + /rollup/2.56.2: + resolution: {integrity: sha512-s8H00ZsRi29M2/lGdm1u8DJpJ9ML8SUOpVVBd33XNeEeL3NVaTiUcSBHzBdF3eAyR0l7VSpsuoVUGrRHq7aPwQ==} engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: @@ -4783,13 +3915,6 @@ packages: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /semver-diff/3.1.1: - resolution: {integrity: sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.0 - dev: true - /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -4841,13 +3966,6 @@ packages: statuses: 1.5.0 dev: true - /serialize-error/7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} - dependencies: - type-fest: 0.13.1 - dev: true - /serve-static/1.14.1: resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} engines: {node: '>= 0.8.0'} @@ -4902,15 +4020,6 @@ packages: engines: {node: '>=8'} dev: true - /slice-ansi/3.0.0: - resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} - engines: {node: '>=8'} - dependencies: - ansi-styles: 4.3.0 - astral-regex: 2.0.0 - is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi/4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} @@ -4965,13 +4074,6 @@ packages: urix: 0.1.0 dev: true - /source-map-support/0.5.19: - resolution: {integrity: sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==} - dependencies: - buffer-from: 1.1.1 - source-map: 0.6.1 - dev: true - /source-map-url/0.4.1: resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} dev: true @@ -4981,11 +4083,6 @@ packages: engines: {node: '>=0.10.0'} 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 @@ -5029,13 +4126,6 @@ packages: resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} dev: true - /stack-utils/2.0.3: - resolution: {integrity: sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==} - engines: {node: '>=10'} - dependencies: - escape-string-regexp: 2.0.0 - dev: true - /static-extend/0.1.2: resolution: {integrity: sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=} engines: {node: '>=0.10.0'} @@ -5049,15 +4139,6 @@ packages: engines: {node: '>= 0.6'} dev: true - /string-width/3.1.0: - resolution: {integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==} - engines: {node: '>=6'} - dependencies: - emoji-regex: 7.0.3 - is-fullwidth-code-point: 2.0.0 - strip-ansi: 5.2.0 - dev: true - /string-width/4.2.2: resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} engines: {node: '>=8'} @@ -5087,13 +4168,6 @@ packages: safe-buffer: 5.2.1 dev: true - /strip-ansi/5.2.0: - resolution: {integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==} - engines: {node: '>=6'} - dependencies: - ansi-regex: 4.1.0 - dev: true - /strip-ansi/6.0.0: resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} engines: {node: '>=8'} @@ -5118,27 +4192,11 @@ packages: min-indent: 1.0.1 dev: true - /strip-json-comments/2.0.1: - resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=} - engines: {node: '>=0.10.0'} - dev: true - /strip-json-comments/3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /supertap/2.0.0: - resolution: {integrity: sha512-jRzcXlCeDYvKoZGA5oRhYyR3jUIYu0enkSxtmAgHRlD7HwrovTpH4bDSi0py9FtuA8si9cW/fKommJHuaoDHJA==} - engines: {node: '>=10'} - dependencies: - arrify: 2.0.1 - indent-string: 4.0.0 - js-yaml: 3.14.1 - serialize-error: 7.0.1 - strip-ansi: 6.0.0 - dev: true - /supports-color/5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5161,8 +4219,8 @@ packages: supports-color: 7.2.0 dev: true - /svelte-hmr/0.14.6: - resolution: {integrity: sha512-0oXQmRiEh3uNjyVQiGmIE7imbKO4dYc1WL6XRXTC0X9XbSacJgj9MOLguqqbZygPsNnlglhlk4eB0pCmM6nQAA==} + /svelte-hmr/0.14.7: + resolution: {integrity: sha512-pDrzgcWSoMaK6AJkBWkmgIsecW0GChxYZSZieIYfCP0v2oPyx2CYU/zm7TBIcjLVUPP714WxmViE9Thht4etog==} peerDependencies: svelte: '>=3.19.0' dev: true @@ -5184,11 +4242,6 @@ packages: engines: {node: '>=0.6'} dev: true - /temp-dir/2.0.0: - resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} - engines: {node: '>=8'} - dev: true - /text-extensions/1.9.0: resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==} engines: {node: '>=0.10'} @@ -5208,11 +4261,6 @@ packages: readable-stream: 3.6.0 dev: true - /time-zone/1.0.0: - resolution: {integrity: sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=} - engines: {node: '>=4'} - dev: true - /to-absolute-glob/2.0.2: resolution: {integrity: sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=} engines: {node: '>=0.10.0'} @@ -5233,11 +4281,6 @@ packages: kind-of: 3.2.2 dev: true - /to-readable-stream/1.0.0: - resolution: {integrity: sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==} - engines: {node: '>=6'} - dev: true - /to-regex-range/2.1.1: resolution: {integrity: sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=} engines: {node: '>=0.10.0'} @@ -5268,6 +4311,11 @@ packages: engines: {node: '>=0.6'} dev: true + /totalist/2.0.0: + resolution: {integrity: sha512-+Y17F0YzxfACxTyjfhnJQEe7afPA0GSpYlFkl2VFMxYP7jshQf9gXV7cH47EfToBumFThfKBvfAcoUn6fdNeRQ==} + engines: {node: '>=6'} + dev: true + /trim-newlines/3.0.0: resolution: {integrity: sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==} engines: {node: '>=8'} @@ -5312,11 +4360,6 @@ packages: prelude-ls: 1.2.1 dev: true - /type-fest/0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - dev: true - /type-fest/0.18.1: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} @@ -5332,11 +4375,6 @@ packages: engines: {node: '>=10'} dev: true - /type-fest/0.3.1: - resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} - engines: {node: '>=6'} - dev: true - /type-fest/0.4.1: resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==} engines: {node: '>=6'} @@ -5360,12 +4398,6 @@ packages: mime-types: 2.1.30 dev: true - /typedarray-to-buffer/3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - /typescript/4.2.3: resolution: {integrity: sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==} engines: {node: '>=4.2.0'} @@ -5402,13 +4434,6 @@ packages: set-value: 2.0.1 dev: true - /unique-string/2.0.0: - resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} - engines: {node: '>=8'} - dependencies: - crypto-random-string: 2.0.0 - dev: true - /universalify/2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -5427,26 +4452,6 @@ packages: isobject: 3.0.1 dev: true - /update-notifier/5.1.0: - resolution: {integrity: sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==} - engines: {node: '>=10'} - dependencies: - boxen: 5.0.1 - chalk: 4.1.1 - configstore: 5.0.1 - has-yarn: 2.1.0 - import-lazy: 2.1.0 - is-ci: 2.0.0 - is-installed-globally: 0.4.0 - is-npm: 5.0.0 - is-yarn-global: 0.3.0 - latest-version: 5.1.0 - pupa: 2.1.1 - semver: 7.3.5 - semver-diff: 3.1.1 - xdg-basedir: 4.0.0 - dev: true - /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -5458,13 +4463,6 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: true - /url-parse-lax/3.0.0: - resolution: {integrity: sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=} - engines: {node: '>=4'} - dependencies: - prepend-http: 2.0.0 - dev: true - /use/3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -5479,6 +4477,18 @@ packages: engines: {node: '>= 0.4.0'} dev: true + /uvu/0.5.1: + resolution: {integrity: sha512-JGxttnOGDFs77FaZ0yMUHIzczzQ5R1IlDeNW6Wymw6gAscwMdAffVOP6TlxLIfReZyK8tahoGwWZaTCJzNFDkg==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.2 + diff: 5.0.0 + kleur: 4.1.4 + sade: 1.7.4 + totalist: 2.0.0 + dev: true + /v8-compile-cache/2.3.0: resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} dev: true @@ -5495,30 +4505,19 @@ packages: engines: {node: '>= 0.8'} dev: true - /vite/2.4.3: - resolution: {integrity: sha512-iT6NPeiUUZ2FkzC3eazytOEMRaM4J+xgRQcNcpRcbmfYjakCFP4WKPJpeEz1U5JEKHAtwv3ZBQketQUFhFU3ng==} - engines: {node: '>=12.0.0'} + /vite/2.5.0: + resolution: {integrity: sha512-Dn4B+g54PJsMG5WCc4QeFy1ygMXRdTtFrUPegqfk4+vzVQcbF/DqqmI/1bxezArzbujBJg/67QeT5wz8edfJVQ==} + engines: {node: '>=12.2.0'} hasBin: true dependencies: - esbuild: 0.12.15 - postcss: 8.3.5 + esbuild: 0.12.20 + postcss: 8.3.6 resolve: 1.20.0 - rollup: 2.53.2 + rollup: 2.56.2 optionalDependencies: fsevents: 2.3.2 dev: true - /wcwidth/1.0.1: - resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=} - dependencies: - defaults: 1.0.3 - dev: true - - /well-known-symbols/2.0.0: - resolution: {integrity: sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q==} - engines: {node: '>=6'} - dev: true - /which-boxed-primitive/1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -5541,13 +4540,6 @@ packages: isexe: 2.0.0 dev: true - /widest-line/3.1.0: - resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} - engines: {node: '>=8'} - dependencies: - string-width: 4.2.2 - dev: true - /word-wrap/1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} @@ -5562,33 +4554,10 @@ packages: strip-ansi: 6.0.0 dev: true - /wrap-ansi/7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.2 - strip-ansi: 6.0.0 - dev: true - /wrappy/1.0.2: resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} dev: true - /write-file-atomic/3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.3 - typedarray-to-buffer: 3.1.5 - dev: true - - /xdg-basedir/4.0.0: - resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} - engines: {node: '>=8'} - dev: true - /xo/0.40.3: resolution: {integrity: sha512-g39uOETzRMQgp+vwykQTs5of0lwGuT1d0ebUzV04BRc0Ie5yn3ddKTd9ORUG6PC2NjcI3vE4Iad13Tddmkfovw==} engines: {node: '>=12.20'} @@ -5648,11 +4617,6 @@ packages: resolution: {integrity: sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==} dev: true - /y18n/5.0.5: - resolution: {integrity: sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==} - engines: {node: '>=10'} - dev: true - /yallist/4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true @@ -5697,19 +4661,6 @@ packages: yargs-parser: 18.1.3 dev: true - /yargs/16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.2 - y18n: 5.0.5 - yargs-parser: 20.2.7 - dev: true - /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/src/files/entry.js b/src/files/entry.js new file mode 100644 index 0000000..76c60ea --- /dev/null +++ b/src/files/entry.js @@ -0,0 +1,29 @@ +// TODO: hardcoding the relative location makes this brittle +// @ts-expect-error +import * as App from '../output/server/app.js'; +import {toSvelteKitRequest} from './firebase-to-svelte-kit.js'; + +/** @type {import('@sveltejs/kit').App} */ +const app = App; + +app.init(); + +/** + * Firebase Cloud Function handler for SvelteKit + * + * This function converts the Firebase Cloud Function (Express.js) Request object + * into a format consumable to the SvelteKit render() function + * + * Relevant documentation - https://firebase.google.com/docs/functions/http-events#read_values_from_the_request + * + * @param {import('firebase-functions').https.Request} request + * @param {import('express').Response} response + * @returns {Promise} + */ +export default async function svelteKit(request, response) { + const rendered = await app.render(toSvelteKitRequest(request)); + + return rendered ? + response.writeHead(rendered.status, rendered.headers).end(rendered.body) : + response.writeHead(404, 'Not Found').end(); +} diff --git a/src/files/firebase-to-svelte-kit.js b/src/files/firebase-to-svelte-kit.js new file mode 100644 index 0000000..1c7eb6b --- /dev/null +++ b/src/files/firebase-to-svelte-kit.js @@ -0,0 +1,47 @@ +/** + * Convert Firebase Cloud Function Request to SvelteKit Request + * + * @param {import('firebase-functions').https.Request} request + * @return {import('@sveltejs/kit').IncomingRequest} + */ +export function toSvelteKitRequest(request) { + const host = `${request.headers['x-forwarded-proto']}://${request.headers.host}`; + const {pathname, searchParams: searchParameters} = new URL(request.url || '', host); + + return { + method: request.method, + headers: toSvelteKitHeaders(request.headers), + rawBody: request.rawBody ? + request.rawBody : + new Uint8Array(), + host, + path: pathname, + query: searchParameters + }; +} + +/** + * Convert Node.js http.IncomingHttpHeaders to SvelteKit Record + * + * This is achieved by converting the all string[] header values to the expected type of a CSV string. + * + * Example: + * input = { 'Content-Type': 'application/json', 'set-cookie': ['something', 'another'] } + * output = { 'Content-Type': 'application/json', 'set-cookie': 'something,another' } + * + * @param {import('http').IncomingHttpHeaders} headers + * @returns {Record} + */ +export function toSvelteKitHeaders(headers) { + /** @type {Record} */ + const finalHeaders = {}; + + // Assume string | string[] types for all values + for (const [key, value] of Object.entries(headers)) { + finalHeaders[key] = Array.isArray(value) ? + value.join(',') : + value; + } + + return finalHeaders; +} diff --git a/src/files/handler.js b/src/files/handler.js deleted file mode 100644 index 61a5941..0000000 --- a/src/files/handler.js +++ /dev/null @@ -1,46 +0,0 @@ -// TODO: hardcoding the relative location makes this brittle -import {init, render} from '../output/server/app.js'; - -init(); - -/** - * Firebase Cloud Function handler for SvelteKit - * - * This function converts the Firebase Cloud Function (Express.js) Request object - * into a format consumable to the SvelteKit render() function, which is of type - * SvelteKit `import('types/hooks').StrictBody | null` - * - * Relevant documentation - https://firebase.google.com/docs/functions/http-events#read_values_from_the_request - * - * @param {import('firebase-functions').https.Request} request - * @param {import('express').Response} response - * @returns {Promise} - */ -const svelteKit = async ({body, headers, method, rawBody, url}, response) => { - const host = `${headers['x-forwarded-proto']}://${headers.host}`; - const {pathname, searchParams: searchParameters = ''} = new URL(url || '', host); - - const finalRawBody = - headers['content-type'] === undefined ? - rawBody : - (headers['content-type'] === 'application/octet-stream' ? - body : - new TextDecoder(headers['content-encoding'] || 'utf-8').decode(rawBody)); - - const rendered = await render({ - method, - headers, - path: pathname, - query: searchParameters, - rawBody: finalRawBody - }); - - if (rendered) { - const {status, headers, body} = rendered; - return response.writeHead(status, headers).end(body); - } - - return response.writeHead(404).end(); -}; - -export default svelteKit; diff --git a/src/files/shims.js b/src/files/shims.js index 29d9c09..0f3dffe 100644 --- a/src/files/shims.js +++ b/src/files/shims.js @@ -1 +1,2 @@ +// @ts-expect-error export {fetch, Response, Request, Headers} from '@sveltejs/kit/install-fetch'; diff --git a/src/index.js b/src/index.js index 759e63a..1f2ab88 100644 --- a/src/index.js +++ b/src/index.js @@ -102,9 +102,9 @@ async function adaptToCloudFunctions({utils, esbuildBuildOptions, name, source, let ${ssrSvelteFunctionName}; exports.${name} = functions.https.onRequest(async (request, response) => { if (!${ssrSvelteFunctionName}) { - functions.logger.info("Initialising SvelteKit SSR Handler"); + functions.logger.info("Initialising SvelteKit SSR entry"); ${ssrSvelteFunctionName} = require("./${ssrDirname}/index").default; - functions.logger.info("SvelteKit SSR Handler initialised!"); + functions.logger.info("SvelteKit SSR entry initialised!"); } functions.logger.info("Requested resource: " + request.originalUrl); return ${ssrSvelteFunctionName}(request, response); @@ -141,7 +141,7 @@ async function adaptToCloudRun({utils, esbuildBuildOptions, serviceId, region, f pkgjson.dependencies = {}; } - pkgjson.dependencies['@google-cloud/functions-framework'] = '^1.7.1'; + pkgjson.dependencies['@google-cloud/functions-framework'] = '^1.9.0'; pkgjson.engines = {node: '14'}; delete pkgjson.type; const data = JSON.stringify(pkgjson, null, 2); @@ -173,13 +173,16 @@ async function prepareEntrypoint({utils, esbuildBuildOptions, serverOutputDir}) utils.rimraf(serverOutputDir); const files = fileURLToPath(new URL('./files', import.meta.url)); - const handlerSource = path.join(files, 'handler.js'); - const handlerDest = path.join(temporaryDir, 'handler.js'); - utils.copy(handlerSource, handlerDest); + const entrySource = path.join(files, 'entry.js'); + const entryDest = path.join(temporaryDir, 'entry.js'); + utils.copy(entrySource, entryDest); + const firebaseToSvelteKitSource = path.join(files, 'firebase-to-svelte-kit.js'); + const firebaseToSvelteKitDest = path.join(temporaryDir, 'firebase-to-svelte-kit.js'); + utils.copy(firebaseToSvelteKitSource, firebaseToSvelteKitDest); /** @type {BuildOptions} */ const defaultOptions = { - entryPoints: [path.join(temporaryDir, 'handler.js')], + entryPoints: [path.join(temporaryDir, 'entry.js')], outfile: path.join(serverOutputDir, 'index.js'), bundle: true, inject: [path.join(files, 'shims.js')], diff --git a/tests/end-to-end/scaffold/.firebaserc b/tests/end-to-end/scaffold/.firebaserc new file mode 100644 index 0000000..d8085fd --- /dev/null +++ b/tests/end-to-end/scaffold/.firebaserc @@ -0,0 +1 @@ +{"projects":{"default":"demo"}} diff --git a/examples/functions_single_site/firebase.json b/tests/end-to-end/scaffold/firebase.json similarity index 69% rename from examples/functions_single_site/firebase.json rename to tests/end-to-end/scaffold/firebase.json index 79da104..839c82b 100644 --- a/examples/functions_single_site/firebase.json +++ b/tests/end-to-end/scaffold/firebase.json @@ -14,19 +14,13 @@ }, "emulators": { "ui": { - "enabled": true + "enabled": false + }, + "hosting": { + "port": 8685 }, "functions": { "port": 5001 - }, - "auth": { - "port": 9099 - }, - "firestore": { - "port": 8080 - }, - "pubsub": { - "port": 8085 } } } diff --git a/examples/functions_single_site/functions/.gitignore b/tests/end-to-end/scaffold/functions/.gitignore similarity index 100% rename from examples/functions_single_site/functions/.gitignore rename to tests/end-to-end/scaffold/functions/.gitignore diff --git a/examples/functions_single_site/functions/index.js b/tests/end-to-end/scaffold/functions/index.js similarity index 100% rename from examples/functions_single_site/functions/index.js rename to tests/end-to-end/scaffold/functions/index.js diff --git a/examples/functions_single_site/functions/package.json b/tests/end-to-end/scaffold/functions/package.json similarity index 100% rename from examples/functions_single_site/functions/package.json rename to tests/end-to-end/scaffold/functions/package.json diff --git a/examples/functions_single_site/svelte.config.js b/tests/end-to-end/scaffold/svelte.config.js similarity index 100% rename from examples/functions_single_site/svelte.config.js rename to tests/end-to-end/scaffold/svelte.config.js diff --git a/tests/end-to-end/test.bash b/tests/end-to-end/test.bash new file mode 100755 index 0000000..687b2ad --- /dev/null +++ b/tests/end-to-end/test.bash @@ -0,0 +1,113 @@ +#!/usr/bin/env bash + +# undefined vars are errors +set -u +IFS=$'\n\t' + +# Execute end-to-end tests of the SvelteKit Todo template app built with +# the svelte-adapter-firebase adapter hosted on the Cloud Function using +# the Firebase Emulator in CI +# +# Curl API and assert response payload +# +# Usage: +# +# tests/integration/test.bash + +SCRIPT_PATH=$(dirname "$(realpath -s "$0")") +TEST_DIR="$(mktemp -dt svelte-adapter-firebase-XXXX)" +PORT="8685" # from test-firebase.json +INDICATOR="====> " + +# Cleanup files on exit +trap 'echo "${INDICATOR}Exiting, removing ${TEST_DIR} & killing all processes matching _firebase_" && rm -rf -- "$TEST_DIR" && pkill -f firebase' EXIT + +echo "TEST_DIR: ${TEST_DIR}" +echo "PWD: ${PWD}" + +echo "${INDICATOR}Install svelte-adapter-firebase ${SCRIPT_PATH}/../../ deps" +npm install + +echo "${INDICATOR}init SvelteKit Todos app" +yes "" | "$(npm init svelte@next "${TEST_DIR}")" +echo "${INDICATOR}Complete SvelteKit init" + +cp -R "${SCRIPT_PATH}"/scaffold/* "${TEST_DIR}" +cp "${SCRIPT_PATH}/scaffold/.firebaserc" "${TEST_DIR}/.firebaserc" +cp ".tool-versions" "${TEST_DIR}/.tool-versions" + +cd "${TEST_DIR}" || exit 1 +echo "${INDICATOR}PWD after cd to TEST_DIR: ${PWD}" + +echo "${INDICATOR}Set package.json:scripts.build to verbose mode" +sed -i -e 's/svelte-kit build/svelte-kit build --verbose/g' "${TEST_DIR}/package.json" + +echo "${INDICATOR}Install kit template deps" +npm install + +echo "${INDICATOR}Install svelte-adapter-firebase from ${SCRIPT_PATH}/../" +npm install "${SCRIPT_PATH}/../../" + +echo "${INDICATOR}Install functions/ deps" +npm --prefix functions install + +echo "${INDICATOR}Build Kit todos site" +npm run build + +echo "${INDICATOR}Starting emulator" +firebase emulators:start --only functions,hosting & + +sleep 8 + +echo "${INDICATOR}Test GET static page '/about'" +EXPECTED_SUBSTRING="The page you're looking at is purely static HTML" +RESULT="$(curl -L localhost:${PORT}/about)" + +if [[ "${RESULT}" != *"${EXPECTED_SUBSTRING}"* ]]; then + echo "Failed testing localhost:${PORT}/about" + exit 1 +fi + +echo "${INDICATOR}Test GET SSR route '/'" +EXPECTED_SUBSTRING="

try editing src/routes/index.svelte

" +RESULT="$(curl -L localhost:${PORT}/)" + +if [[ "${RESULT}" != *"${EXPECTED_SUBSTRING}"* ]]; then + echo "${INDICATOR}Failed testing localhost:${PORT}/" + exit 1 +fi + +echo "${INDICATOR}Test GET SSR route '/todos'" +EXPECTED_SUBSTRING="

Todos

" +RESULT="$(curl -L localhost:${PORT}/todos)" + +if [[ "${RESULT}" != *"${EXPECTED_SUBSTRING}"* ]]; then + echo "${INDICATOR}Failed testing localhost:${PORT}/todos/" + exit 1 +fi + +echo "${INDICATOR}Test POST to '/todos' API" +EXPECTED_SUBSTRING='"text":"asdf"' +# expected result = {"uid":"","created_at":01234,"text":"asdf","done":false} +# generated from the browser & copied with 'copy for cURL' browser context menu +RESULT="$(curl "http://localhost:${PORT}/todos.json" \ + -H "User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0" \ + -H "Accept: application/json" \ + -H "Accept-Language: en-GB,en;q=0.5" \ + --compressed \ + -H "Referer: http://localhost:${PORT}/todos" \ + -H "Content-Type: multipart/form-data; boundary=---------------------------349341627025106406523834848301" \ + -H "Origin: http://localhost:${PORT}" \ + -H "Connection: keep-alive" \ + -H "Cookie: userid=0a52e7d5-25d4-4b12-b307-38756d00bbcb" \ + -H "Sec-Fetch-Dest: empty" \ + -H "Sec-Fetch-Mode: cors" \ + -H "Sec-Fetch-Site: same-origin" \ + -H 'Sec-GPC: 1' --data-binary $'-----------------------------349341627025106406523834848301\r\nContent-Disposition: form-data; name="text"\r\n\r\nasdf\r\n-----------------------------349341627025106406523834848301--\r\n')" +echo "$RESULT" +if [[ "${RESULT}" != *"${EXPECTED_SUBSTRING}"* ]]; then + echo "${INDICATOR}Failed POSTing to localhost:${PORT}/todos.json" + exit 1 +fi + +echo "${INDICATOR}Success" diff --git a/tests/index.test.js b/tests/index.test.js deleted file mode 100644 index 1d16fa7..0000000 --- a/tests/index.test.js +++ /dev/null @@ -1,295 +0,0 @@ -import {fileURLToPath} from 'url'; -import path from 'path'; -import test from 'ava'; -import {ensureCompatibleCloudFunctionVersion, ensureStaticResourceDirsDiffer, parseFirebaseConfiguration, validCloudFunctionName, validCloudRunServiceId} from '../src/utils.js'; - -// ParseFirebaseConfiguration: Valid configs -test( - 'Firebase config w Cloud Functions & single site', - t => { - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('./fixtures/successes/cf_site.json', import.meta.url))}; - const result = parseFirebaseConfiguration(config); - const expectedResult = {functions: {name: 'some_func', source: path.join(path.dirname(config.firebaseJson), 'functions'), runtime: undefined}, cloudRun: false, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; - - t.deepEqual(result, expectedResult); - } -); - -test( - 'Firebase config w Cloud Functions & multiple sites', - t => { - const config = {hostingSite: 'app', sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('./fixtures/successes/cf_sites.json', import.meta.url))}; - const result = parseFirebaseConfiguration(config); - const expectedResult = {functions: {name: 'some_func', source: path.join(path.dirname(config.firebaseJson), 'functions'), runtime: undefined}, cloudRun: false, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; - - t.deepEqual(result, expectedResult); - } -); - -test( - 'Firebase config w Cloud Run & single site', - t => { - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('./fixtures/successes/cr_site.json', import.meta.url))}; - const result = parseFirebaseConfiguration(config); - const expectedResult = {functions: false, cloudRun: {serviceId: 'some-service', region: 'us-central1'}, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; - - t.deepEqual(result, expectedResult); - } -); - -test( - 'Firebase config w Cloud Run & multiple sites', - t => { - const config = {hostingSite: 'app', sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('./fixtures/successes/cr_sites.json', import.meta.url))}; - const result = parseFirebaseConfiguration(config); - const expectedResult = {functions: false, cloudRun: {serviceId: 'some-service', region: 'us-central1'}, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; - - t.deepEqual(result, expectedResult); - } -); - -// ParseFirebaseConfiguration: Invalid configs -test( - 'Firebase config does not exist', - t => { - const firebaseJson = fileURLToPath(new URL('./does_not_exist.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1000 in README'); - } -); - -test( - 'Firebase config is invalid json', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/invalid.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1001 in README'); - } -); - -test( - 'Firebase config without "hosting" field', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/missing_hosting.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1010 in README'); - } -); - -test( - 'Firebase config w multiple sites missing "site" identifier', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/sites_missing_rewrites.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1011 in README'); - } -); - -test( - 'Firebase config w multiple sites require a "hostingSite" to be specified', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cf_multi_site_requires_hostingSite.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1012 in README'); - } -); - -test( - 'Firebase config w multiple sites but no match found for a "hostingSite" specified in svelte.config.js adapter config', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cf_multi_site_requires_hostingSite.json', import.meta.url)); - const config = {hostingSite: 'no_matching_site', sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1013 in README'); - } -); - -test( - 'Firebase config w missing "public"', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/site_missing_public.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1050 in README'); - } -); - -test('Firebase config w empty "public" string', t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/site_empty_public.json', import.meta.url)); - const config = {sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1052 in README'); -}); - -test( - 'Firebase config w site missing "rewrites"', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/site_missing_rewrite.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1020 in README'); - } -); - -test( - 'Firebase config w "rewrites" mismatch', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cf_site_rewrite_mismatch.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: 'no_match', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1021 in README'); - } -); - -test( - 'Firebase config w Cloud Run missing required "serviceId" field', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cr_missing_serviceId.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1030 in README'); - } -); - -test( - 'Firebase config w Cloud Run incompatible serviceId field', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cr_invalid_serviceId.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1031 in README'); - } -); - -test( - 'Firebase config w Cloud Run incompatible region field', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cr_invalid_region.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1032 in README'); - } -); - -test( - 'Firebase config w Cloud Function invalid name', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cf_invalid_function_name.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1040 in README'); - } -); - -test( - 'Firebase config w Cloud Functions & single site missing top-level functions', - t => { - const firebaseJson = fileURLToPath(new URL('./fixtures/failures/cf_site_missing_functions.json', import.meta.url)); - const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; - const error = t.throws(() => parseFirebaseConfiguration(config)); - t.is(error.message, 'See above output. See Hint code SAF1060 in README'); - } -); - -// ValidCloudRunServiceId -test('Cloud Run serviceId with all valid char types', t => { - const result = validCloudRunServiceId('is-valid1'); - t.is(result, true); -}); - -test('Cloud Run serviceId with invalid dash prefix', t => { - const result = validCloudRunServiceId('-not-valid1'); - t.is(result, false); -}); - -test('Cloud Run serviceId with invalid dash suffix', t => { - const result = validCloudRunServiceId('not-valid1-'); - t.is(result, false); -}); - -test('Cloud Run serviceId with invalid uppercase char', t => { - const result = validCloudRunServiceId('notValid1'); - t.is(result, false); -}); - -test('Cloud Run serviceId with invalid non-dash ($) symbol', t => { - const result = validCloudRunServiceId('not$valid1'); - t.is(result, false); -}); - -test('Cloud Run serviceId with invalid non-dash (_) symbol', t => { - const result = validCloudRunServiceId('not_valid1'); - t.is(result, false); -}); - -test('Cloud Run serviceId with invalid length', t => { - const result = validCloudRunServiceId('aCloudFunctionsFunctionNameThatIsSeventyFiveCharactersLongWhichIsMoreThan63'); - t.is(result, false); -}); - -// ValidCloudFunctionName -test('Cloud Function name with valid chars', t => { - const result = validCloudFunctionName('lowercase_UPPERCASE_0123456789'); - t.is(result, true); -}); - -test('Cloud Function name with invalid dash', t => { - const result = validCloudFunctionName('is-invalid'); - t.is(result, false); -}); - -test('Cloud Function name with invalid length', t => { - const result = validCloudFunctionName('aCloudFunctionsFunctionNameThatIsSeventyFiveCharactersLongWhichIsMoreThan63'); - t.is(result, false); -}); - -// EnsureStaticResourceDirsDiffer -test('Static asset source and dest different dirs', t => { - const error = t.notThrows(() => ensureStaticResourceDirsDiffer({source: 'a', dest: 'b'})); - t.is(error, undefined); -}); - -test( - 'Static asset source and dest the same dir', - t => { - const error = t.throws(() => ensureStaticResourceDirsDiffer({source: 'a', dest: 'a'})); - t.is(error.message, 'See above output. See Hint code SAF1051 in README'); - } -); - -// EnsureCompatibleCloudFunctionVersion -test('Valid Function runtime version in package.json', t => { - const error = t.notThrows(() => ensureCompatibleCloudFunctionVersion({functionsPackageJsonEngine: '14'})); - t.is(error, undefined); -}); -test('Valid Function runtime version in firebase.json', t => { - const error = t.notThrows(() => ensureCompatibleCloudFunctionVersion({firebaseJsonFunctionsRuntime: 'nodejs14'})); - t.is(error, undefined); -}); - -test( - 'No Function runtime provided', - t => { - const error = t.throws(() => ensureCompatibleCloudFunctionVersion({})); - t.is(error.message, 'See above output. See Hint code SAF1061 in README'); - } -); -test( - 'Invalid Function runtime in package.json', - t => { - const error = t.throws(() => ensureCompatibleCloudFunctionVersion({functionsPackageJsonEngine: '12'})); - t.is(error.message, 'See above output. See Hint code SAF1061 in README'); - } -); -test( - 'Invalid Function runtime in firebase.json', - t => { - const error = t.throws(() => ensureCompatibleCloudFunctionVersion({firebaseJsonFunctionsRuntime: 'nodejs12'})); - t.is(error.message, 'See above output. See Hint code SAF1061 in README'); - } -); diff --git a/tests/integration/functions_single_site/.firebaserc b/tests/integration/functions_single_site/.firebaserc new file mode 100644 index 0000000..d8085fd --- /dev/null +++ b/tests/integration/functions_single_site/.firebaserc @@ -0,0 +1 @@ +{"projects":{"default":"demo"}} diff --git a/tests/integration/functions_single_site/firebase.json b/tests/integration/functions_single_site/firebase.json new file mode 100644 index 0000000..839c82b --- /dev/null +++ b/tests/integration/functions_single_site/firebase.json @@ -0,0 +1,26 @@ +{ + "hosting": { + "public": "public", + "site": "svelte-func-single-site", + "rewrites": [ + { + "source": "**", + "function": "sveltekit" + } + ] + }, + "functions": { + "source": "functions" + }, + "emulators": { + "ui": { + "enabled": false + }, + "hosting": { + "port": 8685 + }, + "functions": { + "port": 5001 + } + } +} diff --git a/examples/nested_app_dirs/functions/.gitignore b/tests/integration/functions_single_site/functions/.gitignore similarity index 100% rename from examples/nested_app_dirs/functions/.gitignore rename to tests/integration/functions_single_site/functions/.gitignore diff --git a/examples/nested_app_dirs/functions/index.js b/tests/integration/functions_single_site/functions/index.js similarity index 100% rename from examples/nested_app_dirs/functions/index.js rename to tests/integration/functions_single_site/functions/index.js diff --git a/examples/nested_app_dirs/functions/package.json b/tests/integration/functions_single_site/functions/package.json similarity index 100% rename from examples/nested_app_dirs/functions/package.json rename to tests/integration/functions_single_site/functions/package.json diff --git a/examples/run_single_site/svelte.config.js b/tests/integration/functions_single_site/svelte.config.js similarity index 100% rename from examples/run_single_site/svelte.config.js rename to tests/integration/functions_single_site/svelte.config.js diff --git a/tests/integration/integration-test.bash b/tests/integration/integration-test.bash new file mode 100755 index 0000000..420702c --- /dev/null +++ b/tests/integration/integration-test.bash @@ -0,0 +1,74 @@ +#!/usr/bin/env bash + +# undefined vars are errors +set -u +IFS=$'\n\t' + +# Execute integration test for provided dir. Inits SvelteKit Todo app template +# and adds Firebase Adapter with configuration from provided dir. +# Assert build assets for static and compute are in expected locations +# Requires deps in .tool-versions at repo root +# +# Usage: +# +# tests/integration/integration-test.bash "functions_single_site" "public/about/index.html" "functions/sveltekit/index.js" "." +# tests/integration/integration-test.bash "nested_app_dirs" "public/about/index.html" "functions/sveltekit/index.js" "app" +# tests/integration/integration-test.bash "run_custom_build_dir" "public/about/index.html" "custom-cloud-run-build-dir/index.js" "." +# tests/integration/integration-test.bash "run_single_site" "public/about/index.html" ".cloudrun/index.js" "." + +SOURCE_DIR="$1" +PUBLIC_FILENAME="$2" +KIT_FILENAME="$3" +NESTED_APP_DIR="${4}" + +INDICATOR="====> " +SCRIPT_PATH=$(dirname "$(realpath -s "$0")") +TEST_DIR="$(mktemp -dt "svelte-adapter-firebase-test-${SOURCE_DIR}-XXXX")" + +# Cleanup files on exit +trap 'echo "${INDICATOR}Exiting, removing ${TEST_DIR}" && rm -rf -- "$TEST_DIR"' EXIT + +echo "${INDICATOR}TEST_DIR: ${TEST_DIR}" +echo "${INDICATOR}PWD: ${PWD}" + +echo "${INDICATOR}Install svelte-adapter-firebase ${SCRIPT_PATH}/../../ deps" +npm install + +echo "${INDICATOR}init SvelteKit Todos app" +yes "" | "$(npm init svelte@next "${TEST_DIR}/${NESTED_APP_DIR}")" +echo "${INDICATOR}Complete SvelteKit init" + +cp -R "${SCRIPT_PATH}"/"${SOURCE_DIR}"/* "${TEST_DIR}" +cp "${SCRIPT_PATH}/${SOURCE_DIR}/.firebaserc" "${TEST_DIR}/.firebaserc" +cp ".tool-versions" "${TEST_DIR}/.tool-versions" + +cd "${TEST_DIR}/${NESTED_APP_DIR}" || exit 1 +echo "${INDICATOR}PWD after cd to TEST_DIR: ${PWD}" + +echo "${INDICATOR}Set package.json:scripts.build to verbose mode" +sed -i -e 's/svelte-kit build/svelte-kit build --verbose/g' "${TEST_DIR}/${NESTED_APP_DIR}/package.json" + +echo "${INDICATOR}Install kit template deps" +npm install + +echo "${INDICATOR}Install svelte-adapter-firebase from ${SCRIPT_PATH}/../../" +npm install "${SCRIPT_PATH}/../../" + +echo "${INDICATOR}Build Kit todos site" +npm run build + +# Check ${PUBLIC_FILENAME} exists +if [ ! -f "${TEST_DIR}/${NESTED_APP_DIR}/${PUBLIC_FILENAME}" ]; then + echo "${INDICATOR}FAILED to find ${TEST_DIR}/${NESTED_APP_DIR}/${PUBLIC_FILENAME}" + exit 1 +fi + +# Check ${KIT_FILENAME} +if [ ! -f "${TEST_DIR}/${KIT_FILENAME}" ]; then + echo "${INDICATOR}FAILED to find ${TEST_DIR}/${KIT_FILENAME}" + exit 1 +fi + +echo "${INDICATOR}Success" + + diff --git a/tests/integration/nested_app_dirs/.firebaserc b/tests/integration/nested_app_dirs/.firebaserc new file mode 100644 index 0000000..d8085fd --- /dev/null +++ b/tests/integration/nested_app_dirs/.firebaserc @@ -0,0 +1 @@ +{"projects":{"default":"demo"}} diff --git a/examples/nested_app_dirs/app/svelte.config.js b/tests/integration/nested_app_dirs/app/svelte.config.js similarity index 100% rename from examples/nested_app_dirs/app/svelte.config.js rename to tests/integration/nested_app_dirs/app/svelte.config.js diff --git a/examples/nested_app_dirs/firebase.json b/tests/integration/nested_app_dirs/firebase.json similarity index 69% rename from examples/nested_app_dirs/firebase.json rename to tests/integration/nested_app_dirs/firebase.json index 86a3e89..a97e698 100644 --- a/examples/nested_app_dirs/firebase.json +++ b/tests/integration/nested_app_dirs/firebase.json @@ -14,19 +14,13 @@ }, "emulators": { "ui": { - "enabled": true + "enabled": false + }, + "hosting": { + "port": 8685 }, "functions": { "port": 5001 - }, - "auth": { - "port": 9099 - }, - "firestore": { - "port": 8080 - }, - "pubsub": { - "port": 8085 } } } diff --git a/tests/integration/nested_app_dirs/functions/.gitignore b/tests/integration/nested_app_dirs/functions/.gitignore new file mode 100644 index 0000000..6b6c9af --- /dev/null +++ b/tests/integration/nested_app_dirs/functions/.gitignore @@ -0,0 +1,5 @@ +node_modules/ + +# Specific to this app's firebase.json +# ignore SvelteKit build output in Cloud Function +sveltekit/ diff --git a/tests/integration/nested_app_dirs/functions/index.js b/tests/integration/nested_app_dirs/functions/index.js new file mode 100644 index 0000000..aa78ee6 --- /dev/null +++ b/tests/integration/nested_app_dirs/functions/index.js @@ -0,0 +1,13 @@ +const functions = require('firebase-functions'); + +let sveltekitServer; +exports.sveltekit = functions.https.onRequest(async (request, response) => { + if (!sveltekitServer) { + functions.logger.info('Initialising SvelteKit SSR Handler'); + sveltekitServer = require('./sveltekit/index').default; + functions.logger.info('SvelteKit SSR Handler initialised!'); + } + + functions.logger.info('Requested resource: ' + request.originalUrl); + return sveltekitServer(request, response); +}); diff --git a/tests/integration/nested_app_dirs/functions/package.json b/tests/integration/nested_app_dirs/functions/package.json new file mode 100644 index 0000000..48bbe8c --- /dev/null +++ b/tests/integration/nested_app_dirs/functions/package.json @@ -0,0 +1,23 @@ +{ + "name": "functions", + "description": "Cloud Functions for Firebase", + "scripts": { + "serve": "firebase emulators:start --only functions", + "shell": "firebase functions:shell", + "start": "npm run shell", + "deploy": "firebase deploy --only functions", + "logs": "firebase functions:log" + }, + "engines": { + "node": "14" + }, + "main": "index.js", + "dependencies": { + "firebase-admin": "^9.2.0", + "firebase-functions": "^3.11.0" + }, + "devDependencies": { + "firebase-functions-test": "^0.2.0" + }, + "private": true +} diff --git a/tests/integration/run_custom_build_dir/.firebaserc b/tests/integration/run_custom_build_dir/.firebaserc new file mode 100644 index 0000000..d8085fd --- /dev/null +++ b/tests/integration/run_custom_build_dir/.firebaserc @@ -0,0 +1 @@ +{"projects":{"default":"demo"}} diff --git a/examples/run_custom_build_dir/firebase.json b/tests/integration/run_custom_build_dir/firebase.json similarity index 69% rename from examples/run_custom_build_dir/firebase.json rename to tests/integration/run_custom_build_dir/firebase.json index cb37067..e9ac037 100644 --- a/examples/run_custom_build_dir/firebase.json +++ b/tests/integration/run_custom_build_dir/firebase.json @@ -13,19 +13,13 @@ }, "emulators": { "ui": { - "enabled": true + "enabled": false + }, + "hosting": { + "port": 8685 }, "functions": { "port": 5001 - }, - "auth": { - "port": 9099 - }, - "firestore": { - "port": 8080 - }, - "pubsub": { - "port": 8085 } } } diff --git a/examples/run_custom_build_dir/svelte.config.js b/tests/integration/run_custom_build_dir/svelte.config.js similarity index 100% rename from examples/run_custom_build_dir/svelte.config.js rename to tests/integration/run_custom_build_dir/svelte.config.js diff --git a/tests/integration/run_single_site/.firebaserc b/tests/integration/run_single_site/.firebaserc new file mode 100644 index 0000000..d8085fd --- /dev/null +++ b/tests/integration/run_single_site/.firebaserc @@ -0,0 +1 @@ +{"projects":{"default":"demo"}} diff --git a/examples/run_single_site/firebase.json b/tests/integration/run_single_site/firebase.json similarity index 68% rename from examples/run_single_site/firebase.json rename to tests/integration/run_single_site/firebase.json index 21103e3..555991c 100644 --- a/examples/run_single_site/firebase.json +++ b/tests/integration/run_single_site/firebase.json @@ -13,19 +13,13 @@ }, "emulators": { "ui": { - "enabled": true + "enabled": false + }, + "hosting": { + "port": 8685 }, "functions": { "port": 5001 - }, - "auth": { - "port": 9099 - }, - "firestore": { - "port": 8080 - }, - "pubsub": { - "port": 8085 } } } diff --git a/tests/integration/run_single_site/svelte.config.js b/tests/integration/run_single_site/svelte.config.js new file mode 100644 index 0000000..bb640d7 --- /dev/null +++ b/tests/integration/run_single_site/svelte.config.js @@ -0,0 +1,12 @@ +import firebase from 'svelte-adapter-firebase'; + +/** @type {import('@sveltejs/kit').Config} */ +const config = { + kit: { + // Hydrate the
element in src/app.html + adapter: firebase(), + target: '#svelte' + } +}; + +export default config; diff --git a/tests/fixtures/failures/cf_invalid_function_name.json b/tests/unit/fixtures/failures/cf_invalid_function_name.json similarity index 100% rename from tests/fixtures/failures/cf_invalid_function_name.json rename to tests/unit/fixtures/failures/cf_invalid_function_name.json diff --git a/tests/fixtures/failures/cf_multi_site_no_hostingSite_match.json b/tests/unit/fixtures/failures/cf_multi_site_no_hostingSite_match.json similarity index 100% rename from tests/fixtures/failures/cf_multi_site_no_hostingSite_match.json rename to tests/unit/fixtures/failures/cf_multi_site_no_hostingSite_match.json diff --git a/tests/fixtures/failures/cf_multi_site_requires_hostingSite.json b/tests/unit/fixtures/failures/cf_multi_site_requires_hostingSite.json similarity index 100% rename from tests/fixtures/failures/cf_multi_site_requires_hostingSite.json rename to tests/unit/fixtures/failures/cf_multi_site_requires_hostingSite.json diff --git a/tests/fixtures/failures/cf_site_missing_functions.json b/tests/unit/fixtures/failures/cf_site_missing_functions.json similarity index 100% rename from tests/fixtures/failures/cf_site_missing_functions.json rename to tests/unit/fixtures/failures/cf_site_missing_functions.json diff --git a/tests/fixtures/failures/cf_site_rewrite_mismatch.json b/tests/unit/fixtures/failures/cf_site_rewrite_mismatch.json similarity index 100% rename from tests/fixtures/failures/cf_site_rewrite_mismatch.json rename to tests/unit/fixtures/failures/cf_site_rewrite_mismatch.json diff --git a/tests/fixtures/failures/cr_invalid_region.json b/tests/unit/fixtures/failures/cr_invalid_region.json similarity index 100% rename from tests/fixtures/failures/cr_invalid_region.json rename to tests/unit/fixtures/failures/cr_invalid_region.json diff --git a/tests/fixtures/failures/cr_invalid_serviceId.json b/tests/unit/fixtures/failures/cr_invalid_serviceId.json similarity index 100% rename from tests/fixtures/failures/cr_invalid_serviceId.json rename to tests/unit/fixtures/failures/cr_invalid_serviceId.json diff --git a/tests/fixtures/failures/cr_missing_serviceId.json b/tests/unit/fixtures/failures/cr_missing_serviceId.json similarity index 100% rename from tests/fixtures/failures/cr_missing_serviceId.json rename to tests/unit/fixtures/failures/cr_missing_serviceId.json diff --git a/tests/fixtures/failures/invalid.json b/tests/unit/fixtures/failures/invalid.json similarity index 100% rename from tests/fixtures/failures/invalid.json rename to tests/unit/fixtures/failures/invalid.json diff --git a/tests/fixtures/failures/missing_hosting.json b/tests/unit/fixtures/failures/missing_hosting.json similarity index 100% rename from tests/fixtures/failures/missing_hosting.json rename to tests/unit/fixtures/failures/missing_hosting.json diff --git a/tests/fixtures/failures/site_empty_public.json b/tests/unit/fixtures/failures/site_empty_public.json similarity index 100% rename from tests/fixtures/failures/site_empty_public.json rename to tests/unit/fixtures/failures/site_empty_public.json diff --git a/tests/fixtures/failures/site_missing_public.json b/tests/unit/fixtures/failures/site_missing_public.json similarity index 100% rename from tests/fixtures/failures/site_missing_public.json rename to tests/unit/fixtures/failures/site_missing_public.json diff --git a/tests/fixtures/failures/site_missing_rewrite.json b/tests/unit/fixtures/failures/site_missing_rewrite.json similarity index 100% rename from tests/fixtures/failures/site_missing_rewrite.json rename to tests/unit/fixtures/failures/site_missing_rewrite.json diff --git a/tests/fixtures/failures/sites_missing_rewrites.json b/tests/unit/fixtures/failures/sites_missing_rewrites.json similarity index 100% rename from tests/fixtures/failures/sites_missing_rewrites.json rename to tests/unit/fixtures/failures/sites_missing_rewrites.json diff --git a/tests/fixtures/successes/cf_site.json b/tests/unit/fixtures/successes/cf_site.json similarity index 100% rename from tests/fixtures/successes/cf_site.json rename to tests/unit/fixtures/successes/cf_site.json diff --git a/tests/fixtures/successes/cf_sites.json b/tests/unit/fixtures/successes/cf_sites.json similarity index 100% rename from tests/fixtures/successes/cf_sites.json rename to tests/unit/fixtures/successes/cf_sites.json diff --git a/tests/fixtures/successes/cr_site.json b/tests/unit/fixtures/successes/cr_site.json similarity index 100% rename from tests/fixtures/successes/cr_site.json rename to tests/unit/fixtures/successes/cr_site.json diff --git a/tests/fixtures/successes/cr_sites.json b/tests/unit/fixtures/successes/cr_sites.json similarity index 100% rename from tests/fixtures/successes/cr_sites.json rename to tests/unit/fixtures/successes/cr_sites.json diff --git a/tests/unit/src/files/firebase-to-svelte-kit.test.js b/tests/unit/src/files/firebase-to-svelte-kit.test.js new file mode 100644 index 0000000..c42075c --- /dev/null +++ b/tests/unit/src/files/firebase-to-svelte-kit.test.js @@ -0,0 +1,112 @@ +import {test} from 'uvu'; +import * as assert from 'uvu/assert'; // eslint-disable-line node/file-extension-in-import + +import {toSvelteKitRequest, toSvelteKitHeaders} from '../../../../src/files/firebase-to-svelte-kit.js'; + +// Headers +test('leave headers without string[] untouched', () => { + const input = { + accept: 'something', + 'accept-language': 'en' + }; + const expected = input; + const result = toSvelteKitHeaders(input); + + assert.equal(result, expected, 'match'); +}); + +test('convert string[] headers to csv string values', () => { + const expected = { + accept: 'something', + 'accept-language': 'en', + 'set-cookie': 'some,cookie,data' + }; + const result = toSvelteKitHeaders({ + accept: 'something', + 'accept-language': 'en', + 'set-cookie': ['some', 'cookie', 'data'] + }); + + assert.equal(result, expected, 'string[] has been converted to csv string'); +}); + +test('convert string[] headers of any kind to csv string values', () => { + const expected = { + accept: 'something', + 'accept-language': 'en', + 'user-defined-header': 'some,user,defined,header,data' + }; + const result = toSvelteKitHeaders({ + accept: 'something', + 'accept-language': 'en', + 'user-defined-header': ['some', 'user', 'defined', 'header', 'data'] + }); + + assert.equal(result, expected, 'string[] has been converted to csv string'); +}); + +// Request +test('firebase-functions.https.request GET is converted to SvelteKit Incoming request type correctly', () => { + const firebaseRequest = { + method: 'GET', + headers: { + 'accept-language': 'en', + 'set-cookie': ['some', 'cookie', 'data'], + host: 'us-central1-func.cloudfunctions.net', + 'x-forwarded-proto': 'https' + }, + url: '/url?some=thing' + }; + + const expectedKitRequest = { + method: 'GET', + headers: { + 'accept-language': 'en', + 'set-cookie': 'some,cookie,data', + host: 'us-central1-func.cloudfunctions.net', + 'x-forwarded-proto': 'https' + }, + rawBody: new Uint8Array(), + host: 'https://us-central1-func.cloudfunctions.net', + path: '/url', + query: new URL('/url?some=thing', 'https://us-central1-func.cloudfunctions.net').searchParams + }; + + const result = toSvelteKitRequest(firebaseRequest); + + assert.equal(result, expectedKitRequest, 'match'); +}); + +test('firebase-functions.https.request POST is converted to SvelteKit Incoming request type correctly', () => { + const firebaseRequest = { + method: 'POST', + headers: { + 'accept-language': 'en', + 'set-cookie': ['some', 'cookie', 'data'], + host: 'us-central1-func.cloudfunctions.net', + 'x-forwarded-proto': 'https' + }, + rawBody: Buffer.from('some-data', 'utf8'), + url: '/url?some=thing' + }; + + const expectedKitRequest = { + method: 'POST', + headers: { + 'accept-language': 'en', + 'set-cookie': 'some,cookie,data', + host: 'us-central1-func.cloudfunctions.net', + 'x-forwarded-proto': 'https' + }, + rawBody: Buffer.from('some-data', 'utf-8'), + host: 'https://us-central1-func.cloudfunctions.net', + path: '/url', + query: new URL('/url?some=thing', 'https://us-central1-func.cloudfunctions.net').searchParams + }; + + const result = toSvelteKitRequest(firebaseRequest); + + assert.equal(result, expectedKitRequest, 'match'); +}); + +test.run(); diff --git a/tests/unit/src/utils.test.js b/tests/unit/src/utils.test.js new file mode 100644 index 0000000..c07348d --- /dev/null +++ b/tests/unit/src/utils.test.js @@ -0,0 +1,276 @@ +import {fileURLToPath} from 'url'; +import path from 'path'; +import {test} from 'uvu'; +import * as assert from 'uvu/assert'; // eslint-disable-line node/file-extension-in-import +import {ensureCompatibleCloudFunctionVersion, ensureStaticResourceDirsDiffer, parseFirebaseConfiguration, validCloudFunctionName, validCloudRunServiceId} from '../../../src/utils.js'; + +// ParseFirebaseConfiguration: Valid configs +test( + 'Firebase config w Cloud Functions & single site', + () => { + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('../fixtures/successes/cf_site.json', import.meta.url))}; + const result = parseFirebaseConfiguration(config); + const expectedResult = {functions: {name: 'some_func', source: path.join(path.dirname(config.firebaseJson), 'functions'), runtime: undefined}, cloudRun: false, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; + + assert.equal(result, expectedResult); + } +); + +test( + 'Firebase config w Cloud Functions & multiple sites', + () => { + const config = {hostingSite: 'app', sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('../fixtures/successes/cf_sites.json', import.meta.url))}; + const result = parseFirebaseConfiguration(config); + const expectedResult = {functions: {name: 'some_func', source: path.join(path.dirname(config.firebaseJson), 'functions'), runtime: undefined}, cloudRun: false, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; + + assert.equal(result, expectedResult); + } +); + +test( + 'Firebase config w Cloud Run & single site', + () => { + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('../fixtures/successes/cr_site.json', import.meta.url))}; + const result = parseFirebaseConfiguration(config); + const expectedResult = {functions: false, cloudRun: {serviceId: 'some-service', region: 'us-central1'}, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; + + assert.equal(result, expectedResult); + } +); + +test( + 'Firebase config w Cloud Run & multiple sites', + () => { + const config = {hostingSite: 'app', sourceRewriteMatch: '**', firebaseJson: fileURLToPath(new URL('../fixtures/successes/cr_sites.json', import.meta.url))}; + const result = parseFirebaseConfiguration(config); + const expectedResult = {functions: false, cloudRun: {serviceId: 'some-service', region: 'us-central1'}, publicDir: path.join(path.dirname(config.firebaseJson), 'app'), firebaseJsonDir: path.dirname(config.firebaseJson)}; + + assert.equal(result, expectedResult); + } +); + +// ParseFirebaseConfiguration: Invalid configs +test( + 'Firebase config does not exist', + () => { + const firebaseJson = fileURLToPath(new URL('./does_not_exist.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1000 in README'); + } +); + +test( + 'Firebase config is invalid json', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/invalid.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1001 in README'); + } +); + +test( + 'Firebase config without "hosting" field', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/missing_hosting.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1010 in README'); + } +); + +test( + 'Firebase config w multiple sites missing "site" identifier', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/sites_missing_rewrites.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1011 in README'); + } +); + +test( + 'Firebase config w multiple sites require a "hostingSite" to be specified', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cf_multi_site_requires_hostingSite.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1012 in README'); + } +); + +test( + 'Firebase config w multiple sites but no match found for a "hostingSite" specified in svelte.config.js adapter config', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cf_multi_site_requires_hostingSite.json', import.meta.url)); + const config = {hostingSite: 'no_matching_site', sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1013 in README'); + } +); + +test( + 'Firebase config w missing "public"', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/site_missing_public.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1050 in README'); + } +); + +test('Firebase config w empty "public" string', () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/site_empty_public.json', import.meta.url)); + const config = {sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1052 in README'); +}); + +test( + 'Firebase config w site missing "rewrites"', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/site_missing_rewrite.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1020 in README'); + } +); + +test( + 'Firebase config w "rewrites" mismatch', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cf_site_rewrite_mismatch.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: 'no_match', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1021 in README'); + } +); + +test( + 'Firebase config w Cloud Run missing required "serviceId" field', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cr_missing_serviceId.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1030 in README'); + } +); + +test( + 'Firebase config w Cloud Run incompatible serviceId field', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cr_invalid_serviceId.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1031 in README'); + } +); + +test( + 'Firebase config w Cloud Run incompatible region field', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cr_invalid_region.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1032 in README'); + } +); + +test( + 'Firebase config w Cloud Function invalid name', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cf_invalid_function_name.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1040 in README'); + } +); + +test( + 'Firebase config w Cloud Functions & single site missing top-level functions', + () => { + const firebaseJson = fileURLToPath(new URL('../fixtures/failures/cf_site_missing_functions.json', import.meta.url)); + const config = {hostingSite: undefined, sourceRewriteMatch: '**', firebaseJson}; + assert.throws(() => parseFirebaseConfiguration(config), 'See above output. See Hint code SAF1060 in README'); + } +); + +// ValidCloudRunServiceId +test('Cloud Run serviceId with all valid char types', () => { + const result = validCloudRunServiceId('is-valid1'); + assert.is(result, true); +}); + +test('Cloud Run serviceId with invalid dash prefix', () => { + const result = validCloudRunServiceId('-not-valid1'); + assert.is(result, false); +}); + +test('Cloud Run serviceId with invalid dash suffix', () => { + const result = validCloudRunServiceId('not-valid1-'); + assert.is(result, false); +}); + +test('Cloud Run serviceId with invalid uppercase char', () => { + const result = validCloudRunServiceId('notValid1'); + assert.is(result, false); +}); + +test('Cloud Run serviceId with invalid non-dash ($) symbol', () => { + const result = validCloudRunServiceId('not$valid1'); + assert.is(result, false); +}); + +test('Cloud Run serviceId with invalid non-dash (_) symbol', () => { + const result = validCloudRunServiceId('not_valid1'); + assert.is(result, false); +}); + +test('Cloud Run serviceId with invalid length', () => { + const result = validCloudRunServiceId('aCloudFunctionsFunctionNameThatIsSeventyFiveCharactersLongWhichIsMoreThan63'); + assert.is(result, false); +}); + +// ValidCloudFunctionName +test('Cloud Function name with valid chars', () => { + const result = validCloudFunctionName('lowercase_UPPERCASE_0123456789'); + assert.is(result, true); +}); + +test('Cloud Function name with invalid dash', () => { + const result = validCloudFunctionName('is-invalid'); + assert.is(result, false); +}); + +test('Cloud Function name with invalid length', () => { + const result = validCloudFunctionName('aCloudFunctionsFunctionNameThatIsSeventyFiveCharactersLongWhichIsMoreThan63'); + assert.is(result, false); +}); + +// EnsureStaticResourceDirsDiffer +test('Static asset source and dest different dirs', () => { + assert.not.throws(() => ensureStaticResourceDirsDiffer({source: 'a', dest: 'b'})); +}); + +test( + 'Static asset source and dest the same dir', + () => { + assert.throws(() => ensureStaticResourceDirsDiffer({source: 'a', dest: 'a'}), 'See above output. See Hint code SAF1051 in README'); + } +); + +// EnsureCompatibleCloudFunctionVersion +test('Valid Function runtime version in package.json', () => { + assert.not.throws(() => ensureCompatibleCloudFunctionVersion({functionsPackageJsonEngine: '14'})); +}); +test('Valid Function runtime version in firebase.json', () => { + assert.not.throws(() => ensureCompatibleCloudFunctionVersion({firebaseJsonFunctionsRuntime: 'nodejs14'})); +}); + +test( + 'No Function runtime provided', + () => { + assert.throws(() => ensureCompatibleCloudFunctionVersion({}), 'See above output. See Hint code SAF1061 in README'); + } +); +test( + 'Invalid Function runtime in package.json', + () => { + assert.throws(() => ensureCompatibleCloudFunctionVersion({functionsPackageJsonEngine: '12'}), 'See above output. See Hint code SAF1061 in README'); + } +); +test( + 'Invalid Function runtime in firebase.json', + () => { + assert.throws(() => ensureCompatibleCloudFunctionVersion({firebaseJsonFunctionsRuntime: 'nodejs12'}), 'See above output. See Hint code SAF1061 in README'); + } +); + +test.run();