1
0
mirror of synced 2026-02-07 03:00:10 -05:00

Compare commits

...

6 Commits

Author SHA1 Message Date
Fran Zekan
946db95245 Fix package.json depend missing 2022-08-15 15:09:47 +02:00
Fran Zekan
15b95d3fd7 Fix lock file 2022-08-15 14:46:03 +02:00
Fran Zekan
a72897bcfe Add back whole config being returned 2022-08-15 14:39:37 +02:00
Fran Zekan
c3f79cea23 Extract codegen tasks and add patching nextjs validation config 2022-08-15 14:38:40 +02:00
github-actions[bot]
6eb5bc8987 Version Packages (beta) (#3732)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2022-08-15 11:38:08 +02:00
Aleksandra
0f4926fd1f Set latest tag in package json files (#3731) 2022-08-15 11:29:21 +02:00
32 changed files with 232 additions and 112 deletions

View File

@@ -0,0 +1,10 @@
---
"@blitzjs/codemod": patch
"@blitzjs/generator": patch
"@blitzjs/auth": patch
"@blitzjs/next": patch
"@blitzjs/rpc": patch
"@blitzjs/config": patch
---
Set current Blitz tag to latest

View File

@@ -107,6 +107,7 @@
"poor-peas-lick",
"poor-penguins-look",
"poor-shrimps-think",
"poor-walls-relax",
"popular-teachers-pay",
"pretty-games-march",
"purple-singers-greet",

View File

@@ -1,6 +1,6 @@
# Contributing
[Read the Contributing Guide at Blitzjs.com](https://alpha.blitzjs.com/docs/contributing)
[Read the Contributing Guide at Blitzjs.com](https://blitzjs.com/docs/contributing)
## To run tests

View File

@@ -29,7 +29,7 @@
"@blitzjs/rpc": "workspace:*",
"@hookform/resolvers": "2.8.8",
"@prisma/client": "4.0.0",
"blitz": "workspace:2.0.0-beta.0",
"blitz": "workspace:2.0.0-beta.1",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",

View File

@@ -1,5 +1,12 @@
# @blitzjs/auth
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
- blitz@2.0.0-beta.1
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/auth",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"build": "unbuild",
"predev": "wait-on -d 250 ../blitz/dist/index-server.d.ts",
@@ -26,7 +26,7 @@
"@types/secure-password": "3.1.1",
"b64-lite": "1.4.0",
"bad-behavior": "1.0.1",
"blitz": "2.0.0-beta.0",
"blitz": "2.0.0-beta.1",
"cookie": "0.4.1",
"cookie-session": "2.0.0",
"debug": "4.3.3",
@@ -40,7 +40,7 @@
"url": "0.11.0"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-beta.0",
"@blitzjs/config": "workspace:2.0.0-beta.1",
"@testing-library/react": "13.0.0",
"@testing-library/react-hooks": "7.0.2",
"@types/cookie": "0.4.1",

View File

@@ -1,5 +1,13 @@
# @blitzjs/next
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
- Updated dependencies [0f4926fd]
- @blitzjs/rpc@2.0.0-beta.1
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/next",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"build": "unbuild",
"dev": "pnpm predev && pnpm watch unbuild src --wait=0.2",
@@ -24,7 +24,7 @@
"eslint.js"
],
"dependencies": {
"@blitzjs/rpc": "2.0.0-beta.0",
"@blitzjs/rpc": "2.0.0-beta.1",
"@tanstack/react-query": "4.0.10",
"@types/hoist-non-react-statics": "3.3.1",
"debug": "4.3.3",
@@ -34,7 +34,7 @@
"supports-color": "8.1.1"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-beta.0",
"@blitzjs/config": "workspace:2.0.0-beta.1",
"@testing-library/dom": "8.13.0",
"@testing-library/jest-dom": "5.16.3",
"@testing-library/react": "13.0.0",
@@ -44,7 +44,7 @@
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"@types/testing-library__react-hooks": "4.0.0",
"blitz": "2.0.0-beta.0",
"blitz": "2.0.0-beta.1",
"cross-spawn": "7.0.3",
"find-up": "4.1.0",
"next": "12.2.0",

View File

@@ -240,8 +240,7 @@ export function withBlitz(nextConfig: BlitzConfig = {}) {
},
})
const {blitz, ...rest} = config
return rest
return config
}
export type PrefetchQueryFn = <T extends AsyncFunc, TInput = FirstParam<T>>(

View File

@@ -1,5 +1,13 @@
# @blitzjs/rpc
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
- Updated dependencies [0f4926fd]
- @blitzjs/auth@2.0.0-beta.1
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/rpc",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"build": "unbuild",
"predev": "wait-on -d 250 ../blitz/dist/index-server.d.ts && wait-on -d 250 ../blitz-auth/dist/index-browser.d.ts",
@@ -20,7 +20,7 @@
"dist/**"
],
"dependencies": {
"@blitzjs/auth": "2.0.0-beta.0",
"@blitzjs/auth": "2.0.0-beta.1",
"@tanstack/react-query": "4.0.10",
"b64-lite": "1.4.0",
"bad-behavior": "1.0.1",
@@ -30,11 +30,11 @@
"supports-color": "8.1.1"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-beta.0",
"@blitzjs/config": "workspace:2.0.0-beta.1",
"@types/debug": "4.1.7",
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"blitz": "2.0.0-beta.0",
"blitz": "2.0.0-beta.1",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",

View File

@@ -1,5 +1,12 @@
# blitz
## 2.0.0-beta.1
### Patch Changes
- Updated dependencies [0f4926fd]
- @blitzjs/generator@2.0.0-beta.1
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "blitz",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"build": "unbuild",
"dev": "watch unbuild src --wait=0.2",
@@ -23,7 +23,7 @@
"blitz": "bin/blitz"
},
"dependencies": {
"@blitzjs/generator": "2.0.0-beta.0",
"@blitzjs/generator": "2.0.0-beta.1",
"arg": "5.0.1",
"boxen": "7.0.0",
"chalk": "^4.1.0",
@@ -47,6 +47,7 @@
"prompts": "2.4.2",
"resolve-cwd": "3.0.0",
"resolve-from": "5.0.0",
"semver": "7.3.7",
"superjson": "1.8.0",
"supports-color": "8.1.1",
"ts-node": "10.7.0",
@@ -55,7 +56,7 @@
"watchpack": "2.1.1"
},
"devDependencies": {
"@blitzjs/config": "workspace:2.0.0-beta.0",
"@blitzjs/config": "workspace:2.0.0-beta.1",
"@types/cookie": "0.4.1",
"@types/cross-spawn": "6.0.2",
"@types/debug": "4.1.7",

View File

@@ -1,54 +0,0 @@
import {generateManifest} from "./routes-manifest"
import {log} from "../../logging"
import resolveCwd from "resolve-cwd"
import {join} from "path"
import fs from "fs-extra"
import {getPackageJson} from "./get-package-json"
import {runPrisma} from "../../utils/run-prisma"
export const codegenTasks = async () => {
try {
/*
Updates the user's nextjs file and adds onRecoverableError to the hydrateRoot 3rd parameter object.
We can remove this when https://github.com/vercel/next.js/pull/38207 is merged into next.js
*/
const nextDir = await resolveCwd("next")
const nextClientIndex = join(nextDir, "../..", "client", "index.js")
const readFile = await fs.readFile(nextClientIndex)
const updatedFile = readFile
.toString()
.replace(
/ReactDOM\.hydrateRoot\(.*?\);/,
`ReactDOM.hydrateRoot(domEl, reactEl, process.env.NODE_ENV === 'development' ? {onRecoverableError: (err) => err.toString().includes("could not finish this Suspense boundary") ? null : console.error(err)} : undefined);`,
)
await fs.writeFile(nextClientIndex, updatedFile)
log.success("Next.js was successfully patched with a React Suspense fix")
} catch (err) {
log.error(JSON.stringify(err, null, 2))
}
try {
await generateManifest()
log.success("Routes manifest was successfully generated")
const {dependencies, devDependencies} = await getPackageJson()
const hasPrisma = Object.keys({...dependencies, ...devDependencies}).some(
(name) => name === "prisma",
)
if (hasPrisma) {
let prismaSpinner = log.spinner(`Generating Prisma client`).start()
const result = await runPrisma(["generate"], true)
if (result.success) {
prismaSpinner.succeed(log.greenText("Generated Prisma client"))
} else {
prismaSpinner.fail()
console.log("\n" + result.stderr)
process.exit(1)
}
}
} catch (err) {
log.error(JSON.stringify(err, null, 2))
}
}

View File

@@ -0,0 +1,22 @@
import {log} from "../../../logging"
import {runPrisma} from "../../../utils/run-prisma"
import {getPackageJson} from "../get-package-json"
export const generatePrismaClient = async () => {
const {dependencies, devDependencies} = await getPackageJson()
const hasPrisma = Object.keys({...dependencies, ...devDependencies}).some(
(name) => name === "prisma",
)
if (hasPrisma) {
let prismaSpinner = log.spinner(`Generating Prisma client`).start()
const result = await runPrisma(["generate"], true)
if (result.success) {
prismaSpinner.succeed(log.greenText("Generated Prisma client"))
} else {
prismaSpinner.fail()
console.log("\n" + result.stderr)
process.exit(1)
}
}
}

View File

@@ -0,0 +1,25 @@
import {generateManifest} from "../routes-manifest"
import {log} from "../../../logging"
import {generatePrismaClient} from "./generatePrisma"
import {patchNextSuspenseBug, patchNextConfigWarning} from "./patchNextJs"
const _tryCatch = async (fn: () => Promise<unknown>) => {
try {
await fn()
} catch (err) {
log.error(JSON.stringify(err, null, 2))
}
}
export const codegenTasks = async () => {
await _tryCatch(patchNextSuspenseBug)
await _tryCatch(patchNextConfigWarning)
await _tryCatch(async () => {
await generateManifest()
log.success("Routes manifest was successfully generated")
})
await _tryCatch(generatePrismaClient)
}

View File

@@ -0,0 +1,63 @@
import {join} from "path"
import semver from "semver"
import resolveCwd from "resolve-cwd"
import fs from "fs-extra"
import {log} from "../../../logging"
import {getPackageJson} from "../get-package-json"
const modifyNextFile = async (
path: string,
replacer: (str: string) => string,
semverCheck?: (version: string) => boolean,
) => {
const nextDir = resolveCwd("next")
if (semverCheck) {
const pkgJson = await getPackageJson(nextDir)
if (!semverCheck(pkgJson.version)) {
return
}
}
const nextClientIndex = join(nextDir, path)
const readFile = await fs.readFile(nextClientIndex)
const updatedFile = replacer(readFile.toString())
await fs.writeFile(nextClientIndex, updatedFile)
}
export const patchNextSuspenseBug = async () => {
/*
Updates the user's nextjs file and adds onRecoverableError to the hydrateRoot 3rd parameter object.
We can remove this when https://github.com/vercel/next.js/pull/38207 is merged into next.js
*/
await modifyNextFile("../../client/index.js", (str) => {
return str.replace(
/ReactDOM\.hydrateRoot\(.*?\);/,
`ReactDOM.hydrateRoot(domEl, reactEl, process.env.NODE_ENV === 'development' ? {onRecoverableError: (err) => err.toString().includes("could not finish this Suspense boundary") ? null : console.error(err)} : undefined);`,
)
})
log.success("Next.js was successfully patched with a React Suspense fix")
}
export const patchNextConfigWarning = async () => {
/*
Updates the user's nextjs config validation to add blitz as a valid prop in the config schema
We can remove this when https://github.com/vercel/next.js/issues/39606 issue gets resolved
*/
await modifyNextFile(
"../../client/index.js",
(str) => {
return str.replace(
/type:"object",additionalProperties:false,properties:{amp:{/,
`type:"object",additionalProperties:false,properties:{blitz:{type:"any"},amp:{`,
)
},
(version) => semver.gte(version, "12.2.3"),
)
log.success("Next.js was successfully patched with config warning fix")
}

View File

@@ -2,8 +2,8 @@ import {existsSync} from "fs"
import {readJSON} from "fs-extra"
import {join} from "path"
export const getPackageJson = async () => {
const pkgJsonPath = join(process.cwd(), "package.json")
export const getPackageJson = async (path = process.cwd()) => {
const pkgJsonPath = join(path, "package.json")
if (existsSync(pkgJsonPath)) {
return readJSON(pkgJsonPath)
}

View File

@@ -1,5 +1,14 @@
# @blitzjs/codemod
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
- Updated dependencies [0f4926fd]
- @blitzjs/generator@2.0.0-beta.1
- blitz@2.0.0-beta.1
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/codemod",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"build": "unbuild",
"dev": "watch unbuild src --wait=0.2",
@@ -25,9 +25,9 @@
"@babel/plugin-proposal-class-properties": "7.17.12",
"@babel/plugin-syntax-jsx": "7.17.12",
"@babel/plugin-syntax-typescript": "7.17.12",
"@blitzjs/generator": "2.0.0-beta.0",
"@blitzjs/generator": "2.0.0-beta.1",
"arg": "5.0.1",
"blitz": "2.0.0-beta.0",
"blitz": "2.0.0-beta.1",
"chalk": "^4.1.0",
"cross-spawn": "7.0.3",
"debug": "4.3.3",

View File

@@ -23,7 +23,7 @@ import {
} from "./utils"
import {log} from "blitz"
const CURRENT_BLITZ_TAG = "alpha"
const CURRENT_BLITZ_TAG = "latest"
class ExpectedError extends Error {
constructor(message: string) {

View File

@@ -1,5 +1,11 @@
# @blitzjs/config
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,7 +1,7 @@
{
"name": "@blitzjs/config",
"private": true,
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "5.9.1",

View File

@@ -1,5 +1,11 @@
# @blitzjs/generator
## 2.0.0-beta.1
### Patch Changes
- 0f4926fd: Set current Blitz tag to latest
## 2.0.0-beta.72
### Patch Changes

View File

@@ -1,6 +1,6 @@
{
"name": "@blitzjs/generator",
"version": "2.0.0-beta.0",
"version": "2.0.0-beta.1",
"scripts": {
"dev": "watch unbuild src --wait=0.2",
"build": "unbuild && pnpm build:templates",
@@ -46,7 +46,7 @@
"vinyl": "2.2.1"
},
"devDependencies": {
"@blitzjs/config": "2.0.0-beta.0",
"@blitzjs/config": "2.0.0-beta.1",
"@juanm04/cpx": "2.0.1",
"@types/babel__core": "7.1.19",
"@types/diff": "5.0.2",

View File

@@ -1,7 +1,7 @@
import {logFailedVersionFetch} from "./get-latest-version"
import {fetchDistTags} from "./npm-fetch"
const CURRENT_BLITZ_TAG = "alpha"
const CURRENT_BLITZ_TAG = "latest"
export const getBlitzDependencyVersion = async () => {
try {

View File

@@ -22,11 +22,11 @@
"*.{js}": ["eslint --fix"]
},
"dependencies": {
"@blitzjs/auth": "alpha",
"@blitzjs/next": "alpha",
"@blitzjs/rpc": "alpha",
"@blitzjs/auth": "latest",
"@blitzjs/next": "latest",
"@blitzjs/rpc": "latest",
"@prisma/client": "4.0.0",
"blitz": "alpha",
"blitz": "latest",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",

View File

@@ -22,11 +22,11 @@
"*.{js,ts,tsx}": ["eslint --fix"]
},
"dependencies": {
"@blitzjs/auth": "alpha",
"@blitzjs/next": "alpha",
"@blitzjs/rpc": "alpha",
"@blitzjs/auth": "latest",
"@blitzjs/next": "latest",
"@blitzjs/rpc": "latest",
"@prisma/client": "4.0.0",
"blitz": "alpha",
"blitz": "latest",
"next": "12.2.0",
"prisma": "4.0.0",
"react": "18.0.0",

View File

@@ -18,8 +18,8 @@
"*.{js}": ["eslint --fix"]
},
"dependencies": {
"@blitzjs/next": "alpha",
"blitz": "alpha",
"@blitzjs/next": "latest",
"blitz": "latest",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",

View File

@@ -20,8 +20,8 @@
]
},
"dependencies": {
"@blitzjs/next": "alpha",
"blitz": "alpha",
"@blitzjs/next": "latest",
"blitz": "latest",
"next": "12.2.0",
"react": "18.0.0",
"react-dom": "18.0.0",

View File

@@ -25,7 +25,7 @@
"@typescript-eslint/parser": "5.9.1"
},
"devDependencies": {
"@blitzjs/config": "2.0.0-beta.0",
"@blitzjs/config": "2.0.0-beta.1",
"@types/react": "18.0.1",
"@types/react-dom": "17.0.14",
"react": "18.0.0",

36
pnpm-lock.yaml generated
View File

@@ -49,7 +49,7 @@ importers:
"@types/preview-email": 2.0.1
"@types/react": 18.0.1
"@typescript-eslint/eslint-plugin": 5.9.1
blitz: workspace:2.0.0-alpha.71
blitz: workspace:2.0.0-beta.1
eslint: 7.32.0
eslint-config-next: 12.2.0
eslint-config-prettier: 8.5.0
@@ -524,8 +524,8 @@ importers:
packages/blitz:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.71
"@blitzjs/generator": 2.0.0-alpha.71
"@blitzjs/config": workspace:2.0.0-beta.1
"@blitzjs/generator": 2.0.0-beta.1
"@types/cookie": 0.4.1
"@types/cross-spawn": 6.0.2
"@types/debug": 4.1.7
@@ -566,6 +566,7 @@ importers:
react: 18.0.0
resolve-cwd: 3.0.0
resolve-from: 5.0.0
semver: 7.3.7
superjson: 1.8.0
supports-color: 8.1.1
test-listen: 1.1.0
@@ -602,6 +603,7 @@ importers:
prompts: 2.4.2
resolve-cwd: 3.0.0
resolve-from: 5.0.0
semver: 7.3.7
superjson: 1.8.0_supports-color@8.1.1
supports-color: 8.1.1
ts-node: 10.7.0_typescript@4.6.3
@@ -635,7 +637,7 @@ importers:
packages/blitz-auth:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.71
"@blitzjs/config": workspace:2.0.0-beta.1
"@testing-library/react": 13.0.0
"@testing-library/react-hooks": 7.0.2
"@types/b64-lite": 1.3.0
@@ -649,7 +651,7 @@ importers:
"@types/secure-password": 3.1.1
b64-lite: 1.4.0
bad-behavior: 1.0.1
blitz: 2.0.0-alpha.71
blitz: 2.0.0-beta.1
cookie: 0.4.1
cookie-session: 2.0.0
debug: 4.3.3
@@ -702,8 +704,8 @@ importers:
packages/blitz-next:
specifiers:
"@blitzjs/config": workspace:2.0.0-alpha.71
"@blitzjs/rpc": 2.0.0-alpha.71
"@blitzjs/config": workspace:2.0.0-beta.1
"@blitzjs/rpc": 2.0.0-beta.1
"@tanstack/react-query": 4.0.10
"@testing-library/dom": 8.13.0
"@testing-library/jest-dom": 5.16.3
@@ -715,7 +717,7 @@ importers:
"@types/react": 18.0.1
"@types/react-dom": 17.0.14
"@types/testing-library__react-hooks": 4.0.0
blitz: 2.0.0-alpha.71
blitz: 2.0.0-beta.1
cross-spawn: 7.0.3
debug: 4.3.3
find-up: 4.1.0
@@ -765,15 +767,15 @@ importers:
packages/blitz-rpc:
specifiers:
"@blitzjs/auth": 2.0.0-alpha.71
"@blitzjs/config": workspace:2.0.0-alpha.71
"@blitzjs/auth": 2.0.0-beta.1
"@blitzjs/config": workspace:2.0.0-beta.1
"@tanstack/react-query": 4.0.10
"@types/debug": 4.1.7
"@types/react": 18.0.1
"@types/react-dom": 17.0.14
b64-lite: 1.4.0
bad-behavior: 1.0.1
blitz: 2.0.0-alpha.71
blitz: 2.0.0-beta.1
chalk: ^4.1.0
debug: 4.3.3
next: 12.2.0
@@ -816,12 +818,12 @@ importers:
"@babel/plugin-syntax-typescript": 7.17.12
"@babel/preset-env": 7.12.10
"@blitzjs/config": workspace:*
"@blitzjs/generator": 2.0.0-alpha.71
"@blitzjs/generator": 2.0.0-beta.1
"@types/jscodeshift": 0.11.2
"@types/node": 17.0.16
arg: 5.0.1
ast-types: 0.14.2
blitz: 2.0.0-alpha.71
blitz: 2.0.0-beta.1
chalk: ^4.1.0
cross-spawn: 7.0.3
debug: 4.3.3
@@ -876,7 +878,7 @@ importers:
"@babel/plugin-transform-typescript": 7.12.1
"@babel/preset-env": 7.12.10
"@babel/types": 7.12.10
"@blitzjs/config": 2.0.0-alpha.71
"@blitzjs/config": 2.0.0-beta.1
"@juanm04/cpx": 2.0.1
"@mrleebo/prisma-ast": 0.2.6
"@types/babel__core": 7.1.19
@@ -969,7 +971,7 @@ importers:
packages/pkg-template:
specifiers:
"@blitzjs/config": 2.0.0-alpha.71
"@blitzjs/config": 2.0.0-beta.1
"@types/react": 18.0.1
"@types/react-dom": 17.0.14
"@typescript-eslint/eslint-plugin": 5.9.1
@@ -12070,7 +12072,7 @@ packages:
pretty-format: 27.5.1
slash: 3.0.0
strip-json-comments: 3.1.1
ts-node: 10.7.0_fxg3r7oju3tntkxsvleuiot4fa
ts-node: 10.7.0_typescript@4.6.3
transitivePeerDependencies:
- bufferutil
- canvas
@@ -17356,6 +17358,7 @@ packages:
typescript: 4.6.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: false
/ts-node/10.7.0_typescript@4.6.3:
resolution:
@@ -17388,7 +17391,6 @@ packages:
typescript: 4.6.3
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: false
/tsconfig-paths/3.14.1:
resolution: