From 72ac2cfea37bc871f1e73ab329de1f87e061d310 Mon Sep 17 00:00:00 2001 From: Hans Pagel Date: Thu, 8 Feb 2024 23:18:52 +0100 Subject: [PATCH] chore: switch to prettier --- .github/dependabot.yml | 12 +- .prettierignore | 18 + .prettierrc | 13 + README.md | 12 +- package.json | 40 +- packages/cli/biome.json | 32 - packages/cli/openapi.json | 8490 ++++++++--------- packages/cli/package.json | 112 +- packages/cli/petstore.json | 1632 ++-- .../cli/src/commands/bundle/BundleCommand.ts | 3 +- .../cli/src/commands/format/FormatCommand.ts | 3 +- .../cli/src/commands/format/format.test.ts | 1 + packages/cli/src/commands/init/InitCommand.ts | 5 +- packages/cli/src/commands/init/init.test.ts | 11 +- packages/cli/src/commands/mock/MockCommand.ts | 15 +- packages/cli/src/commands/mock/dummy.json | 32 +- packages/cli/src/commands/mock/mock.test.ts | 1 + .../commands/reference/ReferenceCommand.ts | 3 +- .../cli/src/commands/share/ShareCommand.ts | 1 + .../src/commands/validate/ValidateCommand.ts | 1 + .../cli/src/commands/validate/invalid.json | 12 +- packages/cli/src/commands/validate/valid.json | 12 +- .../src/commands/validate/validate.test.ts | 1 + packages/cli/src/index.ts | 2 +- .../cli/src/options/version/version.test.ts | 1 + .../utils/getOperationByMethodAndPath.test.ts | 1 + .../src/utils/useGivenFileOrConfiguration.ts | 1 + packages/cli/tests/invoke-cli.ts | 5 +- packages/cli/tsconfig.json | 32 +- pnpm-lock.yaml | 794 +- pnpm-workspace.yaml | 2 +- turbo.json | 20 +- 32 files changed, 5721 insertions(+), 5599 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc delete mode 100644 packages/cli/biome.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 1c01313c..e8ed518a 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,12 +1,12 @@ version: 2 updates: - - package-ecosystem: "github-actions" - directory: "/" + - package-ecosystem: 'github-actions' + directory: '/' schedule: - interval: "daily" - - package-ecosystem: "npm" - directory: "/" + interval: 'daily' + - package-ecosystem: 'npm' + directory: '/' schedule: - interval: "weekly" + interval: 'weekly' open-pull-requests-limit: 5 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..c07c0f93 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,18 @@ +**/.git +**/.svn +**/.hg +**/node_modules +**/dist/** + +/venv/ +**/venv +/.venv/ +**/.venv + +pnpm-lock.yaml +.changeset/ +cdn + +fixtures +.vite-ssg-temp +.next \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..1994ce53 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,13 @@ +{ + "plugins": ["@trivago/prettier-plugin-sort-imports"], + "trailingComma": "all", + "quoteProps": "consistent", + "tabWidth": 2, + "semi": false, + "singleQuote": true, + "singleAttributePerLine": true, + "bracketSameLine": true, + "importOrder": ["^@/(.*)$", "^[./]"], + "importOrderSeparation": true, + "importOrderSortSpecifiers": true +} diff --git a/README.md b/README.md index 22826bde..cbc56afd 100644 --- a/README.md +++ b/README.md @@ -10,11 +10,11 @@ Command-line interface to work with OpenAPI files ## Features -* Format & validate OpenAPI files -* Upload your OpenAPI files to Scalar -* Get a fully mocked API for testing purposes -* Preview your API reference -* Bundle multiple OpenAPI files +- Format & validate OpenAPI files +- Upload your OpenAPI files to Scalar +- Get a fully mocked API for testing purposes +- Preview your API reference +- Bundle multiple OpenAPI files ## Quickstart @@ -88,4 +88,4 @@ Contributions are welcome! Read [`CONTRIBUTING`](https://github.com/scalar/cli/b ## License -The source code in this repository is licensed under [MIT](https://github.com/scalar/cli/blob/main/LICENSE). \ No newline at end of file +The source code in this repository is licensed under [MIT](https://github.com/scalar/cli/blob/main/LICENSE). diff --git a/package.json b/package.json index e7c220fd..47b65904 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,23 @@ { - "name": "root", - "private": true, - "scripts": { - "@scalar/cli": "pnpm --filter @scalar/cli run @scalar/cli", - "test": "vitest", - "lint": "pnpm -r lint", - "format": "pnpm -r format", - "format:check": "pnpm -r format:check", - "cli:link": "pnpm --filter @scalar/cli cli:link", - "bump": "CI=true pnpm run test && pnpm changeset version", - "build": "pnpm -r build" - }, - "dependencies": { - "@changesets/cli": "^2.27.1" - }, - "devDependencies": { - "turbo": "^1.12.3", - "vitest": "^1.2.2" - } + "name": "root", + "private": true, + "scripts": { + "@scalar/cli": "pnpm --filter @scalar/cli run @scalar/cli", + "test": "vitest", + "lint": "pnpm -r lint", + "format": "pnpm prettier --write .", + "format:check": "pnpm prettier --check .", + "cli:link": "pnpm --filter @scalar/cli cli:link", + "bump": "CI=true pnpm run test && pnpm changeset version", + "build": "pnpm -r build" + }, + "dependencies": {}, + "devDependencies": { + "turbo": "^1.12.3", + "vitest": "^1.2.2", + "@changesets/cli": "^2.27.1", + "@trivago/prettier-plugin-sort-imports": "^4.2.0", + "prettier": "^3.0.3", + "prettier-plugin-tailwindcss": "^0.5.6" + } } diff --git a/packages/cli/biome.json b/packages/cli/biome.json deleted file mode 100644 index 8eae716f..00000000 --- a/packages/cli/biome.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "$schema": "https://biomejs.dev/schemas/1.5.3/schema.json", - "organizeImports": { - "enabled": true - }, - "formatter": { - "enabled": true, - "indentWidth": 2, - "indentStyle": "space", - "ignore": ["dist/**/*"] - }, - "linter": { - "enabled": true, - "rules": { - "recommended": true - }, - "ignore": ["dist/**/*"] - }, - "json": { - "formatter": { - "indentStyle": "space", - "indentWidth": 4 - } - }, - "javascript": { - "formatter": { - "semicolons": "asNeeded", - "quoteStyle": "single", - "bracketSameLine": false - } - } -} diff --git a/packages/cli/openapi.json b/packages/cli/openapi.json index e962b85e..1203472e 100644 --- a/packages/cli/openapi.json +++ b/packages/cli/openapi.json @@ -1,4578 +1,4554 @@ { - "openapi": "3.0.0", - "info": { - "title": "Outline API", - "description": "# Introduction\n\nThe Outline API is structured in an RPC style. It enables you to\nprogramatically interact with all aspects of Outline’s data – in fact, the\nmain application is built on exactly the same API.\n\nThe API structure is available as an\n[openapi specification](https://github.com/outline/openapi) if that’s your\njam – it can be used to generate clients for most programming languages.\n\n# Making requests\n\nOutline’s API follows simple RPC style conventions where each API endpoint is\na method on `https://app.getoutline.com/api/method`. Both `GET` and `POST`\nmethods are supported but it’s recommended that you make all call using POST.\nOnly HTTPS is supported and all response payloads are JSON.\n\nWhen making `POST` requests, request parameters are parsed depending on\nContent-Type header. To make a call using JSON payload, you must pass\nContent-Type: application/json header, here’s an example using CURL:\n\n```\ncurl https://app.getoutline.com/api/documents.info \\\n-X 'POST' \\\n-H 'authorization: Bearer MY_API_KEY' \\\n-H 'content-type: application/json' \\\n-H 'accept: application/json' \\\n-d '{\"id\": \"outline-api-NTpezNwhUP\"}'\n```\n\nOr, with JavaScript:\n\n```javascript\nconst response = await fetch(\"https://app.getoutline.com/api/documents.info\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer MY_API_KEY\"\n }\n})\n\nconst body = await response.json();\nconst document = body.data;\n```\n\n# Authentication\n\nTo access API endpoints, you must provide a valid API key. You can create new\nAPI keys in your [account settings](https://app.getoutline.com/settings). Be\ncareful when handling your keys as they give access to all of your documents,\nyou should treat them like passwords and they should never be committed to\nsource control.\n\nTo authenticate with API, you can supply the API key as a header\n(`Authorization: Bearer YOUR_API_KEY`) or as part of the payload using `token`\nparameter. Header based authentication is highly recommended so that your keys\ndon’t accidentally leak into logs.\n\nSome API endpoints allow unauthenticated requests for public resources and\nthey can be called without an API key.\n\n# Errors\n\nAll successful API requests will be returned with a 200 or 201 status code\nand `ok: true` in the response payload. If there’s an error while making the\nrequest, the appropriate status code is returned with the error message:\n\n```\n{\n \"ok\": false,\n \"error\": \"Not Found\"\n}\n```\n\n# Pagination\n\nMost top-level API resources have support for \"list\" API methods. For instance,\nyou can list users, documents, and collections. These list methods share\ncommon parameters, taking both `limit` and `offset`.\n\nResponses will echo these parameters in the root `pagination` key, and also\ninclude a `nextPath` key which can be used as a handy shortcut to fetch the\nnext page of results. For example:\n\n```\n{\n ok: true,\n status: 200,\n data: […],\n pagination: {\n limit: 25,\n offset: 0,\n nextPath: \"/api/documents.list?limit=25&offset=25\"\n }\n}\n```\n\n# Policies\n\nMany API resources have associated \"policies\", these objects describe the\ncurrent API keys authorized actions related to an individual resource. It\nshould be noted that the policy \"id\" is identical to the resource it is\nrelated to, policies themselves do not have unique identifiers.\n\nFor most usecases of the API, policies can be safely ignored. Calling\nunauthorized methods will result in the appropriate response code – these are\nused in the main Outline UI to adjust which elements are visible.\n", - "version": "0.1.0", - "contact": { "email": "hello@getoutline.com" } + "openapi": "3.0.0", + "info": { + "title": "Outline API", + "description": "# Introduction\n\nThe Outline API is structured in an RPC style. It enables you to\nprogramatically interact with all aspects of Outline’s data – in fact, the\nmain application is built on exactly the same API.\n\nThe API structure is available as an\n[openapi specification](https://github.com/outline/openapi) if that’s your\njam – it can be used to generate clients for most programming languages.\n\n# Making requests\n\nOutline’s API follows simple RPC style conventions where each API endpoint is\na method on `https://app.getoutline.com/api/method`. Both `GET` and `POST`\nmethods are supported but it’s recommended that you make all call using POST.\nOnly HTTPS is supported and all response payloads are JSON.\n\nWhen making `POST` requests, request parameters are parsed depending on\nContent-Type header. To make a call using JSON payload, you must pass\nContent-Type: application/json header, here’s an example using CURL:\n\n```\ncurl https://app.getoutline.com/api/documents.info \\\n-X 'POST' \\\n-H 'authorization: Bearer MY_API_KEY' \\\n-H 'content-type: application/json' \\\n-H 'accept: application/json' \\\n-d '{\"id\": \"outline-api-NTpezNwhUP\"}'\n```\n\nOr, with JavaScript:\n\n```javascript\nconst response = await fetch(\"https://app.getoutline.com/api/documents.info\", {\n method: \"POST\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer MY_API_KEY\"\n }\n})\n\nconst body = await response.json();\nconst document = body.data;\n```\n\n# Authentication\n\nTo access API endpoints, you must provide a valid API key. You can create new\nAPI keys in your [account settings](https://app.getoutline.com/settings). Be\ncareful when handling your keys as they give access to all of your documents,\nyou should treat them like passwords and they should never be committed to\nsource control.\n\nTo authenticate with API, you can supply the API key as a header\n(`Authorization: Bearer YOUR_API_KEY`) or as part of the payload using `token`\nparameter. Header based authentication is highly recommended so that your keys\ndon’t accidentally leak into logs.\n\nSome API endpoints allow unauthenticated requests for public resources and\nthey can be called without an API key.\n\n# Errors\n\nAll successful API requests will be returned with a 200 or 201 status code\nand `ok: true` in the response payload. If there’s an error while making the\nrequest, the appropriate status code is returned with the error message:\n\n```\n{\n \"ok\": false,\n \"error\": \"Not Found\"\n}\n```\n\n# Pagination\n\nMost top-level API resources have support for \"list\" API methods. For instance,\nyou can list users, documents, and collections. These list methods share\ncommon parameters, taking both `limit` and `offset`.\n\nResponses will echo these parameters in the root `pagination` key, and also\ninclude a `nextPath` key which can be used as a handy shortcut to fetch the\nnext page of results. For example:\n\n```\n{\n ok: true,\n status: 200,\n data: […],\n pagination: {\n limit: 25,\n offset: 0,\n nextPath: \"/api/documents.list?limit=25&offset=25\"\n }\n}\n```\n\n# Policies\n\nMany API resources have associated \"policies\", these objects describe the\ncurrent API keys authorized actions related to an individual resource. It\nshould be noted that the policy \"id\" is identical to the resource it is\nrelated to, policies themselves do not have unique identifiers.\n\nFor most usecases of the API, policies can be safely ignored. Calling\nunauthorized methods will result in the appropriate response code – these are\nused in the main Outline UI to adjust which elements are visible.\n", + "version": "0.1.0", + "contact": { "email": "hello@getoutline.com" } + }, + "servers": [ + { "url": "https://app.getoutline.com/api", "description": "Production" } + ], + "security": [{ "http": [] }], + "tags": [ + { + "name": "Attachments", + "description": "`Attachments` represent a file uploaded to cloud storage. They are created\nbefore the upload happens from the client and store all the meta information\nsuch as file type, size, and location.\n" }, - "servers": [ - { "url": "https://app.getoutline.com/api", "description": "Production" } - ], - "security": [{ "http": [] }], - "tags": [ - { - "name": "Attachments", - "description": "`Attachments` represent a file uploaded to cloud storage. They are created\nbefore the upload happens from the client and store all the meta information\nsuch as file type, size, and location.\n" - }, - { - "name": "Auth", - "description": "`Auth` represents the current API Keys authentication details. It can be\nused to check that a token is still valid and load the IDs for the current\nuser and team.\n" - }, - { - "name": "Collections", - "description": "`Collections` represent grouping of documents in the knowledge base, they\noffer a way to structure information in a nested hierarchy and a level\nat which read and write permissions can be granted to individual users or\ngroups of users.\n" - }, - { - "name": "Comments", - "description": "`Comments` represent a comment either on a selection of text in a document\nor on the document itself.\n" - }, - { - "name": "Documents", - "description": "`Documents` are what everything else revolves around. A document represents\na single page of information and always returns the latest version of the\ncontent. Documents are stored in [Markdown](https://spec.commonmark.org/)\nformatting.\n" - }, - { - "name": "Events", - "description": "`Events` represent an artifact of an action. Whether it is creating a user,\nediting a document, changing permissions, or any other action – an event\nis created that can be used as an audit trail or activity stream.\n" - }, - { - "name": "FileOperations", - "description": "`FileOperations` represent background jobs for importing or exporting files.\nYou can query the file operation to find the state of progress and any\nresulting output.\n" - }, - { - "name": "Groups", - "description": "`Groups` represent a list of users that logically belong together, for\nexample there might be groups for each department in your organization.\nGroups can be granted access to collections with read or write permissions.\n" - }, - { - "name": "Revisions", - "description": "`Revisions` represent a snapshop of a document at a point in time. They\nare used to keep tracking of editing and collaboration history – a document\ncan also be restored to a previous revision if neccessary.\n" - }, - { - "name": "Shares", - "description": "`Shares` represent authorization to view a document without being a member\nof the team. Shares are created in order to give access to documents publicly.\nEach user that shares a document will have a unique share object.\n" - }, - { - "name": "Users", - "description": "`Users` represent an individual with access to the knowledge base. Users\ncan be created automatically when signing in with SSO or when a user is\ninvited via email.\n" - }, - { - "name": "Views", - "description": "`Views` represent a compressed record of an individual users views of a\ndocument. Individual views are not recorded but a first, last and total\nis kept per user.\n" - } - ], - "paths": { - "/attachments.create": { - "post": { - "tags": ["Attachments"], - "summary": "Create an attachment", - "description": "Creating an attachment object creates a database record and returns the inputs needed to generate a signed url and upload the file from the client to cloud storage.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "image.png" - }, - "documentId": { - "type": "string", - "description": "Identifier for the associated document, if any.", - "format": "uuid" - }, - "contentType": { - "type": "string", - "example": "image/png" - }, - "size": { - "type": "number", - "description": "Size of the file attachment in bytes." - } - }, - "required": ["name", "contentType", "size"] - } - } - } + { + "name": "Auth", + "description": "`Auth` represents the current API Keys authentication details. It can be\nused to check that a token is still valid and load the IDs for the current\nuser and team.\n" + }, + { + "name": "Collections", + "description": "`Collections` represent grouping of documents in the knowledge base, they\noffer a way to structure information in a nested hierarchy and a level\nat which read and write permissions can be granted to individual users or\ngroups of users.\n" + }, + { + "name": "Comments", + "description": "`Comments` represent a comment either on a selection of text in a document\nor on the document itself.\n" + }, + { + "name": "Documents", + "description": "`Documents` are what everything else revolves around. A document represents\na single page of information and always returns the latest version of the\ncontent. Documents are stored in [Markdown](https://spec.commonmark.org/)\nformatting.\n" + }, + { + "name": "Events", + "description": "`Events` represent an artifact of an action. Whether it is creating a user,\nediting a document, changing permissions, or any other action – an event\nis created that can be used as an audit trail or activity stream.\n" + }, + { + "name": "FileOperations", + "description": "`FileOperations` represent background jobs for importing or exporting files.\nYou can query the file operation to find the state of progress and any\nresulting output.\n" + }, + { + "name": "Groups", + "description": "`Groups` represent a list of users that logically belong together, for\nexample there might be groups for each department in your organization.\nGroups can be granted access to collections with read or write permissions.\n" + }, + { + "name": "Revisions", + "description": "`Revisions` represent a snapshop of a document at a point in time. They\nare used to keep tracking of editing and collaboration history – a document\ncan also be restored to a previous revision if neccessary.\n" + }, + { + "name": "Shares", + "description": "`Shares` represent authorization to view a document without being a member\nof the team. Shares are created in order to give access to documents publicly.\nEach user that shares a document will have a unique share object.\n" + }, + { + "name": "Users", + "description": "`Users` represent an individual with access to the knowledge base. Users\ncan be created automatically when signing in with SSO or when a user is\ninvited via email.\n" + }, + { + "name": "Views", + "description": "`Views` represent a compressed record of an individual users views of a\ndocument. Individual views are not recorded but a first, last and total\nis kept per user.\n" + } + ], + "paths": { + "/attachments.create": { + "post": { + "tags": ["Attachments"], + "summary": "Create an attachment", + "description": "Creating an attachment object creates a database record and returns the inputs needed to generate a signed url and upload the file from the client to cloud storage.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "image.png" + }, + "documentId": { + "type": "string", + "description": "Identifier for the associated document, if any.", + "format": "uuid" + }, + "contentType": { + "type": "string", + "example": "image/png" + }, + "size": { + "type": "number", + "description": "Size of the file attachment in bytes." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "maxUploadSize": { - "type": "number" - }, - "uploadUrl": { - "type": "string", - "format": "uri" - }, - "form": { "type": "object" }, - "attachment": { - "$ref": "#/components/schemas/Attachment" - } - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["name", "contentType", "size"] + } } + } }, - "/attachments.redirect": { - "post": { - "tags": ["Attachments"], - "summary": "Retrieve an attachment", - "description": "Load an attachment from where it is stored based on the id. If the attachment is private then a temporary, signed url with embedded credentials is generated on demand.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the attachment.", - "format": "uuid" - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "maxUploadSize": { + "type": "number" + }, + "uploadUrl": { + "type": "string", + "format": "uri" + }, + "form": { "type": "object" }, + "attachment": { + "$ref": "#/components/schemas/Attachment" + } + } } - }, - "responses": { - "302": { "description": "The url for the attachment" } + } } + } } - }, - "/attachments.delete": { - "post": { - "tags": ["Attachments"], - "summary": "Delete an attachment", - "description": "Deleting an attachment is permanant. It will not delete references or links to the attachment that may exist in your documents.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid", - "description": "Unique identifier for the attachment." - } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/attachments.redirect": { + "post": { + "tags": ["Attachments"], + "summary": "Retrieve an attachment", + "description": "Load an attachment from where it is stored based on the id. If the attachment is private then a temporary, signed url with embedded credentials is generated on demand.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the attachment.", + "format": "uuid" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/auth.info": { - "post": { - "tags": ["Auth"], - "summary": "Retrieve auth", - "description": "Retrieve authentication details for the current API key", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Auth" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" } - } + "responses": { + "302": { "description": "The url for the attachment" } + } + } + }, + "/attachments.delete": { + "post": { + "tags": ["Attachments"], + "summary": "Delete an attachment", + "description": "Deleting an attachment is permanant. It will not delete references or links to the attachment that may exist in your documents.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid", + "description": "Unique identifier for the attachment." + } + }, + "required": ["id"] + } } + } }, - "/auth.config": { - "post": { - "tags": ["Auth"], - "summary": "Retrieve auth config", - "description": "Retrieve authentication options", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "Acme Inc" - }, - "hostname": { - "type": "string", - "example": "acme-inc.getoutline.com" - }, - "services": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "slack" - }, - "name": { - "type": "string", - "example": "Slack" - }, - "authUrl": { - "type": "string", - "example": "https://acme-inc.getoutline.com/auth/slack" - } - } - } - } - } - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } + } } + } } - }, - "/collections.info": { - "post": { - "tags": ["Collections"], - "summary": "Retrieve a collection", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the collection.", - "format": "uuid" - } - }, - "required": ["id"] - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/auth.info": { + "post": { + "tags": ["Auth"], + "summary": "Retrieve auth", + "description": "Retrieve authentication details for the current API key", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Auth" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Collection" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/collections.documents": { - "post": { - "tags": ["Collections"], - "summary": "Retrieve a collections document structure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the collection.", - "format": "uuid" - } - }, - "required": ["id"] + }, + "401": { "$ref": "#/components/responses/Unauthenticated" } + } + } + }, + "/auth.config": { + "post": { + "tags": ["Auth"], + "summary": "Retrieve auth config", + "description": "Retrieve authentication options", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Acme Inc" + }, + "hostname": { + "type": "string", + "example": "acme-inc.getoutline.com" + }, + "services": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "slack" + }, + "name": { + "type": "string", + "example": "Slack" + }, + "authUrl": { + "type": "string", + "example": "https://acme-inc.getoutline.com/auth/slack" + } } + } } + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NavigationNode" - }, - "example": [] - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/collections.list": { - "post": { - "tags": ["Collections"], - "summary": "List all collections", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Pagination" - } - } - } + } + } + } + }, + "/collections.info": { + "post": { + "tags": ["Collections"], + "summary": "Retrieve a collection", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the collection.", + "format": "uuid" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Collection" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["id"] + } } + } }, - "/collections.create": { - "post": { - "tags": ["Collections"], - "summary": "Create a collection", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "Human Resources" - }, - "description": { - "type": "string", - "example": "" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - }, - "color": { - "type": "string", - "example": "#123123" - }, - "private": { - "type": "boolean", - "example": false - } - }, - "required": ["name"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Collection" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Collection" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/collections.update": { - "post": { - "tags": ["Collections"], - "summary": "Update a collection", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "type": "string", - "example": "Human Resources" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - }, - "description": { - "type": "string", - "example": "" - }, - "color": { - "type": "string", - "example": "#123123" - } - }, - "required": ["id"] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.documents": { + "post": { + "tags": ["Collections"], + "summary": "Retrieve a collections document structure", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the collection.", + "format": "uuid" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Collection" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/collections.add_user": { - "post": { - "tags": ["Collections"], - "summary": "Add a collection user", - "description": "This method allows you to add a user membership to the specified collection.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "userId": { - "type": "string", - "format": "uuid" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - } - }, - "required": ["id", "userId"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NavigationNode" + }, + "example": [] } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "memberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Membership" - } - } - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.list": { + "post": { + "tags": ["Collections"], + "summary": "List all collections", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Pagination" + } } + } }, - "/collections.remove_user": { - "post": { - "tags": ["Collections"], - "summary": "Remove a collection user", - "description": "This method allows you to remove a user from the specified collection.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Identifier for the collection", - "format": "uuid" - }, - "userId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["id", "userId"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Collection" + } }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + } } + } } - }, - "/collections.memberships": { - "post": { - "tags": ["Collections"], - "summary": "List all collection memberships", - "description": "This method allows you to list a collections individual memberships. It's important to note that memberships returned from this endpoint do not include group memberships.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Identifier for the collection", - "format": "uuid" - }, - "query": { - "type": "string", - "description": "Filter memberships by user names", - "example": "jenny" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - } - }, - "required": ["id"] - } - ] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/collections.create": { + "post": { + "tags": ["Collections"], + "summary": "Create a collection", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "example": "Human Resources" + }, + "description": { + "type": "string", + "example": "" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + }, + "color": { + "type": "string", + "example": "#123123" + }, + "private": { + "type": "boolean", + "example": false + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "memberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Membership" - } - } - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["name"] + } } + } }, - "/collections.add_group": { - "post": { - "tags": ["Collections"], - "summary": "Add a group to a collection", - "description": "This method allows you to give all members in a group access to a collection.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "groupId": { - "type": "string", - "format": "uuid" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - } - }, - "required": ["id", "groupId"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "collectionGroupMemberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CollectionGroupMembership" - } - } - } - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Collection" }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/collections.remove_group": { - "post": { - "tags": ["Collections"], - "summary": "Remove a collection group", - "description": "This method allows you to revoke all members in a group access to a collection. Note that members of the group may still retain access through other groups or individual memberships.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Identifier for the collection", - "format": "uuid" - }, - "groupId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["id", "groupId"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/collections.update": { + "post": { + "tags": ["Collections"], + "summary": "Update a collection", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "example": "Human Resources" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + }, + "description": { + "type": "string", + "example": "" + }, + "color": { + "type": "string", + "example": "#123123" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/collections.group_memberships": { - "post": { - "tags": ["Collections"], - "summary": "List all collection group members", - "description": "This method allows you to list a collections group memberships. This is the list of groups that have been given access to the collection.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Identifier for the collection", - "format": "uuid" - }, - "query": { - "type": "string", - "description": "Filter memberships by group names", - "example": "developers" - }, - "permission": { - "$ref": "#/components/schemas/Permission" - } - }, - "required": ["id"] - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - }, - "collectionGroupMemberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/CollectionGroupMembership" - } - } - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Collection" }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/collections.delete": { - "post": { - "tags": ["Collections"], - "summary": "Delete a collection", - "description": "Delete a collection and all of its documents. This action can’t be undone so please be careful.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.add_user": { + "post": { + "tags": ["Collections"], + "summary": "Add a collection user", + "description": "This method allows you to add a user membership to the specified collection.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id", "userId"] + } } + } }, - "/collections.export": { - "post": { - "tags": ["Collections"], - "summary": "Export a collection", - "description": "Triggers a bulk export of the collection in markdown format and their attachments. If documents are nested then they will be nested in folders inside the zip file. The endpoint returns a `FileOperation` that can be queried to track the progress of the export and get the url for the final file.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "format": { - "type": "string", - "enum": [ - "outline-markdown", - "json", - "html" - ] - }, - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "memberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Membership" + } + } + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "fileOperation": { - "$ref": "#/components/schemas/FileOperation" - } - } - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/collections.export_all": { - "post": { - "tags": ["Collections"], - "summary": "Export all collections", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "format": { - "type": "string", - "enum": [ - "outline-markdown", - "json", - "html" - ] - } - } - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.remove_user": { + "post": { + "tags": ["Collections"], + "summary": "Remove a collection user", + "description": "This method allows you to remove a user from the specified collection.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifier for the collection", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + } }, - "description": "Triggers a bulk export of all documents in and their attachments. The endpoint returns a `FileOperation` that can be queried through the fileOperations endpoint to track the progress of the export and get the url for the final file.", - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "fileOperation": { - "$ref": "#/components/schemas/FileOperation" - } - } - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id", "userId"] + } } + } }, - "/comments.create": { - "post": { - "tags": ["Comments"], - "summary": "Create a comment", - "description": "Create a comment", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "documentId": { - "type": "string", - "format": "uuid" - }, - "parentCommentId": { - "type": "string", - "format": "uuid" - }, - "data": { "type": "object" } - }, - "required": ["documentId", "data"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Comment" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.memberships": { + "post": { + "tags": ["Collections"], + "summary": "List all collection memberships", + "description": "This method allows you to list a collections individual memberships. It's important to note that memberships returned from this endpoint do not include group memberships.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifier for the collection", + "format": "uuid" + }, + "query": { + "type": "string", + "description": "Filter memberships by user names", + "example": "jenny" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + } + }, + "required": ["id"] + } + ] + } } + } }, - "/comments.update": { - "post": { - "tags": ["Comments"], - "summary": "Update a comment", - "description": "Update a comment", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "data": { "type": "object" } - }, - "required": ["id", "data"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "memberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Membership" + } + } + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Comment" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/comments.delete": { - "post": { - "tags": ["Comments"], - "summary": "Delete a comment", - "description": "Delete a comment", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/collections.add_group": { + "post": { + "tags": ["Collections"], + "summary": "Add a group to a collection", + "description": "This method allows you to give all members in a group access to a collection.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "groupId": { + "type": "string", + "format": "uuid" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id", "groupId"] + } } + } }, - "/comments.list": { - "post": { - "tags": ["Comments"], - "summary": "List all comments", - "description": "This method will list all comments matching the given properties.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "documentId": { - "type": "string", - "format": "uuid", - "description": "Filter to a specific document" - }, - "collectionId": { - "type": "string", - "format": "uuid", - "description": "Filter to a specific collection" - } - } - } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "collectionGroupMemberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionGroupMembership" + } + } + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/documents.info": { - "post": { - "tags": ["Documents"], - "summary": "Retrieve a document", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - }, - "shareId": { - "type": "string", - "format": "uuid", - "description": "Unique identifier for a document share, a shareId may be used in place of a document UUID" - } - } - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.remove_group": { + "post": { + "tags": ["Collections"], + "summary": "Remove a collection group", + "description": "This method allows you to revoke all members in a group access to a collection. Note that members of the group may still retain access through other groups or individual memberships.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifier for the collection", + "format": "uuid" + }, + "groupId": { + "type": "string", + "format": "uuid" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id", "groupId"] + } } + } }, - "/documents.import": { - "post": { - "tags": ["Documents"], - "summary": "Import a file as a document", - "description": "This method allows you to create a new document by importing an existing file. By default a document is set to the collection root. If you want to create a nested/child document, you should pass parentDocumentId to set the parent document.", - "requestBody": { - "content": { - "multipart/form-data": { - "schema": { - "type": "object", - "properties": { - "file": { - "type": "object", - "description": "Only plain text, markdown, docx, and html format are supported." - }, - "collectionId": { - "type": "string", - "format": "uuid" - }, - "parentDocumentId": { - "type": "string", - "format": "uuid" - }, - "template": { "type": "boolean" }, - "publish": { "type": "boolean" } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.group_memberships": { + "post": { + "tags": ["Collections"], + "summary": "List all collection group members", + "description": "This method allows you to list a collections group memberships. This is the list of groups that have been given access to the collection.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Identifier for the collection", + "format": "uuid" + }, + "query": { + "type": "string", + "description": "Filter memberships by group names", + "example": "developers" + }, + "permission": { + "$ref": "#/components/schemas/Permission" + } + }, + "required": ["id"] + } + ] + } } + } }, - "/documents.export": { - "post": { - "tags": ["Documents"], - "summary": "Export a document as markdown", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + }, + "collectionGroupMemberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CollectionGroupMembership" + } + } + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "string", - "description": "The document content in Markdown formatting" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/documents.list": { - "post": { - "tags": ["Documents"], - "summary": "List all documents", - "description": "This method will list all published documents and draft documents belonging to the current user.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "collectionId": { - "type": "string", - "format": "uuid", - "description": "Optionally filter to a specific collection" - }, - "userId": { - "type": "string", - "format": "uuid" - }, - "backlinkDocumentId": { - "type": "string", - "format": "uuid" - }, - "parentDocumentId": { - "type": "string", - "format": "uuid" - }, - "template": { - "type": "boolean", - "description": "Optionally filter to only templates" - } - } - } - ] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/collections.delete": { + "post": { + "tags": ["Collections"], + "summary": "Delete a collection", + "description": "Delete a collection and all of its documents. This action can’t be undone so please be careful.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["id"] + } } + } }, - "/documents.drafts": { - "post": { - "tags": ["Documents"], - "summary": "List all draft documents", - "description": "This method will list all draft documents belonging to the current user.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "collectionId": { - "type": "string", - "description": "A collection to search within", - "format": "uuid" - }, - "dateFilter": { - "type": "string", - "description": "Any documents that have not been updated within the specified period will be filtered out", - "example": "month", - "enum": [ - "day", - "week", - "month", - "year" - ] - } - } - } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/documents.viewed": { - "post": { - "tags": ["Documents"], - "summary": "List all recently viewed documents", - "description": "This method will list all documents recently viewed by the current user.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" } - ] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.export": { + "post": { + "tags": ["Collections"], + "summary": "Export a collection", + "description": "Triggers a bulk export of the collection in markdown format and their attachments. If documents are nested then they will be nested in folders inside the zip file. The endpoint returns a `FileOperation` that can be queried to track the progress of the export and get the url for the final file.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": ["outline-markdown", "json", "html"] + }, + "id": { "type": "string", "format": "uuid" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["id"] + } } + } }, - "/documents.search": { - "post": { - "tags": ["Documents"], - "summary": "Search all documents", - "description": "This methods allows you to search your teams documents with keywords. Note that search results will be restricted to those accessible by the current access token.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "query": { - "type": "string", - "example": "hiring" - }, - "userId": { - "type": "string", - "description": "Any documents that have not been edited by the user identifier will be filtered out", - "format": "uuid" - }, - "collectionId": { - "type": "string", - "description": "A collection to search within", - "format": "uuid" - }, - "includeArchived": { - "type": "boolean" - }, - "includeDrafts": { - "type": "boolean" - }, - "dateFilter": { - "type": "string", - "description": "Any documents that have not been updated within the specified period will be filtered out", - "example": "month", - "enum": [ - "day", - "week", - "month", - "year" - ] - } - } - } - ] - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "fileOperation": { + "$ref": "#/components/schemas/FileOperation" } + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "context": { - "type": "string", - "description": "A short snippet of context from the document that includes the search query.", - "example": "At Acme Inc our hiring practices are inclusive" - }, - "ranking": { - "type": "number", - "description": "The ranking used to order search results based on relevance.", - "format": "float", - "example": 1.1844109 - }, - "document": { - "$ref": "#/components/schemas/Document" - } - } - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/documents.create": { - "post": { - "tags": ["Documents"], - "summary": "Create a document", - "description": "This method allows you to create or publish a new document. By default a document is set to the collection root. If you want to create a nested/child document, you should pass parentDocumentId to set the parent document.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "title": { - "type": "string", - "example": "Welcome to Acme Inc" - }, - "text": { - "type": "string", - "description": "The body of the document, may contain markdown formatting.", - "example": "…" - }, - "collectionId": { - "type": "string", - "format": "uuid" - }, - "parentDocumentId": { - "type": "string", - "format": "uuid" - }, - "templateId": { - "type": "string", - "format": "uuid" - }, - "template": { - "type": "boolean", - "description": "Whether this document should be considered to be a template." - }, - "publish": { - "type": "boolean", - "description": "Whether this document should be immediately published and made visible to other team members." - } - }, - "required": ["title", "collectionId"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/collections.export_all": { + "post": { + "tags": ["Collections"], + "summary": "Export all collections", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "format": { + "type": "string", + "enum": ["outline-markdown", "json", "html"] + } } + } } + } }, - "/documents.update": { - "post": { - "tags": ["Documents"], - "summary": "Update a document", - "description": "This method allows you to modify an already created document", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - }, - "title": { - "type": "string", - "description": "The title of the document." - }, - "text": { - "type": "string", - "description": "The body of the document, may contain markdown formatting.", - "example": "…" - }, - "append": { - "type": "boolean", - "description": "If true the text field will be appended to the end of the existing document, rather than the default behavior of replacing it. This is potentially useful for things like logging into a document." - }, - "publish": { - "type": "boolean", - "description": "Whether this document should be published and made visible to other team members, if a draft" - }, - "done": { - "type": "boolean", - "description": "Whether the editing session has finished, this will trigger any notifications. This property will soon be deprecated." - } - }, - "required": ["id"] - } + "description": "Triggers a bulk export of all documents in and their attachments. The endpoint returns a `FileOperation` that can be queried through the fileOperations endpoint to track the progress of the export and get the url for the final file.", + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "fileOperation": { + "$ref": "#/components/schemas/FileOperation" } + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/documents.templatize": { - "post": { - "tags": ["Documents"], - "summary": "Create a template from a document", - "description": "This method allows you to createa new template using an existing document as the basis", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/comments.create": { + "post": { + "tags": ["Comments"], + "summary": "Create a comment", + "description": "Create a comment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "documentId": { + "type": "string", + "format": "uuid" + }, + "parentCommentId": { + "type": "string", + "format": "uuid" + }, + "data": { "type": "object" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["documentId", "data"] + } } + } }, - "/documents.star": { - "post": { - "tags": ["Documents"], - "summary": "Star a document", - "description": "Starring a document gives it extra priority in the UI and makes it easier to find important information later.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Comment" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { "type": "boolean" } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/documents.unstar": { - "post": { - "tags": ["Documents"], - "summary": "Unstar a document", - "description": "Starring a document gives it extra priority in the UI and makes it easier to find important information later.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - } - }, - "required": ["id"] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/comments.update": { + "post": { + "tags": ["Comments"], + "summary": "Update a comment", + "description": "Update a comment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "format": "uuid" + }, + "data": { "type": "object" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { "type": "boolean" } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id", "data"] + } } + } }, - "/documents.unpublish": { - "post": { - "tags": ["Documents"], - "summary": "Unpublish a document", - "description": "Unpublishing a document moves it back to a draft status and out of the collection.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Comment" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/documents.move": { - "post": { - "tags": ["Documents"], - "summary": "Move a document", - "description": "Move a document to a new location or collection. If no parent document is provided, the document will be moved to the collection root.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - }, - "collectionId": { - "type": "string", - "format": "uuid" - }, - "parentDocumentId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/comments.delete": { + "post": { + "tags": ["Comments"], + "summary": "Delete a comment", + "description": "Delete a comment", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "documents": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Document" - } - }, - "collections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Collection" - } - } - } - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/documents.archive": { - "post": { - "tags": ["Documents"], - "summary": "Archive a document", - "description": "Archiving a document allows outdated information to be moved out of sight whilst retaining the ability to optionally search and restore it later.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/documents.restore": { - "post": { - "tags": ["Documents"], - "summary": "Restore a document", - "description": "If a document has been archived or deleted, it can be restored. Optionally a revision can be passed to restore the document to a previous point in time.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - }, - "revisionId": { - "type": "string", - "format": "uuid", - "description": "Identifier for the revision to restore to." - } - }, - "required": ["id"] - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/comments.list": { + "post": { + "tags": ["Comments"], + "summary": "List all comments", + "description": "This method will list all comments matching the given properties.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "documentId": { + "type": "string", + "format": "uuid", + "description": "Filter to a specific document" + }, + "collectionId": { + "type": "string", + "format": "uuid", + "description": "Filter to a specific collection" + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Document" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + } + ] + } } + } }, - "/documents.delete": { - "post": { - "tags": ["Documents"], - "summary": "Delete a document", - "description": "Deleting a document moves it to the trash. If not restored within 30 days it is permenantly deleted.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "example": "hDYep1TPAM", - "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." - }, - "permanent": { - "type": "boolean", - "example": false, - "description": "If set to true the document will be destroyed with no way to recover rather than moved to the trash." - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/events.list": { - "post": { - "tags": ["Events"], - "summary": "List all events", - "description": "Events are an audit trail of important events that happen in the knowledge base.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "name": { - "type": "string", - "description": "Filter to a specific event, e.g. \"collections.create\". Event names are in the format \"objects.verb\"" - }, - "actorId": { - "type": "string", - "format": "uuid", - "description": "Filter to events performed by the selected user" - }, - "documentId": { - "type": "string", - "format": "uuid", - "description": "Filter to events performed in the selected document" - }, - "collectionId": { - "type": "string", - "format": "uuid", - "description": "Filter to events performed in the selected collection" - }, - "auditLog": { - "type": "boolean", - "description": "Whether to return detailed events suitable for an audit log. Without this flag less detailed event types will be returned." - } - } - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Event" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.info": { + "post": { + "tags": ["Documents"], + "summary": "Retrieve a document", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + }, + "shareId": { + "type": "string", + "format": "uuid", + "description": "Unique identifier for a document share, a shareId may be used in place of a document UUID" + } } + } } + } }, - "/fileOperations.info": { - "post": { - "tags": ["FileOperations"], - "summary": "Retrieve a file operation", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the file operation.", - "format": "uuid" - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/FileOperation" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/fileOperations.redirect": { - "post": { - "tags": ["FileOperations"], - "summary": "Retrieve the file", - "description": "Load the resulting file from where it is stored based on the id. A temporary, signed url with embedded credentials is generated on demand.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the file operation.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.import": { + "post": { + "tags": ["Documents"], + "summary": "Import a file as a document", + "description": "This method allows you to create a new document by importing an existing file. By default a document is set to the collection root. If you want to create a nested/child document, you should pass parentDocumentId to set the parent document.", + "requestBody": { + "content": { + "multipart/form-data": { + "schema": { + "type": "object", + "properties": { + "file": { + "type": "object", + "description": "Only plain text, markdown, docx, and html format are supported." + }, + "collectionId": { + "type": "string", + "format": "uuid" + }, + "parentDocumentId": { + "type": "string", + "format": "uuid" + }, + "template": { "type": "boolean" }, + "publish": { "type": "boolean" } } + } } + } }, - "/fileOperations.list": { - "post": { - "tags": ["FileOperations"], - "summary": "List all file operations", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "description": "The type of fileOperation", - "example": "export", - "enum": ["export", "import"] - } - }, - "required": ["type"] - } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileOperation" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/groups.info": { - "post": { - "tags": ["Groups"], - "summary": "Retrieve a group", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the group.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Group" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.export": { + "post": { + "tags": ["Documents"], + "summary": "Export a document as markdown", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + } } + } } + } }, - "/groups.list": { - "post": { - "tags": ["Groups"], - "summary": "List all groups", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "string", + "description": "The document content in Markdown formatting" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/groups.create": { - "post": { - "tags": ["Groups"], - "summary": "Create a group", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { - "type": "string", - "example": "Designers" - } - }, - "required": ["name"] - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.list": { + "post": { + "tags": ["Documents"], + "summary": "List all documents", + "description": "This method will list all published documents and draft documents belonging to the current user.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "collectionId": { + "type": "string", + "format": "uuid", + "description": "Optionally filter to a specific collection" + }, + "userId": { + "type": "string", + "format": "uuid" + }, + "backlinkDocumentId": { + "type": "string", + "format": "uuid" + }, + "parentDocumentId": { + "type": "string", + "format": "uuid" + }, + "template": { + "type": "boolean", + "description": "Optionally filter to only templates" + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Group" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + } + ] + } } + } }, - "/groups.update": { - "post": { - "tags": ["Groups"], - "summary": "Update a group", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "type": "string", - "example": "Designers" - } - }, - "required": ["id", "name"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Group" - }, - "policies": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Policy" - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/groups.delete": { - "post": { - "tags": ["Groups"], - "summary": "Delete a group", - "description": "Deleting a group will cause all of its members to lose access to any collections the group has previously been added to. This action can’t be undone so please be careful.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.drafts": { + "post": { + "tags": ["Documents"], + "summary": "List all draft documents", + "description": "This method will list all draft documents belonging to the current user.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "collectionId": { + "type": "string", + "description": "A collection to search within", + "format": "uuid" + }, + "dateFilter": { + "type": "string", + "description": "Any documents that have not been updated within the specified period will be filtered out", + "example": "month", + "enum": ["day", "week", "month", "year"] + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + } + ] + } } + } }, - "/groups.memberships": { - "post": { - "tags": ["Groups"], - "summary": "List all group members", - "description": "List and filter all the members in a group.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Group id", - "example": "a32c2ee6-fbde-4654-841b-0eabdc71b812" - }, - "query": { - "type": "string", - "description": "Filter memberships by user names", - "example": "jenny" - } - }, - "required": ["id"] - } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "groupMemberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/GroupMembership" - } - } - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/groups.add_user": { - "post": { - "tags": ["Groups"], - "summary": "Add a group member", - "description": "This method allows you to add a user to the specified group.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "userId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["id", "userId"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - }, - "groupMemberships": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Membership" - } - } - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.viewed": { + "post": { + "tags": ["Documents"], + "summary": "List all recently viewed documents", + "description": "This method will list all documents recently viewed by the current user.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" } + ] + } } + } }, - "/groups.remove_user": { - "post": { - "tags": ["Groups"], - "summary": "Remove a group member", - "description": "This method allows you to remove a user from the group.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Identifier for the collection", - "format": "uuid" - }, - "userId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["id", "userId"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "object", - "properties": { - "groups": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - } - } - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/revisions.info": { - "post": { - "tags": ["Revisions"], - "summary": "Retrieve a revision", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the revision.", - "format": "uuid" - } - }, - "required": ["id"] - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.search": { + "post": { + "tags": ["Documents"], + "summary": "Search all documents", + "description": "This methods allows you to search your teams documents with keywords. Note that search results will be restricted to those accessible by the current access token.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "query": { + "type": "string", + "example": "hiring" + }, + "userId": { + "type": "string", + "description": "Any documents that have not been edited by the user identifier will be filtered out", + "format": "uuid" + }, + "collectionId": { + "type": "string", + "description": "A collection to search within", + "format": "uuid" + }, + "includeArchived": { + "type": "boolean" + }, + "includeDrafts": { + "type": "boolean" + }, + "dateFilter": { + "type": "string", + "description": "Any documents that have not been updated within the specified period will be filtered out", + "example": "month", + "enum": ["day", "week", "month", "year"] + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Revision" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + } + ] + } } + } }, - "/revisions.list": { - "post": { - "tags": ["Revisions"], - "summary": "List all revisions", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" } - ] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "type": "object", + "properties": { + "context": { + "type": "string", + "description": "A short snippet of context from the document that includes the search query.", + "example": "At Acme Inc our hiring practices are inclusive" + }, + "ranking": { + "type": "number", + "description": "The ranking used to order search results based on relevance.", + "format": "float", + "example": 1.1844109 + }, + "document": { + "$ref": "#/components/schemas/Document" + } + } + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Revision" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + } } + } } - }, - "/shares.info": { - "post": { - "tags": ["Shares"], - "summary": "Retrieve a share object", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the share.", - "format": "uuid" - }, - "documentId": { - "type": "string", - "description": "Unique identifier for a document. One of id or documentId must be provided.", - "format": "uuid" - } - } - } - } - } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.create": { + "post": { + "tags": ["Documents"], + "summary": "Create a document", + "description": "This method allows you to create or publish a new document. By default a document is set to the collection root. If you want to create a nested/child document, you should pass parentDocumentId to set the parent document.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "title": { + "type": "string", + "example": "Welcome to Acme Inc" + }, + "text": { + "type": "string", + "description": "The body of the document, may contain markdown formatting.", + "example": "…" + }, + "collectionId": { + "type": "string", + "format": "uuid" + }, + "parentDocumentId": { + "type": "string", + "format": "uuid" + }, + "templateId": { + "type": "string", + "format": "uuid" + }, + "template": { + "type": "boolean", + "description": "Whether this document should be considered to be a template." + }, + "publish": { + "type": "boolean", + "description": "Whether this document should be immediately published and made visible to other team members." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Share" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["title", "collectionId"] + } } + } }, - "/shares.list": { - "post": { - "tags": ["Shares"], - "summary": "List all shares", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" } - ] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Share" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/shares.create": { - "post": { - "tags": ["Shares"], - "summary": "Create a share", - "description": "Creates a new share link that can be used by to access a document. If you request multiple shares for the same document with the same API key, the same share object will be returned. By default all shares are unpublished.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "documentId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["documentId"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.update": { + "post": { + "tags": ["Documents"], + "summary": "Update a document", + "description": "This method allows you to modify an already created document", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + }, + "title": { + "type": "string", + "description": "The title of the document." + }, + "text": { + "type": "string", + "description": "The body of the document, may contain markdown formatting.", + "example": "…" + }, + "append": { + "type": "boolean", + "description": "If true the text field will be appended to the end of the existing document, rather than the default behavior of replacing it. This is potentially useful for things like logging into a document." + }, + "publish": { + "type": "boolean", + "description": "Whether this document should be published and made visible to other team members, if a draft" + }, + "done": { + "type": "boolean", + "description": "Whether the editing session has finished, this will trigger any notifications. This property will soon be deprecated." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Share" - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["id"] + } } + } }, - "/shares.update": { - "post": { - "tags": ["Shares"], - "summary": "Update a share", - "description": "Allows changing an existing shares published status, which removes authentication and makes it available to anyone with the link.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "published": { "type": "boolean" } - }, - "required": ["id", "published"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Share" - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/shares.revoke": { - "post": { - "tags": ["Shares"], - "summary": "Revoke a share", - "description": "Makes the share link inactive so that it can no longer be used to access the document.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { "type": "string", "format": "uuid" } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.templatize": { + "post": { + "tags": ["Documents"], + "summary": "Create a template from a document", + "description": "This method allows you to createa new template using an existing document as the basis", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "400": { "$ref": "#/components/responses/Validation" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/users.invite": { - "post": { - "tags": ["Users"], - "summary": "Invite users", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "invites": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Invite" - } - } - }, - "required": ["invites"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "sent": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Invite" - } - }, - "users": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/users.info": { - "post": { - "tags": ["Users"], - "summary": "Retrieve a user", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/documents.star": { + "post": { + "tags": ["Documents"], + "summary": "Star a document", + "description": "Starring a document gives it extra priority in the UI and makes it easier to find important information later.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/users.list": { - "post": { - "tags": ["Users"], - "summary": "List all users", - "description": "List and filter all the users in the team", - "requestBody": { - "content": { - "application/json": { - "schema": { - "allOf": [ - { - "$ref": "#/components/schemas/Pagination" - }, - { "$ref": "#/components/schemas/Sorting" }, - { - "type": "object", - "properties": { - "query": { - "type": "string", - "example": "jane" - }, - "emails": { - "type": "array", - "items": { - "type": "string", - "description": "Array of emails", - "example": [ - "jane.crandall@mail.com", - "prudence.crandall@mail.com" - ] - } - }, - "filter": { - "type": "string", - "example": "all", - "enum": [ - "invited", - "viewers", - "admins", - "active", - "all", - "suspended" - ] - } - } - } - ] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "pagination": { - "$ref": "#/components/schemas/Pagination" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { "type": "boolean" } + } } + } } - }, - "/users.update": { - "post": { - "tags": ["Users"], - "summary": "Update a user", - "description": "Update a users name or avatar. No `id` is required as it is only possible to update the current user at this time.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "name": { "type": "string" }, - "avatarUrl": { - "type": "string", - "format": "uri" - } - } - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.unstar": { + "post": { + "tags": ["Documents"], + "summary": "Unstar a document", + "description": "Starring a document gives it extra priority in the UI and makes it easier to find important information later.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/users.promote": { - "post": { - "tags": ["Users"], - "summary": "Promote a user", - "description": "Promote a user to be a team admin. This endpoint is only available for admin users.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { "type": "boolean" } + } } + } } - }, - "/users.demote": { - "post": { - "tags": ["Users"], - "summary": "Demote a user", - "description": "Demote a team admin to regular user permissions. This endpoint is only available for admin users.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - }, - "to": { - "type": "string", - "description": "Which role to demote to", - "enum": ["viewer", "member"] - } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.unpublish": { + "post": { + "tags": ["Documents"], + "summary": "Unpublish a document", + "description": "Unpublishing a document moves it back to a draft status and out of the collection.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/users.suspend": { - "post": { - "tags": ["Users"], - "summary": "Suspend a user", - "description": "Suspending a user prevents the user from signing in. Users that are suspended are also not counted against billing totals in the hosted version.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } - }, - "/users.activate": { - "post": { - "tags": ["Users"], - "summary": "Activate a user", - "description": "Activating a previously suspended user allows them to signin again. Users that are activated will cause billing totals to be re-calculated in the hosted version.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - } - }, - "required": ["id"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.move": { + "post": { + "tags": ["Documents"], + "summary": "Move a document", + "description": "Move a document to a new location or collection. If no parent document is provided, the document will be moved to the collection root.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + }, + "collectionId": { + "type": "string", + "format": "uuid" + }, + "parentDocumentId": { + "type": "string", + "format": "uuid" + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/User" - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } - } + "required": ["id"] + } } + } }, - "/users.delete": { - "post": { - "tags": ["Users"], - "summary": "Delete a user", - "description": "Deleting a user removes the object entirely. In almost every circumstance it is preferable to suspend a user, as a deleted user can be recreated by signing in with SSO again.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the user.", - "format": "uuid" - } - }, - "required": ["id"] - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "documents": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Document" + } + }, + "collections": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Collection" + } + } + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "success": { - "type": "boolean", - "example": true - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" }, - "404": { "$ref": "#/components/responses/NotFound" } + } } + } } - }, - "/views.list": { - "post": { - "tags": ["Views"], - "summary": "List all views", - "description": "List all users that have viewed a document and the overall view count.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "documentId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["documentId"] - } - } - } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.archive": { + "post": { + "tags": ["Documents"], + "summary": "Archive a document", + "description": "Archiving a document allows outdated information to be moved out of sight whilst retaining the ability to optionally search and restore it later.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + } }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "$ref": "#/components/schemas/View" - } - } - } - } - } - } - }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } - } + "required": ["id"] + } } + } }, - "/views.create": { - "post": { - "tags": ["Views"], - "summary": "Create a view", - "description": "Creates a new view for a document. This is documented in the interests of thoroughness however it is recommended that views are not created from outside of the Outline UI.", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "documentId": { - "type": "string", - "format": "uuid" - } - }, - "required": ["documentId"] - } - } - } - }, - "responses": { - "200": { - "description": "OK", - "content": { - "application/json": { - "schema": { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/View" - } - } - } - } - } + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" }, - "401": { "$ref": "#/components/responses/Unauthenticated" }, - "403": { "$ref": "#/components/responses/Unauthorized" } + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } } + } } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } } + } }, - "components": { - "schemas": { - "Permission": { "type": "string", "enum": ["read", "read_write"] }, - "Attachment": { + "/documents.restore": { + "post": { + "tags": ["Documents"], + "summary": "Restore a document", + "description": "If a document has been archived or deleted, it can be restored. Optionally a revision can be passed to restore the document to a previous point in time.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "contentType": { "type": "string", "example": "image/png" }, - "size": { "type": "number" }, - "name": { "type": "string" }, - "url": { "type": "string", "format": "uri" }, - "documentId": { - "type": "string", - "description": "Identifier for the associated document, if any.", - "format": "uuid" + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + }, + "revisionId": { + "type": "string", + "format": "uuid", + "description": "Identifier for the revision to restore to." + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Document" + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } } + } } - }, - "Pagination": { - "type": "object", - "properties": { - "offset": { "type": "number" }, - "limit": { "type": "number", "example": 25 } - } - }, - "Sorting": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/documents.delete": { + "post": { + "tags": ["Documents"], + "summary": "Delete a document", + "description": "Deleting a document moves it to the trash. If not restored within 30 days it is permenantly deleted.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "sort": { "type": "string", "example": "updatedAt" }, - "direction": { - "type": "string", - "example": "DESC", - "enum": ["ASC", "DESC"] + "id": { + "type": "string", + "example": "hDYep1TPAM", + "description": "Unique identifier for the document. Either the UUID or the urlId is acceptable." + }, + "permanent": { + "type": "boolean", + "example": false, + "description": "If set to true the document will be destroyed with no way to recover rather than moved to the trash." + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } + } } - }, - "NavigationNode": { - "type": "object", - "properties": { - "id": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/events.list": { + "post": { + "tags": ["Events"], + "summary": "List all events", + "description": "Events are an audit trail of important events that happen in the knowledge base.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "name": { "type": "string", - "description": "Unique identifier for the document.", - "format": "uuid" - }, - "title": { "type": "string" }, - "url": { "type": "string" }, - "children": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NavigationNode" - } + "description": "Filter to a specific event, e.g. \"collections.create\". Event names are in the format \"objects.verb\"" + }, + "actorId": { + "type": "string", + "format": "uuid", + "description": "Filter to events performed by the selected user" + }, + "documentId": { + "type": "string", + "format": "uuid", + "description": "Filter to events performed in the selected document" + }, + "collectionId": { + "type": "string", + "format": "uuid", + "description": "Filter to events performed in the selected collection" + }, + "auditLog": { + "type": "boolean", + "description": "Whether to return detailed events suitable for an audit log. Without this flag less detailed event types will be returned." + } } + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Event" + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + } } - }, - "Auth": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/fileOperations.info": { + "post": { + "tags": ["FileOperations"], + "summary": "Retrieve a file operation", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "user": { "$ref": "#/components/schemas/User" }, - "team": { "$ref": "#/components/schemas/Team" } + "id": { + "type": "string", + "description": "Unique identifier for the file operation.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/FileOperation" + } + } } - }, - "Collection": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/fileOperations.redirect": { + "post": { + "tags": ["FileOperations"], + "summary": "Retrieve the file", + "description": "Load the resulting file from where it is stored based on the id. A temporary, signed url with embedded credentials is generated on demand.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "name": { - "type": "string", - "description": "The name of the collection.", - "example": "Human Resources" - }, - "description": { - "type": "string", - "description": "A description of the collection, may contain markdown formatting", - "example": "" - }, - "sort": { - "type": "object", - "description": "The sort of documents in the collection. Note that not all API responses respect this and it is left as a frontend concern to implement.", - "properties": { - "field": { "type": "string" }, - "direction": { - "type": "string", - "enum": ["asc", "desc"] - } - } - }, - "index": { - "type": "string", - "description": "The position of the collection in the sidebar", - "example": "P" - }, - "color": { - "type": "string", - "description": "A color representing the collection, this is used to help make collections more identifiable in the UI. It should be in HEX format including the #", - "example": "#123123" - }, - "icon": { - "type": "string", - "description": "A string that represents an icon in the outline-icons package" - }, - "permission": { "$ref": "#/components/schemas/Permission" }, - "createdAt": { + "id": { + "type": "string", + "description": "Unique identifier for the file operation.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/octet-stream": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/fileOperations.list": { + "post": { + "tags": ["FileOperations"], + "summary": "List all file operations", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "type": { "type": "string", - "description": "The date and time that this object was created", - "readOnly": true, - "format": "date-time" + "description": "The type of fileOperation", + "example": "export", + "enum": ["export", "import"] + } }, - "updatedAt": { - "type": "string", - "description": "The date and time that this object was last changed", - "readOnly": true, - "format": "date-time" + "required": ["type"] + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FileOperation" + } }, - "deletedAt": { - "type": "string", - "nullable": true, - "description": "The date and time that this object was deleted", - "readOnly": true, - "format": "date-time" + "pagination": { + "$ref": "#/components/schemas/Pagination" } + } } - }, - "Comment": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/groups.info": { + "post": { + "tags": ["Groups"], + "summary": "Retrieve a group", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, + "id": { + "type": "string", + "description": "Unique identifier for the group.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { "data": { - "type": "object", - "description": "The editor data representing this comment." - }, - "documentId": { - "type": "string", - "description": "Identifier for the document this is related to.", - "format": "uuid" - }, - "parentCommentId": { - "type": "string", - "description": "Identifier for the comment this is a child of, if any.", - "format": "uuid" - }, - "createdAt": { - "type": "string", - "description": "The date and time that this object was created", - "readOnly": true, - "format": "date-time" - }, - "createdBy": { "$ref": "#/components/schemas/User" }, - "updatedAt": { - "type": "string", - "description": "The date and time that this object was last changed", - "readOnly": true, - "format": "date-time" + "$ref": "#/components/schemas/Group" + } + } + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/groups.list": { + "post": { + "tags": ["Groups"], + "summary": "List all groups", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } }, - "updatedBy": { "$ref": "#/components/schemas/User" } + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + } } - }, - "Document": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/groups.create": { + "post": { + "tags": ["Groups"], + "summary": "Create a group", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "collectionId": { - "type": "string", - "description": "Identifier for the associated collection.", - "format": "uuid" - }, - "parentDocumentId": { - "type": "string", - "description": "Identifier for the document this is a child of, if any.", - "format": "uuid" - }, - "title": { - "type": "string", - "description": "The title of the document.", - "example": "🎉 Welcome to Acme Inc" - }, - "fullWidth": { - "type": "boolean", - "description": "Whether this document should be displayed in a full-width view." - }, - "emoji": { - "type": "string", - "description": "An emoji associated with the document.", - "example": "🎉" - }, - "text": { - "type": "string", - "description": "The text content of the document, contains markdown formatting", - "example": "…" - }, - "urlId": { - "type": "string", - "description": "A short unique ID that can be used to identify the document as an alternative to the UUID", - "example": "hDYep1TPAM" - }, - "collaborators": { - "type": "array", - "items": { "$ref": "#/components/schemas/User" } - }, - "pinned": { - "type": "boolean", - "description": "Whether this document is pinned in the collection" - }, - "template": { - "type": "boolean", - "description": "Whether this document is a template" - }, - "templateId": { - "type": "string", - "description": "Unique identifier for the template this document was created from, if any", - "format": "uuid" - }, - "revision": { - "type": "number", - "description": "A number that is auto incrementing with every revision of the document that is saved", - "readOnly": true - }, - "createdAt": { - "type": "string", - "description": "The date and time that this object was created", - "readOnly": true, - "format": "date-time" - }, - "createdBy": { "$ref": "#/components/schemas/User" }, - "updatedAt": { - "type": "string", - "description": "The date and time that this object was last changed", - "readOnly": true, - "format": "date-time" - }, - "updatedBy": { "$ref": "#/components/schemas/User" }, - "publishedAt": { - "type": "string", - "nullable": true, - "description": "The date and time that this object was published", - "readOnly": true, - "format": "date-time" - }, - "archivedAt": { - "type": "string", - "description": "The date and time that this object was archived", - "readOnly": true, - "format": "date-time" + "name": { + "type": "string", + "example": "Designers" + } + }, + "required": ["name"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Group" }, - "deletedAt": { - "type": "string", - "nullable": true, - "description": "The date and time that this object was deleted", - "readOnly": true, - "format": "date-time" + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } } + } } - }, - "Event": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/groups.update": { + "post": { + "tags": ["Groups"], + "summary": "Update a group", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "name": { - "type": "string", - "example": "documents.create", - "readOnly": true - }, - "modelId": { - "type": "string", - "description": "Identifier for the object this event is associated with when it is not one of document, collection, or user.", - "format": "uuid", - "readOnly": true - }, - "actorId": { - "type": "string", - "description": "The user that performed the action.", - "format": "uuid", - "readOnly": true - }, - "actorIpAddress": { - "type": "string", - "description": "The ip address the action was performed from. This field is only returned when the `auditLog` boolean is true.", - "example": "60.169.88.100", - "readOnly": true + "id": { + "type": "string", + "format": "uuid" + }, + "name": { + "type": "string", + "example": "Designers" + } + }, + "required": ["id", "name"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Group" }, - "collectionId": { + "policies": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Policy" + } + } + } + } + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/groups.delete": { + "post": { + "tags": ["Groups"], + "summary": "Delete a group", + "description": "Deleting a group will cause all of its members to lose access to any collections the group has previously been added to. This action can’t be undone so please be careful.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { "type": "string", "format": "uuid" } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true + } + } + } + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/groups.memberships": { + "post": { + "tags": ["Groups"], + "summary": "List all group members", + "description": "List and filter all the members in a group.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { + "type": "object", + "properties": { + "id": { "type": "string", - "format": "uuid", - "description": "Identifier for the associated collection, if any", - "readOnly": true - }, - "documentId": { + "description": "Group id", + "example": "a32c2ee6-fbde-4654-841b-0eabdc71b812" + }, + "query": { "type": "string", - "format": "uuid", - "description": "Identifier for the associated document, if any", - "readOnly": true - }, - "createdAt": { - "type": "string", - "description": "The date and time that this event was created", - "readOnly": true, - "format": "date-time" - }, + "description": "Filter memberships by user names", + "example": "jenny" + } + }, + "required": ["id"] + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { "data": { - "type": "object", - "example": { "name": "Equipment list" }, - "description": "Additional unstructured data associated with the event", - "readOnly": true - }, - "actor": { "$ref": "#/components/schemas/User" } + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "groupMemberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/GroupMembership" + } + } + } + }, + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + } } - }, - "Error": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/groups.add_user": { + "post": { + "tags": ["Groups"], + "summary": "Add a group member", + "description": "This method allows you to add a user to the specified group.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "ok": { "type": "boolean", "example": false }, - "error": { "type": "string" } + "id": { + "type": "string", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + } + }, + "required": ["id", "userId"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } + }, + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + }, + "groupMemberships": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Membership" + } + } + } + } + } } - }, - "FileOperation": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/groups.remove_user": { + "post": { + "tags": ["Groups"], + "summary": "Remove a group member", + "description": "This method allows you to remove a user from the group.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "type": { - "type": "string", - "example": "export", - "description": "The type of file operation.", - "readOnly": true, - "enum": ["import", "export"] - }, - "state": { - "type": "string", - "description": "The state of the file operation.", - "example": "complete", - "readOnly": true, - "enum": [ - "creating", - "uploading", - "complete", - "error", - "expired" - ] - }, - "collection": { - "allOf": [ - { "nullable": true }, - { "$ref": "#/components/schemas/Collection" } - ] - }, - "user": { "$ref": "#/components/schemas/User" }, - "size": { - "type": "number", - "description": "The size of the resulting file in bytes", - "readOnly": true, - "example": 2048 - }, - "createdAt": { - "type": "string", - "description": "The date and time that this object was created", - "readOnly": true, - "format": "date-time" + "id": { + "type": "string", + "description": "Identifier for the collection", + "format": "uuid" + }, + "userId": { + "type": "string", + "format": "uuid" + } + }, + "required": ["id", "userId"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "object", + "properties": { + "groups": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Group" + } + } + } } + } } - }, - "Group": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/revisions.info": { + "post": { + "tags": ["Revisions"], + "summary": "Retrieve a revision", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "name": { - "type": "string", - "description": "The name of this group.", - "example": "Engineering" - }, - "memberCount": { - "type": "number", - "description": "The number of users that are members of the group", - "example": 11, - "readOnly": true - }, - "createdAt": { - "type": "string", - "description": "The date and time that this object was created", - "readOnly": true, - "format": "date-time" + "id": { + "type": "string", + "description": "Unique identifier for the revision.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Revision" + } + } + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/revisions.list": { + "post": { + "tags": ["Revisions"], + "summary": "List all revisions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Revision" + } }, - "updatedAt": { - "type": "string", - "description": "The date and time that this object was last changed", - "readOnly": true, - "format": "date-time" + "pagination": { + "$ref": "#/components/schemas/Pagination" } + } } - }, - "Share": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/shares.info": { + "post": { + "tags": ["Shares"], + "summary": "Retrieve a share object", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "documentTitle": { - "type": "string", - "description": "Title of the shared document.", - "example": "React best practices", - "readOnly": true - }, - "documentUrl": { - "type": "string", - "format": "uri", - "description": "URL of the original document.", - "readOnly": true - }, - "url": { - "type": "string", - "format": "uri", - "description": "URL of the publicly shared document.", - "readOnly": true - }, - "published": { - "type": "boolean", - "example": false, - "description": "If true the share can be loaded without a user account." - }, - "includeChildDocuments": { - "type": "boolean", - "example": true, - "description": "If to also give permission to view documents nested beneath this one." - }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Date and time when this share was created", - "readOnly": true - }, - "createdBy": { "$ref": "#/components/schemas/User" }, - "updatedAt": { - "type": "string", - "format": "date-time", - "description": "Date and time when this share was edited", - "readOnly": true + "id": { + "type": "string", + "description": "Unique identifier for the share.", + "format": "uuid" + }, + "documentId": { + "type": "string", + "description": "Unique identifier for a document. One of id or documentId must be provided.", + "format": "uuid" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Share" + } + } + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/shares.list": { + "post": { + "tags": ["Shares"], + "summary": "List all shares", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Share" + } }, - "lastAccessedAt": { - "type": "string", - "format": "date-time", - "description": "Date and time when this share was last viewed", - "readOnly": true + "pagination": { + "$ref": "#/components/schemas/Pagination" + } + } + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/shares.create": { + "post": { + "tags": ["Shares"], + "summary": "Create a share", + "description": "Creates a new share link that can be used by to access a document. If you request multiple shares for the same document with the same API key, the same share object will be returned. By default all shares are unpublished.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "documentId": { + "type": "string", + "format": "uuid" + } + }, + "required": ["documentId"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Share" } + } } - }, - "Revision": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/shares.update": { + "post": { + "tags": ["Shares"], + "summary": "Update a share", + "description": "Allows changing an existing shares published status, which removes authentication and makes it available to anyone with the link.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "documentId": { - "type": "string", - "description": "Identifier for the associated document.", - "readOnly": true, - "format": "uuid" - }, - "title": { - "type": "string", - "description": "Title of the document.", - "readOnly": true - }, - "text": { - "type": "string", - "description": "Body of the document, may contain markdown formatting", - "readOnly": true - }, - "createdAt": { - "type": "string", - "format": "date-time", - "description": "Date and time when this revision was created", - "readOnly": true - }, - "createdBy": { "$ref": "#/components/schemas/User" } + "id": { + "type": "string", + "format": "uuid" + }, + "published": { "type": "boolean" } + }, + "required": ["id", "published"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/Share" + } + } } - }, - "Team": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/shares.revoke": { + "post": { + "tags": ["Shares"], + "summary": "Revoke a share", + "description": "Makes the share link inactive so that it can no longer be used to access the document.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "name": { - "type": "string", - "description": "The name of this team, it is usually auto-generated when the first SSO connection is made but can be changed if neccessary." - }, - "avatarUrl": { - "type": "string", - "format": "uri", - "description": "The URL for the image associated with this team, it will be displayed in the team switcher and in the top left of the knowledge base along with the name." - }, - "sharing": { - "type": "boolean", - "description": "Whether this team has share links globally enabled. If this value is false then all sharing UI and APIs are disabled." - }, - "defaultCollectionId": { - "type": "string", - "description": "If set then the referenced collection is where users will be redirected to after signing in instead of the Home screen", - "format": "uuid" - }, - "defaultUserRole": { - "type": "string", - "description": "If set then this role will be used as the default for users that signup via SSO", - "enum": ["viewer", "member", "admin"] - }, - "memberCollectionCreate": { - "type": "boolean", - "description": "Whether members are allowed to create new collections. If false then only admins can create collections." - }, - "documentEmbeds": { - "type": "boolean", - "description": "Whether this team has embeds in documents globally enabled. It can be disabled to reduce potential data leakage to third parties." - }, - "collaborativeEditing": { - "type": "boolean", - "description": "Whether this team has collaborative editing in documents globally enabled." - }, - "inviteRequired": { - "type": "boolean", - "description": "Whether an invite is required to join this team, if false users may join with a linked SSO provider." - }, - "allowedDomains": { - "type": "array", - "items": { - "type": "string", - "description": "A hostname that user emails are restricted to" - } - }, - "guestSignin": { - "type": "boolean", - "description": "Whether this team has guest signin enabled. Guests can signin with an email address and are not required to have a Google Workspace/Slack SSO account once invited." - }, - "subdomain": { - "type": "string", - "description": "Represents the subdomain at which this team's knowledge base can be accessed." - }, - "url": { - "type": "string", - "description": "The fully qualified URL at which this team's knowledge base can be accessed.", - "readOnly": true, - "format": "uri" + "id": { "type": "string", "format": "uuid" } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } + } } - }, - "User": { + } + } + }, + "400": { "$ref": "#/components/responses/Validation" }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.invite": { + "post": { + "tags": ["Users"], + "summary": "Invite users", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true, - "format": "uuid" - }, - "name": { - "type": "string", - "description": "The name of this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if neccessary.", - "example": "Jane Doe" - }, - "avatarUrl": { - "type": "string", - "format": "uri", - "description": "The URL for the image associated with this user, it will be displayed in the application UI and email notifications." - }, - "email": { - "type": "string", - "description": "The email associated with this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if neccessary.", - "format": "email", - "readOnly": true - }, - "isAdmin": { - "type": "boolean", - "description": "Whether this user has admin permissions.", - "readOnly": true - }, - "isSuspended": { - "type": "boolean", - "description": "Whether this user has been suspended.", - "readOnly": true - }, - "lastActiveAt": { - "type": "string", - "description": "The last time this user made an API request, this value is updated at most every 5 minutes.", - "readOnly": true, - "format": "date-time" - }, - "createdAt": { - "type": "string", - "description": "The date and time that this user first signed in or was invited as a guest.", - "readOnly": true, - "format": "date-time" + "invites": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Invite" + } + } + }, + "required": ["invites"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sent": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Invite" + } + }, + "users": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } } + } } - }, - "Invite": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/users.info": { + "post": { + "tags": ["Users"], + "summary": "Retrieve a user", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "name": { + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.list": { + "post": { + "tags": ["Users"], + "summary": "List all users", + "description": "List and filter all the users in the team", + "requestBody": { + "content": { + "application/json": { + "schema": { + "allOf": [ + { + "$ref": "#/components/schemas/Pagination" + }, + { "$ref": "#/components/schemas/Sorting" }, + { + "type": "object", + "properties": { + "query": { "type": "string", - "description": "The full name of the user being invited" - }, - "email": { + "example": "jane" + }, + "emails": { + "type": "array", + "items": { + "type": "string", + "description": "Array of emails", + "example": [ + "jane.crandall@mail.com", + "prudence.crandall@mail.com" + ] + } + }, + "filter": { "type": "string", - "description": "The email address to invite" + "example": "all", + "enum": [ + "invited", + "viewers", + "admins", + "active", + "all", + "suspended" + ] + } + } + } + ] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/User" + } }, - "role": { - "type": "string", - "enum": ["member", "guest", "admin"] + "pagination": { + "$ref": "#/components/schemas/Pagination" } + } } - }, - "Membership": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/users.update": { + "post": { + "tags": ["Users"], + "summary": "Update a user", + "description": "Update a users name or avatar. No `id` is required as it is only possible to update the current user at this time.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true - }, - "userId": { - "type": "string", - "description": "Identifier for the associated user.", - "readOnly": true, - "format": "uuid" - }, - "collectionId": { - "type": "string", - "description": "Identifier for the associated collection.", - "readOnly": true, - "format": "uuid" - }, - "permission": { "$ref": "#/components/schemas/Permission" } + "name": { "type": "string" }, + "avatarUrl": { + "type": "string", + "format": "uri" + } + } + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" + } + } } - }, - "Policy": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.promote": { + "post": { + "tags": ["Users"], + "summary": "Promote a user", + "description": "Promote a user to be a team admin. This endpoint is only available for admin users.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object this policy references.", - "format": "uuid", - "readOnly": true - }, - "abilities": { - "type": "object", - "properties": { - "create": { "type": "boolean" }, - "read": { "type": "boolean" }, - "update": { "type": "boolean" }, - "delete": { "type": "boolean" }, - "restore": { "type": "boolean" }, - "star": { "type": "boolean" }, - "unstar": { "type": "boolean" }, - "share": { "type": "boolean" }, - "download": { "type": "boolean" }, - "pin": { "type": "boolean" }, - "unpin": { "type": "boolean" }, - "move": { "type": "boolean" }, - "archive": { "type": "boolean" }, - "unarchive": { "type": "boolean" }, - "createChildDocument": { "type": "boolean" } - } + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" } + } } - }, - "GroupMembership": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.demote": { + "post": { + "tags": ["Users"], + "summary": "Demote a user", + "description": "Demote a team admin to regular user permissions. This endpoint is only available for admin users.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true - }, - "groupId": { - "type": "string", - "description": "Identifier for the associated group.", - "readOnly": true, - "format": "uuid" - }, - "userId": { - "type": "string", - "description": "Identifier for the associated user.", - "readOnly": true, - "format": "uuid" - }, - "user": { "$ref": "#/components/schemas/User" } + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + }, + "to": { + "type": "string", + "description": "Which role to demote to", + "enum": ["viewer", "member"] + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" + } + } } - }, - "CollectionGroupMembership": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.suspend": { + "post": { + "tags": ["Users"], + "summary": "Suspend a user", + "description": "Suspending a user prevents the user from signing in. Users that are suspended are also not counted against billing totals in the hosted version.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true - }, - "groupId": { - "type": "string", - "description": "Identifier for the associated group.", - "readOnly": true, - "format": "uuid" - }, - "collectionId": { - "type": "string", - "description": "Identifier for the associated collection.", - "readOnly": true, - "format": "uuid" - }, - "permission": { "$ref": "#/components/schemas/Permission" } + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" + } + } } - }, - "View": { + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.activate": { + "post": { + "tags": ["Users"], + "summary": "Activate a user", + "description": "Activating a previously suspended user allows them to signin again. Users that are activated will cause billing totals to be re-calculated in the hosted version.", + "requestBody": { + "content": { + "application/json": { + "schema": { "type": "object", "properties": { - "id": { - "type": "string", - "description": "Unique identifier for the object.", - "readOnly": true - }, - "documentId": { - "type": "string", - "description": "Identifier for the associated document.", - "readOnly": true, - "format": "uuid" - }, - "firstViewedAt": { - "type": "string", - "description": "When the document was first viewed by the user", - "readOnly": true, - "format": "date-time" - }, - "lastViewedAt": { - "type": "string", - "description": "When the document was last viewed by the user", - "readOnly": true, - "format": "date-time" - }, - "count": { - "type": "number", - "description": "The number of times the user has viewed the document.", - "example": 22, - "readOnly": true - }, - "user": { "$ref": "#/components/schemas/User" } - } + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + } + }, + "required": ["id"] + } } + } }, "responses": { - "NotFound": { - "description": "The specified resource was not found.", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Error" } + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/User" } + } } - }, - "Validation": { - "description": "The request failed one or more validations.", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/users.delete": { + "post": { + "tags": ["Users"], + "summary": "Delete a user", + "description": "Deleting a user removes the object entirely. In almost every circumstance it is preferable to suspend a user, as a deleted user can be recreated by signing in with SSO again.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the user.", + "format": "uuid" + } + }, + "required": ["id"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "success": { + "type": "boolean", + "example": true } + } } - }, - "Unauthorized": { - "description": "The current API key is not authorized to perform this action.", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" }, + "404": { "$ref": "#/components/responses/NotFound" } + } + } + }, + "/views.list": { + "post": { + "tags": ["Views"], + "summary": "List all views", + "description": "List all users that have viewed a document and the overall view count.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "documentId": { + "type": "string", + "format": "uuid" + } + }, + "required": ["documentId"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/View" + } } + } } - }, - "Unauthenticated": { - "description": "The API key is missing or otherwise invalid.", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + }, + "/views.create": { + "post": { + "tags": ["Views"], + "summary": "Create a view", + "description": "Creates a new view for a document. This is documented in the interests of thoroughness however it is recommended that views are not created from outside of the Outline UI.", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "documentId": { + "type": "string", + "format": "uuid" + } + }, + "required": ["documentId"] + } + } + } + }, + "responses": { + "200": { + "description": "OK", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "data": { + "$ref": "#/components/schemas/View" } + } } + } } - }, - "securitySchemes": { - "http": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" + }, + "401": { "$ref": "#/components/responses/Unauthenticated" }, + "403": { "$ref": "#/components/responses/Unauthorized" } + } + } + } + }, + "components": { + "schemas": { + "Permission": { "type": "string", "enum": ["read", "read_write"] }, + "Attachment": { + "type": "object", + "properties": { + "contentType": { "type": "string", "example": "image/png" }, + "size": { "type": "number" }, + "name": { "type": "string" }, + "url": { "type": "string", "format": "uri" }, + "documentId": { + "type": "string", + "description": "Identifier for the associated document, if any.", + "format": "uuid" + } + } + }, + "Pagination": { + "type": "object", + "properties": { + "offset": { "type": "number" }, + "limit": { "type": "number", "example": 25 } + } + }, + "Sorting": { + "type": "object", + "properties": { + "sort": { "type": "string", "example": "updatedAt" }, + "direction": { + "type": "string", + "example": "DESC", + "enum": ["ASC", "DESC"] + } + } + }, + "NavigationNode": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the document.", + "format": "uuid" + }, + "title": { "type": "string" }, + "url": { "type": "string" }, + "children": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NavigationNode" + } + } + } + }, + "Auth": { + "type": "object", + "properties": { + "user": { "$ref": "#/components/schemas/User" }, + "team": { "$ref": "#/components/schemas/Team" } + } + }, + "Collection": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "name": { + "type": "string", + "description": "The name of the collection.", + "example": "Human Resources" + }, + "description": { + "type": "string", + "description": "A description of the collection, may contain markdown formatting", + "example": "" + }, + "sort": { + "type": "object", + "description": "The sort of documents in the collection. Note that not all API responses respect this and it is left as a frontend concern to implement.", + "properties": { + "field": { "type": "string" }, + "direction": { + "type": "string", + "enum": ["asc", "desc"] + } + } + }, + "index": { + "type": "string", + "description": "The position of the collection in the sidebar", + "example": "P" + }, + "color": { + "type": "string", + "description": "A color representing the collection, this is used to help make collections more identifiable in the UI. It should be in HEX format including the #", + "example": "#123123" + }, + "icon": { + "type": "string", + "description": "A string that represents an icon in the outline-icons package" + }, + "permission": { "$ref": "#/components/schemas/Permission" }, + "createdAt": { + "type": "string", + "description": "The date and time that this object was created", + "readOnly": true, + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "description": "The date and time that this object was last changed", + "readOnly": true, + "format": "date-time" + }, + "deletedAt": { + "type": "string", + "nullable": true, + "description": "The date and time that this object was deleted", + "readOnly": true, + "format": "date-time" + } + } + }, + "Comment": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "data": { + "type": "object", + "description": "The editor data representing this comment." + }, + "documentId": { + "type": "string", + "description": "Identifier for the document this is related to.", + "format": "uuid" + }, + "parentCommentId": { + "type": "string", + "description": "Identifier for the comment this is a child of, if any.", + "format": "uuid" + }, + "createdAt": { + "type": "string", + "description": "The date and time that this object was created", + "readOnly": true, + "format": "date-time" + }, + "createdBy": { "$ref": "#/components/schemas/User" }, + "updatedAt": { + "type": "string", + "description": "The date and time that this object was last changed", + "readOnly": true, + "format": "date-time" + }, + "updatedBy": { "$ref": "#/components/schemas/User" } + } + }, + "Document": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "collectionId": { + "type": "string", + "description": "Identifier for the associated collection.", + "format": "uuid" + }, + "parentDocumentId": { + "type": "string", + "description": "Identifier for the document this is a child of, if any.", + "format": "uuid" + }, + "title": { + "type": "string", + "description": "The title of the document.", + "example": "🎉 Welcome to Acme Inc" + }, + "fullWidth": { + "type": "boolean", + "description": "Whether this document should be displayed in a full-width view." + }, + "emoji": { + "type": "string", + "description": "An emoji associated with the document.", + "example": "🎉" + }, + "text": { + "type": "string", + "description": "The text content of the document, contains markdown formatting", + "example": "…" + }, + "urlId": { + "type": "string", + "description": "A short unique ID that can be used to identify the document as an alternative to the UUID", + "example": "hDYep1TPAM" + }, + "collaborators": { + "type": "array", + "items": { "$ref": "#/components/schemas/User" } + }, + "pinned": { + "type": "boolean", + "description": "Whether this document is pinned in the collection" + }, + "template": { + "type": "boolean", + "description": "Whether this document is a template" + }, + "templateId": { + "type": "string", + "description": "Unique identifier for the template this document was created from, if any", + "format": "uuid" + }, + "revision": { + "type": "number", + "description": "A number that is auto incrementing with every revision of the document that is saved", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "The date and time that this object was created", + "readOnly": true, + "format": "date-time" + }, + "createdBy": { "$ref": "#/components/schemas/User" }, + "updatedAt": { + "type": "string", + "description": "The date and time that this object was last changed", + "readOnly": true, + "format": "date-time" + }, + "updatedBy": { "$ref": "#/components/schemas/User" }, + "publishedAt": { + "type": "string", + "nullable": true, + "description": "The date and time that this object was published", + "readOnly": true, + "format": "date-time" + }, + "archivedAt": { + "type": "string", + "description": "The date and time that this object was archived", + "readOnly": true, + "format": "date-time" + }, + "deletedAt": { + "type": "string", + "nullable": true, + "description": "The date and time that this object was deleted", + "readOnly": true, + "format": "date-time" + } + } + }, + "Event": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "name": { + "type": "string", + "example": "documents.create", + "readOnly": true + }, + "modelId": { + "type": "string", + "description": "Identifier for the object this event is associated with when it is not one of document, collection, or user.", + "format": "uuid", + "readOnly": true + }, + "actorId": { + "type": "string", + "description": "The user that performed the action.", + "format": "uuid", + "readOnly": true + }, + "actorIpAddress": { + "type": "string", + "description": "The ip address the action was performed from. This field is only returned when the `auditLog` boolean is true.", + "example": "60.169.88.100", + "readOnly": true + }, + "collectionId": { + "type": "string", + "format": "uuid", + "description": "Identifier for the associated collection, if any", + "readOnly": true + }, + "documentId": { + "type": "string", + "format": "uuid", + "description": "Identifier for the associated document, if any", + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "The date and time that this event was created", + "readOnly": true, + "format": "date-time" + }, + "data": { + "type": "object", + "example": { "name": "Equipment list" }, + "description": "Additional unstructured data associated with the event", + "readOnly": true + }, + "actor": { "$ref": "#/components/schemas/User" } + } + }, + "Error": { + "type": "object", + "properties": { + "ok": { "type": "boolean", "example": false }, + "error": { "type": "string" } + } + }, + "FileOperation": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "type": { + "type": "string", + "example": "export", + "description": "The type of file operation.", + "readOnly": true, + "enum": ["import", "export"] + }, + "state": { + "type": "string", + "description": "The state of the file operation.", + "example": "complete", + "readOnly": true, + "enum": ["creating", "uploading", "complete", "error", "expired"] + }, + "collection": { + "allOf": [ + { "nullable": true }, + { "$ref": "#/components/schemas/Collection" } + ] + }, + "user": { "$ref": "#/components/schemas/User" }, + "size": { + "type": "number", + "description": "The size of the resulting file in bytes", + "readOnly": true, + "example": 2048 + }, + "createdAt": { + "type": "string", + "description": "The date and time that this object was created", + "readOnly": true, + "format": "date-time" + } + } + }, + "Group": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "name": { + "type": "string", + "description": "The name of this group.", + "example": "Engineering" + }, + "memberCount": { + "type": "number", + "description": "The number of users that are members of the group", + "example": 11, + "readOnly": true + }, + "createdAt": { + "type": "string", + "description": "The date and time that this object was created", + "readOnly": true, + "format": "date-time" + }, + "updatedAt": { + "type": "string", + "description": "The date and time that this object was last changed", + "readOnly": true, + "format": "date-time" + } + } + }, + "Share": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "documentTitle": { + "type": "string", + "description": "Title of the shared document.", + "example": "React best practices", + "readOnly": true + }, + "documentUrl": { + "type": "string", + "format": "uri", + "description": "URL of the original document.", + "readOnly": true + }, + "url": { + "type": "string", + "format": "uri", + "description": "URL of the publicly shared document.", + "readOnly": true + }, + "published": { + "type": "boolean", + "example": false, + "description": "If true the share can be loaded without a user account." + }, + "includeChildDocuments": { + "type": "boolean", + "example": true, + "description": "If to also give permission to view documents nested beneath this one." + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when this share was created", + "readOnly": true + }, + "createdBy": { "$ref": "#/components/schemas/User" }, + "updatedAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when this share was edited", + "readOnly": true + }, + "lastAccessedAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when this share was last viewed", + "readOnly": true + } + } + }, + "Revision": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "documentId": { + "type": "string", + "description": "Identifier for the associated document.", + "readOnly": true, + "format": "uuid" + }, + "title": { + "type": "string", + "description": "Title of the document.", + "readOnly": true + }, + "text": { + "type": "string", + "description": "Body of the document, may contain markdown formatting", + "readOnly": true + }, + "createdAt": { + "type": "string", + "format": "date-time", + "description": "Date and time when this revision was created", + "readOnly": true + }, + "createdBy": { "$ref": "#/components/schemas/User" } + } + }, + "Team": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "name": { + "type": "string", + "description": "The name of this team, it is usually auto-generated when the first SSO connection is made but can be changed if neccessary." + }, + "avatarUrl": { + "type": "string", + "format": "uri", + "description": "The URL for the image associated with this team, it will be displayed in the team switcher and in the top left of the knowledge base along with the name." + }, + "sharing": { + "type": "boolean", + "description": "Whether this team has share links globally enabled. If this value is false then all sharing UI and APIs are disabled." + }, + "defaultCollectionId": { + "type": "string", + "description": "If set then the referenced collection is where users will be redirected to after signing in instead of the Home screen", + "format": "uuid" + }, + "defaultUserRole": { + "type": "string", + "description": "If set then this role will be used as the default for users that signup via SSO", + "enum": ["viewer", "member", "admin"] + }, + "memberCollectionCreate": { + "type": "boolean", + "description": "Whether members are allowed to create new collections. If false then only admins can create collections." + }, + "documentEmbeds": { + "type": "boolean", + "description": "Whether this team has embeds in documents globally enabled. It can be disabled to reduce potential data leakage to third parties." + }, + "collaborativeEditing": { + "type": "boolean", + "description": "Whether this team has collaborative editing in documents globally enabled." + }, + "inviteRequired": { + "type": "boolean", + "description": "Whether an invite is required to join this team, if false users may join with a linked SSO provider." + }, + "allowedDomains": { + "type": "array", + "items": { + "type": "string", + "description": "A hostname that user emails are restricted to" + } + }, + "guestSignin": { + "type": "boolean", + "description": "Whether this team has guest signin enabled. Guests can signin with an email address and are not required to have a Google Workspace/Slack SSO account once invited." + }, + "subdomain": { + "type": "string", + "description": "Represents the subdomain at which this team's knowledge base can be accessed." + }, + "url": { + "type": "string", + "description": "The fully qualified URL at which this team's knowledge base can be accessed.", + "readOnly": true, + "format": "uri" + } + } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true, + "format": "uuid" + }, + "name": { + "type": "string", + "description": "The name of this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if neccessary.", + "example": "Jane Doe" + }, + "avatarUrl": { + "type": "string", + "format": "uri", + "description": "The URL for the image associated with this user, it will be displayed in the application UI and email notifications." + }, + "email": { + "type": "string", + "description": "The email associated with this user, it is migrated from Slack or Google Workspace when the SSO connection is made but can be changed if neccessary.", + "format": "email", + "readOnly": true + }, + "isAdmin": { + "type": "boolean", + "description": "Whether this user has admin permissions.", + "readOnly": true + }, + "isSuspended": { + "type": "boolean", + "description": "Whether this user has been suspended.", + "readOnly": true + }, + "lastActiveAt": { + "type": "string", + "description": "The last time this user made an API request, this value is updated at most every 5 minutes.", + "readOnly": true, + "format": "date-time" + }, + "createdAt": { + "type": "string", + "description": "The date and time that this user first signed in or was invited as a guest.", + "readOnly": true, + "format": "date-time" + } + } + }, + "Invite": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The full name of the user being invited" + }, + "email": { + "type": "string", + "description": "The email address to invite" + }, + "role": { + "type": "string", + "enum": ["member", "guest", "admin"] + } + } + }, + "Membership": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true + }, + "userId": { + "type": "string", + "description": "Identifier for the associated user.", + "readOnly": true, + "format": "uuid" + }, + "collectionId": { + "type": "string", + "description": "Identifier for the associated collection.", + "readOnly": true, + "format": "uuid" + }, + "permission": { "$ref": "#/components/schemas/Permission" } + } + }, + "Policy": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object this policy references.", + "format": "uuid", + "readOnly": true + }, + "abilities": { + "type": "object", + "properties": { + "create": { "type": "boolean" }, + "read": { "type": "boolean" }, + "update": { "type": "boolean" }, + "delete": { "type": "boolean" }, + "restore": { "type": "boolean" }, + "star": { "type": "boolean" }, + "unstar": { "type": "boolean" }, + "share": { "type": "boolean" }, + "download": { "type": "boolean" }, + "pin": { "type": "boolean" }, + "unpin": { "type": "boolean" }, + "move": { "type": "boolean" }, + "archive": { "type": "boolean" }, + "unarchive": { "type": "boolean" }, + "createChildDocument": { "type": "boolean" } } + } + } + }, + "GroupMembership": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true + }, + "groupId": { + "type": "string", + "description": "Identifier for the associated group.", + "readOnly": true, + "format": "uuid" + }, + "userId": { + "type": "string", + "description": "Identifier for the associated user.", + "readOnly": true, + "format": "uuid" + }, + "user": { "$ref": "#/components/schemas/User" } } + }, + "CollectionGroupMembership": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true + }, + "groupId": { + "type": "string", + "description": "Identifier for the associated group.", + "readOnly": true, + "format": "uuid" + }, + "collectionId": { + "type": "string", + "description": "Identifier for the associated collection.", + "readOnly": true, + "format": "uuid" + }, + "permission": { "$ref": "#/components/schemas/Permission" } + } + }, + "View": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the object.", + "readOnly": true + }, + "documentId": { + "type": "string", + "description": "Identifier for the associated document.", + "readOnly": true, + "format": "uuid" + }, + "firstViewedAt": { + "type": "string", + "description": "When the document was first viewed by the user", + "readOnly": true, + "format": "date-time" + }, + "lastViewedAt": { + "type": "string", + "description": "When the document was last viewed by the user", + "readOnly": true, + "format": "date-time" + }, + "count": { + "type": "number", + "description": "The number of times the user has viewed the document.", + "example": 22, + "readOnly": true + }, + "user": { "$ref": "#/components/schemas/User" } + } + } + }, + "responses": { + "NotFound": { + "description": "The specified resource was not found.", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "Validation": { + "description": "The request failed one or more validations.", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "Unauthorized": { + "description": "The current API key is not authorized to perform this action.", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Error" } + } + } + }, + "Unauthenticated": { + "description": "The API key is missing or otherwise invalid.", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Error" } + } + } + } + }, + "securitySchemes": { + "http": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } } + } } diff --git a/packages/cli/package.json b/packages/cli/package.json index 749b6734..31431d11 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,60 +1,56 @@ { - "name": "@scalar/cli", - "description": "A command-line interface to work with OpenAPI files", - "license": "MIT", - "author": "Scalar (https://github.com/scalar)", - "homepage": "https://github.com/scalar/cli", - "bugs": "https://github.com/scalar/cli/issues/new/choose", - "keywords": [ - "scalar", - "openapi", - "swagger", - "cli" - ], - "engines": { - "node": ">=18" - }, - "scripts": { - "@scalar/cli": "pnpm vite-node src/index.ts", - "lint": "pnpm dlx @biomejs/biome lint .", - "format": "pnpm dlx @biomejs/biome check . --apply", - "format:check": "pnpm dlx @biomejs/biome check .", - "cli:link": "pnpm run build && npm unlink -g && npm link", - "types:check": "tsc --noEmit --skipLibCheck", - "build": "rm -Rf dist/ && tsc && rollup -c" - }, - "type": "module", - "version": "0.0.1", - "bin": { - "scalar": "./dist/index.js" - }, - "files": [ - "./dist" - ], - "dependencies": { - "@hono/node-server": "^1.7.0", - "@scalar/api-reference": "^1.15.1", - "@seriousme/openapi-schema-validator": "^2.1.6", - "commander": "^12.0.0", - "hono": "^3.12.12", - "kleur": "^4.1.5", - "openapi-types": "^12.1.3", - "prettier": "^3.2.5", - "prettyjson": "^1.2.5", - "prompts": "^2.4.2", - "toml-js": "^0.0.8", - "vite-node": "^1.2.2" - }, - "devDependencies": { - "@biomejs/biome": "1.5.3", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-typescript": "^11.1.6", - "@types/node": "^20.11.17", - "execa": "^8.0.1", - "rollup": "^4.9.6", - "rollup-plugin-delete": "^2.0.0", - "strip-ansi": "^7.1.0", - "tslib": "^2.6.2", - "typescript": "^5.3.3" - } + "name": "@scalar/cli", + "description": "A command-line interface to work with OpenAPI files", + "license": "MIT", + "author": "Scalar (https://github.com/scalar)", + "homepage": "https://github.com/scalar/cli", + "bugs": "https://github.com/scalar/cli/issues/new/choose", + "keywords": [ + "scalar", + "openapi", + "swagger", + "cli" + ], + "engines": { + "node": ">=18" + }, + "scripts": { + "@scalar/cli": "pnpm vite-node src/index.ts", + "cli:link": "pnpm run build && npm unlink -g && npm link", + "types:check": "tsc --noEmit --skipLibCheck", + "build": "rm -Rf dist/ && tsc && rollup -c" + }, + "type": "module", + "version": "0.0.1", + "bin": { + "scalar": "./dist/index.js" + }, + "files": [ + "./dist" + ], + "dependencies": { + "@hono/node-server": "^1.7.0", + "@scalar/api-reference": "^1.15.1", + "@seriousme/openapi-schema-validator": "^2.1.6", + "commander": "^12.0.0", + "hono": "^3.12.12", + "kleur": "^4.1.5", + "openapi-types": "^12.1.3", + "prettier": "^3.2.5", + "prettyjson": "^1.2.5", + "prompts": "^2.4.2", + "toml-js": "^0.0.8", + "vite-node": "^1.2.2" + }, + "devDependencies": { + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-typescript": "^11.1.6", + "@types/node": "^20.11.17", + "execa": "^8.0.1", + "rollup": "^4.9.6", + "rollup-plugin-delete": "^2.0.0", + "strip-ansi": "^7.1.0", + "tslib": "^2.6.2", + "typescript": "^5.3.3" + } } diff --git a/packages/cli/petstore.json b/packages/cli/petstore.json index 803f4c1a..479ca424 100644 --- a/packages/cli/petstore.json +++ b/packages/cli/petstore.json @@ -1,869 +1,869 @@ { - "openapi": "3.0.2", - "info": { - "title": "Swagger Petstore - OpenAPI 3.0", - "description": "This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about\nSwagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)", - "termsOfService": "http://swagger.io/terms/", - "contact": { "email": "apiteam@swagger.io" }, - "license": { - "name": "Apache 2.0", - "url": "http://www.apache.org/licenses/LICENSE-2.0.html" - }, - "version": "1.0.17" + "openapi": "3.0.2", + "info": { + "title": "Swagger Petstore - OpenAPI 3.0", + "description": "This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about\nSwagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)", + "termsOfService": "http://swagger.io/terms/", + "contact": { "email": "apiteam@swagger.io" }, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + }, + "version": "1.0.17" + }, + "externalDocs": { + "description": "Find out more about Swagger", + "url": "http://swagger.io" + }, + "servers": [{ "url": "/api/v3" }], + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } }, - "externalDocs": { - "description": "Find out more about Swagger", + { + "name": "store", + "description": "Access to Petstore orders", + "externalDocs": { + "description": "Find out more about our store", "url": "http://swagger.io" + } }, - "servers": [{ "url": "/api/v3" }], - "tags": [ - { - "name": "pet", - "description": "Everything about your Pets", - "externalDocs": { - "description": "Find out more", - "url": "http://swagger.io" + { "name": "user", "description": "Operations about user" } + ], + "paths": { + "/pet": { + "put": { + "tags": ["pet"], + "summary": "Update an existing pet", + "description": "Update an existing pet by Id", + "operationId": "updatePet", + "requestBody": { + "description": "Update an existent pet in the store", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/x-www-form-urlencoded": { + "schema": { "$ref": "#/components/schemas/Pet" } } + }, + "required": true }, - { - "name": "store", - "description": "Access to Petstore orders", - "externalDocs": { - "description": "Find out more about our store", - "url": "http://swagger.io" + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } + } } + }, + "400": { "description": "Invalid ID supplied" }, + "404": { "description": "Pet not found" }, + "405": { "description": "Validation exception" } }, - { "name": "user", "description": "Operations about user" } - ], - "paths": { - "/pet": { - "put": { - "tags": ["pet"], - "summary": "Update an existing pet", - "description": "Update an existing pet by Id", - "operationId": "updatePet", - "requestBody": { - "description": "Update an existent pet in the store", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/x-www-form-urlencoded": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - } - }, - "400": { "description": "Invalid ID supplied" }, - "404": { "description": "Pet not found" }, - "405": { "description": "Validation exception" } - }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + }, + "post": { + "tags": ["pet"], + "summary": "Add a new pet to the store", + "description": "Add a new pet to the store", + "operationId": "addPet", + "requestBody": { + "description": "Create a new pet in the store", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } }, - "post": { - "tags": ["pet"], - "summary": "Add a new pet to the store", - "description": "Add a new pet to the store", - "operationId": "addPet", - "requestBody": { - "description": "Create a new pet in the store", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/x-www-form-urlencoded": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - } - }, - "405": { "description": "Invalid input" } - }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/x-www-form-urlencoded": { + "schema": { "$ref": "#/components/schemas/Pet" } } + }, + "required": true }, - "/pet/findByStatus": { - "get": { - "tags": ["pet"], - "summary": "Finds Peats by status", - "description": "Multiplae status values cana be provided with comma separated strings", - "operationId": "findPetsBySatatus", - "parameters": [ - { - "name": "status", - "in": "query", - "description": "Status aavaluaes that need to be considered for filter", - "required": false, - "explode": true, - "schema": { - "type": "string", - "default": "available", - "enum": ["available", "pending", "sold"] - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/xml": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Pet" - } - } - }, - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Pet" - } - } - } - } - }, - "400": { "description": "Invalid status value" } - }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } + } } + }, + "405": { "description": "Invalid input" } }, - "/pet/findByTags": { - "get": { - "tags": ["pet"], - "summary": "Finds Pets by tags", - "description": "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", - "operationId": "findPetsByTags", - "parameters": [ - { - "name": "tags", - "in": "query", - "description": "Tags to filter by", - "required": false, - "explode": true, - "schema": { - "type": "array", - "items": { "type": "string" } - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/xml": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Pet" - } - } - }, - "application/json": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Pet" - } - } - } - } - }, - "400": { "description": "Invalid tag value" } - }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + } + }, + "/pet/findByStatus": { + "get": { + "tags": ["pet"], + "summary": "Finds Peats by status", + "description": "Multiplae status values cana be provided with comma separated strings", + "operationId": "findPetsBySatatus", + "parameters": [ + { + "name": "status", + "in": "query", + "description": "Status aavaluaes that need to be considered for filter", + "required": false, + "explode": true, + "schema": { + "type": "string", + "default": "available", + "enum": ["available", "pending", "sold"] + } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + } } + }, + "400": { "description": "Invalid status value" } }, - "/pet/{petId}": { - "get": { - "tags": ["pet"], - "summary": "Find pet by ID", - "description": "Returns a single pet", - "operationId": "getPetById", - "parameters": [ - { - "name": "petId", - "in": "path", - "description": "ID of pet to return", - "required": true, - "schema": { "type": "integer", "format": "int64" } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - } - }, - "400": { "description": "Invalid ID supplied" }, - "404": { "description": "Pet not found" } - }, - "security": [ - { "api_key": [] }, - { "petstore_auth": ["write:pets", "read:pets"] } - ] - }, - "post": { - "tags": ["pet"], - "summary": "Updates a pet in the store with form data", - "description": "", - "operationId": "updatePetWithForm", - "parameters": [ - { - "name": "petId", - "in": "path", - "description": "ID of pet that needs to be updated", - "required": true, - "schema": { "type": "integer", "format": "int64" } - }, - { - "name": "name", - "in": "query", - "description": "Name of pet that needs to be updated", - "schema": { "type": "string" } - }, - { - "name": "status", - "in": "query", - "description": "Status of pet that needs to be updated", - "schema": { "type": "string" } - } - ], - "responses": { "405": { "description": "Invalid input" } }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] - }, - "delete": { - "tags": ["pet"], - "summary": "Deletes a pet", - "description": "", - "operationId": "deletePet", - "parameters": [ - { - "name": "api_key", - "in": "header", - "description": "", - "required": false, - "schema": { "type": "string" } - }, - { - "name": "petId", - "in": "path", - "description": "Pet id to delete", - "required": true, - "schema": { "type": "integer", "format": "int64" } - } - ], - "responses": { "400": { "description": "Invalid pet value" } }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + } + }, + "/pet/findByTags": { + "get": { + "tags": ["pet"], + "summary": "Finds Pets by tags", + "description": "Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing.", + "operationId": "findPetsByTags", + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "Tags to filter by", + "required": false, + "explode": true, + "schema": { + "type": "array", + "items": { "type": "string" } } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + }, + "application/json": { + "schema": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Pet" + } + } + } + } + }, + "400": { "description": "Invalid tag value" } }, - "/pet/{petId}/uploadImage": { - "post": { - "tags": ["pet"], - "summary": "uploads an image", - "description": "", - "operationId": "uploadFile", - "parameters": [ - { - "name": "petId", - "in": "path", - "description": "ID of pet to update", - "required": true, - "schema": { "type": "integer", "format": "int64" } - }, - { - "name": "additionalMetadata", - "in": "query", - "description": "Additional Metadata", - "required": false, - "schema": { "type": "string" } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { "type": "string", "format": "binary" } - } - } - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApiResponse" - } - } - } - } - }, - "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + } + }, + "/pet/{petId}": { + "get": { + "tags": ["pet"], + "summary": "Find pet by ID", + "description": "Returns a single pet", + "operationId": "getPetById", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to return", + "required": true, + "schema": { "type": "integer", "format": "int64" } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } + } } + }, + "400": { "description": "Invalid ID supplied" }, + "404": { "description": "Pet not found" } }, - "/store/inventory": { - "get": { - "tags": ["store"], - "summary": "Returns pet inventories by status", - "description": "Returns a map of status codes to quantities", - "operationId": "getInventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "int32" - } - } - } - } - } - }, - "security": [{ "api_key": [] }] + "security": [ + { "api_key": [] }, + { "petstore_auth": ["write:pets", "read:pets"] } + ] + }, + "post": { + "tags": ["pet"], + "summary": "Updates a pet in the store with form data", + "description": "", + "operationId": "updatePetWithForm", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet that needs to be updated", + "required": true, + "schema": { "type": "integer", "format": "int64" } + }, + { + "name": "name", + "in": "query", + "description": "Name of pet that needs to be updated", + "schema": { "type": "string" } + }, + { + "name": "status", + "in": "query", + "description": "Status of pet that needs to be updated", + "schema": { "type": "string" } + } + ], + "responses": { "405": { "description": "Invalid input" } }, + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + }, + "delete": { + "tags": ["pet"], + "summary": "Deletes a pet", + "description": "", + "operationId": "deletePet", + "parameters": [ + { + "name": "api_key", + "in": "header", + "description": "", + "required": false, + "schema": { "type": "string" } + }, + { + "name": "petId", + "in": "path", + "description": "Pet id to delete", + "required": true, + "schema": { "type": "integer", "format": "int64" } + } + ], + "responses": { "400": { "description": "Invalid pet value" } }, + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + } + }, + "/pet/{petId}/uploadImage": { + "post": { + "tags": ["pet"], + "summary": "uploads an image", + "description": "", + "operationId": "uploadFile", + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to update", + "required": true, + "schema": { "type": "integer", "format": "int64" } + }, + { + "name": "additionalMetadata", + "in": "query", + "description": "Additional Metadata", + "required": false, + "schema": { "type": "string" } + } + ], + "requestBody": { + "content": { + "application/octet-stream": { + "schema": { "type": "string", "format": "binary" } } + } }, - "/store/order": { - "post": { - "tags": ["store"], - "summary": "Place an order for a pet", - "description": "Place a new order in the store", - "operationId": "placeOrder", - "requestBody": { - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Order" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/Order" } - }, - "application/x-www-form-urlencoded": { - "schema": { "$ref": "#/components/schemas/Order" } - } - } - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Order" - } - } - } - }, - "405": { "description": "Invalid input" } + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ApiResponse" } + } } + } }, - "/store/order/{orderId}": { - "get": { - "tags": ["store"], - "summary": "Find purchase order by ID", - "description": "For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.", - "operationId": "getOrderById", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of order that needs to be fetched", - "required": true, - "schema": { "type": "integer", "format": "int64" } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/xml": { - "schema": { - "$ref": "#/components/schemas/Order" - } - }, - "application/json": { - "schema": { - "$ref": "#/components/schemas/Order" - } - } - } - }, - "400": { "description": "Invalid ID supplied" }, - "404": { "description": "Order not found" } + "security": [{ "petstore_auth": ["write:pets", "read:pets"] }] + } + }, + "/store/inventory": { + "get": { + "tags": ["store"], + "summary": "Returns pet inventories by status", + "description": "Returns a map of status codes to quantities", + "operationId": "getInventory", + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } } + } + } + } + }, + "security": [{ "api_key": [] }] + } + }, + "/store/order": { + "post": { + "tags": ["store"], + "summary": "Place an order for a pet", + "description": "Place a new order in the store", + "operationId": "placeOrder", + "requestBody": { + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Order" } }, - "delete": { - "tags": ["store"], - "summary": "Delete purchase order by ID", - "description": "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", - "operationId": "deleteOrder", - "parameters": [ - { - "name": "orderId", - "in": "path", - "description": "ID of the order that needs to be deleted", - "required": true, - "schema": { "type": "integer", "format": "int64" } - } - ], - "responses": { - "400": { "description": "Invalid ID supplied" }, - "404": { "description": "Order not found" } - } + "application/xml": { + "schema": { "$ref": "#/components/schemas/Order" } + }, + "application/x-www-form-urlencoded": { + "schema": { "$ref": "#/components/schemas/Order" } } + } }, - "/user": { - "post": { - "tags": ["user"], - "summary": "Create user", - "description": "This can only be done by the logged in user.", - "operationId": "createUser", - "requestBody": { - "description": "Created user object", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/User" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/User" } - }, - "application/x-www-form-urlencoded": { - "schema": { "$ref": "#/components/schemas/User" } - } - } - }, - "responses": { - "default": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - }, - "application/xml": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - } + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" } + } } - }, - "/user/createWithList": { - "post": { - "tags": ["user"], - "summary": "Creates list of users with given input array", - "description": "Creates list of users with given input array", - "operationId": "createUsersWithListInput", - "requestBody": { - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/User" } - } - } - } - }, - "responses": { - "200": { - "description": "Successful operation", - "content": { - "application/xml": { - "schema": { - "$ref": "#/components/schemas/User" - } - }, - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "default": { "description": "successful operation" } + }, + "405": { "description": "Invalid input" } + } + } + }, + "/store/order/{orderId}": { + "get": { + "tags": ["store"], + "summary": "Find purchase order by ID", + "description": "For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions.", + "operationId": "getOrderById", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of order that needs to be fetched", + "required": true, + "schema": { "type": "integer", "format": "int64" } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/Order" } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/Order" + } + } } + }, + "400": { "description": "Invalid ID supplied" }, + "404": { "description": "Order not found" } + } + }, + "delete": { + "tags": ["store"], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", + "operationId": "deleteOrder", + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "schema": { "type": "integer", "format": "int64" } + } + ], + "responses": { + "400": { "description": "Invalid ID supplied" }, + "404": { "description": "Order not found" } + } + } + }, + "/user": { + "post": { + "tags": ["user"], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "requestBody": { + "description": "Created user object", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/User" } + }, + "application/xml": { + "schema": { "$ref": "#/components/schemas/User" } + }, + "application/x-www-form-urlencoded": { + "schema": { "$ref": "#/components/schemas/User" } + } + } }, - "/user/login": { - "get": { - "tags": ["user"], - "summary": "Logs user into the system", - "description": "", - "operationId": "loginUser", - "parameters": [ - { - "name": "username", - "in": "query", - "description": "The user name for login", - "required": false, - "schema": { "type": "string" } - }, - { - "name": "password", - "in": "query", - "description": "The password for login in clear text", - "required": false, - "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "successful operation", - "headers": { - "X-Rate-Limit": { - "description": "calls per hour allowed by the user", - "schema": { - "type": "integer", - "format": "int32" - } - }, - "X-Expires-After": { - "description": "date in UTC when token expires", - "schema": { - "type": "string", - "format": "date-time" - } - } - }, - "content": { - "application/xml": { - "schema": { "type": "string" } - }, - "application/json": { - "schema": { "type": "string" } - } - } - }, - "400": { - "description": "Invalid username/password supplied" - } + "responses": { + "default": { + "description": "successful operation", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" } + }, + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + } + } + } + }, + "/user/createWithList": { + "post": { + "tags": ["user"], + "summary": "Creates list of users with given input array", + "description": "Creates list of users with given input array", + "operationId": "createUsersWithListInput", + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/User" } + } } + } }, - "/user/logout": { - "get": { - "tags": ["user"], - "summary": "Logs out current logged in user session", - "description": "", - "operationId": "logoutUser", - "parameters": [], - "responses": { - "default": { "description": "successful operation" } + "responses": { + "200": { + "description": "Successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } } - }, - "/user/{username}": { - "get": { - "tags": ["user"], - "summary": "Get user by user name", - "description": "", - "operationId": "getUserByName", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be fetched. Use user1 for testing. ", - "required": true, - "schema": { "type": "string" } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/xml": { - "schema": { - "$ref": "#/components/schemas/User" - } - }, - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "400": { "description": "Invalid username supplied" }, - "404": { "description": "User not found" } + }, + "default": { "description": "successful operation" } + } + } + }, + "/user/login": { + "get": { + "tags": ["user"], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": false, + "schema": { "type": "string" } + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "required": false, + "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "successful operation", + "headers": { + "X-Rate-Limit": { + "description": "calls per hour allowed by the user", + "schema": { + "type": "integer", + "format": "int32" } - }, - "put": { - "tags": ["user"], - "summary": "Update user", - "description": "This can only be done by the logged in user.", - "operationId": "updateUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "name that need to be deleted", - "required": true, - "schema": { "type": "string" } - } - ], - "requestBody": { - "description": "Update an existent user in the store", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/User" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/User" } - }, - "application/x-www-form-urlencoded": { - "schema": { "$ref": "#/components/schemas/User" } - } - } - }, - "responses": { - "default": { "description": "successful operation" } + }, + "X-Expires-After": { + "description": "date in UTC when token expires", + "schema": { + "type": "string", + "format": "date-time" } + } }, - "delete": { - "tags": ["user"], - "summary": "Delete user", - "description": "This can only be done by the logged in user.", - "operationId": "deleteUser", - "parameters": [ - { - "name": "username", - "in": "path", - "description": "The name that needs to be deleted", - "required": true, - "schema": { "type": "string" } - } - ], - "responses": { - "400": { "description": "Invalid username supplied" }, - "404": { "description": "User not found" } - } + "content": { + "application/xml": { + "schema": { "type": "string" } + }, + "application/json": { + "schema": { "type": "string" } + } } + }, + "400": { + "description": "Invalid username/password supplied" + } } + } }, - "components": { - "schemas": { - "Order": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 10 - }, - "petId": { - "type": "integer", - "format": "int64", - "example": 198772 - }, - "quantity": { - "type": "integer", - "format": "int32", - "example": 7 - }, - "shipDate": { "type": "string", "format": "date-time" }, - "status": { - "type": "string", - "description": "Order Status", - "example": "approved", - "enum": ["placed", "approved", "delivered"] - }, - "complete": { "type": "boolean" } - }, - "xml": { "name": "order" } - }, - "Customer": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 100000 - }, - "username": { "type": "string", "example": "fehguy" }, - "address": { - "type": "array", - "xml": { "name": "addresses", "wrapped": true }, - "items": { "$ref": "#/components/schemas/Address" } - } - }, - "xml": { "name": "customer" } - }, - "Address": { - "type": "object", - "properties": { - "street": { "type": "string", "example": "437 Lytton" }, - "city": { "type": "string", "example": "Palo Alto" }, - "state": { "type": "string", "example": "CA" }, - "zip": { "type": "string", "example": "94301" } - }, - "xml": { "name": "address" } - }, - "Category": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 1 - }, - "name": { "type": "string", "example": "Dogs" } - }, - "xml": { "name": "category" } - }, - "User": { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 10 - }, - "username": { "type": "string", "example": "theUser" }, - "firstName": { "type": "string", "example": "John" }, - "lastName": { "type": "string", "example": "James" }, - "email": { "type": "string", "example": "john@email.com" }, - "password": { "type": "string", "example": "12345" }, - "phone": { "type": "string", "example": "12345" }, - "userStatus": { - "type": "integer", - "description": "User Status", - "format": "int32", - "example": 1 - } - }, - "xml": { "name": "user" } - }, - "Tag": { - "type": "object", - "properties": { - "id": { "type": "integer", "format": "int64" }, - "name": { "type": "string" } - }, - "xml": { "name": "tag" } + "/user/logout": { + "get": { + "tags": ["user"], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "parameters": [], + "responses": { + "default": { "description": "successful operation" } + } + } + }, + "/user/{username}": { + "get": { + "tags": ["user"], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "schema": { "type": "string" } + } + ], + "responses": { + "200": { + "description": "successful operation", + "content": { + "application/xml": { + "schema": { + "$ref": "#/components/schemas/User" + } + }, + "application/json": { + "schema": { + "$ref": "#/components/schemas/User" + } + } + } + }, + "400": { "description": "Invalid username supplied" }, + "404": { "description": "User not found" } + } + }, + "put": { + "tags": ["user"], + "summary": "Update user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be deleted", + "required": true, + "schema": { "type": "string" } + } + ], + "requestBody": { + "description": "Update an existent user in the store", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/User" } }, - "Pet": { - "required": ["name", "photoUrls"], - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "int64", - "example": 10 - }, - "name": { "type": "string", "example": "doggie" }, - "category": { "$ref": "#/components/schemas/Category" }, - "photoUrls": { - "type": "array", - "xml": { "wrapped": true }, - "items": { - "type": "string", - "xml": { "name": "photoUrl" } - } - }, - "tags": { - "type": "array", - "xml": { "wrapped": true }, - "items": { "$ref": "#/components/schemas/Tag" } - }, - "status": { - "type": "string", - "description": "pet status in the store", - "enum": ["available", "pending", "sold"] - } - }, - "xml": { "name": "pet" } + "application/xml": { + "schema": { "$ref": "#/components/schemas/User" } }, - "ApiResponse": { - "type": "object", - "properties": { - "code": { "type": "integer", "format": "int32" }, - "type": { "type": "string" }, - "message": { "type": "string" } - }, - "xml": { "name": "##default" } + "application/x-www-form-urlencoded": { + "schema": { "$ref": "#/components/schemas/User" } } + } }, - "requestBodies": { - "Pet": { - "description": "Pet object that needs to be added to the store", - "content": { - "application/json": { - "schema": { "$ref": "#/components/schemas/Pet" } - }, - "application/xml": { - "schema": { "$ref": "#/components/schemas/Pet" } - } - } - }, - "UserArray": { - "description": "List of user object", - "content": { - "application/json": { - "schema": { - "type": "array", - "items": { "$ref": "#/components/schemas/User" } - } - } - } + "responses": { + "default": { "description": "successful operation" } + } + }, + "delete": { + "tags": ["user"], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "schema": { "type": "string" } + } + ], + "responses": { + "400": { "description": "Invalid username supplied" }, + "404": { "description": "User not found" } + } + } + } + }, + "components": { + "schemas": { + "Order": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "petId": { + "type": "integer", + "format": "int64", + "example": 198772 + }, + "quantity": { + "type": "integer", + "format": "int32", + "example": 7 + }, + "shipDate": { "type": "string", "format": "date-time" }, + "status": { + "type": "string", + "description": "Order Status", + "example": "approved", + "enum": ["placed", "approved", "delivered"] + }, + "complete": { "type": "boolean" } + }, + "xml": { "name": "order" } + }, + "Customer": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 100000 + }, + "username": { "type": "string", "example": "fehguy" }, + "address": { + "type": "array", + "xml": { "name": "addresses", "wrapped": true }, + "items": { "$ref": "#/components/schemas/Address" } + } + }, + "xml": { "name": "customer" } + }, + "Address": { + "type": "object", + "properties": { + "street": { "type": "string", "example": "437 Lytton" }, + "city": { "type": "string", "example": "Palo Alto" }, + "state": { "type": "string", "example": "CA" }, + "zip": { "type": "string", "example": "94301" } + }, + "xml": { "name": "address" } + }, + "Category": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 1 + }, + "name": { "type": "string", "example": "Dogs" } + }, + "xml": { "name": "category" } + }, + "User": { + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "username": { "type": "string", "example": "theUser" }, + "firstName": { "type": "string", "example": "John" }, + "lastName": { "type": "string", "example": "James" }, + "email": { "type": "string", "example": "john@email.com" }, + "password": { "type": "string", "example": "12345" }, + "phone": { "type": "string", "example": "12345" }, + "userStatus": { + "type": "integer", + "description": "User Status", + "format": "int32", + "example": 1 + } + }, + "xml": { "name": "user" } + }, + "Tag": { + "type": "object", + "properties": { + "id": { "type": "integer", "format": "int64" }, + "name": { "type": "string" } + }, + "xml": { "name": "tag" } + }, + "Pet": { + "required": ["name", "photoUrls"], + "type": "object", + "properties": { + "id": { + "type": "integer", + "format": "int64", + "example": 10 + }, + "name": { "type": "string", "example": "doggie" }, + "category": { "$ref": "#/components/schemas/Category" }, + "photoUrls": { + "type": "array", + "xml": { "wrapped": true }, + "items": { + "type": "string", + "xml": { "name": "photoUrl" } } + }, + "tags": { + "type": "array", + "xml": { "wrapped": true }, + "items": { "$ref": "#/components/schemas/Tag" } + }, + "status": { + "type": "string", + "description": "pet status in the store", + "enum": ["available", "pending", "sold"] + } }, - "securitySchemes": { - "petstore_auth": { - "type": "oauth2", - "flows": { - "implicit": { - "authorizationUrl": "https://petstore3.swagger.io/oauth/authorize", - "scopes": { - "write:pets": "modify pets in your account", - "read:pets": "read your pets" - } - } - } - }, - "api_key": { "type": "apiKey", "name": "api_key", "in": "header" } + "xml": { "name": "pet" } + }, + "ApiResponse": { + "type": "object", + "properties": { + "code": { "type": "integer", "format": "int32" }, + "type": { "type": "string" }, + "message": { "type": "string" } + }, + "xml": { "name": "##default" } + } + }, + "requestBodies": { + "Pet": { + "description": "Pet object that needs to be added to the store", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/Pet" } + }, + "application/xml": { + "schema": { "$ref": "#/components/schemas/Pet" } + } + } + }, + "UserArray": { + "description": "List of user object", + "content": { + "application/json": { + "schema": { + "type": "array", + "items": { "$ref": "#/components/schemas/User" } + } + } + } + } + }, + "securitySchemes": { + "petstore_auth": { + "type": "oauth2", + "flows": { + "implicit": { + "authorizationUrl": "https://petstore3.swagger.io/oauth/authorize", + "scopes": { + "write:pets": "modify pets in your account", + "read:pets": "read your pets" + } + } } + }, + "api_key": { "type": "apiKey", "name": "api_key", "in": "header" } } + } } diff --git a/packages/cli/src/commands/bundle/BundleCommand.ts b/packages/cli/src/commands/bundle/BundleCommand.ts index 60e747f0..ba8c69ca 100644 --- a/packages/cli/src/commands/bundle/BundleCommand.ts +++ b/packages/cli/src/commands/bundle/BundleCommand.ts @@ -1,7 +1,8 @@ -import fs from 'node:fs' import { Command } from 'commander' import kleur from 'kleur' +import fs from 'node:fs' import type { OpenAPI } from 'openapi-types' + import { loadOpenApiFile, useGivenFileOrConfiguration } from '../../utils' export function BundleCommand() { diff --git a/packages/cli/src/commands/format/FormatCommand.ts b/packages/cli/src/commands/format/FormatCommand.ts index 67b4c52c..2244a910 100644 --- a/packages/cli/src/commands/format/FormatCommand.ts +++ b/packages/cli/src/commands/format/FormatCommand.ts @@ -1,7 +1,8 @@ -import fs from 'node:fs' import { Command } from 'commander' import kleur from 'kleur' +import fs from 'node:fs' import { format } from 'prettier' + import { readFile, useGivenFileOrConfiguration } from '../../utils' export function FormatCommand() { diff --git a/packages/cli/src/commands/format/format.test.ts b/packages/cli/src/commands/format/format.test.ts index 4c17c844..1507b4e4 100644 --- a/packages/cli/src/commands/format/format.test.ts +++ b/packages/cli/src/commands/format/format.test.ts @@ -1,6 +1,7 @@ import fs from 'node:fs' import path from 'node:path' import { describe, expect, it } from 'vitest' + import { ScalarCli } from '../../../tests/invoke-cli' describe('format', () => { diff --git a/packages/cli/src/commands/init/InitCommand.ts b/packages/cli/src/commands/init/InitCommand.ts index 590a2028..0abad04a 100644 --- a/packages/cli/src/commands/init/InitCommand.ts +++ b/packages/cli/src/commands/init/InitCommand.ts @@ -1,14 +1,13 @@ -import fs from 'node:fs' import { Command } from 'commander' import kleur from 'kleur' +import fs from 'node:fs' +import path from 'node:path' import prompts from 'prompts' import toml from 'toml-js' -import path from 'node:path' export function InitCommand() { const cmd = new Command('init') - cmd.description('Create a new `scalar.toml` file') cmd.option('-f, --file [file]', 'your OpenAPI file') cmd.action(async ({ file }) => { diff --git a/packages/cli/src/commands/init/init.test.ts b/packages/cli/src/commands/init/init.test.ts index e5deab3b..706ba96f 100644 --- a/packages/cli/src/commands/init/init.test.ts +++ b/packages/cli/src/commands/init/init.test.ts @@ -1,7 +1,8 @@ +import fs from 'node:fs' +import path from 'node:path' import { describe, expect, it } from 'vitest' + import { ScalarCli } from '../../../tests/invoke-cli' -import path from 'node:path' -import fs from 'node:fs' describe('init', () => { it('creates a config file', () => { @@ -18,7 +19,11 @@ describe('init', () => { // Create config file const [exitCode, logs] = ScalarCli() .setCwd(path.resolve('./')) - .invoke(['init', '--file', './packages/cli/src/commands/validate/valid.json']) + .invoke([ + 'init', + '--file', + './packages/cli/src/commands/validate/valid.json', + ]) // Output logs.should.contain('./packages/cli/src/commands/validate/valid.json') diff --git a/packages/cli/src/commands/mock/MockCommand.ts b/packages/cli/src/commands/mock/MockCommand.ts index de0c9100..88a1fad3 100644 --- a/packages/cli/src/commands/mock/MockCommand.ts +++ b/packages/cli/src/commands/mock/MockCommand.ts @@ -1,10 +1,11 @@ -import fs from 'node:fs' import { serve } from '@hono/node-server' import { getExampleFromSchema } from '@scalar/api-reference' import { Command } from 'commander' import { Hono } from 'hono' import kleur from 'kleur' +import fs from 'node:fs' import type { OpenAPI } from 'openapi-types' + import { getMethodColor, getOperationByMethodAndPath, @@ -62,9 +63,9 @@ export function MockCommand() { console.log( `${kleur .bold() - [getMethodColor(method)]( - method.toUpperCase().padEnd(6), - )} ${kleur.grey(`${path}`)}`, + [ + getMethodColor(method) + ](method.toUpperCase().padEnd(6))} ${kleur.grey(`${path}`)}`, ) } } @@ -81,9 +82,9 @@ export function MockCommand() { console.log( `${kleur .bold() - [getMethodColor(method)]( - method.toUpperCase().padEnd(6), - )} ${kleur.grey(`${path}`)}`, + [ + getMethodColor(method) + ](method.toUpperCase().padEnd(6))} ${kleur.grey(`${path}`)}`, `${kleur.grey('→')} ${ operation?.operationId ? kleur.white(operation.operationId) diff --git a/packages/cli/src/commands/mock/dummy.json b/packages/cli/src/commands/mock/dummy.json index 4c9f4550..6d9097bb 100644 --- a/packages/cli/src/commands/mock/dummy.json +++ b/packages/cli/src/commands/mock/dummy.json @@ -1,20 +1,20 @@ { - "openapi": "3.1.0", - "info": { - "title": "Hello World", - "version": "1.0.0" - }, - "paths": { - "/hello": { - "get": { - "summary": "Hello World", - "description": "Hello World", - "responses": { - "200": { - "description": "Hello World" - } - } - } + "openapi": "3.1.0", + "info": { + "title": "Hello World", + "version": "1.0.0" + }, + "paths": { + "/hello": { + "get": { + "summary": "Hello World", + "description": "Hello World", + "responses": { + "200": { + "description": "Hello World" + } } + } } + } } diff --git a/packages/cli/src/commands/mock/mock.test.ts b/packages/cli/src/commands/mock/mock.test.ts index 0d905391..df30f235 100644 --- a/packages/cli/src/commands/mock/mock.test.ts +++ b/packages/cli/src/commands/mock/mock.test.ts @@ -1,5 +1,6 @@ import path from 'node:path' import { describe, expect, it } from 'vitest' + import { ScalarCli } from '../../../tests/invoke-cli' // TODO: Long running process diff --git a/packages/cli/src/commands/reference/ReferenceCommand.ts b/packages/cli/src/commands/reference/ReferenceCommand.ts index 955f9cf8..b3e49f79 100644 --- a/packages/cli/src/commands/reference/ReferenceCommand.ts +++ b/packages/cli/src/commands/reference/ReferenceCommand.ts @@ -1,10 +1,11 @@ -import fs from 'node:fs' import { serve } from '@hono/node-server' import { Command } from 'commander' import { Hono } from 'hono' import { stream } from 'hono/streaming' import kleur from 'kleur' +import fs from 'node:fs' import type { OpenAPI } from 'openapi-types' + import { getHtmlDocument, loadOpenApiFile, diff --git a/packages/cli/src/commands/share/ShareCommand.ts b/packages/cli/src/commands/share/ShareCommand.ts index 3ec03a23..52411717 100644 --- a/packages/cli/src/commands/share/ShareCommand.ts +++ b/packages/cli/src/commands/share/ShareCommand.ts @@ -1,5 +1,6 @@ import { Command } from 'commander' import kleur from 'kleur' + import { readFile, useGivenFileOrConfiguration } from '../../utils' export function ShareCommand() { diff --git a/packages/cli/src/commands/validate/ValidateCommand.ts b/packages/cli/src/commands/validate/ValidateCommand.ts index 8c3a9eff..086eac75 100644 --- a/packages/cli/src/commands/validate/ValidateCommand.ts +++ b/packages/cli/src/commands/validate/ValidateCommand.ts @@ -2,6 +2,7 @@ import { Validator } from '@seriousme/openapi-schema-validator' import { Command } from 'commander' import kleur from 'kleur' import prettyjson from 'prettyjson' + import { useGivenFileOrConfiguration } from '../../utils' export function ValidateCommand() { diff --git a/packages/cli/src/commands/validate/invalid.json b/packages/cli/src/commands/validate/invalid.json index 850d667c..099aed99 100644 --- a/packages/cli/src/commands/validate/invalid.json +++ b/packages/cli/src/commands/validate/invalid.json @@ -1,8 +1,8 @@ { - "foobar": "3.1.0", - "info": { - "title": "Hello World", - "version": "1.0.0" - }, - "paths": {} + "foobar": "3.1.0", + "info": { + "title": "Hello World", + "version": "1.0.0" + }, + "paths": {} } diff --git a/packages/cli/src/commands/validate/valid.json b/packages/cli/src/commands/validate/valid.json index f960298d..4368149a 100644 --- a/packages/cli/src/commands/validate/valid.json +++ b/packages/cli/src/commands/validate/valid.json @@ -1,8 +1,8 @@ { - "openapi": "3.1.0", - "info": { - "title": "Hello World", - "version": "1.0.0" - }, - "paths": {} + "openapi": "3.1.0", + "info": { + "title": "Hello World", + "version": "1.0.0" + }, + "paths": {} } diff --git a/packages/cli/src/commands/validate/validate.test.ts b/packages/cli/src/commands/validate/validate.test.ts index 29e826fb..c511e71b 100644 --- a/packages/cli/src/commands/validate/validate.test.ts +++ b/packages/cli/src/commands/validate/validate.test.ts @@ -1,5 +1,6 @@ import path from 'node:path' import { describe, expect, it } from 'vitest' + import { ScalarCli } from '../../../tests/invoke-cli' describe('validate', () => { diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index c50025b3..0f2eab9e 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -1,6 +1,6 @@ #!/usr/bin/env node - import { Command } from 'commander' + import { version } from '../package.json' import { BundleCommand, diff --git a/packages/cli/src/options/version/version.test.ts b/packages/cli/src/options/version/version.test.ts index b1180968..553ed2d3 100644 --- a/packages/cli/src/options/version/version.test.ts +++ b/packages/cli/src/options/version/version.test.ts @@ -1,4 +1,5 @@ import { describe, expect, it } from 'vitest' + import { version } from '../../../package.json' import { ScalarCli } from '../../../tests/invoke-cli' diff --git a/packages/cli/src/utils/getOperationByMethodAndPath.test.ts b/packages/cli/src/utils/getOperationByMethodAndPath.test.ts index fdac618d..57f969f0 100644 --- a/packages/cli/src/utils/getOperationByMethodAndPath.test.ts +++ b/packages/cli/src/utils/getOperationByMethodAndPath.test.ts @@ -1,5 +1,6 @@ import type { OpenAPI } from 'openapi-types' import { describe, expect, it } from 'vitest' + import { getOperationByMethodAndPath } from './getOperationByMethodAndPath' describe('getOperationByMethodAndPath', () => { diff --git a/packages/cli/src/utils/useGivenFileOrConfiguration.ts b/packages/cli/src/utils/useGivenFileOrConfiguration.ts index c500d9fb..43d44102 100644 --- a/packages/cli/src/utils/useGivenFileOrConfiguration.ts +++ b/packages/cli/src/utils/useGivenFileOrConfiguration.ts @@ -1,5 +1,6 @@ import kleur from 'kleur' import toml from 'toml-js' + import { readFile } from './' export function useGivenFileOrConfiguration(file?: string) { diff --git a/packages/cli/tests/invoke-cli.ts b/packages/cli/tests/invoke-cli.ts index ca15cabf..7532a2bf 100644 --- a/packages/cli/tests/invoke-cli.ts +++ b/packages/cli/tests/invoke-cli.ts @@ -1,8 +1,9 @@ -import { join } from 'node:path' -import process from 'node:process' import type { ExecaSyncError } from 'execa' import { execaSync } from 'execa' +import { join } from 'node:path' +import process from 'node:process' import strip from 'strip-ansi' + import { createLogsMatcher } from './matcher' const builtCliLocation = join(__dirname, '..', 'dist', 'index.js') diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index a1216815..0821af74 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -1,19 +1,15 @@ { - "compilerOptions": { - "tsBuildInfoFile": null, - "composite": true, - "skipLibCheck": true, - "resolveJsonModule": true, - "moduleResolution": "Node", - "esModuleInterop": true, - "module": "esnext", - "allowSyntheticDefaultImports": true, - "outDir": "dist", - "sourceMap": false - }, - "include": [ - "src/**/*", - "./package.json", - "tests/**/*", - ] - } \ No newline at end of file + "compilerOptions": { + "tsBuildInfoFile": null, + "composite": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "moduleResolution": "Node", + "esModuleInterop": true, + "module": "esnext", + "allowSyntheticDefaultImports": true, + "outDir": "dist", + "sourceMap": false + }, + "include": ["src/**/*", "./package.json", "tests/**/*"] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 731f13f8..d2308068 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,11 +7,19 @@ settings: importers: .: - dependencies: + devDependencies: '@changesets/cli': specifier: ^2.27.1 version: 2.27.1 - devDependencies: + '@trivago/prettier-plugin-sort-imports': + specifier: ^4.2.0 + version: 4.3.0(prettier@3.2.5) + prettier: + specifier: ^3.0.3 + version: 3.2.5 + prettier-plugin-tailwindcss: + specifier: ^0.5.6 + version: 0.5.11(@trivago/prettier-plugin-sort-imports@4.3.0)(prettier@3.2.5) turbo: specifier: ^1.12.3 version: 1.12.3 @@ -58,9 +66,6 @@ importers: specifier: ^1.2.2 version: 1.2.2(@types/node@20.11.17) devDependencies: - '@biomejs/biome': - specifier: 1.5.3 - version: 1.5.3 '@rollup/plugin-json': specifier: ^6.1.0 version: 6.1.0(rollup@4.9.6) @@ -129,17 +134,61 @@ packages: dependencies: '@babel/highlight': 7.23.4 chalk: 2.4.2 - dev: false + dev: true + + /@babel/generator@7.17.7: + resolution: {integrity: sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + jsesc: 2.5.2 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} - dev: false /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - dev: false /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} @@ -148,7 +197,7 @@ packages: '@babel/helper-validator-identifier': 7.22.20 chalk: 2.4.2 js-tokens: 4.0.0 - dev: false + dev: true /@babel/parser@7.23.9: resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} @@ -156,14 +205,13 @@ packages: hasBin: true dependencies: '@babel/types': 7.23.9 - dev: false /@babel/runtime@7.23.8: resolution: {integrity: sha512-Y7KbAP984rn1VGMbGqKmBLio9V7y5Je9GvU4rQPCPinCyNfUcToxIXl06d59URp/F3LwinvODxab5N/G6qggkw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 - dev: false + dev: true /@babel/runtime@7.23.9: resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} @@ -172,102 +220,48 @@ packages: regenerator-runtime: 0.14.1 dev: false - /@babel/types@7.23.9: - resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - dev: false - - /@biomejs/biome@1.5.3: - resolution: {integrity: sha512-yvZCa/g3akwTaAQ7PCwPWDCkZs3Qa5ONg/fgOUT9e6wAWsPftCjLQFPXBeGxPK30yZSSpgEmRCfpGTmVbUjGgg==} - engines: {node: '>=14.*'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@biomejs/cli-darwin-arm64': 1.5.3 - '@biomejs/cli-darwin-x64': 1.5.3 - '@biomejs/cli-linux-arm64': 1.5.3 - '@biomejs/cli-linux-arm64-musl': 1.5.3 - '@biomejs/cli-linux-x64': 1.5.3 - '@biomejs/cli-linux-x64-musl': 1.5.3 - '@biomejs/cli-win32-arm64': 1.5.3 - '@biomejs/cli-win32-x64': 1.5.3 - dev: true - - /@biomejs/cli-darwin-arm64@1.5.3: - resolution: {integrity: sha512-ImU7mh1HghEDyqNmxEZBoMPr8SxekkZuYcs+gynKlNW+TALQs7swkERiBLkG9NR0K1B3/2uVzlvYowXrmlW8hw==} - engines: {node: '>=14.*'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@biomejs/cli-darwin-x64@1.5.3: - resolution: {integrity: sha512-vCdASqYnlpq/swErH7FD6nrFz0czFtK4k/iLgj0/+VmZVjineFPgevOb+Sr9vz0tk0GfdQO60bSpI74zU8M9Dw==} - engines: {node: '>=14.*'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /@biomejs/cli-linux-arm64-musl@1.5.3: - resolution: {integrity: sha512-DYuMizUYUBYfS0IHGjDrOP1RGipqWfMGEvNEJ398zdtmCKLXaUvTimiox5dvx4X15mBK5M2m8wgWUgOP1giUpQ==} - engines: {node: '>=14.*'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@biomejs/cli-linux-arm64@1.5.3: - resolution: {integrity: sha512-cupBQv0sNF1OKqBfx7EDWMSsKwRrBUZfjXawT4s6hKV6ALq7p0QzWlxr/sDmbKMLOaLQtw2Qgu/77N9rm+f9Rg==} - engines: {node: '>=14.*'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /@biomejs/cli-linux-x64-musl@1.5.3: - resolution: {integrity: sha512-UUHiAnlDqr2Y/LpvshBFhUYMWkl2/Jn+bi3U6jKuav0qWbbBKU/ByHgR4+NBxpKBYoCtWxhnmatfH1bpPIuZMw==} - engines: {node: '>=14.*'} - cpu: [x64] - os: [linux] - requiresBuild: true + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 dev: true - optional: true - /@biomejs/cli-linux-x64@1.5.3: - resolution: {integrity: sha512-YQrSArQvcv4FYsk7Q91Yv4uuu5F8hJyORVcv3zsjCLGkjIjx2RhjYLpTL733SNL7v33GmOlZY0eFR1ko38tuUw==} - engines: {node: '>=14.*'} - cpu: [x64] - os: [linux] - requiresBuild: true + /@babel/traverse@7.23.2: + resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true - optional: true - /@biomejs/cli-win32-arm64@1.5.3: - resolution: {integrity: sha512-HxatYH7vf/kX9nrD+pDYuV2GI9GV8EFo6cfKkahAecTuZLPxryHx1WEfJthp5eNsE0+09STGkKIKjirP0ufaZA==} - engines: {node: '>=14.*'} - cpu: [arm64] - os: [win32] - requiresBuild: true + /@babel/types@7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 dev: true - optional: true - /@biomejs/cli-win32-x64@1.5.3: - resolution: {integrity: sha512-fMvbSouZEASU7mZH8SIJSANDm5OqsjgtVXlbUqxwed6BP7uuHRSs396Aqwh2+VoW8fwTpp6ybIUoC9FrzB0kyA==} - engines: {node: '>=14.*'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 /@changesets/apply-release-plan@7.0.0: resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} @@ -285,7 +279,7 @@ packages: prettier: 2.8.8 resolve-from: 5.0.0 semver: 7.5.4 - dev: false + dev: true /@changesets/assemble-release-plan@6.0.0: resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} @@ -296,13 +290,13 @@ packages: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 semver: 7.5.4 - dev: false + dev: true /@changesets/changelog-git@0.2.0: resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} dependencies: '@changesets/types': 6.0.0 - dev: false + dev: true /@changesets/cli@2.27.1: resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} @@ -340,7 +334,7 @@ packages: spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.2.3 - dev: false + dev: true /@changesets/config@3.0.0: resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} @@ -352,13 +346,13 @@ packages: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - dev: false + dev: true /@changesets/errors@0.2.0: resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} dependencies: extendable-error: 0.1.7 - dev: false + dev: true /@changesets/get-dependents-graph@2.0.0: resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} @@ -368,7 +362,7 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 semver: 7.5.4 - dev: false + dev: true /@changesets/get-release-plan@4.0.0: resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} @@ -380,11 +374,11 @@ packages: '@changesets/read': 0.6.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - dev: false + dev: true /@changesets/get-version-range-type@0.4.0: resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} - dev: false + dev: true /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} @@ -396,20 +390,20 @@ packages: is-subdir: 1.2.0 micromatch: 4.0.5 spawndamnit: 2.0.0 - dev: false + dev: true /@changesets/logger@0.1.0: resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} dependencies: chalk: 2.4.2 - dev: false + dev: true /@changesets/parse@0.4.0: resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} dependencies: '@changesets/types': 6.0.0 js-yaml: 3.14.1 - dev: false + dev: true /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} @@ -419,7 +413,7 @@ packages: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - dev: false + dev: true /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} @@ -432,15 +426,15 @@ packages: chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - dev: false + dev: true /@changesets/types@4.1.0: resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} - dev: false + dev: true /@changesets/types@6.0.0: resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} - dev: false + dev: true /@changesets/write@0.3.0: resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} @@ -450,7 +444,7 @@ packages: fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.8 - dev: false + dev: true /@codemirror/autocomplete@6.12.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.0)(@codemirror/view@6.23.1)(@lezer/common@1.2.1): resolution: {integrity: sha512-r4IjdYFthwbCQyvqnSlx0WBHRHi8nBvU+WjJxFUij81qsBfhNudf/XKKmmC2j3m0LaOYUQTf3qiEK1J8lO1sdg==} @@ -818,9 +812,35 @@ packages: '@sinclair/typebox': 0.27.8 dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@jsdevtools/ono@7.1.3: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} dev: false @@ -896,7 +916,7 @@ packages: '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 - dev: false + dev: true /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} @@ -907,7 +927,7 @@ packages: fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - dev: false + dev: true /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -915,10 +935,12 @@ packages: dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: true /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: true /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} @@ -926,6 +948,7 @@ packages: dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.0 + dev: true /@rollup/plugin-json@6.1.0(rollup@4.9.6): resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} @@ -1388,6 +1411,26 @@ packages: vue: 3.4.16(typescript@5.3.3) dev: false + /@trivago/prettier-plugin-sort-imports@4.3.0(prettier@3.2.5): + resolution: {integrity: sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==} + peerDependencies: + '@vue/compiler-sfc': 3.x + prettier: 2.x - 3.x + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@babel/generator': 7.17.7 + '@babel/parser': 7.23.9 + '@babel/traverse': 7.23.2 + '@babel/types': 7.17.0 + javascript-natural-sort: 0.7.1 + lodash: 4.17.21 + prettier: 3.2.5 + transitivePeerDependencies: + - supports-color + dev: true + /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: @@ -1438,7 +1481,7 @@ packages: /@types/minimist@1.2.5: resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - dev: false + dev: true /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -1446,7 +1489,7 @@ packages: /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - dev: false + dev: true /@types/node@20.11.17: resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} @@ -1455,11 +1498,11 @@ packages: /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: false + dev: true /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: false + dev: true /@types/unist@2.0.10: resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} @@ -1711,12 +1754,12 @@ packages: /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - dev: false + dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - dev: false + dev: true /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} @@ -1728,14 +1771,14 @@ packages: engines: {node: '>=4'} dependencies: color-convert: 1.9.3 - dev: false + dev: true /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 - dev: false + dev: true /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} @@ -1746,7 +1789,6 @@ packages: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 - dev: false /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1757,11 +1799,12 @@ packages: dependencies: call-bind: 1.0.5 is-array-buffer: 3.0.2 - dev: false + dev: true /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: true /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} @@ -1771,7 +1814,7 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 es-shim-unscopables: 1.0.2 - dev: false + dev: true /arraybuffer.prototype.slice@1.0.2: resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} @@ -1784,12 +1827,12 @@ packages: get-intrinsic: 1.2.2 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 - dev: false + dev: true /arrify@1.0.1: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} @@ -1802,7 +1845,7 @@ packages: /available-typed-arrays@1.0.5: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} - dev: false + dev: true /axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} @@ -1827,7 +1870,7 @@ packages: engines: {node: '>=4'} dependencies: is-windows: 1.0.2 - dev: false + dev: true /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -1841,12 +1884,13 @@ packages: engines: {node: '>=8'} dependencies: fill-range: 7.0.1 + dev: true /breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} dependencies: wcwidth: 1.0.1 - dev: false + dev: true /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} @@ -1858,7 +1902,7 @@ packages: function-bind: 1.1.2 get-intrinsic: 1.2.2 set-function-length: 1.2.0 - dev: false + dev: true /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -1871,12 +1915,12 @@ packages: camelcase: 5.3.1 map-obj: 4.3.0 quick-lru: 4.0.1 - dev: false + dev: true /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - dev: false + dev: true /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -1902,7 +1946,7 @@ packages: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: false + dev: true /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1910,7 +1954,7 @@ packages: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: false + dev: true /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} @@ -1926,7 +1970,7 @@ packages: /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: false + dev: true /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} @@ -1937,7 +1981,7 @@ packages: /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - dev: false + dev: true /class-variance-authority@0.7.0: resolution: {integrity: sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==} @@ -1956,7 +2000,7 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: false + dev: true /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} @@ -1965,12 +2009,12 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: false + dev: true /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - dev: false + dev: true /clsx@2.0.0: resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} @@ -1995,22 +2039,22 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: false + 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: false + dev: true /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: false + dev: true /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: false + dev: true /colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} @@ -2052,7 +2096,7 @@ packages: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.3.1 - dev: false + dev: true /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -2075,15 +2119,15 @@ packages: /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} - dev: false + dev: true /csv-parse@4.16.3: resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} - dev: false + dev: true /csv-stringify@5.6.5: resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} - dev: false + dev: true /csv@5.5.3: resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} @@ -2093,7 +2137,7 @@ packages: csv-parse: 4.16.3 csv-stringify: 5.6.5 stream-transform: 2.1.3 - dev: false + dev: true /cva@1.0.0-beta.1(typescript@5.3.3): resolution: {integrity: sha512-gznFqTgERU9q4wg7jfgqtt34+RUt9S5t0xDAAEuDwQEAXEgjdDkKXpLLNjwSxsB4Ln/sqWJEH7yhE8Ny0mxd0w==} @@ -2124,12 +2168,12 @@ packages: dependencies: decamelize: 1.2.0 map-obj: 1.0.1 - dev: false + dev: true /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} @@ -2148,7 +2192,7 @@ packages: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 - dev: false + dev: true /define-data-property@1.1.1: resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} @@ -2157,7 +2201,7 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: false + dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} @@ -2166,7 +2210,7 @@ packages: define-data-property: 1.1.1 has-property-descriptors: 1.0.1 object-keys: 1.1.1 - dev: false + dev: true /del@5.1.0: resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} @@ -2195,7 +2239,7 @@ packages: /detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - dev: false + dev: true /devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -2213,10 +2257,11 @@ packages: engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: false + dev: true /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} @@ -2224,7 +2269,7 @@ packages: dependencies: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - dev: false + dev: true /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} @@ -2235,7 +2280,7 @@ packages: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 - dev: false + dev: true /es-abstract@1.22.3: resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} @@ -2280,7 +2325,7 @@ packages: typed-array-length: 1.0.4 unbox-primitive: 1.0.2 which-typed-array: 1.1.13 - dev: false + dev: true /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} @@ -2289,13 +2334,13 @@ packages: get-intrinsic: 1.2.2 has-tostringtag: 1.0.0 hasown: 2.0.0 - dev: false + dev: true /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.0 - dev: false + dev: true /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} @@ -2304,7 +2349,7 @@ packages: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: false + dev: true /esbuild@0.19.12: resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} @@ -2339,12 +2384,12 @@ packages: /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} - dev: false + dev: true /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - dev: false + dev: true /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} @@ -2355,7 +2400,6 @@ packages: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - dev: false /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} @@ -2387,7 +2431,7 @@ packages: /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - dev: false + dev: true /external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -2396,7 +2440,7 @@ packages: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: false + dev: true /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -2411,17 +2455,20 @@ packages: glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.5 + dev: true /fastq@1.17.0: resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} dependencies: reusify: 1.0.4 + dev: true /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -2429,7 +2476,7 @@ packages: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: false + dev: true /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} @@ -2437,14 +2484,14 @@ packages: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: false + dev: true /find-yarn-workspace-root2@1.2.16: resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} dependencies: micromatch: 4.0.5 pkg-dir: 4.2.0 - dev: false + dev: true /follow-redirects@1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} @@ -2460,7 +2507,7 @@ packages: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - dev: false + dev: true /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} @@ -2486,7 +2533,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false + dev: true /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} @@ -2495,7 +2542,7 @@ packages: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: false + dev: true /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -2510,6 +2557,7 @@ packages: /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} @@ -2519,11 +2567,11 @@ packages: define-properties: 1.2.1 es-abstract: 1.22.3 functions-have-names: 1.2.3 - dev: false + dev: true /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: false + dev: true /fuse.js@6.6.2: resolution: {integrity: sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==} @@ -2533,7 +2581,7 @@ packages: /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - dev: false + dev: true /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -2546,7 +2594,7 @@ packages: has-proto: 1.0.1 has-symbols: 1.0.3 hasown: 2.0.0 - dev: false + dev: true /get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} @@ -2563,7 +2611,7 @@ packages: dependencies: call-bind: 1.0.5 get-intrinsic: 1.2.2 - dev: false + dev: true /github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -2578,6 +2626,7 @@ packages: engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} @@ -2590,12 +2639,17 @@ packages: path-is-absolute: 1.0.1 dev: true + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 - dev: false + dev: true /globby@10.0.2: resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} @@ -2621,68 +2675,70 @@ packages: ignore: 5.3.0 merge2: 1.4.1 slash: 3.0.0 - dev: false + dev: true /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.2 - dev: false + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - dev: false + dev: true /hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} - dev: false + dev: true /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: false + dev: true /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} - dev: false + dev: true /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - dev: false + dev: true /has-property-descriptors@1.0.1: resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} dependencies: get-intrinsic: 1.2.2 - dev: false + dev: true /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} - dev: false + dev: true /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - dev: false + dev: true /has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: false + dev: true /hasown@2.0.0: resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true /hast-util-embedded@3.0.0: resolution: {integrity: sha512-naH8sld4Pe2ep03qqULEtvYr7EjrLK2QHY8KJR6RJkTUjPGObe1vnx585uzem2hGra+s1q08DZZpfgDVYRbaXA==} @@ -2850,7 +2906,7 @@ packages: /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: false + dev: true /html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} @@ -2871,7 +2927,7 @@ packages: /human-id@1.0.2: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} - dev: false + dev: true /human-signals@5.0.0: resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} @@ -2883,15 +2939,17 @@ packages: engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - dev: false + dev: true /ignore@5.3.0: resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} engines: {node: '>= 4'} + dev: true /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + dev: true /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} @@ -2911,7 +2969,7 @@ packages: get-intrinsic: 1.2.2 hasown: 2.0.0 side-channel: 1.0.4 - dev: false + dev: true /is-absolute-url@4.0.1: resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} @@ -2924,17 +2982,17 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: false + dev: true /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: false + dev: true /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 - dev: false + dev: true /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} @@ -2942,7 +3000,7 @@ packages: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: false + dev: true /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} @@ -2952,50 +3010,54 @@ packages: /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - dev: false + dev: true /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.0 + dev: true /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: false + dev: true /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + dev: true /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - dev: false + dev: true /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} - dev: false + dev: true /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: false + dev: true /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: true /is-obj@1.0.1: resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} @@ -3015,7 +3077,7 @@ packages: /is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} - dev: false + dev: true /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} @@ -3028,7 +3090,7 @@ packages: dependencies: call-bind: 1.0.5 has-tostringtag: 1.0.0 - dev: false + dev: true /is-regexp@1.0.0: resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} @@ -3039,7 +3101,7 @@ packages: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.5 - dev: false + dev: true /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} @@ -3051,46 +3113,51 @@ packages: engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.0 - dev: false + dev: true /is-subdir@1.2.0: resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} engines: {node: '>=4'} dependencies: better-path-resolve: 1.0.0 - dev: false + dev: true /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - dev: false + dev: true /is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.13 - dev: false + dev: true /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.5 - dev: false + dev: true /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - dev: false + dev: true /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: false + dev: true /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /javascript-natural-sort@0.7.1: + resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==} + dev: true /javascript-time-ago@2.5.9: resolution: {integrity: sha512-pQ8mNco/9g9TqWXWWjP0EWl6i/lAQScOyEeXy5AB+f7MfLSdgyV9BJhiOD1zrIac/lrxPYOWNbyl/IW8CW5n0A==} @@ -3100,7 +3167,7 @@ packages: /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: false + dev: true /js-yaml@3.14.1: resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} @@ -3108,7 +3175,6 @@ packages: dependencies: argparse: 1.0.10 esprima: 4.0.1 - dev: false /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} @@ -3117,9 +3183,15 @@ packages: argparse: 2.0.1 dev: false + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: false + dev: true /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -3133,12 +3205,12 @@ packages: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 - dev: false + dev: true /kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - dev: false + dev: true /kleur@3.0.3: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} @@ -3148,11 +3220,10 @@ packages: /kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} - dev: false /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: false + dev: true /load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} @@ -3162,7 +3233,7 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: false + dev: true /local-pkg@0.5.0: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} @@ -3177,22 +3248,21 @@ packages: engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - dev: false + dev: true /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - dev: false + dev: true /lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} - dev: false + dev: true /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: false /longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3217,14 +3287,14 @@ packages: dependencies: pseudomap: 1.0.2 yallist: 2.1.2 - dev: false + dev: true /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - dev: false + dev: true /magic-string@0.30.7: resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==} @@ -3235,12 +3305,12 @@ packages: /map-obj@1.0.1: resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} engines: {node: '>=0.10.0'} - dev: false + dev: true /map-obj@4.3.0: resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} engines: {node: '>=8'} - dev: false + dev: true /markdown-table@3.0.3: resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} @@ -3404,7 +3474,7 @@ packages: trim-newlines: 3.0.1 type-fest: 0.13.1 yargs-parser: 18.1.3 - dev: false + dev: true /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -3413,6 +3483,7 @@ packages: /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + dev: true /micromark-core-commonmark@2.0.0: resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} @@ -3667,6 +3738,7 @@ packages: dependencies: braces: 3.0.2 picomatch: 2.3.1 + dev: true /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} @@ -3688,7 +3760,7 @@ packages: /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - dev: false + dev: true /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3703,7 +3775,7 @@ packages: arrify: 1.0.1 is-plain-obj: 1.1.0 kind-of: 6.0.3 - dev: false + dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -3712,7 +3784,7 @@ packages: /mixme@0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} engines: {node: '>= 8.0.0'} - dev: false + dev: true /mlly@1.5.0: resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} @@ -3749,7 +3821,7 @@ packages: resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: false + dev: true /npm-run-path@5.2.0: resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} @@ -3760,12 +3832,12 @@ packages: /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - dev: false + dev: true /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} - dev: false + dev: true /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} @@ -3775,7 +3847,7 @@ packages: define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: false + dev: true /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -3797,32 +3869,32 @@ packages: /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - dev: false + dev: true /outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} - dev: false + dev: true /p-filter@2.1.0: resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} engines: {node: '>=8'} dependencies: p-map: 2.1.0 - dev: false + dev: true /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 - dev: false + dev: true /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - dev: false + dev: true /p-limit@5.0.0: resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} @@ -3836,19 +3908,19 @@ packages: engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - dev: false + dev: true /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - dev: false + dev: true /p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} - dev: false + dev: true /p-map@3.0.0: resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} @@ -3860,7 +3932,7 @@ packages: /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} - dev: false + dev: true /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -3870,7 +3942,7 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: false + dev: true /parse-ms@3.0.0: resolution: {integrity: sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==} @@ -3886,7 +3958,7 @@ packages: /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - dev: false + dev: true /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} @@ -3905,10 +3977,12 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: true /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} @@ -3923,18 +3997,19 @@ packages: /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: true /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - dev: false + dev: true /pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} dependencies: find-up: 4.1.0 - dev: false + dev: true /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} @@ -3987,19 +4062,71 @@ packages: find-yarn-workspace-root2: 1.2.16 path-exists: 4.0.0 which-pm: 2.0.0 - dev: false + dev: true + + /prettier-plugin-tailwindcss@0.5.11(@trivago/prettier-plugin-sort-imports@4.3.0)(prettier@3.2.5): + resolution: {integrity: sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==} + engines: {node: '>=14.21.3'} + peerDependencies: + '@ianvs/prettier-plugin-sort-imports': '*' + '@prettier/plugin-pug': '*' + '@shopify/prettier-plugin-liquid': '*' + '@trivago/prettier-plugin-sort-imports': '*' + prettier: ^3.0 + prettier-plugin-astro: '*' + prettier-plugin-css-order: '*' + prettier-plugin-import-sort: '*' + prettier-plugin-jsdoc: '*' + prettier-plugin-marko: '*' + prettier-plugin-organize-attributes: '*' + prettier-plugin-organize-imports: '*' + prettier-plugin-style-order: '*' + prettier-plugin-svelte: '*' + prettier-plugin-twig-melody: '*' + peerDependenciesMeta: + '@ianvs/prettier-plugin-sort-imports': + optional: true + '@prettier/plugin-pug': + optional: true + '@shopify/prettier-plugin-liquid': + optional: true + '@trivago/prettier-plugin-sort-imports': + optional: true + prettier-plugin-astro: + optional: true + prettier-plugin-css-order: + optional: true + prettier-plugin-import-sort: + optional: true + prettier-plugin-jsdoc: + optional: true + prettier-plugin-marko: + optional: true + prettier-plugin-organize-attributes: + optional: true + prettier-plugin-organize-imports: + optional: true + prettier-plugin-style-order: + optional: true + prettier-plugin-svelte: + optional: true + prettier-plugin-twig-melody: + optional: true + dependencies: + '@trivago/prettier-plugin-sort-imports': 4.3.0(prettier@3.2.5) + prettier: 3.2.5 + dev: true /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true - dev: false + dev: true /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true - dev: false /pretty-bytes@6.1.1: resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} @@ -4048,7 +4175,7 @@ packages: /pseudomap@1.0.2: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - dev: false + dev: true /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -4057,11 +4184,12 @@ packages: /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true /quick-lru@4.0.1: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} - dev: false + dev: true /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} @@ -4074,7 +4202,7 @@ packages: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: false + dev: true /read-pkg@5.2.0: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} @@ -4084,7 +4212,7 @@ packages: normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: false + dev: true /read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} @@ -4094,7 +4222,7 @@ packages: js-yaml: 3.14.1 pify: 4.0.1 strip-bom: 3.0.0 - dev: false + dev: true /redent@3.0.0: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} @@ -4102,11 +4230,10 @@ packages: dependencies: indent-string: 4.0.0 strip-indent: 3.0.0 - dev: false + dev: true /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: false /regexp.prototype.flags@1.5.1: resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} @@ -4115,7 +4242,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 set-function-name: 2.0.1 - dev: false + dev: true /rehype-external-links@3.0.0: resolution: {integrity: sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==} @@ -4256,7 +4383,7 @@ packages: /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} - dev: false + dev: true /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} @@ -4265,12 +4392,12 @@ packages: /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: false + dev: true /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: false + dev: true /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} @@ -4279,10 +4406,12 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -4324,6 +4453,7 @@ packages: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} @@ -4333,7 +4463,7 @@ packages: get-intrinsic: 1.2.2 has-symbols: 1.0.3 isarray: 2.0.5 - dev: false + dev: true /safe-regex-test@1.0.2: resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} @@ -4342,16 +4472,16 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-regex: 1.1.4 - dev: false + dev: true /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: false + dev: true /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - dev: false + dev: true /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} @@ -4359,11 +4489,11 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: false + dev: true /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: false + dev: true /set-function-length@1.2.0: resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} @@ -4374,7 +4504,7 @@ packages: get-intrinsic: 1.2.2 gopd: 1.0.1 has-property-descriptors: 1.0.1 - dev: false + dev: true /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} @@ -4383,14 +4513,14 @@ packages: define-data-property: 1.1.1 functions-have-names: 1.2.3 has-property-descriptors: 1.0.1 - dev: false + dev: true /shebang-command@1.2.0: resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 - dev: false + dev: true /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} @@ -4402,7 +4532,7 @@ packages: /shebang-regex@1.0.0: resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} engines: {node: '>=0.10.0'} - dev: false + dev: true /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} @@ -4415,7 +4545,7 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 object-inspect: 1.13.1 - dev: false + dev: true /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} @@ -4423,7 +4553,7 @@ packages: /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: false + dev: true /signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} @@ -4437,6 +4567,7 @@ packages: /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: true /smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} @@ -4449,12 +4580,17 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 15.4.1 - dev: false + dev: true /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + /space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false @@ -4464,33 +4600,32 @@ packages: dependencies: cross-spawn: 5.1.0 signal-exit: 3.0.7 - dev: false + dev: true /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.16 - dev: false + dev: true /spdx-exceptions@2.4.0: resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} - dev: false + dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.16 - dev: false + dev: true /spdx-license-ids@3.0.16: resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - dev: false + dev: true /sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: false /stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -4504,7 +4639,7 @@ packages: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: mixme: 0.5.10 - dev: false + dev: true /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -4513,7 +4648,7 @@ packages: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: false + dev: true /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} @@ -4522,7 +4657,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: false + dev: true /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} @@ -4530,7 +4665,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: false + dev: true /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} @@ -4538,7 +4673,7 @@ packages: call-bind: 1.0.5 define-properties: 1.2.1 es-abstract: 1.22.3 - dev: false + dev: true /stringify-entities@4.0.3: resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} @@ -4561,7 +4696,7 @@ packages: engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - dev: false + dev: true /strip-ansi@7.1.0: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} @@ -4573,7 +4708,7 @@ packages: /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} - dev: false + dev: true /strip-final-newline@3.0.0: resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} @@ -4585,7 +4720,7 @@ packages: engines: {node: '>=8'} dependencies: min-indent: 1.0.1 - dev: false + dev: true /strip-literal@1.3.0: resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} @@ -4602,18 +4737,19 @@ packages: engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - dev: false + 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: false + dev: true /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + dev: true /tailwind-merge@2.2.1: resolution: {integrity: sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==} @@ -4624,7 +4760,7 @@ packages: /term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} - dev: false + dev: true /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} @@ -4645,18 +4781,18 @@ packages: engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 - dev: false + dev: true /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} - dev: false /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true /toml-js@0.0.8: resolution: {integrity: sha512-MQUXr5oq9fgOQIcucZuda1BtGUmQRt3Y2z1TY9JT3oUR6gs1qLkbsGfVdlr/gJ6JqrjJdPLO5wNXCgkmvzXNTQ==} @@ -4669,7 +4805,7 @@ packages: /trim-newlines@3.0.1: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} - dev: false + dev: true /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} @@ -4691,7 +4827,7 @@ packages: strip-ansi: 6.0.1 wcwidth: 1.0.1 yargs: 17.7.2 - dev: false + dev: true /turbo-darwin-64@1.12.3: resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} @@ -4761,17 +4897,17 @@ packages: /type-fest@0.13.1: resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} engines: {node: '>=10'} - dev: false + dev: true /type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} - dev: false + dev: true /type-fest@0.8.1: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - dev: false + dev: true /typed-array-buffer@1.0.0: resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} @@ -4780,7 +4916,7 @@ packages: call-bind: 1.0.5 get-intrinsic: 1.2.2 is-typed-array: 1.1.12 - dev: false + dev: true /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} @@ -4790,7 +4926,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: false + dev: true /typed-array-byte-offset@1.0.0: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} @@ -4801,7 +4937,7 @@ packages: for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.12 - dev: false + dev: true /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} @@ -4809,7 +4945,7 @@ packages: call-bind: 1.0.5 for-each: 0.3.3 is-typed-array: 1.1.12 - dev: false + dev: true /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} @@ -4827,7 +4963,7 @@ packages: has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: false + dev: true /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} @@ -4935,7 +5071,7 @@ packages: /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} - dev: false + dev: true /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -4952,7 +5088,7 @@ packages: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: false + dev: true /vfile-location@5.0.2: resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} @@ -5200,7 +5336,7 @@ packages: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - dev: false + dev: true /web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -5219,11 +5355,11 @@ packages: is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: false + dev: true /which-module@2.0.1: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: false + dev: true /which-pm@2.0.0: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} @@ -5231,7 +5367,7 @@ packages: dependencies: load-yaml-file: 0.2.0 path-exists: 4.0.0 - dev: false + dev: true /which-typed-array@1.1.13: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} @@ -5242,14 +5378,14 @@ packages: for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.0 - dev: false + dev: true /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 - dev: false + dev: true /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} @@ -5275,7 +5411,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false + dev: true /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -5284,7 +5420,7 @@ packages: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: false + dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5292,20 +5428,20 @@ packages: /y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: false + dev: true /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: false + dev: true /yallist@2.1.2: resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - dev: false + dev: true /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false + dev: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} @@ -5313,12 +5449,12 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: false + dev: true /yargs-parser@21.1.1: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} - dev: false + dev: true /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} @@ -5335,7 +5471,7 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: false + dev: true /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} @@ -5348,12 +5484,12 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: false + dev: true /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - dev: false + dev: true /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dee51e92..18ec407e 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,2 @@ packages: - - "packages/*" + - 'packages/*' diff --git a/turbo.json b/turbo.json index 628c64d2..aa96204a 100644 --- a/turbo.json +++ b/turbo.json @@ -1,13 +1,13 @@ { - "$schema": "https://turbo.build/schema.json", - "pipeline": { - "lint": {}, - "build": { - "outputs": ["dist/**"], - "dependsOn": ["^build"] - }, - "types:check": { - "dependsOn": ["^build"] - } + "$schema": "https://turbo.build/schema.json", + "pipeline": { + "lint": {}, + "build": { + "outputs": ["dist/**"], + "dependsOn": ["^build"] + }, + "types:check": { + "dependsOn": ["^build"] } + } }