diff --git a/package-lock.json b/package-lock.json index a56cd0926..4f93a9355 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,14 +30,14 @@ "file-loader": "6.2.0", "json-loader": "0.5.7", "json-schema-faker": "0.5.8", + "lodash.get": "^4.4.2", "mermaid": "11.4.1", "net": "1.0.2", "node-fetch": "2.7.0", "node-polyfill-webpack-plugin": "3.0.0", "parser-front-matter": "1.6.4", - "prism-react-renderer": "2.3.1", + "prism-react-renderer": "2.4.1", "prismjs": "1.29.0", - "ramda": "0.29.1", "react": "19.0.0", "react-dom": "19.0.0", "redocusaurus": "2.2.1", @@ -16208,6 +16208,12 @@ "license": "MIT", "peer": true }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "license": "MIT" + }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -22214,9 +22220,9 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", @@ -22513,16 +22519,6 @@ "license": "CC0-1.0", "peer": true }, - "node_modules/ramda": { - "version": "0.29.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", - "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, "node_modules/randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", diff --git a/package.json b/package.json index 551066287..2e487d721 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "gen:config": "node src/scripts/config.js config.js", "start": "docusaurus start --no-minify", "build": "docusaurus build", + "build:analyze": "docusaurus build --bundle-analyzer", "swizzle": "docusaurus swizzle", "serve": "docusaurus serve", "test": "playwright test", @@ -50,14 +51,14 @@ "file-loader": "6.2.0", "json-loader": "0.5.7", "json-schema-faker": "0.5.8", + "lodash.get": "^4.4.2", "mermaid": "11.4.1", "net": "1.0.2", "node-fetch": "2.7.0", "node-polyfill-webpack-plugin": "3.0.0", "parser-front-matter": "1.6.4", - "prism-react-renderer": "2.3.1", + "prism-react-renderer": "2.4.1", "prismjs": "1.29.0", - "ramda": "0.29.1", "react": "19.0.0", "react-dom": "19.0.0", "redocusaurus": "2.2.1", diff --git a/src/components/ConfigEditor/index.tsx b/src/components/ConfigEditor/index.tsx index f7068c696..04325510f 100644 --- a/src/components/ConfigEditor/index.tsx +++ b/src/components/ConfigEditor/index.tsx @@ -2,7 +2,6 @@ import RefParser from "@apidevtools/json-schema-ref-parser" import { withTheme } from "@rjsf/core" import { Theme as Bootstrap4Theme } from "@rjsf/bootstrap-4" import validator from "@rjsf/validator-ajv8" -import axios from "axios" import { useEffect, useState } from "react" const Form = withTheme(Bootstrap4Theme) @@ -11,15 +10,17 @@ export default function ConfigEditor(props: { url: any }) { const [schema, setSchema] = useState() useEffect(() => { - axios.get(props.url).then((res) => { - RefParser.dereference(res.data, (err, api) => { - if (err) { - console.log(err) - } else { - setSchema(api) - } + fetch(props.url) + .then((r) => r.json()) + .then((res) => { + RefParser.dereference(res, (err, api) => { + if (err) { + console.log(err) + } else { + setSchema(api) + } + }) }) - }) }, [props.url]) if (!schema) { diff --git a/src/components/ConfigMarkdown/index.tsx b/src/components/ConfigMarkdown/index.tsx index 67454d0f1..5e83a54e8 100644 --- a/src/components/ConfigMarkdown/index.tsx +++ b/src/components/ConfigMarkdown/index.tsx @@ -4,9 +4,9 @@ import axios from "axios" import RefParser from "@apidevtools/json-schema-ref-parser" import jsf from "json-schema-faker" import YAML from "yaml" -import { pathOr } from "ramda" import Admonition from "@theme/Admonition" import CodeBlock from "@theme/CodeBlock" +import { pathOr } from "../../utils/pathOr" const parser = new RefParser() @@ -128,83 +128,86 @@ export default function ConfigMarkdown(props: { src: string; binary: string }) { }) useEffect(() => { - axios.get(props.src).then(({ data: schema }) => { - new Promise((resolve, reject) => { - parser.dereference( - schema, - { - resolve: { - ory: oryResolver, + fetch(props.src) + .then((r) => r.json()) + .then((schema) => { + new Promise((resolve, reject) => { + parser.dereference( + schema, + { + resolve: { + ory: oryResolver, + }, }, - }, - (err, result) => (err ? reject(err) : resolve(result)), - ) - }) - .then((schema: any) => { - const removeAdditionalProperties = (o) => { - delete o["additionalProperties"] - if (o.properties) { - Object.keys(o.properties).forEach((key) => - removeAdditionalProperties(o.properties[key]), - ) + (err, result) => (err ? reject(err) : resolve(result)), + ) + }) + .then((schema: any) => { + const removeAdditionalProperties = (o) => { + delete o["additionalProperties"] + if (o.properties) { + Object.keys(o.properties).forEach((key) => + removeAdditionalProperties(o.properties[key]), + ) + } } - } - - const enableAll = (o) => { - if (o.properties) { - Object.keys(o.properties).forEach((key) => { - if (key === "enable") { - o.properties[key] = true - } - enableAll(o.properties[key]) - }) + + const enableAll = (o) => { + if (o.properties) { + Object.keys(o.properties).forEach((key) => { + if (key === "enable") { + o.properties[key] = true + } + enableAll(o.properties[key]) + }) + } } - } - - removeAdditionalProperties(schema) - enableAll(schema) - if (schema.definitions) { - Object.keys(schema.definitions).forEach((key) => { - removeAdditionalProperties(schema.definitions[key]) - enableAll(schema.definitions[key]) - }) - } - jsf.option({ - useExamplesValue: true, - useDefaultValue: false, // do not change this!! - fixedProbabilities: true, - alwaysFakeOptionals: true, - }) + removeAdditionalProperties(schema) + enableAll(schema) + if (schema.definitions) { + Object.keys(schema.definitions).forEach((key) => { + removeAdditionalProperties(schema.definitions[key]) + enableAll(schema.definitions[key]) + }) + } - const values = jsf.generate(schema) - const doc = YAML.parseDocument(YAML.stringify(values)) + jsf.option({ + useExamplesValue: true, + useDefaultValue: false, // do not change this!! + fixedProbabilities: true, + alwaysFakeOptionals: true, + }) - const comments = [`# ${pathOr(props.binary, ["title"], schema)}`, ""] + const values = jsf.generate(schema) + const doc = YAML.parseDocument(YAML.stringify(values)) - const description = pathOr("", ["description"], schema) - if (description) { - comments.push(" " + description) - } + const comments = [ + `# ${pathOr(props.binary, ["title"], schema)}`, + "", + ] - console.log({ doc }) + const description = pathOr("", ["description"], schema) + if (description) { + comments.push(" " + description) + } - doc.commentBefore = comments.join("\n") - doc.spaceAfter = false - doc.spaceBefore = false + doc.commentBefore = comments.join("\n") + doc.spaceAfter = false + doc.spaceBefore = false - doc.contents.items.forEach(enhance(schema, [])) + doc.contents.items.forEach(enhance(schema, [])) - return Promise.resolve({ - // schema, - // values, - yaml: doc.toString(), + return Promise.resolve({ + // schema, + // values, + yaml: doc.toString(), + }) }) - }) - .then((out) => { - setContent(out.yaml) - }) - }) + .then((out) => { + setContent(out.yaml) + }) + }) }, [props.src]) return ( diff --git a/src/scripts/config.js b/src/scripts/config.js index d37e11832..322bd2eba 100644 --- a/src/scripts/config.js +++ b/src/scripts/config.js @@ -3,9 +3,8 @@ const RefParser = require("json-schema-ref-parser") const parser = new RefParser() -const jsf = require("json-schema-faker").default +const jsf = require("json-schema-faker") const YAML = require("yaml") -const { pathOr } = require("ramda") const path = require("path") const fs = require("fs") const prettier = require("prettier") @@ -47,6 +46,7 @@ if (process.argv.length !== 3 || process.argv[1] === "help") { } const config = require(path.resolve(process.argv[2])) +const { pathOr } = require("../utils/pathOr") const enhance = (schema, parents = []) => diff --git a/src/theme/API.tsx b/src/theme/API.tsx index eed420d8f..448e98bb4 100644 --- a/src/theme/API.tsx +++ b/src/theme/API.tsx @@ -1,7 +1,6 @@ import React, { useEffect, useState } from "react" import Redoc from "@theme/Redoc" import "./API.module.css" -import axios from "axios" import { useLatestRelease } from "../hooks" const canUseDOM: boolean = !!( @@ -27,9 +26,11 @@ function API({ return } - axios.get(url.replace(/master/, version)).then((res) => { - setSpec(res.data) - }) + fetch(url.replace(/master/, version)) + .then((r) => r.json()) + .then((res) => { + setSpec(res) + }) }, [url, repo, version]) // For some reason this does not render server-side... diff --git a/src/theme/prism-include-languages.js b/src/theme/prism-include-languages.js index b5fe0df16..4b5d2aafa 100644 --- a/src/theme/prism-include-languages.js +++ b/src/theme/prism-include-languages.js @@ -6,6 +6,8 @@ import siteConfig from "@generated/docusaurus.config" import ketoRelationTuplesPrism from "./ketoRelationTuplesPrism" import ketoRelationsPermissionsPrism from "./ketoRelationsPermissionsPrism" +// Automatically overrides the docusaurus prism coonfig. + export default function prismIncludeLanguages(PrismObject) { const { themeConfig: { prism }, diff --git a/src/utils/pathOr.ts b/src/utils/pathOr.ts new file mode 100644 index 000000000..3c25256cb --- /dev/null +++ b/src/utils/pathOr.ts @@ -0,0 +1,6 @@ +export const pathOr = (defaultValue, path, obj) => { + return path.reduce( + (acc, key) => (acc && acc[key] !== undefined ? acc[key] : defaultValue), + obj, + ) +} diff --git a/tests/jest/redirects/docs-redirects.test.ts b/tests/jest/redirects/docs-redirects.test.ts index 2e38d8dcd..75208bda0 100644 --- a/tests/jest/redirects/docs-redirects.test.ts +++ b/tests/jest/redirects/docs-redirects.test.ts @@ -1,7 +1,7 @@ // Copyright © 2022 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { readSitemapXML, Sitemap, getLoc, getNewURL, runTest } from "./utils" +import { readSitemapXML, runTest } from "./utils" const sitemap = readSitemapXML("sitemap_docs.xml") diff --git a/tests/jest/redirects/hydra-redirects.test.ts b/tests/jest/redirects/hydra-redirects.test.ts index 248346a30..1e36f13ee 100644 --- a/tests/jest/redirects/hydra-redirects.test.ts +++ b/tests/jest/redirects/hydra-redirects.test.ts @@ -1,7 +1,7 @@ // Copyright © 2022 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { readSitemapXML, Sitemap, getLoc, getNewURL, runTest } from "./utils" +import { readSitemapXML, runTest } from "./utils" const sitemap = readSitemapXML("sitemap_hydra.xml") diff --git a/tests/jest/redirects/keto-redirects.test.ts b/tests/jest/redirects/keto-redirects.test.ts index 936b73ef8..8ac18c499 100644 --- a/tests/jest/redirects/keto-redirects.test.ts +++ b/tests/jest/redirects/keto-redirects.test.ts @@ -1,7 +1,7 @@ // Copyright © 2022 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { readSitemapXML, Sitemap, getLoc, getNewURL, runTest } from "./utils" +import { readSitemapXML, runTest } from "./utils" const sitemap = readSitemapXML("sitemap_keto.xml") diff --git a/tests/jest/redirects/kratos-redirects.test.ts b/tests/jest/redirects/kratos-redirects.test.ts index 9ee5890b9..f5136d49a 100644 --- a/tests/jest/redirects/kratos-redirects.test.ts +++ b/tests/jest/redirects/kratos-redirects.test.ts @@ -1,7 +1,7 @@ // Copyright © 2022 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { readSitemapXML, Sitemap, getLoc, getNewURL, runTest } from "./utils" +import { readSitemapXML, runTest } from "./utils" const sitemap = readSitemapXML("sitemap_kratos.xml") diff --git a/tests/jest/redirects/oathkeeper-redirects.test.ts b/tests/jest/redirects/oathkeeper-redirects.test.ts index 59e4af140..3e54b53df 100644 --- a/tests/jest/redirects/oathkeeper-redirects.test.ts +++ b/tests/jest/redirects/oathkeeper-redirects.test.ts @@ -1,7 +1,7 @@ // Copyright © 2022 Ory Corp // SPDX-License-Identifier: Apache-2.0 -import { readSitemapXML, Sitemap, getLoc, getNewURL, runTest } from "./utils" +import { readSitemapXML, runTest } from "./utils" const sitemap = readSitemapXML("sitemap_oathkeeper.xml")