diff --git a/package.json b/package.json index 7a0b34e..e5f1866 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "antd": "^5.7.3", "axios": "^1.4.0", "codemirror": "^6.0.1", + "codemirror-json-schema": "^0.7.1", "immutability-helper": "^3.1.1", "katex": "^0.16.8", "markdown-it": "^13.0.1", @@ -67,6 +68,7 @@ "@commitlint/cli": "^19.0.3", "@commitlint/config-conventional": "^19.0.3", "@testing-library/react": "^14.0.0", + "@types/lodash-es": "^4.17.12", "@types/react": "^18.2.15", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.0.0", diff --git a/src/admin/utils/fieldTypes.jsx b/src/admin/utils/fieldTypes.jsx index 7dfe39e..72cfe03 100644 --- a/src/admin/utils/fieldTypes.jsx +++ b/src/admin/utils/fieldTypes.jsx @@ -7,6 +7,7 @@ import { CalendarOutlined, CheckSquareOutlined, CloudDownloadOutlined, + CodeOutlined, ContainerOutlined, FontSizeOutlined, LayoutOutlined, @@ -16,6 +17,7 @@ import { TagOutlined, UnorderedListOutlined, } from "@ant-design/icons"; +import { placeholder } from "@codemirror/view"; // COMMON / EXTRA PROPERTIES: @@ -214,17 +216,25 @@ const collections = { }, }, optionsUiSchemaUiSchema: { - ...common.optionsUiSchemaUiSchema, "ui:options": { + ...common.optionsUiSchemaUiSchema["ui:options"], itemsDisplayTitle: { - "ui:widget": "itemsDisplayTitle", "ui:options": { descriptionIsMarkdown: true, showAsModal: true, modal: { buttonInNewLine: true, }, + codeEditor: { + minimal: true, + language: "jinja", + extraExtensions: [ + placeholder("Path: {{item_123}} - Type: {{item_456}}"), + ], + height: "200px", + }, }, + "ui:field": "codeEditor", }, }, }, @@ -388,7 +398,6 @@ const simple = { }, }, optionsUiSchemaUiSchema: { - ...common.optionsUiSchemaUiSchema, "ui:options": { ...common.optionsUiSchemaUiSchema["ui:options"], mask: { @@ -1081,6 +1090,145 @@ const advanced = { }, }, }, + codeEditor: { + title: "Code Editor", + icon: , + description: "Code editor with syntax highlighting", + child: {}, + optionsSchema: { + title: "Code Editor Schema", + type: "object", + properties: { + ...common.optionsSchema, + validateWith: { + type: "string", + title: "Validate with", + description: + "You can either provide a URL of a UI Schema to validate against or paste the JSON schema directly", + oneOf: [ + { const: "none", title: "None" }, + { const: "url", title: "URL" }, + { const: "json", title: "JSON" }, + ], + }, + readOnly: extra.optionsSchema.readOnly, + isRequired: extra.optionsSchema.isRequired, + }, + dependencies: { + validateWith: { + oneOf: [ + { + properties: { + validateWith: { + enum: ["url"], + }, + validateWithUrl: { + title: "Validation schema URL", + type: "string", + }, + }, + }, + { + properties: { + validateWith: { + enum: ["json"], + }, + validateWithJson: { + title: "Validation JSON schema", + type: "string", + }, + }, + }, + { + properties: { + validateWith: { + enum: ["none"], + }, + }, + }, + ], + }, + }, + }, + optionsSchemaUiSchema: { + readOnly: extra.optionsSchemaUiSchema.readOnly, + isRequired: extra.optionsSchemaUiSchema.isRequired, + validateWithUrl: { + "ui:widget": "uri", + }, + validateWithJson: { + "ui:field": "codeEditor", + "ui:options": { + showAsModal: true, + modal: { + buttonInNewLine: true, + modalWidth: "800px", + }, + codeEditor: { + minimal: true, + language: "json", + height: "600px", + extraExtensions: [placeholder("Paste your JSON Schema here")], + }, + }, + }, + "ui:order": [ + "title", + "description", + "validateWith", + "validateWithUrl", + "validateWithJson", + "*", + ], + }, + optionsUiSchema: { + type: "object", + title: "UI Schema", + properties: { + "ui:options": { + type: "object", + title: "UI Options", + dependencies: + common.optionsUiSchema.properties["ui:options"].dependencies, + properties: { + ...common.optionsUiSchema.properties["ui:options"].properties, + height: { + type: "number", + title: "Height", + description: "In pixels", + }, + language: { + type: "string", + title: "Language", + oneOf: [ + { const: "none", title: "None" }, + { const: "json", title: "JSON" }, + { const: "jinja", title: "Jinja" }, + { const: "stex", title: "LaTeX (sTeX)" }, + ], + tooltip: + "This setting will be ignored when passing a validation schema in the schema settings", + }, + }, + }, + }, + }, + optionsUiSchemaUiSchema: { + ...common.optionsUiSchemaUiSchema, + }, + default: { + schema: { + type: "string", + validateWith: "none", + }, + uiSchema: { + "ui:field": "codeEditor", + "ui:options": { + language: "none", + }, + }, + }, + }, }; // HIDDEN FIELDS (not directly selectable by the user): diff --git a/src/forms/Form.jsx b/src/forms/Form.jsx index 5cc4a9d..9f587f5 100644 --- a/src/forms/Form.jsx +++ b/src/forms/Form.jsx @@ -5,8 +5,6 @@ import FieldTemplate from "./templates/Field/FieldTemplate"; import CAPFields from "./fields"; import CAPWidgets from "./widgets"; -import objectPath from "object-path"; - import "./Form.less"; import { Form } from "@rjsf/antd"; import validator from "@rjsf/validator-ajv8"; @@ -35,39 +33,16 @@ const RJSFForm = ({ tagName, liveValidate = false, showErrorList = false, + transformErrors, }) => { + const customizationContext = useContext(CustomizationContext); - const customizationContext = useContext(CustomizationContext) - - const dispatch = useDispatch() - - // mainly this is used for the drafts forms - // we want to allow forms to be saved even without required fields - // if these fields are not filled in when publishing then an error will be shown - const transformErrors = errors => { - errors = errors - .filter(item => item.name != "required") - .map(error => { - if (error.name == "required") return null; - - // Update messages for undefined fields when required, - // from "should be string" ==> "Either edit or remove" - if (error.message == "should be string") { - let errorMessages = objectPath.get(formData, error.property); - if (errorMessages == undefined) - error.message = "Either edit or remove"; - } - - return error; - }); - - return errors; - }; + const dispatch = useDispatch(); const handleChange = (change) => { - onChange && onChange(change) - dispatch(updateFormData({ value: change.formData })) - } + onChange && onChange(change); + dispatch(updateFormData({ value: change.formData })); + }; const templates = { FieldTemplate: Fields || FieldTemplate, @@ -84,8 +59,16 @@ const RJSFForm = ({ uiSchema={uiSchema} tagName={tagName} formData={formData} - fields={{ ...CAPFields, ...customizationContext.customFields, ...fields }} - widgets={{ ...CAPWidgets, ...customizationContext.customWidgets, ...widgets }} + fields={{ + ...CAPFields, + ...customizationContext.customFields, + ...fields, + }} + widgets={{ + ...CAPWidgets, + ...customizationContext.customWidgets, + ...widgets, + }} templates={templates} liveValidate={liveValidate} showErrorList={showErrorList} diff --git a/src/forms/fields/CodeEditorField.jsx b/src/forms/fields/CodeEditorField.jsx new file mode 100644 index 0000000..ec00bbc --- /dev/null +++ b/src/forms/fields/CodeEditorField.jsx @@ -0,0 +1,82 @@ +import CodeEditor from "../../utils/CodeEditor"; +import axios from "axios"; +import { useEffect, useState } from "react"; +import { Typography } from "antd"; +import { debounce } from "lodash-es"; +import { URL_REGEX } from "../../utils"; + +const CodeEditorField = ({ value, onChange, schema, uiSchema, readonly }) => { + const { validateWith, validateWithUrl, validateWithJson } = schema; + const uiOptions = uiSchema["ui:options"]; + const { + language = uiOptions.codeEditor?.language, + height = uiOptions.codeEditor?.height, + codeEditor, + } = uiOptions || {}; + + const [error, setError] = useState(); + + const [validationSchema, setValidationSchema] = useState(); + + const handleUrlError = () => { + setValidationSchema(); + setError("Error querying validation schema URL"); + }; + + useEffect(() => { + setError(); + if (validateWith === "url" && validateWithUrl) { + const fetchSchema = debounce(() => { + axios + .get(validateWithUrl) + .then((response) => { + setValidationSchema(response.data); + }) + .catch(() => { + handleUrlError(); + }); + }, 2000); + if (new RegExp(URL_REGEX).test(validateWithUrl)) { + fetchSchema(); + } else { + handleUrlError(); + } + return () => { + // Cleaning up the debounce when validateWithUrl changes + fetchSchema.cancel(); + }; + } else if (validateWith === "json" && validateWithJson) { + const parsed = (() => { + try { + return JSON.parse(validateWithJson); + } catch { + setError("Error parsing validation JSON"); + return; + } + }).call(); + setValidationSchema(parsed); + } else { + setValidationSchema(); + } + }, [validateWith, validateWithUrl, validateWithJson]); + + return ( + <> + onChange(v)} + reset + lang={!validationSchema && language} + validationSchema={!readonly && validationSchema} + {...codeEditor} + /> + {error} + + ); +}; + +export default CodeEditorField; diff --git a/src/forms/fields/index.js b/src/forms/fields/index.js index 760b318..31c3508 100644 --- a/src/forms/fields/index.js +++ b/src/forms/fields/index.js @@ -1,9 +1,11 @@ +import CodeEditorField from "./CodeEditorField"; import IdFetcher from "./IdFetcher"; import TagsField from "./TagsField"; const fields = { tags: TagsField, idFetcher: IdFetcher, + codeEditor: CodeEditorField, }; export default fields; diff --git a/src/forms/templates/ArrayFieldTemplates/NormalArrayFieldTemplate.jsx b/src/forms/templates/ArrayFieldTemplates/NormalArrayFieldTemplate.jsx index a0dab81..964d6c9 100644 --- a/src/forms/templates/ArrayFieldTemplates/NormalArrayFieldTemplate.jsx +++ b/src/forms/templates/ArrayFieldTemplates/NormalArrayFieldTemplate.jsx @@ -14,11 +14,9 @@ import axios from "axios"; import ImportListModal from "./ImportListModal"; import { CheckOutlined, CopyOutlined } from "@ant-design/icons"; import CodeViewer from "../../../utils/CodeViewer"; -import { stex } from "@codemirror/legacy-modes/mode/stex"; import { syntaxHighlighting, defaultHighlightStyle, - StreamLanguage, } from "@codemirror/language"; import FieldHeader from "../Field/FieldHeader"; import TitleField from "../../fields/internal/TitleField"; @@ -175,10 +173,8 @@ const NormalArrayFieldTemplate = ({ )} diff --git a/src/forms/widgets/ItemsDisplayTitle.jsx b/src/forms/widgets/ItemsDisplayTitle.jsx deleted file mode 100644 index 1610984..0000000 --- a/src/forms/widgets/ItemsDisplayTitle.jsx +++ /dev/null @@ -1,25 +0,0 @@ -import { StreamLanguage } from "@codemirror/language"; -import CodeEditor from "../../utils/CodeEditor"; -import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2"; -import { placeholder } from "@codemirror/view"; - -// TODO: Remove this component once https://github.com/cern-sis/react-formule/issues/21 -// is implemented and use that general CodeEditor directly from fieldTypes.jsx -const ItemsDisplayTitle = ({ onChange, value }) => { - return ( -
- onChange(value)} - extraExtensions={[ - StreamLanguage.define(jinja2), - placeholder("Path: {{item_123}} - Type: {{item_456}}"), - ]} - minimal - /> -
- ); -}; - -export default ItemsDisplayTitle; diff --git a/src/forms/widgets/UriWidget.jsx b/src/forms/widgets/UriWidget.jsx index 33b75c4..2faf876 100644 --- a/src/forms/widgets/UriWidget.jsx +++ b/src/forms/widgets/UriWidget.jsx @@ -1,8 +1,6 @@ import { Button, Input, Tooltip } from "antd"; import { CopyOutlined, LinkOutlined } from "@ant-design/icons"; - -const URL_REGEX = - "https?://(www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)"; +import { URL_REGEX } from "../../utils"; const UriWidget = ({ autofocus, @@ -25,7 +23,7 @@ const UriWidget = ({ type="url" autoFocus={autofocus} value={value} - onChange={e => onChange(e.target.value)} + onChange={(e) => onChange(e.target.value)} onBlur={handleBlur} onFocus={handleFocus} disabled={disabled || (readonlyAsDisabled && readonly)} diff --git a/src/forms/widgets/index.js b/src/forms/widgets/index.js index 2c4ef43..1e69b6f 100644 --- a/src/forms/widgets/index.js +++ b/src/forms/widgets/index.js @@ -6,7 +6,6 @@ import UriWidget from "./UriWidget"; import DateWidget from "./DateWidget"; import RequiredWidget from "./RequiredWidget"; import SelectWidget from "./SelectWidget"; -import ItemsDisplayTitle from "./ItemsDisplayTitle"; const widgets = { text: TextWidget, @@ -18,7 +17,6 @@ const widgets = { checkbox: CheckboxWidget, date: DateWidget, select: SelectWidget, - itemsDisplayTitle: ItemsDisplayTitle, }; export default widgets; diff --git a/src/utils/CodeEditor.jsx b/src/utils/CodeEditor.jsx index 11f4b4f..16d1659 100644 --- a/src/utils/CodeEditor.jsx +++ b/src/utils/CodeEditor.jsx @@ -7,13 +7,15 @@ const CodeEditor = ({ value, lang, lint, - isReadOnly = false, + isEditable = true, + isReadOnly, handleEdit, schema, height, - extraExtensions, + extraExtensions = [], reset, minimal, + validationSchema, }) => { const editorExtensions = [ keymap.of([indentWithTab]), @@ -30,6 +32,7 @@ const CodeEditor = ({ ); }; diff --git a/src/utils/CodeViewer.jsx b/src/utils/CodeViewer.jsx index b451fa3..b7c4705 100644 --- a/src/utils/CodeViewer.jsx +++ b/src/utils/CodeViewer.jsx @@ -3,16 +3,29 @@ import { basicSetup, minimalSetup } from "codemirror"; import { EditorState } from "@codemirror/state"; import { EditorView } from "@codemirror/view"; import { theme } from "antd"; +import { updateSchema, jsonSchema } from "codemirror-json-schema"; +import { StreamLanguage } from "@codemirror/language"; +import { jinja2 } from "@codemirror/legacy-modes/mode/jinja2"; +import { json } from "@codemirror/lang-json"; +import { stex } from "@codemirror/legacy-modes/mode/stex"; + +const LANGUAGES = { + json: json(), + jinja: StreamLanguage.define(jinja2), + stex: StreamLanguage.define(stex), +}; const CodeViewer = ({ value, lang, - isReadOnly = true, + isEditable = true, + isReadOnly, extraExtensions = [], height, schema, reset, minimal, + validationSchema, }) => { const editorRef = useRef(null); @@ -21,22 +34,34 @@ const CodeViewer = ({ const extensions = useMemo( () => [ minimal ? minimalSetup : basicSetup, - EditorState.readOnly.of(isReadOnly), + // This looks bizarre but it makes sense + EditorState.readOnly.of(!isEditable), + EditorView.editable.of(!isReadOnly), EditorView.theme({ "&": { width: "100%", height: "100%", border: `1px solid ${token.colorBorder}`, + backgroundColor: "white", }, "&.cm-focused": { outline: "none", borderColor: token.colorPrimary, }, }), - lang ? lang() : [], + lang && lang in LANGUAGES ? LANGUAGES[lang] : [], ...extraExtensions, + validationSchema ? jsonSchema() : [], + ], + [ + extraExtensions, + isEditable, + isReadOnly, + lang, + minimal, + token, + validationSchema, ], - [extraExtensions, isReadOnly, lang, minimal, token], ); useEffect(() => { @@ -45,16 +70,17 @@ const CodeViewer = ({ editorRef.current.innerHTML = ""; } if (editorRef.current && editorRef.current.children.length < 1) { - new EditorView({ + const editor = new EditorView({ state: EditorState.create({ doc: value, extensions: extensions, }), parent: editorRef.current, }); + updateSchema(editor, validationSchema); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, [value, schema, reset]); + }, [value, schema, reset, validationSchema]); return
; }; diff --git a/src/utils/index.js b/src/utils/index.js index 8db210b..e8827fc 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,3 +1,6 @@ +export const URL_REGEX = + "https?://(www.)?[-a-zA-Z0-9@:%._+~#=]{1,256}.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)"; + export const stringToHslColor = (str, s, l) => { let hash = 0; for (let i = 0; i < str.length; i++) { diff --git a/yarn.lock b/yarn.lock index 6f3b936..0796cf8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -134,6 +134,28 @@ dependencies: regenerator-runtime "^0.14.0" +"@changesets/changelog-github@^0.4.8": + version "0.4.8" + resolved "https://registry.yarnpkg.com/@changesets/changelog-github/-/changelog-github-0.4.8.tgz#b7f8ae85d0c0ff08028d924c5e59a1cbd3742634" + integrity sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw== + dependencies: + "@changesets/get-github-info" "^0.5.2" + "@changesets/types" "^5.2.1" + dotenv "^8.1.0" + +"@changesets/get-github-info@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@changesets/get-github-info/-/get-github-info-0.5.2.tgz#0cde2cadba57db85c714dc303c077da919a574e5" + integrity sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg== + dependencies: + dataloader "^1.4.0" + node-fetch "^2.5.0" + +"@changesets/types@^5.2.1": + version "5.2.1" + resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.2.1.tgz#a228c48004aa8a93bce4be2d1d31527ef3bf21f6" + integrity sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg== + "@codemirror/autocomplete@^6.0.0": version "6.13.0" resolved "https://registry.yarnpkg.com/@codemirror/autocomplete/-/autocomplete-6.13.0.tgz#fa7df3b2809863df0da4556f72ac4263ea4d7adb" @@ -162,6 +184,18 @@ "@codemirror/language" "^6.0.0" "@lezer/json" "^1.0.0" +"@codemirror/lang-yaml@^6.0.0": + version "6.1.1" + resolved "https://registry.yarnpkg.com/@codemirror/lang-yaml/-/lang-yaml-6.1.1.tgz#6f6e4e16c5a4e6d549f462c9dc2053439e070d0d" + integrity sha512-HV2NzbK9bbVnjWxwObuZh5FuPCowx51mEfoFT9y3y+M37fA3+pbxx4I7uePuygFzDsAmCTwQSc/kXh/flab4uw== + dependencies: + "@codemirror/autocomplete" "^6.0.0" + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.2.0" + "@lezer/yaml" "^1.0.0" + "@codemirror/language@^6.0.0", "@codemirror/language@^6.8.0": version "6.10.1" resolved "https://registry.yarnpkg.com/@codemirror/language/-/language-6.10.1.tgz#428c932a158cb75942387acfe513c1ece1090b05" @@ -181,16 +215,7 @@ dependencies: "@codemirror/language" "^6.0.0" -"@codemirror/lint@^6.0.0": - version "6.5.0" - resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9" - integrity sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g== - dependencies: - "@codemirror/state" "^6.0.0" - "@codemirror/view" "^6.0.0" - crelt "^1.0.5" - -"@codemirror/lint@^6.5.0": +"@codemirror/lint@^6.0.0", "@codemirror/lint@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@codemirror/lint/-/lint-6.5.0.tgz#ea43b6e653dcc5bcd93456b55e9fe62e63f326d9" integrity sha512-+5YyicIaaAZKU8K43IQi8TBy6mF6giGeWAH7N96Z5LC30Wm5JMjqxOYIE9mxwMG1NbhT2mA3l9hA4uuKUM3E5g== @@ -586,7 +611,7 @@ resolved "https://registry.yarnpkg.com/@lezer/common/-/common-1.2.1.tgz#198b278b7869668e1bebbe687586e12a42731049" integrity sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ== -"@lezer/highlight@^1.0.0": +"@lezer/highlight@^1.0.0", "@lezer/highlight@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@lezer/highlight/-/highlight-1.2.0.tgz#e5898c3644208b4b589084089dceeea2966f7780" integrity sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA== @@ -602,13 +627,22 @@ "@lezer/highlight" "^1.0.0" "@lezer/lr" "^1.0.0" -"@lezer/lr@^1.0.0": +"@lezer/lr@^1.0.0", "@lezer/lr@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@lezer/lr/-/lr-1.4.0.tgz#ed52a75dbbfbb0d1eb63710ea84c35ee647cb67e" integrity sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg== dependencies: "@lezer/common" "^1.0.0" +"@lezer/yaml@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@lezer/yaml/-/yaml-1.0.2.tgz#52e577f1284920d73e2d19089d408afb6b68d3b7" + integrity sha512-XCkwuxe+eumJ28nA9e1S6XKsXz9W7V/AG+WBiWOtiIuUpKcZ/bHuvN8bLxSDREIcybSRpEd/jvphh4vgm6Ed2g== + dependencies: + "@lezer/common" "^1.2.0" + "@lezer/highlight" "^1.0.0" + "@lezer/lr" "^1.4.0" + "@microsoft/api-extractor-model@7.28.3": version "7.28.3" resolved "https://registry.yarnpkg.com/@microsoft/api-extractor-model/-/api-extractor-model-7.28.3.tgz#f6a213e41a2274d5195366b646954daee39e8493" @@ -910,6 +944,19 @@ colors "~1.2.1" string-argv "~0.3.1" +"@sagold/json-pointer@^5.1.1", "@sagold/json-pointer@^5.1.2": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@sagold/json-pointer/-/json-pointer-5.1.2.tgz#7f07884050fd2139eeb5d7423e917160ee7e0b8d" + integrity sha512-+wAhJZBXa6MNxRScg6tkqEbChEHMgVZAhTHVJ60Y7sbtXtu9XA49KfUkdWlS2x78D6H9nryiKePiYozumauPfA== + +"@sagold/json-query@^6.1.3": + version "6.2.0" + resolved "https://registry.yarnpkg.com/@sagold/json-query/-/json-query-6.2.0.tgz#2204a0259ea10f36cd5cb0a1505078e6d751eecd" + integrity sha512-7bOIdUE6eHeoWtFm8TvHQHfTVSZuCs+3RpOKmZCDBIOrxpvF/rNFTeuvIyjHva/RR0yVS3kQtr+9TW72LQEZjA== + dependencies: + "@sagold/json-pointer" "^5.1.2" + ebnf "^1.9.1" + "@sinclair/typebox@^0.27.8": version "0.27.8" resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" @@ -1064,6 +1111,18 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== +"@types/lodash-es@^4.17.12": + version "4.17.12" + resolved "https://registry.yarnpkg.com/@types/lodash-es/-/lodash-es-4.17.12.tgz#65f6d1e5f80539aa7cfbfc962de5def0cf4f341b" + integrity sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ== + dependencies: + "@types/lodash" "*" + +"@types/lodash@*": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.0.tgz#d774355e41f372d5350a4d0714abb48194a489c3" + integrity sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA== + "@types/node@*": version "20.11.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.24.tgz#cc207511104694e84e9fb17f9a0c4c42d4517792" @@ -1071,6 +1130,13 @@ dependencies: undici-types "~5.26.4" +"@types/node@^20.4.2": + version "20.12.7" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.7.tgz#04080362fa3dd6c5822061aa3124f5c152cff384" + integrity sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg== + dependencies: + undici-types "~5.26.4" + "@types/prop-types@*": version "15.7.11" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563" @@ -1811,6 +1877,38 @@ clone@^1.0.2: resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== +codemirror-json-schema@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/codemirror-json-schema/-/codemirror-json-schema-0.7.1.tgz#e4eb19c60f1e3ac5da6fd9f0083e2fc63a0ed32c" + integrity sha512-AaAIBYcWAewlcUuSW4tHC1FFJn3AJmbtPfhPUxC2vae//skCASKNsl/oOCo+C/JjQZ9sjUZKoVlzXjYjSlcwWQ== + dependencies: + "@changesets/changelog-github" "^0.4.8" + "@codemirror/lang-yaml" "^6.0.0" + "@sagold/json-pointer" "^5.1.1" + "@types/json-schema" "^7.0.12" + "@types/node" "^20.4.2" + json-schema "^0.4.0" + json-schema-library "^9.1.2" + markdown-it "^14.0.0" + yaml "^2.3.4" + optionalDependencies: + "@codemirror/lang-json" "^6.0.1" + codemirror-json5 "^1.0.3" + json5 "^2.2.3" + +codemirror-json5@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/codemirror-json5/-/codemirror-json5-1.0.3.tgz#046101609776a97ae3bd0bfc4b9f15638e317793" + integrity sha512-HmmoYO2huQxoaoG5ARKjqQc9mz7/qmNPvMbISVfIE2Gk1+4vZQg9X3G6g49MYM5IK00Ol3aijd7OKrySuOkA7Q== + dependencies: + "@codemirror/language" "^6.0.0" + "@codemirror/state" "^6.0.0" + "@codemirror/view" "^6.0.0" + "@lezer/common" "^1.0.0" + "@lezer/highlight" "^1.0.0" + json5 "^2.2.1" + lezer-json5 "^2.0.2" + codemirror@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-6.0.1.tgz#62b91142d45904547ee3e0e0e4c1a79158035a29" @@ -1875,6 +1973,11 @@ commander@^10.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== +commander@^2.19.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" @@ -2045,6 +2148,11 @@ dargs@^8.0.0: resolved "https://registry.yarnpkg.com/dargs/-/dargs-8.1.0.tgz#a34859ea509cbce45485e5aa356fef70bfcc7272" integrity sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw== +dataloader@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8" + integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw== + date-fns@2.x: version "2.30.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" @@ -2110,7 +2218,7 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -2172,6 +2280,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ== + dnd-core@^16.0.1: version "16.0.1" resolved "https://registry.yarnpkg.com/dnd-core/-/dnd-core-16.0.1.tgz#a1c213ed08961f6bd1959a28bb76f1a868360d19" @@ -2242,6 +2355,16 @@ dot-prop@^5.1.0: dependencies: is-obj "^2.0.0" +dotenv@^8.1.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + +ebnf@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ebnf/-/ebnf-1.9.1.tgz#64c25d8208ec0d221ec11c3c5e8094015131a9d3" + integrity sha512-uW2UKSsuty9ANJ3YByIQE4ANkD8nqUPO7r6Fwcc1ADKPe9FRdcPpMl3VEput4JSvKBJ4J86npIC2MLP0pYkCuw== + emoji-regex@^10.3.0: version "10.3.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23" @@ -2615,6 +2738,11 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +fast-copy@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/fast-copy/-/fast-copy-3.0.2.tgz#59c68f59ccbcac82050ba992e0d5c389097c9d35" + integrity sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ== + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3469,6 +3597,19 @@ json-schema-compare@^0.2.2: dependencies: lodash "^4.17.4" +json-schema-library@^9.1.2: + version "9.3.4" + resolved "https://registry.yarnpkg.com/json-schema-library/-/json-schema-library-9.3.4.tgz#e9ed78d289eece9d59bf8157d637e0bced9cd6cb" + integrity sha512-220lm9RVt9BUeF2QhBT711aX4IogUHhPT8Tjhkksc4CUw8WmChFMuf0mJdpDAHDfJDkI064jcZIH8P70HdPAOA== + dependencies: + "@sagold/json-pointer" "^5.1.2" + "@sagold/json-query" "^6.1.3" + deepmerge "^4.3.1" + fast-copy "^3.0.2" + fast-deep-equal "^3.1.3" + smtp-address-parser "1.0.10" + valid-url "^1.0.9" + json-schema-merge-allof@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz#ed2828cdd958616ff74f932830a26291789eaaf2" @@ -3488,6 +3629,11 @@ json-schema-traverse@^1.0.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-schema@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" @@ -3500,6 +3646,11 @@ json2mq@^0.2.0: dependencies: string-convert "^0.2.0" +json5@^2.2.1, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + jsonc-parser@^3.2.0: version "3.2.1" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.1.tgz#031904571ccf929d7670ee8c547545081cb37f1a" @@ -3585,6 +3736,13 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +lezer-json5@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lezer-json5/-/lezer-json5-2.0.2.tgz#ba3756e0d352d9529517dcf264d27db8579ae577" + integrity sha512-NRmtBlKW/f8mA7xatKq8IUOq045t8GVHI4kZXrUtYYUdiVeGiO6zKGAV7/nUAnf5q+rYTY+SWX/gvQdFXMjNxQ== + dependencies: + "@lezer/lr" "^1.0.0" + lilconfig@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.0.0.tgz#f8067feb033b5b74dab4602a5f5029420be749bc" @@ -3602,6 +3760,13 @@ linkify-it@^4.0.1: dependencies: uc.micro "^1.0.1" +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== + dependencies: + uc.micro "^2.0.0" + lint-staged@>=10: version "15.2.2" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-15.2.2.tgz#ad7cbb5b3ab70e043fa05bff82a09ed286bc4c5f" @@ -3800,6 +3965,18 @@ markdown-it@^13.0.1: mdurl "^1.0.1" uc.micro "^1.0.5" +markdown-it@^14.0.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== + dependencies: + argparse "^2.0.1" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" + markdown-to-jsx@^7.4.1: version "7.4.1" resolved "https://registry.yarnpkg.com/markdown-to-jsx/-/markdown-to-jsx-7.4.1.tgz#1ed6a60f8f9cd944bec39d9923fbbc8d3d60dcb9" @@ -3815,6 +3992,11 @@ mdurl@^1.0.1: resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== +mdurl@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== + meow@^12.0.1: version "12.1.1" resolved "https://registry.yarnpkg.com/meow/-/meow-12.1.1.tgz#e558dddbab12477b69b2e9a2728c327f191bace6" @@ -3909,6 +4091,11 @@ moment@^2.24.0: resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== +moo@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/moo/-/moo-0.5.2.tgz#f9fe82473bc7c184b0d32e2215d3f6e67278733c" + integrity sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== + ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -3934,6 +4121,16 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== +nearley@^2.20.1: + version "2.20.1" + resolved "https://registry.yarnpkg.com/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ== + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + needle@^3.1.0: version "3.3.1" resolved "https://registry.yarnpkg.com/needle/-/needle-3.3.1.tgz#63f75aec580c2e77e209f3f324e2cdf3d29bd049" @@ -3942,6 +4139,13 @@ needle@^3.1.0: iconv-lite "^0.6.3" sax "^1.2.4" +node-fetch@^2.5.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + npm-run-path@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" @@ -4294,6 +4498,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" @@ -4309,6 +4518,19 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A== + +randexp@0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ== + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + rc-align@^4.0.0: version "4.0.15" resolved "https://registry.yarnpkg.com/rc-align/-/rc-align-4.0.15.tgz#2bbd665cf85dfd0b0244c5a752b07565e9098577" @@ -4904,6 +5126,11 @@ restore-cursor@^4.0.0: onetime "^5.1.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -5146,6 +5373,13 @@ slice-ansi@^7.0.0: ansi-styles "^6.2.1" is-fullwidth-code-point "^5.0.0" +smtp-address-parser@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/smtp-address-parser/-/smtp-address-parser-1.0.10.tgz#9fc4ed6021f13dc3d8f591e0ad0d50454073025e" + integrity sha512-Osg9LmvGeAG/hyao4mldbflLOkkr3a+h4m1lwKCK5U8M6ZAr7tdXEz/+/vr752TSGE4MNUlUl9cIK2cB8cgzXg== + dependencies: + nearley "^2.20.1" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" @@ -5397,6 +5631,11 @@ toggle-selection@^1.0.6: resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" integrity sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-api-utils@^1.0.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.2.1.tgz#f716c7e027494629485b21c0df6180f4d08f5e8b" @@ -5488,6 +5727,11 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + ufo@^1.3.2: version "1.4.0" resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.4.0.tgz#39845b31be81b4f319ab1d99fd20c56cac528d32" @@ -5545,6 +5789,11 @@ uuid@^8.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + validate.io-array@^1.0.3: version "1.0.6" resolved "https://registry.yarnpkg.com/validate.io-array/-/validate.io-array-1.0.6.tgz#5b5a2cafd8f8b85abb2f886ba153f2d93a27774d" @@ -5686,6 +5935,11 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" @@ -5703,6 +5957,14 @@ whatwg-mimetype@^3.0.0: resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -5818,6 +6080,11 @@ yaml@2.3.4: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== +yaml@^2.3.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.4.1.tgz#2e57e0b5e995292c25c75d2658f0664765210eed" + integrity sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg== + yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"