('none');
interface MenubarContextType {
- createMenuHandlers: (
- id: string
- ) => Partial<{
+ createMenuHandlers: (id: string) => Partial<{
onMouseOver: (e: React.MouseEvent) => void;
onClick: (e: React.MouseEvent) => void;
onBlur: (e: React.FocusEvent) => void;
onFocus: (e: React.FocusEvent) => void;
}>;
- createMenuItemHandlers: (
- id: string
- ) => Partial<{
+ createMenuItemHandlers: (id: string) => Partial<{
onMouseUp: (e: React.MouseEvent) => void;
onBlur: (e: React.FocusEvent) => void;
onFocus: (e: React.FocusEvent) => void;
diff --git a/client/modules/IDE/actions/preferences.types.ts b/client/modules/IDE/actions/preferences.types.ts
index dd56c65a77..f912ef93ab 100644
--- a/client/modules/IDE/actions/preferences.types.ts
+++ b/client/modules/IDE/actions/preferences.types.ts
@@ -6,7 +6,8 @@ import type { GetRootState } from '../../../reducers';
export type SetPreferencesTabValue = PreferencesState['tabIndex'];
export type SetFontSizeValue = PreferencesState['fontSize'];
export type SetLineNumbersValue = PreferencesState['lineNumbers'];
-export type SetAutocloseBracketsQuotesValue = PreferencesState['autocloseBracketsQuotes'];
+export type SetAutocloseBracketsQuotesValue =
+ PreferencesState['autocloseBracketsQuotes'];
export type SetAutocompleteHinterValue = PreferencesState['autocompleteHinter'];
export type SetAutosaveValue = PreferencesState['autosave'];
export type SetLinewrapValue = PreferencesState['linewrap'];
diff --git a/client/modules/IDE/components/CollectionList/CollectionList.jsx b/client/modules/IDE/components/CollectionList/CollectionList.jsx
index 69965119ba..afb9555a9a 100644
--- a/client/modules/IDE/components/CollectionList/CollectionList.jsx
+++ b/client/modules/IDE/components/CollectionList/CollectionList.jsx
@@ -38,10 +38,8 @@ const CollectionList = ({
}) => {
const { t } = useTranslation();
const [hasLoadedData, setHasLoadedData] = useState(false);
- const [
- addingSketchesToCollectionId,
- setAddingSketchesToCollectionId
- ] = useState(null);
+ const [addingSketchesToCollectionId, setAddingSketchesToCollectionId] =
+ useState(null);
useEffect(() => {
if (projectId) {
diff --git a/client/modules/IDE/components/CollectionList/CollectionListRow.jsx b/client/modules/IDE/components/CollectionList/CollectionListRow.jsx
index 6ae24e74e9..e331af1d02 100644
--- a/client/modules/IDE/components/CollectionList/CollectionListRow.jsx
+++ b/client/modules/IDE/components/CollectionList/CollectionListRow.jsx
@@ -1,279 +1,279 @@
-import PropTypes from 'prop-types';
-import React, { useState, useRef } from 'react';
-import { connect } from 'react-redux';
-import { Link } from 'react-router-dom';
-import { bindActionCreators } from 'redux';
-import { withTranslation } from 'react-i18next';
-import styled from 'styled-components';
-import { MenuItem } from '../../../../components/Dropdown/MenuItem';
-import { TableDropdown } from '../../../../components/Dropdown/TableDropdown';
-import * as ProjectActions from '../../actions/project';
-import * as CollectionsActions from '../../actions/collections';
-import * as IdeActions from '../../actions/ide';
-import * as ToastActions from '../../actions/toast';
-import { formatDateToString } from '../../../../utils/formatDate';
-import { remSize, prop } from '../../../../theme';
-
-const SketchsTableRow = styled.tr`
- &&& {
- margin: ${remSize(10)};
- height: ${remSize(72)};
- font-size: ${remSize(16)};
- }
- &:nth-child(odd) {
- background: ${prop('tableRowStripeColor')};
- }
-
- > th:nth-child(1) {
- padding-left: ${remSize(12)};
- }
-
- > td {
- padding-left: ${remSize(8)};
- }
-
- a {
- color: ${prop('primaryTextColor')};
- text-decoration: underline;
-
- &:hover {
- text-decoration: underline;
- text-decoration-thickness: 0.1em;
- }
- }
-
- &.is-deleted > * {
- font-style: italic;
- }
- @media (max-width: 770px) {
- &&& {
- margin: 0;
- position: relative;
- display: flex;
- flex-wrap: wrap;
- padding: ${remSize(15)};
- height: fit-content;
- gap: ${remSize(8)};
- border: 1px solid ${prop('modalBorderColor')};
- background-color: ${prop('searchBackgroundColor')};
- > th {
- padding-left: 0;
- width: 100%;
- font-weight: bold;
- margin-bottom: ${remSize(6)};
- }
- > td {
- padding-left: 0;
- width: 30%;
- font-size: ${remSize(14)};
- color: ${prop('modalBorderColor')};
- }
- }
- }
-`;
-const SketchesTableName = styled.span`
- &&& {
- display: flex;
- align-items: center;
- }
-`;
-const SketchlistDropdownColumn = styled.td`
- &&& {
- position: relative;
- width: ${remSize(60)};
- }
- @media (max-width: 770px) {
- &&& {
- position: absolute;
- top: 0;
- right: ${remSize(4)};
- width: auto !important;
- margin: ${remSize(8)};
- }
- }
-`;
-const formatDateCell = (date, mobile = false) =>
- formatDateToString(date, { showTime: !mobile });
-
-const CollectionListRowBase = (props) => {
- const [renameOpen, setRenameOpen] = useState(false);
- const [renameValue, setRenameValue] = useState('');
- const renameInput = useRef(null);
-
- const closeAll = () => {
- setRenameOpen(false);
- };
-
- const updateName = () => {
- const isValid = renameValue.trim().length !== 0;
- if (isValid) {
- props.editCollection(props.collection.id, {
- name: renameValue.trim()
- });
- }
- };
-
- const handleAddSketches = () => {
- closeAll();
- props.onAddSketches();
- };
-
- const handleCollectionDelete = () => {
- closeAll();
- if (
- window.confirm(
- props.t('Common.DeleteConfirmation', {
- name: props.collection.name
- })
- )
- ) {
- props.deleteCollection(props.collection.id);
- }
- };
-
- const handleRenameOpen = () => {
- closeAll();
- setRenameOpen(true);
- setRenameValue(props.collection.name);
- };
-
- const handleRenameChange = (e) => {
- setRenameValue(e.target.value);
- };
-
- const handleRenameEnter = (e) => {
- if (e.key === 'Enter') {
- e.preventDefault();
- updateName();
- closeAll();
- }
- };
-
- const handleRenameFocus = () => {
- if (renameInput.current) {
- renameInput.current.focus();
- }
- };
-
- const handleRenameBlur = () => {
- updateName();
- closeAll();
- };
-
- const renderActions = () => {
- const userIsOwner = props.user.username === props.username;
-
- return (
-
-
- {props.t('CollectionListRow.AddSketch')}
-
-
- {props.t('CollectionListRow.Delete')}
-
-
- {props.t('CollectionListRow.Rename')}
-
-
- );
- };
-
- const renderCollectionName = () => {
- const { collection, username } = props;
-
- return (
- <>
-
- {renameOpen ? '' : collection.name}
-
- {renameOpen && (
- e.stopPropagation()}
- ref={(node) => {
- renameInput.current = node;
- handleRenameFocus();
- }}
- />
- )}
- >
- );
- };
-
- const { collection, mobile } = props;
-
- return (
-
-
- {renderCollectionName()}
-
- {formatDateCell(collection.createdAt, mobile)}
- {formatDateCell(collection.updatedAt, mobile)}
-
- {mobile && 'sketches: '}
- {(collection.items || []).length}
-
- {renderActions()}
-
- );
-};
-
-CollectionListRowBase.propTypes = {
- collection: PropTypes.shape({
- id: PropTypes.string.isRequired,
- name: PropTypes.string.isRequired,
- owner: PropTypes.shape({
- username: PropTypes.string.isRequired
- }).isRequired,
- createdAt: PropTypes.string.isRequired,
- updatedAt: PropTypes.string.isRequired,
- items: PropTypes.arrayOf(
- PropTypes.shape({
- project: PropTypes.shape({
- id: PropTypes.string.isRequired
- })
- })
- )
- }).isRequired,
- username: PropTypes.string.isRequired,
- user: PropTypes.shape({
- username: PropTypes.string,
- authenticated: PropTypes.bool.isRequired
- }).isRequired,
- deleteCollection: PropTypes.func.isRequired,
- editCollection: PropTypes.func.isRequired,
- onAddSketches: PropTypes.func.isRequired,
- mobile: PropTypes.bool,
- t: PropTypes.func.isRequired
-};
-
-CollectionListRowBase.defaultProps = {
- mobile: false
-};
-
-function mapDispatchToPropsSketchListRow(dispatch) {
- return bindActionCreators(
- Object.assign(
- {},
- CollectionsActions,
- ProjectActions,
- IdeActions,
- ToastActions
- ),
- dispatch
- );
-}
-
-export default withTranslation()(
- connect(null, mapDispatchToPropsSketchListRow)(CollectionListRowBase)
-);
+import PropTypes from 'prop-types';
+import React, { useState, useRef } from 'react';
+import { connect } from 'react-redux';
+import { Link } from 'react-router-dom';
+import { bindActionCreators } from 'redux';
+import { withTranslation } from 'react-i18next';
+import styled from 'styled-components';
+import { MenuItem } from '../../../../components/Dropdown/MenuItem';
+import { TableDropdown } from '../../../../components/Dropdown/TableDropdown';
+import * as ProjectActions from '../../actions/project';
+import * as CollectionsActions from '../../actions/collections';
+import * as IdeActions from '../../actions/ide';
+import * as ToastActions from '../../actions/toast';
+import { formatDateToString } from '../../../../utils/formatDate';
+import { remSize, prop } from '../../../../theme';
+
+const SketchsTableRow = styled.tr`
+ &&& {
+ margin: ${remSize(10)};
+ height: ${remSize(72)};
+ font-size: ${remSize(16)};
+ }
+ &:nth-child(odd) {
+ background: ${prop('tableRowStripeColor')};
+ }
+
+ > th:nth-child(1) {
+ padding-left: ${remSize(12)};
+ }
+
+ > td {
+ padding-left: ${remSize(8)};
+ }
+
+ a {
+ color: ${prop('primaryTextColor')};
+ text-decoration: underline;
+
+ &:hover {
+ text-decoration: underline;
+ text-decoration-thickness: 0.1em;
+ }
+ }
+
+ &.is-deleted > * {
+ font-style: italic;
+ }
+ @media (max-width: 770px) {
+ &&& {
+ margin: 0;
+ position: relative;
+ display: flex;
+ flex-wrap: wrap;
+ padding: ${remSize(15)};
+ height: fit-content;
+ gap: ${remSize(8)};
+ border: 1px solid ${prop('modalBorderColor')};
+ background-color: ${prop('searchBackgroundColor')};
+ > th {
+ padding-left: 0;
+ width: 100%;
+ font-weight: bold;
+ margin-bottom: ${remSize(6)};
+ }
+ > td {
+ padding-left: 0;
+ width: 30%;
+ font-size: ${remSize(14)};
+ color: ${prop('modalBorderColor')};
+ }
+ }
+ }
+`;
+const SketchesTableName = styled.span`
+ &&& {
+ display: flex;
+ align-items: center;
+ }
+`;
+const SketchlistDropdownColumn = styled.td`
+ &&& {
+ position: relative;
+ width: ${remSize(60)};
+ }
+ @media (max-width: 770px) {
+ &&& {
+ position: absolute;
+ top: 0;
+ right: ${remSize(4)};
+ width: auto !important;
+ margin: ${remSize(8)};
+ }
+ }
+`;
+const formatDateCell = (date, mobile = false) =>
+ formatDateToString(date, { showTime: !mobile });
+
+const CollectionListRowBase = (props) => {
+ const [renameOpen, setRenameOpen] = useState(false);
+ const [renameValue, setRenameValue] = useState('');
+ const renameInput = useRef(null);
+
+ const closeAll = () => {
+ setRenameOpen(false);
+ };
+
+ const updateName = () => {
+ const isValid = renameValue.trim().length !== 0;
+ if (isValid) {
+ props.editCollection(props.collection.id, {
+ name: renameValue.trim()
+ });
+ }
+ };
+
+ const handleAddSketches = () => {
+ closeAll();
+ props.onAddSketches();
+ };
+
+ const handleCollectionDelete = () => {
+ closeAll();
+ if (
+ window.confirm(
+ props.t('Common.DeleteConfirmation', {
+ name: props.collection.name
+ })
+ )
+ ) {
+ props.deleteCollection(props.collection.id);
+ }
+ };
+
+ const handleRenameOpen = () => {
+ closeAll();
+ setRenameOpen(true);
+ setRenameValue(props.collection.name);
+ };
+
+ const handleRenameChange = (e) => {
+ setRenameValue(e.target.value);
+ };
+
+ const handleRenameEnter = (e) => {
+ if (e.key === 'Enter') {
+ e.preventDefault();
+ updateName();
+ closeAll();
+ }
+ };
+
+ const handleRenameFocus = () => {
+ if (renameInput.current) {
+ renameInput.current.focus();
+ }
+ };
+
+ const handleRenameBlur = () => {
+ updateName();
+ closeAll();
+ };
+
+ const renderActions = () => {
+ const userIsOwner = props.user.username === props.username;
+
+ return (
+
+
+ {props.t('CollectionListRow.AddSketch')}
+
+
+ {props.t('CollectionListRow.Delete')}
+
+
+ {props.t('CollectionListRow.Rename')}
+
+
+ );
+ };
+
+ const renderCollectionName = () => {
+ const { collection, username } = props;
+
+ return (
+ <>
+
+ {renameOpen ? '' : collection.name}
+
+ {renameOpen && (
+ e.stopPropagation()}
+ ref={(node) => {
+ renameInput.current = node;
+ handleRenameFocus();
+ }}
+ />
+ )}
+ >
+ );
+ };
+
+ const { collection, mobile } = props;
+
+ return (
+
+
+ {renderCollectionName()}
+
+ {formatDateCell(collection.createdAt, mobile)}
+ {formatDateCell(collection.updatedAt, mobile)}
+
+ {mobile && 'sketches: '}
+ {(collection.items || []).length}
+
+ {renderActions()}
+
+ );
+};
+
+CollectionListRowBase.propTypes = {
+ collection: PropTypes.shape({
+ id: PropTypes.string.isRequired,
+ name: PropTypes.string.isRequired,
+ owner: PropTypes.shape({
+ username: PropTypes.string.isRequired
+ }).isRequired,
+ createdAt: PropTypes.string.isRequired,
+ updatedAt: PropTypes.string.isRequired,
+ items: PropTypes.arrayOf(
+ PropTypes.shape({
+ project: PropTypes.shape({
+ id: PropTypes.string.isRequired
+ })
+ })
+ )
+ }).isRequired,
+ username: PropTypes.string.isRequired,
+ user: PropTypes.shape({
+ username: PropTypes.string,
+ authenticated: PropTypes.bool.isRequired
+ }).isRequired,
+ deleteCollection: PropTypes.func.isRequired,
+ editCollection: PropTypes.func.isRequired,
+ onAddSketches: PropTypes.func.isRequired,
+ mobile: PropTypes.bool,
+ t: PropTypes.func.isRequired
+};
+
+CollectionListRowBase.defaultProps = {
+ mobile: false
+};
+
+function mapDispatchToPropsSketchListRow(dispatch) {
+ return bindActionCreators(
+ Object.assign(
+ {},
+ CollectionsActions,
+ ProjectActions,
+ IdeActions,
+ ToastActions
+ ),
+ dispatch
+ );
+}
+
+export default withTranslation()(
+ connect(null, mapDispatchToPropsSketchListRow)(CollectionListRowBase)
+);
diff --git a/client/modules/IDE/components/Console.jsx b/client/modules/IDE/components/Console.jsx
index 3494fccdee..181ca7c362 100644
--- a/client/modules/IDE/components/Console.jsx
+++ b/client/modules/IDE/components/Console.jsx
@@ -30,10 +30,10 @@ const Console = () => {
cm.current.scrollTop = cm.current.scrollHeight;
});
- const consoleFeedStyle = useMemo(() => getConsoleFeedStyle(theme, fontSize), [
- theme,
- fontSize
- ]);
+ const consoleFeedStyle = useMemo(
+ () => getConsoleFeedStyle(theme, fontSize),
+ [theme, fontSize]
+ );
const handleMessageEvent = useHandleMessageEvent();
diff --git a/client/modules/IDE/components/ErrorModal.jsx b/client/modules/IDE/components/ErrorModal.jsx
index 66dd374c52..435cf53c94 100644
--- a/client/modules/IDE/components/ErrorModal.jsx
+++ b/client/modules/IDE/components/ErrorModal.jsx
@@ -53,7 +53,8 @@ const ErrorModal = ({ type, service, closeModal }) => {
return (
- {(() => { // eslint-disable-line
+ {(() => {
+ // eslint-disable-line
if (type === 'forceAuthentication') {
return forceAuthentication();
} else if (type === 'staleSession') {
@@ -63,6 +64,7 @@ const ErrorModal = ({ type, service, closeModal }) => {
} else if (type === 'oauthError') {
return oauthError();
}
+ return null;
})()}
);
diff --git a/client/modules/IDE/components/FileNode.jsx b/client/modules/IDE/components/FileNode.jsx
index cb872eb982..08a5cabf19 100644
--- a/client/modules/IDE/components/FileNode.jsx
+++ b/client/modules/IDE/components/FileNode.jsx
@@ -1,15 +1,15 @@
import PropTypes from 'prop-types';
import classNames from 'classnames';
import React, { useState, useRef } from 'react';
-import { connect } from 'react-redux';
+import { connect, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
-import { useSelector } from 'react-redux';
import * as IDEActions from '../actions/ide';
import * as FileActions from '../actions/files';
import DownArrowIcon from '../../../images/down-filled-triangle.svg';
import FolderRightIcon from '../../../images/triangle-arrow-right.svg';
import FolderDownIcon from '../../../images/triangle-arrow-down.svg';
+import LockIcon from '../../../images/lock.svg';
import FileTypeIcon from './FileTypeIcon';
function parseFileName(name) {
@@ -20,33 +20,18 @@ function parseFileName(name) {
const firstLetter = baseName[0];
const lastLetter = baseName[baseName.length - 1];
const middleText = baseName.slice(1, -1);
- return {
- baseName,
- firstLetter,
- lastLetter,
- middleText,
- extension
- };
+ return { baseName, firstLetter, lastLetter, middleText, extension };
}
const firstLetter = name[0];
const lastLetter = name[name.length - 1];
const middleText = name.slice(1, -1);
- return {
- baseName: name,
- firstLetter,
- lastLetter,
- middleText
- };
+ return { baseName: name, firstLetter, lastLetter, middleText };
}
function FileName({ name }) {
- const {
- baseName,
- firstLetter,
- lastLetter,
- middleText,
- extension
- } = parseFileName(name);
+ const { baseName, firstLetter, lastLetter, middleText, extension } =
+ parseFileName(name);
+
return (
{firstLetter}
@@ -59,9 +44,7 @@ function FileName({ name }) {
);
}
-FileName.propTypes = {
- name: PropTypes.string.isRequired
-};
+FileName.propTypes = { name: PropTypes.string.isRequired };
const FileNode = ({
id,
@@ -90,6 +73,9 @@ const FileNode = ({
const [updatedName, setUpdatedName] = useState(name);
const files = useSelector((state) => state.files);
+ const { t } = useTranslation();
+ const fileNameInput = useRef(null);
+ const fileOptionsRef = useRef(null);
const checkDuplicate = (newName) => {
const parentFolder = files.find((f) => f.id === parentId);
@@ -100,54 +86,38 @@ const FileNode = ({
.filter(Boolean)
.filter((file) => file.id !== id);
- const isDuplicate = siblingFiles.some(
+ return siblingFiles.some(
(f) => f.name.trim().toLowerCase() === newName.trim().toLowerCase()
);
-
- return isDuplicate;
};
- const { t } = useTranslation();
- const fileNameInput = useRef(null);
- const fileOptionsRef = useRef(null);
-
const handleFileClick = (event) => {
event.stopPropagation();
- if (name !== 'root' && !isDeleting) {
- setSelectedFile(id);
- }
- if (onClickFile) {
- onClickFile();
- }
- };
-
- const handleFileNameChange = (event) => {
- setUpdatedName(event.target.value);
+ if (name !== 'root' && !isDeleting) setSelectedFile(id);
+ if (onClickFile) onClickFile();
};
- const showEditFileName = () => {
- setIsEditingName(true);
- };
+ const handleFileNameChange = (event) => setUpdatedName(event.target.value);
- const hideFileOptions = () => {
- setIsOptionsOpen(false);
- };
+ const showEditFileName = () => setIsEditingName(true);
+ const hideEditFileName = () => setIsEditingName(false);
+ const hideFileOptions = () => setIsOptionsOpen(false);
const handleClickRename = () => {
setUpdatedName(name);
showEditFileName();
setTimeout(() => fileNameInput.current.focus(), 0);
- setTimeout(() => hideFileOptions(), 0);
+ setTimeout(hideFileOptions, 0);
};
const handleClickAddFile = () => {
newFile(id);
- setTimeout(() => hideFileOptions(), 0);
+ setTimeout(hideFileOptions, 0);
};
const handleClickAddFolder = () => {
newFolder(id);
- setTimeout(() => hideFileOptions(), 0);
+ setTimeout(hideFileOptions, 0);
};
const handleClickUploadFile = () => {
@@ -157,7 +127,6 @@ const FileNode = ({
const handleClickDelete = () => {
const prompt = t('Common.DeleteConfirmation', { name });
-
if (window.confirm(prompt)) {
setIsDeleting(true);
resetSelectedFile(id);
@@ -165,14 +134,8 @@ const FileNode = ({
}
};
- const hideEditFileName = () => {
- setIsEditingName(false);
- };
-
const handleKeyPress = (event) => {
- if (event.key === 'Enter') {
- hideEditFileName();
- }
+ if (event.key === 'Enter') hideEditFileName();
};
const saveUpdatedFileName = () => {
@@ -195,6 +158,7 @@ const FileNode = ({
const hasEmptyFilename = updatedName.trim() === '';
const hasOnlyExtension =
newFileExtension && updatedName.trim() === newFileExtension[0];
+
if (
hasEmptyFilename ||
hasNoExtension ||
@@ -206,14 +170,9 @@ const FileNode = ({
const userResponse = window.confirm(
'Are you sure you want to change the file extension?'
);
- if (userResponse) {
- saveUpdatedFileName();
- } else {
- setUpdatedName(currentName);
- }
- } else {
- saveUpdatedFileName();
- }
+ if (userResponse) saveUpdatedFileName();
+ else setUpdatedName(currentName);
+ } else saveUpdatedFileName();
};
const handleFileNameBlur = () => {
@@ -228,9 +187,7 @@ const FileNode = ({
const toggleFileOptions = (event) => {
event.preventDefault();
- if (!canEdit) {
- return;
- }
+ if (!canEdit) return;
setIsOptionsOpen(!isOptionsOpen);
};
@@ -246,14 +203,13 @@ const FileNode = ({
const isFile = fileType === 'file';
const isFolder = fileType === 'folder';
const isRoot = name === 'root';
-
const { extension } = parseFileName(name);
return (
{!isRoot && (
-
+
{isFile && (
setTimeout(hideFileOptions, 200)}
>
@@ -343,34 +299,52 @@ const FileNode = ({
{t('FileNode.AddFile')}
- {authenticated && (
-
-
- {t('FileNode.UploadFile')}
-
-
- )}
+
+
+ {!authenticated && (
+
+
+
+ )}
+ {t('FileNode.UploadFile')}
+ {!authenticated && (
+
+ {t('FileNode.UploadFileRequiresLogin')}
+
+ )}
+
+
+
+
+ {t('FileNode.Rename')}
+
+
+
+
+ {t('FileNode.Delete')}
+
+
>
)}
-
-
- {t('FileNode.Rename')}
-
-
-
-
- {t('FileNode.Delete')}
-
-
@@ -423,14 +397,11 @@ FileNode.defaultProps = {
};
function mapStateToProps(state, ownProps) {
- // this is a hack, state is updated before ownProps
const fileNode = state.files.find((file) => file.id === ownProps.id) || {
name: 'test',
fileType: 'file'
};
- return Object.assign({}, fileNode, {
- authenticated: state.user.authenticated
- });
+ return { ...fileNode, authenticated: state.user.authenticated };
}
const mapDispatchToProps = { ...FileActions, ...IDEActions };
diff --git a/client/modules/IDE/components/Header/Nav.jsx b/client/modules/IDE/components/Header/Nav.jsx
index 28995a2d56..4584e452f8 100644
--- a/client/modules/IDE/components/Header/Nav.jsx
+++ b/client/modules/IDE/components/Header/Nav.jsx
@@ -162,12 +162,8 @@ const ProjectMenu = () => {
const dispatch = useDispatch();
const { t } = useTranslation();
- const {
- newSketch,
- saveSketch,
- downloadSketch,
- shareSketch
- } = useSketchActions();
+ const { newSketch, saveSketch, downloadSketch, shareSketch } =
+ useSketchActions();
const replaceCommand =
metaKey === 'Ctrl' ? `${metaKeyName}+H` : `${metaKeyName}+⌥+F`;
diff --git a/client/modules/IDE/components/Sidebar.jsx b/client/modules/IDE/components/Sidebar.jsx
index 24fd487c9a..8dcad92529 100644
--- a/client/modules/IDE/components/Sidebar.jsx
+++ b/client/modules/IDE/components/Sidebar.jsx
@@ -14,17 +14,14 @@ import { selectRootFile } from '../selectors/files';
import { getAuthenticated, selectCanEditSketch } from '../selectors/users';
import ConnectedFileNode from './FileNode';
-import { PlusIcon } from '../../../common/icons';
+import { PlusIcon, LockIcon } from '../../../common/icons';
import { FileDrawer } from './Editor/MobileEditor';
-// TODO: use a generic Dropdown UI component
-
export default function SideBar() {
const { t } = useTranslation();
const dispatch = useDispatch();
const rootFile = useSelector(selectRootFile);
- const ide = useSelector((state) => state.ide);
const projectOptionsVisible = useSelector(
(state) => state.ide.projectOptionsVisible
);
@@ -58,11 +55,8 @@ export default function SideBar() {
const toggleProjectOptions = (e) => {
e.preventDefault();
- if (projectOptionsVisible) {
- dispatch(closeProjectOptions());
- } else {
- dispatch(openProjectOptions());
- }
+ if (projectOptionsVisible) dispatch(closeProjectOptions());
+ else dispatch(openProjectOptions());
};
const sidebarClass = classNames({
@@ -74,7 +68,7 @@ export default function SideBar() {
return (
- {ide.sidebarIsExpanded && (
+ {isExpanded && (
{
@@ -95,7 +89,7 @@ export default function SideBar() {
@@ -124,19 +118,37 @@ export default function SideBar() {
{t('Sidebar.AddFile')}
- {isAuthenticated && (
-
- {
+
+ {
+ if (isAuthenticated) {
dispatch(openUploadFileModal(rootFile.id));
setTimeout(() => dispatch(closeProjectOptions()), 300);
- }}
- >
- {t('Sidebar.UploadFile')}
-
-
- )}
+ }
+ }}
+ >
+ {!isAuthenticated && (
+
+
+
+ )}
+ {t('Sidebar.UploadFile')}
+ {!isAuthenticated && (
+
+ {t('Sidebar.UploadFileRequiresLogin')}
+
+ )}
+
+
)}
diff --git a/client/modules/IDE/reducers/editorAccessibility.js b/client/modules/IDE/reducers/editorAccessibility.js
index 94cc9ac54f..b0ba3ea6f1 100644
--- a/client/modules/IDE/reducers/editorAccessibility.js
+++ b/client/modules/IDE/reducers/editorAccessibility.js
@@ -29,10 +29,7 @@ const editorAccessibilitySlice = createSlice({
}
});
-export const {
- updateLintMessage,
- clearLintMessage,
- toggleForceDesktop
-} = editorAccessibilitySlice.actions;
+export const { updateLintMessage, clearLintMessage, toggleForceDesktop } =
+ editorAccessibilitySlice.actions;
export default editorAccessibilitySlice.reducer;
diff --git a/client/modules/Preview/EmbedFrame.jsx b/client/modules/Preview/EmbedFrame.jsx
index 2b6ac16720..09790ecc03 100644
--- a/client/modules/Preview/EmbedFrame.jsx
+++ b/client/modules/Preview/EmbedFrame.jsx
@@ -232,9 +232,10 @@ p5.prototype.registerMethod('afterSetup', p5.prototype.ensureAccessibleCanvas);`
}
const previewScripts = sketchDoc.createElement('script');
- previewScripts.src = `${
- window.location.origin
- }${getConfig('PREVIEW_SCRIPTS_URL', { nullishString: true })}`;
+ previewScripts.src = `${window.location.origin}${getConfig(
+ 'PREVIEW_SCRIPTS_URL',
+ { nullishString: true }
+ )}`;
previewScripts.setAttribute('crossorigin', '');
sketchDoc.head.appendChild(previewScripts);
diff --git a/client/routes.jsx b/client/routes.jsx
index 2195d95da2..bde0e8381d 100644
--- a/client/routes.jsx
+++ b/client/routes.jsx
@@ -26,10 +26,11 @@ import ProtectedSketchRoute from './protected-route';
* It is a nested property of `match`.
* Use an HOC to lift it up to top-level.
*/
-const withParams = (Component) => (props) => (
- // eslint-disable-next-line react/prop-types
-
-);
+const withParams = (Component) => (props) =>
+ (
+ // eslint-disable-next-line react/prop-types
+
+ );
/**
* Instead of updating all individual components, use this plug-in Route replacement.
* It passes the `params` as a top-level property
diff --git a/client/styles/abstracts/_functions.scss b/client/styles/abstracts/_functions.scss
index a4756f0803..57a5615086 100644
--- a/client/styles/abstracts/_functions.scss
+++ b/client/styles/abstracts/_functions.scss
@@ -2,16 +2,15 @@
$key: nth($keys, 1);
$length: length($keys);
$value: map-get($map, $key);
-
-
+
@if $value != null {
@if $length > 1 {
$rest: ();
-
+
@for $i from 2 through $length {
- $rest: append($rest, nth($keys, $i))
+ $rest: append($rest, nth($keys, $i));
}
-
+
@return map-fetch($value, $rest);
} @else {
@return $value;
@@ -23,4 +22,4 @@
@function getThemifyVariable($key) {
@return map-get($theme-map, $key);
-}
\ No newline at end of file
+}
diff --git a/client/styles/abstracts/_mixins.scss b/client/styles/abstracts/_mixins.scss
index 2bbd8dd3ab..84e2ee38f6 100644
--- a/client/styles/abstracts/_mixins.scss
+++ b/client/styles/abstracts/_mixins.scss
@@ -1,17 +1,21 @@
-@mixin themify ($themes: $themes) {
+@mixin themify($themes: $themes) {
@each $theme, $map in $themes {
.#{$theme} & {
// Define theme color
- $theme-map : (
- ) !global;
-
+ $theme-map: () !global;
+
@each $key, $submap in $map {
$value: map-fetch($themes, $theme '#{$key}');
- $theme-map: map-merge($theme-map, ($key: $value)) !global;
- }
-
+ $theme-map: map-merge(
+ $theme-map,
+ (
+ $key: $value
+ )
+ ) !global;
+ }
+
@content;
-
+
// reset theme color to null
$theme-map: null !global;
}
@@ -21,13 +25,17 @@
@mixin icon() {
@include themify() {
color: getThemifyVariable('icon-color');
- & g, & polygon, & path {
+ & g,
+ & polygon,
+ & path {
opacity: 1;
fill: getThemifyVariable('icon-color');
}
&:hover {
color: getThemifyVariable('icon-hover-color');
- & g, & polygon, & path {
+ & g,
+ & polygon,
+ & path {
opacity: 1;
fill: getThemifyVariable('icon-hover-color');
}
@@ -37,4 +45,4 @@
border: none;
cursor: pointer;
padding: 0;
-}
\ No newline at end of file
+}
diff --git a/client/styles/abstracts/_placeholders.scss b/client/styles/abstracts/_placeholders.scss
index 65e115a38a..ec4bad638a 100644
--- a/client/styles/abstracts/_placeholders.scss
+++ b/client/styles/abstracts/_placeholders.scss
@@ -1,249 +1,272 @@
-@use "sass:math";
+@use 'sass:math';
%toolbar-button {
- @include themify() {
- display: inline-block;
- height: #{math.div(44, $base-font-size)}rem;
- width: #{math.div(44, $base-font-size)}rem;
- text-align: center;
- border-radius: 100%;
- cursor: pointer;
- border: none;
- outline: none;
- background-color: getThemifyVariable('toolbar-button-background-color');
- color: getThemifyVariable('toolbar-button-color');
- & g, & path {
- fill: getThemifyVariable('toolbar-button-color');
- }
- &:hover {
- background-color: getThemifyVariable('button-background-hover-color');
- color: getThemifyVariable('button-hover-color');
+ @include themify() {
+ display: inline-block;
+ height: #{math.div(44, $base-font-size)}rem;
+ width: #{math.div(44, $base-font-size)}rem;
+ text-align: center;
+ border-radius: 100%;
+ cursor: pointer;
+ border: none;
+ outline: none;
+ background-color: getThemifyVariable('toolbar-button-background-color');
+ color: getThemifyVariable('toolbar-button-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('toolbar-button-color');
+ }
+ &:hover {
+ background-color: getThemifyVariable('button-background-hover-color');
+ color: getThemifyVariable('button-hover-color');
- & g, & path {
- fill: getThemifyVariable('button-hover-color');
- }
- }
- &--selected {
- background-color: getThemifyVariable('button-background-hover-color');
- & g, & path {
- fill: getThemifyVariable('button-hover-color');
- }
- }
- }
+ & g,
+ & path {
+ fill: getThemifyVariable('button-hover-color');
+ }
+ }
+ &--selected {
+ background-color: getThemifyVariable('button-background-hover-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('button-hover-color');
+ }
+ }
+ }
}
-%icon-toast{
- @include themify() {
- color: $toast-text-color
- & g, & path {
- fill: $toast-text-color
- }
- &:hover {
- color: getThemifyVariable('icon-toast-hover-color');
- & g, & path {
- opacity: 1;
- fill: getThemifyVariable('icon-toast-hover-color');
- }
- }
- }
- background-color: transparent;
- border: none;
- cursor: pointer;
- padding: 0;
+%icon-toast {
+ @include themify() {
+ color: $toast-text-color & g, & path {
+ fill: $toast-text-color;
+ }
+ &:hover {
+ color: getThemifyVariable('icon-toast-hover-color');
+ & g,
+ & path {
+ opacity: 1;
+ fill: getThemifyVariable('icon-toast-hover-color');
+ }
+ }
+ }
+ background-color: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 0;
}
%none-themify-icon {
- background-color: transparent;
- border: none;
- cursor: pointer;
- padding: 0;
+ background-color: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 0;
}
%none-themify-icon-with-hover {
- color: $medium-dark;
- & g, & path {
- fill: $medium-dark;
- }
- &:hover {
- color: $p5js-pink;
- & g, & path {
- opacity: 1;
- fill: $p5js-pink;
- }
- }
- background-color: transparent;
- border: none;
- cursor: pointer;
- padding: 0;
+ color: $medium-dark;
+ & g,
+ & path {
+ fill: $medium-dark;
+ }
+ &:hover {
+ color: $p5js-pink;
+ & g,
+ & path {
+ opacity: 1;
+ fill: $p5js-pink;
+ }
+ }
+ background-color: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 0;
}
%button {
- @include themify() {
- background-color: getThemifyVariable('button-background-color');
- color: getThemifyVariable('button-color');
- cursor: pointer;
- border: 2px solid getThemifyVariable('button-border-color');
- border-radius: 2px;
- padding: #{math.div(10, $base-font-size)}rem #{math.div(30, $base-font-size)}rem;
- & g, & path {
- fill: getThemifyVariable('button-color');
- opacity: 1;
- }
- &:not(disabled):hover {
- border-color: getThemifyVariable('button-background-hover-color');
- background-color: getThemifyVariable('button-background-hover-color');
- color: getThemifyVariable('button-hover-color');
- & g, & path {
- fill: getThemifyVariable('button-hover-color');
- }
- }
- &:not(disabled):active {
- border-color: getThemifyVariable('button-background-active-color');
- background-color: getThemifyVariable('button-background-active-color');
- color: getThemifyVariable('button-active-color');
- & g, & path {
- fill: getThemifyVariable('button-active-color');
- }
- }
- }
+ @include themify() {
+ background-color: getThemifyVariable('button-background-color');
+ color: getThemifyVariable('button-color');
+ cursor: pointer;
+ border: 2px solid getThemifyVariable('button-border-color');
+ border-radius: 2px;
+ padding: #{math.div(10, $base-font-size)}rem #{math.div(30, $base-font-size)}rem;
+ & g,
+ & path {
+ fill: getThemifyVariable('button-color');
+ opacity: 1;
+ }
+ &:not(disabled):hover {
+ border-color: getThemifyVariable('button-background-hover-color');
+ background-color: getThemifyVariable('button-background-hover-color');
+ color: getThemifyVariable('button-hover-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('button-hover-color');
+ }
+ }
+ &:not(disabled):active {
+ border-color: getThemifyVariable('button-background-active-color');
+ background-color: getThemifyVariable('button-background-active-color');
+ color: getThemifyVariable('button-active-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('button-active-color');
+ }
+ }
+ }
}
%preferences-button {
- @extend %toolbar-button;
- @include themify() {
- color: getThemifyVariable('primary-text-color');
- background-color: getThemifyVariable('preferences-button-background-color');
- padding: 0;
- margin-bottom: #{math.div(28, $base-font-size)}rem;
- line-height: #{math.div(50, $base-font-size)}rem;
- & g, & path {
- fill: getThemifyVariable('modal-button-color');
- }
- &:enabled:hover {
- background-color: getThemifyVariable('button-background-hover-color');
- color: getThemifyVariable('button-hover-color');
- & g, & path {
- fill: getThemifyVariable('button-hover-color');
- }
- }
- &:disabled:hover {
- cursor: not-allowed;
- background-color: getThemifyVariable('preferences-button-background-color');
- }
- }
+ @extend %toolbar-button;
+ @include themify() {
+ color: getThemifyVariable('primary-text-color');
+ background-color: getThemifyVariable('preferences-button-background-color');
+ padding: 0;
+ margin-bottom: #{math.div(28, $base-font-size)}rem;
+ line-height: #{math.div(50, $base-font-size)}rem;
+ & g,
+ & path {
+ fill: getThemifyVariable('modal-button-color');
+ }
+ &:enabled:hover {
+ background-color: getThemifyVariable('button-background-hover-color');
+ color: getThemifyVariable('button-hover-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('button-hover-color');
+ }
+ }
+ &:disabled:hover {
+ cursor: not-allowed;
+ background-color: getThemifyVariable(
+ 'preferences-button-background-color'
+ );
+ }
+ }
}
%preference-option {
- @include themify() {
- background-color: transparent;
- color: getThemifyVariable('inactive-text-color');
- &:hover {
- color: getThemifyVariable('heavy-text-color');
- }
- }
- font-size: #{math.div(12, $base-font-size)}rem;
- cursor: pointer;
- text-align: left;
- padding: 0;
- margin-bottom: #{math.div(5, $base-font-size)}rem;
- padding-right: #{math.div(5, $base-font-size)}rem;
- border: 0;
- list-style-type: none;
+ @include themify() {
+ background-color: transparent;
+ color: getThemifyVariable('inactive-text-color');
+ &:hover {
+ color: getThemifyVariable('heavy-text-color');
+ }
+ }
+ font-size: #{math.div(12, $base-font-size)}rem;
+ cursor: pointer;
+ text-align: left;
+ padding: 0;
+ margin-bottom: #{math.div(5, $base-font-size)}rem;
+ padding-right: #{math.div(5, $base-font-size)}rem;
+ border: 0;
+ list-style-type: none;
}
%modal {
- @include themify() {
- background-color: getThemifyVariable('modal-background-color');
- border: 1px solid getThemifyVariable('modal-border-color');
- box-shadow: 0 12px 12px getThemifyVariable('shadow-color');
- }
- border-radius: 2px;
- z-index: 20;
+ @include themify() {
+ background-color: getThemifyVariable('modal-background-color');
+ border: 1px solid getThemifyVariable('modal-border-color');
+ box-shadow: 0 12px 12px getThemifyVariable('shadow-color');
+ }
+ border-radius: 2px;
+ z-index: 20;
}
%hidden-element {
- position:absolute;
- left:-10000px;
- top:auto;
- width:1px;
- height:1px;
- overflow:hidden;
+ position: absolute;
+ left: -10000px;
+ top: auto;
+ width: 1px;
+ height: 1px;
+ overflow: hidden;
}
-
%link {
- @include themify() {
- text-decoration: none;
- color: getThemifyVariable('inactive-text-color');
- cursor: pointer;
- & g, & path {
- fill: getThemifyVariable('inactive-text-color');
- }
- &:hover {
- text-decoration: none;
- color: getThemifyVariable('heavy-text-color');
- & g, & path {
- fill: getThemifyVariable('heavy-text-color');
- }
- }
- }
+ @include themify() {
+ text-decoration: none;
+ color: getThemifyVariable('inactive-text-color');
+ cursor: pointer;
+ & g,
+ & path {
+ fill: getThemifyVariable('inactive-text-color');
+ }
+ &:hover {
+ text-decoration: none;
+ color: getThemifyVariable('heavy-text-color');
+ & g,
+ & path {
+ fill: getThemifyVariable('heavy-text-color');
+ }
+ }
+ }
}
%dropdown-open {
- @include themify() {
+ @include themify() {
background-color: map-get($theme-map, 'modal-background-color');
border: 1px solid map-get($theme-map, 'modal-border-color');
box-shadow: 0 0 18px 0 getThemifyVariable('shadow-color');
color: getThemifyVariable('primary-text-color');
- }
- text-align: left;
- width: #{math.div(180, $base-font-size)}rem;
- display: flex;
- position: absolute;
- flex-direction: column;
- top: 95%;
- height: auto;
- z-index: 9999;
- border-radius: #{math.div(6, $base-font-size)}rem;
- & li:first-child {
- border-radius: #{math.div(5, $base-font-size)}rem #{math.div(5, $base-font-size)}rem 0 0;
- }
- & li:last-child {
- border-radius: 0 0 #{math.div(5, $base-font-size)}rem #{math.div(5, $base-font-size)}rem;
- }
- & li {
- & button,
- & a {
- @include themify() {
- color: getThemifyVariable('primary-text-color');
- }
- width: 100%;
- text-align: left;
- padding: #{math.div(8, $base-font-size)}rem #{math.div(16, $base-font-size)}rem;
- }
- height: #{math.div(35, $base-font-size)}rem;
- cursor: pointer;
- display: flex;
- align-items: center;
- }
- & li:hover {
- @include themify() {
+ }
+ text-align: left;
+ width: #{math.div(180, $base-font-size)}rem;
+ display: flex;
+ position: absolute;
+ flex-direction: column;
+ top: 95%;
+ height: auto;
+ z-index: 9999;
+ border-radius: #{math.div(6, $base-font-size)}rem;
+ & li:first-child {
+ border-radius: #{math.div(5, $base-font-size)}rem #{math.div(
+ 5,
+ $base-font-size
+ )}rem 0 0;
+ }
+ & li:last-child {
+ border-radius: 0 0 #{math.div(5, $base-font-size)}rem #{math.div(
+ 5,
+ $base-font-size
+ )}rem;
+ }
+ & li {
+ & button,
+ & a {
+ @include themify() {
+ color: getThemifyVariable('primary-text-color');
+ }
+ width: 100%;
+ text-align: left;
+ padding: #{math.div(8, $base-font-size)}rem #{math.div(
+ 16,
+ $base-font-size
+ )}rem;
+ }
+ height: #{math.div(35, $base-font-size)}rem;
+ cursor: pointer;
+ display: flex;
+ align-items: center;
+ }
+ & li:hover {
+ @include themify() {
background-color: getThemifyVariable('button-background-hover-color');
- color: getThemifyVariable('button-hover-color')
- }
- & button, & a {
+ color: getThemifyVariable('button-hover-color');
+ }
+ & button,
+ & a {
@include themify() {
color: getThemifyVariable('button-hover-color');
}
}
- }
+ }
}
%dropdown-open-left {
- @extend %dropdown-open;
- left: 0;
+ @extend %dropdown-open;
+ left: 0;
}
%dropdown-open-right {
- @extend %dropdown-open;
- right: 0;
+ @extend %dropdown-open;
+ right: 0;
}
diff --git a/client/styles/abstracts/_variables.scss b/client/styles/abstracts/_variables.scss
index 361ad57a38..a2f03cdf14 100644
--- a/client/styles/abstracts/_variables.scss
+++ b/client/styles/abstracts/_variables.scss
@@ -6,27 +6,27 @@ $p5js-pink-opacity: #ed225d80;
$p5js-active-pink: #f10046;
$white: #fff;
$black: #000;
-$yellow: #F5DC23;
-$dodgerblue: #1E90FF;
-$p5-contrast-pink: #FFA9D9;
+$yellow: #f5dc23;
+$dodgerblue: #1e90ff;
+$p5-contrast-pink: #ffa9d9;
-$outline-color: #0F9DD7;
+$outline-color: #0f9dd7;
// Grayscale values
-$lightest: #FFF; // primary
-$lighter: #FBFBFB;
+$lightest: #fff; // primary
+$lighter: #fbfbfb;
-$light: #F0F0F0; // primary
-$medium-light: #D9D9D9;
-$middle-light: #A6A6A6;
+$light: #f0f0f0; // primary
+$medium-light: #d9d9d9;
+$middle-light: #a6a6a6;
// $middle-gray: #7D7D7D; // primary
$middle-gray: #747474; // primary
$middle-dark: #666;
-$medium-dark: #4D4D4D;
+$medium-dark: #4d4d4d;
$dark: #333; // primary
-$darker: #1C1C1C;
+$darker: #1c1c1c;
$darkest: #000;
$themes: (
@@ -61,7 +61,7 @@ $themes: (
console-input-background-color: $lightest,
console-color: $darker,
console-arrow-color: $middle-gray,
- console-active-arrow-color: #0071AD,
+ console-active-arrow-color: #0071ad,
console-header-background-color: $medium-light,
console-header-color: $darker,
ide-border-color: $medium-light,
@@ -84,14 +84,14 @@ $themes: (
error-color: $p5js-pink,
table-row-stripe-color: $medium-light,
table-row-stripe-color-alternate: $medium-light,
- codefold-icon-open: url("../images/triangle-arrow-down.svg?byUrl"),
- codefold-icon-closed: url("../images/triangle-arrow-right.svg?byUrl"),
+ codefold-icon-open: url('../images/triangle-arrow-down.svg?byUrl'),
+ codefold-icon-closed: url('../images/triangle-arrow-right.svg?byUrl'),
preferences-warning-color: $p5js-pink,
table-button-color: $lightest,
table-button-background-color: $middle-gray,
table-button-active-color: $lightest,
- table-button-background-active-color: #00A1D3,
+ table-button-background-active-color: #00a1d3,
table-button-hover-color: $lightest,
table-button-background-hover-color: $p5js-pink,
@@ -107,9 +107,9 @@ $themes: (
hint-background-color: $white,
hint-text-color: $dark,
hint-item-border-bottom-color: $white,
- hint-fun-text-color: #0B7CA9,
- hint-var-text-color: #D52889,
- hint-keyword-text-color: #7A5A3A,
+ hint-fun-text-color: #0b7ca9,
+ hint-var-text-color: #d52889,
+ hint-keyword-text-color: #7a5a3a,
hint-type-text-color: $medium-dark,
hint-arrow-color: $lightest,
hint-arrow-background-color: #ed225ddd,
@@ -119,17 +119,17 @@ $themes: (
hint-item-hover-background-color: #f4f4f4,
hint-item-active-text-color: $white,
hint-item-active-background-color: $middle-gray,
- hint-fun-active-border-bottom-color: #0B7CA9,
- hint-var-active-border-bottom-color: #D52889,
+ hint-fun-active-border-bottom-color: #0b7ca9,
+ hint-var-active-border-bottom-color: #d52889,
hint-item-active-type-text-color: $white,
hint-item-active-outline: none,
hint-item-active-outline-offset: 0,
hint-inline-text-color-light: $middle-light,
hint-inline-text-color: $middle-gray,
- admonition-border: #22C8ED,
- admonition-background: #E4F8FF,
- admonition-text: #075769,
+ admonition-border: #22c8ed,
+ admonition-background: #e4f8ff,
+ admonition-text: #075769
),
dark: (
logo-color: $p5js-pink,
@@ -162,7 +162,7 @@ $themes: (
console-input-background-color: $darker,
console-color: $lightest,
console-arrow-color: $medium-light,
- console-active-arrow-color: #097BB3,
+ console-active-arrow-color: #097bb3,
console-header-background-color: $medium-dark,
console-header-color: $lightest,
ide-border-color: $middle-dark,
@@ -185,14 +185,14 @@ $themes: (
error-color: $p5js-pink,
table-row-stripe-color: $dark,
table-row-stripe-color-alternate: $darker,
- codefold-icon-open: url("../images/triangle-arrow-down-white.svg?byUrl"),
- codefold-icon-closed: url("../images/triangle-arrow-right-white.svg?byUrl"),
+ codefold-icon-open: url('../images/triangle-arrow-down-white.svg?byUrl'),
+ codefold-icon-closed: url('../images/triangle-arrow-right-white.svg?byUrl'),
preferences-warning-color: $yellow,
table-button-color: $lightest,
table-button-background-color: $middle-gray,
table-button-active-color: $lightest,
- table-button-background-active-color: #00A1D3,
+ table-button-background-active-color: #00a1d3,
table-button-hover-color: $lightest,
table-button-background-hover-color: $p5js-pink,
@@ -206,9 +206,9 @@ $themes: (
hint-background-color: $darker,
hint-text-color: $light,
hint-item-border-bottom-color: $darker,
- hint-fun-text-color: #0F9DD7,
- hint-var-text-color: #DE4A9B,
- hint-keyword-text-color: #B58318,
+ hint-fun-text-color: #0f9dd7,
+ hint-var-text-color: #de4a9b,
+ hint-keyword-text-color: #b58318,
hint-type-text-color: $light,
hint-arrow-color: $lightest,
hint-arrow-background-color: #ed225ddd,
@@ -218,17 +218,17 @@ $themes: (
hint-item-hover-background-color: $medium-dark,
hint-item-active-text-color: $darker,
hint-item-active-background-color: #cfcfcf,
- hint-fun-active-border-bottom-color: #0F9DD7,
- hint-var-active-border-bottom-color: #DE4A9B,
+ hint-fun-active-border-bottom-color: #0f9dd7,
+ hint-var-active-border-bottom-color: #de4a9b,
hint-item-active-type-text-color: $darker,
hint-item-active-outline: none,
hint-item-active-outline-offset: 0,
hint-inline-text-color-light: $middle-gray,
hint-inline-text-color: #cfcfcf,
- admonition-border: #22C8ED,
- admonition-background: #105A7F,
- admonition-text: #FFFFFF,
+ admonition-border: #22c8ed,
+ admonition-background: #105a7f,
+ admonition-text: #ffffff
),
contrast: (
logo-color: $yellow,
@@ -284,14 +284,14 @@ $themes: (
error-color: $p5-contrast-pink,
table-row-stripe-color: $dark,
table-row-stripe-color-alternate: $darker,
- codefold-icon-open: url("../images/triangle-arrow-down-white.svg?byUrl"),
- codefold-icon-closed: url("../images/triangle-arrow-right-white.svg?byUrl"),
+ codefold-icon-open: url('../images/triangle-arrow-down-white.svg?byUrl'),
+ codefold-icon-closed: url('../images/triangle-arrow-right-white.svg?byUrl'),
preferences-warning-color: $yellow,
table-button-color: $dark,
table-button-background-color: $middle-gray,
table-button-active-color: $dark,
- table-button-background-active-color: #00FFFF,
+ table-button-background-active-color: #00ffff,
table-button-hover-color: $dark,
table-button-background-hover-color: $yellow,
@@ -305,13 +305,13 @@ $themes: (
hint-background-color: $darkest,
hint-text-color: $medium-light,
hint-item-border-bottom-color: $medium-dark,
- hint-fun-text-color: #00FFFF,
- hint-var-text-color: #FFA9D9,
- hint-keyword-text-color: #F5DC23,
+ hint-fun-text-color: #00ffff,
+ hint-var-text-color: #ffa9d9,
+ hint-keyword-text-color: #f5dc23,
hint-type-text-color: $middle-light,
hint-arrow-color: $darker,
- hint-arrow-background-color: #F5DC23DD,
- hint-arrow-background-active-color: #F5DC23,
+ hint-arrow-background-color: #f5dc23dd,
+ hint-arrow-background-active-color: #f5dc23,
hint-arrow-focus-outline-color: $lighter,
hint-no-link-background-color: $medium-dark,
hint-item-hover-background-color: $dark,
@@ -325,12 +325,11 @@ $themes: (
hint-inline-text-color-light: $middle-gray,
hint-inline-text-color: #cfcfcf,
- admonition-border: #22C8ED,
+ admonition-border: #22c8ed,
admonition-background: #000000,
- admonition-text: #ffffff,
+ admonition-text: #ffffff
)
);
$toast-background-color: $medium-dark;
$toast-text-color: $lightest;
-
diff --git a/client/styles/base/_base.scss b/client/styles/base/_base.scss
index 90e11ba208..17c364e16f 100644
--- a/client/styles/base/_base.scss
+++ b/client/styles/base/_base.scss
@@ -1,160 +1,158 @@
-@use "sass:math";
+@use 'sass:math';
* {
- box-sizing: border-box;
+ box-sizing: border-box;
}
html,
body {
- font-size: #{$base-font-size}px;
+ font-size: #{$base-font-size}px;
}
-
/* Styles for non-touch devices */
@media (hover: hover) and (pointer: fine) {
- /*Scrollbar theming */
- /* width */
- ::-webkit-scrollbar {
- width: 10px;
- }
- /* Track */
- ::-webkit-scrollbar-track {
- @include themify() {
- color: getThemifyVariable("modal-border-color");
- }
- }
- /* Handle */
- ::-webkit-scrollbar-thumb {
- background: #888;
- }
- /* Handle on hover */
- ::-webkit-scrollbar-thumb:hover {
- background: #555;
- }
+ /*Scrollbar theming */
+ /* width */
+ ::-webkit-scrollbar {
+ width: 10px;
+ }
+ /* Track */
+ ::-webkit-scrollbar-track {
+ @include themify() {
+ color: getThemifyVariable('modal-border-color');
+ }
+ }
+ /* Handle */
+ ::-webkit-scrollbar-thumb {
+ background: #888;
+ }
+ /* Handle on hover */
+ ::-webkit-scrollbar-thumb:hover {
+ background: #555;
+ }
}
body,
input,
textarea {
- @include themify() {
- color: getThemifyVariable("primary-text-color");
- }
+ @include themify() {
+ color: getThemifyVariable('primary-text-color');
+ }
}
body,
input,
textarea,
button {
- font-family: Montserrat, sans-serif;
+ font-family: Montserrat, sans-serif;
}
.root-app,
.app {
- min-height: 100%;
- height: 100vh;
+ min-height: 100%;
+ height: 100vh;
}
a {
- @include themify() {
- @extend %link;
- }
+ @include themify() {
+ @extend %link;
+ }
}
input,
button {
- font-size: 1rem;
+ font-size: 1rem;
}
input,
textarea {
- padding: #{math.div(5, $base-font-size)}rem;
- border: 1px solid;
- border-radius: 2px;
- padding: #{math.div(10, $base-font-size)}rem;
- @include themify() {
- color: getThemifyVariable("input-text-color");
- background-color: getThemifyVariable("input-background-color");
- border-color: getThemifyVariable("input-border-color");
- }
+ padding: #{math.div(5, $base-font-size)}rem;
+ border: 1px solid;
+ border-radius: 2px;
+ padding: #{math.div(10, $base-font-size)}rem;
+ @include themify() {
+ color: getThemifyVariable('input-text-color');
+ background-color: getThemifyVariable('input-background-color');
+ border-color: getThemifyVariable('input-border-color');
+ }
}
input::selection,
textarea::selection {
- @include themify() {
- color: getThemifyVariable("input-selection-text-color");
- background-color: getThemifyVariable("input-selection-background-color");
- }
+ @include themify() {
+ color: getThemifyVariable('input-selection-text-color');
+ background-color: getThemifyVariable('input-selection-background-color');
+ }
}
-button[type="submit"],
-input[type="submit"] {
- @include themify() {
- @extend %button;
- }
+button[type='submit'],
+input[type='submit'] {
+ @include themify() {
+ @extend %button;
+ }
}
-button[type="submit"]:disabled,
-input[type="submit"]:disabled {
- cursor: not-allowed;
+button[type='submit']:disabled,
+input[type='submit']:disabled {
+ cursor: not-allowed;
}
button {
- @include themify() {
- @extend %link;
- }
- background: transparent;
- border: none;
+ @include themify() {
+ @extend %link;
+ }
+ background: transparent;
+ border: none;
}
h1 {
- font-size: #{math.div(21, $base-font-size)}em;
+ font-size: #{math.div(21, $base-font-size)}em;
}
h2 {
- font-size: #{math.div(21, $base-font-size)}em;
+ font-size: #{math.div(21, $base-font-size)}em;
}
h3 {
- font-weight: normal;
- font-size: #{math.div(16, $base-font-size)}rem;
+ font-weight: normal;
+ font-size: #{math.div(16, $base-font-size)}rem;
}
h4 {
- font-weight: normal;
+ font-weight: normal;
}
h6 {
- font-weight: normal;
- font-size: #{math.div(12, $base-font-size)}rem;
+ font-weight: normal;
+ font-size: #{math.div(12, $base-font-size)}rem;
}
thead {
- text-align: left;
+ text-align: left;
}
th {
- text-align: left;
+ text-align: left;
}
a:focus,
button:focus,
input:focus,
textarea:focus {
- outline: none;
- box-shadow: 0 0 0 1px $outline-color;
+ outline: none;
+ box-shadow: 0 0 0 1px $outline-color;
}
// screen reader only class
// from https://www.scottohara.me/blog/2017/04/14/inclusively-hidden.html#hiding-content-visually
.sr-only:not(:focus):not(:active) {
- clip: rect(0 0 0 0);
- clip-path: inset(50%);
- height: 1px;
- overflow: hidden;
- position: absolute;
- white-space: nowrap;
- width: 1px;
+ clip: rect(0 0 0 0);
+ clip-path: inset(50%);
+ height: 1px;
+ overflow: hidden;
+ position: absolute;
+ white-space: nowrap;
+ width: 1px;
}
-
// Donate banner custom properties
body {
- --donate-banner-dark: #c01c4c;
- --donate-banner-background: url('https://foundation-donate-banner.netlify.app/p5.png');
-}
\ No newline at end of file
+ --donate-banner-dark: #c01c4c;
+ --donate-banner-background: url('https://foundation-donate-banner.netlify.app/p5.png');
+}
diff --git a/client/styles/base/_reset.scss b/client/styles/base/_reset.scss
index 33cf3b3281..a6dcf5bf9b 100644
--- a/client/styles/base/_reset.scss
+++ b/client/styles/base/_reset.scss
@@ -1,21 +1,24 @@
// At some point, I will put in a ~real~ reset, but for now
-html, body {
- margin: 0;
- padding: 0;
- min-height: 100%;
- height: 100%;
+html,
+body {
+ margin: 0;
+ padding: 0;
+ min-height: 100%;
+ height: 100%;
}
-ul, p {
- padding: 0;
- margin: 0;
+ul,
+p {
+ padding: 0;
+ margin: 0;
}
-h2, h3 {
- margin: 0;
+h2,
+h3 {
+ margin: 0;
}
ul {
list-style: none;
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_account.scss b/client/styles/components/_account.scss
index 469be83497..2e7dfbfa52 100644
--- a/client/styles/components/_account.scss
+++ b/client/styles/components/_account.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.account-settings__container {
@include themify() {
@@ -29,7 +29,6 @@
padding-bottom: #{math.div(15, $base-font-size)}rem;
}
-
.account__social-stack {
display: flex;
@media (max-width: 770px) {
@@ -37,7 +36,8 @@
align-items: center;
gap: #{math.div(15, $base-font-size)}rem;
- button, a {
+ button,
+ a {
width: 100% !important;
margin-right: 0;
}
diff --git a/client/styles/components/_api-key.scss b/client/styles/components/_api-key.scss
index 7e4e2af471..1db17471c2 100644
--- a/client/styles/components/_api-key.scss
+++ b/client/styles/components/_api-key.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.api-key-form__summary {
padding-top: #{math.div(25, $base-font-size)}rem;
@@ -48,32 +48,34 @@
}
.api-key-list__delete-button {
- width:#{math.div(20, $base-font-size)}rem;
- height:#{math.div(20, $base-font-size)}rem;
+ width: #{math.div(20, $base-font-size)}rem;
+ height: #{math.div(20, $base-font-size)}rem;
- text-align: center;
+ text-align: center;
- @include themify() {
- background-color: transparent;
- border: none;
- cursor: pointer;
- padding: 0;
- position: initial;
- left: 0;
- top: 0;
- & g, & path {
- opacity: 1;
- fill: getThemifyVariable('icon-color');
- }
+ @include themify() {
+ background-color: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 0;
+ position: initial;
+ left: 0;
+ top: 0;
+ & g,
+ & path {
+ opacity: 1;
+ fill: getThemifyVariable('icon-color');
}
+ }
}
.api-key-list__delete-button:hover {
@include themify() {
- & g, & path {
- opacity: 1;
- fill: getThemifyVariable('icon-hover-color');
- }
+ & g,
+ & path {
+ opacity: 1;
+ fill: getThemifyVariable('icon-hover-color');
+ }
}
}
diff --git a/client/styles/components/_asset-list.scss b/client/styles/components/_asset-list.scss
index f359c1ae3b..8499d7fd57 100644
--- a/client/styles/components/_asset-list.scss
+++ b/client/styles/components/_asset-list.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.asset-table-container {
overflow-y: auto;
@@ -8,7 +8,7 @@
.asset-table {
width: 100%;
-
+
max-height: 100%;
border-spacing: 0;
position: relative;
@@ -27,7 +27,7 @@
}
}
-.asset-table thead th:nth-child(1){
+.asset-table thead th:nth-child(1) {
padding-left: #{math.div(12, $base-font-size)}rem;
}
@@ -56,7 +56,7 @@
.asset-table thead {
font-size: #{math.div(12, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable('inactive-text-color')
+ color: getThemifyVariable('inactive-text-color');
}
}
@@ -73,7 +73,7 @@
.asset-table__total {
padding: 0 #{math.div(20, $base-font-size)}rem;
position: sticky;
- top: 0;
+ top: 0;
@include themify() {
background-color: getThemifyVariable('background-color');
}
diff --git a/client/styles/components/_asset-size.scss b/client/styles/components/_asset-size.scss
index d664415c37..c585b41902 100644
--- a/client/styles/components/_asset-size.scss
+++ b/client/styles/components/_asset-size.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.asset-size {
position: relative;
diff --git a/client/styles/components/_banner.scss b/client/styles/components/_banner.scss
index ae7eeb724e..7bde0da696 100644
--- a/client/styles/components/_banner.scss
+++ b/client/styles/components/_banner.scss
@@ -3,7 +3,7 @@
min-height: 2.2rem;
text-align: center;
padding: 1rem;
- background-color: #DFED33; // yellow from p5.js website
+ background-color: #dfed33; // yellow from p5.js website
border-bottom: 1px solid #000;
a {
@@ -23,10 +23,10 @@
.banner-close-button {
display: flex;
flex-direction: column;
- align-items: center;
+ align-items: center;
justify-content: center;
height: 20px;
- width:20px;
+ width: 20px;
float: right;
cursor: pointer;
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_collection-create.scss b/client/styles/components/_collection-create.scss
index 94e0546df3..a7454c5145 100644
--- a/client/styles/components/_collection-create.scss
+++ b/client/styles/components/_collection-create.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.collection-create {
padding: #{math.div(24, $base-font-size)}rem;
diff --git a/client/styles/components/_collection.scss b/client/styles/components/_collection.scss
index bc5f9db5db..402eeb22e2 100644
--- a/client/styles/components/_collection.scss
+++ b/client/styles/components/_collection.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.collection-container {
padding: #{math.div(24, $base-font-size)}rem #{math.div(66, $base-font-size)}rem;
@@ -6,9 +6,9 @@
flex: 1;
overflow: hidden;
display: flex;
- flex-direction:column;
+ flex-direction: column;
- @media (max-width:770px) {
+ @media (max-width: 770px) {
padding: 0;
}
}
@@ -28,7 +28,7 @@
.collection-metadata__columns {
display: flex;
- @media (max-width:770px) {
+ @media (max-width: 770px) {
flex-direction: column;
}
}
@@ -83,7 +83,9 @@
text-align: left;
}
-.collection-metadata__description .editable-input--has-value:not(:hover) .editable-input__label {
+.collection-metadata__description
+ .editable-input--has-value:not(:hover)
+ .editable-input__label {
@include themify() {
color: getThemifyVariable('primary-text-color');
}
@@ -132,9 +134,8 @@
min-height: 100%;
}
-
// maybe don't need this?
-[data-has-items=false] .collection-table-wrapper {
+[data-has-items='false'] .collection-table-wrapper {
display: flex;
justify-content: center;
align-items: center;
@@ -152,8 +153,8 @@
.collection-row__remove-button {
display: inline-block;
- width:#{math.div(35, $base-font-size)}rem;
- height:#{math.div(35, $base-font-size)}rem;
+ width: #{math.div(35, $base-font-size)}rem;
+ height: #{math.div(35, $base-font-size)}rem;
@include icon();
@include themify() {
// icon graphic
@@ -167,8 +168,8 @@
}
& svg {
- width:#{math.div(35, $base-font-size)}rem;
- height:#{math.div(35, $base-font-size)}rem;
+ width: #{math.div(35, $base-font-size)}rem;
+ height: #{math.div(35, $base-font-size)}rem;
}
&:hover,
diff --git a/client/styles/components/_console-input.scss b/client/styles/components/_console-input.scss
index ca0833c782..8eda2b33b5 100644
--- a/client/styles/components/_console-input.scss
+++ b/client/styles/components/_console-input.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.console__input {
width: 100%;
@@ -13,12 +13,12 @@
width: auto;
height: 38%;
@include themify() {
- & g,
- & polygon,
- & path {
- fill: getThemifyVariable('secondary-text-color');
- }
- }
+ & g,
+ & polygon,
+ & path {
+ fill: getThemifyVariable('secondary-text-color');
+ }
+ }
}
.console-active__arrow-container {
@@ -42,7 +42,7 @@
.console__editor .CodeMirror {
border: none;
- font-family: Inconsolata,monospace;
+ font-family: Inconsolata, monospace;
@include themify() {
background-color: getThemifyVariable('console-input-background-color');
}
@@ -52,4 +52,4 @@
color: getThemifyVariable('console-color');
}
}
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_console.scss b/client/styles/components/_console.scss
index 4e17fe1cea..d174deaa9e 100644
--- a/client/styles/components/_console.scss
+++ b/client/styles/components/_console.scss
@@ -1,121 +1,121 @@
-@use "sass:math";
+@use 'sass:math';
.preview-console {
- @include themify() {
- background: getThemifyVariable('console-background-color');
- border-color: getThemifyVariable('ide-border-color');
- }
- border-left: math.div(1, $base-font-size)rem solid;
- border-right: math.div(1, $base-font-size)rem solid;
- width: 100%;
- height: 100%;
- z-index: 1000;
- display: flex;
- flex-direction: column;
+ @include themify() {
+ background: getThemifyVariable('console-background-color');
+ border-color: getThemifyVariable('ide-border-color');
+ }
+ border-left: math.div(1, $base-font-size) rem solid;
+ border-right: math.div(1, $base-font-size) rem solid;
+ width: 100%;
+ height: 100%;
+ z-index: 1000;
+ display: flex;
+ flex-direction: column;
- & > * {
- position: relative;
- text-align: left;
- }
+ & > * {
+ position: relative;
+ text-align: left;
+ }
}
.preview-console__header {
- @include themify() {
- background-color: getThemifyVariable('console-header-background-color');
- color: getThemifyVariable('console-header-color');
- }
- min-height: #{math.div(30, $base-font-size)}rem;
- padding: #{math.div(5, $base-font-size)}rem;
- display: flex;
- justify-content: space-between;
- align-items: center;
+ @include themify() {
+ background-color: getThemifyVariable('console-header-background-color');
+ color: getThemifyVariable('console-header-color');
+ }
+ min-height: #{math.div(30, $base-font-size)}rem;
+ padding: #{math.div(5, $base-font-size)}rem;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
}
.preview-console__header-title {
- font-size: #{math.div(12, $base-font-size)}rem;
- font-weight: normal;
+ font-size: #{math.div(12, $base-font-size)}rem;
+ font-weight: normal;
}
.preview-console__messages {
- display: flex;
- flex: 1;
- flex-direction: column;
- overflow-y: auto;
- & div div div:first-child {
- height: unset;
+ display: flex;
+ flex: 1;
+ flex-direction: column;
+ overflow-y: auto;
+ & div div div:first-child {
+ height: unset;
line-height: unset;
- font-size: unset;
- }
+ font-size: unset;
+ }
}
.preview-console__collapse {
- padding-top: #{math.div(3, $base-font-size)}rem;
- @include icon();
- @include themify() {
- & g,
- & polygon,
- & path {
- fill: getThemifyVariable('secondary-text-color');
- }
- &:hover {
- & g,
- & polygon,
- & path {
- fill: getThemifyVariable('logo-color');
- }
- }
- }
- .preview-console--collapsed & {
- display: none;
- }
+ padding-top: #{math.div(3, $base-font-size)}rem;
+ @include icon();
+ @include themify() {
+ & g,
+ & polygon,
+ & path {
+ fill: getThemifyVariable('secondary-text-color');
+ }
+ &:hover {
+ & g,
+ & polygon,
+ & path {
+ fill: getThemifyVariable('logo-color');
+ }
+ }
+ }
+ .preview-console--collapsed & {
+ display: none;
+ }
}
.preview-console__expand {
- padding-top: #{math.div(3, $base-font-size)}rem;
- @include icon();
- @include themify() {
- & g,
- & polygon,
- & path {
- fill: getThemifyVariable('secondary-text-color');
- }
- &:hover {
- & g,
- & polygon,
- & path {
- fill: getThemifyVariable('logo-color');
- }
- }
- }
- display: none;
- .preview-console--collapsed & {
- display: inline-block;
- }
+ padding-top: #{math.div(3, $base-font-size)}rem;
+ @include icon();
+ @include themify() {
+ & g,
+ & polygon,
+ & path {
+ fill: getThemifyVariable('secondary-text-color');
+ }
+ &:hover {
+ & g,
+ & polygon,
+ & path {
+ fill: getThemifyVariable('logo-color');
+ }
+ }
+ }
+ display: none;
+ .preview-console--collapsed & {
+ display: inline-block;
+ }
}
.preview-console__header-buttons {
- display: flex;
- align-items: center;
+ display: flex;
+ align-items: center;
}
.preview-console__clear {
- @include themify() {
- @extend %link;
- color: getThemifyVariable('secondary-text-color');
- &:hover {
- color: getThemifyVariable('logo-color');
- }
- }
- background: transparent;
- border: none;
- padding-right: #{math.div(10, $base-font-size)}rem;
- .preview-console--collapsed & {
- display: none;
- }
+ @include themify() {
+ @extend %link;
+ color: getThemifyVariable('secondary-text-color');
+ &:hover {
+ color: getThemifyVariable('logo-color');
+ }
+ }
+ background: transparent;
+ border: none;
+ padding-right: #{math.div(10, $base-font-size)}rem;
+ .preview-console--collapsed & {
+ display: none;
+ }
}
.preview-console__body {
- display: flex;
- flex-direction: column;
- height: calc(100% - #{math.div(30, $base-font-size)}rem);
+ display: flex;
+ flex-direction: column;
+ height: calc(100% - #{math.div(30, $base-font-size)}rem);
}
diff --git a/client/styles/components/_copyable-input.scss b/client/styles/components/_copyable-input.scss
index 4db7690f9b..4d6cd2fd32 100644
--- a/client/styles/components/_copyable-input.scss
+++ b/client/styles/components/_copyable-input.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.copyable-input__value-container {
position: relative;
@@ -22,8 +22,8 @@
}
.copyable-input__label-container {
- display: flex;
- justify-content: space-between;
+ display: flex;
+ justify-content: space-between;
}
.copyable-input {
@@ -45,8 +45,7 @@
}
.tooltipped-n::before,
-.tooltipped::before
- {
+.tooltipped::before {
@include themify() {
color: getThemifyVariable('button-background-hover-color');
border-top-color: getThemifyVariable('button-background-hover-color');
diff --git a/client/styles/components/_dashboard-header.scss b/client/styles/components/_dashboard-header.scss
index 5d19b64cf0..88005b15bd 100644
--- a/client/styles/components/_dashboard-header.scss
+++ b/client/styles/components/_dashboard-header.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.dashboard-header {
padding: #{math.div(24, $base-font-size)}rem #{math.div(66, $base-font-size)}rem;
@@ -14,7 +14,10 @@
.dashboard-header__nav {
display: flex;
flex-direction: column;
- padding: #{math.div(10, $base-font-size)}rem #{math.div(16, $base-font-size)}rem;
+ padding: #{math.div(10, $base-font-size)}rem #{math.div(
+ 16,
+ $base-font-size
+ )}rem;
gap: #{math.div(10, $base-font-size)}rem;
.dashboard-header__tabs {
@@ -26,11 +29,11 @@
font-size: #{math.div(15, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
opacity: 0.7;
&.dashboard-header__tab--selected {
- color: getThemifyVariable("primary-text-color");
+ color: getThemifyVariable('primary-text-color');
opacity: 1;
}
}
@@ -79,13 +82,13 @@
width: 100%;
@include themify() {
- border-bottom: 1px solid getThemifyVariable("inactive-text-color");
+ border-bottom: 1px solid getThemifyVariable('inactive-text-color');
}
}
.dashboard-header__tab {
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
padding: 0;
margin-right: #{math.div(26, $base-font-size)}rem;
@media (max-width: 770px) {
@@ -113,8 +116,8 @@
&:hover,
&:focus,
&.dashboard-header__tab--selected {
- color: getThemifyVariable("primary-text-color");
- border-bottom-color: getThemifyVariable("nav-hover-color");
+ color: getThemifyVariable('primary-text-color');
+ border-bottom-color: getThemifyVariable('nav-hover-color');
cursor: pointer;
}
}
diff --git a/client/styles/components/_editable-input.scss b/client/styles/components/_editable-input.scss
index 2c6589d385..c3bb383add 100644
--- a/client/styles/components/_editable-input.scss
+++ b/client/styles/components/_editable-input.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.editable-input {
height: 70%;
@@ -16,7 +16,7 @@ button.editable-input__label {
fill: getThemifyVariable('inactive-text-color');
}
&:hover {
- color: getThemifyVariable('logo-color');
+ color: getThemifyVariable('logo-color');
& path {
fill: getThemifyVariable('logo-color');
}
diff --git a/client/styles/components/_editor.scss b/client/styles/components/_editor.scss
index 0aab1d4b9f..35d316778f 100644
--- a/client/styles/components/_editor.scss
+++ b/client/styles/components/_editor.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.CodeMirror {
font-family: Inconsolata, monospace;
@@ -13,7 +13,7 @@
width: #{math.div(32, $base-font-size)}rem;
left: #{math.div(-3, $base-font-size)}rem !important;
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
}
@@ -65,10 +65,10 @@ pre.CodeMirror-line {
.CodeMirror-lint-tooltip {
@include themify() {
- background-color: getThemifyVariable("modal-background-color");
- border: 1px solid getThemifyVariable("modal-border-color");
- box-shadow: 0 12px 12px getThemifyVariable("shadow-color");
- color: getThemifyVariable("primary-text-color");
+ background-color: getThemifyVariable('modal-background-color');
+ border: 1px solid getThemifyVariable('modal-border-color');
+ box-shadow: 0 12px 12px getThemifyVariable('shadow-color');
+ color: getThemifyVariable('primary-text-color');
}
border-radius: 2px;
font-family: Montserrat, sans-serif;
@@ -76,8 +76,8 @@ pre.CodeMirror-line {
.CodeMirror-gutters {
@include themify() {
- background-color: getThemifyVariable("editor-gutter-color");
- border-color: getThemifyVariable("ide-border-color");
+ background-color: getThemifyVariable('editor-gutter-color');
+ border-color: getThemifyVariable('ide-border-color');
}
// left: 0 !important;
width: #{math.div(48, $base-font-size)}rem;
@@ -92,7 +92,7 @@ pre.CodeMirror-line {
top: 0;
left: 50%;
margin-left: #{math.div(-552 * 0.5, $base-font-size)}rem;
-
+
@media (max-width: 770px) {
left: 0;
right: 0;
@@ -105,14 +105,15 @@ pre.CodeMirror-line {
width: 580px;
font-family: Montserrat, sans-serif;
- padding: #{math.div(8, $base-font-size)}rem #{math.div(10, $base-font-size)}rem #{math.div(5, $base-font-size)}rem #{math.div(9, $base-font-size)}rem;
+ padding: #{math.div(8, $base-font-size)}rem #{math.div(10, $base-font-size)}rem
+ #{math.div(5, $base-font-size)}rem #{math.div(9, $base-font-size)}rem;
border-radius: 2px;
@include themify() {
- background-color: getThemifyVariable("modal-background-color");
- box-shadow: 0 12px 12px 0 getThemifyVariable("shadow-color");
- border: solid 0.5px getThemifyVariable("modal-border-color");
+ background-color: getThemifyVariable('modal-background-color');
+ box-shadow: 0 12px 12px 0 getThemifyVariable('shadow-color');
+ border: solid 0.5px getThemifyVariable('modal-border-color');
}
}
@@ -191,11 +192,11 @@ pre.CodeMirror-line {
max-width: #{math.div(166, $base-font-size)}rem;
margin-bottom: #{math.div(4, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("input-text-color");
- background-color: getThemifyVariable("input-secondary-background-color");
- border: solid 0.5px getThemifyVariable("button-border-color");
+ color: getThemifyVariable('input-text-color');
+ background-color: getThemifyVariable('input-secondary-background-color');
+ border: solid 0.5px getThemifyVariable('button-border-color');
&::placeholder {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
}
}
@@ -235,7 +236,7 @@ pre.CodeMirror-line {
padding: #{math.div(2, $base-font-size)}rem #{math.div(7, $base-font-size)}rem;
border: 2px solid transparent;
&:hover {
- border-color: getThemifyVariable("button-border-color");
+ border-color: getThemifyVariable('button-border-color');
}
}
width: #{math.div(35, $base-font-size)}rem;
@@ -255,11 +256,11 @@ pre.CodeMirror-line {
@extend %hidden-element;
}
-[aria-checked="true"] {
+[aria-checked='true'] {
@include themify() {
- color: getThemifyVariable("heavy-text-color");
- background-color: getThemifyVariable("button-secondary-background-color");
- border-color: getThemifyVariable("button-border-color");
+ color: getThemifyVariable('heavy-text-color');
+ background-color: getThemifyVariable('button-secondary-background-color');
+ border-color: getThemifyVariable('button-border-color');
}
}
@@ -294,11 +295,7 @@ pre.CodeMirror-line {
// foldgutter
.CodeMirror-foldmarker {
- text-shadow:
- -1px 0 #ed225d,
- 0 1px #ed225d,
- 1px 0 #ed225d,
- 0 -1px #ed225d;
+ text-shadow: -1px 0 #ed225d, 0 1px #ed225d, 1px 0 #ed225d, 0 -1px #ed225d;
color: #fff;
/* background-color: rgba(237, 34, 93, 0.42); */
/* border-radius: 3px; */
@@ -319,10 +316,10 @@ pre.CodeMirror-line {
line-height: 1;
}
.CodeMirror-foldgutter-open:after {
- content: "\25BE";
+ content: '\25BE';
}
.CodeMirror-foldgutter-folded:after {
- content: "\25B8";
+ content: '\25B8';
}
.CodeMirror-foldgutter-open,
@@ -333,20 +330,20 @@ pre.CodeMirror-line {
.CodeMirror-foldgutter-open:after {
@include themify() {
- background-image: getThemifyVariable("codefold-icon-open");
+ background-image: getThemifyVariable('codefold-icon-open');
}
}
.CodeMirror-foldgutter-folded:after {
@include themify() {
- background-image: getThemifyVariable("codefold-icon-closed");
+ background-image: getThemifyVariable('codefold-icon-closed');
}
}
.CodeMirror-foldgutter-folded:after,
.CodeMirror-foldgutter-open:after {
background-size: 10px 10px;
- content: "";
+ content: '';
padding-left: 15px;
background-repeat: no-repeat;
background-position: center center;
@@ -380,7 +377,7 @@ pre.CodeMirror-line {
width: 100%;
position: absolute;
@include themify() {
- border: 1px solid getThemifyVariable("ide-border-color");
+ border: 1px solid getThemifyVariable('ide-border-color');
}
&.editor-holder--hidden .CodeMirror {
display: none;
@@ -393,7 +390,7 @@ pre.CodeMirror-line {
.editor__file-name {
@include themify() {
- color: getThemifyVariable("primary-text-color");
+ color: getThemifyVariable('primary-text-color');
}
height: #{math.div(29, $base-font-size)}rem;
padding-top: #{math.div(7, $base-font-size)}rem;
@@ -406,7 +403,7 @@ pre.CodeMirror-line {
.editor__library-version {
@include themify() {
- color: getThemifyVariable("primary-text-color");
+ color: getThemifyVariable('primary-text-color');
}
position: absolute;
top: 0;
@@ -427,7 +424,7 @@ pre.CodeMirror-line {
@extend %modal;
position: absolute;
@include themify() {
- background: getThemifyVariable("background-color");
+ background: getThemifyVariable('background-color');
}
& .CodeMirror-lines {
padding: 0;
diff --git a/client/styles/components/_error-modal.scss b/client/styles/components/_error-modal.scss
index c834b68c2a..d2c94ba0fa 100644
--- a/client/styles/components/_error-modal.scss
+++ b/client/styles/components/_error-modal.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.error-modal {
@extend %modal;
diff --git a/client/styles/components/_feedback.scss b/client/styles/components/_feedback.scss
index 47039b1dba..4769f9b494 100644
--- a/client/styles/components/_feedback.scss
+++ b/client/styles/components/_feedback.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.feedback__content {
display: flex;
@@ -36,4 +36,4 @@
@include themify() {
fill: getThemifyVariable('primary-text-color');
}
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_form-container.scss b/client/styles/components/_form-container.scss
index 0c48b7070b..238249f90a 100644
--- a/client/styles/components/_form-container.scss
+++ b/client/styles/components/_form-container.scss
@@ -1,84 +1,84 @@
-@use "sass:math";
+@use 'sass:math';
.form-container {
- text-align: center;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- flex: 1;
+ text-align: center;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ flex: 1;
- @media (max-width: 550px) {
- text-align: left;
- justify-content: start;
- }
+ @media (max-width: 550px) {
+ text-align: left;
+ justify-content: start;
+ }
}
.form-container--align-left {
- text-align: left;
+ text-align: left;
}
.form-container--align-top {
- height: unset;
+ height: unset;
}
.form-container__header {
- width: 100%;
- padding: #{math.div(15, $base-font-size)}rem #{math.div(34, $base-font-size)}rem;
- display: flex;
- justify-content: space-between;
+ width: 100%;
+ padding: #{math.div(15, $base-font-size)}rem #{math.div(34, $base-font-size)}rem;
+ display: flex;
+ justify-content: space-between;
}
.form-container__content {
- height: 100%;
- max-width: 90vw;
- display: flex;
- flex-direction: column;
- justify-content: center;
- align-items: center;
- margin-bottom: 20px;
+ height: 100%;
+ max-width: 90vw;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ margin-bottom: 20px;
}
.form-container--align-left .form-container__content {
- align-items: left;
+ align-items: left;
}
.form-container__title {
- font-weight: normal;
- @include themify() {
- color: getThemifyVariable("form-title-color");
- }
+ font-weight: normal;
+ @include themify() {
+ color: getThemifyVariable('form-title-color');
+ }
- @media (max-width: 770px) {
- display: none;
- }
+ @media (max-width: 770px) {
+ display: none;
+ }
}
.form-container__context {
- @include themify() {
- color: getThemifyVariable("secondary-text-color");
- }
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color');
+ }
}
.form-container__divider {
- padding: #{math.div(20, $base-font-size)}rem 0;
+ padding: #{math.div(20, $base-font-size)}rem 0;
- @media (max-width: 770px) {
- text-align: center;
- }
+ @media (max-width: 770px) {
+ text-align: center;
+ }
}
.form-container__logo-button {
- @include icon();
+ @include icon();
}
.form-container__exit-button {
- @include icon();
+ @include icon();
}
.form-container__stack > * + * {
- margin-top: #{math.div(10, $base-font-size)}rem;
+ margin-top: #{math.div(10, $base-font-size)}rem;
}
.form__navigation-options a {
- font-weight: bold;
- }
+ font-weight: bold;
+}
diff --git a/client/styles/components/_forms.scss b/client/styles/components/_forms.scss
index 7520eae77d..5e7f5906fd 100644
--- a/client/styles/components/_forms.scss
+++ b/client/styles/components/_forms.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.form-error {
display: block;
@@ -7,7 +7,7 @@
font-size: #{math.div(12, $base-font-size)}rem;
text-align: left;
@include themify() {
- color: getThemifyVariable("error-color");
+ color: getThemifyVariable('error-color');
}
}
@@ -29,7 +29,7 @@
margin-top: #{math.div(16, $base-font-size)}rem;
font-size: #{math.div(12, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("form-navigation-options-color");
+ color: getThemifyVariable('form-navigation-options-color');
}
@media (max-width: 550px) {
@@ -49,7 +49,7 @@
margin-bottom: #{math.div(7, $base-font-size)}rem;
display: block;
@include themify() {
- color: getThemifyVariable("form-secondary-title-color");
+ color: getThemifyVariable('form-secondary-title-color');
}
}
@@ -63,10 +63,10 @@
height: #{math.div(40, $base-font-size)}rem;
font-size: #{math.div(16, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("form-input-text-color");
- background-color: getThemifyVariable("input-background-color");
+ color: getThemifyVariable('form-input-text-color');
+ background-color: getThemifyVariable('input-background-color');
}
-
+
@media (max-width: 770px) {
max-width: 100%;
width: 100%;
@@ -83,13 +83,12 @@
font-size: #{math.div(30, $base-font-size)}rem;
position: absolute;
right: 0px;
-
+
& svg {
transform: translateY(10%);
}
}
-
.form__input[type='password']::-ms-reveal {
display: none;
}
@@ -101,7 +100,7 @@
.form__input::placeholder {
@include themify() {
- color: getThemifyVariable("form-input-placeholder-text-color");
+ color: getThemifyVariable('form-input-placeholder-text-color');
}
}
@@ -115,11 +114,11 @@
.form__status {
@include themify() {
- color: getThemifyVariable("form-navigation-options-color");
+ color: getThemifyVariable('form-navigation-options-color');
}
}
-.form [type="submit"] {
+.form [type='submit'] {
margin-left: auto;
margin-right: auto;
}
diff --git a/client/styles/components/_hints.scss b/client/styles/components/_hints.scss
index 7084b460e7..5dc2ead78c 100644
--- a/client/styles/components/_hints.scss
+++ b/client/styles/components/_hints.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.CodeMirror-hints {
position: absolute;
@@ -10,7 +10,7 @@
padding: 0;
box-shadow: 0 0 #{math.div(18, $base-font-size)}rem 0 rgba(0, 0, 0, 0.16);
- border: #{math.div(1, $base-font-size)}rem solid #A6A6A6;
+ border: #{math.div(1, $base-font-size)}rem solid #a6a6a6;
font-size: 100%;
font-family: Inconsolata, monospace;
@@ -26,7 +26,8 @@
.CodeMirror-hint {
color: getThemifyVariable('hint-text-color');
- border-bottom: #{math.div(1, $base-font-size)}rem solid getThemifyVariable('hint-item-border-bottom-color');
+ border-bottom: #{math.div(1, $base-font-size)}rem solid
+ getThemifyVariable('hint-item-border-bottom-color');
}
.hint-container {
@@ -98,34 +99,39 @@
width: calc(100% - 1rem); // Match padding
box-sizing: border-box;
}
-
- .fun-name, .obj-name {
+
+ .fun-name,
+ .obj-name {
color: getThemifyVariable('hint-fun-text-color');
}
-
- .var-name, .boolean-name {
+
+ .var-name,
+ .boolean-name {
color: getThemifyVariable('hint-var-text-color');
}
.keyword-name {
color: getThemifyVariable('hint-keyword-text-color');
}
-
+
.hint-type {
color: getThemifyVariable('hint-type-text-color');
margin-right: #{math.div(10, $base-font-size)}rem;
}
-
+
a {
color: getThemifyVariable('hint-arrow-color');
background: getThemifyVariable('hint-arrow-background-color');
- &:hover, &:active, &.focused-hint-link {
+ &:hover,
+ &:active,
+ &.focused-hint-link {
background: getThemifyVariable('hint-arrow-background-active-color');
}
&.focused-hint-link {
- outline: #{math.div(3, $base-font-size)}rem solid getThemifyVariable('hint-arrow-focus-outline-color');
+ outline: #{math.div(3, $base-font-size)}rem solid
+ getThemifyVariable('hint-arrow-focus-outline-color');
outline-offset: #{math.div(-3, $base-font-size)}rem;
}
}
@@ -134,7 +140,7 @@
background: getThemifyVariable('hint-no-link-background-color');
pointer-events: none;
}
-
+
li.CodeMirror-hint-active:not(.unfocused) {
background: getThemifyVariable('hint-item-active-background-color');
outline: getThemifyVariable('hint-item-active-outline');
@@ -152,23 +158,26 @@
color: getThemifyVariable('hint-item-active-text-color');
}
- .fun-name, .obj-name {
+ .fun-name,
+ .obj-name {
background-color: getThemifyVariable('hint-fun-text-color');
}
-
- .var-name, .boolean-name {
+
+ .var-name,
+ .boolean-name {
background-color: getThemifyVariable('hint-var-text-color');
}
.keyword-name {
background-color: getThemifyVariable('hint-keyword-text-color');
}
-
- .hint-type, .plain-hint-item {
+
+ .hint-type,
+ .plain-hint-item {
color: getThemifyVariable('hint-item-active-type-text-color');
}
}
-
+
.CodeMirror-hint:hover:not(.CodeMirror-hint-active) {
background: getThemifyVariable('hint-item-hover-background-color');
}
@@ -190,7 +199,8 @@
z-index: 999;
}
- &:only-child, &:last-child {
+ &:only-child,
+ &:last-child {
border-bottom: none !important;
}
@@ -199,8 +209,9 @@
width: 100%;
height: 100%;
}
-
- .hint-name, .plain-hint-item {
+
+ .hint-name,
+ .plain-hint-item {
display: flex;
align-items: center;
padding: 0 0.5rem;
@@ -209,7 +220,7 @@
line-height: 100%;
font-weight: bold;
}
-
+
.hint-type {
margin: 0.5rem 2.4rem 0.5rem auto;
font-size: 1rem;
@@ -220,8 +231,9 @@
.hint-hidden {
@extend %hidden-element;
}
-
- a, .no-link-placeholder {
+
+ a,
+ .no-link-placeholder {
// position: absolute;
top: 0;
right: 0;
@@ -235,8 +247,9 @@
outline: none;
z-index: 1;
}
-
- a:focus, a:active {
+
+ a:focus,
+ a:active {
outline: 0;
}
}
@@ -272,5 +285,7 @@
}
@keyframes inline-hint-caret-blink {
- 50% { border-color: transparent; }
+ 50% {
+ border-color: transparent;
+ }
}
diff --git a/client/styles/components/_keyboard-shortcuts.scss b/client/styles/components/_keyboard-shortcuts.scss
index ce0f4a344a..b1aa0e6829 100644
--- a/client/styles/components/_keyboard-shortcuts.scss
+++ b/client/styles/components/_keyboard-shortcuts.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.keyboard-shortcuts {
padding: #{math.div(20, $base-font-size)}rem;
@@ -28,7 +28,7 @@
padding: #{math.div(3, $base-font-size)}rem;
min-inline-size: max-content;
@include themify {
- border: 1px solid getThemifyVariable("button-border-color");
+ border: 1px solid getThemifyVariable('button-border-color');
border-radius: 3px;
}
}
@@ -47,7 +47,7 @@
.keyboard-shortcuts__title:not(:first-of-type) {
@include themify() {
- border-top: 1px dashed getThemifyVariable("button-border-color");
+ border-top: 1px dashed getThemifyVariable('button-border-color');
padding-top: #{math.div(10, $base-font-size)}rem;
}
}
diff --git a/client/styles/components/_modal.scss b/client/styles/components/_modal.scss
index 9942b9887e..31ba6f1d99 100644
--- a/client/styles/components/_modal.scss
+++ b/client/styles/components/_modal.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.modal {
position: absolute;
@@ -38,15 +38,18 @@
margin-bottom: #{math.div(20, $base-font-size)}rem;
}
-.new-folder-form__input-wrapper, .new-file-form__input-wrapper {
+.new-folder-form__input-wrapper,
+.new-file-form__input-wrapper {
display: flex;
}
-.new-file-form__name-label, .new-folder-form__name-label {
+.new-file-form__name-label,
+.new-folder-form__name-label {
@extend %hidden-element;
}
-.new-file-form__name-input, .new-folder-form__name-input {
+.new-file-form__name-input,
+.new-folder-form__name-input {
margin-right: #{math.div(10, $base-font-size)}rem;
flex: 1;
}
diff --git a/client/styles/components/_nav.scss b/client/styles/components/_nav.scss
index 5d597596ac..b0eacdb70f 100644
--- a/client/styles/components/_nav.scss
+++ b/client/styles/components/_nav.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.nav {
height: #{math.div(42, $base-font-size)}rem;
@@ -27,7 +27,7 @@
.nav__menubar {
display: flex;
flex-direction: row;
- width:100%;
+ width: 100%;
justify-content: space-between;
}
@@ -57,11 +57,11 @@
}
// base focus styles
-.nav__item button:focus {
+.nav__item button:focus {
@include themify() {
background-color: getThemifyVariable('nav-hover-color');
}
-
+
.nav__item-header {
@include themify() {
color: getThemifyVariable('button-hover-color');
@@ -73,10 +73,9 @@
@include themify() {
fill: getThemifyVariable('button-hover-color');
}
- }
+ }
}
-
.nav__dropdown-item {
& button:focus,
& a:focus {
@@ -131,8 +130,9 @@
color: getThemifyVariable('button-hover-color');
}
}
-
- & g, & path {
+
+ & g,
+ & path {
@include themify() {
fill: getThemifyVariable('nav-hover-color');
}
@@ -150,7 +150,8 @@
@include themify() {
color: getThemifyVariable('nav-hover-color');
}
- & g, & path {
+ & g,
+ & path {
@include themify() {
fill: getThemifyVariable('nav-hover-color');
}
@@ -158,17 +159,17 @@
}
.nav__item-header-triangle {
- margin-left: #{math.div(5, $base-font-size)}rem;
+ margin-left: #{math.div(5, $base-font-size)}rem;
}
.nav__dropdown {
@include themify() {
- color: getThemifyVariable('nav-hover-color');
- }
+ color: getThemifyVariable('nav-hover-color');
+ }
}
.nav__item-header-triangle {
- margin-left: #{math.div(5, $base-font-size)}rem;
+ margin-left: #{math.div(5, $base-font-size)}rem;
}
.nav__dropdown {
@@ -232,24 +233,19 @@
}
.svg__logo {
-
@include themify() {
// Set background color of the logo
background-color: getThemifyVariable('logo-color');
}
-
}
-.svg__logo g path{
-
+.svg__logo g path {
@include themify() {
// Set internal color of the logo;
fill: getThemifyVariable('logo-background-color');
}
-
}
-
.nav__keyboard-shortcut {
font-size: #{math.div(12, $base-font-size)}rem;
font-family: Inconsololata, monospace;
@@ -266,7 +262,8 @@
}
.nav__back-icon {
- & g, & path {
+ & g,
+ & path {
opacity: 1;
@include themify() {
fill: getThemifyVariable('inactive-text-color');
diff --git a/client/styles/components/_new-password.scss b/client/styles/components/_new-password.scss
index 735e0ff76d..e15865567f 100644
--- a/client/styles/components/_new-password.scss
+++ b/client/styles/components/_new-password.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.new-password-form {
.new-password--invalid & {
diff --git a/client/styles/components/_overlay.scss b/client/styles/components/_overlay.scss
index 8cacda4b4f..de457c1f08 100644
--- a/client/styles/components/_overlay.scss
+++ b/client/styles/components/_overlay.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.overlay {
position: fixed;
@@ -37,7 +37,7 @@
}
}
-.overlay__body:has(.collection-create){
+.overlay__body:has(.collection-create) {
max-height: none;
}
diff --git a/client/styles/components/_p5-contrast-codemirror-theme.scss b/client/styles/components/_p5-contrast-codemirror-theme.scss
index 93c604d0cc..d07806d9a6 100644
--- a/client/styles/components/_p5-contrast-codemirror-theme.scss
+++ b/client/styles/components/_p5-contrast-codemirror-theme.scss
@@ -10,21 +10,21 @@
//light gray: #f4f4f4
//dark gray: #b5b5b5
-@use "sass:math";
+@use 'sass:math';
-$p5-contrast-black: #1C1C1C;
-$p5-contrast-gray: #A0A0A0;
-$p5-contrast-white: #FDFDFD;
+$p5-contrast-black: #1c1c1c;
+$p5-contrast-gray: #a0a0a0;
+$p5-contrast-white: #fdfdfd;
$p5-contrast-darkgray: #333333;
-$p5-contrast-lightgray: #C1C1C1;
-$p5-contrast-blue: #00FFFF;
-$p5-contrast-green: #2DE9B6;
-$p5-contrast-yellow: #F5DC23;
-$p5-contrast-orange: #FFA95D;
-$p5-contrast-pink: #FFA9D9;
+$p5-contrast-lightgray: #c1c1c1;
+$p5-contrast-blue: #00ffff;
+$p5-contrast-green: #2de9b6;
+$p5-contrast-yellow: #f5dc23;
+$p5-contrast-orange: #ffa95d;
+$p5-contrast-pink: #ffa9d9;
$p5-contrast-gutter: #454545;
-$p5-contrast-number: #FDFDFD;
+$p5-contrast-number: #fdfdfd;
$p5-contrast-selected: $middle-dark;
$p5-contrast-activeline: #999999;
@@ -82,10 +82,22 @@ $p5-contrast-activeline: #999999;
}
.cm-s-p5-contrast {
- .CodeMirror-selected { background: $p5-contrast-selected; }
- .CodeMirror-focused .CodeMirror-selected { background: $p5-contrast-selected; }
- .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: $p5-contrast-selected; }
- .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: $p5-contrast-selected; }
+ .CodeMirror-selected {
+ background: $p5-contrast-selected;
+ }
+ .CodeMirror-focused .CodeMirror-selected {
+ background: $p5-contrast-selected;
+ }
+ .CodeMirror-line::selection,
+ .CodeMirror-line > span::selection,
+ .CodeMirror-line > span > span::selection {
+ background: $p5-contrast-selected;
+ }
+ .CodeMirror-line::-moz-selection,
+ .CodeMirror-line > span::-moz-selection,
+ .CodeMirror-line > span > span::-moz-selection {
+ background: $p5-contrast-selected;
+ }
}
.cm-s-p5-contrast .CodeMirror-activeline-background {
diff --git a/client/styles/components/_p5-dark-codemirror-theme.scss b/client/styles/components/_p5-dark-codemirror-theme.scss
index 77940fa188..2115519b22 100644
--- a/client/styles/components/_p5-dark-codemirror-theme.scss
+++ b/client/styles/components/_p5-dark-codemirror-theme.scss
@@ -10,16 +10,16 @@
//light gray: #f4f4f4
//dark gray: #b5b5b5
-$p5-dark-lightbrown: #A67F59;
-$p5-light-green: #42F48F;
-$p5-dark-black: #1C1C1C;
-$p5-dark-pink: #DE4A9B;
-$p5-dark-gray: #9B9B9B;
-$p5-dark-lightblue: #0F9DD7;
+$p5-dark-lightbrown: #a67f59;
+$p5-light-green: #42f48f;
+$p5-dark-black: #1c1c1c;
+$p5-dark-pink: #de4a9b;
+$p5-dark-gray: #9b9b9b;
+$p5-dark-lightblue: #0f9dd7;
$p5-dark-darkblue: #318094;
-$p5-dark-white: #FDFDFD;
-$p5-dark-orange: #EE9900;
-$p5-dark-lightgray: #E0D7D1;
+$p5-dark-white: #fdfdfd;
+$p5-dark-orange: #ee9900;
+$p5-dark-lightgray: #e0d7d1;
$p5-dark-darkgray: #666666;
$p5-dark-green: #58a10b;
$p5-dark-goldbrown: #b58318;
@@ -85,10 +85,22 @@ $p5-dark-error: #df3a3d;
}
.cm-s-p5-dark {
- .CodeMirror-selected { background: $p5-dark-selected; }
- .CodeMirror-focused .CodeMirror-selected { background: $p5-dark-selected; }
- .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: $p5-dark-selected; }
- .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: $p5-dark-selected; }
+ .CodeMirror-selected {
+ background: $p5-dark-selected;
+ }
+ .CodeMirror-focused .CodeMirror-selected {
+ background: $p5-dark-selected;
+ }
+ .CodeMirror-line::selection,
+ .CodeMirror-line > span::selection,
+ .CodeMirror-line > span > span::selection {
+ background: $p5-dark-selected;
+ }
+ .CodeMirror-line::-moz-selection,
+ .CodeMirror-line > span::-moz-selection,
+ .CodeMirror-line > span > span::-moz-selection {
+ background: $p5-dark-selected;
+ }
}
.cm-s-p5-dark .CodeMirror-activeline-background {
diff --git a/client/styles/components/_p5-light-codemirror-theme.scss b/client/styles/components/_p5-light-codemirror-theme.scss
index c2e8062865..767192f445 100644
--- a/client/styles/components/_p5-light-codemirror-theme.scss
+++ b/client/styles/components/_p5-light-codemirror-theme.scss
@@ -10,16 +10,15 @@
//light gray: #f4f4f4
//dark gray: #b5b5b5
-$p5-light-brown: #7A5A3A;
+$p5-light-brown: #7a5a3a;
$p5-light-black: #333333;
-$p5-light-pink: #D52889;
+$p5-light-pink: #d52889;
$p5-light-gray: #666;
-$p5-light-blue: #0B7CA9;
+$p5-light-blue: #0b7ca9;
$p5-light-white: $lighter;
-$p5-light-orange: #A06801;
+$p5-light-orange: #a06801;
$p5-light-lightgray: $middle-gray;
-$p5-light-green: #47820A;
-
+$p5-light-green: #47820a;
$p5-light-gutter: #f4f4f4;
$p5-light-number: #b5b5b5;
@@ -80,10 +79,22 @@ $p5-light-activeline: rgb(207, 207, 207);
}
.cm-s-p5-light {
- .CodeMirror-selected { background: $p5-light-selected; }
- .CodeMirror-focused .CodeMirror-selected { background: $p5-light-selected; }
- .CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: $p5-light-selected; }
- .CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: $p5-light-selected; }
+ .CodeMirror-selected {
+ background: $p5-light-selected;
+ }
+ .CodeMirror-focused .CodeMirror-selected {
+ background: $p5-light-selected;
+ }
+ .CodeMirror-line::selection,
+ .CodeMirror-line > span::selection,
+ .CodeMirror-line > span > span::selection {
+ background: $p5-light-selected;
+ }
+ .CodeMirror-line::-moz-selection,
+ .CodeMirror-line > span::-moz-selection,
+ .CodeMirror-line > span > span::-moz-selection {
+ background: $p5-light-selected;
+ }
}
.cm-s-p5-light .CodeMirror-activeline-background {
diff --git a/client/styles/components/_preferences.scss b/client/styles/components/_preferences.scss
index e0830f3543..45bc215d7c 100644
--- a/client/styles/components/_preferences.scss
+++ b/client/styles/components/_preferences.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.preferences {
width: 100%;
@@ -6,7 +6,8 @@
max-width: 100%;
max-height: 100%;
z-index: 9999;
- padding: 0 #{math.div(20, $base-font-size)}rem #{math.div(2, $base-font-size)}rem #{math.div(20, $base-font-size)}rem;
+ padding: 0 #{math.div(20, $base-font-size)}rem #{math.div(2, $base-font-size)}rem
+ #{math.div(20, $base-font-size)}rem;
display: flex;
flex-direction: column;
outline: none;
@@ -46,7 +47,7 @@
padding-bottom: #{math.div(12, $base-font-size)}rem;
& + & {
@include themify() {
- border-top: 1px dashed getThemifyVariable("button-border-color");
+ border-top: 1px dashed getThemifyVariable('button-border-color');
}
}
}
@@ -60,7 +61,7 @@
.preference__subtitle {
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
width: 100%;
margin-bottom: #{math.div(10, $base-font-size)}rem;
@@ -91,9 +92,9 @@
.preference__value {
@include themify() {
border: #{math.div(1, $base-font-size)}rem solid
- getThemifyVariable("button-border-color");
+ getThemifyVariable('button-border-color');
// background-color: getThemifyVariable("button-background-color");
- color: getThemifyVariable("input-text-color");
+ color: getThemifyVariable('input-text-color');
background-color: getThemifyVariable('input-background-color');
}
text-align: center;
@@ -109,12 +110,15 @@
.preference__label {
@include themify() {
- color: getThemifyVariable("secondary-text-color");
+ color: getThemifyVariable('secondary-text-color');
&:hover {
- color: getThemifyVariable("heavy-text-color");
+ color: getThemifyVariable('heavy-text-color');
}
}
- margin: #{math.div(-15, $base-font-size)}rem 0 0 #{math.div(-5, $base-font-size)}rem;
+ margin: #{math.div(-15, $base-font-size)}rem 0 0 #{math.div(
+ -5,
+ $base-font-size
+ )}rem;
font-size: #{math.div(9, $base-font-size)}rem;
width: #{math.div(44, $base-font-size)}rem;
}
@@ -122,13 +126,13 @@
.react-tabs__tab--selected {
@include themify() {
border-bottom: #{math.div(4, $base-font-size)}rem solid
- getThemifyVariable("button-background-hover-color");
+ getThemifyVariable('button-background-hover-color');
}
}
.react-tabs__tab--selected .preference__subheading {
@include themify() {
- color: getThemifyVariable("primary-text-color");
+ color: getThemifyVariable('primary-text-color');
}
}
@@ -144,7 +148,7 @@
&:hover {
@include themify() {
border-bottom: #{math.div(4, $base-font-size)}rem solid
- getThemifyVariable("button-background-hover-color");
+ getThemifyVariable('button-background-hover-color');
}
}
}
@@ -167,8 +171,8 @@
@extend %hidden-element;
}
-input[type="number"]::-webkit-inner-spin-button,
-input[type="number"]::-webkit-outer-spin-button {
+input[type='number']::-webkit-inner-spin-button,
+input[type='number']::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
@@ -191,7 +195,7 @@ input[type="number"]::-webkit-outer-spin-button {
@include themify() {
@extend %preference-option;
&:hover {
- color: getThemifyVariable("button-background-hover-color");
+ color: getThemifyVariable('button-background-hover-color');
}
}
margin-left: #{math.div(30, $base-font-size)}rem;
@@ -208,13 +212,13 @@ input[type="number"]::-webkit-outer-spin-button {
.preference__radio-button:checked + .preference__option {
@include themify() {
//for some reason this won't work for getThemifyVariable
- color: map-get($theme-map, "heavy-text-color");
+ color: map-get($theme-map, 'heavy-text-color');
font-weight: bold;
}
}
.preference__radio-button:focus + .preference__option,
.preference__radio-button:focus-visible + .preference__option {
- outline: 2px solid $dodgerblue;
+ outline: 2px solid $dodgerblue;
outline-offset: 2px;
border-radius: 4px;
}
@@ -226,4 +230,3 @@ input[type="number"]::-webkit-outer-spin-button {
.preference__option.preference__canvas:not(:last-child) {
padding-right: #{math.div(14, $base-font-size)}rem;
}
-
diff --git a/client/styles/components/_preview-frame.scss b/client/styles/components/_preview-frame.scss
index 81d497bb05..46335f9bdb 100644
--- a/client/styles/components/_preview-frame.scss
+++ b/client/styles/components/_preview-frame.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.preview-frame-holder {
display: flex;
diff --git a/client/styles/components/_preview-nav.scss b/client/styles/components/_preview-nav.scss
index 82cb626cc5..c8570bf48d 100644
--- a/client/styles/components/_preview-nav.scss
+++ b/client/styles/components/_preview-nav.scss
@@ -1,11 +1,11 @@
-@use "sass:math";
+@use 'sass:math';
.preview-nav__editor-svg {
& svg {
width: #{math.div(22, $base-font-size)}rem;
height: #{math.div(22, $base-font-size)}rem;
@include themify() {
- fill: getThemifyVariable('button-nav-inactive-color');
+ fill: getThemifyVariable('button-nav-inactive-color');
}
&:hover {
@include themify() {
diff --git a/client/styles/components/_quick-add.scss b/client/styles/components/_quick-add.scss
index 96106c5d02..3df4ee4eb3 100644
--- a/client/styles/components/_quick-add.scss
+++ b/client/styles/components/_quick-add.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.quick-add {
width: auto;
@@ -15,7 +15,8 @@
height: #{math.div(64, $base-font-size)}rem;
padding-right: #{math.div(24, $base-font-size)}rem;
- button, a {
+ button,
+ a {
@include themify() {
color: getThemifyVariable('primary-text-color');
}
@@ -39,9 +40,9 @@
.quick-add__icon {
display: inline-block;
- margin-right:#{math.div(15, $base-font-size)}rem;
- width:#{math.div(35, $base-font-size)}rem;
- height:#{math.div(35, $base-font-size)}rem;
+ margin-right: #{math.div(15, $base-font-size)}rem;
+ width: #{math.div(35, $base-font-size)}rem;
+ height: #{math.div(35, $base-font-size)}rem;
@include icon();
@include themify() {
// icon graphic
@@ -55,8 +56,8 @@
}
& svg {
- width:#{math.div(35, $base-font-size)}rem;
- height:#{math.div(35, $base-font-size)}rem;
+ width: #{math.div(35, $base-font-size)}rem;
+ height: #{math.div(35, $base-font-size)}rem;
}
}
}
@@ -87,7 +88,7 @@
.quick-add__item-toggle,
.quick-add__item-toggle:focus {
cursor: pointer;
-
+
@include themify() {
& .quick-add__icon path {
fill: getThemifyVariable('table-button-hover-color');
@@ -118,4 +119,3 @@
display: none;
}
}
-
diff --git a/client/styles/components/_reset-password.scss b/client/styles/components/_reset-password.scss
index de0af012f2..98276ce2bb 100644
--- a/client/styles/components/_reset-password.scss
+++ b/client/styles/components/_reset-password.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.reset-password__submitted {
width: #{math.div(360, $base-font-size)}rem;
diff --git a/client/styles/components/_resizer.scss b/client/styles/components/_resizer.scss
index bf2b0ada3d..92ec59f178 100644
--- a/client/styles/components/_resizer.scss
+++ b/client/styles/components/_resizer.scss
@@ -1,16 +1,16 @@
.Resizer {
- @include themify() {
- background: getThemifyVariable('ide-border-color');
- }
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- z-index: 1;
- opacity: 0.02;
- -moz-background-clip: padding;
- -webkit-background-clip: padding;
- background-clip: padding-box;
- z-index: 9999;
+ @include themify() {
+ background: getThemifyVariable('ide-border-color');
+ }
+ -moz-box-sizing: border-box;
+ -webkit-box-sizing: border-box;
+ box-sizing: border-box;
+ z-index: 1;
+ opacity: 0.02;
+ -moz-background-clip: padding;
+ -webkit-background-clip: padding;
+ background-clip: padding-box;
+ z-index: 9999;
}
// .Resizer:hover {
@@ -19,33 +19,33 @@
// }
.Resizer.horizontal {
- height: 10px;
- margin: -5px 0;
- border-top: 5px solid rgba(255, 255, 255, 0);
- border-bottom: 5px solid rgba(255, 255, 255, 0);
- cursor: row-resize;
- width: 100%;
+ height: 10px;
+ margin: -5px 0;
+ border-top: 5px solid rgba(255, 255, 255, 0);
+ border-bottom: 5px solid rgba(255, 255, 255, 0);
+ cursor: row-resize;
+ width: 100%;
}
.Resizer.horizontal:hover {
- // border-top: 5px solid rgba(0, 0, 0, 0.5);
- // border-bottom: 5px solid rgba(0, 0, 0, 0.5);
+ // border-top: 5px solid rgba(0, 0, 0, 0.5);
+ // border-bottom: 5px solid rgba(0, 0, 0, 0.5);
}
.Resizer.vertical {
- width: 10px;
- margin: 0 -5px;
- border-left: 5px solid rgba(255, 255, 255, 0);
- border-right: 5px solid rgba(255, 255, 255, 0);
- cursor: col-resize;
+ width: 10px;
+ margin: 0 -5px;
+ border-left: 5px solid rgba(255, 255, 255, 0);
+ border-right: 5px solid rgba(255, 255, 255, 0);
+ cursor: col-resize;
}
.Resizer.vertical:hover {
- // border-left: 5px solid rgba(0, 0, 0, 0.5);
- // border-right: 5px solid rgba(0, 0, 0, 0.5);
+ // border-left: 5px solid rgba(0, 0, 0, 0.5);
+ // border-right: 5px solid rgba(0, 0, 0, 0.5);
}
.Resizer.vertical.disabled,
-.Resizer.horizontal.disabled{
- cursor: default;
-}
\ No newline at end of file
+.Resizer.horizontal.disabled {
+ cursor: default;
+}
diff --git a/client/styles/components/_searchbar.scss b/client/styles/components/_searchbar.scss
index 78e065ab41..929f816f0d 100644
--- a/client/styles/components/_searchbar.scss
+++ b/client/styles/components/_searchbar.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.searchbar {
position: relative;
@@ -60,7 +60,8 @@ div.searchbar__button {
@include themify() {
color: getThemifyVariable('primary-text-color');
background-color: getThemifyVariable('search-clear-background-color');
- &:hover, &:focus {
+ &:hover,
+ &:focus {
color: getThemifyVariable('search-hover-text-color');
background-color: getThemifyVariable('search-hover-background-color');
}
diff --git a/client/styles/components/_share.scss b/client/styles/components/_share.scss
index 074fa22f2c..708be43de2 100644
--- a/client/styles/components/_share.scss
+++ b/client/styles/components/_share.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.share-modal {
padding: #{math.div(20, $base-font-size)}rem;
@@ -22,4 +22,4 @@
display: flex;
flex-wrap: wrap;
padding: #{math.div(10, $base-font-size)}rem 0;
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_sidebar.scss b/client/styles/components/_sidebar.scss
index 1f1d5972e6..37d8a6ee6f 100644
--- a/client/styles/components/_sidebar.scss
+++ b/client/styles/components/_sidebar.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.sidebar {
display: flex;
@@ -45,7 +45,7 @@
.sidebar__file-list {
@include themify() {
- border-color: getThemifyVariable('ide-border-color')
+ border-color: getThemifyVariable('ide-border-color');
}
border-top: 1px solid;
.sidebar--contracted & {
@@ -80,7 +80,6 @@
position: relative;
@include themify() {
color: map-get($theme-map, 'primary-text-color');
- // TODO get this to not affect parent, need to move it into JS
&:hover:not(.sidebar__file-item--selected) > .file-item__content {
background-color: map-get($theme-map, 'file-hover-color');
}
@@ -96,9 +95,6 @@
}
}
-// to indent each row in the file tree
-// not sure how to do this in a better way
-// it won't work if the file tree is too nested
.file-item__spacer {
flex-shrink: 0;
.sidebar__file-item & {
@@ -206,9 +202,28 @@
display: none;
width: 100%;
max-width: #{math.div(180, $base-font-size)}rem;
+ overflow: visible !important;
.sidebar__file-item--open > .file-item__content & {
display: flex;
}
+
+ ul {
+ overflow: visible !important;
+ }
+
+ li {
+ overflow: visible !important;
+ position: relative;
+ }
+
+ button {
+ overflow: visible !important;
+ }
+}
+
+.sidebar__file-item-option {
+ position: relative;
+ overflow: visible !important;
}
.sidebar__file-item-input {
@@ -236,14 +251,16 @@
justify-content: center;
align-items: center;
@include themify() {
- background-color: getThemifyVariable("toolbar-button-background-color");
- & polygon, & path {
- fill: getThemifyVariable("toolbar-button-color");
+ background-color: getThemifyVariable('toolbar-button-background-color');
+ & polygon,
+ & path {
+ fill: getThemifyVariable('toolbar-button-color');
}
&:hover {
- background-color: getThemifyVariable("button-background-hover-color");
- & polygon, & path {
- fill: getThemifyVariable("button-hover-color");
+ background-color: getThemifyVariable('button-background-hover-color');
+ & polygon,
+ & path {
+ fill: getThemifyVariable('button-hover-color');
}
}
}
@@ -328,7 +345,114 @@
display: none;
width: 100%;
max-width: #{math.div(180, $base-font-size)}rem;
+ overflow: visible !important;
.sidebar--project-options & {
display: flex;
}
+
+ ul {
+ overflow: visible !important;
+ }
+
+ li {
+ position: relative;
+ overflow: visible !important;
+ }
+
+ button {
+ overflow: visible !important;
+ }
+}
+
+.sidebar__lock-icon {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ width: #{math.div(14, $base-font-size)}rem;
+ height: #{math.div(14, $base-font-size)}rem;
+ flex-shrink: 0;
+
+ svg {
+ width: 100%;
+ height: 100%;
+
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color');
+ fill: currentColor;
+ }
+
+ path {
+ fill: currentColor;
+ }
+ }
+}
+
+.tooltipped-login {
+ position: relative;
+ cursor: not-allowed !important;
+ display: flex !important;
+ align-items: center;
+ gap: #{math.div(6, $base-font-size)}rem;
+
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color') !important;
+ }
+
+ > *:not(.tooltipped-login-tooltip) {
+ opacity: 0.5;
+ }
+}
+
+.tooltipped-login-tooltip {
+ position: absolute;
+ display: none;
+ z-index: 1000000;
+ padding: #{math.div(12, $base-font-size)}rem #{math.div(16, $base-font-size)}rem;
+ font-size: #{math.div(14, $base-font-size)}rem;
+ font-family: Montserrat, sans-serif;
+ font-weight: 600;
+ line-height: 1.5;
+ text-align: center;
+ white-space: nowrap;
+ border-radius: 8px;
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.9), 0 0 0 3px rgba(255, 255, 255, 0.1);
+ pointer-events: none;
+
+ left: calc(100% + #{math.div(15, $base-font-size)}rem);
+ top: 50%;
+ transform: translateY(-50%);
+
+ opacity: 1 !important;
+ visibility: visible !important;
+
+ background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%) !important;
+ color: #ffffff !important;
+ border: 3px solid #ff006e !important;
+ text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8);
+
+ &::before {
+ content: '';
+ position: absolute;
+ top: 50%;
+ right: 100%;
+ transform: translateY(-50%);
+ border: 10px solid transparent;
+ border-right-color: #ff006e !important;
+ filter: drop-shadow(-2px 0 4px rgba(0, 0, 0, 0.5));
+ }
+
+ &::after {
+ content: '';
+ position: absolute;
+ top: 50%;
+ right: calc(100% + 3px);
+ transform: translateY(-50%);
+ border: 7px solid transparent;
+ border-right-color: #1a1a1a !important;
+ }
}
+
+.tooltipped-login:hover .tooltipped-login-tooltip {
+ display: block !important;
+ visibility: visible !important;
+}
\ No newline at end of file
diff --git a/client/styles/components/_sketch-list.scss b/client/styles/components/_sketch-list.scss
index 401f575728..9f638d77b9 100644
--- a/client/styles/components/_sketch-list.scss
+++ b/client/styles/components/_sketch-list.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.sketch-visibility__title {
@include themify() {
@@ -40,7 +40,7 @@
}
.sketch-visibility_ul li::before {
- content: "\2022";
+ content: '\2022';
@include themify() {
color: getThemifyVariable('hint-arrow-background-color');
@@ -50,9 +50,6 @@
margin-right: 10px;
}
-
-
-
.sketches-table-container {
overflow-y: auto;
max-width: 100%;
@@ -60,7 +57,7 @@
@media (max-width: 770px) {
@include themify() {
- background-color: getThemifyVariable("modal-background-color");
+ background-color: getThemifyVariable('modal-background-color');
}
.sketches-table {
@@ -79,8 +76,6 @@
flex-direction: column;
gap: #{math.div(12, $base-font-size)}rem;
-
-
.sketches-table__row {
margin: 0;
position: relative;
@@ -91,8 +86,10 @@
gap: #{math.div(8, $base-font-size)}rem;
@include themify() {
- border: 1px solid getThemifyVariable("modal-border-color");
- background-color: getThemifyVariable("search-background-color") !important;
+ border: 1px solid getThemifyVariable('modal-border-color');
+ background-color: getThemifyVariable(
+ 'search-background-color'
+ ) !important;
}
.sketches-table_name {
@@ -102,14 +99,13 @@
align-items: center;
}
-
- >td {
+ > td {
padding-left: 0;
width: 30%;
font-size: #{math.div(14, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("modal-border-color");
+ color: getThemifyVariable('modal-border-color');
}
}
@@ -152,7 +148,7 @@
z-index: 1;
@include themify() {
- background-color: getThemifyVariable("background-color");
+ background-color: getThemifyVariable('background-color');
}
}
@@ -168,7 +164,7 @@
& svg {
margin-left: #{math.div(5, $base-font-size)}rem;
@include themify() {
- fill: getThemifyVariable("inactive-text-color");
+ fill: getThemifyVariable('inactive-text-color');
}
}
}
@@ -178,13 +174,13 @@
padding: #{math.div(3, $base-font-size)}rem 0;
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
}
.sketches-table__header--selected {
@include themify() {
- border-color: getThemifyVariable("logo-color");
+ border-color: getThemifyVariable('logo-color');
}
}
@@ -200,27 +196,26 @@
.sketches-table__row:nth-child(odd) {
@include themify() {
- background: getThemifyVariable("table-row-stripe-color");
+ background: getThemifyVariable('table-row-stripe-color');
}
}
-.sketches-table__row>th:nth-child(1) {
+.sketches-table__row > th:nth-child(1) {
padding-left: #{math.div(12, $base-font-size)}rem;
}
-.sketches-table__row>td {
+.sketches-table__row > td {
padding-left: #{math.div(8, $base-font-size)}rem;
}
.sketches-table__row a {
@include themify() {
text-decoration: underline;
- color: getThemifyVariable("primary-text-color");
+ color: getThemifyVariable('primary-text-color');
}
-
}
-.sketches-table__row.is-deleted-or-private>* {
+.sketches-table__row.is-deleted-or-private > * {
font-style: italic;
}
@@ -228,7 +223,7 @@
font-size: #{math.div(12, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
}
@@ -251,9 +246,9 @@
font-size: #{math.div(16, $base-font-size)}rem;
padding: #{math.div(42, $base-font-size)}rem 0;
}
-.sketches-table__row a:hover{
+.sketches-table__row a:hover {
@include themify() {
- color: getThemifyVariable("logo-color");
+ color: getThemifyVariable('logo-color');
}
text-decoration-thickness: 0.1em;
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_skip-link.scss b/client/styles/components/_skip-link.scss
index 09d7d7d60f..cac136e5dd 100644
--- a/client/styles/components/_skip-link.scss
+++ b/client/styles/components/_skip-link.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.skip_link {
left: 50%;
@@ -12,7 +12,8 @@
vertical-align: middle;
background-color: transparent;
font-size: #{math.div(12, $base-font-size)}rem;
- line-height: #{math.div(50, $base-font-size)}rem;line-height: 11px;
+ line-height: #{math.div(50, $base-font-size)}rem;
+ line-height: 11px;
padding: #{math.div(10, $base-font-size)}rem #{math.div(10, $base-font-size)}rem;
background: #fff;
display: inline-block;
diff --git a/client/styles/components/_tabs.scss b/client/styles/components/_tabs.scss
index 7f2d953237..f12710a7cf 100644
--- a/client/styles/components/_tabs.scss
+++ b/client/styles/components/_tabs.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.tabs__titles {
display: flex;
@@ -12,13 +12,14 @@
.tabs__title {
@include themify() {
color: getThemifyVariable('inactive-text-color');
- &:hover, &:focus{
+ &:hover,
+ &:focus {
color: getThemifyVariable('primary-text-color');
- cursor: pointer;
+ cursor: pointer;
}
- &:focus {
+ &:focus {
color: getThemifyVariable('primary-text-color');
- cursor: pointer;
+ cursor: pointer;
}
}
font-size: #{math.div(12, $base-font-size)}rem;
@@ -30,7 +31,8 @@
.react-tabs__tab--selected {
@include themify() {
- border-bottom: #{math.div(4, $base-font-size)}rem solid getThemifyVariable('button-background-hover-color');
+ border-bottom: #{math.div(4, $base-font-size)}rem solid
+ getThemifyVariable('button-background-hover-color');
}
}
@@ -54,13 +56,14 @@
.tabs__title {
@include themify() {
color: getThemifyVariable('inactive-text-color');
- &:hover, &:focus{
+ &:hover,
+ &:focus {
color: getThemifyVariable('primary-text-color');
- cursor: pointer;
+ cursor: pointer;
}
- &:focus {
+ &:focus {
color: getThemifyVariable('primary-text-color');
- cursor: pointer;
+ cursor: pointer;
}
}
font-size: #{math.div(12, $base-font-size)}rem;
diff --git a/client/styles/components/_timer.scss b/client/styles/components/_timer.scss
index c258bf5bf0..ebbc2c14d2 100644
--- a/client/styles/components/_timer.scss
+++ b/client/styles/components/_timer.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.timer__saved-time {
@include themify() {
diff --git a/client/styles/components/_toast.scss b/client/styles/components/_toast.scss
index c52793c5cb..b3056ba210 100644
--- a/client/styles/components/_toast.scss
+++ b/client/styles/components/_toast.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.toast {
background-color: $toast-background-color;
@@ -14,7 +14,7 @@
z-index: 9999;
align-items: center;
justify-content: space-between;
- box-shadow: 0 6px 6px 0 rgba(0,0,0,0.10);
+ box-shadow: 0 6px 6px 0 rgba(0, 0, 0, 0.1);
}
.toast__close {
@@ -23,4 +23,4 @@
}
padding-top: #{math.div(10, $base-font-size)}rem;
margin-left: #{math.div(40, $base-font-size)}rem;
-}
\ No newline at end of file
+}
diff --git a/client/styles/components/_toggle.scss b/client/styles/components/_toggle.scss
index 8d4d73370d..78fa2148bf 100644
--- a/client/styles/components/_toggle.scss
+++ b/client/styles/components/_toggle.scss
@@ -1,63 +1,63 @@
.visibility__toggle-checkbox {
- display: none;
+ display: none;
}
.visibility__toggle-label {
- position: relative;
- cursor: pointer;
- width: 50px;
- height: 20px;
- background: grey;
- border-radius: 10px;
- transition: background-color 0.3s;
- display: flex;
- justify-content: center;
- align-items: center;
+ position: relative;
+ cursor: pointer;
+ width: 50px;
+ height: 20px;
+ background: grey;
+ border-radius: 10px;
+ transition: background-color 0.3s;
+ display: flex;
+ justify-content: center;
+ align-items: center;
}
.lock,
.earth {
- position: absolute;
- height: 12px;
- width: 12px;
+ position: absolute;
+ height: 12px;
+ width: 12px;
}
.lock {
- left: 4px;
+ left: 4px;
}
.earth {
- right: 4px;
+ right: 4px;
}
.visibility__toggle-label::after {
- content: '';
- position: absolute;
- top: 1px;
- left: 1px;
- width: 18px;
- height: 18px;
- background: #fff;
- border-radius: 50%;
- transition: all 0.3s;
- display: flex;
- justify-content: center;
- align-items: center;
+ content: '';
+ position: absolute;
+ top: 1px;
+ left: 1px;
+ width: 18px;
+ height: 18px;
+ background: #fff;
+ border-radius: 50%;
+ transition: all 0.3s;
+ display: flex;
+ justify-content: center;
+ align-items: center;
}
-.visibility__toggle-checkbox:checked+.visibility__toggle-label {
- background: #ED225D;
+.visibility__toggle-checkbox:checked + .visibility__toggle-label {
+ background: #ed225d;
}
-.visibility__toggle-checkbox:checked+.visibility__toggle-label::after {
- left: calc(100% - 1px);
- transform: translateX(-100%);
+.visibility__toggle-checkbox:checked + .visibility__toggle-label::after {
+ left: calc(100% - 1px);
+ transform: translateX(-100%);
}
.visibility__toggle-label:active:after {
- width: 30px;
+ width: 30px;
}
-.visibility__toggle-checkbox:checked+.visibility__toggle-label::after {
- animation: slideText 0.3s ease-in-out forwards;
-}
\ No newline at end of file
+.visibility__toggle-checkbox:checked + .visibility__toggle-label::after {
+ animation: slideText 0.3s ease-in-out forwards;
+}
diff --git a/client/styles/components/_toolbar.scss b/client/styles/components/_toolbar.scss
index b3e30909c1..a03e381ba0 100644
--- a/client/styles/components/_toolbar.scss
+++ b/client/styles/components/_toolbar.scss
@@ -1,205 +1,205 @@
-@use "sass:math";
+@use 'sass:math';
.toolbar__play-button {
- @include themify() {
- @extend %toolbar-button;
- display: flex;
- justify-content: center;
- align-items: center;
- padding: 0 0 0 #{math.div(3, $base-font-size)}rem;
-
- &--selected {
- @extend %toolbar-button--selected;
- }
-
- &:disabled {
- cursor: auto;
-
- & g,
- & path {
- fill: getThemifyVariable('button-border-color');
- }
-
- &:hover {
- background-color: getThemifyVariable('toolbar-button-background-color');
-
- & g,
- & path {
- fill: getThemifyVariable('button-border-color');
- }
- }
- }
- }
-
- margin-right: #{math.div(15, $base-font-size)}rem;
-
- span {
- padding-left: #{math.div(4, $base-font-size)}rem;
- display: flex;
- align-items: center;
- justify-content: center;
- width: #{math.div(20, $base-font-size)}rem;
- height: #{math.div(20, $base-font-size)}rem;
- }
+ @include themify() {
+ @extend %toolbar-button;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 0 0 0 #{math.div(3, $base-font-size)}rem;
+
+ &--selected {
+ @extend %toolbar-button--selected;
+ }
+
+ &:disabled {
+ cursor: auto;
+
+ & g,
+ & path {
+ fill: getThemifyVariable('button-border-color');
+ }
+
+ &:hover {
+ background-color: getThemifyVariable('toolbar-button-background-color');
+
+ & g,
+ & path {
+ fill: getThemifyVariable('button-border-color');
+ }
+ }
+ }
+ }
+
+ margin-right: #{math.div(15, $base-font-size)}rem;
+
+ span {
+ padding-left: #{math.div(4, $base-font-size)}rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: #{math.div(20, $base-font-size)}rem;
+ height: #{math.div(20, $base-font-size)}rem;
+ }
}
.toolbar__play-sketch-button {
- @extend %hidden-element;
+ @extend %hidden-element;
}
.toolbar__stop-button {
- @include themify() {
- @extend %toolbar-button;
- display: flex;
- justify-content: center;
- align-items: center;
- margin-right: #{math.div(15, $base-font-size)}rem;
- padding: 0;
-
- &--selected {
- @extend %toolbar-button--selected;
- }
- }
-
- span {
- display: flex;
- align-items: center;
- justify-content: center;
- width: #{math.div(20, $base-font-size)}rem;
- height: #{math.div(20, $base-font-size)}rem;
- }
+ @include themify() {
+ @extend %toolbar-button;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ margin-right: #{math.div(15, $base-font-size)}rem;
+ padding: 0;
+
+ &--selected {
+ @extend %toolbar-button--selected;
+ }
+ }
+
+ span {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: #{math.div(20, $base-font-size)}rem;
+ height: #{math.div(20, $base-font-size)}rem;
+ }
}
.toolbar__preferences-button {
- @include themify() {
- @extend %toolbar-button;
- display: flex;
- justify-content: center;
- align-items: center;
- padding: 0;
-
- &--selected {
- @extend %toolbar-button--selected;
- }
- }
-
- margin-left: auto;
-
- & span {
- padding-left: #{math.div(1, $base-font-size)}rem;
- display: flex;
- align-items: center;
- justify-content: center;
- width: #{math.div(20, $base-font-size)}rem;
- height: #{math.div(20, $base-font-size)}rem;
- }
+ @include themify() {
+ @extend %toolbar-button;
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ padding: 0;
+
+ &--selected {
+ @extend %toolbar-button--selected;
+ }
+ }
+
+ margin-left: auto;
+
+ & span {
+ padding-left: #{math.div(1, $base-font-size)}rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: #{math.div(20, $base-font-size)}rem;
+ height: #{math.div(20, $base-font-size)}rem;
+ }
}
.toolbar__logo {
- margin-right: #{math.div(30, $base-font-size)}rem;
+ margin-right: #{math.div(30, $base-font-size)}rem;
- @include themify() {
- & g,
- & path {
- fill: getThemifyVariable('logo-color');
- }
- }
+ @include themify() {
+ & g,
+ & path {
+ fill: getThemifyVariable('logo-color');
+ }
+ }
}
.toolbar {
- padding: #{math.div(10, $base-font-size)}rem #{math.div(20, $base-font-size)}rem;
- display: flex;
- align-items: center;
+ padding: #{math.div(10, $base-font-size)}rem #{math.div(20, $base-font-size)}rem;
+ display: flex;
+ align-items: center;
- @include themify() {
- border-bottom: 1px dashed map-get($theme-map, 'nav-border-color');
- }
+ @include themify() {
+ border-bottom: 1px dashed map-get($theme-map, 'nav-border-color');
+ }
}
.lock-icon {
- height: 60%;
- width: 60%;
+ height: 60%;
+ width: 60%;
}
.unlock-icon {
- height: 60%;
- width: 60%;
+ height: 60%;
+ width: 60%;
}
.toolbar__project-name-container {
- margin-left: #{math.div(10, $base-font-size)}rem;
- padding-left: #{math.div(10, $base-font-size)}rem;
- display: flex;
- align-items: center;
+ margin-left: #{math.div(10, $base-font-size)}rem;
+ padding-left: #{math.div(10, $base-font-size)}rem;
+ display: flex;
+ align-items: center;
- > section {
- display: flex;
- align-items: center;
- justify-content: center;
- height: 30px;
- width: 30px;
- }
+ > section {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 30px;
+ width: 30px;
+ }
}
.toolbar .editable-input__label {
- @include themify() {
- color: getThemifyVariable('secondary-text-color');
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color');
- & path {
- fill: getThemifyVariable('secondary-text-color');
- }
- }
+ & path {
+ fill: getThemifyVariable('secondary-text-color');
+ }
+ }
}
.toolbar .editable-input__input {
- border: 0;
+ border: 0;
}
.toolbar__project-owner {
- margin: 0;
- @include themify() {
- color: getThemifyVariable('secondary-text-color');
- }
+ margin: 0;
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color');
+ }
}
.toolbar__autorefresh-label {
- cursor: pointer;
+ cursor: pointer;
- @include themify() {
- color: getThemifyVariable('secondary-text-color');
+ @include themify() {
+ color: getThemifyVariable('secondary-text-color');
- &:hover {
- color: getThemifyVariable('logo-color');
- }
- }
+ &:hover {
+ color: getThemifyVariable('logo-color');
+ }
+ }
- margin-left: #{math.div(5, $base-font-size)}rem;
- font-size: #{math.div(12, $base-font-size)}rem;
+ margin-left: #{math.div(5, $base-font-size)}rem;
+ font-size: #{math.div(12, $base-font-size)}rem;
}
.toolbar__autorefresh {
- display: flex;
- align-items: center;
+ display: flex;
+ align-items: center;
}
.checkbox__autorefresh {
- cursor: pointer;
+ cursor: pointer;
- @include themify() {
- accent-color: getThemifyVariable('logo-color');
- }
+ @include themify() {
+ accent-color: getThemifyVariable('logo-color');
+ }
}
.toolbar__makeprivate {
- display: flex;
- align-items: center;
- gap: #{math.div(4, $base-font-size)}rem;
+ display: flex;
+ align-items: center;
+ gap: #{math.div(4, $base-font-size)}rem;
}
.toolbar__togglevisibility {
- cursor: pointer;
+ cursor: pointer;
- @include themify() {
- accent-color: getThemifyVariable('logo-color');
- }
-}
\ No newline at end of file
+ @include themify() {
+ accent-color: getThemifyVariable('logo-color');
+ }
+}
diff --git a/client/styles/components/_visibility-dropdown.scss b/client/styles/components/_visibility-dropdown.scss
index 65aa98c0ef..68ce4a8d30 100644
--- a/client/styles/components/_visibility-dropdown.scss
+++ b/client/styles/components/_visibility-dropdown.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.visibility-dropdown {
position: relative;
@@ -19,8 +19,8 @@
.visibility-dropdown__trigger-toolbar {
@include themify() {
- color: getThemifyVariable("toolbar-button-color");
- background-color: getThemifyVariable("toolbar-button-background-color");
+ color: getThemifyVariable('toolbar-button-color');
+ background-color: getThemifyVariable('toolbar-button-background-color');
& g,
& path {
@@ -30,10 +30,12 @@
&:hover {
@include themify() {
- background-color: getThemifyVariable("button-background-hover-color") !important;
- color: getThemifyVariable("button-hover-color") !important;
+ background-color: getThemifyVariable(
+ 'button-background-hover-color'
+ ) !important;
+ color: getThemifyVariable('button-hover-color') !important;
- & g,
+ & g,
& path {
fill: getThemifyVariable('button-hover-color') !important;
}
@@ -52,9 +54,9 @@
border-radius: #{math.div(6, $base-font-size)}rem;
@include themify() {
- border: 1px solid getThemifyVariable("modal-border-color");
- color: getThemifyVariable("primary-text-color");
- background-color: getThemifyVariable("modal-background-color");
+ border: 1px solid getThemifyVariable('modal-border-color');
+ color: getThemifyVariable('primary-text-color');
+ background-color: getThemifyVariable('modal-background-color');
}
}
@@ -66,8 +68,8 @@
flex-direction: column;
@include themify() {
- border-bottom: 1px solid getThemifyVariable("modal-border-color");
- background-color: getThemifyVariable("modal-background-color");
+ border-bottom: 1px solid getThemifyVariable('modal-border-color');
+ background-color: getThemifyVariable('modal-background-color');
}
&:last-child {
@@ -76,10 +78,12 @@
&:hover {
@include themify() {
- background-color: getThemifyVariable("button-background-hover-color") !important;
- color: getThemifyVariable("button-hover-color") !important;
+ background-color: getThemifyVariable(
+ 'button-background-hover-color'
+ ) !important;
+ color: getThemifyVariable('button-hover-color') !important;
- & g {
+ & g {
fill: getThemifyVariable('button-hover-color') !important;
}
}
@@ -87,7 +91,7 @@
&.selected {
@include themify() {
- background-color: getThemifyVariable("table-row-stripe-color");
+ background-color: getThemifyVariable('table-row-stripe-color');
}
}
}
@@ -122,7 +126,7 @@
flex-shrink: 0;
@include themify() {
- stroke: getThemifyVariable("inactive-text-color");
+ stroke: getThemifyVariable('inactive-text-color');
}
}
@@ -132,7 +136,7 @@
height: #{math.div(16, $base-font-size)}rem;
@include themify() {
- stroke: getThemifyVariable("logo-color");
+ stroke: getThemifyVariable('logo-color');
}
}
@@ -144,7 +148,7 @@
font-size: #{math.div(14, $base-font-size)}rem;
@include themify() {
- color: getThemifyVariable("inactive-text-color");
+ color: getThemifyVariable('inactive-text-color');
}
}
@@ -163,7 +167,7 @@
}
.toolbar .visibility-dropdown__trigger {
- font-size: 1rem;
+ font-size: 1rem;
}
.toolbar .visibility-icon {
diff --git a/client/styles/layout/_dashboard.scss b/client/styles/layout/_dashboard.scss
index fea65f2809..4cf22ce4a2 100644
--- a/client/styles/layout/_dashboard.scss
+++ b/client/styles/layout/_dashboard.scss
@@ -1,4 +1,4 @@
-@use "sass:math";
+@use 'sass:math';
.dashboard-content {
display: flex;
diff --git a/client/styles/layout/_ide.scss b/client/styles/layout/_ide.scss
index 25135595a7..a952a5955b 100644
--- a/client/styles/layout/_ide.scss
+++ b/client/styles/layout/_ide.scss
@@ -13,7 +13,7 @@
}
.toolbar {
- width: 100%;
+ width: 100%;
}
.sidebar {
@@ -43,4 +43,4 @@
.CodeMirror-gutters {
display: none;
}
-}
\ No newline at end of file
+}
diff --git a/client/styles/main.scss b/client/styles/main.scss
index 3792c192f1..3da3e4e089 100644
--- a/client/styles/main.scss
+++ b/client/styles/main.scss
@@ -60,4 +60,4 @@
@import 'components/visibility-dropdown';
@import 'layout/dashboard';
-@import 'layout/ide';
\ No newline at end of file
+@import 'layout/ide';
diff --git a/client/tsconfig.json b/client/tsconfig.json
index 9e63548a60..7493d90884 100644
--- a/client/tsconfig.json
+++ b/client/tsconfig.json
@@ -4,8 +4,8 @@
"target": "ES6",
"module": "ESNext",
"lib": ["DOM", "ESNext"],
- "jsx": "react",
+ "jsx": "react"
},
"include": ["./**/*"],
"exclude": ["../node_modules", "../server"]
-}
\ No newline at end of file
+}
diff --git a/client/utils/codemirror-search.js b/client/utils/codemirror-search.js
index 3ed3116a63..09904254fb 100644
--- a/client/utils/codemirror-search.js
+++ b/client/utils/codemirror-search.js
@@ -399,8 +399,9 @@ function startSearch(cm, state, query) {
var searchDialog = document.querySelector('.CodeMirror-dialog');
if (searchDialog) {
// check if the file has changed
- let currentFileName = document.querySelector('.editor__file-name span')
- ?.innerText;
+ let currentFileName = document.querySelector(
+ '.editor__file-name span'
+ )?.innerText;
if (state.lastFileName !== currentFileName) {
state.lastFileName = currentFileName;
@@ -438,9 +439,8 @@ function startSearch(cm, state, query) {
cursor.findNext();
var num_match = cm.state.search.annotate.matches.length;
if (num_match == 0) {
- cm.display.wrapper.querySelector(
- '.CodeMirror-search-results'
- ).innerText = i18n.t('CodemirrorFindAndReplace.NoResults');
+ cm.display.wrapper.querySelector('.CodeMirror-search-results').innerText =
+ i18n.t('CodemirrorFindAndReplace.NoResults');
cm.removeOverlay(state.overlay, state.caseInsensitive);
} else {
var next =
@@ -450,9 +450,8 @@ function startSearch(cm, state, query) {
);
}) + 1;
var text_match = next + '/' + num_match;
- cm.display.wrapper.querySelector(
- '.CodeMirror-search-results'
- ).innerText = text_match;
+ cm.display.wrapper.querySelector('.CodeMirror-search-results').innerText =
+ text_match;
}
}
}
@@ -645,9 +644,8 @@ function findNext(cm, rev, callback) {
s.from.ch === cursor.from().ch && s.from.line === cursor.from().line
) + 1;
var text_match = next + '/' + num_match;
- cm.display.wrapper.querySelector(
- '.CodeMirror-search-results'
- ).innerText = text_match;
+ cm.display.wrapper.querySelector('.CodeMirror-search-results').innerText =
+ text_match;
if (callback) callback(cursor.from(), cursor.to());
});
}
diff --git a/client/utils/dispatcher.test.ts b/client/utils/dispatcher.test.ts
index 48572653c4..282fbb90e3 100644
--- a/client/utils/dispatcher.test.ts
+++ b/client/utils/dispatcher.test.ts
@@ -12,7 +12,7 @@ describe('dispatcher', () => {
beforeEach(() => {
origin = 'https://example.com';
- mockFrame = ({ postMessage: jest.fn() } as unknown) as Window;
+ mockFrame = { postMessage: jest.fn() } as unknown as Window;
});
afterEach(() => {
@@ -47,8 +47,8 @@ describe('dispatcher', () => {
});
it('sends a deep-copied message to all registered frames', () => {
- const frame1 = ({ postMessage: jest.fn() } as unknown) as Window;
- const frame2 = ({ postMessage: jest.fn() } as unknown) as Window;
+ const frame1 = { postMessage: jest.fn() } as unknown as Window;
+ const frame2 = { postMessage: jest.fn() } as unknown as Window;
const remove1 = registerFrame(frame1, origin);
const remove2 = registerFrame(frame2, origin);
diff --git a/client/utils/evaluateExpression.ts b/client/utils/evaluateExpression.ts
index 6f8cdf8ada..852942b7d5 100644
--- a/client/utils/evaluateExpression.ts
+++ b/client/utils/evaluateExpression.ts
@@ -12,33 +12,31 @@ function makeEvaluateExpression(evalInClosure: EvalInClosureFn) {
}
export function evaluateExpressionWrapper(): (expr: string) => EvalResult {
- return makeEvaluateExpression(
- (expr: string): EvalResult => {
- let newExpr = expr;
- let result = null;
- let error = false;
+ return makeEvaluateExpression((expr: string): EvalResult => {
+ let newExpr = expr;
+ let result = null;
+ let error = false;
+ try {
try {
- try {
- const wrapped = `(${expr})`;
- // eslint-disable-next-line no-new-func
- const validate = new Function(wrapped);
- newExpr = wrapped;
- } catch (e) {
- // We shouldn't wrap the expression
- }
- // eslint-disable-next-line no-eval
- result = (0, eval)(newExpr);
+ const wrapped = `(${expr})`;
+ // eslint-disable-next-line no-new-func
+ const validate = new Function(wrapped);
+ newExpr = wrapped;
} catch (e) {
- if (e instanceof Error) {
- result = `${e.name}: ${e.message}`;
- } else {
- result = String(e);
- }
- error = true;
+ // We shouldn't wrap the expression
}
- return { result, error };
+ // eslint-disable-next-line no-eval
+ result = (0, eval)(newExpr);
+ } catch (e) {
+ if (e instanceof Error) {
+ result = `${e.name}: ${e.message}`;
+ } else {
+ result = String(e);
+ }
+ error = true;
}
- );
+ return { result, error };
+ });
}
export const evaluateExpression = evaluateExpressionWrapper();
diff --git a/client/utils/htmlmixed.js b/client/utils/htmlmixed.js
index 23a0eacf05..6ca6fa1db9 100644
--- a/client/utils/htmlmixed.js
+++ b/client/utils/htmlmixed.js
@@ -2,33 +2,50 @@
// Distributed under an MIT license: http://codemirror.net/LICENSE
/* eslint-disable */
-(function(mod) {
- if (typeof exports == "object" && typeof module == "object") // CommonJS
- mod(require("codemirror"), require("codemirror/mode/xml/xml"), require("./p5-javascript"), require("codemirror/mode/css/css"));
- else if (typeof define == "function" && define.amd) // AMD
- define(["codemirror", "codemirror/mode/xml/xml", "./p5-javascript", "codemirror/mode/css/css"], mod);
- else // Plain browser env
- mod(CodeMirror);
-})(function(CodeMirror) {
- "use strict";
+(function (mod) {
+ if (typeof exports == 'object' && typeof module == 'object')
+ // CommonJS
+ mod(
+ require('codemirror'),
+ require('codemirror/mode/xml/xml'),
+ require('./p5-javascript'),
+ require('codemirror/mode/css/css')
+ );
+ else if (typeof define == 'function' && define.amd)
+ // AMD
+ define([
+ 'codemirror',
+ 'codemirror/mode/xml/xml',
+ './p5-javascript',
+ 'codemirror/mode/css/css'
+ ], mod);
+ // Plain browser env
+ else mod(CodeMirror);
+})(function (CodeMirror) {
+ 'use strict';
var defaultTags = {
script: [
- ["lang", /(javascript|babel)/i, "javascript"],
- ["type", /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i, "javascript"],
- ["type", /./, "text/plain"],
- [null, null, "javascript"]
+ ['lang', /(javascript|babel)/i, 'javascript'],
+ [
+ 'type',
+ /^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,
+ 'javascript'
+ ],
+ ['type', /./, 'text/plain'],
+ [null, null, 'javascript']
],
- style: [
- ["lang", /^css$/i, "css"],
- ["type", /^(text\/)?(x-)?(stylesheet|css)$/i, "css"],
- ["type", /./, "text/plain"],
- [null, null, "css"]
+ style: [
+ ['lang', /^css$/i, 'css'],
+ ['type', /^(text\/)?(x-)?(stylesheet|css)$/i, 'css'],
+ ['type', /./, 'text/plain'],
+ [null, null, 'css']
]
};
function maybeBackup(stream, pat, style) {
- var cur = stream.current(), close = cur.search(pat);
+ var cur = stream.current(),
+ close = cur.search(pat);
if (close > -1) {
stream.backUp(cur.length - close);
} else if (cur.match(/<\/?$/)) {
@@ -42,112 +59,154 @@
function getAttrRegexp(attr) {
var regexp = attrRegexpCache[attr];
if (regexp) return regexp;
- return attrRegexpCache[attr] = new RegExp("\\s+" + attr + "\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*");
+ return (attrRegexpCache[attr] = new RegExp(
+ '\\s+' + attr + '\\s*=\\s*(\'|")?([^\'"]+)(\'|")?\\s*'
+ ));
}
function getAttrValue(text, attr) {
- var match = text.match(getAttrRegexp(attr))
- return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : ""
+ var match = text.match(getAttrRegexp(attr));
+ return match ? /^\s*(.*?)\s*$/.exec(match[2])[1] : '';
}
function getTagRegexp(tagName, anchored) {
- return new RegExp((anchored ? "^" : "") + "<\/\s*" + tagName + "\s*>", "i");
+ return new RegExp((anchored ? '^' : '') + '', 'i');
}
function addTags(from, to) {
for (var tag in from) {
var dest = to[tag] || (to[tag] = []);
var source = from[tag];
- for (var i = source.length - 1; i >= 0; i--)
- dest.unshift(source[i])
+ for (var i = source.length - 1; i >= 0; i--) dest.unshift(source[i]);
}
}
function findMatchingMode(tagInfo, tagText) {
for (var i = 0; i < tagInfo.length; i++) {
var spec = tagInfo[i];
- if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0]))) return spec[2];
+ if (!spec[0] || spec[1].test(getAttrValue(tagText, spec[0])))
+ return spec[2];
}
}
- CodeMirror.defineMode("htmlmixed", function (config, parserConfig) {
- var htmlMode = CodeMirror.getMode(config, {
- name: "xml",
- htmlMode: true,
- multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
- multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag
- });
-
- var tags = {};
- var configTags = parserConfig && parserConfig.tags, configScript = parserConfig && parserConfig.scriptTypes;
- addTags(defaultTags, tags);
- if (configTags) addTags(configTags, tags);
- if (configScript) for (var i = configScript.length - 1; i >= 0; i--)
- tags.script.unshift(["type", configScript[i].matches, configScript[i].mode])
-
- function html(stream, state) {
- var style = htmlMode.token(stream, state.htmlState), tag = /\btag\b/.test(style), tagName
- if (tag && !/[<>\s\/]/.test(stream.current()) &&
- (tagName = state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&
- tags.hasOwnProperty(tagName)) {
- state.inTag = tagName + " "
- } else if (state.inTag && tag && />$/.test(stream.current())) {
- var inTag = /^([\S]+) (.*)/.exec(state.inTag)
- state.inTag = null
- var modeSpec = stream.current() == ">" && findMatchingMode(tags[inTag[1]], inTag[2])
- var mode = CodeMirror.getMode(config, modeSpec)
- var endTagA = getTagRegexp(inTag[1], true), endTag = getTagRegexp(inTag[1], false);
- state.token = function (stream, state) {
- if (stream.match(endTagA, false)) {
- state.token = html;
- state.localState = state.localMode = null;
- return null;
- }
- return maybeBackup(stream, endTag, state.localMode.token(stream, state.localState));
- };
- state.localMode = mode;
- state.localState = CodeMirror.startState(mode, htmlMode.indent(state.htmlState, ""));
- } else if (state.inTag) {
- state.inTag += stream.current()
- if (stream.eol()) state.inTag += " "
- }
- return style;
- };
-
- return {
- startState: function () {
- var state = CodeMirror.startState(htmlMode);
- return {token: html, inTag: null, localMode: null, localState: null, htmlState: state};
- },
-
- copyState: function (state) {
- var local;
- if (state.localState) {
- local = CodeMirror.copyState(state.localMode, state.localState);
+ CodeMirror.defineMode(
+ 'htmlmixed',
+ function (config, parserConfig) {
+ var htmlMode = CodeMirror.getMode(config, {
+ name: 'xml',
+ htmlMode: true,
+ multilineTagIndentFactor: parserConfig.multilineTagIndentFactor,
+ multilineTagIndentPastTag: parserConfig.multilineTagIndentPastTag
+ });
+
+ var tags = {};
+ var configTags = parserConfig && parserConfig.tags,
+ configScript = parserConfig && parserConfig.scriptTypes;
+ addTags(defaultTags, tags);
+ if (configTags) addTags(configTags, tags);
+ if (configScript)
+ for (var i = configScript.length - 1; i >= 0; i--)
+ tags.script.unshift([
+ 'type',
+ configScript[i].matches,
+ configScript[i].mode
+ ]);
+
+ function html(stream, state) {
+ var style = htmlMode.token(stream, state.htmlState),
+ tag = /\btag\b/.test(style),
+ tagName;
+ if (
+ tag &&
+ !/[<>\s\/]/.test(stream.current()) &&
+ (tagName =
+ state.htmlState.tagName && state.htmlState.tagName.toLowerCase()) &&
+ tags.hasOwnProperty(tagName)
+ ) {
+ state.inTag = tagName + ' ';
+ } else if (state.inTag && tag && />$/.test(stream.current())) {
+ var inTag = /^([\S]+) (.*)/.exec(state.inTag);
+ state.inTag = null;
+ var modeSpec =
+ stream.current() == '>' &&
+ findMatchingMode(tags[inTag[1]], inTag[2]);
+ var mode = CodeMirror.getMode(config, modeSpec);
+ var endTagA = getTagRegexp(inTag[1], true),
+ endTag = getTagRegexp(inTag[1], false);
+ state.token = function (stream, state) {
+ if (stream.match(endTagA, false)) {
+ state.token = html;
+ state.localState = state.localMode = null;
+ return null;
+ }
+ return maybeBackup(
+ stream,
+ endTag,
+ state.localMode.token(stream, state.localState)
+ );
+ };
+ state.localMode = mode;
+ state.localState = CodeMirror.startState(
+ mode,
+ htmlMode.indent(state.htmlState, '')
+ );
+ } else if (state.inTag) {
+ state.inTag += stream.current();
+ if (stream.eol()) state.inTag += ' ';
}
- return {token: state.token, inTag: state.inTag,
- localMode: state.localMode, localState: local,
- htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};
- },
-
- token: function (stream, state) {
- return state.token(stream, state);
- },
-
- indent: function (state, textAfter) {
- if (!state.localMode || /^\s*<\//.test(textAfter))
- return htmlMode.indent(state.htmlState, textAfter);
- else if (state.localMode.indent)
- return state.localMode.indent(state.localState, textAfter);
- else
- return CodeMirror.Pass;
- },
-
- innerMode: function (state) {
- return {state: state.localState || state.htmlState, mode: state.localMode || htmlMode};
+ return style;
}
- };
- }, "xml", "javascript", "css");
- CodeMirror.defineMIME("text/html", "htmlmixed");
+ return {
+ startState: function () {
+ var state = CodeMirror.startState(htmlMode);
+ return {
+ token: html,
+ inTag: null,
+ localMode: null,
+ localState: null,
+ htmlState: state
+ };
+ },
+
+ copyState: function (state) {
+ var local;
+ if (state.localState) {
+ local = CodeMirror.copyState(state.localMode, state.localState);
+ }
+ return {
+ token: state.token,
+ inTag: state.inTag,
+ localMode: state.localMode,
+ localState: local,
+ htmlState: CodeMirror.copyState(htmlMode, state.htmlState)
+ };
+ },
+
+ token: function (stream, state) {
+ return state.token(stream, state);
+ },
+
+ indent: function (state, textAfter) {
+ if (!state.localMode || /^\s*<\//.test(textAfter))
+ return htmlMode.indent(state.htmlState, textAfter);
+ else if (state.localMode.indent)
+ return state.localMode.indent(state.localState, textAfter);
+ else return CodeMirror.Pass;
+ },
+
+ innerMode: function (state) {
+ return {
+ state: state.localState || state.htmlState,
+ mode: state.localMode || htmlMode
+ };
+ }
+ };
+ },
+ 'xml',
+ 'javascript',
+ 'css'
+ );
+
+ CodeMirror.defineMIME('text/html', 'htmlmixed');
});
diff --git a/client/utils/p5-instance-methods-and-creators.json b/client/utils/p5-instance-methods-and-creators.json
index 2e96ed4205..e386714b27 100644
--- a/client/utils/p5-instance-methods-and-creators.json
+++ b/client/utils/p5-instance-methods-and-creators.json
@@ -1,16 +1,7 @@
{
"p5.Color": {
- "createMethods": [
- "color",
- "p5.Color"
- ],
- "methods": [
- "setAlpha",
- "setBlue",
- "setGreen",
- "setRed",
- "toString"
- ]
+ "createMethods": ["color", "p5.Color"],
+ "methods": ["setAlpha", "setBlue", "setGreen", "setRed", "toString"]
},
"p5.Geometry": {
"createMethods": [
@@ -66,10 +57,7 @@
]
},
"p5.Camera": {
- "createMethods": [
- "createCamera",
- "p5.Camera"
- ],
+ "createMethods": ["createCamera", "p5.Camera"],
"methods": [
"camera",
"centerX",
@@ -147,18 +135,8 @@
]
},
"p5.File": {
- "createMethods": [
- "createFileInput",
- "p5.File"
- ],
- "methods": [
- "data",
- "file",
- "name",
- "size",
- "subtype",
- "type"
- ]
+ "createMethods": ["createFileInput", "p5.File"],
+ "methods": ["data", "file", "name", "size", "subtype", "type"]
},
"p5.Shader": {
"createMethods": [
@@ -168,18 +146,10 @@
"p5.Shader",
"shader"
],
- "methods": [
- "copyToContext",
- "inspectHooks",
- "modify",
- "setUniform"
- ]
+ "methods": ["copyToContext", "inspectHooks", "modify", "setUniform"]
},
"p5.Framebuffer": {
- "createMethods": [
- "createFramebuffer",
- "p5.Framebuffer"
- ],
+ "createMethods": ["createFramebuffer", "p5.Framebuffer"],
"methods": [
"autoSized",
"begin",
@@ -198,23 +168,11 @@
]
},
"p5.Graphics": {
- "createMethods": [
- "createGraphics",
- "p5.Graphics"
- ],
- "methods": [
- "createFramebuffer",
- "remove",
- "reset"
- ]
+ "createMethods": ["createGraphics", "p5.Graphics"],
+ "methods": ["createFramebuffer", "remove", "reset"]
},
"p5.Image": {
- "createMethods": [
- "createImage",
- "get",
- "loadImage",
- "p5.Image"
- ],
+ "createMethods": ["createImage", "get", "loadImage", "p5.Image"],
"methods": [
"blend",
"copy",
@@ -240,9 +198,7 @@
]
},
"p5.NumberDict": {
- "createMethods": [
- "createNumberDict"
- ],
+ "createMethods": ["createNumberDict"],
"methods": [
"add",
"div",
@@ -255,16 +211,11 @@
]
},
"p5.StringDict": {
- "createMethods": [
- "createStringDict"
- ],
+ "createMethods": ["createStringDict"],
"methods": []
},
"p5.Vector": {
- "createMethods": [
- "createVector",
- "p5.Vector"
- ],
+ "createMethods": ["createVector", "p5.Vector"],
"methods": [
"add",
"angleBetween",
@@ -302,31 +253,15 @@
]
},
"p5.PrintWriter": {
- "createMethods": [
- "createWriter",
- "p5.PrintWriter"
- ],
- "methods": [
- "clear",
- "close",
- "print",
- "write"
- ]
+ "createMethods": ["createWriter", "p5.PrintWriter"],
+ "methods": ["clear", "close", "print", "write"]
},
"p5.Font": {
- "createMethods": [
- "loadFont"
- ],
- "methods": [
- "font",
- "textBounds",
- "textToPoints"
- ]
+ "createMethods": ["loadFont"],
+ "methods": ["font", "textBounds", "textToPoints"]
},
"p5.Table": {
- "createMethods": [
- "loadTable"
- ],
+ "createMethods": ["loadTable"],
"methods": [
"addColumn",
"addRow",
@@ -357,9 +292,7 @@
]
},
"p5.XML": {
- "createMethods": [
- "loadXML"
- ],
+ "createMethods": ["loadXML"],
"methods": [
"addChild",
"getAttributeCount",
@@ -433,12 +366,7 @@
},
"p5.Gain": {
"createMethods": [],
- "methods": [
- "amp",
- "connect",
- "disconnect",
- "setInput"
- ]
+ "methods": ["amp", "connect", "disconnect", "setInput"]
},
"p5.MonoSynth": {
"createMethods": [],
@@ -456,9 +384,7 @@
},
"p5.Noise": {
"createMethods": [],
- "methods": [
- "setType"
- ]
+ "methods": ["setType"]
},
"p5.Oscillator": {
"createMethods": [],
@@ -518,16 +444,11 @@
},
"p5.PeakDetect": {
"createMethods": [],
- "methods": [
- "onPeak",
- "update"
- ]
+ "methods": ["onPeak", "update"]
},
"p5.Phrase": {
"createMethods": [],
- "methods": [
- "sequence"
- ]
+ "methods": ["sequence"]
},
"p5.PolySynth": {
"createMethods": [],
@@ -547,30 +468,15 @@
},
"p5.Pulse": {
"createMethods": [],
- "methods": [
- "width"
- ]
+ "methods": ["width"]
},
"p5.Reverb": {
"createMethods": [],
- "methods": [
- "amp",
- "connect",
- "disconnect",
- "process",
- "set"
- ]
+ "methods": ["amp", "connect", "disconnect", "process", "set"]
},
"p5.Score": {
"createMethods": [],
- "methods": [
- "loop",
- "noLoop",
- "pause",
- "setBPM",
- "start",
- "stop"
- ]
+ "methods": ["loop", "noLoop", "pause", "setBPM", "start", "stop"]
},
"p5.SoundFile": {
"createMethods": [],
@@ -626,22 +532,11 @@
},
"p5.SoundRecorder": {
"createMethods": [],
- "methods": [
- "record",
- "setInput",
- "stop"
- ]
+ "methods": ["record", "setInput", "stop"]
},
"p5.TableRow": {
"createMethods": [],
- "methods": [
- "get",
- "getNum",
- "getString",
- "set",
- "setNum",
- "setString"
- ]
+ "methods": ["get", "getNum", "getString", "set", "setNum", "setString"]
},
"p5.TypedDict": {
"createMethods": [],
@@ -658,4 +553,4 @@
"size"
]
}
-}
\ No newline at end of file
+}
diff --git a/client/utils/p5-javascript.js b/client/utils/p5-javascript.js
index af34681c07..746a12e93b 100644
--- a/client/utils/p5-javascript.js
+++ b/client/utils/p5-javascript.js
@@ -2,956 +2,1368 @@
// Distributed under an MIT license: https://codemirror.net/LICENSE
/*eslint-disable*/
-var p5_javascript_template = require("./p5-keywords");
+var p5_javascript_template = require('./p5-keywords');
var p5FunctionKeywords = p5_javascript_template.p5FunctionKeywords;
var p5VariableKeywords = p5_javascript_template.p5VariableKeywords;
-(function(mod) {
- if (typeof exports == "object" && typeof module == "object") // CommonJS
- mod(require("codemirror"));
- else if (typeof define == "function" && define.amd) // AMD
- define(["codemirror"], mod);
- else // Plain browser env
- mod(CodeMirror);
-})(function(CodeMirror) {
-"use strict";
-
-CodeMirror.defineMode("javascript", function(config, parserConfig) {
- var indentUnit = config.indentUnit;
- var statementIndent = parserConfig.statementIndent;
- var jsonldMode = parserConfig.jsonld;
- var jsonMode = parserConfig.json || jsonldMode;
- var isTS = parserConfig.typescript;
- var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
-
- // Tokenizer
- var keywords = function(){
- function kw(type) {return {type: type, style: "keyword"};}
- var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c");
- var operator = kw("operator"), atom = {type: "atom", style: "atom"};
-
- var jsKeywords = {
- "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B,
- "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C,
- "var": kw("var"), "const": kw("var"), "let": kw("var"),
- "function": kw("function"), "catch": kw("catch"),
- "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"),
- "in": operator, "typeof": operator, "instanceof": operator,
- "true": atom, "false": atom, "null": atom, "undefined": atom, "NaN": atom, "Infinity": atom,
- "this": kw("this"), "class": kw("class"), "super": kw("atom"),
- "yield": C, "export": kw("export"), "import": kw("import"), "extends": C,
- "await": C, "async": kw("async")
- };
+(function (mod) {
+ if (typeof exports == 'object' && typeof module == 'object')
+ // CommonJS
+ mod(require('codemirror'));
+ else if (typeof define == 'function' && define.amd)
+ // AMD
+ define(['codemirror'], mod); // Plain browser env
+ else mod(CodeMirror);
+})(function (CodeMirror) {
+ 'use strict';
- for (var attr in p5FunctionKeywords) {
- jsKeywords[attr] = p5FunctionKeywords[attr];
- }
+ CodeMirror.defineMode('javascript', function (config, parserConfig) {
+ var indentUnit = config.indentUnit;
+ var statementIndent = parserConfig.statementIndent;
+ var jsonldMode = parserConfig.jsonld;
+ var jsonMode = parserConfig.json || jsonldMode;
+ var isTS = parserConfig.typescript;
+ var wordRE = parserConfig.wordCharacters || /[\w$\xa1-\uffff]/;
- for (var attr in p5VariableKeywords) {
- jsKeywords[attr] = p5VariableKeywords[attr];
- }
+ // Tokenizer
+ var keywords = (function () {
+ function kw(type) {
+ return { type: type, style: 'keyword' };
+ }
+ var A = kw('keyword a'),
+ B = kw('keyword b'),
+ C = kw('keyword c');
+ var operator = kw('operator'),
+ atom = { type: 'atom', style: 'atom' };
+
+ var jsKeywords = {
+ if: kw('if'),
+ while: A,
+ with: A,
+ else: B,
+ do: B,
+ try: B,
+ finally: B,
+ return: C,
+ break: C,
+ continue: C,
+ new: kw('new'),
+ delete: C,
+ throw: C,
+ debugger: C,
+ var: kw('var'),
+ const: kw('var'),
+ let: kw('var'),
+ function: kw('function'),
+ catch: kw('catch'),
+ for: kw('for'),
+ switch: kw('switch'),
+ case: kw('case'),
+ default: kw('default'),
+ in: operator,
+ typeof: operator,
+ instanceof: operator,
+ true: atom,
+ false: atom,
+ null: atom,
+ undefined: atom,
+ NaN: atom,
+ Infinity: atom,
+ this: kw('this'),
+ class: kw('class'),
+ super: kw('atom'),
+ yield: C,
+ export: kw('export'),
+ import: kw('import'),
+ extends: C,
+ await: C,
+ async: kw('async')
+ };
+
+ for (var attr in p5FunctionKeywords) {
+ jsKeywords[attr] = p5FunctionKeywords[attr];
+ }
- // Extend the 'normal' keywords with the TypeScript language extensions
- if (isTS) {
- var type = {type: "variable", style: "variable-3"};
- var tsKeywords = {
- // object-like things
- "interface": kw("class"),
- "implements": C,
- "namespace": C,
- "module": kw("module"),
- "enum": kw("module"),
- "type": kw("type"),
+ for (var attr in p5VariableKeywords) {
+ jsKeywords[attr] = p5VariableKeywords[attr];
+ }
- // scope modifiers
- "public": kw("modifier"),
- "private": kw("modifier"),
- "protected": kw("modifier"),
- "abstract": kw("modifier"),
+ // Extend the 'normal' keywords with the TypeScript language extensions
+ if (isTS) {
+ var type = { type: 'variable', style: 'variable-3' };
+ var tsKeywords = {
+ // object-like things
+ interface: kw('class'),
+ implements: C,
+ namespace: C,
+ module: kw('module'),
+ enum: kw('module'),
+ type: kw('type'),
- // operators
- "as": operator,
+ // scope modifiers
+ public: kw('modifier'),
+ private: kw('modifier'),
+ protected: kw('modifier'),
+ abstract: kw('modifier'),
- // types
- "string": type, "number": type, "boolean": type, "any": type
- };
+ // operators
+ as: operator,
- for (var attr in tsKeywords) {
- jsKeywords[attr] = tsKeywords[attr];
- }
- }
-
- return jsKeywords;
-}();
-
- var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
- var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
-
- function readRegexp(stream) {
- var escaped = false, next, inSet = false;
- while ((next = stream.next()) != null) {
- if (!escaped) {
- if (next == "/" && !inSet) return;
- if (next == "[") inSet = true;
- else if (inSet && next == "]") inSet = false;
- }
- escaped = !escaped && next == "\\";
- }
- }
-
- // Used as scratch variables to communicate multiple values without
- // consing up tons of objects.
- var type, content;
- function ret(tp, style, cont) {
- type = tp; content = cont;
- return style;
- }
- function tokenBase(stream, state) {
- var ch = stream.next();
- if (ch == '"' || ch == "'") {
- state.tokenize = tokenString(ch);
- return state.tokenize(stream, state);
- } else if (ch == "." && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
- return ret("number", "number");
- } else if (ch == "." && stream.match("..")) {
- return ret("spread", "meta");
- } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
- return ret(ch);
- } else if (ch == "=" && stream.eat(">")) {
- return ret("=>", "operator");
- } else if (ch == "0" && stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)) {
- return ret("number", "number");
- } else if (/\d/.test(ch)) {
- stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/);
- return ret("number", "number");
- } else if (ch == "/") {
- if (stream.eat("*")) {
- state.tokenize = tokenComment;
- return tokenComment(stream, state);
- } else if (stream.eat("/")) {
- stream.skipToEnd();
- return ret("comment", "comment");
- } else if (expressionAllowed(stream, state, 1)) {
- readRegexp(stream);
- stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
- return ret("regexp", "string-2");
- } else {
- stream.eat("=");
- return ret("operator", "operator", stream.current());
- }
- } else if (ch == "`") {
- state.tokenize = tokenQuasi;
- return tokenQuasi(stream, state);
- } else if (ch == "#") {
- stream.skipToEnd();
- return ret("error", "error");
- } else if (isOperatorChar.test(ch)) {
- if (ch != ">" || !state.lexical || state.lexical.type != ">") {
- if (stream.eat("=")) {
- if (ch == "!" || ch == "=") stream.eat("=")
- } else if (/[<>*+\-]/.test(ch)) {
- stream.eat(ch)
- if (ch == ">") stream.eat(ch)
+ // types
+ string: type,
+ number: type,
+ boolean: type,
+ any: type
+ };
+
+ for (var attr in tsKeywords) {
+ jsKeywords[attr] = tsKeywords[attr];
}
}
- return ret("operator", "operator", stream.current());
- } else if (wordRE.test(ch)) {
- stream.eatWhile(wordRE);
- var word = stream.current()
- if (keywords.propertyIsEnumerable(word)) {
- var kw = keywords[word]
- return ret(kw.type, kw.style, word)
+
+ return jsKeywords;
+ })();
+
+ var isOperatorChar = /[+\-*&%=<>!?|~^@]/;
+ var isJsonldKeyword =
+ /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;
+
+ function readRegexp(stream) {
+ var escaped = false,
+ next,
+ inSet = false;
+ while ((next = stream.next()) != null) {
+ if (!escaped) {
+ if (next == '/' && !inSet) return;
+ if (next == '[') inSet = true;
+ else if (inSet && next == ']') inSet = false;
+ }
+ escaped = !escaped && next == '\\';
}
- if (state.lastType != "." && word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false))
- return ret("async", "keyword", word)
- return ret("variable", "variable", word)
}
- }
- function tokenString(quote) {
- return function(stream, state) {
- var escaped = false, next;
- if (jsonldMode && stream.peek() == "@" && stream.match(isJsonldKeyword)){
- state.tokenize = tokenBase;
- return ret("jsonld-keyword", "meta");
+ // Used as scratch variables to communicate multiple values without
+ // consing up tons of objects.
+ var type, content;
+ function ret(tp, style, cont) {
+ type = tp;
+ content = cont;
+ return style;
+ }
+ function tokenBase(stream, state) {
+ var ch = stream.next();
+ if (ch == '"' || ch == "'") {
+ state.tokenize = tokenString(ch);
+ return state.tokenize(stream, state);
+ } else if (ch == '.' && stream.match(/^\d+(?:[eE][+\-]?\d+)?/)) {
+ return ret('number', 'number');
+ } else if (ch == '.' && stream.match('..')) {
+ return ret('spread', 'meta');
+ } else if (/[\[\]{}\(\),;\:\.]/.test(ch)) {
+ return ret(ch);
+ } else if (ch == '=' && stream.eat('>')) {
+ return ret('=>', 'operator');
+ } else if (
+ ch == '0' &&
+ stream.match(/^(?:x[\da-f]+|o[0-7]+|b[01]+)n?/i)
+ ) {
+ return ret('number', 'number');
+ } else if (/\d/.test(ch)) {
+ stream.match(/^\d*(?:n|(?:\.\d*)?(?:[eE][+\-]?\d+)?)?/);
+ return ret('number', 'number');
+ } else if (ch == '/') {
+ if (stream.eat('*')) {
+ state.tokenize = tokenComment;
+ return tokenComment(stream, state);
+ } else if (stream.eat('/')) {
+ stream.skipToEnd();
+ return ret('comment', 'comment');
+ } else if (expressionAllowed(stream, state, 1)) {
+ readRegexp(stream);
+ stream.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/);
+ return ret('regexp', 'string-2');
+ } else {
+ stream.eat('=');
+ return ret('operator', 'operator', stream.current());
+ }
+ } else if (ch == '`') {
+ state.tokenize = tokenQuasi;
+ return tokenQuasi(stream, state);
+ } else if (ch == '#') {
+ stream.skipToEnd();
+ return ret('error', 'error');
+ } else if (isOperatorChar.test(ch)) {
+ if (ch != '>' || !state.lexical || state.lexical.type != '>') {
+ if (stream.eat('=')) {
+ if (ch == '!' || ch == '=') stream.eat('=');
+ } else if (/[<>*+\-]/.test(ch)) {
+ stream.eat(ch);
+ if (ch == '>') stream.eat(ch);
+ }
+ }
+ return ret('operator', 'operator', stream.current());
+ } else if (wordRE.test(ch)) {
+ stream.eatWhile(wordRE);
+ var word = stream.current();
+ if (keywords.propertyIsEnumerable(word)) {
+ var kw = keywords[word];
+ return ret(kw.type, kw.style, word);
+ }
+ if (
+ state.lastType != '.' &&
+ word == 'async' &&
+ stream.match(/^(\s|\/\*.*?\*\/)*[\[\(\w]/, false)
+ )
+ return ret('async', 'keyword', word);
+ return ret('variable', 'variable', word);
}
+ }
+
+ function tokenString(quote) {
+ return function (stream, state) {
+ var escaped = false,
+ next;
+ if (
+ jsonldMode &&
+ stream.peek() == '@' &&
+ stream.match(isJsonldKeyword)
+ ) {
+ state.tokenize = tokenBase;
+ return ret('jsonld-keyword', 'meta');
+ }
+ while ((next = stream.next()) != null) {
+ if (next == quote && !escaped) break;
+ escaped = !escaped && next == '\\';
+ }
+ if (!escaped) state.tokenize = tokenBase;
+ return ret('string', 'string');
+ };
+ }
+
+ function tokenComment(stream, state) {
+ var maybeEnd = false,
+ ch;
+ while ((ch = stream.next())) {
+ if (ch == '/' && maybeEnd) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ maybeEnd = ch == '*';
+ }
+ return ret('comment', 'comment');
+ }
+
+ function tokenQuasi(stream, state) {
+ var escaped = false,
+ next;
while ((next = stream.next()) != null) {
- if (next == quote && !escaped) break;
- escaped = !escaped && next == "\\";
+ if (!escaped && (next == '`' || (next == '$' && stream.eat('{')))) {
+ state.tokenize = tokenBase;
+ break;
+ }
+ escaped = !escaped && next == '\\';
}
- if (!escaped) state.tokenize = tokenBase;
- return ret("string", "string");
+ return ret('quasi', 'string-2', stream.current());
+ }
+
+ var brackets = '([{}])';
+ // This is a crude lookahead trick to try and notice that we're
+ // parsing the argument patterns for a fat-arrow function before we
+ // actually hit the arrow token. It only works if the arrow is on
+ // the same line as the arguments and there's no strange noise
+ // (comments) in between. Fallback is to only notice when we hit the
+ // arrow, and not declare the arguments as locals for the arrow
+ // body.
+ function findFatArrow(stream, state) {
+ if (state.fatArrowAt) state.fatArrowAt = null;
+ var arrow = stream.string.indexOf('=>', stream.start);
+ if (arrow < 0) return;
+
+ if (isTS) {
+ // Try to skip TypeScript return type declarations after the arguments
+ var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(
+ stream.string.slice(stream.start, arrow)
+ );
+ if (m) arrow = m.index;
+ }
+
+ var depth = 0,
+ sawSomething = false;
+ for (var pos = arrow - 1; pos >= 0; --pos) {
+ var ch = stream.string.charAt(pos);
+ var bracket = brackets.indexOf(ch);
+ if (bracket >= 0 && bracket < 3) {
+ if (!depth) {
+ ++pos;
+ break;
+ }
+ if (--depth == 0) {
+ if (ch == '(') sawSomething = true;
+ break;
+ }
+ } else if (bracket >= 3 && bracket < 6) {
+ ++depth;
+ } else if (wordRE.test(ch)) {
+ sawSomething = true;
+ } else if (/["'\/]/.test(ch)) {
+ return;
+ } else if (sawSomething && !depth) {
+ ++pos;
+ break;
+ }
+ }
+ if (sawSomething && !depth) state.fatArrowAt = pos;
+ }
+
+ // Parser
+
+ var atomicTypes = {
+ atom: true,
+ number: true,
+ variable: true,
+ string: true,
+ regexp: true,
+ this: true,
+ 'jsonld-keyword': true
};
- }
-
- function tokenComment(stream, state) {
- var maybeEnd = false, ch;
- while (ch = stream.next()) {
- if (ch == "/" && maybeEnd) {
- state.tokenize = tokenBase;
- break;
- }
- maybeEnd = (ch == "*");
- }
- return ret("comment", "comment");
- }
-
- function tokenQuasi(stream, state) {
- var escaped = false, next;
- while ((next = stream.next()) != null) {
- if (!escaped && (next == "`" || next == "$" && stream.eat("{"))) {
- state.tokenize = tokenBase;
- break;
- }
- escaped = !escaped && next == "\\";
- }
- return ret("quasi", "string-2", stream.current());
- }
-
- var brackets = "([{}])";
- // This is a crude lookahead trick to try and notice that we're
- // parsing the argument patterns for a fat-arrow function before we
- // actually hit the arrow token. It only works if the arrow is on
- // the same line as the arguments and there's no strange noise
- // (comments) in between. Fallback is to only notice when we hit the
- // arrow, and not declare the arguments as locals for the arrow
- // body.
- function findFatArrow(stream, state) {
- if (state.fatArrowAt) state.fatArrowAt = null;
- var arrow = stream.string.indexOf("=>", stream.start);
- if (arrow < 0) return;
-
- if (isTS) { // Try to skip TypeScript return type declarations after the arguments
- var m = /:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(stream.string.slice(stream.start, arrow))
- if (m) arrow = m.index
- }
-
- var depth = 0, sawSomething = false;
- for (var pos = arrow - 1; pos >= 0; --pos) {
- var ch = stream.string.charAt(pos);
- var bracket = brackets.indexOf(ch);
- if (bracket >= 0 && bracket < 3) {
- if (!depth) { ++pos; break; }
- if (--depth == 0) { if (ch == "(") sawSomething = true; break; }
- } else if (bracket >= 3 && bracket < 6) {
- ++depth;
- } else if (wordRE.test(ch)) {
- sawSomething = true;
- } else if (/["'\/]/.test(ch)) {
- return;
- } else if (sawSomething && !depth) {
- ++pos;
- break;
- }
- }
- if (sawSomething && !depth) state.fatArrowAt = pos;
- }
-
- // Parser
-
- var atomicTypes = {"atom": true, "number": true, "variable": true, "string": true, "regexp": true, "this": true, "jsonld-keyword": true};
-
- function JSLexical(indented, column, type, align, prev, info) {
- this.indented = indented;
- this.column = column;
- this.type = type;
- this.prev = prev;
- this.info = info;
- if (align != null) this.align = align;
- }
-
- function inScope(state, varname) {
- for (var v = state.localVars; v; v = v.next)
- if (v.name == varname) return true;
- for (var cx = state.context; cx; cx = cx.prev) {
- for (var v = cx.vars; v; v = v.next)
+
+ function JSLexical(indented, column, type, align, prev, info) {
+ this.indented = indented;
+ this.column = column;
+ this.type = type;
+ this.prev = prev;
+ this.info = info;
+ if (align != null) this.align = align;
+ }
+
+ function inScope(state, varname) {
+ for (var v = state.localVars; v; v = v.next)
if (v.name == varname) return true;
+ for (var cx = state.context; cx; cx = cx.prev) {
+ for (var v = cx.vars; v; v = v.next) if (v.name == varname) return true;
+ }
}
- }
-
- function parseJS(state, style, type, content, stream) {
- var cc = state.cc;
- // Communicate our context to the combinators.
- // (Less wasteful than consing up a hundred closures on every call.)
- cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;
-
- if (!state.lexical.hasOwnProperty("align"))
- state.lexical.align = true;
-
- while(true) {
- var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;
- if (combinator(type, content)) {
- while(cc.length && cc[cc.length - 1].lex)
- cc.pop()();
- if (style?.slice(0, 2) === "p5") return style;
- if (cx.marked) return cx.marked;
- if (type == "variable" && inScope(state, content)) return "variable-2";
- return style;
- }
- }
- }
-
- // Combinator utils
-
- var cx = {state: null, column: null, marked: null, cc: null};
- function pass() {
- for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
- }
- function cont() {
- pass.apply(null, arguments);
- return true;
- }
- function inList(name, list) {
- for (var v = list; v; v = v.next) if (v.name == name) return true
- return false;
- }
- function register(varname) {
- var state = cx.state;
- cx.marked = "def";
- if (state.context) {
- if (state.lexical.info == "var" && state.context && state.context.block) {
- // FIXME function decls are also not block scoped
- var newContext = registerVarScoped(varname, state.context)
- if (newContext != null) {
- state.context = newContext
- return
+
+ function parseJS(state, style, type, content, stream) {
+ var cc = state.cc;
+ // Communicate our context to the combinators.
+ // (Less wasteful than consing up a hundred closures on every call.)
+ cx.state = state;
+ cx.stream = stream;
+ (cx.marked = null), (cx.cc = cc);
+ cx.style = style;
+
+ if (!state.lexical.hasOwnProperty('align')) state.lexical.align = true;
+
+ while (true) {
+ var combinator = cc.length
+ ? cc.pop()
+ : jsonMode
+ ? expression
+ : statement;
+ if (combinator(type, content)) {
+ while (cc.length && cc[cc.length - 1].lex) cc.pop()();
+ if (style?.slice(0, 2) === 'p5') return style;
+ if (cx.marked) return cx.marked;
+ if (type == 'variable' && inScope(state, content))
+ return 'variable-2';
+ return style;
}
- } else if (!inList(varname, state.localVars)) {
- state.localVars = new Var(varname, state.localVars)
- return
- }
- }
- window.register = register;
- // Fall through means this is global
- if (parserConfig.globalVars && !inList(varname, state.globalVars))
- state.globalVars = new Var(varname, state.globalVars)
- }
- function registerVarScoped(varname, context) {
- if (!context) {
- return null
- } else if (context.block) {
- var inner = registerVarScoped(varname, context.prev)
- if (!inner) return null
- if (inner == context.prev) return context
- return new Context(inner, context.vars, true)
- } else if (inList(varname, context.vars)) {
- return context
- } else {
- return new Context(context.prev, new Var(varname, context.vars), false)
- }
- }
-
- function isModifier(name) {
- return name == "public" || name == "private" || name == "protected" || name == "abstract" || name == "readonly"
- }
-
- // Combinators
-
- function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }
- function Var(name, next) { this.name = name; this.next = next }
-
- var defaultVars = new Var("this", new Var("arguments", null))
- function pushcontext() {
- cx.state.context = new Context(cx.state.context, cx.state.localVars, false)
- cx.state.localVars = defaultVars
- }
- function pushblockcontext() {
- cx.state.context = new Context(cx.state.context, cx.state.localVars, true)
- cx.state.localVars = null
- }
- function popcontext() {
- cx.state.localVars = cx.state.context.vars
- cx.state.context = cx.state.context.prev
- }
- popcontext.lex = true
- function pushlex(type, info) {
- var result = function() {
- var state = cx.state, indent = state.indented;
- if (state.lexical.type == "stat") indent = state.lexical.indented;
- else for (var outer = state.lexical; outer && outer.type == ")" && outer.align; outer = outer.prev)
- indent = outer.indented;
- state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);
- };
- result.lex = true;
- return result;
- }
- function poplex() {
- var state = cx.state;
- if (state.lexical.prev) {
- if (state.lexical.type == ")")
- state.indented = state.lexical.indented;
- state.lexical = state.lexical.prev;
- }
- }
- poplex.lex = true;
-
- function expect(wanted) {
- function exp(type) {
- if (type == wanted) return cont();
- else if (wanted == ";" || type == "}" || type == ")" || type == "]") return pass();
- else return cont(exp);
- };
- return exp;
- }
-
- function statement(type, value) {
- if (type == "var") return cont(pushlex("vardef", value), vardef, expect(";"), poplex);
- if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex);
- if (type == "keyword b") return cont(pushlex("form"), statement, poplex);
- if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex);
- if (type == "debugger") return cont(expect(";"));
- if (type == "{") return cont(pushlex("}"), pushblockcontext, block, poplex, popcontext);
- if (type == ";") return cont();
- if (type == "if") {
- if (cx.state.lexical.info == "else" && cx.state.cc[cx.state.cc.length - 1] == poplex)
- cx.state.cc.pop()();
- return cont(pushlex("form"), parenExpr, statement, poplex, maybeelse);
- }
- if (type == "function") return cont(functiondef);
- if (type == "for") return cont(pushlex("form"), forspec, statement, poplex);
- if (type == "class" || (isTS && value == "interface")) {
- cx.marked = "keyword"
- return cont(pushlex("form", type == "class" ? type : value), className, poplex)
- }
- if (type == "variable") {
- if (isTS && value == "declare") {
- cx.marked = "keyword"
- return cont(statement)
- } else if (isTS && (value == "module" || value == "enum" || value == "type") && cx.stream.match(/^\s*\w/, false)) {
- cx.marked = "keyword"
- if (value == "enum") return cont(enumdef);
- else if (value == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";"));
- else return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex)
- } else if (isTS && value == "namespace") {
- cx.marked = "keyword"
- return cont(pushlex("form"), expression, statement, poplex)
- } else if (isTS && value == "abstract") {
- cx.marked = "keyword"
- return cont(statement)
+ }
+ }
+
+ // Combinator utils
+
+ var cx = { state: null, column: null, marked: null, cc: null };
+ function pass() {
+ for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);
+ }
+ function cont() {
+ pass.apply(null, arguments);
+ return true;
+ }
+ function inList(name, list) {
+ for (var v = list; v; v = v.next) if (v.name == name) return true;
+ return false;
+ }
+ function register(varname) {
+ var state = cx.state;
+ cx.marked = 'def';
+ if (state.context) {
+ if (
+ state.lexical.info == 'var' &&
+ state.context &&
+ state.context.block
+ ) {
+ // FIXME function decls are also not block scoped
+ var newContext = registerVarScoped(varname, state.context);
+ if (newContext != null) {
+ state.context = newContext;
+ return;
+ }
+ } else if (!inList(varname, state.localVars)) {
+ state.localVars = new Var(varname, state.localVars);
+ return;
+ }
+ }
+ window.register = register;
+ // Fall through means this is global
+ if (parserConfig.globalVars && !inList(varname, state.globalVars))
+ state.globalVars = new Var(varname, state.globalVars);
+ }
+ function registerVarScoped(varname, context) {
+ if (!context) {
+ return null;
+ } else if (context.block) {
+ var inner = registerVarScoped(varname, context.prev);
+ if (!inner) return null;
+ if (inner == context.prev) return context;
+ return new Context(inner, context.vars, true);
+ } else if (inList(varname, context.vars)) {
+ return context;
} else {
- return cont(pushlex("stat"), maybelabel);
- }
- }
- if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), pushblockcontext,
- block, poplex, poplex, popcontext);
- if (type == "case") return cont(expression, expect(":"));
- if (type == "default") return cont(expect(":"));
- if (type == "catch") return cont(pushlex("form"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);
- if (type == "export") return cont(pushlex("stat"), afterExport, poplex);
- if (type == "import") return cont(pushlex("stat"), afterImport, poplex);
- if (type == "async") return cont(statement)
- if (value == "@") return cont(expression, statement)
- return pass(pushlex("stat"), expression, expect(";"), poplex);
- }
- function maybeCatchBinding(type) {
- if (type == "(") return cont(funarg, expect(")"))
- }
- function expression(type, value) {
- return expressionInner(type, value, false);
- }
- function expressionNoComma(type, value) {
- return expressionInner(type, value, true);
- }
- function parenExpr(type) {
- if (type != "(") return pass()
- return cont(pushlex(")"), expression, expect(")"), poplex)
- }
- function expressionInner(type, value, noComma) {
- if (cx.state.fatArrowAt == cx.stream.start) {
- var body = noComma ? arrowBodyNoComma : arrowBody;
- if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext);
- else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext);
- }
-
- var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
- if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
- if (type == "function") return cont(functiondef, maybeop);
- if (type == "class" || (isTS && value == "interface")) { cx.marked = "keyword"; return cont(pushlex("form"), classExpression, poplex); }
- if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression);
- if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop);
- if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression);
- if (type == "[") return cont(pushlex("]"), arrayLiteral, poplex, maybeop);
- if (type == "{") return contCommasep(objprop, "}", null, maybeop);
- if (type == "quasi") return pass(quasi, maybeop);
- if (type == "new") return cont(maybeTarget(noComma));
- if (type == "import") return cont(expression);
- return cont();
- }
- function maybeexpression(type) {
- if (type.match(/[;\}\)\],]/)) return pass();
- return pass(expression);
- }
-
- function maybeoperatorComma(type, value) {
- if (type == ",") return cont(expression);
- return maybeoperatorNoComma(type, value, false);
- }
- function maybeoperatorNoComma(type, value, noComma) {
- var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
- var expr = noComma == false ? expression : expressionNoComma;
- if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);
- if (type == "operator") {
- if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me);
- if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false))
- return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me);
- if (value == "?") return cont(expression, expect(":"), expr);
- return cont(expr);
- }
- if (type == "quasi") { return pass(quasi, me); }
- if (type == ";") return;
- if (type == "(") return contCommasep(expressionNoComma, ")", "call", me);
- if (type == ".") return cont(property, me);
- if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me);
- if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) }
- if (type == "regexp") {
- cx.state.lastType = cx.marked = "operator"
- cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)
- return cont(expr)
- }
- }
- function quasi(type, value) {
- if (type != "quasi") return pass();
- if (value.slice(value.length - 2) != "${") return cont(quasi);
- return cont(expression, continueQuasi);
- }
- function continueQuasi(type) {
- if (type == "}") {
- cx.marked = "string-2";
- cx.state.tokenize = tokenQuasi;
- return cont(quasi);
- }
- }
- function arrowBody(type) {
- findFatArrow(cx.stream, cx.state);
- return pass(type == "{" ? statement : expression);
- }
- function arrowBodyNoComma(type) {
- findFatArrow(cx.stream, cx.state);
- return pass(type == "{" ? statement : expressionNoComma);
- }
- function maybeTarget(noComma) {
- return function(type) {
- if (type == ".") return cont(noComma ? targetNoComma : target);
- else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)
- else return pass(noComma ? expressionNoComma : expression);
- };
- }
- function target(_, value) {
- if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorComma); }
- }
- function targetNoComma(_, value) {
- if (value == "target") { cx.marked = "keyword"; return cont(maybeoperatorNoComma); }
- }
- function maybelabel(type) {
- if (type == ":") return cont(poplex, statement);
- return pass(maybeoperatorComma, expect(";"), poplex);
- }
- function property(type) {
- if (type == "variable") {cx.marked = "property"; return cont();}
- }
- function objprop(type, value) {
- if (type == "async") {
- cx.marked = "property";
- return cont(objprop);
- } else if (type == "variable" || cx.style == "keyword") {
- cx.marked = "property";
- if (value == "get" || value == "set") return cont(getterSetter);
- var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params
- if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false)))
- cx.state.fatArrowAt = cx.stream.pos + m[0].length
- return cont(afterprop);
- } else if (type == "number" || type == "string") {
- cx.marked = jsonldMode ? "property" : (cx.style + " property");
- return cont(afterprop);
- } else if (type == "jsonld-keyword") {
- return cont(afterprop);
- } else if (isTS && isModifier(value)) {
- cx.marked = "keyword"
- return cont(objprop)
- } else if (type == "[") {
- return cont(expression, maybetype, expect("]"), afterprop);
- } else if (type == "spread") {
- return cont(expressionNoComma, afterprop);
- } else if (value == "*") {
- cx.marked = "keyword";
- return cont(objprop);
- } else if (type == ":") {
- return pass(afterprop)
- }
- }
- function getterSetter(type) {
- if (type != "variable") return pass(afterprop);
- cx.marked = "property";
- return cont(functiondef);
- }
- function afterprop(type) {
- if (type == ":") return cont(expressionNoComma);
- if (type == "(") return pass(functiondef);
- }
- function commasep(what, end, sep) {
- function proceed(type, value) {
- if (sep ? sep.indexOf(type) > -1 : type == ",") {
- var lex = cx.state.lexical;
- if (lex.info == "call") lex.pos = (lex.pos || 0) + 1;
- return cont(function(type, value) {
- if (type == end || value == end) return pass()
- return pass(what)
- }, proceed);
- }
- if (type == end || value == end) return cont();
- if (sep && sep.indexOf(";") > -1) return pass(what)
- return cont(expect(end));
- }
- return function(type, value) {
- if (type == end || value == end) return cont();
- return pass(what, proceed);
- };
- }
- function contCommasep(what, end, info) {
- for (var i = 3; i < arguments.length; i++)
- cx.cc.push(arguments[i]);
- return cont(pushlex(end, info), commasep(what, end), poplex);
- }
- function block(type) {
- if (type == "}") return cont();
- return pass(statement, block);
- }
- function maybetype(type, value) {
- if (isTS) {
- if (type == ":") return cont(typeexpr);
- if (value == "?") return cont(maybetype);
- }
- }
- function mayberettype(type) {
- if (isTS && type == ":") {
- if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr)
- else return cont(typeexpr)
- }
- }
- function isKW(_, value) {
- if (value == "is") {
- cx.marked = "keyword"
- return cont()
- }
- }
- function typeexpr(type, value) {
- if (value == "keyof" || value == "typeof") {
- cx.marked = "keyword"
- return cont(value == "keyof" ? typeexpr : expressionNoComma)
- }
- if (type == "variable" || value == "void") {
- cx.marked = "type"
- return cont(afterType)
- }
- if (type == "string" || type == "number" || type == "atom") return cont(afterType);
- if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType)
- if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType)
- if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType)
- if (type == "<") return cont(commasep(typeexpr, ">"), typeexpr)
- }
- function maybeReturnType(type) {
- if (type == "=>") return cont(typeexpr)
- }
- function typeprop(type, value) {
- if (type == "variable" || cx.style == "keyword") {
- cx.marked = "property"
- return cont(typeprop)
- } else if (value == "?") {
- return cont(typeprop)
- } else if (type == ":") {
- return cont(typeexpr)
- } else if (type == "[") {
- return cont(expression, maybetype, expect("]"), typeprop)
- } else if (type == "(") {
- return cont(pushlex(")"), commasep(funarg, ")"), poplex, typeprop)
- }
- }
- function typearg(type, value) {
- if (type == "variable" && cx.stream.match(/^\s*[?:]/, false) || value == "?") return cont(typearg)
- if (type == ":") return cont(typeexpr)
- return pass(typeexpr)
- }
- function afterType(type, value) {
- if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
- if (value == "|" || type == "." || value == "&") return cont(typeexpr)
- if (type == "[") return cont(expect("]"), afterType)
- if (value == "extends" || value == "implements") { cx.marked = "keyword"; return cont(typeexpr) }
- }
- function maybeTypeArgs(_, value) {
- if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType)
- }
- function typeparam() {
- return pass(typeexpr, maybeTypeDefault)
- }
- function maybeTypeDefault(_, value) {
- if (value == "=") return cont(typeexpr)
- }
- function vardef(_, value) {
- if (value == "enum") {cx.marked = "keyword"; return cont(enumdef)}
- return pass(pattern, maybetype, maybeAssign, vardefCont);
- }
- function pattern(type, value) {
- if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(pattern) }
- if (type == "variable") { register(value); return cont(); }
- if (type == "spread") return cont(pattern);
- if (type == "[") return contCommasep(eltpattern, "]");
- if (type == "{") return contCommasep(proppattern, "}");
- }
- function proppattern(type, value) {
- if (type == "variable" && !cx.stream.match(/^\s*:/, false)) {
- register(value);
- return cont(maybeAssign);
- }
- if (type == "variable") cx.marked = "property";
- if (type == "spread") return cont(pattern);
- if (type == "}") return pass();
- if (type == "[") return cont(expression, expect(']'), expect(':'), proppattern);
- return cont(expect(":"), pattern, maybeAssign);
- }
- function eltpattern() {
- return pass(pattern, maybeAssign)
- }
- function maybeAssign(_type, value) {
- if (value == "=") return cont(expressionNoComma);
- }
- function vardefCont(type) {
- if (type == ",") return cont(vardef);
- }
- function maybeelse(type, value) {
- if (type == "keyword b" && value == "else") return cont(pushlex("form", "else"), statement, poplex);
- }
- function forspec(type, value) {
- if (value == "await") return cont(forspec);
- if (type == "(") return cont(pushlex(")"), forspec1, expect(")"), poplex);
- }
- function forspec1(type) {
- if (type == "var") return cont(vardef, expect(";"), forspec2);
- if (type == ";") return cont(forspec2);
- if (type == "variable") return cont(formaybeinof);
- return pass(expression, expect(";"), forspec2);
- }
- function formaybeinof(_type, value) {
- if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
- return cont(maybeoperatorComma, forspec2);
- }
- function forspec2(type, value) {
- if (type == ";") return cont(forspec3);
- if (value == "in" || value == "of") { cx.marked = "keyword"; return cont(expression); }
- return pass(expression, expect(";"), forspec3);
- }
- function forspec3(type) {
- if (type != ")") cont(expression);
- }
- function functiondef(type, value) {
- if (value == "*") {cx.marked = "keyword"; return cont(functiondef);}
- if (type == "variable") {register(value); return cont(functiondef);}
- if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext);
- if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef)
- }
- function functiondecl(type, value) {
- if (value == "*") {cx.marked = "keyword"; return cont(functiondecl);}
- if (type == "variable") {register(value); return cont(functiondecl);}
- if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, popcontext);
- if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondecl)
- }
- function funarg(type, value) {
- if (value == "@") cont(expression, funarg)
- if (type == "spread") return cont(funarg);
- if (isTS && isModifier(value)) { cx.marked = "keyword"; return cont(funarg); }
- return pass(pattern, maybetype, maybeAssign);
- }
- function classExpression(type, value) {
- // Class expressions may have an optional name.
- if (type == "variable") return className(type, value);
- return classNameAfter(type, value);
- }
- function className(type, value) {
- if (type == "variable") {register(value); return cont(classNameAfter);}
- }
- function classNameAfter(type, value) {
- if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter)
- if (value == "extends" || value == "implements" || (isTS && type == ",")) {
- if (value == "implements") cx.marked = "keyword";
- return cont(isTS ? typeexpr : expression, classNameAfter);
- }
- if (type == "{") return cont(pushlex("}"), classBody, poplex);
- }
- function classBody(type, value) {
- if (type == "async" ||
- (type == "variable" &&
- (value == "static" || value == "get" || value == "set" || (isTS && isModifier(value))) &&
- cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) {
- cx.marked = "keyword";
- return cont(classBody);
- }
- if (type == "variable" || cx.style == "keyword") {
- cx.marked = "property";
- return cont(isTS ? classfield : functiondef, classBody);
- }
- if (type == "[")
- return cont(expression, maybetype, expect("]"), isTS ? classfield : functiondef, classBody)
- if (value == "*") {
- cx.marked = "keyword";
- return cont(classBody);
- }
- if (type == ";") return cont(classBody);
- if (type == "}") return cont();
- if (value == "@") return cont(expression, classBody)
- }
- function classfield(type, value) {
- if (value == "?") return cont(classfield)
- if (type == ":") return cont(typeexpr, maybeAssign)
- if (value == "=") return cont(expressionNoComma)
- var context = cx.state.lexical.prev, isInterface = context && context.info == "interface"
- return pass(isInterface ? functiondecl : functiondef)
- }
- function afterExport(type, value) {
- if (value == "*") { cx.marked = "keyword"; return cont(maybeFrom, expect(";")); }
- if (value == "default") { cx.marked = "keyword"; return cont(expression, expect(";")); }
- if (type == "{") return cont(commasep(exportField, "}"), maybeFrom, expect(";"));
- return pass(statement);
- }
- function exportField(type, value) {
- if (value == "as") { cx.marked = "keyword"; return cont(expect("variable")); }
- if (type == "variable") return pass(expressionNoComma, exportField);
- }
- function afterImport(type) {
- if (type == "string") return cont();
- if (type == "(") return pass(expression);
- return pass(importSpec, maybeMoreImports, maybeFrom);
- }
- function importSpec(type, value) {
- if (type == "{") return contCommasep(importSpec, "}");
- if (type == "variable") register(value);
- if (value == "*") cx.marked = "keyword";
- return cont(maybeAs);
- }
- function maybeMoreImports(type) {
- if (type == ",") return cont(importSpec, maybeMoreImports)
- }
- function maybeAs(_type, value) {
- if (value == "as") { cx.marked = "keyword"; return cont(importSpec); }
- }
- function maybeFrom(_type, value) {
- if (value == "from") { cx.marked = "keyword"; return cont(expression); }
- }
- function arrayLiteral(type) {
- if (type == "]") return cont();
- return pass(commasep(expressionNoComma, "]"));
- }
- function enumdef() {
- return pass(pushlex("form"), pattern, expect("{"), pushlex("}"), commasep(enummember, "}"), poplex, poplex)
- }
- function enummember() {
- return pass(pattern, maybeAssign);
- }
-
- function isContinuedStatement(state, textAfter) {
- return state.lastType == "operator" || state.lastType == "," ||
- isOperatorChar.test(textAfter.charAt(0)) ||
- /[,.]/.test(textAfter.charAt(0));
- }
-
- function expressionAllowed(stream, state, backUp) {
- return state.tokenize == tokenBase &&
- /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) ||
- (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
- }
-
- // Interface
-
- return {
- startState: function(basecolumn) {
- var state = {
- tokenize: tokenBase,
- lastType: "sof",
- cc: [],
- lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, "block", false),
- localVars: parserConfig.localVars,
- context: parserConfig.localVars && new Context(null, null, false),
- indented: basecolumn || 0
+ return new Context(context.prev, new Var(varname, context.vars), false);
+ }
+ }
+
+ function isModifier(name) {
+ return (
+ name == 'public' ||
+ name == 'private' ||
+ name == 'protected' ||
+ name == 'abstract' ||
+ name == 'readonly'
+ );
+ }
+
+ // Combinators
+
+ function Context(prev, vars, block) {
+ this.prev = prev;
+ this.vars = vars;
+ this.block = block;
+ }
+ function Var(name, next) {
+ this.name = name;
+ this.next = next;
+ }
+
+ var defaultVars = new Var('this', new Var('arguments', null));
+ function pushcontext() {
+ cx.state.context = new Context(
+ cx.state.context,
+ cx.state.localVars,
+ false
+ );
+ cx.state.localVars = defaultVars;
+ }
+ function pushblockcontext() {
+ cx.state.context = new Context(
+ cx.state.context,
+ cx.state.localVars,
+ true
+ );
+ cx.state.localVars = null;
+ }
+ function popcontext() {
+ cx.state.localVars = cx.state.context.vars;
+ cx.state.context = cx.state.context.prev;
+ }
+ popcontext.lex = true;
+ function pushlex(type, info) {
+ var result = function () {
+ var state = cx.state,
+ indent = state.indented;
+ if (state.lexical.type == 'stat') indent = state.lexical.indented;
+ else
+ for (
+ var outer = state.lexical;
+ outer && outer.type == ')' && outer.align;
+ outer = outer.prev
+ )
+ indent = outer.indented;
+ state.lexical = new JSLexical(
+ indent,
+ cx.stream.column(),
+ type,
+ null,
+ state.lexical,
+ info
+ );
};
- if (parserConfig.globalVars && typeof parserConfig.globalVars == "object")
- state.globalVars = parserConfig.globalVars;
- return state;
- },
-
- token: function(stream, state) {
- if (stream.sol()) {
- if (!state.lexical.hasOwnProperty("align"))
- state.lexical.align = false;
- state.indented = stream.indentation();
- findFatArrow(stream, state);
- }
- if (state.tokenize != tokenComment && stream.eatSpace()) return null;
- var style = state.tokenize(stream, state);
- if (type == "comment") return style;
- state.lastType = type == "operator" && (content == "++" || content == "--") ? "incdec" : type;
- return parseJS(state, style, type, content, stream);
- },
-
- indent: function(state, textAfter) {
- if (state.tokenize == tokenComment) return CodeMirror.Pass;
- if (state.tokenize != tokenBase) return 0;
- var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top
- // Kludge to prevent 'maybelse' from blocking lexical scope pops
- if (!/^\s*else\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {
- var c = state.cc[i];
- if (c == poplex) lexical = lexical.prev;
- else if (c != maybeelse) break;
- }
- while ((lexical.type == "stat" || lexical.type == "form") &&
- (firstChar == "}" || ((top = state.cc[state.cc.length - 1]) &&
- (top == maybeoperatorComma || top == maybeoperatorNoComma) &&
- !/^[,\.=+\-*:?[\(]/.test(textAfter))))
- lexical = lexical.prev;
- if (statementIndent && lexical.type == ")" && lexical.prev.type == "stat")
- lexical = lexical.prev;
- var type = lexical.type, closing = firstChar == type;
-
- if (type == "vardef") return lexical.indented + (state.lastType == "operator" || state.lastType == "," ? lexical.info.length + 1 : 0);
- else if (type == "form" && firstChar == "{") return lexical.indented;
- else if (type == "form") return lexical.indented + indentUnit;
- else if (type == "stat")
- return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);
- else if (lexical.info == "switch" && !closing && parserConfig.doubleIndentSwitch != false)
- return lexical.indented + (/^(?:case|default)\b/.test(textAfter) ? indentUnit : 2 * indentUnit);
- else if (lexical.align) return lexical.column + (closing ? 0 : 1);
- else return lexical.indented + (closing ? 0 : indentUnit);
- },
-
- electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
- blockCommentStart: jsonMode ? null : "/*",
- blockCommentEnd: jsonMode ? null : "*/",
- blockCommentContinue: jsonMode ? null : " * ",
- lineComment: jsonMode ? null : "//",
- fold: "brace",
- closeBrackets: "()[]{}''\"\"``",
-
- helperType: jsonMode ? "json" : "javascript",
- jsonldMode: jsonldMode,
- jsonMode: jsonMode,
-
- expressionAllowed: expressionAllowed,
-
- skipExpression: function(state) {
- var top = state.cc[state.cc.length - 1]
- if (top == expression || top == expressionNoComma) state.cc.pop()
- }
- };
-});
+ result.lex = true;
+ return result;
+ }
+ function poplex() {
+ var state = cx.state;
+ if (state.lexical.prev) {
+ if (state.lexical.type == ')') state.indented = state.lexical.indented;
+ state.lexical = state.lexical.prev;
+ }
+ }
+ poplex.lex = true;
-CodeMirror.registerHelper("wordChars", "javascript", /[\w$]/);
+ function expect(wanted) {
+ function exp(type) {
+ if (type == wanted) return cont();
+ else if (wanted == ';' || type == '}' || type == ')' || type == ']')
+ return pass();
+ else return cont(exp);
+ }
+ return exp;
+ }
+
+ function statement(type, value) {
+ if (type == 'var')
+ return cont(pushlex('vardef', value), vardef, expect(';'), poplex);
+ if (type == 'keyword a')
+ return cont(pushlex('form'), parenExpr, statement, poplex);
+ if (type == 'keyword b') return cont(pushlex('form'), statement, poplex);
+ if (type == 'keyword d')
+ return cx.stream.match(/^\s*$/, false)
+ ? cont()
+ : cont(pushlex('stat'), maybeexpression, expect(';'), poplex);
+ if (type == 'debugger') return cont(expect(';'));
+ if (type == '{')
+ return cont(pushlex('}'), pushblockcontext, block, poplex, popcontext);
+ if (type == ';') return cont();
+ if (type == 'if') {
+ if (
+ cx.state.lexical.info == 'else' &&
+ cx.state.cc[cx.state.cc.length - 1] == poplex
+ )
+ cx.state.cc.pop()();
+ return cont(pushlex('form'), parenExpr, statement, poplex, maybeelse);
+ }
+ if (type == 'function') return cont(functiondef);
+ if (type == 'for')
+ return cont(pushlex('form'), forspec, statement, poplex);
+ if (type == 'class' || (isTS && value == 'interface')) {
+ cx.marked = 'keyword';
+ return cont(
+ pushlex('form', type == 'class' ? type : value),
+ className,
+ poplex
+ );
+ }
+ if (type == 'variable') {
+ if (isTS && value == 'declare') {
+ cx.marked = 'keyword';
+ return cont(statement);
+ } else if (
+ isTS &&
+ (value == 'module' || value == 'enum' || value == 'type') &&
+ cx.stream.match(/^\s*\w/, false)
+ ) {
+ cx.marked = 'keyword';
+ if (value == 'enum') return cont(enumdef);
+ else if (value == 'type')
+ return cont(typeexpr, expect('operator'), typeexpr, expect(';'));
+ else
+ return cont(
+ pushlex('form'),
+ pattern,
+ expect('{'),
+ pushlex('}'),
+ block,
+ poplex,
+ poplex
+ );
+ } else if (isTS && value == 'namespace') {
+ cx.marked = 'keyword';
+ return cont(pushlex('form'), expression, statement, poplex);
+ } else if (isTS && value == 'abstract') {
+ cx.marked = 'keyword';
+ return cont(statement);
+ } else {
+ return cont(pushlex('stat'), maybelabel);
+ }
+ }
+ if (type == 'switch')
+ return cont(
+ pushlex('form'),
+ parenExpr,
+ expect('{'),
+ pushlex('}', 'switch'),
+ pushblockcontext,
+ block,
+ poplex,
+ poplex,
+ popcontext
+ );
+ if (type == 'case') return cont(expression, expect(':'));
+ if (type == 'default') return cont(expect(':'));
+ if (type == 'catch')
+ return cont(
+ pushlex('form'),
+ pushcontext,
+ maybeCatchBinding,
+ statement,
+ poplex,
+ popcontext
+ );
+ if (type == 'export') return cont(pushlex('stat'), afterExport, poplex);
+ if (type == 'import') return cont(pushlex('stat'), afterImport, poplex);
+ if (type == 'async') return cont(statement);
+ if (value == '@') return cont(expression, statement);
+ return pass(pushlex('stat'), expression, expect(';'), poplex);
+ }
+ function maybeCatchBinding(type) {
+ if (type == '(') return cont(funarg, expect(')'));
+ }
+ function expression(type, value) {
+ return expressionInner(type, value, false);
+ }
+ function expressionNoComma(type, value) {
+ return expressionInner(type, value, true);
+ }
+ function parenExpr(type) {
+ if (type != '(') return pass();
+ return cont(pushlex(')'), expression, expect(')'), poplex);
+ }
+ function expressionInner(type, value, noComma) {
+ if (cx.state.fatArrowAt == cx.stream.start) {
+ var body = noComma ? arrowBodyNoComma : arrowBody;
+ if (type == '(')
+ return cont(
+ pushcontext,
+ pushlex(')'),
+ commasep(funarg, ')'),
+ poplex,
+ expect('=>'),
+ body,
+ popcontext
+ );
+ else if (type == 'variable')
+ return pass(pushcontext, pattern, expect('=>'), body, popcontext);
+ }
+
+ var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;
+ if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);
+ if (type == 'function') return cont(functiondef, maybeop);
+ if (type == 'class' || (isTS && value == 'interface')) {
+ cx.marked = 'keyword';
+ return cont(pushlex('form'), classExpression, poplex);
+ }
+ if (type == 'keyword c' || type == 'async')
+ return cont(noComma ? expressionNoComma : expression);
+ if (type == '(')
+ return cont(
+ pushlex(')'),
+ maybeexpression,
+ expect(')'),
+ poplex,
+ maybeop
+ );
+ if (type == 'operator' || type == 'spread')
+ return cont(noComma ? expressionNoComma : expression);
+ if (type == '[') return cont(pushlex(']'), arrayLiteral, poplex, maybeop);
+ if (type == '{') return contCommasep(objprop, '}', null, maybeop);
+ if (type == 'quasi') return pass(quasi, maybeop);
+ if (type == 'new') return cont(maybeTarget(noComma));
+ if (type == 'import') return cont(expression);
+ return cont();
+ }
+ function maybeexpression(type) {
+ if (type.match(/[;\}\)\],]/)) return pass();
+ return pass(expression);
+ }
+
+ function maybeoperatorComma(type, value) {
+ if (type == ',') return cont(expression);
+ return maybeoperatorNoComma(type, value, false);
+ }
+ function maybeoperatorNoComma(type, value, noComma) {
+ var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;
+ var expr = noComma == false ? expression : expressionNoComma;
+ if (type == '=>')
+ return cont(
+ pushcontext,
+ noComma ? arrowBodyNoComma : arrowBody,
+ popcontext
+ );
+ if (type == 'operator') {
+ if (/\+\+|--/.test(value) || (isTS && value == '!')) return cont(me);
+ if (
+ isTS &&
+ value == '<' &&
+ cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false)
+ )
+ return cont(pushlex('>'), commasep(typeexpr, '>'), poplex, me);
+ if (value == '?') return cont(expression, expect(':'), expr);
+ return cont(expr);
+ }
+ if (type == 'quasi') {
+ return pass(quasi, me);
+ }
+ if (type == ';') return;
+ if (type == '(') return contCommasep(expressionNoComma, ')', 'call', me);
+ if (type == '.') return cont(property, me);
+ if (type == '[')
+ return cont(pushlex(']'), maybeexpression, expect(']'), poplex, me);
+ if (isTS && value == 'as') {
+ cx.marked = 'keyword';
+ return cont(typeexpr, me);
+ }
+ if (type == 'regexp') {
+ cx.state.lastType = cx.marked = 'operator';
+ cx.stream.backUp(cx.stream.pos - cx.stream.start - 1);
+ return cont(expr);
+ }
+ }
+ function quasi(type, value) {
+ if (type != 'quasi') return pass();
+ if (value.slice(value.length - 2) != '${') return cont(quasi);
+ return cont(expression, continueQuasi);
+ }
+ function continueQuasi(type) {
+ if (type == '}') {
+ cx.marked = 'string-2';
+ cx.state.tokenize = tokenQuasi;
+ return cont(quasi);
+ }
+ }
+ function arrowBody(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == '{' ? statement : expression);
+ }
+ function arrowBodyNoComma(type) {
+ findFatArrow(cx.stream, cx.state);
+ return pass(type == '{' ? statement : expressionNoComma);
+ }
+ function maybeTarget(noComma) {
+ return function (type) {
+ if (type == '.') return cont(noComma ? targetNoComma : target);
+ else if (type == 'variable' && isTS)
+ return cont(
+ maybeTypeArgs,
+ noComma ? maybeoperatorNoComma : maybeoperatorComma
+ );
+ else return pass(noComma ? expressionNoComma : expression);
+ };
+ }
+ function target(_, value) {
+ if (value == 'target') {
+ cx.marked = 'keyword';
+ return cont(maybeoperatorComma);
+ }
+ }
+ function targetNoComma(_, value) {
+ if (value == 'target') {
+ cx.marked = 'keyword';
+ return cont(maybeoperatorNoComma);
+ }
+ }
+ function maybelabel(type) {
+ if (type == ':') return cont(poplex, statement);
+ return pass(maybeoperatorComma, expect(';'), poplex);
+ }
+ function property(type) {
+ if (type == 'variable') {
+ cx.marked = 'property';
+ return cont();
+ }
+ }
+ function objprop(type, value) {
+ if (type == 'async') {
+ cx.marked = 'property';
+ return cont(objprop);
+ } else if (type == 'variable' || cx.style == 'keyword') {
+ cx.marked = 'property';
+ if (value == 'get' || value == 'set') return cont(getterSetter);
+ var m; // Work around fat-arrow-detection complication for detecting typescript typed arrow params
+ if (
+ isTS &&
+ cx.state.fatArrowAt == cx.stream.start &&
+ (m = cx.stream.match(/^\s*:\s*/, false))
+ )
+ cx.state.fatArrowAt = cx.stream.pos + m[0].length;
+ return cont(afterprop);
+ } else if (type == 'number' || type == 'string') {
+ cx.marked = jsonldMode ? 'property' : cx.style + ' property';
+ return cont(afterprop);
+ } else if (type == 'jsonld-keyword') {
+ return cont(afterprop);
+ } else if (isTS && isModifier(value)) {
+ cx.marked = 'keyword';
+ return cont(objprop);
+ } else if (type == '[') {
+ return cont(expression, maybetype, expect(']'), afterprop);
+ } else if (type == 'spread') {
+ return cont(expressionNoComma, afterprop);
+ } else if (value == '*') {
+ cx.marked = 'keyword';
+ return cont(objprop);
+ } else if (type == ':') {
+ return pass(afterprop);
+ }
+ }
+ function getterSetter(type) {
+ if (type != 'variable') return pass(afterprop);
+ cx.marked = 'property';
+ return cont(functiondef);
+ }
+ function afterprop(type) {
+ if (type == ':') return cont(expressionNoComma);
+ if (type == '(') return pass(functiondef);
+ }
+ function commasep(what, end, sep) {
+ function proceed(type, value) {
+ if (sep ? sep.indexOf(type) > -1 : type == ',') {
+ var lex = cx.state.lexical;
+ if (lex.info == 'call') lex.pos = (lex.pos || 0) + 1;
+ return cont(function (type, value) {
+ if (type == end || value == end) return pass();
+ return pass(what);
+ }, proceed);
+ }
+ if (type == end || value == end) return cont();
+ if (sep && sep.indexOf(';') > -1) return pass(what);
+ return cont(expect(end));
+ }
+ return function (type, value) {
+ if (type == end || value == end) return cont();
+ return pass(what, proceed);
+ };
+ }
+ function contCommasep(what, end, info) {
+ for (var i = 3; i < arguments.length; i++) cx.cc.push(arguments[i]);
+ return cont(pushlex(end, info), commasep(what, end), poplex);
+ }
+ function block(type) {
+ if (type == '}') return cont();
+ return pass(statement, block);
+ }
+ function maybetype(type, value) {
+ if (isTS) {
+ if (type == ':') return cont(typeexpr);
+ if (value == '?') return cont(maybetype);
+ }
+ }
+ function mayberettype(type) {
+ if (isTS && type == ':') {
+ if (cx.stream.match(/^\s*\w+\s+is\b/, false))
+ return cont(expression, isKW, typeexpr);
+ else return cont(typeexpr);
+ }
+ }
+ function isKW(_, value) {
+ if (value == 'is') {
+ cx.marked = 'keyword';
+ return cont();
+ }
+ }
+ function typeexpr(type, value) {
+ if (value == 'keyof' || value == 'typeof') {
+ cx.marked = 'keyword';
+ return cont(value == 'keyof' ? typeexpr : expressionNoComma);
+ }
+ if (type == 'variable' || value == 'void') {
+ cx.marked = 'type';
+ return cont(afterType);
+ }
+ if (type == 'string' || type == 'number' || type == 'atom')
+ return cont(afterType);
+ if (type == '[')
+ return cont(
+ pushlex(']'),
+ commasep(typeexpr, ']', ','),
+ poplex,
+ afterType
+ );
+ if (type == '{')
+ return cont(
+ pushlex('}'),
+ commasep(typeprop, '}', ',;'),
+ poplex,
+ afterType
+ );
+ if (type == '(') return cont(commasep(typearg, ')'), maybeReturnType);
+ if (type == '<') return cont(commasep(typeexpr, '>'), typeexpr);
+ }
+ function maybeReturnType(type) {
+ if (type == '=>') return cont(typeexpr);
+ }
+ function typeprop(type, value) {
+ if (type == 'variable' || cx.style == 'keyword') {
+ cx.marked = 'property';
+ return cont(typeprop);
+ } else if (value == '?') {
+ return cont(typeprop);
+ } else if (type == ':') {
+ return cont(typeexpr);
+ } else if (type == '[') {
+ return cont(expression, maybetype, expect(']'), typeprop);
+ } else if (type == '(') {
+ return cont(pushlex(')'), commasep(funarg, ')'), poplex, typeprop);
+ }
+ }
+ function typearg(type, value) {
+ if (
+ (type == 'variable' && cx.stream.match(/^\s*[?:]/, false)) ||
+ value == '?'
+ )
+ return cont(typearg);
+ if (type == ':') return cont(typeexpr);
+ return pass(typeexpr);
+ }
+ function afterType(type, value) {
+ if (value == '<')
+ return cont(pushlex('>'), commasep(typeexpr, '>'), poplex, afterType);
+ if (value == '|' || type == '.' || value == '&') return cont(typeexpr);
+ if (type == '[') return cont(expect(']'), afterType);
+ if (value == 'extends' || value == 'implements') {
+ cx.marked = 'keyword';
+ return cont(typeexpr);
+ }
+ }
+ function maybeTypeArgs(_, value) {
+ if (value == '<')
+ return cont(pushlex('>'), commasep(typeexpr, '>'), poplex, afterType);
+ }
+ function typeparam() {
+ return pass(typeexpr, maybeTypeDefault);
+ }
+ function maybeTypeDefault(_, value) {
+ if (value == '=') return cont(typeexpr);
+ }
+ function vardef(_, value) {
+ if (value == 'enum') {
+ cx.marked = 'keyword';
+ return cont(enumdef);
+ }
+ return pass(pattern, maybetype, maybeAssign, vardefCont);
+ }
+ function pattern(type, value) {
+ if (isTS && isModifier(value)) {
+ cx.marked = 'keyword';
+ return cont(pattern);
+ }
+ if (type == 'variable') {
+ register(value);
+ return cont();
+ }
+ if (type == 'spread') return cont(pattern);
+ if (type == '[') return contCommasep(eltpattern, ']');
+ if (type == '{') return contCommasep(proppattern, '}');
+ }
+ function proppattern(type, value) {
+ if (type == 'variable' && !cx.stream.match(/^\s*:/, false)) {
+ register(value);
+ return cont(maybeAssign);
+ }
+ if (type == 'variable') cx.marked = 'property';
+ if (type == 'spread') return cont(pattern);
+ if (type == '}') return pass();
+ if (type == '[')
+ return cont(expression, expect(']'), expect(':'), proppattern);
+ return cont(expect(':'), pattern, maybeAssign);
+ }
+ function eltpattern() {
+ return pass(pattern, maybeAssign);
+ }
+ function maybeAssign(_type, value) {
+ if (value == '=') return cont(expressionNoComma);
+ }
+ function vardefCont(type) {
+ if (type == ',') return cont(vardef);
+ }
+ function maybeelse(type, value) {
+ if (type == 'keyword b' && value == 'else')
+ return cont(pushlex('form', 'else'), statement, poplex);
+ }
+ function forspec(type, value) {
+ if (value == 'await') return cont(forspec);
+ if (type == '(') return cont(pushlex(')'), forspec1, expect(')'), poplex);
+ }
+ function forspec1(type) {
+ if (type == 'var') return cont(vardef, expect(';'), forspec2);
+ if (type == ';') return cont(forspec2);
+ if (type == 'variable') return cont(formaybeinof);
+ return pass(expression, expect(';'), forspec2);
+ }
+ function formaybeinof(_type, value) {
+ if (value == 'in' || value == 'of') {
+ cx.marked = 'keyword';
+ return cont(expression);
+ }
+ return cont(maybeoperatorComma, forspec2);
+ }
+ function forspec2(type, value) {
+ if (type == ';') return cont(forspec3);
+ if (value == 'in' || value == 'of') {
+ cx.marked = 'keyword';
+ return cont(expression);
+ }
+ return pass(expression, expect(';'), forspec3);
+ }
+ function forspec3(type) {
+ if (type != ')') cont(expression);
+ }
+ function functiondef(type, value) {
+ if (value == '*') {
+ cx.marked = 'keyword';
+ return cont(functiondef);
+ }
+ if (type == 'variable') {
+ register(value);
+ return cont(functiondef);
+ }
+ if (type == '(')
+ return cont(
+ pushcontext,
+ pushlex(')'),
+ commasep(funarg, ')'),
+ poplex,
+ mayberettype,
+ statement,
+ popcontext
+ );
+ if (isTS && value == '<')
+ return cont(
+ pushlex('>'),
+ commasep(typeparam, '>'),
+ poplex,
+ functiondef
+ );
+ }
+ function functiondecl(type, value) {
+ if (value == '*') {
+ cx.marked = 'keyword';
+ return cont(functiondecl);
+ }
+ if (type == 'variable') {
+ register(value);
+ return cont(functiondecl);
+ }
+ if (type == '(')
+ return cont(
+ pushcontext,
+ pushlex(')'),
+ commasep(funarg, ')'),
+ poplex,
+ mayberettype,
+ popcontext
+ );
+ if (isTS && value == '<')
+ return cont(
+ pushlex('>'),
+ commasep(typeparam, '>'),
+ poplex,
+ functiondecl
+ );
+ }
+ function funarg(type, value) {
+ if (value == '@') cont(expression, funarg);
+ if (type == 'spread') return cont(funarg);
+ if (isTS && isModifier(value)) {
+ cx.marked = 'keyword';
+ return cont(funarg);
+ }
+ return pass(pattern, maybetype, maybeAssign);
+ }
+ function classExpression(type, value) {
+ // Class expressions may have an optional name.
+ if (type == 'variable') return className(type, value);
+ return classNameAfter(type, value);
+ }
+ function className(type, value) {
+ if (type == 'variable') {
+ register(value);
+ return cont(classNameAfter);
+ }
+ }
+ function classNameAfter(type, value) {
+ if (value == '<')
+ return cont(
+ pushlex('>'),
+ commasep(typeparam, '>'),
+ poplex,
+ classNameAfter
+ );
+ if (
+ value == 'extends' ||
+ value == 'implements' ||
+ (isTS && type == ',')
+ ) {
+ if (value == 'implements') cx.marked = 'keyword';
+ return cont(isTS ? typeexpr : expression, classNameAfter);
+ }
+ if (type == '{') return cont(pushlex('}'), classBody, poplex);
+ }
+ function classBody(type, value) {
+ if (
+ type == 'async' ||
+ (type == 'variable' &&
+ (value == 'static' ||
+ value == 'get' ||
+ value == 'set' ||
+ (isTS && isModifier(value))) &&
+ cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))
+ ) {
+ cx.marked = 'keyword';
+ return cont(classBody);
+ }
+ if (type == 'variable' || cx.style == 'keyword') {
+ cx.marked = 'property';
+ return cont(isTS ? classfield : functiondef, classBody);
+ }
+ if (type == '[')
+ return cont(
+ expression,
+ maybetype,
+ expect(']'),
+ isTS ? classfield : functiondef,
+ classBody
+ );
+ if (value == '*') {
+ cx.marked = 'keyword';
+ return cont(classBody);
+ }
+ if (type == ';') return cont(classBody);
+ if (type == '}') return cont();
+ if (value == '@') return cont(expression, classBody);
+ }
+ function classfield(type, value) {
+ if (value == '?') return cont(classfield);
+ if (type == ':') return cont(typeexpr, maybeAssign);
+ if (value == '=') return cont(expressionNoComma);
+ var context = cx.state.lexical.prev,
+ isInterface = context && context.info == 'interface';
+ return pass(isInterface ? functiondecl : functiondef);
+ }
+ function afterExport(type, value) {
+ if (value == '*') {
+ cx.marked = 'keyword';
+ return cont(maybeFrom, expect(';'));
+ }
+ if (value == 'default') {
+ cx.marked = 'keyword';
+ return cont(expression, expect(';'));
+ }
+ if (type == '{')
+ return cont(commasep(exportField, '}'), maybeFrom, expect(';'));
+ return pass(statement);
+ }
+ function exportField(type, value) {
+ if (value == 'as') {
+ cx.marked = 'keyword';
+ return cont(expect('variable'));
+ }
+ if (type == 'variable') return pass(expressionNoComma, exportField);
+ }
+ function afterImport(type) {
+ if (type == 'string') return cont();
+ if (type == '(') return pass(expression);
+ return pass(importSpec, maybeMoreImports, maybeFrom);
+ }
+ function importSpec(type, value) {
+ if (type == '{') return contCommasep(importSpec, '}');
+ if (type == 'variable') register(value);
+ if (value == '*') cx.marked = 'keyword';
+ return cont(maybeAs);
+ }
+ function maybeMoreImports(type) {
+ if (type == ',') return cont(importSpec, maybeMoreImports);
+ }
+ function maybeAs(_type, value) {
+ if (value == 'as') {
+ cx.marked = 'keyword';
+ return cont(importSpec);
+ }
+ }
+ function maybeFrom(_type, value) {
+ if (value == 'from') {
+ cx.marked = 'keyword';
+ return cont(expression);
+ }
+ }
+ function arrayLiteral(type) {
+ if (type == ']') return cont();
+ return pass(commasep(expressionNoComma, ']'));
+ }
+ function enumdef() {
+ return pass(
+ pushlex('form'),
+ pattern,
+ expect('{'),
+ pushlex('}'),
+ commasep(enummember, '}'),
+ poplex,
+ poplex
+ );
+ }
+ function enummember() {
+ return pass(pattern, maybeAssign);
+ }
+
+ function isContinuedStatement(state, textAfter) {
+ return (
+ state.lastType == 'operator' ||
+ state.lastType == ',' ||
+ isOperatorChar.test(textAfter.charAt(0)) ||
+ /[,.]/.test(textAfter.charAt(0))
+ );
+ }
+
+ function expressionAllowed(stream, state, backUp) {
+ return (
+ (state.tokenize == tokenBase &&
+ /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(
+ state.lastType
+ )) ||
+ (state.lastType == 'quasi' &&
+ /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))
+ );
+ }
+
+ // Interface
+
+ return {
+ startState: function (basecolumn) {
+ var state = {
+ tokenize: tokenBase,
+ lastType: 'sof',
+ cc: [],
+ lexical: new JSLexical(
+ (basecolumn || 0) - indentUnit,
+ 0,
+ 'block',
+ false
+ ),
+ localVars: parserConfig.localVars,
+ context: parserConfig.localVars && new Context(null, null, false),
+ indented: basecolumn || 0
+ };
+ if (
+ parserConfig.globalVars &&
+ typeof parserConfig.globalVars == 'object'
+ )
+ state.globalVars = parserConfig.globalVars;
+ return state;
+ },
+
+ token: function (stream, state) {
+ if (stream.sol()) {
+ if (!state.lexical.hasOwnProperty('align'))
+ state.lexical.align = false;
+ state.indented = stream.indentation();
+ findFatArrow(stream, state);
+ }
+ if (state.tokenize != tokenComment && stream.eatSpace()) return null;
+ var style = state.tokenize(stream, state);
+ if (type == 'comment') return style;
+ state.lastType =
+ type == 'operator' && (content == '++' || content == '--')
+ ? 'incdec'
+ : type;
+ return parseJS(state, style, type, content, stream);
+ },
+
+ indent: function (state, textAfter) {
+ if (state.tokenize == tokenComment) return CodeMirror.Pass;
+ if (state.tokenize != tokenBase) return 0;
+ var firstChar = textAfter && textAfter.charAt(0),
+ lexical = state.lexical,
+ top;
+ // Kludge to prevent 'maybelse' from blocking lexical scope pops
+ if (!/^\s*else\b/.test(textAfter))
+ for (var i = state.cc.length - 1; i >= 0; --i) {
+ var c = state.cc[i];
+ if (c == poplex) lexical = lexical.prev;
+ else if (c != maybeelse) break;
+ }
+ while (
+ (lexical.type == 'stat' || lexical.type == 'form') &&
+ (firstChar == '}' ||
+ ((top = state.cc[state.cc.length - 1]) &&
+ (top == maybeoperatorComma || top == maybeoperatorNoComma) &&
+ !/^[,\.=+\-*:?[\(]/.test(textAfter)))
+ )
+ lexical = lexical.prev;
+ if (
+ statementIndent &&
+ lexical.type == ')' &&
+ lexical.prev.type == 'stat'
+ )
+ lexical = lexical.prev;
+ var type = lexical.type,
+ closing = firstChar == type;
+
+ if (type == 'vardef')
+ return (
+ lexical.indented +
+ (state.lastType == 'operator' || state.lastType == ','
+ ? lexical.info.length + 1
+ : 0)
+ );
+ else if (type == 'form' && firstChar == '{') return lexical.indented;
+ else if (type == 'form') return lexical.indented + indentUnit;
+ else if (type == 'stat')
+ return (
+ lexical.indented +
+ (isContinuedStatement(state, textAfter)
+ ? statementIndent || indentUnit
+ : 0)
+ );
+ else if (
+ lexical.info == 'switch' &&
+ !closing &&
+ parserConfig.doubleIndentSwitch != false
+ )
+ return (
+ lexical.indented +
+ (/^(?:case|default)\b/.test(textAfter)
+ ? indentUnit
+ : 2 * indentUnit)
+ );
+ else if (lexical.align) return lexical.column + (closing ? 0 : 1);
+ else return lexical.indented + (closing ? 0 : indentUnit);
+ },
+
+ electricInput: /^\s*(?:case .*?:|default:|\{|\})$/,
+ blockCommentStart: jsonMode ? null : '/*',
+ blockCommentEnd: jsonMode ? null : '*/',
+ blockCommentContinue: jsonMode ? null : ' * ',
+ lineComment: jsonMode ? null : '//',
+ fold: 'brace',
+ closeBrackets: '()[]{}\'\'""``',
+
+ helperType: jsonMode ? 'json' : 'javascript',
+ jsonldMode: jsonldMode,
+ jsonMode: jsonMode,
+
+ expressionAllowed: expressionAllowed,
+
+ skipExpression: function (state) {
+ var top = state.cc[state.cc.length - 1];
+ if (top == expression || top == expressionNoComma) state.cc.pop();
+ }
+ };
+ });
-CodeMirror.defineMIME("text/javascript", "javascript");
-CodeMirror.defineMIME("text/ecmascript", "javascript");
-CodeMirror.defineMIME("application/javascript", "javascript");
-CodeMirror.defineMIME("application/x-javascript", "javascript");
-CodeMirror.defineMIME("application/ecmascript", "javascript");
-CodeMirror.defineMIME("application/json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/x-json", {name: "javascript", json: true});
-CodeMirror.defineMIME("application/ld+json", {name: "javascript", jsonld: true});
-CodeMirror.defineMIME("text/typescript", { name: "javascript", typescript: true });
-CodeMirror.defineMIME("application/typescript", { name: "javascript", typescript: true });
+ CodeMirror.registerHelper('wordChars', 'javascript', /[\w$]/);
+ CodeMirror.defineMIME('text/javascript', 'javascript');
+ CodeMirror.defineMIME('text/ecmascript', 'javascript');
+ CodeMirror.defineMIME('application/javascript', 'javascript');
+ CodeMirror.defineMIME('application/x-javascript', 'javascript');
+ CodeMirror.defineMIME('application/ecmascript', 'javascript');
+ CodeMirror.defineMIME('application/json', { name: 'javascript', json: true });
+ CodeMirror.defineMIME('application/x-json', {
+ name: 'javascript',
+ json: true
+ });
+ CodeMirror.defineMIME('application/ld+json', {
+ name: 'javascript',
+ jsonld: true
+ });
+ CodeMirror.defineMIME('text/typescript', {
+ name: 'javascript',
+ typescript: true
+ });
+ CodeMirror.defineMIME('application/typescript', {
+ name: 'javascript',
+ typescript: true
+ });
});
diff --git a/client/utils/p5-keywords.js b/client/utils/p5-keywords.js
index 6408051d01..9a41ccc099 100644
--- a/client/utils/p5-keywords.js
+++ b/client/utils/p5-keywords.js
@@ -1,8 +1,494 @@
-/* eslint-disable */
-/* generated: do not edit! helper file for syntax highlighting. generated by update-syntax-highlighting script */
-var p5Function = {type: "variable", style: "p5-function"};
-var p5Variable = {type: "variable", style: "p5-variable"};
-let p5VariableKeywords = {"VERSION":p5Variable,"P2D":p5Variable,"WEBGL":p5Variable,"WEBGL2":p5Variable,"ARROW":p5Variable,"CROSS":p5Variable,"HAND":p5Variable,"MOVE":p5Variable,"TEXT":p5Variable,"WAIT":p5Variable,"HALF_PI":p5Variable,"PI":p5Variable,"QUARTER_PI":p5Variable,"TAU":p5Variable,"TWO_PI":p5Variable,"DEGREES":p5Variable,"RADIANS":p5Variable,"CORNER":p5Variable,"CORNERS":p5Variable,"RADIUS":p5Variable,"RIGHT":p5Variable,"LEFT":p5Variable,"CENTER":p5Variable,"TOP":p5Variable,"BOTTOM":p5Variable,"BASELINE":p5Variable,"POINTS":p5Variable,"LINES":p5Variable,"LINE_STRIP":p5Variable,"LINE_LOOP":p5Variable,"TRIANGLES":p5Variable,"TRIANGLE_FAN":p5Variable,"TRIANGLE_STRIP":p5Variable,"QUADS":p5Variable,"QUAD_STRIP":p5Variable,"TESS":p5Variable,"CLOSE":p5Variable,"OPEN":p5Variable,"CHORD":p5Variable,"PIE":p5Variable,"PROJECT":p5Variable,"SQUARE":p5Variable,"ROUND":p5Variable,"BEVEL":p5Variable,"MITER":p5Variable,"RGB":p5Variable,"HSB":p5Variable,"HSL":p5Variable,"AUTO":p5Variable,"ALT":p5Variable,"BACKSPACE":p5Variable,"CONTROL":p5Variable,"DELETE":p5Variable,"DOWN_ARROW":p5Variable,"ENTER":p5Variable,"ESCAPE":p5Variable,"LEFT_ARROW":p5Variable,"OPTION":p5Variable,"RETURN":p5Variable,"RIGHT_ARROW":p5Variable,"SHIFT":p5Variable,"TAB":p5Variable,"UP_ARROW":p5Variable,"BLEND":p5Variable,"REMOVE":p5Variable,"ADD":p5Variable,"DARKEST":p5Variable,"LIGHTEST":p5Variable,"DIFFERENCE":p5Variable,"SUBTRACT":p5Variable,"EXCLUSION":p5Variable,"MULTIPLY":p5Variable,"SCREEN":p5Variable,"REPLACE":p5Variable,"OVERLAY":p5Variable,"HARD_LIGHT":p5Variable,"SOFT_LIGHT":p5Variable,"DODGE":p5Variable,"BURN":p5Variable,"THRESHOLD":p5Variable,"GRAY":p5Variable,"OPAQUE":p5Variable,"INVERT":p5Variable,"POSTERIZE":p5Variable,"DILATE":p5Variable,"ERODE":p5Variable,"BLUR":p5Variable,"NORMAL":p5Variable,"ITALIC":p5Variable,"BOLD":p5Variable,"BOLDITALIC":p5Variable,"CHAR":p5Variable,"WORD":p5Variable,"LINEAR":p5Variable,"QUADRATIC":p5Variable,"BEZIER":p5Variable,"CURVE":p5Variable,"STROKE":p5Variable,"FILL":p5Variable,"TEXTURE":p5Variable,"IMMEDIATE":p5Variable,"IMAGE":p5Variable,"NEAREST":p5Variable,"REPEAT":p5Variable,"CLAMP":p5Variable,"MIRROR":p5Variable,"FLAT":p5Variable,"SMOOTH":p5Variable,"LANDSCAPE":p5Variable,"PORTRAIT":p5Variable,"GRID":p5Variable,"AXES":p5Variable,"LABEL":p5Variable,"FALLBACK":p5Variable,"CONTAIN":p5Variable,"COVER":p5Variable,"UNSIGNED_BYTE":p5Variable,"UNSIGNED_INT":p5Variable,"FLOAT":p5Variable,"HALF_FLOAT":p5Variable,"RGBA":p5Variable,"frameCount":p5Variable,"deltaTime":p5Variable,"focused":p5Variable,"webglVersion":p5Variable,"displayWidth":p5Variable,"displayHeight":p5Variable,"windowWidth":p5Variable,"windowHeight":p5Variable,"width":p5Variable,"height":p5Variable,"disableFriendlyErrors":p5Variable,"drawingContext":p5Variable,"deviceOrientation":p5Variable,"accelerationX":p5Variable,"accelerationY":p5Variable,"accelerationZ":p5Variable,"pAccelerationX":p5Variable,"pAccelerationY":p5Variable,"pAccelerationZ":p5Variable,"rotationX":p5Variable,"rotationY":p5Variable,"rotationZ":p5Variable,"pRotationX":p5Variable,"pRotationY":p5Variable,"pRotationZ":p5Variable,"turnAxis":p5Variable,"keyIsPressed":p5Variable,"key":p5Variable,"keyCode":p5Variable,"movedX":p5Variable,"movedY":p5Variable,"mouseX":p5Variable,"mouseY":p5Variable,"pmouseX":p5Variable,"pmouseY":p5Variable,"winMouseX":p5Variable,"winMouseY":p5Variable,"pwinMouseX":p5Variable,"pwinMouseY":p5Variable,"mouseButton":p5Variable,"mouseIsPressed":p5Variable,"touches":p5Variable,"pixels":p5Variable,"soundOut":p5Variable};
-let p5FunctionKeywords = {"describe":p5Function,"describeElement":p5Function,"textOutput":p5Function,"gridOutput":p5Function,"alpha":p5Function,"blue":p5Function,"brightness":p5Function,"color":p5Function,"green":p5Function,"hue":p5Function,"lerpColor":p5Function,"lightness":p5Function,"red":p5Function,"saturation":p5Function,"beginClip":p5Function,"endClip":p5Function,"clip":p5Function,"background":p5Function,"clear":p5Function,"colorMode":p5Function,"fill":p5Function,"noFill":p5Function,"noStroke":p5Function,"stroke":p5Function,"erase":p5Function,"noErase":p5Function,"arc":p5Function,"ellipse":p5Function,"circle":p5Function,"line":p5Function,"point":p5Function,"quad":p5Function,"rect":p5Function,"square":p5Function,"triangle":p5Function,"ellipseMode":p5Function,"noSmooth":p5Function,"rectMode":p5Function,"smooth":p5Function,"strokeCap":p5Function,"strokeJoin":p5Function,"strokeWeight":p5Function,"bezier":p5Function,"bezierDetail":p5Function,"bezierPoint":p5Function,"bezierTangent":p5Function,"curve":p5Function,"curveDetail":p5Function,"curveTightness":p5Function,"curvePoint":p5Function,"curveTangent":p5Function,"beginContour":p5Function,"beginShape":p5Function,"bezierVertex":p5Function,"curveVertex":p5Function,"endContour":p5Function,"endShape":p5Function,"quadraticVertex":p5Function,"vertex":p5Function,"normal":p5Function,"print":p5Function,"cursor":p5Function,"frameRate":p5Function,"getTargetFrameRate":p5Function,"noCursor":p5Function,"windowResized":p5Function,"fullscreen":p5Function,"pixelDensity":p5Function,"displayDensity":p5Function,"getURL":p5Function,"getURLPath":p5Function,"getURLParams":p5Function,"preload":p5Function,"setup":p5Function,"draw":p5Function,"remove":p5Function,"createCanvas":p5Function,"resizeCanvas":p5Function,"noCanvas":p5Function,"createGraphics":p5Function,"createFramebuffer":p5Function,"clearDepth":p5Function,"blendMode":p5Function,"noLoop":p5Function,"loop":p5Function,"isLooping":p5Function,"push":p5Function,"pop":p5Function,"redraw":p5Function,"p5":p5Function,"applyMatrix":p5Function,"resetMatrix":p5Function,"rotate":p5Function,"rotateX":p5Function,"rotateY":p5Function,"rotateZ":p5Function,"scale":p5Function,"shearX":p5Function,"shearY":p5Function,"translate":p5Function,"storeItem":p5Function,"getItem":p5Function,"clearStorage":p5Function,"removeItem":p5Function,"createStringDict":p5Function,"createNumberDict":p5Function,"select":p5Function,"selectAll":p5Function,"removeElements":p5Function,"changed":p5Function,"input":p5Function,"createDiv":p5Function,"createP":p5Function,"createSpan":p5Function,"createImg":p5Function,"createA":p5Function,"createSlider":p5Function,"createButton":p5Function,"createCheckbox":p5Function,"createSelect":p5Function,"createRadio":p5Function,"createColorPicker":p5Function,"createInput":p5Function,"createFileInput":p5Function,"createVideo":p5Function,"createAudio":p5Function,"createCapture":p5Function,"createElement":p5Function,"setMoveThreshold":p5Function,"setShakeThreshold":p5Function,"deviceMoved":p5Function,"deviceTurned":p5Function,"deviceShaken":p5Function,"keyPressed":p5Function,"keyReleased":p5Function,"keyTyped":p5Function,"keyIsDown":p5Function,"mouseMoved":p5Function,"mouseDragged":p5Function,"mousePressed":p5Function,"mouseReleased":p5Function,"mouseClicked":p5Function,"doubleClicked":p5Function,"mouseWheel":p5Function,"requestPointerLock":p5Function,"exitPointerLock":p5Function,"touchStarted":p5Function,"touchMoved":p5Function,"touchEnded":p5Function,"createImage":p5Function,"saveCanvas":p5Function,"saveFrames":p5Function,"loadImage":p5Function,"saveGif":p5Function,"image":p5Function,"tint":p5Function,"noTint":p5Function,"imageMode":p5Function,"blend":p5Function,"copy":p5Function,"filter":p5Function,"get":p5Function,"loadPixels":p5Function,"set":p5Function,"updatePixels":p5Function,"loadJSON":p5Function,"loadStrings":p5Function,"loadTable":p5Function,"loadXML":p5Function,"loadBytes":p5Function,"httpGet":p5Function,"httpPost":p5Function,"httpDo":p5Function,"createWriter":p5Function,"save":p5Function,"saveJSON":p5Function,"saveStrings":p5Function,"saveTable":p5Function,"abs":p5Function,"ceil":p5Function,"constrain":p5Function,"dist":p5Function,"exp":p5Function,"floor":p5Function,"lerp":p5Function,"log":p5Function,"mag":p5Function,"map":p5Function,"max":p5Function,"min":p5Function,"norm":p5Function,"pow":p5Function,"round":p5Function,"sq":p5Function,"sqrt":p5Function,"fract":p5Function,"createVector":p5Function,"noise":p5Function,"noiseDetail":p5Function,"noiseSeed":p5Function,"randomSeed":p5Function,"random":p5Function,"randomGaussian":p5Function,"acos":p5Function,"asin":p5Function,"atan":p5Function,"atan2":p5Function,"cos":p5Function,"sin":p5Function,"tan":p5Function,"degrees":p5Function,"radians":p5Function,"angleMode":p5Function,"textAlign":p5Function,"textLeading":p5Function,"textSize":p5Function,"textStyle":p5Function,"textWidth":p5Function,"textAscent":p5Function,"textDescent":p5Function,"textWrap":p5Function,"loadFont":p5Function,"text":p5Function,"textFont":p5Function,"append":p5Function,"arrayCopy":p5Function,"concat":p5Function,"reverse":p5Function,"shorten":p5Function,"shuffle":p5Function,"sort":p5Function,"splice":p5Function,"subset":p5Function,"float":p5Function,"int":p5Function,"str":p5Function,"boolean":p5Function,"byte":p5Function,"char":p5Function,"unchar":p5Function,"hex":p5Function,"unhex":p5Function,"join":p5Function,"match":p5Function,"matchAll":p5Function,"nf":p5Function,"nfc":p5Function,"nfp":p5Function,"nfs":p5Function,"split":p5Function,"splitTokens":p5Function,"trim":p5Function,"day":p5Function,"hour":p5Function,"minute":p5Function,"millis":p5Function,"month":p5Function,"second":p5Function,"year":p5Function,"beginGeometry":p5Function,"endGeometry":p5Function,"buildGeometry":p5Function,"freeGeometry":p5Function,"plane":p5Function,"box":p5Function,"sphere":p5Function,"cylinder":p5Function,"cone":p5Function,"ellipsoid":p5Function,"torus":p5Function,"orbitControl":p5Function,"debugMode":p5Function,"noDebugMode":p5Function,"ambientLight":p5Function,"specularColor":p5Function,"directionalLight":p5Function,"pointLight":p5Function,"imageLight":p5Function,"panorama":p5Function,"lights":p5Function,"lightFalloff":p5Function,"spotLight":p5Function,"noLights":p5Function,"loadModel":p5Function,"model":p5Function,"loadShader":p5Function,"createShader":p5Function,"createFilterShader":p5Function,"shader":p5Function,"resetShader":p5Function,"texture":p5Function,"textureMode":p5Function,"textureWrap":p5Function,"normalMaterial":p5Function,"ambientMaterial":p5Function,"emissiveMaterial":p5Function,"specularMaterial":p5Function,"shininess":p5Function,"metalness":p5Function,"camera":p5Function,"perspective":p5Function,"linePerspective":p5Function,"ortho":p5Function,"frustum":p5Function,"createCamera":p5Function,"setCamera":p5Function,"setAttributes":p5Function,"getAudioContext":p5Function,"userStartAudio":p5Function,"getOutputVolume":p5Function,"outputVolume":p5Function,"sampleRate":p5Function,"freqToMidi":p5Function,"midiToFreq":p5Function,"soundFormats":p5Function,"saveSound":p5Function,"loadSound":p5Function,"createConvolver":p5Function,"setBPM":p5Function};
+/* eslint-disable */
+/* generated: do not edit! helper file for syntax highlighting. generated by update-syntax-highlighting script */
+var p5Function = { type: 'variable', style: 'p5-function' };
+var p5Variable = { type: 'variable', style: 'p5-variable' };
+let p5VariableKeywords = {
+ VERSION: p5Variable,
+ P2D: p5Variable,
+ WEBGL: p5Variable,
+ WEBGL2: p5Variable,
+ ARROW: p5Variable,
+ CROSS: p5Variable,
+ HAND: p5Variable,
+ MOVE: p5Variable,
+ TEXT: p5Variable,
+ WAIT: p5Variable,
+ HALF_PI: p5Variable,
+ PI: p5Variable,
+ QUARTER_PI: p5Variable,
+ TAU: p5Variable,
+ TWO_PI: p5Variable,
+ DEGREES: p5Variable,
+ RADIANS: p5Variable,
+ CORNER: p5Variable,
+ CORNERS: p5Variable,
+ RADIUS: p5Variable,
+ RIGHT: p5Variable,
+ LEFT: p5Variable,
+ CENTER: p5Variable,
+ TOP: p5Variable,
+ BOTTOM: p5Variable,
+ BASELINE: p5Variable,
+ POINTS: p5Variable,
+ LINES: p5Variable,
+ LINE_STRIP: p5Variable,
+ LINE_LOOP: p5Variable,
+ TRIANGLES: p5Variable,
+ TRIANGLE_FAN: p5Variable,
+ TRIANGLE_STRIP: p5Variable,
+ QUADS: p5Variable,
+ QUAD_STRIP: p5Variable,
+ TESS: p5Variable,
+ CLOSE: p5Variable,
+ OPEN: p5Variable,
+ CHORD: p5Variable,
+ PIE: p5Variable,
+ PROJECT: p5Variable,
+ SQUARE: p5Variable,
+ ROUND: p5Variable,
+ BEVEL: p5Variable,
+ MITER: p5Variable,
+ RGB: p5Variable,
+ HSB: p5Variable,
+ HSL: p5Variable,
+ AUTO: p5Variable,
+ ALT: p5Variable,
+ BACKSPACE: p5Variable,
+ CONTROL: p5Variable,
+ DELETE: p5Variable,
+ DOWN_ARROW: p5Variable,
+ ENTER: p5Variable,
+ ESCAPE: p5Variable,
+ LEFT_ARROW: p5Variable,
+ OPTION: p5Variable,
+ RETURN: p5Variable,
+ RIGHT_ARROW: p5Variable,
+ SHIFT: p5Variable,
+ TAB: p5Variable,
+ UP_ARROW: p5Variable,
+ BLEND: p5Variable,
+ REMOVE: p5Variable,
+ ADD: p5Variable,
+ DARKEST: p5Variable,
+ LIGHTEST: p5Variable,
+ DIFFERENCE: p5Variable,
+ SUBTRACT: p5Variable,
+ EXCLUSION: p5Variable,
+ MULTIPLY: p5Variable,
+ SCREEN: p5Variable,
+ REPLACE: p5Variable,
+ OVERLAY: p5Variable,
+ HARD_LIGHT: p5Variable,
+ SOFT_LIGHT: p5Variable,
+ DODGE: p5Variable,
+ BURN: p5Variable,
+ THRESHOLD: p5Variable,
+ GRAY: p5Variable,
+ OPAQUE: p5Variable,
+ INVERT: p5Variable,
+ POSTERIZE: p5Variable,
+ DILATE: p5Variable,
+ ERODE: p5Variable,
+ BLUR: p5Variable,
+ NORMAL: p5Variable,
+ ITALIC: p5Variable,
+ BOLD: p5Variable,
+ BOLDITALIC: p5Variable,
+ CHAR: p5Variable,
+ WORD: p5Variable,
+ LINEAR: p5Variable,
+ QUADRATIC: p5Variable,
+ BEZIER: p5Variable,
+ CURVE: p5Variable,
+ STROKE: p5Variable,
+ FILL: p5Variable,
+ TEXTURE: p5Variable,
+ IMMEDIATE: p5Variable,
+ IMAGE: p5Variable,
+ NEAREST: p5Variable,
+ REPEAT: p5Variable,
+ CLAMP: p5Variable,
+ MIRROR: p5Variable,
+ FLAT: p5Variable,
+ SMOOTH: p5Variable,
+ LANDSCAPE: p5Variable,
+ PORTRAIT: p5Variable,
+ GRID: p5Variable,
+ AXES: p5Variable,
+ LABEL: p5Variable,
+ FALLBACK: p5Variable,
+ CONTAIN: p5Variable,
+ COVER: p5Variable,
+ UNSIGNED_BYTE: p5Variable,
+ UNSIGNED_INT: p5Variable,
+ FLOAT: p5Variable,
+ HALF_FLOAT: p5Variable,
+ RGBA: p5Variable,
+ frameCount: p5Variable,
+ deltaTime: p5Variable,
+ focused: p5Variable,
+ webglVersion: p5Variable,
+ displayWidth: p5Variable,
+ displayHeight: p5Variable,
+ windowWidth: p5Variable,
+ windowHeight: p5Variable,
+ width: p5Variable,
+ height: p5Variable,
+ disableFriendlyErrors: p5Variable,
+ drawingContext: p5Variable,
+ deviceOrientation: p5Variable,
+ accelerationX: p5Variable,
+ accelerationY: p5Variable,
+ accelerationZ: p5Variable,
+ pAccelerationX: p5Variable,
+ pAccelerationY: p5Variable,
+ pAccelerationZ: p5Variable,
+ rotationX: p5Variable,
+ rotationY: p5Variable,
+ rotationZ: p5Variable,
+ pRotationX: p5Variable,
+ pRotationY: p5Variable,
+ pRotationZ: p5Variable,
+ turnAxis: p5Variable,
+ keyIsPressed: p5Variable,
+ key: p5Variable,
+ keyCode: p5Variable,
+ movedX: p5Variable,
+ movedY: p5Variable,
+ mouseX: p5Variable,
+ mouseY: p5Variable,
+ pmouseX: p5Variable,
+ pmouseY: p5Variable,
+ winMouseX: p5Variable,
+ winMouseY: p5Variable,
+ pwinMouseX: p5Variable,
+ pwinMouseY: p5Variable,
+ mouseButton: p5Variable,
+ mouseIsPressed: p5Variable,
+ touches: p5Variable,
+ pixels: p5Variable,
+ soundOut: p5Variable
+};
+let p5FunctionKeywords = {
+ describe: p5Function,
+ describeElement: p5Function,
+ textOutput: p5Function,
+ gridOutput: p5Function,
+ alpha: p5Function,
+ blue: p5Function,
+ brightness: p5Function,
+ color: p5Function,
+ green: p5Function,
+ hue: p5Function,
+ lerpColor: p5Function,
+ lightness: p5Function,
+ red: p5Function,
+ saturation: p5Function,
+ beginClip: p5Function,
+ endClip: p5Function,
+ clip: p5Function,
+ background: p5Function,
+ clear: p5Function,
+ colorMode: p5Function,
+ fill: p5Function,
+ noFill: p5Function,
+ noStroke: p5Function,
+ stroke: p5Function,
+ erase: p5Function,
+ noErase: p5Function,
+ arc: p5Function,
+ ellipse: p5Function,
+ circle: p5Function,
+ line: p5Function,
+ point: p5Function,
+ quad: p5Function,
+ rect: p5Function,
+ square: p5Function,
+ triangle: p5Function,
+ ellipseMode: p5Function,
+ noSmooth: p5Function,
+ rectMode: p5Function,
+ smooth: p5Function,
+ strokeCap: p5Function,
+ strokeJoin: p5Function,
+ strokeWeight: p5Function,
+ bezier: p5Function,
+ bezierDetail: p5Function,
+ bezierPoint: p5Function,
+ bezierTangent: p5Function,
+ curve: p5Function,
+ curveDetail: p5Function,
+ curveTightness: p5Function,
+ curvePoint: p5Function,
+ curveTangent: p5Function,
+ beginContour: p5Function,
+ beginShape: p5Function,
+ bezierVertex: p5Function,
+ curveVertex: p5Function,
+ endContour: p5Function,
+ endShape: p5Function,
+ quadraticVertex: p5Function,
+ vertex: p5Function,
+ normal: p5Function,
+ print: p5Function,
+ cursor: p5Function,
+ frameRate: p5Function,
+ getTargetFrameRate: p5Function,
+ noCursor: p5Function,
+ windowResized: p5Function,
+ fullscreen: p5Function,
+ pixelDensity: p5Function,
+ displayDensity: p5Function,
+ getURL: p5Function,
+ getURLPath: p5Function,
+ getURLParams: p5Function,
+ preload: p5Function,
+ setup: p5Function,
+ draw: p5Function,
+ remove: p5Function,
+ createCanvas: p5Function,
+ resizeCanvas: p5Function,
+ noCanvas: p5Function,
+ createGraphics: p5Function,
+ createFramebuffer: p5Function,
+ clearDepth: p5Function,
+ blendMode: p5Function,
+ noLoop: p5Function,
+ loop: p5Function,
+ isLooping: p5Function,
+ push: p5Function,
+ pop: p5Function,
+ redraw: p5Function,
+ p5: p5Function,
+ applyMatrix: p5Function,
+ resetMatrix: p5Function,
+ rotate: p5Function,
+ rotateX: p5Function,
+ rotateY: p5Function,
+ rotateZ: p5Function,
+ scale: p5Function,
+ shearX: p5Function,
+ shearY: p5Function,
+ translate: p5Function,
+ storeItem: p5Function,
+ getItem: p5Function,
+ clearStorage: p5Function,
+ removeItem: p5Function,
+ createStringDict: p5Function,
+ createNumberDict: p5Function,
+ select: p5Function,
+ selectAll: p5Function,
+ removeElements: p5Function,
+ changed: p5Function,
+ input: p5Function,
+ createDiv: p5Function,
+ createP: p5Function,
+ createSpan: p5Function,
+ createImg: p5Function,
+ createA: p5Function,
+ createSlider: p5Function,
+ createButton: p5Function,
+ createCheckbox: p5Function,
+ createSelect: p5Function,
+ createRadio: p5Function,
+ createColorPicker: p5Function,
+ createInput: p5Function,
+ createFileInput: p5Function,
+ createVideo: p5Function,
+ createAudio: p5Function,
+ createCapture: p5Function,
+ createElement: p5Function,
+ setMoveThreshold: p5Function,
+ setShakeThreshold: p5Function,
+ deviceMoved: p5Function,
+ deviceTurned: p5Function,
+ deviceShaken: p5Function,
+ keyPressed: p5Function,
+ keyReleased: p5Function,
+ keyTyped: p5Function,
+ keyIsDown: p5Function,
+ mouseMoved: p5Function,
+ mouseDragged: p5Function,
+ mousePressed: p5Function,
+ mouseReleased: p5Function,
+ mouseClicked: p5Function,
+ doubleClicked: p5Function,
+ mouseWheel: p5Function,
+ requestPointerLock: p5Function,
+ exitPointerLock: p5Function,
+ touchStarted: p5Function,
+ touchMoved: p5Function,
+ touchEnded: p5Function,
+ createImage: p5Function,
+ saveCanvas: p5Function,
+ saveFrames: p5Function,
+ loadImage: p5Function,
+ saveGif: p5Function,
+ image: p5Function,
+ tint: p5Function,
+ noTint: p5Function,
+ imageMode: p5Function,
+ blend: p5Function,
+ copy: p5Function,
+ filter: p5Function,
+ get: p5Function,
+ loadPixels: p5Function,
+ set: p5Function,
+ updatePixels: p5Function,
+ loadJSON: p5Function,
+ loadStrings: p5Function,
+ loadTable: p5Function,
+ loadXML: p5Function,
+ loadBytes: p5Function,
+ httpGet: p5Function,
+ httpPost: p5Function,
+ httpDo: p5Function,
+ createWriter: p5Function,
+ save: p5Function,
+ saveJSON: p5Function,
+ saveStrings: p5Function,
+ saveTable: p5Function,
+ abs: p5Function,
+ ceil: p5Function,
+ constrain: p5Function,
+ dist: p5Function,
+ exp: p5Function,
+ floor: p5Function,
+ lerp: p5Function,
+ log: p5Function,
+ mag: p5Function,
+ map: p5Function,
+ max: p5Function,
+ min: p5Function,
+ norm: p5Function,
+ pow: p5Function,
+ round: p5Function,
+ sq: p5Function,
+ sqrt: p5Function,
+ fract: p5Function,
+ createVector: p5Function,
+ noise: p5Function,
+ noiseDetail: p5Function,
+ noiseSeed: p5Function,
+ randomSeed: p5Function,
+ random: p5Function,
+ randomGaussian: p5Function,
+ acos: p5Function,
+ asin: p5Function,
+ atan: p5Function,
+ atan2: p5Function,
+ cos: p5Function,
+ sin: p5Function,
+ tan: p5Function,
+ degrees: p5Function,
+ radians: p5Function,
+ angleMode: p5Function,
+ textAlign: p5Function,
+ textLeading: p5Function,
+ textSize: p5Function,
+ textStyle: p5Function,
+ textWidth: p5Function,
+ textAscent: p5Function,
+ textDescent: p5Function,
+ textWrap: p5Function,
+ loadFont: p5Function,
+ text: p5Function,
+ textFont: p5Function,
+ append: p5Function,
+ arrayCopy: p5Function,
+ concat: p5Function,
+ reverse: p5Function,
+ shorten: p5Function,
+ shuffle: p5Function,
+ sort: p5Function,
+ splice: p5Function,
+ subset: p5Function,
+ float: p5Function,
+ int: p5Function,
+ str: p5Function,
+ boolean: p5Function,
+ byte: p5Function,
+ char: p5Function,
+ unchar: p5Function,
+ hex: p5Function,
+ unhex: p5Function,
+ join: p5Function,
+ match: p5Function,
+ matchAll: p5Function,
+ nf: p5Function,
+ nfc: p5Function,
+ nfp: p5Function,
+ nfs: p5Function,
+ split: p5Function,
+ splitTokens: p5Function,
+ trim: p5Function,
+ day: p5Function,
+ hour: p5Function,
+ minute: p5Function,
+ millis: p5Function,
+ month: p5Function,
+ second: p5Function,
+ year: p5Function,
+ beginGeometry: p5Function,
+ endGeometry: p5Function,
+ buildGeometry: p5Function,
+ freeGeometry: p5Function,
+ plane: p5Function,
+ box: p5Function,
+ sphere: p5Function,
+ cylinder: p5Function,
+ cone: p5Function,
+ ellipsoid: p5Function,
+ torus: p5Function,
+ orbitControl: p5Function,
+ debugMode: p5Function,
+ noDebugMode: p5Function,
+ ambientLight: p5Function,
+ specularColor: p5Function,
+ directionalLight: p5Function,
+ pointLight: p5Function,
+ imageLight: p5Function,
+ panorama: p5Function,
+ lights: p5Function,
+ lightFalloff: p5Function,
+ spotLight: p5Function,
+ noLights: p5Function,
+ loadModel: p5Function,
+ model: p5Function,
+ loadShader: p5Function,
+ createShader: p5Function,
+ createFilterShader: p5Function,
+ shader: p5Function,
+ resetShader: p5Function,
+ texture: p5Function,
+ textureMode: p5Function,
+ textureWrap: p5Function,
+ normalMaterial: p5Function,
+ ambientMaterial: p5Function,
+ emissiveMaterial: p5Function,
+ specularMaterial: p5Function,
+ shininess: p5Function,
+ metalness: p5Function,
+ camera: p5Function,
+ perspective: p5Function,
+ linePerspective: p5Function,
+ ortho: p5Function,
+ frustum: p5Function,
+ createCamera: p5Function,
+ setCamera: p5Function,
+ setAttributes: p5Function,
+ getAudioContext: p5Function,
+ userStartAudio: p5Function,
+ getOutputVolume: p5Function,
+ outputVolume: p5Function,
+ sampleRate: p5Function,
+ freqToMidi: p5Function,
+ midiToFreq: p5Function,
+ soundFormats: p5Function,
+ saveSound: p5Function,
+ loadSound: p5Function,
+ createConvolver: p5Function,
+ setBPM: p5Function
+};
exports.p5FunctionKeywords = p5FunctionKeywords;
exports.p5VariableKeywords = p5VariableKeywords;
diff --git a/client/utils/p5-reference-functions.json b/client/utils/p5-reference-functions.json
index 478b264434..6d9a697c2a 100644
--- a/client/utils/p5-reference-functions.json
+++ b/client/utils/p5-reference-functions.json
@@ -1,379 +1,381 @@
{
"functions": {
"list": [
- "abs",
- "accelerationX",
- "accelerationY",
- "accelerationZ",
- "acos",
- "alpha",
- "ambientLight",
- "ambientMaterial",
- "angleMode",
- "append",
- "applyMatrix",
- "arc",
- "arrayCopy",
- "asin",
- "atan",
- "atan2",
- "background",
- "baseColorShader",
- "baseMaterialShader",
- "baseNormalShader",
- "baseStrokeShader",
- "beginClip",
- "beginContour",
- "beginGeometry",
- "beginShape",
- "bezier",
- "bezierDetail",
- "bezierPoint",
- "bezierTangent",
- "bezierVertex",
- "blend",
- "blendMode",
- "blue",
- "boolean",
- "box",
- "brightness",
- "buildGeometry",
- "byte",
- "camera",
- "ceil",
- "changed",
- "char",
- "circle",
- "class",
- "clear",
- "clearDepth",
- "clearStorage",
- "clip",
- "color",
- "colorMode",
- "concat",
- "cone",
- "console",
- "constrain",
- "copy",
- "cos",
- "createA",
- "createAudio",
- "createButton",
- "createCamera",
- "createCanvas",
- "createCapture",
- "createCheckbox",
- "createColorPicker",
- "createConvolver",
- "createDiv",
- "createElement",
- "createFileInput",
- "createFilterShader",
- "createFramebuffer",
- "createGraphics",
- "createImage",
- "createImg",
- "createInput",
- "createModel",
- "createNumberDict",
- "createP",
- "createRadio",
- "createSelect",
- "createShader",
- "createSlider",
- "createSpan",
- "createStringDict",
- "createVector",
- "createVideo",
- "createWriter",
- "cursor",
- "curve",
- "curveDetail",
- "curvePoint",
- "curveTangent",
- "curveTightness",
- "curveVertex",
- "cylinder",
- "day",
- "debugMode",
- "degrees",
- "deltaTime",
- "describe",
- "describeElement",
- "deviceMoved",
- "deviceOrientation",
- "deviceShaken",
- "deviceTurned",
- "directionalLight",
- "disableFriendlyErrors",
- "displayDensity",
- "displayHeight",
- "displayWidth",
- "dist",
- "doubleClicked",
- "draw",
- "drawingContext",
- "ellipse",
- "ellipseMode",
- "ellipsoid",
- "emissiveMaterial",
- "endClip",
- "endContour",
- "endGeometry",
- "endShape",
- "erase",
- "exitPointerLock",
- "exp",
- "fill",
- "filter",
- "float",
- "floor",
- "focused",
- "for",
- "fract",
- "frameCount",
- "frameRate",
- "freeGeometry",
- "freqToMidi",
- "frustum",
- "fullscreen",
- "function",
- "get",
- "getAudioContext",
- "getItem",
- "getOutputVolume",
- "getTargetFrameRate",
- "getURL",
- "getURLParams",
- "getURLPath",
- "green",
- "gridOutput",
- "height",
- "hex",
- "hour",
- "httpDo",
- "httpGet",
- "httpPost",
- "hue",
- "if",
- "image",
- "imageLight",
- "imageMode",
- "input",
- "int",
- "isLooping",
- "join",
- "key",
- "keyCode",
- "keyIsDown",
- "keyIsPressed",
- "keyPressed",
- "keyReleased",
- "keyTyped",
- "lerp",
- "lerpColor",
- "let",
- "lightFalloff",
- "lightness",
- "lights",
- "line",
- "linePerspective",
- "loadBytes",
- "loadFont",
- "loadImage",
- "loadJSON",
- "loadModel",
- "loadPixels",
- "loadShader",
- "loadSound",
- "loadStrings",
- "loadTable",
- "loadXML",
- "log",
- "loop",
- "mag",
- "map",
- "match",
- "matchAll",
- "max",
- "metalness",
- "midiToFreq",
- "millis",
- "min",
- "minute",
- "model",
- "month",
- "mouseButton",
- "mouseClicked",
- "mouseDragged",
- "mouseIsPressed",
- "mouseMoved",
- "mousePressed",
- "mouseReleased",
- "mouseWheel",
- "mouseX",
- "mouseY",
- "movedX",
- "movedY",
- "nf",
- "nfc",
- "nfp",
- "nfs",
- "noCanvas",
- "noCursor",
- "noDebugMode",
- "noErase",
- "noFill",
- "noise",
- "noiseDetail",
- "noiseSeed",
- "noLights",
- "noLoop",
- "norm",
- "normal",
- "normalMaterial",
- "noSmooth",
- "noStroke",
- "noTint",
- "orbitControl",
- "ortho",
- "outputVolume",
- "pAccelerationX",
- "pAccelerationY",
- "pAccelerationZ",
- "paletteLerp",
- "panorama",
- "perspective",
- "pixelDensity",
- "pixels",
- "plane",
- "pmouseX",
- "pmouseY",
- "point",
- "pointLight",
- "pop",
- "pow",
- "preload",
- "print",
- "pRotationX",
- "pRotationY",
- "pRotationZ",
- "push",
- "pwinMouseX",
- "pwinMouseY",
- "quad",
- "quadraticVertex",
- "radians",
- "random",
- "randomGaussian",
- "randomSeed",
- "rect",
- "rectMode",
- "red",
- "redraw",
- "remove",
- "removeElements",
- "removeItem",
- "requestPointerLock",
- "resetMatrix",
- "resetShader",
- "resizeCanvas",
- "reverse",
- "rotate",
- "rotateX",
- "rotateY",
- "rotateZ",
- "rotationX",
- "rotationY",
- "rotationZ",
- "round",
- "sampleRate",
- "saturation",
- "save",
- "saveCanvas",
- "saveFrames",
- "saveGif",
- "saveJSON",
- "saveSound",
- "saveStrings",
- "saveTable",
- "scale",
- "second",
- "select",
- "selectAll",
- "set",
- "setAttributes",
- "setBPM",
- "setCamera",
- "setMoveThreshold",
- "setShakeThreshold",
- "setup",
- "shader",
- "shearX",
- "shearY",
- "shininess",
- "shorten",
- "shuffle",
- "sin",
- "smooth",
- "sort",
- "soundFormats",
- "soundOut",
- "specularColor",
- "specularMaterial",
- "sphere",
- "splice",
- "split",
- "splitTokens",
- "spotLight",
- "sq",
- "sqrt",
- "square",
- "storeItem",
- "str",
- "stroke",
- "strokeCap",
- "strokeJoin",
- "strokeWeight",
- "subset",
- "tan",
- "text",
- "textAlign",
- "textAscent",
- "textDescent",
- "textFont",
- "textLeading",
- "textOutput",
- "textSize",
- "textStyle",
- "texture",
- "textureMode",
- "textureWrap",
- "textWidth",
- "textWrap",
- "tint",
- "torus",
- "touchEnded",
- "touches",
- "touchMoved",
- "touchStarted",
- "translate",
- "triangle",
- "trim",
- "turnAxis",
- "unchar",
- "unhex",
- "updatePixels",
- "userStartAudio",
- "vertex",
- "webglVersion",
- "while",
- "width",
- "windowHeight",
- "windowResized",
- "windowWidth",
- "winMouseX",
- "winMouseY",
- "year"
-]}}
\ No newline at end of file
+ "abs",
+ "accelerationX",
+ "accelerationY",
+ "accelerationZ",
+ "acos",
+ "alpha",
+ "ambientLight",
+ "ambientMaterial",
+ "angleMode",
+ "append",
+ "applyMatrix",
+ "arc",
+ "arrayCopy",
+ "asin",
+ "atan",
+ "atan2",
+ "background",
+ "baseColorShader",
+ "baseMaterialShader",
+ "baseNormalShader",
+ "baseStrokeShader",
+ "beginClip",
+ "beginContour",
+ "beginGeometry",
+ "beginShape",
+ "bezier",
+ "bezierDetail",
+ "bezierPoint",
+ "bezierTangent",
+ "bezierVertex",
+ "blend",
+ "blendMode",
+ "blue",
+ "boolean",
+ "box",
+ "brightness",
+ "buildGeometry",
+ "byte",
+ "camera",
+ "ceil",
+ "changed",
+ "char",
+ "circle",
+ "class",
+ "clear",
+ "clearDepth",
+ "clearStorage",
+ "clip",
+ "color",
+ "colorMode",
+ "concat",
+ "cone",
+ "console",
+ "constrain",
+ "copy",
+ "cos",
+ "createA",
+ "createAudio",
+ "createButton",
+ "createCamera",
+ "createCanvas",
+ "createCapture",
+ "createCheckbox",
+ "createColorPicker",
+ "createConvolver",
+ "createDiv",
+ "createElement",
+ "createFileInput",
+ "createFilterShader",
+ "createFramebuffer",
+ "createGraphics",
+ "createImage",
+ "createImg",
+ "createInput",
+ "createModel",
+ "createNumberDict",
+ "createP",
+ "createRadio",
+ "createSelect",
+ "createShader",
+ "createSlider",
+ "createSpan",
+ "createStringDict",
+ "createVector",
+ "createVideo",
+ "createWriter",
+ "cursor",
+ "curve",
+ "curveDetail",
+ "curvePoint",
+ "curveTangent",
+ "curveTightness",
+ "curveVertex",
+ "cylinder",
+ "day",
+ "debugMode",
+ "degrees",
+ "deltaTime",
+ "describe",
+ "describeElement",
+ "deviceMoved",
+ "deviceOrientation",
+ "deviceShaken",
+ "deviceTurned",
+ "directionalLight",
+ "disableFriendlyErrors",
+ "displayDensity",
+ "displayHeight",
+ "displayWidth",
+ "dist",
+ "doubleClicked",
+ "draw",
+ "drawingContext",
+ "ellipse",
+ "ellipseMode",
+ "ellipsoid",
+ "emissiveMaterial",
+ "endClip",
+ "endContour",
+ "endGeometry",
+ "endShape",
+ "erase",
+ "exitPointerLock",
+ "exp",
+ "fill",
+ "filter",
+ "float",
+ "floor",
+ "focused",
+ "for",
+ "fract",
+ "frameCount",
+ "frameRate",
+ "freeGeometry",
+ "freqToMidi",
+ "frustum",
+ "fullscreen",
+ "function",
+ "get",
+ "getAudioContext",
+ "getItem",
+ "getOutputVolume",
+ "getTargetFrameRate",
+ "getURL",
+ "getURLParams",
+ "getURLPath",
+ "green",
+ "gridOutput",
+ "height",
+ "hex",
+ "hour",
+ "httpDo",
+ "httpGet",
+ "httpPost",
+ "hue",
+ "if",
+ "image",
+ "imageLight",
+ "imageMode",
+ "input",
+ "int",
+ "isLooping",
+ "join",
+ "key",
+ "keyCode",
+ "keyIsDown",
+ "keyIsPressed",
+ "keyPressed",
+ "keyReleased",
+ "keyTyped",
+ "lerp",
+ "lerpColor",
+ "let",
+ "lightFalloff",
+ "lightness",
+ "lights",
+ "line",
+ "linePerspective",
+ "loadBytes",
+ "loadFont",
+ "loadImage",
+ "loadJSON",
+ "loadModel",
+ "loadPixels",
+ "loadShader",
+ "loadSound",
+ "loadStrings",
+ "loadTable",
+ "loadXML",
+ "log",
+ "loop",
+ "mag",
+ "map",
+ "match",
+ "matchAll",
+ "max",
+ "metalness",
+ "midiToFreq",
+ "millis",
+ "min",
+ "minute",
+ "model",
+ "month",
+ "mouseButton",
+ "mouseClicked",
+ "mouseDragged",
+ "mouseIsPressed",
+ "mouseMoved",
+ "mousePressed",
+ "mouseReleased",
+ "mouseWheel",
+ "mouseX",
+ "mouseY",
+ "movedX",
+ "movedY",
+ "nf",
+ "nfc",
+ "nfp",
+ "nfs",
+ "noCanvas",
+ "noCursor",
+ "noDebugMode",
+ "noErase",
+ "noFill",
+ "noise",
+ "noiseDetail",
+ "noiseSeed",
+ "noLights",
+ "noLoop",
+ "norm",
+ "normal",
+ "normalMaterial",
+ "noSmooth",
+ "noStroke",
+ "noTint",
+ "orbitControl",
+ "ortho",
+ "outputVolume",
+ "pAccelerationX",
+ "pAccelerationY",
+ "pAccelerationZ",
+ "paletteLerp",
+ "panorama",
+ "perspective",
+ "pixelDensity",
+ "pixels",
+ "plane",
+ "pmouseX",
+ "pmouseY",
+ "point",
+ "pointLight",
+ "pop",
+ "pow",
+ "preload",
+ "print",
+ "pRotationX",
+ "pRotationY",
+ "pRotationZ",
+ "push",
+ "pwinMouseX",
+ "pwinMouseY",
+ "quad",
+ "quadraticVertex",
+ "radians",
+ "random",
+ "randomGaussian",
+ "randomSeed",
+ "rect",
+ "rectMode",
+ "red",
+ "redraw",
+ "remove",
+ "removeElements",
+ "removeItem",
+ "requestPointerLock",
+ "resetMatrix",
+ "resetShader",
+ "resizeCanvas",
+ "reverse",
+ "rotate",
+ "rotateX",
+ "rotateY",
+ "rotateZ",
+ "rotationX",
+ "rotationY",
+ "rotationZ",
+ "round",
+ "sampleRate",
+ "saturation",
+ "save",
+ "saveCanvas",
+ "saveFrames",
+ "saveGif",
+ "saveJSON",
+ "saveSound",
+ "saveStrings",
+ "saveTable",
+ "scale",
+ "second",
+ "select",
+ "selectAll",
+ "set",
+ "setAttributes",
+ "setBPM",
+ "setCamera",
+ "setMoveThreshold",
+ "setShakeThreshold",
+ "setup",
+ "shader",
+ "shearX",
+ "shearY",
+ "shininess",
+ "shorten",
+ "shuffle",
+ "sin",
+ "smooth",
+ "sort",
+ "soundFormats",
+ "soundOut",
+ "specularColor",
+ "specularMaterial",
+ "sphere",
+ "splice",
+ "split",
+ "splitTokens",
+ "spotLight",
+ "sq",
+ "sqrt",
+ "square",
+ "storeItem",
+ "str",
+ "stroke",
+ "strokeCap",
+ "strokeJoin",
+ "strokeWeight",
+ "subset",
+ "tan",
+ "text",
+ "textAlign",
+ "textAscent",
+ "textDescent",
+ "textFont",
+ "textLeading",
+ "textOutput",
+ "textSize",
+ "textStyle",
+ "texture",
+ "textureMode",
+ "textureWrap",
+ "textWidth",
+ "textWrap",
+ "tint",
+ "torus",
+ "touchEnded",
+ "touches",
+ "touchMoved",
+ "touchStarted",
+ "translate",
+ "triangle",
+ "trim",
+ "turnAxis",
+ "unchar",
+ "unhex",
+ "updatePixels",
+ "userStartAudio",
+ "vertex",
+ "webglVersion",
+ "while",
+ "width",
+ "windowHeight",
+ "windowResized",
+ "windowWidth",
+ "winMouseX",
+ "winMouseY",
+ "year"
+ ]
+ }
+}
diff --git a/client/utils/p5-scope-function-access-map.json b/client/utils/p5-scope-function-access-map.json
index f2a7a18502..cea36ccbed 100644
--- a/client/utils/p5-scope-function-access-map.json
+++ b/client/utils/p5-scope-function-access-map.json
@@ -215,11 +215,7 @@
"vertex",
"year"
],
- "blacklist":[
- "draw",
- "setup",
- "preload"
- ]
+ "blacklist": ["draw", "setup", "preload"]
},
"draw": {
"whitelist": [
@@ -342,8 +338,20 @@
"triangle",
"vertex"
],
- "blacklist":[
- "createCanvas", "let","const", "var", "loadJSON", "loadStrings","loadShader","loadTable","loadXML","save","draw", "setup", "preload"
+ "blacklist": [
+ "createCanvas",
+ "let",
+ "const",
+ "var",
+ "loadJSON",
+ "loadStrings",
+ "loadShader",
+ "loadTable",
+ "loadXML",
+ "save",
+ "draw",
+ "setup",
+ "preload"
]
},
"global": {
@@ -404,11 +412,7 @@
"loadXML",
"soundFormats"
],
- "blacklist":[
- "preload",
- "setup",
- "draw"
- ]
+ "blacklist": ["preload", "setup", "draw"]
},
"doubleClicked": {
"whitelist": [
@@ -436,44 +440,24 @@
]
},
"mouseReleased": {
- "whitelist": [
- "fill",
- "noStroke",
- "setAttributes",
- "stroke"
- ]
+ "whitelist": ["fill", "noStroke", "setAttributes", "stroke"]
},
"mouseClicked": {
- "whitelist": [
- "fill",
- "strokeWeight"
- ]
+ "whitelist": ["fill", "strokeWeight"]
},
"windowResized": {
- "whitelist": [
- "resizeCanvas"
- ]
+ "whitelist": ["resizeCanvas"]
},
"keyPressed": {
- "whitelist": [
- "saveFrames",
- "saveGif"
- ]
+ "whitelist": ["saveFrames", "saveGif"]
},
"deviceMoved": {
- "whitelist": [
- "setMoveThreshold",
- "setShakeThreshold"
- ]
+ "whitelist": ["setMoveThreshold", "setShakeThreshold"]
},
"touchStarted": {
- "whitelist": [
- "random"
- ]
+ "whitelist": ["random"]
},
"touchEnded": {
- "whitelist": [
- "random"
- ]
+ "whitelist": ["random"]
}
-}
\ No newline at end of file
+}
diff --git a/client/utils/reduxFormUtils.ts b/client/utils/reduxFormUtils.ts
index 8ef0a0259e..7b512d6dd0 100644
--- a/client/utils/reduxFormUtils.ts
+++ b/client/utils/reduxFormUtils.ts
@@ -1,7 +1,7 @@
import i18n from 'i18next';
-// eslint-disable-next-line max-len
-const EMAIL_REGEX = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;
+const EMAIL_REGEX =
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/i;
const USERNAME_REGEX = /^[a-zA-Z0-9._-]{1,20}$/;
type Email = { email: string };
@@ -14,14 +14,10 @@ type NewPassword = { newPassword: string };
type UsernameAndEmail = Username & Email;
type PasswordsConfirm = Password & ConfirmPassword;
-/** Validation errors for site forms */
export type FormErrors = Partial<
Email & Username & Password & ConfirmPassword & CurrentPassword & NewPassword
>;
-// === Internal helper functions: =====
-
-/** Processes form & mutates errors to add any `username` & `email` errors */
function validateUsernameEmail(
formProps: Partial,
errors: FormErrors
@@ -41,7 +37,6 @@ function validateUsernameEmail(
}
}
-/** Processes form & mutates errors to add any `password` and `confirmPassword` errors */
function validatePasswords(
formProps: Partial,
errors: FormErrors
@@ -64,12 +59,8 @@ function validatePasswords(
}
}
-// ====== PUBLIC: ========
-
-// Account Form:
export type AccountForm = UsernameAndEmail & CurrentPassword & NewPassword;
-/** Validation for the Account Form */
export function validateSettings(
formProps: Partial
): Partial {
@@ -92,10 +83,8 @@ export function validateSettings(
return errors;
}
-// Login form:
export type LoginForm = UsernameAndEmail & Password;
-/** Validation for the Login Form */
export function validateLogin(
formProps: Partial
): Partial {
@@ -111,7 +100,6 @@ export function validateLogin(
export type NewPasswordForm = PasswordsConfirm;
-/** Validation for the New Password Form */
export function validateNewPassword(
formProps: Partial
): Partial {
@@ -120,10 +108,8 @@ export function validateNewPassword(
return errors;
}
-// Signup Form:
export type SignupForm = UsernameAndEmail & PasswordsConfirm;
-/** Validation for the Signup Form */
export function validateSignup(
formProps: Partial
): Partial {
@@ -135,10 +121,8 @@ export function validateSignup(
return errors;
}
-// Reset Password Form:
export type ResetPasswordForm = Email;
-/** Validation for the Reset Password Form */
export function validateResetPassword(
formProps: Partial
): Partial {
diff --git a/contributor_docs/GSOC_hinter_and_refactoring_changes.md b/contributor_docs/GSOC_hinter_and_refactoring_changes.md
index 688127880e..1438be68ba 100644
--- a/contributor_docs/GSOC_hinter_and_refactoring_changes.md
+++ b/contributor_docs/GSOC_hinter_and_refactoring_changes.md
@@ -1,12 +1,15 @@
# GSoC 2025: p5.js Autocomplete Hinter & Refactoring System
+
This readme elaborates on the core components of the context-aware autocomplete hinter, refactoring utilities, and supporting data structures developed as part of Google Summer of Code 2025. The goal is to enable smart context-aware autocompletion, jump-to-definition, and safe variable renaming.
# Project Overview
## Autocomplete Hinter Context-Aware Functionality
+
The following files and modules work together to make the p5.js autocomplete hinter context-aware:
### p5CodeAstAnalyzer.js
+
Purpose: Parses user-written p5.js code using Babel and extracts structural information:
- Maps variable names to p5 class instances
@@ -22,6 +25,7 @@ Key Output Maps:
- userDefinedClassMetadata: Metadata for user-defined classes (methods, constructor properties)
### context-aware-hinter.js
+
Purpose: Provides code autocompletion hints based on:
- Current cursor context (draw, setup, etc.)
@@ -37,12 +41,15 @@ Features:
- Ranks hints by type and scope relevance
### getContext.js
+
Purpose: Get the context of the cursor, i.e. inside what function is the cursor in
## Context-Aware Renaming Functionality
+
The following files ensure context-aware renaming when a variable or user-defined function is selected and the F2 button is clicked
### rename-variable.js
+
Purpose: Safely renames a variable in the user's code editor by:
- Analyzing AST to find all matching identifiers
@@ -50,12 +57,15 @@ Purpose: Safely renames a variable in the user's code editor by:
- Performing in-place replacement using CodeMirror APIs
### showRenameDialog.jsx
+
Purpose: Opens either a dialog box to get the new variable name or a temporary box to show that the word selected cannot be renamed
## Jump to Definition
-The following file allows user to jump to the definition for variables or parameters when a word is ctrl-clicked.
+
+The following file allows user to jump to the definition for variables or parameters when a word is ctrl-clicked.
### jumptodefinition.js
+
Purpose: Implements “jump to definition” for variables or parameters in the editor.
How It Works:
@@ -65,19 +75,23 @@ How It Works:
- Moves the editor cursor to the source location of the definition
## Supporting Data Files
+
### p5-instance-methods-and-creators.json
+
Purpose: Maps p5.js classes to:
- Methods used to instantiate them (createMethods)
- Methods available on those instances (methods)
### p5-scope-function-access-map.json
+
Purpose: Defines which p5.js functions are allowed or disallowed inside functions like setup, draw, preload, etc.
### p5-reference-functions.json
+
Purpose: A flat list of all available p5.js functions.
Used to:
- Differentiate between built-in and user-defined functions
-- Filter out redefinitions or incorrect hints
\ No newline at end of file
+- Filter out redefinitions or incorrect hints
diff --git a/contributor_docs/accessibility.md b/contributor_docs/accessibility.md
index b29a7c02d5..e6bb144dfb 100644
--- a/contributor_docs/accessibility.md
+++ b/contributor_docs/accessibility.md
@@ -5,19 +5,19 @@ Here is a guide on [how to use the accessible editor](https://gist.github.com/Ma
The code for the p5.js web editor adheres to web accessibility standards. The following guidelines will help to ensure that accessibility continues to be a priority as development continues.
## Screen Reader and Keyboard Access
+
**Code Structure**
-* Screen Readers are an assistive technology for vision loss that helps users to navigate a web page. They are able to prioritize content based on the semantic meaning of HTML tags. Therefore, it is important to use specific tags, such as `nav`, `ul`, `li`, `section`, and so on. `div` is the least screen reader-friendly tag. For example, [here is the semantic meaning of the `body` tag](http://html5doctor.com/element-index/#body)
-* All buttons/links/windows need to be accessible by the keyboard ( By tabbing, pressing space etc.)
-* In cases where tags are not screen reader-friendly, we can take advantage of [tabIndex](http://webaim.org/techniques/keyboard/tabindex). Using tabIndex ensures that all elements are accessible via keyboard. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/Sidebar.jsx#L88)
-* When opening a new window or pop up window, ensure the keyboard focus also moves to the new window. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/NewFileForm.jsx#L32)
+- Screen Readers are an assistive technology for vision loss that helps users to navigate a web page. They are able to prioritize content based on the semantic meaning of HTML tags. Therefore, it is important to use specific tags, such as `nav`, `ul`, `li`, `section`, and so on. `div` is the least screen reader-friendly tag. For example, [here is the semantic meaning of the `body` tag](http://html5doctor.com/element-index/#body)
+- All buttons/links/windows need to be accessible by the keyboard ( By tabbing, pressing space etc.)
+- In cases where tags are not screen reader-friendly, we can take advantage of [tabIndex](http://webaim.org/techniques/keyboard/tabindex). Using tabIndex ensures that all elements are accessible via keyboard. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/Sidebar.jsx#L88)
+- When opening a new window or pop up window, ensure the keyboard focus also moves to the new window. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/NewFileForm.jsx#L32)
**Labeling**
-* When creating button icons, images, or something without text (this does not include an HTML5 ``), use [aria-labels](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label). [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/Toolbar.jsx#L107)
-* All ``s need to have a `summary` attribute. This will ensure user is given context to what the table is. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/SketchList.jsx#L491)
-* `ul`s and `nav`s menus need to include a title. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/components/Nav.jsx#L281)
-
+- When creating button icons, images, or something without text (this does not include an HTML5 ``), use [aria-labels](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label). [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/Toolbar.jsx#L107)
+- All ``s need to have a `summary` attribute. This will ensure user is given context to what the table is. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/modules/IDE/components/SketchList.jsx#L491)
+- `ul`s and `nav`s menus need to include a title. [code example](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/components/Nav.jsx#L281)
## Color Blind and Low-Vision Accessibility
@@ -25,38 +25,39 @@ To make the editor accessible to color blind and low-vision users, it is importa
**Contrast**
-* The [WCAG 2.2 accessibility guidelines](https://www.w3.org/TR/WCAG22/) include guidelines [1.4.3: Perceivable - Contrast (minimum)](https://www.w3.org/TR/WCAG22/#contrast-minimum) and [1.4.11: Perceivable - Non-text Contrast](https://www.w3.org/TR/WCAG22/#non-text-contrast). The guideline for contrast is to ensure that color blind and low-vision users are able to visually distinguish elements that are different colors from one another.
+- The [WCAG 2.2 accessibility guidelines](https://www.w3.org/TR/WCAG22/) include guidelines [1.4.3: Perceivable - Contrast (minimum)](https://www.w3.org/TR/WCAG22/#contrast-minimum) and [1.4.11: Perceivable - Non-text Contrast](https://www.w3.org/TR/WCAG22/#non-text-contrast). The guideline for contrast is to ensure that color blind and low-vision users are able to visually distinguish elements that are different colors from one another.
-* These guidelines specify the AA standard of contrast ratios between the foreground and background of different types of text, images, and UI components.
+- These guidelines specify the AA standard of contrast ratios between the foreground and background of different types of text, images, and UI components.
- * Small text (above 14pt and below 18pt and not bold) must have a contrast ratio of at least 4.5:1
- * [Large text](https://www.w3.org/TR/WCAG22/#dfn-large-scale) (above 18 pt regular/14 pt bold or roughly 1.2-1.5em) must have a contrast ratio of at least 3:1
- * UI components must have a contrast ratio of at least 3:1 against all adjacent colors
- * The color marking the state of UI components (ie active vs inactive) must have a contrast ratio of at least 3:1 relative to each other
- * Graphics that are required for understanding content must have a contrast ratio of at least 3:1 against all adjacent colors
- * Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.
- * Text that is part of a logo or brand name has no contrast requirement.
+ - Small text (above 14pt and below 18pt and not bold) must have a contrast ratio of at least 4.5:1
+ - [Large text](https://www.w3.org/TR/WCAG22/#dfn-large-scale) (above 18 pt regular/14 pt bold or roughly 1.2-1.5em) must have a contrast ratio of at least 3:1
+ - UI components must have a contrast ratio of at least 3:1 against all adjacent colors
+ - The color marking the state of UI components (ie active vs inactive) must have a contrast ratio of at least 3:1 relative to each other
+ - Graphics that are required for understanding content must have a contrast ratio of at least 3:1 against all adjacent colors
+ - Text or images of text that are part of an inactive user interface component, that are pure decoration, that are not visible to anyone, or that are part of a picture that contains significant other visual content, have no contrast requirement.
+ - Text that is part of a logo or brand name has no contrast requirement.
-* The [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) tool by TPGi is a downloadable app that allows you to check color contrast and see if it complies with requirements for small text, large text, and GUI elements.
+- The [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) tool by TPGi is a downloadable app that allows you to check color contrast and see if it complies with requirements for small text, large text, and GUI elements.
-* It is recommended that you adhere to the codelens color palettes (light, dark, and contrast) when contributing to the p5 editor, which define different colors for different parts of the GUI. These colors can be found in client/styles/components/abstracts/variables.scss. Many components come with color defaults that use theme-wide color styles. Some color combinations within the palettes meet foreground/background contrast requirements and others do not, so it is important to check them.
-* A p5 editor contributor [(Izzy Snyder)]([url](https://github.com/Izzy-Snyder)) created a tool to check which colors in the editor palette do and do not comply with contrast standards. You can [check out the Github Repository]([url](https://github.com/Izzy-Snyder/contrast-palette-checker)) to try it out yourself.
+- It is recommended that you adhere to the codelens color palettes (light, dark, and contrast) when contributing to the p5 editor, which define different colors for different parts of the GUI. These colors can be found in client/styles/components/abstracts/variables.scss. Many components come with color defaults that use theme-wide color styles. Some color combinations within the palettes meet foreground/background contrast requirements and others do not, so it is important to check them.
+- A p5 editor contributor [(Izzy Snyder)](<[url](https://github.com/Izzy-Snyder)>) created a tool to check which colors in the editor palette do and do not comply with contrast standards. You can [check out the Github Repository](<[url](https://github.com/Izzy-Snyder/contrast-palette-checker)>) to try it out yourself.
**Use of Color**
-* The [WCAG 2.2 accessibility guidelines](https://www.w3.org/TR/WCAG22/) include [guideline 1.4.1 - perceivable: use of color](https://www.w3.org/TR/WCAG22/#use-of-color). This guideline states that “Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.”
-* Essentially, information that the user needs to be aware of such as the presence of links, the state of buttons, and the presence of errors should not be communicated through color (hue) differences alone. Additionally, the user must not be expected to correctly identify a specific color to use the site (e.g saying “errors are marked in red”).
-* This does not mean color cannot be used to convey information - that is great design practice! However, that information should also be conveyed in an additional way.
-* Ways to convey information include:
- * [using text labels in addition to color](https://www.w3.org/WAI/WCAG22/Techniques/general/G14)
- * [using additional non-color styling cues](https://www.w3.org/WAI/WCAG22/Techniques/general/G182) such as underlining or bolding text to differentiate links from surrounding text
- * [using different fill patterns](https://www.w3.org/WAI/WCAG22/Techniques/general/G111) to differentiate GUI elements
- *[using appropriate contrast](https://www.w3.org/WAI/WCAG22/Techniques/general/G183) (meaning differences in lightness/darkness instead of just hue) between differently colored elements.
-* Using styling that is completely unrelated to color is often the most straightforward way to meet this guideline, compared to color contrast which requires more attention to detail on a per-component basis to implement and maintain.
+
+- The [WCAG 2.2 accessibility guidelines](https://www.w3.org/TR/WCAG22/) include [guideline 1.4.1 - perceivable: use of color](https://www.w3.org/TR/WCAG22/#use-of-color). This guideline states that “Color is not used as the only visual means of conveying information, indicating an action, prompting a response, or distinguishing a visual element.”
+- Essentially, information that the user needs to be aware of such as the presence of links, the state of buttons, and the presence of errors should not be communicated through color (hue) differences alone. Additionally, the user must not be expected to correctly identify a specific color to use the site (e.g saying “errors are marked in red”).
+- This does not mean color cannot be used to convey information - that is great design practice! However, that information should also be conveyed in an additional way.
+- Ways to convey information include:
+ - [using text labels in addition to color](https://www.w3.org/WAI/WCAG22/Techniques/general/G14)
+ - [using additional non-color styling cues](https://www.w3.org/WAI/WCAG22/Techniques/general/G182) such as underlining or bolding text to differentiate links from surrounding text
+ - [using different fill patterns](https://www.w3.org/WAI/WCAG22/Techniques/general/G111) to differentiate GUI elements \*[using appropriate contrast](https://www.w3.org/WAI/WCAG22/Techniques/general/G183) (meaning differences in lightness/darkness instead of just hue) between differently colored elements.
+- Using styling that is completely unrelated to color is often the most straightforward way to meet this guideline, compared to color contrast which requires more attention to detail on a per-component basis to implement and maintain.
## Accessible web design resources
-* For more information on accessibility see the [teach access tutorial](https://teachaccess.github.io/tutorial/)
-* [WCAG 2.2 Guidelines](https://www.w3.org/WAI/WCAG22/quickref)
-* [Checklist - The A11Y Project](https://www.a11yproject.com/checklist/) - a basic accessibility checklist based on the WCAG 2.2 guidelines
-* [Resources - The A11Y Project](https://www.a11yproject.com/resources/) - resource library including articles, tools, and classes on accessible web design.
-* [Deque University](https://dequeuniversity.com/) - classes and articles on accessible design
-* [Color accessibility beyond a pass/fail by Lauren Jong](https://medium.com/san-francisco-digital-services/color-accessibility-beyond-a-pass-fail-2ea19be4b3c1) - a more nuanced case study on designing for accessibility with regard to color
+
+- For more information on accessibility see the [teach access tutorial](https://teachaccess.github.io/tutorial/)
+- [WCAG 2.2 Guidelines](https://www.w3.org/WAI/WCAG22/quickref)
+- [Checklist - The A11Y Project](https://www.a11yproject.com/checklist/) - a basic accessibility checklist based on the WCAG 2.2 guidelines
+- [Resources - The A11Y Project](https://www.a11yproject.com/resources/) - resource library including articles, tools, and classes on accessible web design.
+- [Deque University](https://dequeuniversity.com/) - classes and articles on accessible design
+- [Color accessibility beyond a pass/fail by Lauren Jong](https://medium.com/san-francisco-digital-services/color-accessibility-beyond-a-pass-fail-2ea19be4b3c1) - a more nuanced case study on designing for accessibility with regard to color
diff --git a/contributor_docs/deployment.md b/contributor_docs/deployment.md
index f40be893fa..dd04e132e9 100644
--- a/contributor_docs/deployment.md
+++ b/contributor_docs/deployment.md
@@ -3,14 +3,15 @@
This document contains information about how to deploy to production, all of the different platforms and tools, and how to configure them.
WIP:
-* Travis
-* Docker Hub
-* Kubernetes
-* S3
-* Mailgun
-* Cloudflare
-* DNS/Dreamhost
-* mLab
+
+- Travis
+- Docker Hub
+- Kubernetes
+- S3
+- Mailgun
+- Cloudflare
+- DNS/Dreamhost
+- mLab
## Deployment Process
@@ -46,7 +47,7 @@ If you are interested in hosting and deploying your own p5.js Web Editor instanc
1. Sign up for a free account at: [Heroku](https://www.heroku.com/)
2. Click here: [](https://heroku.com/deploy?template=https://github.com/processing/p5.js-web-editor/tree/develop)
-3. Enter a unique *App name*, this will become part of the URL (i.e. https://app-name.herokuapp.com/)
+3. Enter a unique _App name_, this will become part of the URL (i.e. https://app-name.herokuapp.com/)
4. Update any configuration variables, or accept the defaults for a quick evaluation (they can be changed later to enable full functionality)
5. Click on the "Deploy app" button
6. When complete, click on the "View app" button
diff --git a/contributor_docs/development.md b/contributor_docs/development.md
index 7a8b139772..4117ec766d 100644
--- a/contributor_docs/development.md
+++ b/contributor_docs/development.md
@@ -13,38 +13,43 @@ A guide for adding code to this project.
- [Technologies Used](#technologies-used)
## Installation
+
Follow the [installation guide](./installation.md).
## Development Workflow
-* This project uses git-flow. For an in-depth overview of git-flow, read ["A successful Git branching model"](https://nvie.com/posts/a-successful-git-branching-model/).
-* [Let's stop saying Master/Slave](https://medium.com/@mikebroberts/let-s-stop-saying-master-slave-10f1d1bf34df)
+
+- This project uses git-flow. For an in-depth overview of git-flow, read ["A successful Git branching model"](https://nvie.com/posts/a-successful-git-branching-model/).
+- [Let's stop saying Master/Slave](https://medium.com/@mikebroberts/let-s-stop-saying-master-slave-10f1d1bf34df)
As a person contributing code but not creating production releases (this is most people!), here's what you need to know:
-* The default branch is `develop`. All pull requests should be made to this branch. It should be stable, and all commits are visible at a staging server.
-* When working on a bug or feature, you should branch from the `develop` branch. When you're done, you should open a pull request from your feature branch to `develop`.
-* The `release` branch is the live production branch and is the code deployed to editor.p5js.org. Changes to this branch should be made carefully and will be done using git tags.
-* Emergency hotfix changes should be branched from `release` and merged via a pull request to `release`. After a PR is merged, then the commits can be merged to `develop`.
+
+- The default branch is `develop`. All pull requests should be made to this branch. It should be stable, and all commits are visible at a staging server.
+- When working on a bug or feature, you should branch from the `develop` branch. When you're done, you should open a pull request from your feature branch to `develop`.
+- The `release` branch is the live production branch and is the code deployed to editor.p5js.org. Changes to this branch should be made carefully and will be done using git tags.
+- Emergency hotfix changes should be branched from `release` and merged via a pull request to `release`. After a PR is merged, then the commits can be merged to `develop`.
See the [release guide](./release.md) for information about creating a release.
## Tests
+
To run the test suite simply run `npm test` (after installing dependencies with `npm install`)
A sample unit test could be found here: [Nav.unit.test.jsx](../client/modules/IDE/components/Header/Nav.unit.test.jsx).
## Committing Code
+
Inspired by [Git/GitHub commit standards & conventions](https://gist.github.com/digitaljhelms/3761873).
Good commit messages serve at least three important purposes:
-* They speed up the reviewing process.
-* They help us write good release notes.
-* They help future maintainers understand your change and the reasons behind it.
-
+- They speed up the reviewing process.
+- They help us write good release notes.
+- They help future maintainers understand your change and the reasons behind it.
### General Rules
-* Make [atomic commits](http://en.wikipedia.org/wiki/Atomic_commit) of changes, even across multiple files, in logical units. That is, as much as possible, each commit should be focused on one specific purpose.
-* As much as possible, make sure a commit does not contain unnecessary whitespace changes. This can be checked as follows:
+
+- Make [atomic commits](http://en.wikipedia.org/wiki/Atomic_commit) of changes, even across multiple files, in logical units. That is, as much as possible, each commit should be focused on one specific purpose.
+- As much as possible, make sure a commit does not contain unnecessary whitespace changes. This can be checked as follows:
```
$ git diff --check
@@ -54,43 +59,45 @@ $ git diff --check
Structure your commit message like this:
- ```
- [#issueid] Short (50 chars or less) summary of changes
+```
+[#issueid] Short (50 chars or less) summary of changes
+
+More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. In some contexts, the first line is treated as the subject of an email and the rest of the text as the body. The blank line separating the summary from the body is critical (unless you omit the body entirely); tools like rebase can get confused if you run the two together.
- More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. In some contexts, the first line is treated as the subject of an email and the rest of the text as the body. The blank line separating the summary from the body is critical (unless you omit the body entirely); tools like rebase can get confused if you run the two together.
+Further paragraphs come after blank lines.
- Further paragraphs come after blank lines.
+ - Bullet points are okay, too
- - Bullet points are okay, too
+ - Typically a hyphen or asterisk is used for the bullet, preceded by a single space, with blank lines in between, but conventions vary here
+```
- - Typically a hyphen or asterisk is used for the bullet, preceded by a single space, with blank lines in between, but conventions vary here
- ```
-* Write the summary line and description of what you have done in the imperative mode, that is as if you were commanding someone. Start the line with "Fix", "Add", "Change" instead of "Fixed", "Added", "Changed".
-* Link the GitHub issue you are working on in the summary line in brackets, e.g. [#123]
-* Always leave the second line blank.
-* Be as descriptive as possible in the description. It helps to reason about the intention of commits and gives more context about why changes happened.
-* If it seems difficult to summarize what your commit does, it may be because it includes several logical changes or bug fixes, and are better split up into several commits using `git add -p`.
-* Note that you can connect multiple issues to a commit, if necessary: `[#123][#456] Add Button component`
+- Write the summary line and description of what you have done in the imperative mode, that is as if you were commanding someone. Start the line with "Fix", "Add", "Change" instead of "Fixed", "Added", "Changed".
+- Link the GitHub issue you are working on in the summary line in brackets, e.g. [#123]
+- Always leave the second line blank.
+- Be as descriptive as possible in the description. It helps to reason about the intention of commits and gives more context about why changes happened.
+- If it seems difficult to summarize what your commit does, it may be because it includes several logical changes or bug fixes, and are better split up into several commits using `git add -p`.
+- Note that you can connect multiple issues to a commit, if necessary: `[#123][#456] Add Button component`
## Design
+
- [Style Guide/Design System on Zeplin](https://scene.zeplin.io/project/55f746c54a02e1e50e0632c3)
- [Latest Design on Figma](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A1). Note that the current design on the website has diverged, parts of this design will not be implemented, but it is still helpful to have around for reference.
- [Mobile Designs](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A2529), [Responsive Designs](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A3292)
## Technologies Used
-**MERN stack** - MongoDB, Express, React/Redux, and Node.
-
- - For a reference to the **file structure format** this project is using, please look at the [Mern Starter](https://github.com/Hashnode/mern-starter).
+**MERN stack** - MongoDB, Express, React/Redux, and Node.
+
+- For a reference to the **file structure format** this project is using, please look at the [Mern Starter](https://github.com/Hashnode/mern-starter).
+
+- This project does not use CSS Modules, styled-components, or other CSS-in-JS libraries, but uses Sass. [BEM guidelines and naming conventions](http://getbem.com/) are followed.
- - This project does not use CSS Modules, styled-components, or other CSS-in-JS libraries, but uses Sass. [BEM guidelines and naming conventions](http://getbem.com/) are followed.
-
- - For common and reusable styles, write OOSCSS (Object-Oriented SCSS) with placeholders and mixins. For organizing styles, follow the [7-1 Pattern](https://sass-guidelin.es/#the-7-1-pattern) for Sass.
+- For common and reusable styles, write OOSCSS (Object-Oriented SCSS) with placeholders and mixins. For organizing styles, follow the [7-1 Pattern](https://sass-guidelin.es/#the-7-1-pattern) for Sass.
- - We're using [ES6](http://es6-features.org/) and transpiling to ES5 using [Babel](https://babeljs.io/).
+- We're using [ES6](http://es6-features.org/) and transpiling to ES5 using [Babel](https://babeljs.io/).
- - For reference to the JavaScript style guide, see the [Airbnb Style Guide](https://github.com/airbnb/javascript), [React ESLint Plugin](https://github.com/yannickcr/eslint-plugin-react).
+- For reference to the JavaScript style guide, see the [Airbnb Style Guide](https://github.com/airbnb/javascript), [React ESLint Plugin](https://github.com/yannickcr/eslint-plugin-react).
- - The ESLint configuration is based on a few popular React/Redux boilerplates. Open to suggestions on this. If in development, you're getting annoyed with ESLint, you can disable any line from eslint by commenting at the end of the line `// eslint-disable-line`.
+- The ESLint configuration is based on a few popular React/Redux boilerplates. Open to suggestions on this. If in development, you're getting annoyed with ESLint, you can disable any line from eslint by commenting at the end of the line `// eslint-disable-line`.
- - [Jest](https://jestjs.io/) for unit tests and snapshot testing along with [Enzyme](https://airbnb.io/enzyme/) for testing React.
+- [Jest](https://jestjs.io/) for unit tests and snapshot testing along with [Enzyme](https://airbnb.io/enzyme/) for testing React.
diff --git a/contributor_docs/installation.md b/contributor_docs/installation.md
index 2971623e93..2a3ecf8d14 100644
--- a/contributor_docs/installation.md
+++ b/contributor_docs/installation.md
@@ -8,9 +8,10 @@ Before you dive in, note that there are two ways to install the project locally:
- **Docker Installation** is ideal if you want a faster setup with all dependencies (Node, MongoDB, etc.) isolated in containers. This avoids version conflicts and works consistently across environments especially helpful if you're new to backend setup or don't want to alter your local setup.
-If you're just getting started, try going with the **Manual Installation** method! Once you're comfortable with one method, feel free to try out both to see which one you prefer.
+If you're just getting started, try going with the **Manual Installation** method! Once you're comfortable with one method, feel free to try out both to see which one you prefer.
### Installation Issues
+
If you run into any issues while setting up your environment, take some time to search through [prior issues](https://github.com/processing/p5.js-web-editor/issues) here or discussions on the [Processing Foundation discourse](https://discourse.processing.org/) to see if anyone has encountered what you've faced before. If you don't find anything, feel free to open one!
## Manual Installation
@@ -18,7 +19,7 @@ If you run into any issues while setting up your environment, take some time to
_Note_: The installation steps assume you are using a Unix-like shell. If you are using Windows, you will need to use `copy` instead of `cp`.
1. Install Node.js. The recommended way is to Node through [nvm](https://github.com/nvm-sh/nvm), which is a command-line tool that helps you manage different versions of Node.js on your system. You can install nvm by using [nvm's installation guide](https://github.com/nvm-sh/nvm?tab=readme-ov-file#installing-and-updating).
- - You can also install [node.js](https://nodejs.org/download/release/v18.20.8/) version 18.20.8 directly from the Node.js website. To check if you already have Node installed on your computer, run `$ node -v`.
+ - You can also install [node.js](https://nodejs.org/download/release/v18.20.8/) version 18.20.8 directly from the Node.js website. To check if you already have Node installed on your computer, run `$ node -v`.
2. [Fork](https://help.github.com/articles/fork-a-repo) the [p5.js Web Editor repository](https://github.com/processing/p5.js-web-editor) into your own GitHub account.
3. [Clone](https://help.github.com/articles/cloning-a-repository/) your new fork of the repository from GitHub onto your local computer.
@@ -27,20 +28,21 @@ _Note_: The installation steps assume you are using a Unix-like shell. If you ar
```
4. If you are using nvm, run `$ nvm use 18.20.8` to set your Node version to 18.20.8
-5. Ensure your npm version is set to 10.8.2 by running `$ npm -v`. If it isn't, run `npm install -g npm@10.8.2` to install it.
+5. Ensure your npm version is set to 10.8.2 by running `$ npm -v`. If it isn't, run `npm install -g npm@10.8.2` to install it.
6. Navigate into the project folder and install all its necessary dependencies with npm.
```
$ cd p5.js-web-editor
$ npm install
```
+
7. Install MongoDB and make sure it is running
- * For Mac OSX with [homebrew](http://brew.sh/): `brew tap mongodb/brew` then `brew install mongodb-community` and finally start the server with `brew services start mongodb-community` or you can visit the installation guide here [Installation Guide For MacOS](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
- * For Windows and Linux: [MongoDB Installation](https://docs.mongodb.com/manual/installation/)
+ - For Mac OSX with [homebrew](http://brew.sh/): `brew tap mongodb/brew` then `brew install mongodb-community` and finally start the server with `brew services start mongodb-community` or you can visit the installation guide here [Installation Guide For MacOS](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
+ - For Windows and Linux: [MongoDB Installation](https://docs.mongodb.com/manual/installation/)
8. `$ cp .env.example .env`
9. (Optional) Update `.env` with necessary keys to enable certain app behaviors, i.e. add Github ID and Github Secret if you want to be able to log in with Github.
- * See the [GitHub API Configuration](#github-api-configuration) section for information on how to authenticate with Github.
- * See the [S3 Bucket Configuration](#s3-bucket-configuration) section for information on how to set up an S3 bucket
+ - See the [GitHub API Configuration](#github-api-configuration) section for information on how to authenticate with Github.
+ - See the [S3 Bucket Configuration](#s3-bucket-configuration) section for information on how to set up an S3 bucket
10. (Optional) Run `$ npm run fetch-examples` to download the example sketches into a user called 'p5'. Note that you need to configure your GitHub Credentials, which you can do by following the [Github API Configuration](#github-api-configuration) section.
11. Enable Prettier in your text editor by following [this guide](https://prettier.io/docs/en/editors.html).
12. `$ npm start`
@@ -57,17 +59,17 @@ Using Docker, you can have a complete, consistent development environment withou
Note that this takes up a significant amount of space on your machine. Make sure you have at least 5GB free.
1. Install Docker for your operating system
- * [Mac](https://www.docker.com/docker-mac)
- * [Windows](https://www.docker.com/docker-windows)
+ - [Mac](https://www.docker.com/docker-mac)
+ - [Windows](https://www.docker.com/docker-windows)
2. Install [Docker Desktop](https://www.docker.com/products/docker-desktop/)
3. Clone this repository and cd into it
4. `$ docker-compose -f docker-compose-development.yml build`
- * Note: Depending on which version of Docker Compose you are using, the base command will be either `docker-compose` or `docker compose`. More information about it can be found in Docker Compose's documentation for their [V1 to V2 transition](https://github.com/docker/compose/tree/v1?tab=readme-ov-file#v1-vs-v2-transition-hourglass_flowing_sand).
+ - Note: Depending on which version of Docker Compose you are using, the base command will be either `docker-compose` or `docker compose`. More information about it can be found in Docker Compose's documentation for their [V1 to V2 transition](https://github.com/docker/compose/tree/v1?tab=readme-ov-file#v1-vs-v2-transition-hourglass_flowing_sand).
5. `$ cp .env.example .env`
6. (Optional) Update `.env` with necessary keys to enable certain app behaviors, i.e. add Github ID and Github Secret if you want to be able to log in with Github.
- * See the [GitHub API Configuration](#github-api-configuration) section for information on how to authenticate with Github.
- * See the [S3 Bucket Configuration](#s3-bucket-configuration) section for information on how to set up an S3 bucket
-7. `$ docker-compose -f docker-compose-development.yml run --rm app npm run fetch-examples` - note that you need to configure your GitHub Credentials, which you can do by following the [Github API Configuration](#github-api-configuration) section.
+ - See the [GitHub API Configuration](#github-api-configuration) section for information on how to authenticate with Github.
+ - See the [S3 Bucket Configuration](#s3-bucket-configuration) section for information on how to set up an S3 bucket
+7. `$ docker-compose -f docker-compose-development.yml run --rm app npm run fetch-examples` - note that you need to configure your GitHub Credentials, which you can do by following the [Github API Configuration](#github-api-configuration) section.
8. Enable Prettier in your text editor by following [this guide](https://prettier.io/docs/en/editors.html).
Now, anytime you wish to start the server with its dependencies, you can run:
@@ -87,23 +89,26 @@ If you don't have the full server environment running, you can launch a one-off
See [this configuration guide](./s3_configuration.md) for information about how to configure your own S3 bucket. These instructions were adapted from [this gist](https://gist.github.com/catarak/70c9301f0fd1ac2d6b58de03f61997e3).
-Note that this is optional unless you are working on the part of the application that allows a user to upload images, videos, etc.
+Note that this is optional unless you are working on the part of the application that allows a user to upload images, videos, etc.
## GitHub API Configuration
In this application, GitHub credentials are used for:
-* Authentication with GitHub
-* Importing the p5.js examples to your local database
-* Rendering the 404 pages
+
+- Authentication with GitHub
+- Importing the p5.js examples to your local database
+- Rendering the 404 pages
If you are working on a part of the application that requires one of the above uses, then you will need to get GitHub API credentials.
When you go to the [Developer settings](https://github.com/settings/developers) in your GitHub account, you will see that you can create two types of Apps: `GitHub Apps` and `OAuth Apps` ([differences between GitHub Apps and OAuth Apps](https://docs.github.com/en/free-pro-team@latest/developers/apps/differences-between-github-apps-and-oauth-apps)). This project requires you to make an `OAuth App`. After clicking on "New OAuth App", you will need to fill in the following fields:
+
- **Application name**: `p5.js Web Editor - Local`
- **Homepage URL**: `http://localhost:8000`
- **Authorization Callback URL**: `http://localhost:8000/auth/github/callback`
Once you've created a new OAuth app, update your `.env`:
+
```
GITHUB_ID={GITHUB_ID}
GITHUB_SECRET={GITHUB_SECRET}
diff --git a/contributor_docs/preparing_a_pull_request.md b/contributor_docs/preparing_a_pull_request.md
index f903008f57..f78c5fdded 100644
--- a/contributor_docs/preparing_a_pull_request.md
+++ b/contributor_docs/preparing_a_pull_request.md
@@ -2,12 +2,13 @@
Copied and updated from the [p5.js repository](https://github.com/processing/p5.js).
-Pull-requests are easier when your code is up to date!
+Pull-requests are easier when your code is up to date!
## Before Submitting a Pull Request
+
Before submitting a pull request, make sure that:
-- Your work is related to an issue. **Pull requests that do not have an associated issue will not be accepted.**
+- Your work is related to an issue. **Pull requests that do not have an associated issue will not be accepted.**
- **The issue is not already assigned to another contributor.** We follow a "first assigned, first served" approach to avoid duplicated work. If you open a PR for an issue that someone else is already working on, your PR will be closed.
- Your work adheres to the style guidelines and fits in with the rest of the codebase.
- You ran the project locally and tested your changes. Pay special attention to any specific areas of the p5.js editor that may be affected by your changes. Does everything still work as before? Great!
@@ -17,12 +18,13 @@ Once that's done, you can use git rebase to update your code to incorporate chan
## Save and Update
### Save everything you have!
+
git status
git add -u
git commit
-
### Find out about changes
+
Make sure you're tracking the upstream p5.js repository.
git remote show upstream
@@ -36,27 +38,35 @@ Then ask git about the latest changes.
git fetch upstream
### Just in case: make a copy of your changes in a new branch
+
git branch your-branch-name-backup
-### Apply changes from develop branch, adds your changes *after*
+### Apply changes from develop branch, adds your changes _after_
+
git rebase upstream/develop
### Switches back to develop branch
+
git checkout develop
### Helps other contributors fully understand the changes that you made
- git commit -m "Fixed documentation typos"
-### Verifies what git will be committing
- git status
+ git commit -m "Fixed documentation typos"
+
+### Verifies what git will be committing
+
+ git status
## Pull Request Templates
+
Once you've opened your pull request, please ensure that you follow the guidelines.
## CONFLICTS
+
You may have some conflicts! It's okay. Feel free to ask for help. If merging with the latest upstream `develop` branch causes conflicts, you can always make a pull request with the upstream repository, which makes the merge conflicts public.
## And finally, for the great glory
+
git push --set-upstream origin your-branch-name-backup
-Here's a [good tutorial reference on rebasing](https://www.atlassian.com/git/tutorials/merging-vs-rebasing), in case you're intensely curious about the technical details.
+Here's a [good tutorial reference on rebasing](https://www.atlassian.com/git/tutorials/merging-vs-rebasing), in case you're intensely curious about the technical details.
diff --git a/contributor_docs/preparing_an_issue.md b/contributor_docs/preparing_an_issue.md
index 47c007985c..866b50b46c 100644
--- a/contributor_docs/preparing_an_issue.md
+++ b/contributor_docs/preparing_an_issue.md
@@ -1,16 +1,16 @@
-# Preparing an Issue
+# Preparing an Issue
Most activity on the p5.js Editor’s GitHub happens in issues. Issues are GitHub posts which can contain bug reports, feature requests, or broader discussions about the development of the p5.js Editor. It’s a great place to begin contributing.
## Filing a New Issue
-To file a new issue:
+To file a new issue:
-1. Visit the [Issues](https://github.com/processing/p5.js-web-editor/issues) tab on the repository.
+1. Visit the [Issues](https://github.com/processing/p5.js-web-editor/issues) tab on the repository.
2. Click the green 'New Issue' button on the right.
-3. A modal should appear with several templates for the type of issue you would like to open. Choose the one that best matches what you're looking for (i.e Bug Report, Feature Request).
+3. A modal should appear with several templates for the type of issue you would like to open. Choose the one that best matches what you're looking for (i.e Bug Report, Feature Request).
4. Fill out the form as in-depth as you can. It helps to be as clear and specific as you can in your language and supporting information. Some ways to achieve that is by including screenshots, code snippets, or steps to exactly reproduce a scenario! Doing this helps maintainers and other contributors understand and respond to your issue more quickly and accurately.
@@ -19,10 +19,12 @@ More in-depth information about filing an issue can be found within the [p5.js L
## Navigating Existing Issues
### Project Board
-Many issues are related to each other and fall under bigger projects. To get a bigger picture, look at the [All Projects](https://github.com/processing/p5.js-web-editor/projects/) board.
+
+Many issues are related to each other and fall under bigger projects. To get a bigger picture, look at the [All Projects](https://github.com/processing/p5.js-web-editor/projects/) board.
### Searching and Filtering
-If you're looking for issues to work on, a good place to start is with tickets labeled [high priority](https://github.com/processing/p5.js-web-editor/labels/priority%3Ahigh). You can also look for tickets that are [feature enhancements](https://github.com/processing/p5.js-web-editor/labels/type%3Afeature), [bug fixes](https://github.com/processing/p5.js-web-editor/labels/type%3Abug), and a few other tags.
+
+If you're looking for issues to work on, a good place to start is with tickets labeled [high priority](https://github.com/processing/p5.js-web-editor/labels/priority%3Ahigh). You can also look for tickets that are [feature enhancements](https://github.com/processing/p5.js-web-editor/labels/type%3Afeature), [bug fixes](https://github.com/processing/p5.js-web-editor/labels/type%3Abug), and a few other tags.
If you feel like an issue is tagged incorrectly (e.g. it's low priority and you think it should be high), please update the issue!
@@ -33,21 +35,25 @@ If you feel like an issue is tagged incorrectly (e.g. it's low priority and you
Labels help categorize issues and makes them easier to find and sort. You can browse the full list in our [Issue Labels](https://github.com/processing/p5.js-web-editor/labels), but here are a few helpful ones to understand early on:
### Good First Issues
-For first-time contributors or those who want to start with a small task, [check out the list of good first issues](https://github.com/processing/p5.js-web-editor/labels/good%20first%20issue), or [issues that need documentation of steps to reproduce](https://github.com/processing/p5.js-web-editor/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+steps+to+reproduce%22). It's okay to not know how to fix an issue—feel free to ask questions about to approach the problem!
+
+For first-time contributors or those who want to start with a small task, [check out the list of good first issues](https://github.com/processing/p5.js-web-editor/labels/good%20first%20issue), or [issues that need documentation of steps to reproduce](https://github.com/processing/p5.js-web-editor/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+steps+to+reproduce%22). It's okay to not know how to fix an issue—feel free to ask questions about to approach the problem!
### Good Medium Issues
+
If you're looking for a bigger project to take on, look through the issues tagged [good medium issue](https://github.com/processing/p5.js-web-editor/labels/good%20medium%20issue). These issues are self-contained projects that may take longer to work on, but are great if you're looking to get more deeply involved in contributing!
-### Awaiting Maintainer Approval
-All new issues opened on the p5.js editor repository will automatically have the 'Awaiting Maintainer Approval' label. This means that the issue needs review or confirmation from a maintainer before moving forward.
+### Awaiting Maintainer Approval
+
+All new issues opened on the p5.js editor repository will automatically have the 'Awaiting Maintainer Approval' label. This means that the issue needs review or confirmation from a maintainer before moving forward.
+
+If you see an issue with this label, it's best to hold off on development until it's been approved and has the 'Ready for Work' label.
-If you see an issue with this label, it's best to hold off on development until it's been approved and has the 'Ready for Work' label.
+### Ready for Work
-### Ready for Work
-This label means the issue has been reviewed and is ready to be picked up! If it's not assigned to anyone yet, you can leave a comment expressing your interest and asked to be assigned.
+This label means the issue has been reviewed and is ready to be picked up! If it's not assigned to anyone yet, you can leave a comment expressing your interest and asked to be assigned.
If you see an issue that does not have this label but you feel that it might be ready for development, feel free to comment on it!
### Help Wanted
-These issues need additional input, ideas, or code contributions from the community. If you're looking to get involved, this is also a great place to start.
+These issues need additional input, ideas, or code contributions from the community. If you're looking to get involved, this is also a great place to start.
diff --git a/contributor_docs/public_api.md b/contributor_docs/public_api.md
index 5d035445f3..b9d370453e 100644
--- a/contributor_docs/public_api.md
+++ b/contributor_docs/public_api.md
@@ -8,8 +8,7 @@ Access to the API is available via a Personal Access Token, linked to an existin
When contacting the API, the username and token must be sent with every request using basic auth.
-This involved sending the base64 encoded `${username}:${personalAccessToken}` in the `Authorization` header. For example:
- `Authorization: Basic cDU6YWJjMTIzYWJj`
+This involved sending the base64 encoded `${username}:${personalAccessToken}` in the `Authorization` header. For example: `Authorization: Basic cDU6YWJjMTIzYWJj`
# API Access
@@ -22,7 +21,7 @@ The API is versioned and this version is indicated in the root URL path e.g. ver
You must provide the version number when accessing the API.
| Version | Release date |
-|---------|--------------|
+| ------- | ------------ |
| v1 | Unreleased |
# Models
@@ -43,12 +42,11 @@ UI_ACCESS_TOKEN_ENABLED=true
## Sketch
-| Name | Type | Description |
-|-------|-------------------|--------------------------------------------------------------------------------------|
-| name | String | The sketch’s title |
+| Name | Type | Description |
+| --- | --- | --- |
+| name | String | The sketch’s title |
| files | DirectoryContents | The files and directories in this sketch. See `DirectoryContents` for the structure. |
-| slug | String | A path that can be used to access the sketch |
-
+| slug | String | A path that can be used to access the sketch |
{
"id": String, // opaque ID
@@ -67,7 +65,6 @@ UI_ACCESS_TOKEN_ENABLED=true
A map of filenames to `File` or `Directory`. The key of each item is used as the filename. Using a map ensures that filenames are unique in the directory.
-
{
[String]: File | Directory
}
@@ -83,7 +80,7 @@ A map of filenames to `File` or `Directory`. The key of each item is used as the
This file is editable in the Editor UI and stored in the Editor's database.
| Name | Type | Description |
-|---------|--------------|--------------------------------------------|
+| ------- | ------------ | ------------------------------------------ |
| content | UTF-8 String | The contents of the file as a UTF-8 string |
{
@@ -94,9 +91,8 @@ This file is editable in the Editor UI and stored in the Editor's database.
This file is hosted elsewhere on the Internet. It appears in the Editor's listing and can be referenced using a proxy URL in the Editor.
-
| Name | Type | Description |
-|------|------|-------------------------------------------------|
+| ---- | ---- | ----------------------------------------------- |
| url | URL | A valid URL pointing to a file hosted elsewhere |
{
@@ -110,7 +106,7 @@ A `File` is either a `DirectFile` or `ReferencedFile`. The API supports both eve
## Directory
| Name | Type | Description |
-|-------|-------------------|---------------------------------|
+| ----- | ----------------- | ------------------------------- |
| files | DirectoryContents | A map of the directory contents |
{
@@ -128,9 +124,11 @@ List a user’s sketches.
This will not return the files within the sketch, just the sketch metadata.
### Request format
+
No body.
### Response format
+
{
"sketches": Array
}
@@ -138,7 +136,7 @@ No body.
### Example
GET /p5/sketches
-
+
{
"sketches": [
{ "id": "H1PLJg8_", "name": "My Lovely Sketch" },
@@ -146,7 +144,6 @@ No body.
]
}
-
## `POST /:user/sketches`
Create a new sketch.
@@ -154,9 +151,11 @@ Create a new sketch.
A sketch must contain at least one file with the `.html` extension. If none is provided in the payload, a default `index.html` and linked `style.css` file will be created automatically.
### Request format
+
See `Sketch` in Models above.
### Response format
+
{
"id": String
}
@@ -164,7 +163,7 @@ See `Sketch` in Models above.
### Example
POST /p5/sketches
-
+
{
"name": "My Lovely Sketch",
"files": {
@@ -175,9 +174,8 @@ See `Sketch` in Models above.
`files` can be nested to represent a folder structure. For example, this will create an empty “data” directory in the sketch:
-
POST /p5/sketches
-
+
{
"name": "My Lovely Sketch 2",
"files": [
@@ -195,16 +193,15 @@ See `Sketch` in Models above.
### Responses
-| HTTP code | Body |
-|--------------------------|-------------------------------------------------------------------|
-| 201 Created | id of sketch |
+| HTTP code | Body |
+| --- | --- |
+| 201 Created | id of sketch |
| 422 Unprocessable Entity | file validation failed, unsupported filetype, slug already exists |
-
### Examples
201 CREATED
-
+
{
"id": "Ckhf0APpg"
}
@@ -214,9 +211,11 @@ See `Sketch` in Models above.
Delete a sketch and all its associated files.
### Request format
+
No body
### Response format
+
No body
### Example
@@ -226,8 +225,6 @@ No body
### Responses
| HTTP code | Description |
-|---------------|-------------------------|
+| ------------- | ----------------------- |
| 200 OK | Sketch has been deleted |
| 404 Not Found | Sketch does not exist |
-
-
diff --git a/contributor_docs/public_api_proposed.md b/contributor_docs/public_api_proposed.md
index defaa9ce3e..292782b95a 100644
--- a/contributor_docs/public_api_proposed.md
+++ b/contributor_docs/public_api_proposed.md
@@ -1,6 +1,6 @@
# Proposed Public API extensions
-This describes proposed extensions to the Public API. None of these extensions are confirmed, but they are recorded here for reference and discussion.
+This describes proposed extensions to the Public API. None of these extensions are confirmed, but they are recorded here for reference and discussion.
Refer to [Public API](./public_api.md) for the current version of the API.
@@ -22,15 +22,17 @@ Refer to [Public API](./public_api.md) for the current version of the API.
Fetch a sketch.
### Request format
+
No body.
### Response format
+
Returns `Sketch`.
### Example
GET /p5/sketches/Ckhf0APpg
-
+
{
"name": "Another title",
"slug": "example-1",
@@ -43,25 +45,26 @@ Returns `Sketch`.
### Responses
| HTTP code | Description |
-|---------------|------------------------------|
+| ------------- | ---------------------------- |
| 200 OK | Returns ID of created sketch |
| 404 Not Found | Sketch does not exist |
-
## `PUT /:user/sketches/:id`
Replace the sketch with an entirely new one, maintaining the same ID. Any existing files will be deleted before the new ones are created.
### Request format
+
See `Sketch` in Models above.
### Response format
+
No body.
### Example
PUT /p5/sketches/Ckhf0APpg
-
+
{
"name": "Another title",
"files": {
@@ -73,12 +76,11 @@ No body.
### Responses
| HTTP code | Description |
-|--------------------------|----------------------------------------------|
+| ------------------------ | -------------------------------------------- |
| 200 OK | |
| 404 Not Found | Sketch does not exist |
| 422 Unprocessable Entity | file validation failed, unsupported filetype |
-
## `PATCH /:user/sketches/:id`
Update the sketch whilst maintaining existing data:
@@ -87,25 +89,29 @@ Update the sketch whilst maintaining existing data:
- Update file’s contents or add new files
### Request format
+
See `Sketch` in Models above.
### Response format
+
No body.
### Example
+
Change the name of the sketch
PATCH /p5/sketches/Ckhf0APpg
-
+
{
"name": "My Very Lovely Sketch"
}
### Example
+
Add a file to a sketch, or replace an existing file.
PATCH /p5/sketches/Ckhf0APpg
-
+
{
"files": {
"index.html": { "content": "My new content" }, // contents will be replaced
@@ -116,12 +122,11 @@ Add a file to a sketch, or replace an existing file.
### Responses
| HTTP code | Description |
-|--------------------------|---------------------------|
+| ------------------------ | ------------------------- |
| 200 OK | Change were made |
| 404 Not Found | Sketch does not exist |
| 422 Unprocessable Entity | Validation error of files |
-
## Operating on files within a sketch
Files within a sketch can be individually accessed via their `path` e.g. `data/something.json`.
@@ -131,41 +136,44 @@ Files within a sketch can be individually accessed via their `path` e.g. `data/s
Fetch the contents of a file.
### Request format
+
No body.
### Response format
+
Returns file contents.
### Example
GET /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
Content-Type: application/javascript
-
+
var uselessness = 12;
### Responses
-| HTTP code | Description |
-|---------------|--------------------------------------------------------------------------|
-| 200 OK | Returns body of the file with the content-type set by the file extension |
-| 404 Not Found | File does not exist |
-
+| HTTP code | Description |
+| --- | --- |
+| 200 OK | Returns body of the file with the content-type set by the file extension |
+| 404 Not Found | File does not exist |
-## `PATCH /:user/sketches/:id/files/:path`
+## `PATCH /:user/sketches/:id/files/:path`
Update the name or contents of a file or directory.
### Request format
+
See `File` and `Directory` above.
### Response format
+
No body.
### Example: Change the file name
PATCH /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
{
"name": "new-name.js"
}
@@ -175,7 +183,7 @@ File `assets/something.js` → `assets/new-name.js`.
### Example: Change file contents
PATCH /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
{
"content": "var answer = 24;"
}
@@ -198,20 +206,21 @@ Files are added to the directory, in addition to what is there.
### Responses
| HTTP code | Description |
-|--------------------------|----------------------------|
+| ------------------------ | -------------------------- |
| 200 OK | The changes have been made |
| 404 Not Found | Path does not exist |
| 422 Unprocessable Entity | Validation error of files |
-
## `DELETE /:user/:sketches/files/:path`
Delete a file/directory, and its contents.
### Request format
+
No body.
### Response format
+
No body.
### Example: Delete file
@@ -222,7 +231,6 @@ No body.
### Example: Delete directory
-
DELETE /p5/sketches/Ckhf0APpg/files/assets
The `assets` directory and everything within it, will be removed.
@@ -230,9 +238,6 @@ The `assets` directory and everything within it, will be removed.
### Responses
| HTTP code | Description |
-|---------------|---------------------------|
+| ------------- | ------------------------- |
| 200 OK | The item has been deleted |
| 404 Not Found | Path does not exist |
-
-
-
diff --git a/contributor_docs/release.md b/contributor_docs/release.md
index 0ede9dab33..b2992eb063 100644
--- a/contributor_docs/release.md
+++ b/contributor_docs/release.md
@@ -3,17 +3,20 @@
A guide for deploying a release to the production environment.
## Background
+
This project's release guide is based on:
-* [git-flow](https://nvie.com/posts/a-successful-git-branching-model/)
-* [Semantic Versioning (semver)](https://semver.org/)
-* [npm-version](https://docs.npmjs.com/cli/version)
-* [Let's stop saying Master/Slave](https://medium.com/@mikebroberts/let-s-stop-saying-master-slave-10f1d1bf34df)
+
+- [git-flow](https://nvie.com/posts/a-successful-git-branching-model/)
+- [Semantic Versioning (semver)](https://semver.org/)
+- [npm-version](https://docs.npmjs.com/cli/version)
+- [Let's stop saying Master/Slave](https://medium.com/@mikebroberts/let-s-stop-saying-master-slave-10f1d1bf34df)
## Steps
+
1. `$ git checkout develop`
2. `$ git pull origin develop`
3. `$ git checkout -b release-`
-4. Do all of the release branch testing necessary. This could be as simple as running `npm test:ci`, or it could take user testing over a few days.
+4. Do all of the release branch testing necessary. This could be as simple as running `npm test:ci`, or it could take user testing over a few days.
5. `$ npm version ` (see [npm-version](https://docs.npmjs.com/cli/version) for valid values of ).
6. `$ git checkout release`
7. `$ git merge --no-ff release-`
@@ -25,8 +28,8 @@ This project's release guide is based on:
Travis CI will automatically deploy the release to production, as well as push a production tagged Docker image to DockerHub.
-
## Steps for a Patch Release
+
Sometimes you might need to push a release for an isolated and small bug fix without what's currently been merged into the `develop` branch. The steps for pushing a Patch Release are similar to a standard Release, except you work with the `release` branch as opposed to `develop`.
1. `$ git checkout release`
diff --git a/contributor_docs/s3_configuration.md b/contributor_docs/s3_configuration.md
index be5972a953..2398b88b0e 100644
--- a/contributor_docs/s3_configuration.md
+++ b/contributor_docs/s3_configuration.md
@@ -1,6 +1,8 @@
# S3 Bucket Configuration
+
1. [Create an S3 bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html), with any name.
2. Navigate to the S3 bucket permissions and add the following CORS policy. This is for development only, as it allows CORS from any origin.
+
```
[
{
@@ -21,7 +23,9 @@
}
]
```
+
3. In permissions, add the following bucket policy. Change "YOUR_BUCKET_NAME" to reflect name of the S3 bucket.
+
```
{
"Version": "2008-10-17",
@@ -39,10 +43,12 @@
]
}
```
+
4. Uncheck "Block all public access" under "Block public access (bucket settings)".
5. Under "Object Ownership", check "ACLs enabled" and set "Object Ownership" to "Object writer"
6. Locate your AWS key and Secret Key. You can find this in the top AWS navigation under your name -> Security Credentials.
7. Update the following lines to your .env file:
+
```
AWS_ACCESS_KEY={AWS_ACCESS_KEY}
AWS_REGION={S3_BUCKET_REGION}
@@ -50,14 +56,9 @@ AWS_SECRET_KEY={AWS_SECRET_KEY}
S3_BUCKET={S3_BUCKET_NAME}
```
-If your S3 bucket is in the US East (N Virginia) region (us-east-1), you'll
-need to set a custom URL base for it, because it does not follow the standard
-naming pattern as the rest of the regions. Instead, add the following to your
-environment/.env file, changing `BUCKET_NAME` to your bucket name. This is necessary because this override is currently treated as the full path to the bucket rather than as a proper base URL:
-`S3_BUCKET_URL_BASE=https://s3.amazonaws.com/{BUCKET_NAME}/`
+If your S3 bucket is in the US East (N Virginia) region (us-east-1), you'll need to set a custom URL base for it, because it does not follow the standard naming pattern as the rest of the regions. Instead, add the following to your environment/.env file, changing `BUCKET_NAME` to your bucket name. This is necessary because this override is currently treated as the full path to the bucket rather than as a proper base URL: `S3_BUCKET_URL_BASE=https://s3.amazonaws.com/{BUCKET_NAME}/`
-If you've configured your S3 bucket and DNS records to use a custom domain
-name, you can also set it using this variable. I.e.:
+If you've configured your S3 bucket and DNS records to use a custom domain name, you can also set it using this variable. I.e.:
`S3_BUCKET_URL_BASE=https://files.mydomain.com`
diff --git a/contributor_docs/testing.md b/contributor_docs/testing.md
index 4daae3628b..860ff4c76e 100644
--- a/contributor_docs/testing.md
+++ b/contributor_docs/testing.md
@@ -1,13 +1,15 @@
# Testing
+
This guide explains the tools and methods used to test the p5.js Editor. It focuses mainly on the client-side, but some of it applies to the server tests too.
For a basic overview of testing React Apps, [you can read what the React developers have to say about it](https://reactjs.org/docs/testing.html). There are both unit tests and integration tests.
We are testing React components by rendering the component trees in a simplified test environment and making assertions on what gets rendered and what functions get called.
-Many files still don't have tests, so **if you're a new contributor, this is a great place to start!**
+Many files still don't have tests, so **if you're a new contributor, this is a great place to start!**
## Table of Contents
+
- [Testing](#testing)
- [Table of Contents](#table-of-contents)
- [Testing Dependencies](#testing-dependencies)
@@ -37,47 +39,53 @@ Many files still don't have tests, so **if you're a new contributor, this is a g
- [How to Handle API Calls in Tests](#how-to-handle-api-calls-in-tests)
- [Internationalization](#internationalization)
- [Useful Terminology](#useful-terminology)
- - [Test double](#test-double)
- - [Stub](#stub)
- - [Fake](#fake)
- - [Mock](#mock)
- - [Partial mock](#partial-mock)
- - [Spy](#spy)
+ - [Test double](#test-double)
+ - [Stub](#stub)
+ - [Fake](#fake)
+ - [Mock](#mock)
+ - [Partial mock](#partial-mock)
+ - [Spy](#spy)
- [Tips](#tips)
- [Files to Start With](#files-to-start-with)
- [More Resources](#more-resources)
- [References](#references)
- [Special Thanks](#special-thanks)
-
## Testing Dependencies
+
1. [Jest](https://jestjs.io/)
2. [react-testing-library](https://testing-library.com/docs/react-testing-library/intro/)
3. [redux-mock-store](https://github.com/reduxjs/redux-mock-store)
4. [msw](https://github.com/mswjs/msw)
## Useful Testing Commands
+
Run the whole test suite
+
```
$ npm run test
```
------
+---
+
+[Run tests that match the pattern](https://stackoverflow.com/questions/28725955/how-do-i-test-a-single-file-using-jest/28775887). Useful if you're writing one specific test and want to only run that one.
-[Run tests that match the pattern](https://stackoverflow.com/questions/28725955/how-do-i-test-a-single-file-using-jest/28775887). Useful if you're writing one specific test and want to only run that one.
```
$ npm run test -- someFileName
```
------
+---
+
Run the tests but update the snapshot if they don't match.
```
$ npm run test -- -u
```
-----
+---
+
For example, if you wanted to run just the SketchList test but also update the snapshot, you could do:
+
```
$ npm run test -- Sketchlist.test.js -u
```
@@ -87,23 +95,28 @@ Find more commands in the [Jest documentation](https://jestjs.io/docs/cli).
## Testing Methods
### Unit Tests
+
Unit tests test the functionality of a single component and nothing else. They provide lots of feedback on the specific component you're testing, with the cost of high [redundant coverage](https://github.com/testdouble/contributing-tests/wiki/Redundant-Coverage) and more time spent refactoring tests when components get rewritten. **Not every file needs a unit test.** Unit tests are most important for components that are either:
+
1. User facing (like a text input field or a user form component)
2. Used across multiple components like a reusable dropdown menu or reusable table element
In both of these cases, the component being tested is not merely an implementation detail. Thus, the unit tests need to test the error cases that could occur to ensure that the component is robust. For example, for a user-facing input field that should only take positive numbers, a unit test would want to cover what happens when users enter negative numbers or letters.
### Integration Tests
+
Integration tests test multiple parts of the application together. A small example is rendering a parent component in order to test the interactions between children components. Generally, they validate how multiple units of your application work together. `Jest` uses `jsdom` under the hood to emulate common browser APIs with less overhead than automation like a headless browser, and its mocking tools can stub out external API calls. We use integration tests to maximize coverage and to make sure all the pieces play nice together. We want our integration tests to cover the testing of components that don't have unit tests because they're only used in one place and are merely an implementation detail. The integration tests can test the expected user flows, while we expect the unit tests to have tested the error cases more rigorously.
See [this great article on CSS tricks](https://css-tricks.com/react-integration-testing-greater-coverage-fewer-tests/) about integration tests for more information about this.
-To reiterate, integration tests are used to maximize coverage on individual components that are only used once. Unit tests are used to test the robustness of user-facing components and reusable components.
+To reiterate, integration tests are used to maximize coverage on individual components that are only used once. Unit tests are used to test the robustness of user-facing components and reusable components.
### Snapshot Testing
+
You can save a snapshot of what the HTML looks like when the component is rendered. It doesn't hurt to add them to your tests, but they can be brittle. When you change the HTML of a component, they need to be updated.
## Why Write Tests
+
- Many of the existing components don't have tests yet, and you could write one :-) You can find a few suggested files to start with [in this section](#Files-to-start-with).
- They are a good place to start if you're learning the codebase.
- It benefits all future contributors by allowing them to check their changes for errors.
@@ -114,76 +127,86 @@ You can save a snapshot of what the HTML looks like when the component is render
## When to Run Tests
-When you `git push` your code, the tests will be run automatically for you. Tests will also be run when you make a PR and if you fail any tests it blocks the merge.
+When you `git push` your code, the tests will be run automatically for you. Tests will also be run when you make a PR and if you fail any tests it blocks the merge.
When you modify an existing component, it's a good idea to run the test suite to make sure it didn't make any changes that break the rest of the application. If they did break some tests, you would either have to fix a bug component or update the tests to match the new expected functionality.
## Writing a Test
+
Want to get started writing a test for a new file or an existing file, but not sure how?
### For React Components
+
1. Make a new file directly adjacent to your file. For example, if `example.jsx` is `src/components/example.jsx`, then you would make a file called `example.[unit|integration].test.jsx` at `src/components/example.[unit|integration].test.jsx`
2. Check if the component uses the `connect` HOC or the `useState` or `useDispatch` hooks from `react-redux`.
3. If it is, see the [redux section](#Testing-Redux) below on how to write tests for that.
4. If it's not, see the [section below on writing tests for unconnected components](#Testing-plain-components).
-5. "Arrange, Act, Assert:" In other words, *arrange* the setup for the test, *act* out whatever the subject's supposed to do, and *assert* on the results. [[3]](#References)
+5. "Arrange, Act, Assert:" In other words, _arrange_ the setup for the test, _act_ out whatever the subject's supposed to do, and _assert_ on the results. [[3]](#References)
### For Redux Action Creators or Reducers
+
See the [redux section](#Testing-Redux) below :)
### For Utility Files
+
You might still want to write tests for non-component or non-redux files, such as modules with utility functions, especially ones that are used in many places across your application. What gets tested in this case depends a lot on the module itself, but generally, you would import the module and test the functions within it.
### Querying for Elements
+
Read about the recommended order of priority for queries in [the testing library docs](https://testing-library.com/docs/guide-which-query/#priority). We recommend using roles and text, or labels. You can use this [handy extension called Testing Playground](https://chrome.google.com/webstore/detail/testing-playground/hejbmebodbijjdhflfknehhcgaklhano/related) to do this.
### File Structure
-Each test should have a top-level ``describe`` block to group related blocks together, with the name of the component under test.
-*Example.test.js*
+Each test should have a top-level `describe` block to group related blocks together, with the name of the component under test.
+
+_Example.test.js_
```js
import Example from './Example';
-describe(' ', () => {
+describe(' ', () => {
it('creates a new example', () => {
//your tests here
- });
+ });
});
-
```
### Consistency Across Tests
+
> "Teams that adopt a rigid and consistent structure to each test tend to more readily understand each test because every deviation from the norm can be trusted to be meaningful and somehow specific to the nature of the subject."
-- We want to default to using meaningless test data stored in the redux-test-stores folder.
+
+- We want to default to using meaningless test data stored in the redux-test-stores folder.
- Be sure to follow the [folder structure](#Folder-structure)
- Follow the rendering guidelines set up for the components in this [Writing a Test](#Writing-a-test) section.
-
### Troubleshooting
+
1. If you are having network errors like ERRCONNECTED or something like `Cannot read property 'then' of undefined` as a result of an `apiClient` function, then please view the [How to handle API calls in tests](#How-to-handle-API-calls-in-tests) section.
2. In some cases, window functions are not defined because the client tests run in the context of `jsdom` and not a real browser. In this case, you want to define the function as a no op. [See this StackOverflow post for more information.](https://stackoverflow.com/questions/57311971/error-not-implemented-window-scrollto-how-do-we-remove-this-error-from-jest-t)
- ```js
- const noop = () => {};
- Object.defineProperty(window, 'focus', { value: noop, writable: true });
- ```
+
+ ```js
+ const noop = () => {};
+ Object.defineProperty(window, 'focus', { value: noop, writable: true });
+ ```
3. If you see a `range(...).getBoundingClientRect is not a function` error, this is probably related to the CodeMirror code editor, and there is a fix in [this GitHub Issues post](https://github.com/jsdom/jsdom/issues/3002).
## What to Test
+
For any type of component, you might want to consider testing:
+
- The text or divs that you expect to be on the page are there. You can use [Queries](https://testing-library.com/docs/queries/about/) for this. Assertions should make use of the toBeInTheDocument() matcher when asserting that an element exists:
- ```
- expect(screen.getByText('Hello World')).toBeInTheDocument();
- expect(screen.queryByText('Does not exist')).not.toBeInTheDocument();
- ```
+ ```
+ expect(screen.getByText('Hello World')).toBeInTheDocument();
+ expect(screen.queryByText('Does not exist')).not.toBeInTheDocument();
+ ```
- If it's an integration test, you could consider testing the "happy path" flow. For example, in a login form, you would test how a user might enter their username and password and then enter that information.
- If it's a unit test, you could test possible error cases to ensure that the module being tested is robust and resistant to user or developer error.
- Generally, you want to focus your testing on "user input" -> "expected output" instead of making sure the middle steps work as you would expect. This might mean that you don't need to check that the state changes or class-specific methods occur. This is so that if some of the small details in the implementation of the component change in the future, the tests can remain the same.
- More details on testing behaviour in the component-specific sections
->Only test the behaviours you know you need to care about. For example, if the desired behaviour of a particular edge case doesn't truly matter yet or isn't fully understood, don't write a test for it yet. Doing so would restrict the freedom to refactor the implementation. Additionally, it will send the signal to future readers that this behaviour is critical, when it very well might not be. [[3]](#References)
+> Only test the behaviours you know you need to care about. For example, if the desired behaviour of a particular edge case doesn't truly matter yet or isn't fully understood, don't write a test for it yet. Doing so would restrict the freedom to refactor the implementation. Additionally, it will send the signal to future readers that this behaviour is critical, when it very well might not be. [[3]](#References)
**Don't test unreachable edge cases:** You would have to add code to your original implementation to guard against these cases. The future-proofing and the added cost to the codebase "is generally not worth their perceived potential benefits" [[3]](#References)
@@ -192,15 +215,16 @@ For any type of component, you might want to consider testing:
## Files to be Aware of
### Folder structure
-All tests are directly adjacent to the files that they are testing, as described in the [React docs](https://reactjs.org/docs/faq-structure.html#grouping-by-file-type). For example, if you're testing ``examplefolder/Sketchlist.jsx``, the test would be in ``examplefolder/Sketchlist.unit.test.jsx``. This is so that the tests are as close as possible to the files. This also means that any snapshot files will be stored in the same folder, such as ``examplefolder/__snapshots__/Sketchlist.unit.test.jsx.snap``
-Integration tests should be adjacent to the components they're testing. They should be called ``ComponentName.integration.test.jsx``. Unit tests should be called ``ComponentName.unit.test.jsx``.
+All tests are directly adjacent to the files that they are testing, as described in the [React docs](https://reactjs.org/docs/faq-structure.html#grouping-by-file-type). For example, if you're testing `examplefolder/Sketchlist.jsx`, the test would be in `examplefolder/Sketchlist.unit.test.jsx`. This is so that the tests are as close as possible to the files. This also means that any snapshot files will be stored in the same folder, such as `examplefolder/__snapshots__/Sketchlist.unit.test.jsx.snap`
+
+Integration tests should be adjacent to the components they're testing. They should be called `ComponentName.integration.test.jsx`. Unit tests should be called `ComponentName.unit.test.jsx`.
-Manual mocks are in ``__mocks__`` folders are adjacent to the modules that they're mocking.
+Manual mocks are in `__mocks__` folders are adjacent to the modules that they're mocking.
-Note: Even if you mock a user module in a ``__mocks__`` folder, user modules have to be explictly mocked in the test too, with ``Jest.mock("path_to_module")``
+Note: Even if you mock a user module in a `__mocks__` folder, user modules have to be explictly mocked in the test too, with `Jest.mock("path_to_module")`
-Node modules are mocked in the ``__mocks__`` folder at the root of the client folder, which also includes any mocks that are needed for user modules at the root of the folder directory.
+Node modules are mocked in the `__mocks__` folder at the root of the client folder, which also includes any mocks that are needed for user modules at the root of the folder directory.
```
.
@@ -213,17 +237,17 @@ Node modules are mocked in the ``__mocks__`` folder at the root of the client fo
│ │ ├── actions
│ │ │ ├── __mocks__
│ │ │ │ ├── projects.js
- │ │ │ │ └─ ... other action creator mocks
- │ │ │ ├── projects.js
- │ │ │ ├── projects.unit.test.js
- │ │ │ └─ ... other action creator files
- │ │ ├── components
+ │ │ │ │ └─ ... other action creator mocks
+ │ │ │ ├── projects.js
+ │ │ │ ├── projects.unit.test.js
+ │ │ │ └─ ... other action creator files
+ │ │ ├── components
│ │ │ ├── __snapshots__
- │ │ │ │ ├── SketchList.unit.test.jsx.snap
- │ │ │ │ └─ ... other snapshots
- │ │ │ ├── SketchList.jsx
- │ │ │ ├── SketchList.unit.test.jsx
- │ │ │ └── ... and more component files
+ │ │ │ │ ├── SketchList.unit.test.jsx.snap
+ │ │ │ │ └─ ... other snapshots
+ │ │ │ ├── SketchList.jsx
+ │ │ │ ├── SketchList.unit.test.jsx
+ │ │ │ └── ... and more component files
│ │ ├── reducers
│ │ │ ├── assets.unit.test.js
│ │ │ ├── assets.js
@@ -240,6 +264,7 @@ Node modules are mocked in the ``__mocks__`` folder at the root of the client fo
```
### `test-utils.js`
+
This file overwrites the default `react-testing-library`'s render function so that components rendered through the new render function have access `i18next` and `redux`. It exports the rest of `react-testing-library` as is.
It exports a render function with a i18n wrapper as `render` and a render function with a wrapper for both redux and i18n as `reduxRender`.
@@ -247,15 +272,18 @@ It exports a render function with a i18n wrapper as `render` and a render functi
Thus, in your component test files, instead of calling `import {functions you want} from 'react-testing-libary'` importing `react-testing-library` might look something like this:
If your component only needs i18n and not redux:
+
```js
import { render, fireEvent, screen, waitFor } from '../../../test-utils';
```
+
If your component needs i18n and redux:
+
```js
import { reduxRender, fireEvent, screen, waitFor } from '../../../test-utils';
```
-`redux` and `i18next` are made accessible by placing wrappers around the component. We can do this by replacing the render function with one that renders the requested component WITH an additional wrapper added around it.
+`redux` and `i18next` are made accessible by placing wrappers around the component. We can do this by replacing the render function with one that renders the requested component WITH an additional wrapper added around it.
For example, the exported render function that adds a wrapper for both redux and i18n looks roughly like this:
@@ -271,9 +299,7 @@ function reduxRender(
function Wrapper({ children }) {
return (
-
- {children}
-
+ {children}
);
}
@@ -288,14 +314,16 @@ Then, if you want to call the render function with the wrapper with the `redux`
reduxRender( , { store });
```
-
### `testData`
-This folder contains the test data that you can use in your tests, including initial redux states that you can provide to the `reduxRender` function when testing. For example, if you want to render the `SketchList` component with a username of `happydog` and some sample sketches, `testData/testReduxStore.js` contains a definition for that state that you can import and provide to the renderer. The folder also contains test data that you can use for `msw` server so that the server returns json with the correct format and fields.
+
+This folder contains the test data that you can use in your tests, including initial redux states that you can provide to the `reduxRender` function when testing. For example, if you want to render the `SketchList` component with a username of `happydog` and some sample sketches, `testData/testReduxStore.js` contains a definition for that state that you can import and provide to the renderer. The folder also contains test data that you can use for `msw` server so that the server returns json with the correct format and fields.
## Testing Plain Components
+
If it doesn't contain `connect(mapStateToProps, mapDispatchToProps)(ComponentName)` or use hooks like `useSelector`, then your component is not directly using Redux and testing your component will be simpler and might look something like the code below. Notably, we describe the component being tested as the [subject under test](http://xunitpatterns.com/SUT.html) by creating a function called `subject` that renders the component with the subject dependencies (the props) that are defined in the same scope. They're declared with `let` so that they can be overwritten in a nested `describe`block that tests different dependencies. This keeps the subject function consistent between test suites and explicitly declares variables that can affect the outcome of the test.
-*MyComponent.test.jsx*
+_MyComponent.test.jsx_
+
```js
import React from 'react';
import { act } from 'react-dom/test-utils';
@@ -303,7 +331,6 @@ import { fireEvent, render, screen } from '../../../../test-utils';
import MyComponent from './MyComponent';
describe(' ', () => {
-
let subjectProps = {
t: jest.fn(),
fontSize: 12,
@@ -318,24 +345,22 @@ describe(' ', () => {
//reset the mocks in subjectProps
jest.clearAllMocks();
});
-
+
it('I am the test description', () => {
// render the component
act(() => {
subject();
});
-
+
/* Tests go here!
- * You can access mock functions from subjectProps.
+ * You can access mock functions from subjectProps.
* For example, subjectProps.setFontSize
*/
-
});
describe('test with a different prop', () => {
-
beforeAll(() => {
- subjectProps = {...subjectProps, fontSize: 14}
+ subjectProps = { ...subjectProps, fontSize: 14 };
});
it("here's that test with a different prop", () => {
@@ -345,23 +370,24 @@ describe(' ', () => {
//test here
});
});
-
});
```
Consider what you want to test. Some examples are:
-- User input results in the [expected function being called with the expected argument](https://jestjs.io/docs/mock-functions).
+
+- User input results in the [expected function being called with the expected argument](https://jestjs.io/docs/mock-functions).
```js
act(() => {
fireEvent.click(screen.getByLabelText('Username'));
});
expect(yourMockFunction).toHaveBeenCalledTimes(1);
expect(yourMockFunction.mock.calls[0][0]).toBe(argument);
- ```
+ ```
## Testing Redux
When testing redux, the general guidance [[1]](#References) seems to suggest splitting up testing between:
+
1. action creators
2. reducers
3. connected components
@@ -370,32 +396,38 @@ Testing reducers and action creators is covered pretty well in [Redux's document
### Connected Components
-Although it's possible to export the components as unconnected components for testing (and in this case, you would just manually pass in the props that redux provides), the codebase is being migrated to use hooks, and in this case, that approach no longer works. It also doesn't work if we render components that have connected subcomponents. Thus, for consistency, we suggest testing all redux components while they're connected to redux. We can do this with ``redux-mock-store``.
+Although it's possible to export the components as unconnected components for testing (and in this case, you would just manually pass in the props that redux provides), the codebase is being migrated to use hooks, and in this case, that approach no longer works. It also doesn't work if we render components that have connected subcomponents. Thus, for consistency, we suggest testing all redux components while they're connected to redux. We can do this with `redux-mock-store`.
This works like so:
-1. Import the reduxRender function from ``client/test_utils.js``
-2. Configure the mock store.
+
+1. Import the reduxRender function from `client/test_utils.js`
+2. Configure the mock store.
+
```js
import configureStore from 'redux-mock-store';
import thunk from 'redux-thunk';
-
const mockStore = configureStore([thunk]);
```
-3. Create a mock store. There's an initial state that you can import from ``client/testData/testReduxStore.js``
+
+3. Create a mock store. There's an initial state that you can import from `client/testData/testReduxStore.js`
+
```js
store = mockStore(initialTestState);
```
+
3. Render the component with reduxRender and the store that you just created.
+
```js
-reduxRender( , {store});
+reduxRender( , { store });
```
+
4. Test things! You may need to use jest to mock certain functions if the component is making API calls.
Altogether, it might look something like this.
+_MyReduxComponent.test.jsx_
-*MyReduxComponent.test.jsx*
```js
import React from 'react';
import configureStore from 'redux-mock-store';
@@ -410,37 +442,35 @@ describe(' ', () => {
const store = mockStore(initialTestState);
let subjectProps = {
- sampleprop: "foo"
+ sampleprop: 'foo'
};
const subject = () => {
- reduxRender( , {store});
+ reduxRender( , { store });
};
afterEach(() => {
//clear the mock store too
store.clearActions();
});
-
+
it('I am the test description', () => {
// render the component
act(() => {
subject();
});
-
+
/* Tests go here!
- * You can access mock functions from subjectProps.
+ * You can access mock functions from subjectProps.
* For example, subjectProps.setFontSize
*/
-
});
describe('test with a different prop', () => {
-
beforeAll(() => {
- subjectProps = {...subjectProps, fontSize: 14}
+ subjectProps = { ...subjectProps, fontSize: 14 };
});
-
+
it("here's that test with a different prop", () => {
act(() => {
subject();
@@ -448,23 +478,23 @@ describe(' ', () => {
//test here
});
});
-
});
```
Some things to consider testing:
+
- User input results in the expected redux action.
- ```js
- act(() => {
- component = reduxRender( , {store});
- });
- act(() => {
- fireEvent.click(screen.getByTestId('toggle-direction-createdAt'));
- });
- const expectedAction = [{ type: 'TOGGLE_DIRECTION', field: 'createdAt' }];
-
- expect(store.getActions()).toEqual(expect.arrayContaining(expectedAction));
- ```
+ ```js
+ act(() => {
+ component = reduxRender( , { store });
+ });
+ act(() => {
+ fireEvent.click(screen.getByTestId('toggle-direction-createdAt'));
+ });
+ const expectedAction = [{ type: 'TOGGLE_DIRECTION', field: 'createdAt' }];
+
+ expect(store.getActions()).toEqual(expect.arrayContaining(expectedAction));
+ ```
## How to Handle API Calls in Tests
@@ -486,36 +516,49 @@ afterAll(() => server.close());
```
If the component makes use of the `formatDate` util, some of the functions in that rely on the `client/i18n.js` file, which also make an AJAX request. This sometimes leads to an `ERRCONNECTED` error on the console, even though your tests pass. You can fix it by adding a mock for that specific i18n file:
+
```js
jest.mock('_path_to_file_/i18n');
```
+
You can see it used in the context of a test [in the SketchList.test.jsx file](../client/modules/IDE/components/SketchList.unit.test.jsx).
## Internationalization
-This project uses i18next for internationalization. If you import the render function with the i18n wrapper from `test_utils.js`, it's set up to use English, so the components will be rendered with English text and you should be able to count on this to test for specific strings.
+This project uses i18next for internationalization. If you import the render function with the i18n wrapper from `test_utils.js`, it's set up to use English, so the components will be rendered with English text and you should be able to count on this to test for specific strings.
## Useful Terminology
+
Thanks [Test Double Wiki](https://github.com/testdouble/contributing-tests/wiki/Test-Double) for the definitions. You might see some of these words used in testing library documentation, so here are short definitions for them.
#### Test double
+
Broadest available term to describe any fake thing used in place of a real thing for a test.
+
#### Stub
+
Any test double that uses a preconfigured response, such always responding with placeholder json to a certain fetch call.
+
#### Fake
+
A test double that provides an alternate implementation of a real thing for the purpose of a test.
+
#### Mock
+
Colloquially can mean any of the above, just used generally for test doubles.
+
#### Partial mock
-Refers to any actual object which has been wrapped or changed to provide artificial responses to
-some methods but not others. Partial mocks are widely considered to be an anti-pattern of test double usage.
+
+Refers to any actual object which has been wrapped or changed to provide artificial responses to some methods but not others. Partial mocks are widely considered to be an anti-pattern of test double usage.
#### Spy
+
Records every invocation made against it and can verify certain interactions took place after the fact.
## Tips
+
1. Make the test fail at least once to make sure it was a meaningful test
-2. "If you or another developer change the component in a way that it changes its behaviour at least one test should fail." - [How to Unit Test in React](https://itnext.io/how-to-unit-test-in-react-72e911e2b8d)
+2. "If you or another developer change the component in a way that it changes its behaviour at least one test should fail." - [How to Unit Test in React](https://itnext.io/how-to-unit-test-in-react-72e911e2b8d)
3. Avoid using numbers or data that seem "special" in your tests. For example, if you were checking the "age" variable in a component is an integer, but checked it as so `expect(person.ageValidator(18)).toBe(true)`, the reader might assume that the number 18 had some significance to the function because it's a significant age. It would be better to have used 1234.
4. Tests should help other developers understand the expected behavior of the component that it's testing
@@ -529,11 +572,13 @@ These files still need tests! If you want to contribute by writing tests, please
- [ ] Unit testing for common components like Button.jsx
## More Resources
+
- [React Testing Library Cheatsheet](https://testing-library.com/docs/react-testing-library/cheatsheet/)
- [React connected component test](https://www.robinwieruch.de/react-connected-component-test)
- https://blog.bitsrc.io/testing-a-redux-hooked-app-a8e9d1609061
## References
+
1. [Best practices for unit testing with a react-redux approach](https://willowtreeapps.com/ideas/best-practices-for-unit-testing-with-a-react-redux-approach)
2. [React testing library example intro](https://testing-library.com/docs/react-testing-library/example-intro/#full-example)
@@ -541,4 +586,5 @@ These files still need tests! If you want to contribute by writing tests, please
3. [Testing Double Wiki (Special thanks to this wiki for being such a comprehensive guide to the history of testing and best practices.)](https://github.com/testdouble/contributing-tests/wiki/Tests%27-Influence-on-Design)
## Special Thanks
+
Thank you to HipsterBrown for helping us out with writing this documentation.
diff --git a/contributor_docs/translations.md b/contributor_docs/translations.md
index c575e7c3ff..536980bac5 100644
--- a/contributor_docs/translations.md
+++ b/contributor_docs/translations.md
@@ -1,58 +1,66 @@
# Translations Guidelines
-Translations are a great way to get started with contributing, and plays a big role in making the p5.js editor and its documentation more accessible.
+Translations are a great way to get started with contributing, and plays a big role in making the p5.js editor and its documentation more accessible.
-Below are some general rules of thumb to keep in mind when contributing translations:
+Below are some general rules of thumb to keep in mind when contributing translations:
+
+## What Can I Translate?
+
+If you're interested in translations, here's how to get started:
-## What Can I Translate?
-If you're interested in translations, here's how to get started:
- Please only translate languages **you speak fluently or natively**.
- At this time, we do not accept machine-generated translations (i.e from Google Translate), as they often lack context or accuracy.
- You can also start with reviewing or improving existing translations in languages you're familiar with as well!
-## How Can I Add Translations in the Codebase?
+## How Can I Add Translations in the Codebase?
-* There is only one file to translate all the texts in any specific language, which is located under the directory, in the respective locale [subdirectory](https://github.com/processing/p5.js-web-editor/tree/develop/translations/locales)
-* The new language code must be added to [client/i18n.js](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/i18n.js#L22)
-* Need to add `TRANSLATIONS_ENABLED=true` to `.env` to activate the dropdown for the languages.
+- There is only one file to translate all the texts in any specific language, which is located under the directory, in the respective locale [subdirectory](https://github.com/processing/p5.js-web-editor/tree/develop/translations/locales)
+- The new language code must be added to [client/i18n.js](https://github.com/processing/p5.js-web-editor/blob/edae248eede21d7ad7702945929efbcdfeb4d9ea/client/i18n.js#L22)
+- Need to add `TRANSLATIONS_ENABLED=true` to `.env` to activate the dropdown for the languages.
#### Language codes
-We use standard [IETF language codes](https://en.wikipedia.org/wiki/IETF_language_tag) to identify languages. In most cases, the code is either two lowercase letters representing a language (`ja` for Japanese) or a language code followed by a hyphen and two uppercase letters for a country (`en-US` for American English).
+
+We use standard [IETF language codes](https://en.wikipedia.org/wiki/IETF_language_tag) to identify languages. In most cases, the code is either two lowercase letters representing a language (`ja` for Japanese) or a language code followed by a hyphen and two uppercase letters for a country (`en-US` for American English).
#### i18n.js
+
In terms of `i18n.js`, you will need to update 4 things:
1. Add the code for your language to the array of `availableLanguages`.
+
```js
const availableLanguages = ['en-US', 'es-419', 'ja', 'newLanguage'];
```
-2. Import the locale for your language from `date-fns/locale`. This is used to translate dates and times.
+2. Import the locale for your language from `date-fns/locale`. This is used to translate dates and times.
+
```js
import { enUS, es, ja, newLanguage } from 'date-fns/locale';
```
3. Associate the locale with the country code by adding it to the map in the `languageKeyToDateLocale` function.
+
```js
export function languageKeyToDateLocale(lang) {
const languageMap = {
'en-US': enUS,
'es-419': es,
- 'ja': ja,
- 'newLanguage': newLanguage
+ ja: ja,
+ newLanguage: newLanguage
};
return languageMap[lang];
}
```
4. Add the name of your language to the map in the `languageKeyToLabel` function. This will determine what is shown in the dropdown menu.
+
```js
export function languageKeyToLabel(lang) {
const languageMap = {
'en-US': 'English',
'es-419': 'Español',
ja: '日本語',
- 'newLanguage': 'New Language Name'
+ newLanguage: 'New Language Name'
};
return languageMap[lang];
}
@@ -60,8 +68,8 @@ export function languageKeyToLabel(lang) {
## Handling Translations Files
-* Every component should introduce its own subset of keys inside a dictionary named after the component.
- For instance: If you want to translate AssetList.jsx you need to introduce the following namespace in translations.json :
+- Every component should introduce its own subset of keys inside a dictionary named after the component. For instance: If you want to translate AssetList.jsx you need to introduce the following namespace in translations.json :
+
```json
"AssetList": {
"Title": "p5.js Web Editor | My assets",
@@ -70,30 +78,27 @@ export function languageKeyToLabel(lang) {
"HeaderName": "Name",
}
```
-* There are common texts that are present with `Common` prefix, try to check first if the exact label is already present there.
-* Every key follows PascalCase case style.
-* Every key that is used in an ARIA text should end with the suffix `ARIA`.
-* The order of keys inside of appearance should be ordered in the order they appear in the source code
+
+- There are common texts that are present with `Common` prefix, try to check first if the exact label is already present there.
+- Every key follows PascalCase case style.
+- Every key that is used in an ARIA text should end with the suffix `ARIA`.
+- The order of keys inside of appearance should be ordered in the order they appear in the source code
## Language Use
The Processing Foundation is specifically invested in expanding the communities of technology and the arts to include and support those who have not had equal access because of their race, gender, class, sexuality, and/or disability. We see software as a medium, something that connects two things. We view it as a means for thinking and making. We believe software, and the tools to learn it, should be accessible to everyone
-With those principles in mind, we want to strongly suggest the use of non-gendered terms whenever possible. If it is not possible to avoid, use the most inclusive version.
-For instance, in Spanish translation we tackled that problem with a particular rule of thumb:
-Avoid male-gendered words: use instead the letter ‘e’. We used the ‘e’ approach vs other approaches like ‘x’ or ‘@’ because you also need to think about how screen readers would read the text aloud.
+With those principles in mind, we want to strongly suggest the use of non-gendered terms whenever possible. If it is not possible to avoid, use the most inclusive version. For instance, in Spanish translation we tackled that problem with a particular rule of thumb: Avoid male-gendered words: use instead the letter ‘e’. We used the ‘e’ approach vs other approaches like ‘x’ or ‘@’ because you also need to think about how screen readers would read the text aloud.
## Background
-
-Did you want to know the context?
-* The original idea for Alpha Editor in Spanish was addressed in [this issue](https://github.com/processing/p5.js-web-editor/issues/595)
-* The discussion regarding which library to use was addressed in [Library](https://github.com/processing/p5.js-web-editor/issues/1447)
-* [UI Design](https://github.com/processing/p5.js-web-editor/issues/1434)
-* [Language Use](https://github.com/processing/p5.js-web-editor/issues/1509)
+Did you want to know the context?
+- The original idea for Alpha Editor in Spanish was addressed in [this issue](https://github.com/processing/p5.js-web-editor/issues/595)
+- The discussion regarding which library to use was addressed in [Library](https://github.com/processing/p5.js-web-editor/issues/1447)
+- [UI Design](https://github.com/processing/p5.js-web-editor/issues/1434)
+- [Language Use](https://github.com/processing/p5.js-web-editor/issues/1509)
-Thanks!
+Thanks!
p5.js Editor Community
-
diff --git a/docker-compose.yml b/docker-compose.yml
index ec48d01942..b91df91048 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,62 +1,29 @@
+version: "3.9"
+
services:
mongo:
image: mongo:8.0
+ container_name: mongo
volumes:
- dbdata:/data/db
+ ports:
+ - "27017:27017"
+
app:
build:
context: .
dockerfile: Dockerfile
- target: production
- # uncomment the following line to pull the image from docker hub
- # image: index.docker.io/catarak/p5.js-web-editor:latest
- # uncomment the following lines if you don't want export all of the variables
- # defined in your .env file for testing
- env_file:
- # - "$PWD/.env.production"
- - "$PWD/.env"
- # environment:
- # - API_URL
- # - AWS_ACCESS_KEY
- # - AWS_REGION
- # - AWS_SECRET_KEY
- # - EMAIL_SENDER
- # - EMAIL_VERIFY_SECRET_TOKEN
- # - EXAMPLE_USER_EMAIL
- # - EXAMPLE_USER_PASSWORD
- # - GG_EXAMPLES_USERNAME
- # - GG_EXAMPLES_EMAIL
- # - GG_EXAMPLES_PASS
- # - GITHUB_ID
- # - GITHUB_SECRET
- # - GOOGLE_ID
- # - GOOGLE_SECRET
- # - MAILGUN_DOMAIN
- # - MAILGUN_KEY
- # - ML5_EXAMPLES_USERNAME
- # - ML5_EXAMPLES_EMAIL
- # - ML5_EXAMPLES_PASS
- # - MONGO_URL
- # - PORT
- # - PREVIEW_PORT
- # - EDITOR_URL
- # - PREVIEW_URL
- # - S3_BUCKET
- # - S3_BUCKET_URL_BASE
- # - SESSION_SECRET
- # - TRANSLATIONS_ENABLED
- # - UI_ACCESS_TOKEN_ENABLED
- # - UPLOAD_LIMIT
- # you can either set this in your .env or as an environment variables
- # or here YOU CHOOSE
- # - MONGO_URL=mongodb://mongo:27017/p5js-web-editor
+ target: development
+ environment:
+ - MONGO_URL=mongodb://mongo:27017/p5js-web-editor
volumes:
- - .:/opt/node/app
- - /opt/node/app/node_modules
+ - .:/usr/src/app
+ - /usr/src/app/node_modules
ports:
- - '8000:8000'
- - '8002:8002'
+ - "8000:8000"
+ - "8002:8002"
depends_on:
- mongo
+
volumes:
dbdata:
diff --git a/infrastructure/README.md b/infrastructure/README.md
index 01f192484a..2226344e86 100644
--- a/infrastructure/README.md
+++ b/infrastructure/README.md
@@ -10,19 +10,15 @@
### Upgrading the GKE control plane
-1. Upgrade the GKE control plane first, by following the steps below.
-
-1. Look up the latest available version in the [Kubernetes release changelog](https://kubernetes.io/releases/) to determine if there are any breaking changes that will require updates to your manifest files. Based on this information, determine the version you want to upgrade the cluster to (ideally the latest supported version) and hit save changes. This should begin the control plane upgrade. Since this is a regional cluster, there should be no downtime during this process however, the API will be unavailable, so do not attempt a deploy during the upgrade.
-
+1. Upgrade the GKE control plane first, by following the steps below. 
+1. Look up the latest available version in the [Kubernetes release changelog](https://kubernetes.io/releases/) to determine if there are any breaking changes that will require updates to your manifest files. Based on this information, determine the version you want to upgrade the cluster to (ideally the latest supported version) and hit save changes. This should begin the control plane upgrade. Since this is a regional cluster, there should be no downtime during this process however, the API will be unavailable, so do not attempt a deploy during the upgrade. 
### Upgrading the GKE node pool
1. Wait until the GKE control plane upgrade is complete and then proceed by upgrading the GKE node pool using the following steps.
1. Navigate to the workloads page to make sure that you have a few replicas (pods) of each service running in the cluster so that the node draining process doesn't cause downtime.
-1. Navigate back to the main GKE service page where you see the cluster listing and you should see that there is an update available.
-
-1. Select the version that is the same as the control plane.
-
+1. Navigate back to the main GKE service page where you see the cluster listing and you should see that there is an update available. 
+1. Select the version that is the same as the control plane. 
### Update the version in the terraform
diff --git a/infrastructure/terraform/.terraform/terraform.tfstate b/infrastructure/terraform/.terraform/terraform.tfstate
index 19c74442bb..fa139bb02e 100644
--- a/infrastructure/terraform/.terraform/terraform.tfstate
+++ b/infrastructure/terraform/.terraform/terraform.tfstate
@@ -16,4 +16,4 @@
},
"hash": 3505575224
}
-}
\ No newline at end of file
+}
diff --git a/infrastructure/terraform/README.md b/infrastructure/terraform/README.md
index 4700483d5c..560d5225a6 100644
--- a/infrastructure/terraform/README.md
+++ b/infrastructure/terraform/README.md
@@ -3,21 +3,25 @@
**Note**: Make sure that you're within this directory before getting started with the commands below.
1. Auth with GCP by running:
+
```
$ gcloud auth application-default login
```
2. If it's your first time running the terraform you will need to init to download the module code:
+
```
$ terraform init
```
3. Run plan to see the changes terraform will make:
+
```
$ terraform plan
```
4. Run apply if the changes look correct and terraform will prompt you to confirm the changes:
+
```
$ terraform apply
```
@@ -25,43 +29,53 @@ $ terraform apply
#### Using Kubectl (or other clients) to interact with the cluster
##### New cluster
+
1. Auth with GCP by running:
+
```
$ gcloud auth login
```
2. Set the project as the default:
+
```
$ gcloud config set project p5js-web-editor-project
```
3. Download the kubeconfig from gcloud by running the following command:
+
```
gcloud container clusters get-credentials p5-gke-cluster --zone us-east4
```
4. Run kubectl commands as normal:
+
```
$ kubectl get pods
```
##### Legacy cluster
+
1. Auth with GCP by running:
+
```
$ gcloud auth login
```
2. Set the project as the default:
+
```
$ gcloud config set project p5js-web-editor-project
```
3. Download the kubeconfig from gcloud by running the following command:
+
```
$ gcloud container clusters get-credentials p5js-web-editor-cluster --zone us-east1-c
```
4. Run kubectl commands as normal:
+
```
$ kubectl get pods
```
diff --git a/kubernetes_app.yml b/kubernetes_app.yml
index 4dc18eef84..52bdb5065a 100644
--- a/kubernetes_app.yml
+++ b/kubernetes_app.yml
@@ -11,7 +11,7 @@ metadata:
name: web-editor-ingress
namespace: production
annotations:
- kubernetes.io/ingress.global-static-ip-name: "production-p5-web-editor-ip"
+ kubernetes.io/ingress.global-static-ip-name: 'production-p5-web-editor-ip'
spec:
defaultBackend:
service:
@@ -26,7 +26,7 @@ metadata:
namespace: production
annotations:
# need to make another global static ip
- kubernetes.io/ingress.global-static-ip-name: "production-p5-preview-editor-ip"
+ kubernetes.io/ingress.global-static-ip-name: 'production-p5-preview-editor-ip'
spec:
defaultBackend:
service:
@@ -47,12 +47,12 @@ spec:
# type: LoadBalancer
type: NodePort
ports:
- - port: 8000
- name: editor-port
- targetPort: 8000
- - port: 8002
- name: preview-port
- targetPort: 8002
+ - port: 8000
+ name: editor-port
+ targetPort: 8000
+ - port: 8002
+ name: preview-port
+ targetPort: 8002
selector:
app: web-editor
---
@@ -72,29 +72,29 @@ spec:
app: web-editor
spec:
containers:
- - name: web-editor-app
- image: index.docker.io/catarak/p5.js-web-editor:latest
- # temp, just to test kubernetes
- # envFrom:
- # - configMapRef:
- # name: web-editor-env
- envFrom:
- - secretRef:
- name: web-editor-credentials
- imagePullPolicy: Always
- resources:
- limits:
- cpu: 1000m
- memory: 2048Mi
- requests:
- cpu: 500m
- memory: 1100Mi
- ports:
- - containerPort: 8000
- readinessProbe:
- httpGet:
- path: /health
- port: 8000
+ - name: web-editor-app
+ image: index.docker.io/catarak/p5.js-web-editor:latest
+ # temp, just to test kubernetes
+ # envFrom:
+ # - configMapRef:
+ # name: web-editor-env
+ envFrom:
+ - secretRef:
+ name: web-editor-credentials
+ imagePullPolicy: Always
+ resources:
+ limits:
+ cpu: 1000m
+ memory: 2048Mi
+ requests:
+ cpu: 500m
+ memory: 1100Mi
+ ports:
+ - containerPort: 8000
+ readinessProbe:
+ httpGet:
+ path: /health
+ port: 8000
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
@@ -165,7 +165,7 @@ metadata:
name: web-editor-ingress
namespace: staging
annotations:
- kubernetes.io/ingress.global-static-ip-name: "staging-p5-web-editor-ip"
+ kubernetes.io/ingress.global-static-ip-name: 'staging-p5-web-editor-ip'
spec:
defaultBackend:
service:
@@ -179,7 +179,7 @@ metadata:
name: preview-editor-ingress
namespace: staging
annotations:
- kubernetes.io/ingress.global-static-ip-name: "staging-p5-preview-editor-ip"
+ kubernetes.io/ingress.global-static-ip-name: 'staging-p5-preview-editor-ip'
spec:
defaultBackend:
service:
@@ -200,12 +200,12 @@ spec:
# type: LoadBalancer
type: NodePort
ports:
- - port: 8001
- name: editor-port
- targetPort: 8000
- - port: 8003
- name: preview-port
- targetPort: 8002
+ - port: 8001
+ name: editor-port
+ targetPort: 8000
+ - port: 8003
+ name: preview-port
+ targetPort: 8002
selector:
app: web-editor
---
@@ -225,26 +225,26 @@ spec:
app: web-editor
spec:
containers:
- - name: web-editor-app
- image: index.docker.io/catarak/p5.js-web-editor-staging:latest
- # temp, just to test kubernetes
- # envFrom:
- # - configMapRef:
- # name: web-editor-env
- envFrom:
- - secretRef:
- name: web-editor-credentials
- imagePullPolicy: Always
- resources:
- limits:
- cpu: 1000m
- memory: 2048Mi
- requests:
- cpu: 500m
- memory: 1100Mi
- ports:
- - containerPort: 8000
- readinessProbe:
- httpGet:
- path: /health
- port: 8000
+ - name: web-editor-app
+ image: index.docker.io/catarak/p5.js-web-editor-staging:latest
+ # temp, just to test kubernetes
+ # envFrom:
+ # - configMapRef:
+ # name: web-editor-env
+ envFrom:
+ - secretRef:
+ name: web-editor-credentials
+ imagePullPolicy: Always
+ resources:
+ limits:
+ cpu: 1000m
+ memory: 2048Mi
+ requests:
+ cpu: 500m
+ memory: 1100Mi
+ ports:
+ - containerPort: 8000
+ readinessProbe:
+ httpGet:
+ path: /health
+ port: 8000
diff --git a/nodemon.json b/nodemon.json
index 6ae614aedc..74a7728391 100644
--- a/nodemon.json
+++ b/nodemon.json
@@ -1,16 +1,10 @@
-
{
"restartable": "rs",
- "ignore": [
- ".git",
- "node_modules/**/node_modules"
- ],
+ "ignore": [".git", "node_modules/**/node_modules"],
"verbose": true,
- "watch": [
- "server"
- ],
+ "watch": ["server"],
"env": {
"NODE_ENV": "development"
},
"ext": "js ts json"
-}
\ No newline at end of file
+}
diff --git a/package-lock.json b/package-lock.json
index 152601097a..45aabafeb7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -79,7 +79,6 @@
"passport-google-oauth20": "^1.0.0",
"passport-http": "^0.3.0",
"passport-local": "^1.0.0",
- "prettier": "2.2.1",
"pretty-bytes": "^3.0.1",
"primer-tooltips": "^1.5.11",
"prop-types": "^15.6.2",
@@ -206,6 +205,7 @@
"postcss-focus": "^5.0.1",
"postcss-loader": "^6.2.1",
"postcss-preset-env": "^6.7.0",
+ "prettier": "^2.8.8",
"react-test-renderer": "^16.14.0",
"redux-mock-store": "^1.5.4",
"rimraf": "^2.7.1",
@@ -423,65 +423,136 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
- "node_modules/@aws-sdk/client-cognito-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.609.0.tgz",
- "integrity": "sha512-3kDTpia1iN/accayoH3MbZRbDvX2tzrKrBTU7wNNoazVrh+gOMS8KCOWrOB72F0V299l4FsfQhnl9BDMVrc1iw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-s3": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.540.0.tgz",
+ "integrity": "sha512-rYBuNB7uqCO9xZc0OAwM2K6QJAo2Syt1L5OhEaf7zG7FulNMyrK6kJPg1WrvNE90tW6gUdDaTy3XsQ7lq6O7uA==",
+ "dependencies": {
+ "@aws-crypto/sha1-browser": "3.0.0",
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.540.0",
+ "@aws-sdk/core": "3.535.0",
+ "@aws-sdk/credential-provider-node": "3.540.0",
+ "@aws-sdk/middleware-bucket-endpoint": "3.535.0",
+ "@aws-sdk/middleware-expect-continue": "3.535.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.535.0",
+ "@aws-sdk/middleware-host-header": "3.535.0",
+ "@aws-sdk/middleware-location-constraint": "3.535.0",
+ "@aws-sdk/middleware-logger": "3.535.0",
+ "@aws-sdk/middleware-recursion-detection": "3.535.0",
+ "@aws-sdk/middleware-sdk-s3": "3.535.0",
+ "@aws-sdk/middleware-signing": "3.535.0",
+ "@aws-sdk/middleware-ssec": "3.537.0",
+ "@aws-sdk/middleware-user-agent": "3.540.0",
+ "@aws-sdk/region-config-resolver": "3.535.0",
+ "@aws-sdk/signature-v4-multi-region": "3.535.0",
+ "@aws-sdk/types": "3.535.0",
+ "@aws-sdk/util-endpoints": "3.540.0",
+ "@aws-sdk/util-user-agent-browser": "3.535.0",
+ "@aws-sdk/util-user-agent-node": "3.535.0",
+ "@aws-sdk/xml-builder": "3.535.0",
+ "@smithy/config-resolver": "^2.2.0",
+ "@smithy/core": "^1.4.0",
+ "@smithy/eventstream-serde-browser": "^2.2.0",
+ "@smithy/eventstream-serde-config-resolver": "^2.2.0",
+ "@smithy/eventstream-serde-node": "^2.2.0",
+ "@smithy/fetch-http-handler": "^2.5.0",
+ "@smithy/hash-blob-browser": "^2.2.0",
+ "@smithy/hash-node": "^2.2.0",
+ "@smithy/hash-stream-node": "^2.2.0",
+ "@smithy/invalid-dependency": "^2.2.0",
+ "@smithy/md5-js": "^2.2.0",
+ "@smithy/middleware-content-length": "^2.2.0",
+ "@smithy/middleware-endpoint": "^2.5.0",
+ "@smithy/middleware-retry": "^2.2.0",
+ "@smithy/middleware-serde": "^2.3.0",
+ "@smithy/middleware-stack": "^2.2.0",
+ "@smithy/node-config-provider": "^2.3.0",
+ "@smithy/node-http-handler": "^2.5.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "@smithy/url-parser": "^2.2.0",
+ "@smithy/util-base64": "^2.3.0",
+ "@smithy/util-body-length-browser": "^2.2.0",
+ "@smithy/util-body-length-node": "^2.3.0",
+ "@smithy/util-defaults-mode-browser": "^2.2.0",
+ "@smithy/util-defaults-mode-node": "^2.3.0",
+ "@smithy/util-endpoints": "^1.2.0",
+ "@smithy/util-retry": "^2.2.0",
+ "@smithy/util-stream": "^2.2.0",
+ "@smithy/util-utf8": "^2.3.0",
+ "@smithy/util-waiter": "^2.2.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/client-sesv2": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.896.0.tgz",
+ "integrity": "sha512-KqWoxNmSKw4KYDrB3IH6AIfX855Dlorya1PcRqODa16xUp8aqoYACuBq+cjSuy5F6j9YDGSZgc20JDmWQRkN8Q==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/client-sts": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/credential-provider-node": "3.896.0",
+ "@aws-sdk/middleware-host-header": "3.893.0",
+ "@aws-sdk/middleware-logger": "3.893.0",
+ "@aws-sdk/middleware-recursion-detection": "3.893.0",
+ "@aws-sdk/middleware-user-agent": "3.896.0",
+ "@aws-sdk/region-config-resolver": "3.893.0",
+ "@aws-sdk/signature-v4-multi-region": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws-sdk/util-endpoints": "3.895.0",
+ "@aws-sdk/util-user-agent-browser": "3.893.0",
+ "@aws-sdk/util-user-agent-node": "3.896.0",
+ "@smithy/config-resolver": "^4.2.2",
+ "@smithy/core": "^3.12.0",
+ "@smithy/fetch-http-handler": "^5.2.1",
+ "@smithy/hash-node": "^4.1.1",
+ "@smithy/invalid-dependency": "^4.1.1",
+ "@smithy/middleware-content-length": "^4.1.1",
+ "@smithy/middleware-endpoint": "^4.2.4",
+ "@smithy/middleware-retry": "^4.3.0",
+ "@smithy/middleware-serde": "^4.1.1",
+ "@smithy/middleware-stack": "^4.1.1",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/node-http-handler": "^4.2.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/url-parser": "^4.1.1",
+ "@smithy/util-base64": "^4.1.0",
+ "@smithy/util-body-length-browser": "^4.1.0",
+ "@smithy/util-body-length-node": "^4.1.0",
+ "@smithy/util-defaults-mode-browser": "^4.1.4",
+ "@smithy/util-defaults-mode-node": "^4.1.4",
+ "@smithy/util-endpoints": "^3.1.2",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-retry": "^4.1.2",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/sha256-browser": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-browser": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
"integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-js": "^5.2.0",
"@aws-crypto/supports-web-crypto": "^5.2.0",
@@ -492,12 +563,12 @@
"tslib": "^2.6.2"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/util-buffer-from": "^2.2.0",
"tslib": "^2.6.2"
@@ -506,12 +577,12 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/sha256-js": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-js": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
"integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/util": "^5.2.0",
"@aws-sdk/types": "^3.222.0",
@@ -521,34 +592,34 @@
"node": ">=16.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/supports-web-crypto": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/supports-web-crypto": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
"integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"tslib": "^2.6.2"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/util": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/util": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
"integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@aws-sdk/types": "^3.222.0",
"@smithy/util-utf8": "^2.0.0",
"tslib": "^2.6.2"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
"integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "optional": true,
- "peer": true,
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@smithy/util-buffer-from": "^2.2.0",
"tslib": "^2.6.2"
@@ -557,4173 +628,1504 @@
"node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz",
- "integrity": "sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/client-sso": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.896.0.tgz",
+ "integrity": "sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/middleware-host-header": "3.893.0",
+ "@aws-sdk/middleware-logger": "3.893.0",
+ "@aws-sdk/middleware-recursion-detection": "3.893.0",
+ "@aws-sdk/middleware-user-agent": "3.896.0",
+ "@aws-sdk/region-config-resolver": "3.893.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws-sdk/util-endpoints": "3.895.0",
+ "@aws-sdk/util-user-agent-browser": "3.893.0",
+ "@aws-sdk/util-user-agent-node": "3.896.0",
+ "@smithy/config-resolver": "^4.2.2",
+ "@smithy/core": "^3.12.0",
+ "@smithy/fetch-http-handler": "^5.2.1",
+ "@smithy/hash-node": "^4.1.1",
+ "@smithy/invalid-dependency": "^4.1.1",
+ "@smithy/middleware-content-length": "^4.1.1",
+ "@smithy/middleware-endpoint": "^4.2.4",
+ "@smithy/middleware-retry": "^4.3.0",
+ "@smithy/middleware-serde": "^4.1.1",
+ "@smithy/middleware-stack": "^4.1.1",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/node-http-handler": "^4.2.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/url-parser": "^4.1.1",
+ "@smithy/util-base64": "^4.1.0",
+ "@smithy/util-body-length-browser": "^4.1.0",
+ "@smithy/util-body-length-node": "^4.1.0",
+ "@smithy/util-defaults-mode-browser": "^4.1.4",
+ "@smithy/util-defaults-mode-node": "^4.1.4",
+ "@smithy/util-endpoints": "^3.1.2",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-retry": "^4.1.2",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz",
- "integrity": "sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/core": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.896.0.tgz",
+ "integrity": "sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws-sdk/xml-builder": "3.894.0",
+ "@smithy/core": "^3.12.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/signature-v4": "^5.2.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-base64": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sts": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz",
- "integrity": "sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.896.0.tgz",
+ "integrity": "sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/core": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.609.0.tgz",
- "integrity": "sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.896.0.tgz",
+ "integrity": "sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/core": "^2.2.4",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/signature-v4": "^3.1.2",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "fast-xml-parser": "4.2.5",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/fetch-http-handler": "^5.2.1",
+ "@smithy/node-http-handler": "^4.2.1",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-stream": "^4.3.2",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz",
- "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.896.0.tgz",
+ "integrity": "sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/credential-provider-env": "3.896.0",
+ "@aws-sdk/credential-provider-http": "3.896.0",
+ "@aws-sdk/credential-provider-process": "3.896.0",
+ "@aws-sdk/credential-provider-sso": "3.896.0",
+ "@aws-sdk/credential-provider-web-identity": "3.896.0",
+ "@aws-sdk/nested-clients": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/credential-provider-imds": "^4.1.2",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz",
- "integrity": "sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.896.0.tgz",
+ "integrity": "sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.5",
+ "@aws-sdk/credential-provider-env": "3.896.0",
+ "@aws-sdk/credential-provider-http": "3.896.0",
+ "@aws-sdk/credential-provider-ini": "3.896.0",
+ "@aws-sdk/credential-provider-process": "3.896.0",
+ "@aws-sdk/credential-provider-sso": "3.896.0",
+ "@aws-sdk/credential-provider-web-identity": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/credential-provider-imds": "^4.1.2",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz",
- "integrity": "sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.896.0.tgz",
+ "integrity": "sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz",
- "integrity": "sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.896.0.tgz",
+ "integrity": "sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/client-sso": "3.896.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/token-providers": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz",
- "integrity": "sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.896.0.tgz",
+ "integrity": "sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/nested-clients": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz",
- "integrity": "sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.893.0.tgz",
+ "integrity": "sha512-qL5xYRt80ahDfj9nDYLhpCNkDinEXvjLe/Qen/Y/u12+djrR2MB4DRa6mzBCkLkdXDtf0WAoW2EZsNCfGrmOEQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/token-providers": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
- "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.893.0.tgz",
+ "integrity": "sha512-ZqzMecjju5zkBquSIfVfCORI/3Mge21nUY4nWaGQy+NUXehqCGG4W7AiVpiHGOcY2cGJa7xeEkYcr2E2U9U0AA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz",
- "integrity": "sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.893.0.tgz",
+ "integrity": "sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws/lambda-invoke-store": "^0.0.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-logger": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz",
- "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-sdk-s3": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.896.0.tgz",
+ "integrity": "sha512-hlPu/AZ5Afa4ZafP+aXIjRtKm7BX57lurA+TJ+7nXm1Az8Du3Sg2tZXP2/GfqTztLIFQYj/Jy5smkJ0+1HNAPQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws-sdk/util-arn-parser": "3.893.0",
+ "@smithy/core": "^3.12.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/signature-v4": "^5.2.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-config-provider": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-stream": "^4.3.2",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz",
- "integrity": "sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.896.0.tgz",
+ "integrity": "sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@aws-sdk/util-endpoints": "3.895.0",
+ "@smithy/core": "^3.12.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz",
- "integrity": "sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.893.0.tgz",
+ "integrity": "sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-config-provider": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz",
- "integrity": "sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/signature-v4-multi-region": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.896.0.tgz",
+ "integrity": "sha512-txiQDEZXL9tlNP8mbnNaDtuHBYc/FCqaZ8Y76qnfM3o6CTIn0t0tTAlnx1CyFe4EaikVBgQuZvj5KfNA8PmlzA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
+ "@aws-sdk/middleware-sdk-s3": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/signature-v4": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/token-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz",
- "integrity": "sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/token-providers": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.896.0.tgz",
+ "integrity": "sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/core": "3.896.0",
+ "@aws-sdk/nested-clients": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sso-oidc": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/types": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.893.0.tgz",
+ "integrity": "sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-endpoints": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz",
- "integrity": "sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-arn-parser": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz",
+ "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-endpoints": "^2.0.4",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz",
- "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.895.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.895.0.tgz",
+ "integrity": "sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz",
- "integrity": "sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "aws-crt": ">=1.0.0"
- },
- "peerDependenciesMeta": {
- "aws-crt": {
- "optional": true
- }
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
- "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/config-resolver": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.4.tgz",
- "integrity": "sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/core": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.5.tgz",
- "integrity": "sha512-0kqyj93/Aa30TEXnnWRBetN8fDGjFF+u8cdIiMI8YS6CrUF2dLTavRfHKfWh5cL5d6s2ZNyEnLjBitdcKmkETQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.8",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/credential-provider-imds": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz",
- "integrity": "sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/fetch-http-handler": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz",
- "integrity": "sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
- "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/invalid-dependency": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
- "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/is-array-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
- "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-content-length": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz",
- "integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-endpoint": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz",
- "integrity": "sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-retry": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.8.tgz",
- "integrity": "sha512-wmIw3t6ZbeqstUFdXtStzSSltoYrcfc28ndnr0mDSMmtMSRNduNbmneA7xiE224fVFXzbf24+0oREks1u2X7Mw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "tslib": "^2.6.2",
- "uuid": "^9.0.1"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-serde": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
- "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/middleware-stack": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
- "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-config-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz",
- "integrity": "sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/node-http-handler": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz",
- "integrity": "sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/abort-controller": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/protocol-http": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz",
- "integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-builder": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
- "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-uri-escape": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/querystring-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
- "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/service-error-classification": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
- "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/shared-ini-file-loader": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz",
- "integrity": "sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/signature-v4": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz",
- "integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-uri-escape": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/smithy-client": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.6.tgz",
- "integrity": "sha512-w9oboI661hfptr26houZ5mdKc//DMxkuOMXSaIiALqGn4bHYT9S4U69BBS6tHX4TZHgShmhcz0d6aXk7FY5soA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.6",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/url-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
- "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/querystring-parser": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz",
- "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
- "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-body-length-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
- "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-config-provider": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
- "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-browser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.8.tgz",
- "integrity": "sha512-eLRHCvM1w3ZJkYcd60yKqM3d70dPB+071EDpf9ZGYqFed3xcm/+pWwNS/xM0JXRrjm0yAA19dWcdFN2IE/66pQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-defaults-mode-node": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.8.tgz",
- "integrity": "sha512-Tajvdyg5+k77j6AOrwSCZgi7KdBizqPNs3HCnFGRoxDjzh+CjPLaLrXbIRB0lsAmqYmRHIU34IogByaqvDrkBQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-endpoints": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz",
- "integrity": "sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-hex-encoding": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
- "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-middleware": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
- "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-retry": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
- "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.6.tgz",
- "integrity": "sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/fetch-http-handler": "^3.2.1",
- "@smithy/node-http-handler": "^3.1.2",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-uri-escape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
- "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- },
- "node_modules/@aws-sdk/client-cognito-identity/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "optional": true,
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@aws-sdk/client-s3": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.540.0.tgz",
- "integrity": "sha512-rYBuNB7uqCO9xZc0OAwM2K6QJAo2Syt1L5OhEaf7zG7FulNMyrK6kJPg1WrvNE90tW6gUdDaTy3XsQ7lq6O7uA==",
- "dependencies": {
- "@aws-crypto/sha1-browser": "3.0.0",
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.540.0",
- "@aws-sdk/core": "3.535.0",
- "@aws-sdk/credential-provider-node": "3.540.0",
- "@aws-sdk/middleware-bucket-endpoint": "3.535.0",
- "@aws-sdk/middleware-expect-continue": "3.535.0",
- "@aws-sdk/middleware-flexible-checksums": "3.535.0",
- "@aws-sdk/middleware-host-header": "3.535.0",
- "@aws-sdk/middleware-location-constraint": "3.535.0",
- "@aws-sdk/middleware-logger": "3.535.0",
- "@aws-sdk/middleware-recursion-detection": "3.535.0",
- "@aws-sdk/middleware-sdk-s3": "3.535.0",
- "@aws-sdk/middleware-signing": "3.535.0",
- "@aws-sdk/middleware-ssec": "3.537.0",
- "@aws-sdk/middleware-user-agent": "3.540.0",
- "@aws-sdk/region-config-resolver": "3.535.0",
- "@aws-sdk/signature-v4-multi-region": "3.535.0",
- "@aws-sdk/types": "3.535.0",
- "@aws-sdk/util-endpoints": "3.540.0",
- "@aws-sdk/util-user-agent-browser": "3.535.0",
- "@aws-sdk/util-user-agent-node": "3.535.0",
- "@aws-sdk/xml-builder": "3.535.0",
- "@smithy/config-resolver": "^2.2.0",
- "@smithy/core": "^1.4.0",
- "@smithy/eventstream-serde-browser": "^2.2.0",
- "@smithy/eventstream-serde-config-resolver": "^2.2.0",
- "@smithy/eventstream-serde-node": "^2.2.0",
- "@smithy/fetch-http-handler": "^2.5.0",
- "@smithy/hash-blob-browser": "^2.2.0",
- "@smithy/hash-node": "^2.2.0",
- "@smithy/hash-stream-node": "^2.2.0",
- "@smithy/invalid-dependency": "^2.2.0",
- "@smithy/md5-js": "^2.2.0",
- "@smithy/middleware-content-length": "^2.2.0",
- "@smithy/middleware-endpoint": "^2.5.0",
- "@smithy/middleware-retry": "^2.2.0",
- "@smithy/middleware-serde": "^2.3.0",
- "@smithy/middleware-stack": "^2.2.0",
- "@smithy/node-config-provider": "^2.3.0",
- "@smithy/node-http-handler": "^2.5.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "@smithy/url-parser": "^2.2.0",
- "@smithy/util-base64": "^2.3.0",
- "@smithy/util-body-length-browser": "^2.2.0",
- "@smithy/util-body-length-node": "^2.3.0",
- "@smithy/util-defaults-mode-browser": "^2.2.0",
- "@smithy/util-defaults-mode-node": "^2.3.0",
- "@smithy/util-endpoints": "^1.2.0",
- "@smithy/util-retry": "^2.2.0",
- "@smithy/util-stream": "^2.2.0",
- "@smithy/util-utf8": "^2.3.0",
- "@smithy/util-waiter": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-s3/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/client-sesv2": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sesv2/-/client-sesv2-3.896.0.tgz",
- "integrity": "sha512-KqWoxNmSKw4KYDrB3IH6AIfX855Dlorya1PcRqODa16xUp8aqoYACuBq+cjSuy5F6j9YDGSZgc20JDmWQRkN8Q==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/credential-provider-node": "3.896.0",
- "@aws-sdk/middleware-host-header": "3.893.0",
- "@aws-sdk/middleware-logger": "3.893.0",
- "@aws-sdk/middleware-recursion-detection": "3.893.0",
- "@aws-sdk/middleware-user-agent": "3.896.0",
- "@aws-sdk/region-config-resolver": "3.893.0",
- "@aws-sdk/signature-v4-multi-region": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@aws-sdk/util-endpoints": "3.895.0",
- "@aws-sdk/util-user-agent-browser": "3.893.0",
- "@aws-sdk/util-user-agent-node": "3.896.0",
- "@smithy/config-resolver": "^4.2.2",
- "@smithy/core": "^3.12.0",
- "@smithy/fetch-http-handler": "^5.2.1",
- "@smithy/hash-node": "^4.1.1",
- "@smithy/invalid-dependency": "^4.1.1",
- "@smithy/middleware-content-length": "^4.1.1",
- "@smithy/middleware-endpoint": "^4.2.4",
- "@smithy/middleware-retry": "^4.3.0",
- "@smithy/middleware-serde": "^4.1.1",
- "@smithy/middleware-stack": "^4.1.1",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/node-http-handler": "^4.2.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/url-parser": "^4.1.1",
- "@smithy/util-base64": "^4.1.0",
- "@smithy/util-body-length-browser": "^4.1.0",
- "@smithy/util-body-length-node": "^4.1.0",
- "@smithy/util-defaults-mode-browser": "^4.1.4",
- "@smithy/util-defaults-mode-node": "^4.1.4",
- "@smithy/util-endpoints": "^3.1.2",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-retry": "^4.1.2",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-browser": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
- "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-crypto/supports-web-crypto": "^5.2.0",
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/sha256-js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
- "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/supports-web-crypto": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
- "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
- "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "^3.222.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/client-sso": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.896.0.tgz",
- "integrity": "sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/middleware-host-header": "3.893.0",
- "@aws-sdk/middleware-logger": "3.893.0",
- "@aws-sdk/middleware-recursion-detection": "3.893.0",
- "@aws-sdk/middleware-user-agent": "3.896.0",
- "@aws-sdk/region-config-resolver": "3.893.0",
- "@aws-sdk/types": "3.893.0",
- "@aws-sdk/util-endpoints": "3.895.0",
- "@aws-sdk/util-user-agent-browser": "3.893.0",
- "@aws-sdk/util-user-agent-node": "3.896.0",
- "@smithy/config-resolver": "^4.2.2",
- "@smithy/core": "^3.12.0",
- "@smithy/fetch-http-handler": "^5.2.1",
- "@smithy/hash-node": "^4.1.1",
- "@smithy/invalid-dependency": "^4.1.1",
- "@smithy/middleware-content-length": "^4.1.1",
- "@smithy/middleware-endpoint": "^4.2.4",
- "@smithy/middleware-retry": "^4.3.0",
- "@smithy/middleware-serde": "^4.1.1",
- "@smithy/middleware-stack": "^4.1.1",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/node-http-handler": "^4.2.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/url-parser": "^4.1.1",
- "@smithy/util-base64": "^4.1.0",
- "@smithy/util-body-length-browser": "^4.1.0",
- "@smithy/util-body-length-node": "^4.1.0",
- "@smithy/util-defaults-mode-browser": "^4.1.4",
- "@smithy/util-defaults-mode-node": "^4.1.4",
- "@smithy/util-endpoints": "^3.1.2",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-retry": "^4.1.2",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/core": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.896.0.tgz",
- "integrity": "sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@aws-sdk/xml-builder": "3.894.0",
- "@smithy/core": "^3.12.0",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/signature-v4": "^5.2.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/util-base64": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.896.0.tgz",
- "integrity": "sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.896.0.tgz",
- "integrity": "sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/fetch-http-handler": "^5.2.1",
- "@smithy/node-http-handler": "^4.2.1",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/util-stream": "^4.3.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.896.0.tgz",
- "integrity": "sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/credential-provider-env": "3.896.0",
- "@aws-sdk/credential-provider-http": "3.896.0",
- "@aws-sdk/credential-provider-process": "3.896.0",
- "@aws-sdk/credential-provider-sso": "3.896.0",
- "@aws-sdk/credential-provider-web-identity": "3.896.0",
- "@aws-sdk/nested-clients": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/credential-provider-imds": "^4.1.2",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.896.0.tgz",
- "integrity": "sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.896.0",
- "@aws-sdk/credential-provider-http": "3.896.0",
- "@aws-sdk/credential-provider-ini": "3.896.0",
- "@aws-sdk/credential-provider-process": "3.896.0",
- "@aws-sdk/credential-provider-sso": "3.896.0",
- "@aws-sdk/credential-provider-web-identity": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/credential-provider-imds": "^4.1.2",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.896.0.tgz",
- "integrity": "sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.896.0.tgz",
- "integrity": "sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/client-sso": "3.896.0",
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/token-providers": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.896.0.tgz",
- "integrity": "sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/nested-clients": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.893.0.tgz",
- "integrity": "sha512-qL5xYRt80ahDfj9nDYLhpCNkDinEXvjLe/Qen/Y/u12+djrR2MB4DRa6mzBCkLkdXDtf0WAoW2EZsNCfGrmOEQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-logger": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.893.0.tgz",
- "integrity": "sha512-ZqzMecjju5zkBquSIfVfCORI/3Mge21nUY4nWaGQy+NUXehqCGG4W7AiVpiHGOcY2cGJa7xeEkYcr2E2U9U0AA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.893.0.tgz",
- "integrity": "sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@aws/lambda-invoke-store": "^0.0.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-sdk-s3": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.896.0.tgz",
- "integrity": "sha512-hlPu/AZ5Afa4ZafP+aXIjRtKm7BX57lurA+TJ+7nXm1Az8Du3Sg2tZXP2/GfqTztLIFQYj/Jy5smkJ0+1HNAPQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@aws-sdk/util-arn-parser": "3.893.0",
- "@smithy/core": "^3.12.0",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/signature-v4": "^5.2.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/util-config-provider": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-stream": "^4.3.2",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.896.0.tgz",
- "integrity": "sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@aws-sdk/util-endpoints": "3.895.0",
- "@smithy/core": "^3.12.0",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.893.0.tgz",
- "integrity": "sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/types": "^4.5.0",
- "@smithy/util-config-provider": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/signature-v4-multi-region": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.896.0.tgz",
- "integrity": "sha512-txiQDEZXL9tlNP8mbnNaDtuHBYc/FCqaZ8Y76qnfM3o6CTIn0t0tTAlnx1CyFe4EaikVBgQuZvj5KfNA8PmlzA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/middleware-sdk-s3": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/signature-v4": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/token-providers": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.896.0.tgz",
- "integrity": "sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/core": "3.896.0",
- "@aws-sdk/nested-clients": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/types": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.893.0.tgz",
- "integrity": "sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-arn-parser": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz",
- "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-endpoints": {
- "version": "3.895.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.895.0.tgz",
- "integrity": "sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@smithy/types": "^4.5.0",
- "@smithy/url-parser": "^4.1.1",
- "@smithy/util-endpoints": "^3.1.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.893.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.893.0.tgz",
- "integrity": "sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/types": "3.893.0",
- "@smithy/types": "^4.5.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.896.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.896.0.tgz",
- "integrity": "sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@aws-sdk/middleware-user-agent": "3.896.0",
- "@aws-sdk/types": "3.893.0",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- },
- "peerDependencies": {
- "aws-crt": ">=1.0.0"
- },
- "peerDependenciesMeta": {
- "aws-crt": {
- "optional": true
- }
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/xml-builder": {
- "version": "3.894.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.894.0.tgz",
- "integrity": "sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "fast-xml-parser": "5.2.5",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/abort-controller": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.1.1.tgz",
- "integrity": "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/config-resolver": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.2.2.tgz",
- "integrity": "sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/types": "^4.5.0",
- "@smithy/util-config-provider": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/core": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.12.0.tgz",
- "integrity": "sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/middleware-serde": "^4.1.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "@smithy/util-base64": "^4.1.0",
- "@smithy/util-body-length-browser": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-stream": "^4.3.2",
- "@smithy/util-utf8": "^4.1.0",
- "@smithy/uuid": "^1.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/credential-provider-imds": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz",
- "integrity": "sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/types": "^4.5.0",
- "@smithy/url-parser": "^4.1.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/fetch-http-handler": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz",
- "integrity": "sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/querystring-builder": "^4.1.1",
- "@smithy/types": "^4.5.0",
- "@smithy/util-base64": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/hash-node": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.1.1.tgz",
- "integrity": "sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "@smithy/util-buffer-from": "^4.1.0",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
- "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/is-array-buffer": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/invalid-dependency": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz",
- "integrity": "sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/is-array-buffer": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz",
- "integrity": "sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-content-length": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz",
- "integrity": "sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-endpoint": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.4.tgz",
- "integrity": "sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/core": "^3.12.0",
- "@smithy/middleware-serde": "^4.1.1",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "@smithy/url-parser": "^4.1.1",
- "@smithy/util-middleware": "^4.1.1",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-retry": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.3.0.tgz",
- "integrity": "sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/service-error-classification": "^4.1.2",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-retry": "^4.1.2",
- "@smithy/uuid": "^1.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-serde": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz",
- "integrity": "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-stack": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz",
- "integrity": "sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/node-config-provider": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz",
- "integrity": "sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/property-provider": "^4.1.1",
- "@smithy/shared-ini-file-loader": "^4.2.0",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/node-http-handler": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz",
- "integrity": "sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/abort-controller": "^4.1.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/querystring-builder": "^4.1.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/property-provider": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.1.1.tgz",
- "integrity": "sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/protocol-http": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.2.1.tgz",
- "integrity": "sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/querystring-builder": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz",
- "integrity": "sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "@smithy/util-uri-escape": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/querystring-parser": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz",
- "integrity": "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/service-error-classification": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz",
- "integrity": "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/shared-ini-file-loader": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz",
- "integrity": "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/signature-v4": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.2.1.tgz",
- "integrity": "sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/is-array-buffer": "^4.1.0",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "@smithy/util-hex-encoding": "^4.1.0",
- "@smithy/util-middleware": "^4.1.1",
- "@smithy/util-uri-escape": "^4.1.0",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/smithy-client": {
- "version": "4.6.4",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.6.4.tgz",
- "integrity": "sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/core": "^3.12.0",
- "@smithy/middleware-endpoint": "^4.2.4",
- "@smithy/middleware-stack": "^4.1.1",
- "@smithy/protocol-http": "^5.2.1",
- "@smithy/types": "^4.5.0",
- "@smithy/util-stream": "^4.3.2",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/types": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.5.0.tgz",
- "integrity": "sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/url-parser": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.1.1.tgz",
- "integrity": "sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/querystring-parser": "^4.1.1",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-base64": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.1.0.tgz",
- "integrity": "sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/util-buffer-from": "^4.1.0",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
- "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/is-array-buffer": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-body-length-browser": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz",
- "integrity": "sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-body-length-node": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz",
- "integrity": "sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-config-provider": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz",
- "integrity": "sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-defaults-mode-browser": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.4.tgz",
- "integrity": "sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/property-provider": "^4.1.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-defaults-mode-node": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.4.tgz",
- "integrity": "sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/config-resolver": "^4.2.2",
- "@smithy/credential-provider-imds": "^4.1.2",
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/property-provider": "^4.1.1",
- "@smithy/smithy-client": "^4.6.4",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-endpoints": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz",
- "integrity": "sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/node-config-provider": "^4.2.2",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-hex-encoding": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz",
- "integrity": "sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-middleware": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.1.1.tgz",
- "integrity": "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-retry": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.1.2.tgz",
- "integrity": "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/service-error-classification": "^4.1.2",
- "@smithy/types": "^4.5.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-stream": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.3.2.tgz",
- "integrity": "sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/fetch-http-handler": "^5.2.1",
- "@smithy/node-http-handler": "^4.2.1",
- "@smithy/types": "^4.5.0",
- "@smithy/util-base64": "^4.1.0",
- "@smithy/util-buffer-from": "^4.1.0",
- "@smithy/util-hex-encoding": "^4.1.0",
- "@smithy/util-utf8": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
- "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/is-array-buffer": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-uri-escape": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz",
- "integrity": "sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-utf8": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.1.0.tgz",
- "integrity": "sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/util-buffer-from": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
- "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@smithy/is-array-buffer": "^4.1.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/fast-xml-parser": {
- "version": "5.2.5",
- "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
- "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "strnum": "^2.1.0"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/strnum": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
- "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT"
- },
- "node_modules/@aws-sdk/client-sesv2/node_modules/tslib": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
- "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "dev": true,
- "license": "0BSD"
- },
- "node_modules/@aws-sdk/client-sso": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.540.0.tgz",
- "integrity": "sha512-rrQZMuw4sxIo3eyAUUzPQRA336mPRnrAeSlSdVHBKZD8Fjvoy0lYry2vNhkPLpFZLso1J66KRyuIv4LzRR3v1Q==",
- "dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.535.0",
- "@aws-sdk/middleware-host-header": "3.535.0",
- "@aws-sdk/middleware-logger": "3.535.0",
- "@aws-sdk/middleware-recursion-detection": "3.535.0",
- "@aws-sdk/middleware-user-agent": "3.540.0",
- "@aws-sdk/region-config-resolver": "3.535.0",
- "@aws-sdk/types": "3.535.0",
- "@aws-sdk/util-endpoints": "3.540.0",
- "@aws-sdk/util-user-agent-browser": "3.535.0",
- "@aws-sdk/util-user-agent-node": "3.535.0",
- "@smithy/config-resolver": "^2.2.0",
- "@smithy/core": "^1.4.0",
- "@smithy/fetch-http-handler": "^2.5.0",
- "@smithy/hash-node": "^2.2.0",
- "@smithy/invalid-dependency": "^2.2.0",
- "@smithy/middleware-content-length": "^2.2.0",
- "@smithy/middleware-endpoint": "^2.5.0",
- "@smithy/middleware-retry": "^2.2.0",
- "@smithy/middleware-serde": "^2.3.0",
- "@smithy/middleware-stack": "^2.2.0",
- "@smithy/node-config-provider": "^2.3.0",
- "@smithy/node-http-handler": "^2.5.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "@smithy/url-parser": "^2.2.0",
- "@smithy/util-base64": "^2.3.0",
- "@smithy/util-body-length-browser": "^2.2.0",
- "@smithy/util-body-length-node": "^2.3.0",
- "@smithy/util-defaults-mode-browser": "^2.2.0",
- "@smithy/util-defaults-mode-node": "^2.3.0",
- "@smithy/util-endpoints": "^1.2.0",
- "@smithy/util-middleware": "^2.2.0",
- "@smithy/util-retry": "^2.2.0",
- "@smithy/util-utf8": "^2.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.540.0.tgz",
- "integrity": "sha512-LZYK0lBRQK8D8M3Sqc96XiXkAV2v70zhTtF6weyzEpgwxZMfSuFJjs0jFyhaeZBZbZv7BBghIdhJ5TPavNxGMQ==",
- "dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.540.0",
- "@aws-sdk/core": "3.535.0",
- "@aws-sdk/middleware-host-header": "3.535.0",
- "@aws-sdk/middleware-logger": "3.535.0",
- "@aws-sdk/middleware-recursion-detection": "3.535.0",
- "@aws-sdk/middleware-user-agent": "3.540.0",
- "@aws-sdk/region-config-resolver": "3.535.0",
- "@aws-sdk/types": "3.535.0",
- "@aws-sdk/util-endpoints": "3.540.0",
- "@aws-sdk/util-user-agent-browser": "3.535.0",
- "@aws-sdk/util-user-agent-node": "3.535.0",
- "@smithy/config-resolver": "^2.2.0",
- "@smithy/core": "^1.4.0",
- "@smithy/fetch-http-handler": "^2.5.0",
- "@smithy/hash-node": "^2.2.0",
- "@smithy/invalid-dependency": "^2.2.0",
- "@smithy/middleware-content-length": "^2.2.0",
- "@smithy/middleware-endpoint": "^2.5.0",
- "@smithy/middleware-retry": "^2.2.0",
- "@smithy/middleware-serde": "^2.3.0",
- "@smithy/middleware-stack": "^2.2.0",
- "@smithy/node-config-provider": "^2.3.0",
- "@smithy/node-http-handler": "^2.5.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "@smithy/url-parser": "^2.2.0",
- "@smithy/util-base64": "^2.3.0",
- "@smithy/util-body-length-browser": "^2.2.0",
- "@smithy/util-body-length-node": "^2.3.0",
- "@smithy/util-defaults-mode-browser": "^2.2.0",
- "@smithy/util-defaults-mode-node": "^2.3.0",
- "@smithy/util-endpoints": "^1.2.0",
- "@smithy/util-middleware": "^2.2.0",
- "@smithy/util-retry": "^2.2.0",
- "@smithy/util-utf8": "^2.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/credential-provider-node": "^3.540.0"
- }
- },
- "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/client-sso/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/client-sts": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.540.0.tgz",
- "integrity": "sha512-ITHUQxvpqfQX6obfpIi3KYGzZYfe/I5Ixjfxoi5lB7ISCtmxqObKB1fzD93wonkMJytJ7LUO8panZl/ojiJ1uw==",
- "dependencies": {
- "@aws-crypto/sha256-browser": "3.0.0",
- "@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/core": "3.535.0",
- "@aws-sdk/middleware-host-header": "3.535.0",
- "@aws-sdk/middleware-logger": "3.535.0",
- "@aws-sdk/middleware-recursion-detection": "3.535.0",
- "@aws-sdk/middleware-user-agent": "3.540.0",
- "@aws-sdk/region-config-resolver": "3.535.0",
- "@aws-sdk/types": "3.535.0",
- "@aws-sdk/util-endpoints": "3.540.0",
- "@aws-sdk/util-user-agent-browser": "3.535.0",
- "@aws-sdk/util-user-agent-node": "3.535.0",
- "@smithy/config-resolver": "^2.2.0",
- "@smithy/core": "^1.4.0",
- "@smithy/fetch-http-handler": "^2.5.0",
- "@smithy/hash-node": "^2.2.0",
- "@smithy/invalid-dependency": "^2.2.0",
- "@smithy/middleware-content-length": "^2.2.0",
- "@smithy/middleware-endpoint": "^2.5.0",
- "@smithy/middleware-retry": "^2.2.0",
- "@smithy/middleware-serde": "^2.3.0",
- "@smithy/middleware-stack": "^2.2.0",
- "@smithy/node-config-provider": "^2.3.0",
- "@smithy/node-http-handler": "^2.5.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "@smithy/url-parser": "^2.2.0",
- "@smithy/util-base64": "^2.3.0",
- "@smithy/util-body-length-browser": "^2.2.0",
- "@smithy/util-body-length-node": "^2.3.0",
- "@smithy/util-defaults-mode-browser": "^2.2.0",
- "@smithy/util-defaults-mode-node": "^2.3.0",
- "@smithy/util-endpoints": "^1.2.0",
- "@smithy/util-middleware": "^2.2.0",
- "@smithy/util-retry": "^2.2.0",
- "@smithy/util-utf8": "^2.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/credential-provider-node": "^3.540.0"
- }
- },
- "node_modules/@aws-sdk/client-sts/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/core": {
- "version": "3.535.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.535.0.tgz",
- "integrity": "sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw==",
- "dependencies": {
- "@smithy/core": "^1.4.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/signature-v4": "^2.2.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/core/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.609.0.tgz",
- "integrity": "sha512-BqrpAXRr64dQ/uZsRB2wViGKTkVRlfp8Q+Zd7Bc8Ikk+YXjPtl+IyWXKtdKQ3LBO255KwAcPmra5oFC+2R1GOQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- },
- "node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.535.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz",
- "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==",
- "dependencies": {
- "@aws-sdk/types": "3.535.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.535.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz",
- "integrity": "sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw==",
- "dependencies": {
- "@aws-sdk/types": "3.535.0",
- "@smithy/fetch-http-handler": "^2.5.0",
- "@smithy/node-http-handler": "^2.5.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/protocol-http": "^3.3.0",
- "@smithy/smithy-client": "^2.5.0",
- "@smithy/types": "^2.12.0",
- "@smithy/util-stream": "^2.2.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.540.0.tgz",
- "integrity": "sha512-igN/RbsnulIBwqXbwsWmR3srqmtbPF1dm+JteGvUY31FW65fTVvWvSr945Y/cf1UbhPmIQXntlsqESqpkhTHwg==",
- "dependencies": {
- "@aws-sdk/client-sts": "3.540.0",
- "@aws-sdk/credential-provider-env": "3.535.0",
- "@aws-sdk/credential-provider-process": "3.535.0",
- "@aws-sdk/credential-provider-sso": "3.540.0",
- "@aws-sdk/credential-provider-web-identity": "3.540.0",
- "@aws-sdk/types": "3.535.0",
- "@smithy/credential-provider-imds": "^2.3.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/shared-ini-file-loader": "^2.4.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.540.0.tgz",
- "integrity": "sha512-HKQZJbLHlrHX9A0B1poiYNXIIQfy8whTjuosTCYKPDBhhUyVAQfxy/KG726j0v43IhaNPLgTGZCJve4hAsazSw==",
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.535.0",
- "@aws-sdk/credential-provider-http": "3.535.0",
- "@aws-sdk/credential-provider-ini": "3.540.0",
- "@aws-sdk/credential-provider-process": "3.535.0",
- "@aws-sdk/credential-provider-sso": "3.540.0",
- "@aws-sdk/credential-provider-web-identity": "3.540.0",
- "@aws-sdk/types": "3.535.0",
- "@smithy/credential-provider-imds": "^2.3.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/shared-ini-file-loader": "^2.4.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.535.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz",
- "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==",
- "dependencies": {
- "@aws-sdk/types": "3.535.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/shared-ini-file-loader": "^2.4.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.540.0.tgz",
- "integrity": "sha512-tKkFqK227LF5ajc5EL6asXS32p3nkofpP8G7NRpU7zOEOQCg01KUc4JRX+ItI0T007CiN1J19yNoFqHLT/SqHg==",
- "dependencies": {
- "@aws-sdk/client-sso": "3.540.0",
- "@aws-sdk/token-providers": "3.540.0",
- "@aws-sdk/types": "3.535.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/shared-ini-file-loader": "^2.4.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.540.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.540.0.tgz",
- "integrity": "sha512-OpDm9w3A168B44hSjpnvECP4rvnFzD86rN4VYdGADuCvEa5uEcdA/JuT5WclFPDqdWEmFBqS1pxBIJBf0g2Q9Q==",
- "dependencies": {
- "@aws-sdk/client-sts": "3.540.0",
- "@aws-sdk/types": "3.535.0",
- "@smithy/property-provider": "^2.2.0",
- "@smithy/types": "^2.12.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
- "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
- },
- "node_modules/@aws-sdk/credential-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.609.0.tgz",
- "integrity": "sha512-bJKMY4QwRVderh8R2s9kukoZhuNZew/xzwPa9DRRFVOIsznsS0faAdmAAFrKb8e06YyQq6DiZP0BfFyVHAXE2A==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/client-cognito-identity": "3.609.0",
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/client-sts": "3.609.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.609.0",
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-crypto/sha256-browser": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
- "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-crypto/supports-web-crypto": "^5.2.0",
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-crypto/sha256-js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
- "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-crypto/supports-web-crypto": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
- "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-crypto/util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
- "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/types": "^3.222.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz",
- "integrity": "sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso-oidc": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz",
- "integrity": "sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso-oidc/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz",
- "integrity": "sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/core": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.609.0.tgz",
- "integrity": "sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@smithy/core": "^2.2.4",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/signature-v4": "^3.1.2",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz",
- "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/types": "^4.5.0",
+ "@smithy/url-parser": "^4.1.1",
+ "@smithy/util-endpoints": "^3.1.2",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-http": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz",
- "integrity": "sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.893.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.893.0.tgz",
+ "integrity": "sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.5",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/types": "^4.5.0",
+ "bowser": "^2.11.0",
"tslib": "^2.6.2"
- },
- "engines": {
- "node": ">=16.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz",
- "integrity": "sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.896.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.896.0.tgz",
+ "integrity": "sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/middleware-user-agent": "3.896.0",
+ "@aws-sdk/types": "3.893.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
},
"peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
- }
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz",
- "integrity": "sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
+ "aws-crt": ">=1.0.0"
},
- "engines": {
- "node": ">=16.0.0"
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz",
- "integrity": "sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@aws-sdk/xml-builder": {
+ "version": "3.894.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.894.0.tgz",
+ "integrity": "sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
+ "fast-xml-parser": "5.2.5",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz",
- "integrity": "sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/abort-controller": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.1.1.tgz",
+ "integrity": "sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/token-providers": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
- "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/config-resolver": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.2.2.tgz",
+ "integrity": "sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-config-provider": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sts": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz",
- "integrity": "sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/core": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.12.0.tgz",
+ "integrity": "sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/middleware-serde": "^4.1.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-base64": "^4.1.0",
+ "@smithy/util-body-length-browser": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-stream": "^4.3.2",
+ "@smithy/util-utf8": "^4.1.0",
+ "@smithy/uuid": "^1.0.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-logger": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz",
- "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/credential-provider-imds": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz",
+ "integrity": "sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/url-parser": "^4.1.1",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz",
- "integrity": "sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/fetch-http-handler": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz",
+ "integrity": "sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/querystring-builder": "^4.1.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-base64": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz",
- "integrity": "sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/hash-node": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.1.1.tgz",
+ "integrity": "sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-buffer-from": "^4.1.0",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz",
- "integrity": "sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/hash-node/node_modules/@smithy/util-buffer-from": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
+ "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
+ "@smithy/is-array-buffer": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/token-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz",
- "integrity": "sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/invalid-dependency": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz",
+ "integrity": "sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "@aws-sdk/client-sso-oidc": "^3.609.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/is-array-buffer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz",
+ "integrity": "sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-endpoints": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz",
- "integrity": "sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-content-length": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz",
+ "integrity": "sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-endpoints": "^2.0.4",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz",
- "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-endpoint": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.4.tgz",
+ "integrity": "sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
+ "@smithy/core": "^3.12.0",
+ "@smithy/middleware-serde": "^4.1.1",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
+ "@smithy/url-parser": "^4.1.1",
+ "@smithy/util-middleware": "^4.1.1",
"tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz",
- "integrity": "sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-retry": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.3.0.tgz",
+ "integrity": "sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/service-error-classification": "^4.1.2",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-retry": "^4.1.2",
+ "@smithy/uuid": "^1.0.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
- },
- "peerDependencies": {
- "aws-crt": ">=1.0.0"
- },
- "peerDependenciesMeta": {
- "aws-crt": {
- "optional": true
- }
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
- "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-serde": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz",
+ "integrity": "sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/config-resolver": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.4.tgz",
- "integrity": "sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/middleware-stack": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz",
+ "integrity": "sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/core": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.5.tgz",
- "integrity": "sha512-0kqyj93/Aa30TEXnnWRBetN8fDGjFF+u8cdIiMI8YS6CrUF2dLTavRfHKfWh5cL5d6s2ZNyEnLjBitdcKmkETQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/node-config-provider": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz",
+ "integrity": "sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.8",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/shared-ini-file-loader": "^4.2.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/credential-provider-imds": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz",
- "integrity": "sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/node-http-handler": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz",
+ "integrity": "sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
+ "@smithy/abort-controller": "^4.1.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/querystring-builder": "^4.1.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/fetch-http-handler": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz",
- "integrity": "sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/property-provider": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.1.1.tgz",
+ "integrity": "sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
- "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/protocol-http": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.2.1.tgz",
+ "integrity": "sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/hash-node/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/querystring-builder": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz",
+ "integrity": "sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-uri-escape": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/invalid-dependency": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
- "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/querystring-parser": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz",
+ "integrity": "sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/is-array-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
- "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/service-error-classification": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz",
+ "integrity": "sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "tslib": "^2.6.2"
+ "@smithy/types": "^4.5.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-content-length": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz",
- "integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/shared-ini-file-loader": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz",
+ "integrity": "sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-endpoint": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz",
- "integrity": "sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/signature-v4": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.2.1.tgz",
+ "integrity": "sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-middleware": "^3.0.3",
+ "@smithy/is-array-buffer": "^4.1.0",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-hex-encoding": "^4.1.0",
+ "@smithy/util-middleware": "^4.1.1",
+ "@smithy/util-uri-escape": "^4.1.0",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-retry": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.8.tgz",
- "integrity": "sha512-wmIw3t6ZbeqstUFdXtStzSSltoYrcfc28ndnr0mDSMmtMSRNduNbmneA7xiE224fVFXzbf24+0oREks1u2X7Mw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/smithy-client": {
+ "version": "4.6.4",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.6.4.tgz",
+ "integrity": "sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "tslib": "^2.6.2",
- "uuid": "^9.0.1"
+ "@smithy/core": "^3.12.0",
+ "@smithy/middleware-endpoint": "^4.2.4",
+ "@smithy/middleware-stack": "^4.1.1",
+ "@smithy/protocol-http": "^5.2.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-stream": "^4.3.2",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-serde": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
- "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/types": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.5.0.tgz",
+ "integrity": "sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/middleware-stack": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
- "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/url-parser": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.1.1.tgz",
+ "integrity": "sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/querystring-parser": "^4.1.1",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-config-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz",
- "integrity": "sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-base64": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.1.0.tgz",
+ "integrity": "sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/util-buffer-from": "^4.1.0",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/node-http-handler": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz",
- "integrity": "sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-base64/node_modules/@smithy/util-buffer-from": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
+ "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/abort-controller": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/is-array-buffer": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-body-length-browser": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz",
+ "integrity": "sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/protocol-http": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz",
- "integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-body-length-node": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz",
+ "integrity": "sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-builder": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
- "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-config-provider": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz",
+ "integrity": "sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-uri-escape": "^3.0.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/querystring-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
- "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.4.tgz",
+ "integrity": "sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "bowser": "^2.11.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/service-error-classification": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
- "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-defaults-mode-node": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.4.tgz",
+ "integrity": "sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0"
+ "@smithy/config-resolver": "^4.2.2",
+ "@smithy/credential-provider-imds": "^4.1.2",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/property-provider": "^4.1.1",
+ "@smithy/smithy-client": "^4.6.4",
+ "@smithy/types": "^4.5.0",
+ "tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/shared-ini-file-loader": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz",
- "integrity": "sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-endpoints": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz",
+ "integrity": "sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@smithy/node-config-provider": "^4.2.2",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz",
- "integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-hex-encoding": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz",
+ "integrity": "sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-uri-escape": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/signature-v4/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-middleware": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.1.1.tgz",
+ "integrity": "sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/smithy-client": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.6.tgz",
- "integrity": "sha512-w9oboI661hfptr26houZ5mdKc//DMxkuOMXSaIiALqGn4bHYT9S4U69BBS6tHX4TZHgShmhcz0d6aXk7FY5soA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-retry": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.1.2.tgz",
+ "integrity": "sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.6",
+ "@smithy/service-error-classification": "^4.1.2",
+ "@smithy/types": "^4.5.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-stream": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.3.2.tgz",
+ "integrity": "sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/fetch-http-handler": "^5.2.1",
+ "@smithy/node-http-handler": "^4.2.1",
+ "@smithy/types": "^4.5.0",
+ "@smithy/util-base64": "^4.1.0",
+ "@smithy/util-buffer-from": "^4.1.0",
+ "@smithy/util-hex-encoding": "^4.1.0",
+ "@smithy/util-utf8": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/url-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
- "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-stream/node_modules/@smithy/util-buffer-from": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
+ "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/querystring-parser": "^3.0.3",
- "@smithy/types": "^3.3.0",
+ "@smithy/is-array-buffer": "^4.1.0",
"tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz",
- "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-uri-escape": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz",
+ "integrity": "sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-base64/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-utf8": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.1.0.tgz",
+ "integrity": "sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
+ "@smithy/util-buffer-from": "^4.1.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
- "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/@smithy/util-utf8/node_modules/@smithy/util-buffer-from": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz",
+ "integrity": "sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==",
+ "dev": true,
+ "license": "Apache-2.0",
"dependencies": {
+ "@smithy/is-array-buffer": "^4.1.0",
"tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-body-length-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
- "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz",
+ "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "tslib": "^2.6.2"
+ "strnum": "^2.1.0"
},
- "engines": {
- "node": ">=16.0.0"
+ "bin": {
+ "fxparser": "src/cli/cli.js"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sesv2/node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
+ "node_modules/@aws-sdk/client-sesv2/node_modules/tslib": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
+ "dev": true,
+ "license": "0BSD"
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.540.0.tgz",
+ "integrity": "sha512-rrQZMuw4sxIo3eyAUUzPQRA336mPRnrAeSlSdVHBKZD8Fjvoy0lYry2vNhkPLpFZLso1J66KRyuIv4LzRR3v1Q==",
"dependencies": {
- "@smithy/is-array-buffer": "^3.0.0",
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/core": "3.535.0",
+ "@aws-sdk/middleware-host-header": "3.535.0",
+ "@aws-sdk/middleware-logger": "3.535.0",
+ "@aws-sdk/middleware-recursion-detection": "3.535.0",
+ "@aws-sdk/middleware-user-agent": "3.540.0",
+ "@aws-sdk/region-config-resolver": "3.535.0",
+ "@aws-sdk/types": "3.535.0",
+ "@aws-sdk/util-endpoints": "3.540.0",
+ "@aws-sdk/util-user-agent-browser": "3.535.0",
+ "@aws-sdk/util-user-agent-node": "3.535.0",
+ "@smithy/config-resolver": "^2.2.0",
+ "@smithy/core": "^1.4.0",
+ "@smithy/fetch-http-handler": "^2.5.0",
+ "@smithy/hash-node": "^2.2.0",
+ "@smithy/invalid-dependency": "^2.2.0",
+ "@smithy/middleware-content-length": "^2.2.0",
+ "@smithy/middleware-endpoint": "^2.5.0",
+ "@smithy/middleware-retry": "^2.2.0",
+ "@smithy/middleware-serde": "^2.3.0",
+ "@smithy/middleware-stack": "^2.2.0",
+ "@smithy/node-config-provider": "^2.3.0",
+ "@smithy/node-http-handler": "^2.5.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "@smithy/url-parser": "^2.2.0",
+ "@smithy/util-base64": "^2.3.0",
+ "@smithy/util-body-length-browser": "^2.2.0",
+ "@smithy/util-body-length-node": "^2.3.0",
+ "@smithy/util-defaults-mode-browser": "^2.2.0",
+ "@smithy/util-defaults-mode-node": "^2.3.0",
+ "@smithy/util-endpoints": "^1.2.0",
+ "@smithy/util-middleware": "^2.2.0",
+ "@smithy/util-retry": "^2.2.0",
+ "@smithy/util-utf8": "^2.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-config-provider": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
- "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sso-oidc": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.540.0.tgz",
+ "integrity": "sha512-LZYK0lBRQK8D8M3Sqc96XiXkAV2v70zhTtF6weyzEpgwxZMfSuFJjs0jFyhaeZBZbZv7BBghIdhJ5TPavNxGMQ==",
"dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.540.0",
+ "@aws-sdk/core": "3.535.0",
+ "@aws-sdk/middleware-host-header": "3.535.0",
+ "@aws-sdk/middleware-logger": "3.535.0",
+ "@aws-sdk/middleware-recursion-detection": "3.535.0",
+ "@aws-sdk/middleware-user-agent": "3.540.0",
+ "@aws-sdk/region-config-resolver": "3.535.0",
+ "@aws-sdk/types": "3.535.0",
+ "@aws-sdk/util-endpoints": "3.540.0",
+ "@aws-sdk/util-user-agent-browser": "3.535.0",
+ "@aws-sdk/util-user-agent-node": "3.535.0",
+ "@smithy/config-resolver": "^2.2.0",
+ "@smithy/core": "^1.4.0",
+ "@smithy/fetch-http-handler": "^2.5.0",
+ "@smithy/hash-node": "^2.2.0",
+ "@smithy/invalid-dependency": "^2.2.0",
+ "@smithy/middleware-content-length": "^2.2.0",
+ "@smithy/middleware-endpoint": "^2.5.0",
+ "@smithy/middleware-retry": "^2.2.0",
+ "@smithy/middleware-serde": "^2.3.0",
+ "@smithy/middleware-stack": "^2.2.0",
+ "@smithy/node-config-provider": "^2.3.0",
+ "@smithy/node-http-handler": "^2.5.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "@smithy/url-parser": "^2.2.0",
+ "@smithy/util-base64": "^2.3.0",
+ "@smithy/util-body-length-browser": "^2.2.0",
+ "@smithy/util-body-length-node": "^2.3.0",
+ "@smithy/util-defaults-mode-browser": "^2.2.0",
+ "@smithy/util-defaults-mode-node": "^2.3.0",
+ "@smithy/util-endpoints": "^1.2.0",
+ "@smithy/util-middleware": "^2.2.0",
+ "@smithy/util-retry": "^2.2.0",
+ "@smithy/util-utf8": "^2.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/credential-provider-node": "^3.540.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-browser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.8.tgz",
- "integrity": "sha512-eLRHCvM1w3ZJkYcd60yKqM3d70dPB+071EDpf9ZGYqFed3xcm/+pWwNS/xM0JXRrjm0yAA19dWcdFN2IE/66pQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/client-sts": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.540.0.tgz",
+ "integrity": "sha512-ITHUQxvpqfQX6obfpIi3KYGzZYfe/I5Ixjfxoi5lB7ISCtmxqObKB1fzD93wonkMJytJ7LUO8panZl/ojiJ1uw==",
"dependencies": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/core": "3.535.0",
+ "@aws-sdk/middleware-host-header": "3.535.0",
+ "@aws-sdk/middleware-logger": "3.535.0",
+ "@aws-sdk/middleware-recursion-detection": "3.535.0",
+ "@aws-sdk/middleware-user-agent": "3.540.0",
+ "@aws-sdk/region-config-resolver": "3.535.0",
+ "@aws-sdk/types": "3.535.0",
+ "@aws-sdk/util-endpoints": "3.540.0",
+ "@aws-sdk/util-user-agent-browser": "3.535.0",
+ "@aws-sdk/util-user-agent-node": "3.535.0",
+ "@smithy/config-resolver": "^2.2.0",
+ "@smithy/core": "^1.4.0",
+ "@smithy/fetch-http-handler": "^2.5.0",
+ "@smithy/hash-node": "^2.2.0",
+ "@smithy/invalid-dependency": "^2.2.0",
+ "@smithy/middleware-content-length": "^2.2.0",
+ "@smithy/middleware-endpoint": "^2.5.0",
+ "@smithy/middleware-retry": "^2.2.0",
+ "@smithy/middleware-serde": "^2.3.0",
+ "@smithy/middleware-stack": "^2.2.0",
+ "@smithy/node-config-provider": "^2.3.0",
+ "@smithy/node-http-handler": "^2.5.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "@smithy/url-parser": "^2.2.0",
+ "@smithy/util-base64": "^2.3.0",
+ "@smithy/util-body-length-browser": "^2.2.0",
+ "@smithy/util-body-length-node": "^2.3.0",
+ "@smithy/util-defaults-mode-browser": "^2.2.0",
+ "@smithy/util-defaults-mode-node": "^2.3.0",
+ "@smithy/util-endpoints": "^1.2.0",
+ "@smithy/util-middleware": "^2.2.0",
+ "@smithy/util-retry": "^2.2.0",
+ "@smithy/util-utf8": "^2.3.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "@aws-sdk/credential-provider-node": "^3.540.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-defaults-mode-node": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.8.tgz",
- "integrity": "sha512-Tajvdyg5+k77j6AOrwSCZgi7KdBizqPNs3HCnFGRoxDjzh+CjPLaLrXbIRB0lsAmqYmRHIU34IogByaqvDrkBQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/client-sts/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/core": {
+ "version": "3.535.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.535.0.tgz",
+ "integrity": "sha512-+Yusa9HziuaEDta1UaLEtMAtmgvxdxhPn7jgfRY6PplqAqgsfa5FR83sxy5qr2q7xjQTwHtV4MjQVuOjG9JsLw==",
"dependencies": {
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
+ "@smithy/core": "^1.4.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/signature-v4": "^2.2.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "fast-xml-parser": "4.2.5",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">= 10.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-endpoints": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz",
- "integrity": "sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/core/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.535.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz",
+ "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==",
"dependencies": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-hex-encoding": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
- "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.535.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.535.0.tgz",
+ "integrity": "sha512-kdj1wCmOMZ29jSlUskRqN04S6fJ4dvt0Nq9Z32SA6wO7UG8ht6Ot9h/au/eTWJM3E1somZ7D771oK7dQt9b8yw==",
"dependencies": {
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/fetch-http-handler": "^2.5.0",
+ "@smithy/node-http-handler": "^2.5.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/protocol-http": "^3.3.0",
+ "@smithy/smithy-client": "^2.5.0",
+ "@smithy/types": "^2.12.0",
+ "@smithy/util-stream": "^2.2.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-middleware": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
- "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.540.0.tgz",
+ "integrity": "sha512-igN/RbsnulIBwqXbwsWmR3srqmtbPF1dm+JteGvUY31FW65fTVvWvSr945Y/cf1UbhPmIQXntlsqESqpkhTHwg==",
"dependencies": {
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/client-sts": "3.540.0",
+ "@aws-sdk/credential-provider-env": "3.535.0",
+ "@aws-sdk/credential-provider-process": "3.535.0",
+ "@aws-sdk/credential-provider-sso": "3.540.0",
+ "@aws-sdk/credential-provider-web-identity": "3.540.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/credential-provider-imds": "^2.3.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/shared-ini-file-loader": "^2.4.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-retry": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
- "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.540.0.tgz",
+ "integrity": "sha512-HKQZJbLHlrHX9A0B1poiYNXIIQfy8whTjuosTCYKPDBhhUyVAQfxy/KG726j0v43IhaNPLgTGZCJve4hAsazSw==",
"dependencies": {
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/types": "^3.3.0",
+ "@aws-sdk/credential-provider-env": "3.535.0",
+ "@aws-sdk/credential-provider-http": "3.535.0",
+ "@aws-sdk/credential-provider-ini": "3.540.0",
+ "@aws-sdk/credential-provider-process": "3.535.0",
+ "@aws-sdk/credential-provider-sso": "3.540.0",
+ "@aws-sdk/credential-provider-web-identity": "3.540.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/credential-provider-imds": "^2.3.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/shared-ini-file-loader": "^2.4.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.6.tgz",
- "integrity": "sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.535.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz",
+ "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==",
"dependencies": {
- "@smithy/fetch-http-handler": "^3.2.1",
- "@smithy/node-http-handler": "^3.1.2",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/shared-ini-file-loader": "^2.4.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-stream/node_modules/@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.540.0.tgz",
+ "integrity": "sha512-tKkFqK227LF5ajc5EL6asXS32p3nkofpP8G7NRpU7zOEOQCg01KUc4JRX+ItI0T007CiN1J19yNoFqHLT/SqHg==",
"dependencies": {
- "@smithy/util-buffer-from": "^3.0.0",
+ "@aws-sdk/client-sso": "3.540.0",
+ "@aws-sdk/token-providers": "3.540.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/shared-ini-file-loader": "^2.4.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/@smithy/util-uri-escape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
- "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
- "optional": true,
- "peer": true,
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.540.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.540.0.tgz",
+ "integrity": "sha512-OpDm9w3A168B44hSjpnvECP4rvnFzD86rN4VYdGADuCvEa5uEcdA/JuT5WclFPDqdWEmFBqS1pxBIJBf0g2Q9Q==",
"dependencies": {
+ "@aws-sdk/client-sts": "3.540.0",
+ "@aws-sdk/types": "3.535.0",
+ "@smithy/property-provider": "^2.2.0",
+ "@smithy/types": "^2.12.0",
"tslib": "^2.6.2"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=14.0.0"
}
},
- "node_modules/@aws-sdk/credential-providers/node_modules/tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- },
- "node_modules/@aws-sdk/credential-providers/node_modules/uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "optional": true,
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
+ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
},
"node_modules/@aws-sdk/middleware-bucket-endpoint": {
"version": "3.535.0",
@@ -13763,21 +11165,6 @@
"node": ">=8"
}
},
- "node_modules/@storybook/cli/node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
"node_modules/@storybook/cli/node_modules/semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
@@ -13850,21 +11237,6 @@
"type-fest": "^2.19.0"
}
},
- "node_modules/@storybook/codemod/node_modules/prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true,
- "bin": {
- "prettier": "bin-prettier.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
"node_modules/@storybook/codemod/node_modules/type-fest": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
@@ -26259,34 +23631,6 @@
"loose-envify": "^1.0.0"
}
},
- "node_modules/ip-address": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
- "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "jsbn": "1.1.0",
- "sprintf-js": "^1.1.3"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ip-address/node_modules/jsbn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
- "optional": true,
- "peer": true
- },
- "node_modules/ip-address/node_modules/sprintf-js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "optional": true,
- "peer": true
- },
"node_modules/ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -27343,23 +24687,6 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-circus/node_modules/babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "optional": true,
- "peer": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- },
- "engines": {
- "node": ">=10",
- "npm": ">=6"
- }
- },
"node_modules/jest-circus/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -35527,14 +32854,19 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"node_modules/prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==",
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true,
+ "license": "MIT",
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/prettier-linter-helpers": {
@@ -37981,32 +35313,6 @@
"node": ">=8.0.0"
}
},
- "node_modules/smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 6.0.0",
- "npm": ">= 3.0.0"
- }
- },
- "node_modules/socks": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
- "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "ip-address": "^9.0.5",
- "smart-buffer": "^4.2.0"
- },
- "engines": {
- "node": ">= 10.0.0",
- "npm": ">= 3.0.0"
- }
- },
"node_modules/source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -40967,1079 +38273,6 @@
}
}
},
- "@aws-sdk/client-cognito-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.609.0.tgz",
- "integrity": "sha512-3kDTpia1iN/accayoH3MbZRbDvX2tzrKrBTU7wNNoazVrh+gOMS8KCOWrOB72F0V299l4FsfQhnl9BDMVrc1iw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/client-sts": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@aws-crypto/sha256-browser": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
- "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-crypto/supports-web-crypto": "^5.2.0",
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@aws-crypto/sha256-js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
- "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-crypto/supports-web-crypto": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
- "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@aws-crypto/util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
- "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "^3.222.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz",
- "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^2.2.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@aws-sdk/client-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz",
- "integrity": "sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/client-sso-oidc": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz",
- "integrity": "sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/client-sts": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz",
- "integrity": "sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/core": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.609.0.tgz",
- "integrity": "sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/core": "^2.2.4",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/signature-v4": "^3.1.2",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-env": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz",
- "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-http": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz",
- "integrity": "sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.5",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-ini": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz",
- "integrity": "sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz",
- "integrity": "sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-process": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz",
- "integrity": "sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz",
- "integrity": "sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/token-providers": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-web-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
- "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-host-header": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz",
- "integrity": "sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-logger": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz",
- "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-recursion-detection": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz",
- "integrity": "sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-user-agent": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz",
- "integrity": "sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/region-config-resolver": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz",
- "integrity": "sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/token-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz",
- "integrity": "sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-endpoints": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz",
- "integrity": "sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-endpoints": "^2.0.4",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-user-agent-browser": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz",
- "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-user-agent-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz",
- "integrity": "sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
- "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/config-resolver": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.4.tgz",
- "integrity": "sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/core": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.5.tgz",
- "integrity": "sha512-0kqyj93/Aa30TEXnnWRBetN8fDGjFF+u8cdIiMI8YS6CrUF2dLTavRfHKfWh5cL5d6s2ZNyEnLjBitdcKmkETQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.8",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/credential-provider-imds": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz",
- "integrity": "sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/fetch-http-handler": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz",
- "integrity": "sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/hash-node": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
- "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/invalid-dependency": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
- "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/is-array-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
- "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-content-length": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz",
- "integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-endpoint": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz",
- "integrity": "sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-retry": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.8.tgz",
- "integrity": "sha512-wmIw3t6ZbeqstUFdXtStzSSltoYrcfc28ndnr0mDSMmtMSRNduNbmneA7xiE224fVFXzbf24+0oREks1u2X7Mw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "tslib": "^2.6.2",
- "uuid": "^9.0.1"
- }
- },
- "@smithy/middleware-serde": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
- "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-stack": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
- "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/node-config-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz",
- "integrity": "sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/node-http-handler": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz",
- "integrity": "sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/abort-controller": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/protocol-http": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz",
- "integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/querystring-builder": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
- "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-uri-escape": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/querystring-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
- "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/service-error-classification": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
- "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0"
- }
- },
- "@smithy/shared-ini-file-loader": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz",
- "integrity": "sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/signature-v4": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz",
- "integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-uri-escape": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/smithy-client": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.6.tgz",
- "integrity": "sha512-w9oboI661hfptr26houZ5mdKc//DMxkuOMXSaIiALqGn4bHYT9S4U69BBS6tHX4TZHgShmhcz0d6aXk7FY5soA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.6",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/url-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
- "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/querystring-parser": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz",
- "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/util-body-length-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
- "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-body-length-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
- "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-config-provider": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
- "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-defaults-mode-browser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.8.tgz",
- "integrity": "sha512-eLRHCvM1w3ZJkYcd60yKqM3d70dPB+071EDpf9ZGYqFed3xcm/+pWwNS/xM0JXRrjm0yAA19dWcdFN2IE/66pQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-defaults-mode-node": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.8.tgz",
- "integrity": "sha512-Tajvdyg5+k77j6AOrwSCZgi7KdBizqPNs3HCnFGRoxDjzh+CjPLaLrXbIRB0lsAmqYmRHIU34IogByaqvDrkBQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-endpoints": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz",
- "integrity": "sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-hex-encoding": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
- "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-middleware": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
- "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-retry": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
- "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-stream": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.6.tgz",
- "integrity": "sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/fetch-http-handler": "^3.2.1",
- "@smithy/node-http-handler": "^3.1.2",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/util-uri-escape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
- "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- },
- "uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "optional": true,
- "peer": true
- }
- }
- },
"@aws-sdk/client-s3": {
"version": "3.540.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.540.0.tgz",
@@ -43287,61 +39520,6 @@
}
}
},
- "@aws-sdk/credential-provider-cognito-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.609.0.tgz",
- "integrity": "sha512-BqrpAXRr64dQ/uZsRB2wViGKTkVRlfp8Q+Zd7Bc8Ikk+YXjPtl+IyWXKtdKQ3LBO255KwAcPmra5oFC+2R1GOQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- }
- }
- },
"@aws-sdk/credential-provider-env": {
"version": "3.535.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz",
@@ -43493,1067 +39671,6 @@
}
}
},
- "@aws-sdk/credential-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.609.0.tgz",
- "integrity": "sha512-bJKMY4QwRVderh8R2s9kukoZhuNZew/xzwPa9DRRFVOIsznsS0faAdmAAFrKb8e06YyQq6DiZP0BfFyVHAXE2A==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/client-cognito-identity": "3.609.0",
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/client-sts": "3.609.0",
- "@aws-sdk/credential-provider-cognito-identity": "3.609.0",
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@aws-crypto/sha256-browser": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz",
- "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-js": "^5.2.0",
- "@aws-crypto/supports-web-crypto": "^5.2.0",
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "@aws-sdk/util-locate-window": "^3.0.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-crypto/sha256-js": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz",
- "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/util": "^5.2.0",
- "@aws-sdk/types": "^3.222.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-crypto/supports-web-crypto": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz",
- "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@aws-crypto/util": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz",
- "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "^3.222.0",
- "@smithy/util-utf8": "^2.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/client-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.609.0.tgz",
- "integrity": "sha512-gqXGFDkIpKHCKAbeJK4aIDt3tiwJ26Rf5Tqw9JS6BYXsdMeOB8FTzqD9R+Yc1epHd8s5L94sdqXT5PapgxFZrg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@aws-sdk/client-sso-oidc": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.609.0.tgz",
- "integrity": "sha512-0bNPAyPdkWkS9EGB2A9BZDkBNrnVCBzk5lYRezoT4K3/gi9w1DTYH5tuRdwaTZdxW19U1mq7CV0YJJARKO1L9Q==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@aws-sdk/client-sts": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.609.0.tgz",
- "integrity": "sha512-A0B3sDKFoFlGo8RYRjDBWHXpbgirer2bZBkCIzhSPHc1vOFHt/m2NcUoE2xnBKXJFrptL1xDkvo1P+XYp/BfcQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-crypto/sha256-browser": "5.2.0",
- "@aws-crypto/sha256-js": "5.2.0",
- "@aws-sdk/client-sso-oidc": "3.609.0",
- "@aws-sdk/core": "3.609.0",
- "@aws-sdk/credential-provider-node": "3.609.0",
- "@aws-sdk/middleware-host-header": "3.609.0",
- "@aws-sdk/middleware-logger": "3.609.0",
- "@aws-sdk/middleware-recursion-detection": "3.609.0",
- "@aws-sdk/middleware-user-agent": "3.609.0",
- "@aws-sdk/region-config-resolver": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@aws-sdk/util-user-agent-browser": "3.609.0",
- "@aws-sdk/util-user-agent-node": "3.609.0",
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/core": "^2.2.4",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/hash-node": "^3.0.3",
- "@smithy/invalid-dependency": "^3.0.3",
- "@smithy/middleware-content-length": "^3.0.3",
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.7",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-body-length-browser": "^3.0.0",
- "@smithy/util-body-length-node": "^3.0.0",
- "@smithy/util-defaults-mode-browser": "^3.0.7",
- "@smithy/util-defaults-mode-node": "^3.0.7",
- "@smithy/util-endpoints": "^2.0.4",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@aws-sdk/core": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.609.0.tgz",
- "integrity": "sha512-ptqw+DTxLr01+pKjDUuo53SEDzI+7nFM3WfQaEo0yhDg8vWw8PER4sWj1Ysx67ksctnZesPUjqxd5SHbtdBxiA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/core": "^2.2.4",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/signature-v4": "^3.1.2",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "fast-xml-parser": "4.2.5",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-env": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.609.0.tgz",
- "integrity": "sha512-v69ZCWcec2iuV9vLVJMa6fAb5xwkzN4jYIT8yjo2c4Ia/j976Q+TPf35Pnz5My48Xr94EFcaBazrWedF+kwfuQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-http": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.609.0.tgz",
- "integrity": "sha512-GQQfB9Mk4XUZwaPsk4V3w8MqleS6ApkZKVQn3vTLAKa8Y7B2Imcpe5zWbKYjDd8MPpMWjHcBGFTVlDRFP4zwSQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/fetch-http-handler": "^3.2.0",
- "@smithy/node-http-handler": "^3.1.1",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.5",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.5",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-ini": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.609.0.tgz",
- "integrity": "sha512-hwaBfXuBTv6/eAdEsDfGcteYUW6Km7lvvubbxEdxIuJNF3vswR7RMGIXaEC37hhPkTTgd3H0TONammhwZIfkog==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.609.0.tgz",
- "integrity": "sha512-4J8/JRuqfxJDGD9jTHVCBxCvYt7/Vgj2Stlhj930mrjFPO/yRw8ilAAZxBWe0JHPX3QwepCmh4ErZe53F5ysxQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/credential-provider-env": "3.609.0",
- "@aws-sdk/credential-provider-http": "3.609.0",
- "@aws-sdk/credential-provider-ini": "3.609.0",
- "@aws-sdk/credential-provider-process": "3.609.0",
- "@aws-sdk/credential-provider-sso": "3.609.0",
- "@aws-sdk/credential-provider-web-identity": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-process": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.609.0.tgz",
- "integrity": "sha512-Ux35nGOSJKZWUIM3Ny0ROZ8cqPRUEkh+tR3X2o9ydEbFiLq3eMMyEnHJqx4EeUjLRchidlm4CCid9GxMe5/gdw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-sso": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.609.0.tgz",
- "integrity": "sha512-oQPGDKMMIxjvTcm86g07RPYeC7mCNk+29dPpY15ZAPRpAF7F0tircsC3wT9fHzNaKShEyK5LuI5Kg/uxsdy+Iw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/client-sso": "3.609.0",
- "@aws-sdk/token-providers": "3.609.0",
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/credential-provider-web-identity": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.609.0.tgz",
- "integrity": "sha512-U+PG8NhlYYF45zbr1km3ROtBMYqyyj/oK8NRp++UHHeuavgrP+4wJ4wQnlEaKvJBjevfo3+dlIBcaeQ7NYejWg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-host-header": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.609.0.tgz",
- "integrity": "sha512-iTKfo158lc4jLDfYeZmYMIBHsn8m6zX+XB6birCSNZ/rrlzAkPbGE43CNdKfvjyWdqgLMRXF+B+OcZRvqhMXPQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-logger": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz",
- "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-recursion-detection": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.609.0.tgz",
- "integrity": "sha512-6sewsYB7/o/nbUfA99Aa/LokM+a/u4Wpm/X2o0RxOsDtSB795ObebLJe2BxY5UssbGaWkn7LswyfvrdZNXNj1w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/middleware-user-agent": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.609.0.tgz",
- "integrity": "sha512-nbq7MXRmeXm4IDqh+sJRAxGPAq0OfGmGIwKvJcw66hLoG8CmhhVMZmIAEBDFr57S+YajGwnLLRt+eMI05MMeVA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@aws-sdk/util-endpoints": "3.609.0",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/region-config-resolver": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.609.0.tgz",
- "integrity": "sha512-lMHBG8zg9GWYBc9/XVPKyuAUd7iKqfPP7z04zGta2kGNOKbUTeqmAdc1gJGku75p4kglIPlGBorOxti8DhRmKw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/token-providers": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.609.0.tgz",
- "integrity": "sha512-WvhW/7XSf+H7YmtiIigQxfDVZVZI7mbKikQ09YpzN7FeN3TmYib1+0tB+EE9TbICkwssjiFc71FEBEh4K9grKQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/types": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz",
- "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-endpoints": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.609.0.tgz",
- "integrity": "sha512-Rh+3V8dOvEeE1aQmUy904DYWtLUEJ7Vf5XBPlQ6At3pBhp+zpXbsnpZzVL33c8lW1xfj6YPwtO6gOeEsl1juCQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-endpoints": "^2.0.4",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-user-agent-browser": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz",
- "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "@aws-sdk/util-user-agent-node": {
- "version": "3.609.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.609.0.tgz",
- "integrity": "sha512-DlZBwQ/HkZyf3pOWc7+wjJRk5R7x9YxHhs2szHwtv1IW30KMabjjjX0GMlGJ9LLkBHkbaaEY/w9Tkj12XRLhRg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@aws-sdk/types": "3.609.0",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/abort-controller": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz",
- "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/config-resolver": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.4.tgz",
- "integrity": "sha512-VwiOk7TwXoE7NlNguV/aPq1hFH72tqkHCw8eWXbr2xHspRyyv9DLpLXhq+Ieje+NwoqXrY0xyQjPXdOE6cGcHA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-config-provider": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/core": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.2.5.tgz",
- "integrity": "sha512-0kqyj93/Aa30TEXnnWRBetN8fDGjFF+u8cdIiMI8YS6CrUF2dLTavRfHKfWh5cL5d6s2ZNyEnLjBitdcKmkETQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-retry": "^3.0.8",
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/credential-provider-imds": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.1.3.tgz",
- "integrity": "sha512-U1Yrv6hx/mRK6k8AncuI6jLUx9rn0VVSd9NPEX6pyYFBfkSkChOc/n4zUb8alHUVg83TbI4OdZVo1X0Zfj3ijA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/fetch-http-handler": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.1.tgz",
- "integrity": "sha512-0w0bgUvZmfa0vHN8a+moByhCJT07WN6AHKEhFSOLsDpnszm+5dLVv5utGaqbhOrZ/aF5x3xuPMs/oMCd+4O5xg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/hash-node": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz",
- "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/invalid-dependency": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz",
- "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/is-array-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz",
- "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-content-length": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.3.tgz",
- "integrity": "sha512-Dbz2bzexReYIQDWMr+gZhpwBetNXzbhnEMhYKA6urqmojO14CsXjnsoPYO8UL/xxcawn8ZsuVU61ElkLSltIUQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-endpoint": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.0.4.tgz",
- "integrity": "sha512-whUJMEPwl3ANIbXjBXZVdJNgfV2ZU8ayln7xUM47rXL2txuenI7jQ/VFFwCzy5lCmXScjp6zYtptW5Evud8e9g==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-serde": "^3.0.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "@smithy/url-parser": "^3.0.3",
- "@smithy/util-middleware": "^3.0.3",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-retry": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.8.tgz",
- "integrity": "sha512-wmIw3t6ZbeqstUFdXtStzSSltoYrcfc28ndnr0mDSMmtMSRNduNbmneA7xiE224fVFXzbf24+0oREks1u2X7Mw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-retry": "^3.0.3",
- "tslib": "^2.6.2",
- "uuid": "^9.0.1"
- }
- },
- "@smithy/middleware-serde": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz",
- "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/middleware-stack": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz",
- "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/node-config-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.3.tgz",
- "integrity": "sha512-rxdpAZczzholz6CYZxtqDu/aKTxATD5DAUDVj7HoEulq+pDSQVWzbg0btZDlxeFfa6bb2b5tUvgdX5+k8jUqcg==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/shared-ini-file-loader": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/node-http-handler": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.2.tgz",
- "integrity": "sha512-Td3rUNI7qqtoSLTsJBtsyfoG4cF/XMFmJr6Z2dX8QNzIi6tIW6YmuyFml8mJ2cNpyWNqITKbROMOFrvQjmsOvw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/abort-controller": "^3.1.1",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/querystring-builder": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/property-provider": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz",
- "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/protocol-http": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.0.3.tgz",
- "integrity": "sha512-x5jmrCWwQlx+Zv4jAtc33ijJ+vqqYN+c/ZkrnpvEe/uDas7AT7A/4Rc2CdfxgWv4WFGmEqODIrrUToPN6DDkGw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/querystring-builder": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz",
- "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "@smithy/util-uri-escape": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/querystring-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz",
- "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/service-error-classification": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz",
- "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0"
- }
- },
- "@smithy/shared-ini-file-loader": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.3.tgz",
- "integrity": "sha512-Z8Y3+08vgoDgl4HENqNnnzSISAaGrF2RoKupoC47u2wiMp+Z8P/8mDh1CL8+8ujfi2U5naNvopSBmP/BUj8b5w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/signature-v4": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-3.1.2.tgz",
- "integrity": "sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "@smithy/types": "^3.3.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-middleware": "^3.0.3",
- "@smithy/util-uri-escape": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/smithy-client": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.1.6.tgz",
- "integrity": "sha512-w9oboI661hfptr26houZ5mdKc//DMxkuOMXSaIiALqGn4bHYT9S4U69BBS6tHX4TZHgShmhcz0d6aXk7FY5soA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/middleware-endpoint": "^3.0.4",
- "@smithy/middleware-stack": "^3.0.3",
- "@smithy/protocol-http": "^4.0.3",
- "@smithy/types": "^3.3.0",
- "@smithy/util-stream": "^3.0.6",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/types": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz",
- "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/url-parser": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz",
- "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/querystring-parser": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-base64": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz",
- "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/util-body-length-browser": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz",
- "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-body-length-node": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz",
- "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-buffer-from": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz",
- "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/is-array-buffer": "^3.0.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-config-provider": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz",
- "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-defaults-mode-browser": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.8.tgz",
- "integrity": "sha512-eLRHCvM1w3ZJkYcd60yKqM3d70dPB+071EDpf9ZGYqFed3xcm/+pWwNS/xM0JXRrjm0yAA19dWcdFN2IE/66pQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "bowser": "^2.11.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-defaults-mode-node": {
- "version": "3.0.8",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.8.tgz",
- "integrity": "sha512-Tajvdyg5+k77j6AOrwSCZgi7KdBizqPNs3HCnFGRoxDjzh+CjPLaLrXbIRB0lsAmqYmRHIU34IogByaqvDrkBQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/config-resolver": "^3.0.4",
- "@smithy/credential-provider-imds": "^3.1.3",
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/property-provider": "^3.1.3",
- "@smithy/smithy-client": "^3.1.6",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-endpoints": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.4.tgz",
- "integrity": "sha512-ZAtNf+vXAsgzgRutDDiklU09ZzZiiV/nATyqde4Um4priTmasDH+eLpp3tspL0hS2dEootyFMhu1Y6Y+tzpWBQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/node-config-provider": "^3.1.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-hex-encoding": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz",
- "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-middleware": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz",
- "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-retry": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz",
- "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/service-error-classification": "^3.0.3",
- "@smithy/types": "^3.3.0",
- "tslib": "^2.6.2"
- }
- },
- "@smithy/util-stream": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.0.6.tgz",
- "integrity": "sha512-w9i//7egejAIvplX821rPWWgaiY1dxsQUw0hXX7qwa/uZ9U3zplqTQ871jWadkcVB9gFDhkPWYVZf4yfFbZ0xA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/fetch-http-handler": "^3.2.1",
- "@smithy/node-http-handler": "^3.1.2",
- "@smithy/types": "^3.3.0",
- "@smithy/util-base64": "^3.0.0",
- "@smithy/util-buffer-from": "^3.0.0",
- "@smithy/util-hex-encoding": "^3.0.0",
- "@smithy/util-utf8": "^3.0.0",
- "tslib": "^2.6.2"
- },
- "dependencies": {
- "@smithy/util-utf8": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz",
- "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==",
- "optional": true,
- "peer": true,
- "requires": {
- "@smithy/util-buffer-from": "^3.0.0",
- "tslib": "^2.6.2"
- }
- }
- }
- },
- "@smithy/util-uri-escape": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz",
- "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==",
- "optional": true,
- "peer": true,
- "requires": {
- "tslib": "^2.6.2"
- }
- },
- "tslib": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
- "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
- "optional": true,
- "peer": true
- },
- "uuid": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
- "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
- "optional": true,
- "peer": true
- }
- }
- },
"@aws-sdk/middleware-bucket-endpoint": {
"version": "3.535.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.535.0.tgz",
@@ -51183,12 +46300,6 @@
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
- "prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true
- },
"semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
@@ -51246,12 +46357,6 @@
"type-fest": "^2.19.0"
}
},
- "prettier": {
- "version": "2.8.8",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
- "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
- "dev": true
- },
"type-fest": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
@@ -60441,33 +55546,6 @@
"loose-envify": "^1.0.0"
}
},
- "ip-address": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
- "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
- "optional": true,
- "peer": true,
- "requires": {
- "jsbn": "1.1.0",
- "sprintf-js": "^1.1.3"
- },
- "dependencies": {
- "jsbn": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
- "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==",
- "optional": true,
- "peer": true
- },
- "sprintf-js": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
- "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==",
- "optional": true,
- "peer": true
- }
- }
- },
"ipaddr.js": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
@@ -61168,19 +56246,6 @@
"color-convert": "^2.0.1"
}
},
- "babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "optional": true,
- "peer": true,
- "requires": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- }
- },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -67199,9 +62264,10 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"prettier": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz",
- "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q=="
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+ "dev": true
},
"prettier-linter-helpers": {
"version": "1.0.0",
@@ -69053,24 +64119,6 @@
"resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.0.tgz",
"integrity": "sha512-FkMq+MQc5hzYgM86nLuHI98Acwi3p4wX+a5BO9Hhw4JdK4L7WueIiZ4tXEobImPqBz2sVcV0+Mu3GRB30IGang=="
},
- "smart-buffer": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
- "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
- "optional": true,
- "peer": true
- },
- "socks": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
- "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
- "optional": true,
- "peer": true,
- "requires": {
- "ip-address": "^9.0.5",
- "smart-buffer": "^4.2.0"
- }
- },
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
diff --git a/public/code-of-conduct.md b/public/code-of-conduct.md
index 86617178d7..dc48809fd6 100644
--- a/public/code-of-conduct.md
+++ b/public/code-of-conduct.md
@@ -7,45 +7,49 @@ We are a community of, and in solidarity with, people from every gender identity
We like these hashtags: #noCodeSnobs (because we value community over efficiency), #newKidLove (because we all started somewhere), #unassumeCore (because we don't assume knowledge), and #BlackLivesMatter (because of course).
In practice:
-* We are not code snobs. We do not assume knowledge or imply there are things that somebody should know.
-* We insist on actively engaging with requests for feedback regardless of their complexity.
-* We welcome newcomers and prioritize the education of others. We strive to approach all tasks with the enthusiasm of a newcomer. Because we believe that newcomers are just as valuable in this effort as experts.
-* We consistently make the effort to actively recognize and validate multiple types of contributions.
-* We are always willing to offer help or guidance.
+
+- We are not code snobs. We do not assume knowledge or imply there are things that somebody should know.
+- We insist on actively engaging with requests for feedback regardless of their complexity.
+- We welcome newcomers and prioritize the education of others. We strive to approach all tasks with the enthusiasm of a newcomer. Because we believe that newcomers are just as valuable in this effort as experts.
+- We consistently make the effort to actively recognize and validate multiple types of contributions.
+- We are always willing to offer help or guidance.
In times of conflict:
-* We listen.
-* We clearly communicate while acknowledging other's feelings.
-* We admit when we're wrong, apologize, and accept responsibility for our actions.
-* We are continuously seeking to improve ourselves and our community.
-* We keep our community respectful and open.
-* We make everyone feel heard.
-* We are mindful and kind in our interactions.
+
+- We listen.
+- We clearly communicate while acknowledging other's feelings.
+- We admit when we're wrong, apologize, and accept responsibility for our actions.
+- We are continuously seeking to improve ourselves and our community.
+- We keep our community respectful and open.
+- We make everyone feel heard.
+- We are mindful and kind in our interactions.
In the future:
-* The future is now.
+- The future is now.
## p5.js Code of Conduct
-* **Be mindful of your language.** Any of the following behavior is unacceptable:
- * Offensive comments related to gender identity and expression, sexual orientation, race, ethnicity, language, neuro-type, size, ability, class, religion, culture, subculture, political opinion, age, skill level, occupation, or background
- * Threats of violence
- * Deliberate intimidation
- * Sexually explicit or violent material that is not contextualized and preceded by a considerate warning
- * Unwelcome sexual attention
- * Stalking or following
- * Or any other kinds of harassment
+- **Be mindful of your language.** Any of the following behavior is unacceptable:
+
+ - Offensive comments related to gender identity and expression, sexual orientation, race, ethnicity, language, neuro-type, size, ability, class, religion, culture, subculture, political opinion, age, skill level, occupation, or background
+ - Threats of violence
+ - Deliberate intimidation
+ - Sexually explicit or violent material that is not contextualized and preceded by a considerate warning
+ - Unwelcome sexual attention
+ - Stalking or following
+ - Or any other kinds of harassment
Use your best judgement. If it will possibly make others uncomfortable, do not post it.
-* **Be respectful.** Disagreement is not an opportunity to attack someone else's thoughts or opinions. Although views may differ, remember to approach every situation with patience and care.
-* **Be considerate.** Think about how your contribution will affect others in the community.
-* **Be open minded.** Embrace new people and new ideas. Our community is continually evolving and we welcome positive change.
+- **Be respectful.** Disagreement is not an opportunity to attack someone else's thoughts or opinions. Although views may differ, remember to approach every situation with patience and care.
+- **Be considerate.** Think about how your contribution will affect others in the community.
+- **Be open minded.** Embrace new people and new ideas. Our community is continually evolving and we welcome positive change.
If you believe someone is violating the code of conduct, we ask that you report it by emailing [hello@p5js.org](mailto:hello@p5js.org). Please include your name and a description of the incident, and we will get back to you ASAP.
Sometimes, participants violating the Code of Conduct are unaware that their behavior is harmful, and an open conversation clears things up to move forward. However, if a participant continues with the behavior, the p5.js team may take any action they deem appropriate, up to and including expulsion from all p5.js spaces and identification of the participant as a harasser to other p5.js members or the general public.
---
-This statement is licensed under a [Creative Commons license](https://creativecommons.org/licenses/by-sa/4.0/). Please feel free to share and remix with attribution.
\ No newline at end of file
+
+This statement is licensed under a [Creative Commons license](https://creativecommons.org/licenses/by-sa/4.0/). Please feel free to share and remix with attribution.
diff --git a/public/privacy-policy.md b/public/privacy-policy.md
index 6d2bd4b7d4..3b117ee7ac 100644
--- a/public/privacy-policy.md
+++ b/public/privacy-policy.md
@@ -1,13 +1,12 @@
# p5.js Editor Privacy Policy
-
-The Processing Foundation knows that you value your privacy. Your privacy is important to the Processing Foundation, too. This “Privacy Policy” focuses and covers the data practices of editor.p5js.org, including any content, functionality, and services offered on or through editor.p5js.org (“p5.js Editor” or “Website"), the Website on which this policy is posted, which is owned and operated by the Processing Foundation. This Privacy Policy is designed to tell you about our practices regarding collection, use, and disclosure of information that you may provide via the Website. Please take a moment to read our privacy practices and contact the Processing Foundation with any questions or concerns.
+The Processing Foundation knows that you value your privacy. Your privacy is important to the Processing Foundation, too. This “Privacy Policy” focuses and covers the data practices of editor.p5js.org, including any content, functionality, and services offered on or through editor.p5js.org (“p5.js Editor” or “Website"), the Website on which this policy is posted, which is owned and operated by the Processing Foundation. This Privacy Policy is designed to tell you about our practices regarding collection, use, and disclosure of information that you may provide via the Website. Please take a moment to read our privacy practices and contact the Processing Foundation with any questions or concerns.
Each time you access the Website, the current version of this policy will apply. Policy changes will be reflected on this page. Users will be notified and are required to accept all changes to this policy in order to access the Website. The Processing Foundation still encourages you to regularly check the date of this policy and review any changes made since the last time you used the Website.
Effective date: **February 1, 2021**
-______________________________________________________________________
+---
1. [What Information May We Collect?](#what-information-may-we-collect)
2. [Automatic Collection of Data](#automatic-collection-of-data)
@@ -21,127 +20,105 @@ ______________________________________________________________________
10. [Ways You Can Control Information That Is Collected](#ways-you-can-control-information-that-is-collected)
11. [How We Respond To "Do Not Track" Signals](#how-we-respond-to-do-not-track-signals)
12. [Contact Information](#contact-information)
-______________________________________________________________________
+---
## What Information May We Collect?
-
### Generally
In order to allow p5.js Editor to function and provide the services therein, we collect information. Some information you provide directly to us through the website and some may be collected from third parties. Some of the information we collect will be personally identifiable information, which is information that identifies you, or can be combined with other data, to identify you as a specific individual.
-
### Personal information
We collect information you provide to us.
-For example, we collect information when you create an account, request support, or otherwise communicate with us.
+For example, we collect information when you create an account, request support, or otherwise communicate with us.
The types of personal information you may provide includes:
-
-
-* Contact information (such as name and email address);
-* Payment information (including billing address, and bank account information); and
-* Account log-in credentials (username, password).
+- Contact information (such as name and email address);
+- Payment information (including billing address, and bank account information); and
+- Account log-in credentials (username, password).
We may also collect other information from or about you, such as information provided while donating, your interests, and demographic information. You may also provide us with additional information.
-
### Email information retained
If you choose to correspond with us through our Website or via email, we may retain the content of your email together with your email address, other included information, and our responses.
-
## Automatic Collection of Data
-Through p5.js Editor, we may automatically collect information about your interactions with the Website, as well as devices on which the Website is used and accessed. This data is necessary for p5.js to work as intended, including our ability to update and facilitate the services within.
-
+Through p5.js Editor, we may automatically collect information about your interactions with the Website, as well as devices on which the Website is used and accessed. This data is necessary for p5.js to work as intended, including our ability to update and facilitate the services within.
### Device Information
When you visit the Website, we may collect certain information from you, including your Internet Protocol (IP) address, the date and time of your visit, browser type, operating system, referral URL, the specific web pages visited during your connection, and the domain name from which you accessed the Website. In addition, we may collect information about your browsing behavior, such as the date and time you visit the Website, the areas or pages of the Website that you visit, the amount of time you spend viewing the Website, the number of times you return to the Website and other clickstream data.
-
### Information from the use of the service
When you visit the Website, we may track how, and how often you use our Website, including which menus you use, pages you view, or search results you click on. You may interact with our support team during the use of our Website, in which case, we would collect information about your communications. We may also use non-personal information for statistical analysis, research, and other purposes.
-
### Cookies
Like many commercial websites, we may analyze how visitors use our Website through what is known as “cookie” technology. A cookie is a small text file that is placed on your computer when you access the Website and allows us to recognize you each time you visit the Website. We may use cookies to: (1) enhance or personalize your Website usage; (2) monitor Website usage; (3) manage the Website; and (4) improve the Website. If you choose, you can set your browser to reject cookies or you can manually delete individual or all of the cookies on your computer by following your browser’s help file directions. However, if your browser is set to reject cookies or you manually delete cookies, you may have some trouble accessing and using some of the pages and features that are currently on our Website, or that we may put on our Website in the future.
-
### Web Beacons
-We may also use web beacons on the Website, in our emails, and in our advertisements on other websites. Web beacons are tiny graphic images that are used to collect information about your Website visit, such as the pages you view and the features you use, as well as information about whether you open and/or act upon one of our emails or advertisements. We may also collect the URL or the website you visited immediately before coming to Website. Web beacons help us analyze our Website’s visitors’ behavior and measure the effectiveness of the Website and our advertising. We may work with service providers that help us track, collect, and analyze this and other site usage information.
-
+We may also use web beacons on the Website, in our emails, and in our advertisements on other websites. Web beacons are tiny graphic images that are used to collect information about your Website visit, such as the pages you view and the features you use, as well as information about whether you open and/or act upon one of our emails or advertisements. We may also collect the URL or the website you visited immediately before coming to Website. Web beacons help us analyze our Website’s visitors’ behavior and measure the effectiveness of the Website and our advertising. We may work with service providers that help us track, collect, and analyze this and other site usage information.
### Combining Information
We may combine any information we collect, including through cookies and web beacons, with other information we have collected from your use of the Website.
-
### Information sent by your mobile device
-p5.js Editor is accessible from mobile devices. The Processing Foundation may collect certain information that your mobile device sends when you use the Website, like a device identifier, user settings, and the operating system of your device, as well as information about your use of the Website while using your mobile device.
-
+p5.js Editor is accessible from mobile devices. The Processing Foundation may collect certain information that your mobile device sends when you use the Website, like a device identifier, user settings, and the operating system of your device, as well as information about your use of the Website while using your mobile device.
### Location information
Through p5.js Editor, the Processing Foundation may collect and store information about your location when you use the Website and take actions that use the location services made available through your device’s mobile operating system. We may also use location information to improve and personalize the Website for you.
-
### Public profile information
You may update or modify your profile information and contact information at any time. including removing it from the Website. Profile information may be available publicly on our Website, such as on your profile page or when you share content. In addition to using your contact information to create your account, we may use this information to send you information about our Website, respond to your requests and facilitate use of the Website.
-
## How We May Use The Information We Collect From You
-Although the Processing Foundation may use user information in any way not specifically limited by any governing laws, terms and this Privacy Policy, it is useful to understand how the Processing Foundation typically uses the information collected from users, such as:
-
-
-
-* To present p5.js Editor and its content to you;
-* Improving p5.js Editor or building new services;
-* Personalizing your experience;
-* Fulfilling your requests;
-* Providing support;
-* Creating backups and allow for disaster recovery;
-* Complying with legal obligations;
-* Facilitating research and studying your information if it is aggregated with others;
-* Troubleshooting p5.js Editor or enforcing our terms of service and privacy policy;
-* Sending you account notifications and updates about your account;
-* Encouraging feedback;
-* Maintaining User Accounts;
-* Detecting and protecting against error, fraud, malicious activity, or other suspicious or criminal activity;
-* Authenticating your identity and access to p5.js Editor;
-* Transmitting information to a third party that you authorize to receive your Personal Information through p5.js Editor;
-* Creating an export of your Personal Information based on your authorization;
-* To fulfill any other purpose for which you provide it.
-
+Although the Processing Foundation may use user information in any way not specifically limited by any governing laws, terms and this Privacy Policy, it is useful to understand how the Processing Foundation typically uses the information collected from users, such as:
+
+- To present p5.js Editor and its content to you;
+- Improving p5.js Editor or building new services;
+- Personalizing your experience;
+- Fulfilling your requests;
+- Providing support;
+- Creating backups and allow for disaster recovery;
+- Complying with legal obligations;
+- Facilitating research and studying your information if it is aggregated with others;
+- Troubleshooting p5.js Editor or enforcing our terms of service and privacy policy;
+- Sending you account notifications and updates about your account;
+- Encouraging feedback;
+- Maintaining User Accounts;
+- Detecting and protecting against error, fraud, malicious activity, or other suspicious or criminal activity;
+- Authenticating your identity and access to p5.js Editor;
+- Transmitting information to a third party that you authorize to receive your Personal Information through p5.js Editor;
+- Creating an export of your Personal Information based on your authorization;
+- To fulfill any other purpose for which you provide it.
### Successors in interest
The Processing Foundation may also disclose and transfer your personal information to any successors-in-interest in the unlikely event that the Processing Foundation is acquired by, sold to, merged with, or transferred to a third-party. Some or all of your personal information provided to the Processing Foundation could be amongst the assets transferred. Processing Foundation will make reasonable efforts to give users the opportunity to opt out of any such transfer if the new entity’s planned processing of your information differs materially from that set forth in this privacy policy.
-
## Who Do We Share Personal Data With?
-The Processing Foundation, through p5.js Editor, has the right to disclose, share, or transfer your personal information to others in such cases described below:
-
-
-
-* We may share your information with third parties, but only to the extent necessary to provide you with the Website.
-* We may share your information with employees or contractors of the Processing Foundation, but only to assist them in fulfilling their functions as employees or contractors.
-* When you give your consent to do so. For example, when we tell you that the information you provide will be shared in some way and you provide us that information.
-* When we are authorized or legally required to do so or that doing so is necessary or appropriate to comply with the law or legal processes or to respond to lawful requests or legal authorities, including but not limited to subpoenas, warrants, or court orders.
-* In connection with any merger, transfer or sale of company assets, financing, acquisition, or similar transaction or circumstance, your information to any successors-in-interest in the unlikely event that the Processing Foundation is acquired by, sold to, merged with, or transferred to a third-party, some or all of your personal information provided to the Processing Foundation could be amongst the assets transferred.
-* To enforce or apply our Privacy Policy, our [Terms of Use](https://editor.p5js.org/terms-of-use) or our other policies or agreements.
+The Processing Foundation, through p5.js Editor, has the right to disclose, share, or transfer your personal information to others in such cases described below:
+- We may share your information with third parties, but only to the extent necessary to provide you with the Website.
+- We may share your information with employees or contractors of the Processing Foundation, but only to assist them in fulfilling their functions as employees or contractors.
+- When you give your consent to do so. For example, when we tell you that the information you provide will be shared in some way and you provide us that information.
+- When we are authorized or legally required to do so or that doing so is necessary or appropriate to comply with the law or legal processes or to respond to lawful requests or legal authorities, including but not limited to subpoenas, warrants, or court orders.
+- In connection with any merger, transfer or sale of company assets, financing, acquisition, or similar transaction or circumstance, your information to any successors-in-interest in the unlikely event that the Processing Foundation is acquired by, sold to, merged with, or transferred to a third-party, some or all of your personal information provided to the Processing Foundation could be amongst the assets transferred.
+- To enforce or apply our Privacy Policy, our [Terms of Use](https://editor.p5js.org/terms-of-use) or our other policies or agreements.
### Sharing content with Third Party Services
@@ -149,165 +126,135 @@ We are not in the business of selling or leasing your information. There are, ho
p5.js Editor includes features that allow users to communicate with the Website in a variety of ways. Any personally identifiable information that you voluntarily choose to share through p5.js Editor, or in a publicly accessible area on the Website, such as by submitting your content to the Showcase, will be available to other users who access that content. Once you make your personal information available in this way, We cannot control how the recipient uses that Content.
-
### Third Party Service Providers for p5.js Editor
We work with third party services to provide website development, hosting, and maintenance as well as other services for Us. Only to the extent it is necessary for these service providers to complete their contractual obligations to Us, these third parties may have access to or process limited amounts of your personally identifiable information. Below is a list of some of the main service providers which, subject to their terms of service and privacy policies as linked below, may have access to personal information to process on Our behalf in accordance with Our instructions, Privacy Policy and any other requirements regarding confidentiality, security or integrity:
-
-
-* [Google Analytics & Google Cloud Engine](https://policies.google.com/privacy?hl=en_US) (Hosting)
-* [MongoDB Atlas](https://www.mongodb.com/legal/privacy-policy)
-* [Cloudflare](https://www.cloudflare.com/privacypolicy/)
-* [Mailgun](https://www.mailgun.com/privacy-policy/)
-* [Amazon AWS (S3)](https://aws.amazon.com/privacy/?nc1=f_pr)
-* [DockerHub](https://www.docker.com/legal/privacy)
-* [GitHub](https://docs.github.com/en/github/site-policy/github-privacy-statement)
-* [Release](https://releasehub.com/)
-* [BrowserStack](https://www.browserstack.com/)
-
+- [Google Analytics & Google Cloud Engine](https://policies.google.com/privacy?hl=en_US) (Hosting)
+- [MongoDB Atlas](https://www.mongodb.com/legal/privacy-policy)
+- [Cloudflare](https://www.cloudflare.com/privacypolicy/)
+- [Mailgun](https://www.mailgun.com/privacy-policy/)
+- [Amazon AWS (S3)](https://aws.amazon.com/privacy/?nc1=f_pr)
+- [DockerHub](https://www.docker.com/legal/privacy)
+- [GitHub](https://docs.github.com/en/github/site-policy/github-privacy-statement)
+- [Release](https://releasehub.com/)
+- [BrowserStack](https://www.browserstack.com/)
### External sites that the Website links to are not subject to this policy
P5.js Editor may feature direct integration with a variety of social networking services such as Twitter or Facebook, enabling users to share their creations. The choice to share content with these services is an optional feature for users of p5.js Editor. We will only share information with social networking services that the user chooses to share. Users are responsible for the content they choose to share, and are bound by the respective terms of service and privacy policy for each social networking service. The Processing Foundation has no responsibility to provide or maintain integration with any particular third party service and p5.js.
-
## Limitations On Data Retention
The Processing Foundation may keep your data as long as is permitted or required under the law. Additionally, data may be retained, backed up, and used in our system to satisfy any of the authorized uses under this Privacy Policy. For example, the Processing Foundation may use retained data to prevent, investigate, or identify possible wrongdoing in connection with p5.js or to comply with legal obligations. Please note that information may exist in backup storage even after it has been removed from the Processing Foundation’s active databases.
-
## Security For Your Information
Through p5.js Editor, the Processing Foundation takes reasonable measures designed to protect the information that is collected from or about you from accidental or unlawful destruction, accidental loss or unauthorized access, use, modification, interference, or disclosure. Please be aware, however, that no method of transmitting information over the internet or storing information is completely secure. Accordingly, the Processing Foundation cannot guarantee the absolute security of any information. If you have questions about security or possible reason to believe that your interaction with our Website is no longer secure (e.g., you feel that your account’s security may be compromised), please contact us immediately.
-
### Account safety
We recommend sharing personal information only with individuals and other third parties that you know and trust. In addition, we urge you to take precautionary measures in maintaining the integrity of your data. Please be responsible in making sure no one can see or has access to your personal accounts and log-in username and password information. If you use a public computer, such as the library or a university, or a shared device, always remember to log out of the Website.
If you access p5.js Editor through your employer’s computer network or through an internet café, library or other potentially non-secure internet connection, such use is at your own risk. It is your responsibility to check beforehand with the company’s privacy and security policy with respect to Internet use.
-
### Your data may be transferred to different jurisdictions
The Processing Foundation may choose to use multiple servers and computers to store information obtained through p5.js Editor. The Processing Foundation may transfer your information to servers outside of your state or country of residence. Due to technological limitations, the Processing Foundation cannot guarantee absolute security at all times. By using the Website, you are consenting to the transfer of your data to out-of-state and out-of-country servers.
-
## COPPA: Data Collection For Children Under 13
-The Processing Foundation is a non-profit organization under 501(c)(3) of the US Internal Revenue code. Because of this designation, the Children’s Online Privacy Protection Act of 1998 and its rules (collectively, “COPPA”) **do not** apply to us or our Website. (For more information, feel free to look at the FTC’s [FAQ page](https://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions-0).)
+The Processing Foundation is a non-profit organization under 501(c)(3) of the US Internal Revenue code. Because of this designation, the Children’s Online Privacy Protection Act of 1998 and its rules (collectively, “COPPA”) **do not** apply to us or our Website. (For more information, feel free to look at the FTC’s [FAQ page](https://www.ftc.gov/tips-advice/business-center/guidance/complying-coppa-frequently-asked-questions-0).)
However, we still care about the privacy rights and security of our user’s data, and want to inform parents and legal guardians (“Parents”) about our practices for collecting, using, and disclosing personal information from children under the age of 13 (“children”).
This section notifies parents of:
+- The types of information we may collect from children;
+- How we use the information we collect from children; and
+- How Parents can request access to, correction of, or a limitation of data collection.
-
-* The types of information we may collect from children;
-* How we use the information we collect from children; and
-* How Parents can request access to, correction of, or a limitation of data collection.
-
-This section only applies to children under the age of 13 and supplements our general privacy policy shown here.
-
+This section only applies to children under the age of 13 and supplements our general privacy policy shown here.
### Information We Collect from Children
-When a child creates an account, We suggest Parents, and school districts where applicable, thoroughly read and familiarize themselves with this Privacy Policy and our Terms of Use. We may ask for information, including identifiable information, to personalize and improve your child’s use of p5.js Editor. As described above, p5.js Editor may also use cookies to enable your child to sign in, to help personalize the Website, and to help the Processing Foundation administer the Website.
-
+When a child creates an account, We suggest Parents, and school districts where applicable, thoroughly read and familiarize themselves with this Privacy Policy and our Terms of Use. We may ask for information, including identifiable information, to personalize and improve your child’s use of p5.js Editor. As described above, p5.js Editor may also use cookies to enable your child to sign in, to help personalize the Website, and to help the Processing Foundation administer the Website.
### Accessing and Correcting Your Child’s Personal Information
-Parents and authorized school officials may request to review the child’s personal information maintained by us, request we correct or delete the personal information, and/or request we halt any further collection or use of your child’s information.
-
-You can review, change, or delete your child’s personal information by:
+Parents and authorized school officials may request to review the child’s personal information maintained by us, request we correct or delete the personal information, and/or request we halt any further collection or use of your child’s information.
+You can review, change, or delete your child’s personal information by:
+- Logging into your child’s account and visiting his or her account profile page.
+- Sending us an email at [privacy@p5js.org](mailto:privacy@p5js.org).
-* Logging into your child’s account and visiting his or her account profile page.
-* Sending us an email at [privacy@p5js.org](mailto:privacy@p5js.org).
-
-To protect your child’s privacy and security, we may require you to take certain steps or provide additional information to verify your identity and relationship with the child before we provide any information to make corrections.
-
+To protect your child’s privacy and security, we may require you to take certain steps or provide additional information to verify your identity and relationship with the child before we provide any information to make corrections.
## GDPR: European Union User’s Rights
-If you are within the European Union, the following may apply:
-
+If you are within the European Union, the following may apply:
-### Rights to access and correct
+### Rights to access and correct
You may be entitled to certain information and have certain rights under the General Data Protection Regulation as it applies to your data. You may have the right to request access to your data that the Processing Foundation stores. You may have the right to either correct or request deletion of your personal data from our Website. Be aware that nothing can be completely removed from the Internet. The Processing Foundation will take reasonable steps, as required by law, to honor any request for deletion of your personal information from our Website, but we cannot and do not guarantee that your data will be entirely removed. The Processing Foundation is not responsible for third parties’ policies, practices, or compliance regarding your data. If you provide third parties with personal data and wish to have it removed, you must contact those parties directly.
For any requests, contact us here: [privacy@p5js.org](mailto:privacy@p5js.org)
-
### Right to remove
-You may have the right to seek restrictions on the Processing Foundation’s processing of your data. To the extent that you provided consent to the Processing Foundation’s processing of your personal data, you have the right to withdraw that consent. For EU Users, the Processing Foundation requires only the information that is reasonably necessary to provide you with our Website.
+You may have the right to seek restrictions on the Processing Foundation’s processing of your data. To the extent that you provided consent to the Processing Foundation’s processing of your personal data, you have the right to withdraw that consent. For EU Users, the Processing Foundation requires only the information that is reasonably necessary to provide you with our Website.
For any requests, contact us here: [privacy@p5js.org](mailto:privacy@p5js.org)
-
### Small-business exception under Article 30(5)
The Processing Foundation employs less than 250 people. Accordingly, the Processing Foundation is exempt from Article 30(1) & (2), which requires organizations to “maintain a record of processing activities under its responsibility.”
-
## Your Choices As A User From The United States
The Processing Foundation is a non-profit organization under 501(c)(3) of the US Internal Revenue code. Because of this, data laws such as the CCPA **do not** apply. However, we still care about the privacy rights and security of our user’s data, and want to inform users of possible choices regarding the collection, use, and sharing of data. Contact the Processing Foundation here, [privacy@p5js.org](mailto:privacy@p5js.org), with any remaining questions, comments, or requests.
Please note that if you decide not to provide the Processing Foundation with the information that is requested, you may not be able to access some or all of the features of the Website.
-
### Rescinding your consent
-You may have the right to refuse further collection, use, and/or disclosure of your information by notifying the Processing Foundation of your rescission of consent. If you have consented to your access to and use of the Website, but wish to rescind such consent, please contact the Processing Foundation at the contact information below with the request.
+You may have the right to refuse further collection, use, and/or disclosure of your information by notifying the Processing Foundation of your rescission of consent. If you have consented to your access to and use of the Website, but wish to rescind such consent, please contact the Processing Foundation at the contact information below with the request.
The Processing Foundation will, within a reasonable amount of time, discontinue your access to and use of the Website such that no additional information may be collected. Please note, however, that if you refuse further collection, use, and/or disclosure of your information, you may not be able to access and use all or a portion of the Website.
-
### Requests to delete your data
In applicable jurisdictions, you may have the right to request that the Processing Foundation delete data collected from you. The Processing Foundation will comply with such requests in a reasonable time as required by law. However, to the extent allowed in the jurisdiction, the Processing Foundation may still retain some or all of your data in order to: (a) comply with state and federal law, (b) to prevent or assist in the prosecution of criminal or illegal conduct, (c) fulfil its service to you and complete your transactions with the Processing Foundation, (d) diagnose, debug, or otherwise repair problems related to our Website, and (e) whenever necessary to protect or ensure the privacy of your data.
-
### Notice to California users
Under Cal. Civ. Code § 1798.80, a user residing in the State of California has the right to request from the Processing Foundation a list of all third parties to which the Processing Foundation has disclosed personal information during the preceding year for direct marketing purposes (if any). For questions about this policy, please contact the Processing Foundation using the contact information provided.
-
## Ways You Can Control Information That Is Collected
We strive to provide you with choices regarding the Personal Information you provide to us. The following are some ways you may have control over your information:
-
### Tracking technologies
You can set your browser to refuse all or some browser cookies, or to alert you when cookies are being sent. If you disable or refuse cookies, please note that some parts of the Website may then be inaccessible or not function properly.
+### Location
-### Location
-
-Mobile browsers may collect real-time information about the location of your device for geo-fencing, mileage tracking, or similar purposes. If you do not want us to collect this information, you may decline our request or disable location services in your mobile device’s settings, if requested. However, opting out of the collection of location information will cause location-based features to be disabled and the online and/or mobile browsing may not function properly.
-
+Mobile browsers may collect real-time information about the location of your device for geo-fencing, mileage tracking, or similar purposes. If you do not want us to collect this information, you may decline our request or disable location services in your mobile device’s settings, if requested. However, opting out of the collection of location information will cause location-based features to be disabled and the online and/or mobile browsing may not function properly.
### Analytics
We may use third-party web analytics (Google Analytics) to better understand the users that interact with our Website. You can opt out of analytics by installing the [Google Analytics Opt-out Browser Add-on](https://tools.google.com/dlpage/gaoptout), which prohibits data transmission to Google Analytics.
-
-### Promotional offers from the Processing Foundation
+### Promotional offers from the Processing Foundation
If you do not wish to have your email address or other contact information used by the Processing Foundation to promote our own yearly donation drive and other promotional events, you can contact us to opt-out. If we have sent you a promotional email, you may opt out using the unsubscribe or opt-out link in the email, if applicable, or by sending us a return email asking to be omitted from future email distributions. This opt out does not apply to information provided to p5.js as a result of your use of the Website or other transactions.
-
## How We Respond To "Do Not Track" Signals
Your online browser settings may allow you to automatically transmit a “Do Not Track” signal to websites and online services you visit. Our Website does not respond to a “Do Not Track” signal from a visitor’s browser because this [browser feature has been deprecated](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/doNotTrack). If you would like to find out more about “Do Not Track,” please visit [www.allaboutdnt.com](http://www.allaboutdnt.com).
-
## Contact information
To ask questions or comment about this privacy policy and our privacy practices, contact us at: [privacy@p5js.org](mailto:privacy@p5js.org)
diff --git a/public/terms-of-use.md b/public/terms-of-use.md
index 2302ab3e1f..8bc84e6d91 100644
--- a/public/terms-of-use.md
+++ b/public/terms-of-use.md
@@ -2,13 +2,11 @@
These terms of use are entered into by and between You and the Processing Foundation ("Processing Foundation," "We," “Our,” or "Us"). The following terms and conditions ("Terms of Use") constitute a contractual agreement (“Agreement”) between You and the Processing Foundation. The Agreement governs access to and use of p5js.org, including any content, functionality, and services offered on or through p5js.org (“p5.js” or "Website"), and applies to anyone who uses the Website (referred to as “Users”, “User”, “You”, or “Your” as applicable).
-Please read the Terms of Use carefully before You start to use the Website. By using the Website as a guest or by creating an account and clicking to accept and agree to the Terms of Use when this option is made available to you, You accept and agree to be bound and abide by these Terms of Use and our Privacy Policy, found at [https://editor.p5js.org/privacy-policy](https://editor.p5js.org/privacy-policy), incorporated herein by reference. **If you do not want to agree to these Terms of Use or Privacy Policy, you must not access or use the Website**.
+Please read the Terms of Use carefully before You start to use the Website. By using the Website as a guest or by creating an account and clicking to accept and agree to the Terms of Use when this option is made available to you, You accept and agree to be bound and abide by these Terms of Use and our Privacy Policy, found at [https://editor.p5js.org/privacy-policy](https://editor.p5js.org/privacy-policy), incorporated herein by reference. **If you do not want to agree to these Terms of Use or Privacy Policy, you must not access or use the Website**.
**The Effective Date of this Agreement is February 1, 2021**
-______________________________________________________________________
-
-
+---
1. [Modifications to the Terms of Use](#modifications-to-the-terms-of-use)
2. [Data Collection and Use](#data-collection-and-use)
@@ -27,8 +25,7 @@ ______________________________________________________________________
15. [Entire Agreement](#entire-agreement)
16. [Your Comments and Concerns](#your-comments-and-concerns)
-______________________________________________________________________
-
+---
## Modifications to the Terms of Use
@@ -36,29 +33,22 @@ We reserve the right, in Our sole discretion, to modify or add to this Agreement
Your continued use of the Website as a guest, or by creating an account and clicking to accept and agree to the Updated Terms when this option is made available to you, following the posting of any Updated Terms constitutes Your unconditional acceptance and agreement to be bound by those changes. If You do not agree to be bound by the Updated Terms You must cease using the Website immediately, or when prompted, do not click accept.
-The Updated Terms will be effective as of the time of posting, or such later date as may be specified in the Updated Terms, and will apply to Your use of the Website from that point forward.
-
+The Updated Terms will be effective as of the time of posting, or such later date as may be specified in the Updated Terms, and will apply to Your use of the Website from that point forward.
## Data Collection and Use
-
### Acknowledgement of Our Privacy Policy
You expressly consent to the use and disclosure of personally identifiable information and other data and information as described in this Privacy Policy. Notwithstanding anything in the Privacy Policy, the Processing Foundation shall have the right to collect, extract, compile, synthesize, and analyze non-personally identifiable data or information (data or information that does not identify an entity or natural person as the source) resulting from Your access to and use of the Website. To the extent any such data or information is collected or generated by p5.js, the data and information will be solely owned by the Processing Foundation.
-
### International Storage
The Processing Foundation may access or store personal information in multiple countries and states, including countries and states outside of Your own country or state to the extent permitted by applicable law.
-
-
-
### Communications Required by Law
The Processing Foundation may be required by law to send You communications about the Website or third-party products. You agree that We may send these communications via email or by posting them on p5.js or by messaging You directly via email or the Website.
-
## Integration with Third-Party Services
The Website may connect to other websites and other third party services. Before using any third-party integrations, You are encouraged to review their terms of use and to review personal and technical security of the product or service that is the subject of the integration. The Processing Foundation shall rely on the fact that You have reviewed those materials and consented to their terms in their entirety.
@@ -69,41 +59,32 @@ By using any of third-party integrations, You agree that We may allow the provid
By using any of third party integrations, You acknowledge and agree that:
-
-
-* The Processing Foundation may transfer necessary data to the providers of those third-party applications;
-* The Processing Foundation shall not be held liable to and shall not accept any liability, obligation or responsibility whatsoever for any loss or damage in connection with the data We provide to such third parties.
+- The Processing Foundation may transfer necessary data to the providers of those third-party applications;
+- The Processing Foundation shall not be held liable to and shall not accept any liability, obligation or responsibility whatsoever for any loss or damage in connection with the data We provide to such third parties.
**User accepts and understands this risk and waives all rights to hold the Processing Foundation responsible in any way, financially or otherwise, for third party errors and results.**
-
## Accessing the Website and Account Security
We reserve the right to withdraw or amend this Website, and any service or material we provide on the Website, in Our sole discretion without notice. We will not be liable if for any reason all or any part of the Website is unavailable at any time or for any period. From time to time, we may restrict access to some parts of the Website, or the entire Website, to Users, including registered Users.
You are responsible for both:
-
-
-* Making all arrangements necessary for You to have access to the Website.
-* Ensuring that all persons who access the Website through Your internet connection are aware of these Terms of Use and comply with them.
+- Making all arrangements necessary for You to have access to the Website.
+- Ensuring that all persons who access the Website through Your internet connection are aware of these Terms of Use and comply with them.
To access the Website or some of the resources it offers, You may be asked to provide certain registration details or other information. It is a condition of Your use of the Website that all the information You provide on the Website is correct, current, and complete. You agree that all information You provide, directly and indirectly, when creating an account on p5.js, including, but not limited to, Your name, email, and device information, is governed by Our _[Privacy Policy](https://editor.p5js.org/privacy-policy)_, and You consent to all actions we take with respect to Your information consistent with Our Privacy Policy.
If You choose, or are provided with, a username, password, or any other piece of information as part of our security procedures, You must treat such information as confidential, and You must not disclose it to any other person or entity. You also acknowledge that Your account is personal to You and agree not to provide any other person with access to this Website or portions of it using Your user name, password, or other security information. You agree to notify Us immediately of any unauthorized access to or use of Your username or password or any other breach of security. You also agree to ensure that You exit from Your account at the end of each session. You should use particular caution when accessing Your account from a public or shared computer so that others are not able to view or record Your password or other personal information.
-
## General Conditions
You agree to the following conditions for Your use of the Website:
-
-
-* We reserve the right to add or remove features from the Website at any time.
-* We reserve the right to refuse access to Our Website to anyone for any reason at any time.
-* We reserve the right to force forfeiture of any username or account that becomes inactive, contains profanity, violates this Agreement, defames, or may mislead other users.
-* We may limit or terminate the Agreement, Your account, and seek other remedies.
-
+- We reserve the right to add or remove features from the Website at any time.
+- We reserve the right to refuse access to Our Website to anyone for any reason at any time.
+- We reserve the right to force forfeiture of any username or account that becomes inactive, contains profanity, violates this Agreement, defames, or may mislead other users.
+- We may limit or terminate the Agreement, Your account, and seek other remedies.
## User Contributions
@@ -115,81 +96,62 @@ Any User Contribution You post to the site will be considered non-confidential.
You represent and warrant that:
-
-
-* You own or control all rights in and to the User Contributions and have the right to grant the license granted above to Us and Our affiliates and service providers, and each of their and Our respective licensees, successors, and assigns.
-* All of Your User Contributions do and will comply with these Terms of Use.
+- You own or control all rights in and to the User Contributions and have the right to grant the license granted above to Us and Our affiliates and service providers, and each of their and Our respective licensees, successors, and assigns.
+- All of Your User Contributions do and will comply with these Terms of Use.
You understand and acknowledge that You are responsible for any User Contributions You submit or contribute, and You, not the Processing Foundation, have full responsibility for such content, including its legality, reliability, accuracy, and appropriateness.
We are not responsible or liable to any third party for the content or accuracy of any User Contributions posted by You or any other User of the Website.
-
## Content Standards
These content standards apply to any and all User Contributions and use of Interactive Services. User Contributions must in their entirety comply with all applicable federal, state, local, and international laws and regulations. Without limiting the foregoing, User Contributions must not:
-
-
-* Contain any material that is defamatory, obscene, indecent, abusive, offensive, harassing, violent, hateful, inflammatory, or otherwise objectionable;
-* Promote sexually explicit or pornographic material, violence, or discrimination based on race, sex, religion, nationality, disability, sexual orientation, or age;
-* Infringe any patent, trademark, trade secret, copyright, or other intellectual property or other rights of any other person;
-* Violate the legal rights (including the rights of publicity and privacy) of others or contain any material that could give rise to any civil or criminal liability under applicable laws or regulations or that otherwise may be in conflict with these Terms of Use and our [Privacy Policy](https://editor.p5js.org/privacy-policy);
-* Be likely to deceive any person;
-* Promote any illegal activity, or advocate, promote, or assist any unlawful act;
-* Cause annoyance, inconvenience, or needless anxiety or be likely to upset, embarrass, alarm, or annoy any other person;
-* Impersonate any person, or misrepresent Your identity or affiliation with any person or organization;
-* Give the impression that they emanate from or are endorsed by Us or any other person or entity, if this is not the case.
-
+- Contain any material that is defamatory, obscene, indecent, abusive, offensive, harassing, violent, hateful, inflammatory, or otherwise objectionable;
+- Promote sexually explicit or pornographic material, violence, or discrimination based on race, sex, religion, nationality, disability, sexual orientation, or age;
+- Infringe any patent, trademark, trade secret, copyright, or other intellectual property or other rights of any other person;
+- Violate the legal rights (including the rights of publicity and privacy) of others or contain any material that could give rise to any civil or criminal liability under applicable laws or regulations or that otherwise may be in conflict with these Terms of Use and our [Privacy Policy](https://editor.p5js.org/privacy-policy);
+- Be likely to deceive any person;
+- Promote any illegal activity, or advocate, promote, or assist any unlawful act;
+- Cause annoyance, inconvenience, or needless anxiety or be likely to upset, embarrass, alarm, or annoy any other person;
+- Impersonate any person, or misrepresent Your identity or affiliation with any person or organization;
+- Give the impression that they emanate from or are endorsed by Us or any other person or entity, if this is not the case.
## Prohibited Uses
You may use the Website only for lawful purposes and in accordance with these Terms of Use. You agree not to use the Website:
-
-
-* In any way that violates any applicable federal, state, local, or international law or regulation (including, without limitation, any laws regarding the export of data or software to and from the US or other countries).
-* For the purpose of exploiting, harming, or attempting to exploit or harm minors in any way by exposing them to inappropriate content, asking for personally identifiable information, or otherwise.
-* To send, knowingly receive, upload, download, use, or re-use any material that does not comply with the Content Standards set out above in these Terms of Use.
-* To transmit, or procure the sending of, any advertising or promotional material including any "junk mail," "chain letter," "spam," or any other similar solicitation.
-* To impersonate or attempt to impersonate the Processing Foundation, an employee of the Processing Foundation, another User, or any other person or entity (including, without limitation, by using email addresses or screen names associated with any of the foregoing).
-* To engage in any other conduct that restricts or inhibits anyone's use or enjoyment of the Website, or which, as determined by us, may harm the Processing Foundation or Users of the Website, or expose them to liability.
+- In any way that violates any applicable federal, state, local, or international law or regulation (including, without limitation, any laws regarding the export of data or software to and from the US or other countries).
+- For the purpose of exploiting, harming, or attempting to exploit or harm minors in any way by exposing them to inappropriate content, asking for personally identifiable information, or otherwise.
+- To send, knowingly receive, upload, download, use, or re-use any material that does not comply with the Content Standards set out above in these Terms of Use.
+- To transmit, or procure the sending of, any advertising or promotional material including any "junk mail," "chain letter," "spam," or any other similar solicitation.
+- To impersonate or attempt to impersonate the Processing Foundation, an employee of the Processing Foundation, another User, or any other person or entity (including, without limitation, by using email addresses or screen names associated with any of the foregoing).
+- To engage in any other conduct that restricts or inhibits anyone's use or enjoyment of the Website, or which, as determined by us, may harm the Processing Foundation or Users of the Website, or expose them to liability.
Additionally, You agree not to:
-
-
-* Use the Website in any manner that could disable, overburden, damage, or impair the site or interfere with any other party's use of the Website, including their ability to engage in real time activities through the Website.
-* Use any robot, spider, or other automatic device, process, or means to access the Website for any purpose, including monitoring or copying any of the material on the Website.
-* Use any manual process to monitor or copy any of the material on the Website, or for any other purpose not expressly authorized in these Terms of Use, without Our prior written consent.
-* Use any device, software, or routine that interferes with the proper working of the Website.
-* Introduce any viruses, Trojan horses, worms, logic bombs, or other material that is malicious or technologically harmful.
-* Attempt to gain unauthorized access to, interfere with, damage, or disrupt any parts of the Website, the server on which the Website is stored, or any server, computer, or database connected to the Website.
-* Attack the Website via a denial-of-service attack or a distributed denial-of-service attack.
-* Otherwise attempt to interfere with the proper working of the Website.
-
+- Use the Website in any manner that could disable, overburden, damage, or impair the site or interfere with any other party's use of the Website, including their ability to engage in real time activities through the Website.
+- Use any robot, spider, or other automatic device, process, or means to access the Website for any purpose, including monitoring or copying any of the material on the Website.
+- Use any manual process to monitor or copy any of the material on the Website, or for any other purpose not expressly authorized in these Terms of Use, without Our prior written consent.
+- Use any device, software, or routine that interferes with the proper working of the Website.
+- Introduce any viruses, Trojan horses, worms, logic bombs, or other material that is malicious or technologically harmful.
+- Attempt to gain unauthorized access to, interfere with, damage, or disrupt any parts of the Website, the server on which the Website is stored, or any server, computer, or database connected to the Website.
+- Attack the Website via a denial-of-service attack or a distributed denial-of-service attack.
+- Otherwise attempt to interfere with the proper working of the Website.
## End User Licenses
-
### Your License to the Website
Subject to Your compliance with this Agreement, We will permit You to access and use the Website solely for lawful purposes and only in accordance with the terms of this Agreement and any other agreement You may have entered into with the Processing Foundation.
-
-
-
### Your License to the Content
Unless otherwise noted on the Website, all content, data, or other information provided through the Website made by the Processing Foundation (collectively “Content”) is owned by the Processing Foundation. By accepting this Agreement, the Processing Foundation grants to You a non-exclusive, non-transferable, and revocable license to use the Website and Content only for the purposes for which these Terms of Use allow. You may not, in whole or in part, copy, modify, delete, add to, remove, publish, transmit, augment, transfer, create derivative works, sell, or participate in the sale or transfer of the Website, or in any other way exploit any of the Content, software, products, trademarks or services contained in the Website without the prior written consent from the Processing Foundation. If You would like to use the Content in a manner not permitted by this Agreement, please contact the Processing Foundation.
-
-
-
### Our License to User Content
-All user-generated content you submit to Processing Foundation is licensed to and through Processing Foundation under the Creative Commons Attribution-ShareAlike 2.0 license (located at [https://creativecommons.org/licenses/by-sa/2.0/](https://creativecommons.org/licenses/by-sa/2.0/) ). This allows others to view and remix your content. This license also allows the Processing Foundation to display, distribute, and reproduce your content on the p5.js website, through social media channels, and elsewhere. If you do not want to license your content under this license, then do not share it with Processing Foundation.
-
+All user-generated content you submit to Processing Foundation is licensed to and through Processing Foundation under the Creative Commons Attribution-ShareAlike 2.0 license (located at [https://creativecommons.org/licenses/by-sa/2.0/](https://creativecommons.org/licenses/by-sa/2.0/) ). This allows others to view and remix your content. This license also allows the Processing Foundation to display, distribute, and reproduce your content on the p5.js website, through social media channels, and elsewhere. If you do not want to license your content under this license, then do not share it with Processing Foundation.
## DMCA Infringement Notices
@@ -197,37 +159,29 @@ The Processing Foundation respects Your copyrights and other intellectual proper
[dmca@p5js.org](mailto:dmca@p5js.org)
-
-
Please provide the following information to Our Copyright Infringement Agent:
-
-
-* The identity of the infringed work, and of the allegedly infringing work;
-* Your name, address, daytime phone number, and email address (if an email is available
-* a statement that You have a good-faith belief that the use of the copyrighted work is not authorized by the owner, his or her agent, or the law;
-* a statement that the information in the notification is accurate and, under penalty of perjury, that You are authorized to act on behalf of the owner; and
-* Your electronic or physical signature
+- The identity of the infringed work, and of the allegedly infringing work;
+- Your name, address, daytime phone number, and email address (if an email is available
+- a statement that You have a good-faith belief that the use of the copyrighted work is not authorized by the owner, his or her agent, or the law;
+- a statement that the information in the notification is accurate and, under penalty of perjury, that You are authorized to act on behalf of the owner; and
+- Your electronic or physical signature
Please also note that for copyright infringements under Section 512(f) of the Copyright Act, any person who knowingly materially misrepresents that material or activity is infringing may be subject to liability.
We will notify You that we have removed or disabled access to copyright-protected material that You provided, if such removal is pursuant to a valid DMCA take-down notice that we have received. If You receive such a notice from Us, You may provide Us with a counter-notification in writing to Our designated agent that includes all of the following information:
-
-
-* Your physical or electronic signature;
-* Identification of the material that has been removed or to which access has been disabled, and the location at which the material appeared before it was removed or access to it was disabled;
-* A statement from You under the penalty of perjury, that You have a good faith belief that the material was removed or disabled as a result of a mistake or misidentification of the material to be removed or disabled; and
-* Your name, physical address and telephone number, and a statement that You consent to the jurisdiction of a court for the judicial district in which your physical address is located, or if your physical address is outside of the United States, for any judicial district in which the Processing Foundation may be located, and that You will accept service of process from the person who provided notification of allegedly infringing material or an agent of such person.
+- Your physical or electronic signature;
+- Identification of the material that has been removed or to which access has been disabled, and the location at which the material appeared before it was removed or access to it was disabled;
+- A statement from You under the penalty of perjury, that You have a good faith belief that the material was removed or disabled as a result of a mistake or misidentification of the material to be removed or disabled; and
+- Your name, physical address and telephone number, and a statement that You consent to the jurisdiction of a court for the judicial district in which your physical address is located, or if your physical address is outside of the United States, for any judicial district in which the Processing Foundation may be located, and that You will accept service of process from the person who provided notification of allegedly infringing material or an agent of such person.
The Processing Foundation reserves the right, in its sole discretion, to terminate the account or access of any User of the Website who is the subject or repeated DMCA or other infringement notifications.
-
## Indemnification
You agree to defend, indemnify, and hold harmless the Processing Foundation, its affiliates, licensors, and service providers, and its and their respective officers, directors, employees, contractors, agents, licensors, suppliers, successors, and assigns from and against any claims, liabilities, damages, judgments, awards, losses, costs, expenses, or fees (including reasonable attorneys' fees) arising out of or relating to Your violation of these Terms of Use or Your use of the Website, including, but not limited to, Your User Contributions, any use of the Content, Website, and products other than as expressly authorized in these Terms of Use, or Your use of any information obtained from the Website.
-
## Limitation on Liability
**To the fullest extent provided by law, in no event will the Processing Foundation, its affiliates, or their licensors, service providers, employees, agents, officers, or directors be liable for damages of any kind, under any legal theory, arising out of or in connection with your use, or inability to use, the website, any websites linked to it, any content on the website or such other websites, including any direct, indirect, special, incidental, consequential, or punitive damages, including but not limited to, personal injury, pain and suffering, emotional distress, loss of revenue, loss of profits, loss of business or anticipated savings, loss of use, loss of goodwill, loss of data, and whether caused by tort (including negligence), breach of contract, or otherwise, even if foreseeable.**
@@ -236,61 +190,51 @@ The limitation of liability set out above does not apply to liability resulting
**The foregoing does not affect any liability that cannot be excluded or limited under applicable law.**
-
## Dispute Resolution
For any dispute arising under this Agreement, parties agree to contact each other and attempt to resolve disputes for no less than 30 days prior to seeking an alternative method of dispute resolution.
-
### Mediation
-If settlement cannot be reached within the 30 day period, parties agree to try in good faith to settle the dispute by mediation.
-
+If settlement cannot be reached within the 30 day period, parties agree to try in good faith to settle the dispute by mediation.
### Venue
Any meeting or proceeding shall take place in New York, New York.
-
### Arbitration
-If settlement can not be reached through good faith negotiations or mediation, then any unsettled dispute shall be resolved by arbitration.
-
+If settlement can not be reached through good faith negotiations or mediation, then any unsettled dispute shall be resolved by arbitration.
### Governing Law
Dispute resolution shall be governed by New York law.
-
### Administration
Arbitration claims shall be heard by a single arbitrator, who has expertise in contracts. Parties shall come together to pick a single arbitrator within 15 days after the commencement of arbitration. If the parties fail to agree upon a single arbitrator, the arbitration provider will pick a single arbitrator who has expertise in contracts. If the parties fail to agree upon an arbitration provider within 30 days of the end of the good faith resolution period, the American Arbitration Association will be the arbitration provider.
-
### Fees
-Each party agrees to pay its half of all the applicable filing fees and arbitrator fees. Each party shall bear its own attorneys’ fees and costs upfront. The prevailing party shall be entitled to recover its attorneys’ fees and costs.
+Each party agrees to pay its half of all the applicable filing fees and arbitrator fees. Each party shall bear its own attorneys’ fees and costs upfront. The prevailing party shall be entitled to recover its attorneys’ fees and costs.
Nothing in this section shall prevent either party from seeking injunctive or equitable relief from the courts for matters related to intellectual property rights or unauthorized access to the Service.
**To the extent permitted by law, all claims must be brought in the parties’ individual capacity, and not as a plaintiff or class member in any purported class or representative proceeding, and, unless the parties agree otherwise, the arbitrator may not consolidate more than one person’s claims. You agree that, by entering into these terms, you and the Processing Foundation are each waiving the right to a trial by jury or to participate in a class action.**
-
## Waiver and Severability
Any waiver by Us of any term or condition set out in these Terms of Use shall not be deemed a further or continuing waiver of such term or condition or a waiver of any other term or condition, and any failure by Us to assert a right or provision under these Terms of Use shall not constitute a waiver of such right or provision.
If any provision of these Terms of Use is held by a court or other tribunal of competent jurisdiction to be invalid, illegal, or unenforceable for any reason, such provision shall be eliminated or limited to the minimum extent such that the remaining provisions of the Terms of Use will continue in full force and effect.
-
## Entire Agreement
The Terms of Use and Our Privacy Policy, constitute the sole and entire agreement between You and the Processing Foundation regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations, and warranties, both written and oral, regarding the Website.
-
## Your Comments and Concerns
-This website is operated by the Processing Foundation, 400 Jay Street, #175
+This website is operated by the Processing Foundation, 400 Jay Street, #175
Brooklyn, NY 11201.
diff --git a/server/controllers/embed.controller.js b/server/controllers/embed.controller.js
index 398bc0bea8..e74f24b323 100644
--- a/server/controllers/embed.controller.js
+++ b/server/controllers/embed.controller.js
@@ -19,8 +19,9 @@ export function serveProject(req, res) {
}
const { files } = project;
- const htmlFile = files.find((file) => file.name.match(/\.html$/i))
- ?.content;
+ const htmlFile = files.find((file) =>
+ file.name.match(/\.html$/i)
+ )?.content;
if (!htmlFile) {
get404Sketch((html) => res.send(html));
diff --git a/server/controllers/user.controller/__testUtils__.ts b/server/controllers/user.controller/__testUtils__.ts
index 7bc90bf0e6..8545fe0b1a 100644
--- a/server/controllers/user.controller/__testUtils__.ts
+++ b/server/controllers/user.controller/__testUtils__.ts
@@ -29,7 +29,10 @@ export const mockBaseUserSanitised: PublicUser = {
email: 'test@example.com',
username: 'tester',
preferences: mockUserPreferences,
+ feat/login-required-upload
+ apiKeys: [] as unknown as Types.DocumentArray,
apiKeys: [],
+ develop
verified: 'verified',
id: 'abc123',
totalSize: 42,
diff --git a/server/controllers/user.controller/__tests__/apiKey.test.ts b/server/controllers/user.controller/__tests__/apiKey.test.ts
index 47a0b8fe8c..2f59c4d9a6 100644
--- a/server/controllers/user.controller/__tests__/apiKey.test.ts
+++ b/server/controllers/user.controller/__tests__/apiKey.test.ts
@@ -40,8 +40,8 @@ describe('user.controller > api key', () => {
User.findById = jest.fn().mockResolvedValue(null);
await createApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -59,8 +59,8 @@ describe('user.controller > api key', () => {
User.findById = jest.fn().mockResolvedValue(user);
await createApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -75,14 +75,14 @@ describe('user.controller > api key', () => {
request.setBody({ label: 'my key' });
const user = new User();
- user.apiKeys = ([] as unknown) as Types.DocumentArray;
+ user.apiKeys = [] as unknown as Types.DocumentArray;
User.findById = jest.fn().mockResolvedValue(user);
user.save = jest.fn();
await createApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -107,8 +107,8 @@ describe('user.controller > api key', () => {
User.findById = jest.fn().mockResolvedValue(null);
await removeApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -122,13 +122,13 @@ describe('user.controller > api key', () => {
request.user = createMockUser({ id: '1234' }, true);
request.params = { keyId: 'not-a-real-key' };
const user = new User();
- user.apiKeys = ([] as unknown) as Types.DocumentArray;
+ user.apiKeys = [] as unknown as Types.DocumentArray;
User.findById = jest.fn().mockResolvedValue(user);
await removeApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -142,10 +142,10 @@ describe('user.controller > api key', () => {
const mockKey1 = { _id: 'id1', id: 'id1', label: 'first key' };
const mockKey2 = { _id: 'id2', id: 'id2', label: 'second key' };
- const apiKeys = ([
+ const apiKeys = [
mockKey1,
mockKey2
- ] as unknown) as Types.DocumentArray;
+ ] as unknown as Types.DocumentArray;
apiKeys.find = Array.prototype.find;
apiKeys.pull = jest.fn();
@@ -164,8 +164,8 @@ describe('user.controller > api key', () => {
User.findById = jest.fn().mockResolvedValue(user);
await removeApiKey(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
diff --git a/server/controllers/user.controller/__tests__/authManagement/3rdPartyManagement.test.ts b/server/controllers/user.controller/__tests__/authManagement/3rdPartyManagement.test.ts
index 2910b33569..b09af96357 100644
--- a/server/controllers/user.controller/__tests__/authManagement/3rdPartyManagement.test.ts
+++ b/server/controllers/user.controller/__tests__/authManagement/3rdPartyManagement.test.ts
@@ -34,8 +34,8 @@ describe('user.controller > auth management > 3rd party auth', () => {
describe('and when there is no user in the request', () => {
beforeEach(async () => {
await unlinkGithub(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -62,8 +62,8 @@ describe('user.controller > auth management > 3rd party auth', () => {
beforeEach(async () => {
request.user = user;
await unlinkGithub(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -83,8 +83,8 @@ describe('user.controller > auth management > 3rd party auth', () => {
describe('and when there is no user in the request', () => {
beforeEach(async () => {
await unlinkGoogle(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -111,8 +111,8 @@ describe('user.controller > auth management > 3rd party auth', () => {
beforeEach(async () => {
request.user = user;
await unlinkGoogle(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
diff --git a/server/controllers/user.controller/__tests__/authManagement/passwordManagement.test.ts b/server/controllers/user.controller/__tests__/authManagement/passwordManagement.test.ts
index b5336bffe4..a1776954ca 100644
--- a/server/controllers/user.controller/__tests__/authManagement/passwordManagement.test.ts
+++ b/server/controllers/user.controller/__tests__/authManagement/passwordManagement.test.ts
@@ -57,8 +57,8 @@ describe('user.controller > auth management > password management', () => {
User.findByEmail = jest.fn().mockResolvedValue({});
request.body = { email: 'email@gmail.com' };
await resetPasswordInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -83,8 +83,8 @@ describe('user.controller > auth management > password management', () => {
request.headers.host = 'localhost:3000';
await resetPasswordInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -123,8 +123,8 @@ describe('user.controller > auth management > password management', () => {
});
it('does not send the reset password email', async () => {
await resetPasswordInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -132,8 +132,8 @@ describe('user.controller > auth management > password management', () => {
});
it('returns a success message that does not indicate if the user exists, for security purposes', async () => {
await resetPasswordInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -163,8 +163,8 @@ describe('user.controller > auth management > password management', () => {
request.headers.host = 'localhost:3000';
await resetPasswordInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -186,8 +186,8 @@ describe('user.controller > auth management > password management', () => {
request.params = { token: 'some-token' };
await validateResetPasswordToken(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -206,8 +206,8 @@ describe('user.controller > auth management > password management', () => {
request.params = { token: 'invalid-token' };
await validateResetPasswordToken(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -237,8 +237,8 @@ describe('user.controller > auth management > password management', () => {
request.params = { token: 'valid-token' };
await validateResetPasswordToken(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -260,8 +260,8 @@ describe('user.controller > auth management > password management', () => {
request.params = { token: 'some-token' };
await updatePassword(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -280,8 +280,8 @@ describe('user.controller > auth management > password management', () => {
request.params = { token: 'invalid-token' };
await updatePassword(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -323,8 +323,8 @@ describe('user.controller > auth management > password management', () => {
});
await updatePassword(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
diff --git a/server/controllers/user.controller/__tests__/authManagement/updateSettings.test.ts b/server/controllers/user.controller/__tests__/authManagement/updateSettings.test.ts
index faf6a89297..9763c1d445 100644
--- a/server/controllers/user.controller/__tests__/authManagement/updateSettings.test.ts
+++ b/server/controllers/user.controller/__tests__/authManagement/updateSettings.test.ts
@@ -96,8 +96,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
request.user = createMockUser({ id: 'nonexistent-id' });
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -121,8 +121,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
requestBody = { ...minimumValidRequest };
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -141,8 +141,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
requestBody = { ...minimumValidRequest, username: NEW_USERNAME };
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -163,8 +163,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
requestBody = { ...minimumValidRequest, email: NEW_EMAIL };
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -192,8 +192,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
requestBody = { username: NEW_USERNAME, email: NEW_EMAIL };
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -226,8 +226,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -253,8 +253,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -281,8 +281,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -316,8 +316,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -349,8 +349,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
beforeEach(async () => {
request.setBody({ email: OLD_EMAIL });
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -375,8 +375,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
beforeEach(async () => {
request.setBody({ username: OLD_USERNAME });
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -405,8 +405,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -437,8 +437,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -469,8 +469,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -498,8 +498,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
};
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
@@ -527,8 +527,8 @@ describe('user.controller > auth management > updateSettings (email, username, p
requestBody = minimumValidRequest;
request.setBody(requestBody);
await updateSettings(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
});
diff --git a/server/controllers/user.controller/__tests__/helpers.test.ts b/server/controllers/user.controller/__tests__/helpers.test.ts
index b04bb2548a..6997219faa 100644
--- a/server/controllers/user.controller/__tests__/helpers.test.ts
+++ b/server/controllers/user.controller/__tests__/helpers.test.ts
@@ -22,14 +22,8 @@ const mockFullUser = createMockUser(
true
) as UserDocument;
-const {
- name,
- tokens,
- password,
- resetPasswordToken,
- banned,
- ...sanitised
-} = mockFullUser;
+const { name, tokens, password, resetPasswordToken, banned, ...sanitised } =
+ mockFullUser;
describe('user.controller > helpers', () => {
describe('userResponse', () => {
@@ -69,8 +63,8 @@ describe('user.controller > helpers', () => {
};
const response = new MockResponse();
await saveUser(
- (response as unknown) as Response,
- (userWithSuccessfulSave as unknown) as UserDocument
+ response as unknown as Response,
+ userWithSuccessfulSave as unknown as UserDocument
);
expect(response.json).toHaveBeenCalledWith(sanitised);
});
@@ -82,8 +76,8 @@ describe('user.controller > helpers', () => {
};
const response = new MockResponse();
await saveUser(
- (response as unknown) as Response,
- (userWithUnsuccessfulSave as unknown) as UserDocument
+ response as unknown as Response,
+ userWithUnsuccessfulSave as unknown as UserDocument
);
expect(response.status).toHaveBeenCalledWith(500);
expect(response.json).toHaveBeenCalledWith({
diff --git a/server/controllers/user.controller/__tests__/signup.test.ts b/server/controllers/user.controller/__tests__/signup.test.ts
index 51795cda9b..139f1bbf8c 100644
--- a/server/controllers/user.controller/__tests__/signup.test.ts
+++ b/server/controllers/user.controller/__tests__/signup.test.ts
@@ -49,8 +49,8 @@ describe('user.controller > signup', () => {
});
await createUser(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -74,8 +74,8 @@ describe('user.controller > signup', () => {
});
await createUser(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -97,8 +97,8 @@ describe('user.controller > signup', () => {
request.query = { check_type: 'email', email: 'test@example.com' };
await duplicateUserCheck(
- (request as unknown) as Request<{}, {}, {}, DuplicateUserCheckQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, DuplicateUserCheckQuery>,
+ response as unknown as Response,
next
);
@@ -117,8 +117,8 @@ describe('user.controller > signup', () => {
request.query = { check_type: 'username', username: 'newuser' };
await duplicateUserCheck(
- (request as unknown) as Request<{}, {}, {}, DuplicateUserCheckQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, DuplicateUserCheckQuery>,
+ response as unknown as Response,
next
);
@@ -136,8 +136,8 @@ describe('user.controller > signup', () => {
request.query = { check_type: 'username', username: 'existinguser' };
await duplicateUserCheck(
- (request as unknown) as Request<{}, {}, {}, DuplicateUserCheckQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, DuplicateUserCheckQuery>,
+ response as unknown as Response,
next
);
@@ -156,8 +156,8 @@ describe('user.controller > signup', () => {
request.query = { check_type: 'email', email: 'existing@example.com' };
await duplicateUserCheck(
- (request as unknown) as Request<{}, {}, {}, DuplicateUserCheckQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, DuplicateUserCheckQuery>,
+ response as unknown as Response,
next
);
@@ -178,8 +178,8 @@ describe('user.controller > signup', () => {
request.query = { t: 'invalidtoken' };
await verifyEmail(
- (request as unknown) as Request<{}, {}, {}, VerifyEmailQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, VerifyEmailQuery>,
+ response as unknown as Response,
next
);
@@ -214,8 +214,8 @@ describe('user.controller > signup', () => {
request.query = { t: 'validtoken' };
await verifyEmail(
- (request as unknown) as Request<{}, {}, {}, VerifyEmailQuery>,
- (response as unknown) as Response,
+ request as unknown as Request<{}, {}, {}, VerifyEmailQuery>,
+ response as unknown as Response,
next
);
@@ -237,8 +237,8 @@ describe('user.controller > signup', () => {
request.headers.host = 'localhost:3000';
await emailVerificationInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -263,8 +263,8 @@ describe('user.controller > signup', () => {
request.headers.host = 'localhost:3000';
await emailVerificationInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -296,8 +296,8 @@ describe('user.controller > signup', () => {
request.headers.host = 'localhost:3000';
await emailVerificationInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -338,8 +338,8 @@ describe('user.controller > signup', () => {
request.headers.host = 'localhost:3000';
await emailVerificationInitiate(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
diff --git a/server/controllers/user.controller/__tests__/userPreferences.test.ts b/server/controllers/user.controller/__tests__/userPreferences.test.ts
index 9fc03189a1..4041798423 100644
--- a/server/controllers/user.controller/__tests__/userPreferences.test.ts
+++ b/server/controllers/user.controller/__tests__/userPreferences.test.ts
@@ -50,8 +50,8 @@ describe('user.controller > user preferences', () => {
};
await updatePreferences(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -72,8 +72,8 @@ describe('user.controller > user preferences', () => {
request.user = createMockUser({ id: 'nonexistentid' });
await updatePreferences(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -95,8 +95,8 @@ describe('user.controller > user preferences', () => {
request.body = { preferences: { theme: 'dark' } };
await updatePreferences(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -119,8 +119,8 @@ describe('user.controller > user preferences', () => {
request.body = { cookieConsent: CookieConsentOptions.ESSENTIAL };
await updateCookieConsent(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -142,8 +142,8 @@ describe('user.controller > user preferences', () => {
request.body = { cookieConsent: true };
await updateCookieConsent(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
@@ -166,8 +166,8 @@ describe('user.controller > user preferences', () => {
request.body = { cookieConsent: true };
await updateCookieConsent(
- (request as unknown) as Request,
- (response as unknown) as Response,
+ request as unknown as Request,
+ response as unknown as Response,
next
);
diff --git a/server/middleware/__tests__/isAuthenticated.test.ts b/server/middleware/__tests__/isAuthenticated.test.ts
index b5f12d6b6f..073ca066ab 100644
--- a/server/middleware/__tests__/isAuthenticated.test.ts
+++ b/server/middleware/__tests__/isAuthenticated.test.ts
@@ -3,7 +3,7 @@ import { isAuthenticated } from '../isAuthenticated';
describe('isAuthenticated middleware', () => {
it('should call next() if user property is present', () => {
- const req = ({ user: 'any_user' } as unknown) as Request;
+ const req = { user: 'any_user' } as unknown as Request;
const res = {} as Response;
const next = jest.fn() as NextFunction;
@@ -14,10 +14,10 @@ describe('isAuthenticated middleware', () => {
it('should return 403 if user is missing', () => {
const req = { headers: {} } as Request;
- const res = ({
+ const res = {
status: jest.fn().mockReturnThis(),
send: jest.fn()
- } as unknown) as Response;
+ } as unknown as Response;
const next = jest.fn() as NextFunction;
isAuthenticated(req, res, next);
diff --git a/server/migrations/emailConsolidation.js b/server/migrations/emailConsolidation.js
index 137cccb386..f0666b6cbd 100644
--- a/server/migrations/emailConsolidation.js
+++ b/server/migrations/emailConsolidation.js
@@ -12,7 +12,6 @@ import { renderAccountConsolidation } from '../views/mail';
const mongoConnectionString = process.env.MONGO_URL;
const { ObjectId } = mongoose.Types;
-// Connect to MongoDB
mongoose.Promise = global.Promise;
mongoose.connect(mongoConnectionString, {
useNewUrlParser: true,
@@ -26,62 +25,6 @@ mongoose.connection.on('error', () => {
process.exit(1);
});
-/*
- * Requires the MongoDB Node.js Driver
- * https://mongodb.github.io/node-mongodb-native
- */
-
-const agg = [
- // eslint-disable-line
- {
- $project: {
- email: {
- $toLower: ['$email']
- }
- }
- },
- {
- $group: {
- _id: '$email',
- total: {
- $sum: 1
- }
- }
- },
- {
- $match: {
- total: {
- $gt: 1
- }
- }
- },
- {
- $sort: {
- total: -1
- }
- }
-];
-
-// steps to make this work
-// iterate through the results
-// check if any files are on AWS
-// if so, move them to the right user bucket
-// then, update the user to currentUser
-// then, after updating all of the projects
-// also update the collections
-// delete other users
-// update user email so it is all lowercase
-// then, send the email
-// then, figure out how to iterate through all of the users.
-
-// create list of duplicate users
-// User.aggregate(agg).then((result) => {
-// return fs.writeFile('duplicates.json', JSON.stringify(result), () => {
-// console.log('File written.');
-// process.exit(0);
-// });
-// });
-
let currentUser = null;
let duplicates = null;
@@ -117,7 +60,6 @@ async function consolidateAccount(email) {
console.log('UserId: ', sketch.user);
const moveSketchFilesPromises = [];
sketch.files.forEach((file) => {
- // if the file url contains sketch user
if (
file.url &&
file.url.includes(process.env.S3_BUCKET_URL_BASE) &&
@@ -177,7 +119,6 @@ async function consolidateAccount(email) {
})
.then(() => {
console.log('Migrated email to lowercase.');
- // const protocol = process.env.NODE_ENV === 'production' ? 'https' : 'http';
const mailOptions = renderAccountConsolidation({
body: {
domain: 'https://editor.p5js.org',
@@ -202,61 +143,3 @@ async function consolidateAccount(email) {
process.exit(1);
});
}
-
-// let duplicates = [
-// "5ce3d936e0f9df0022d8330c",
-// "5cff843f091745001e83c070",
-// "5d246f5db489e6001eaee6e9"
-// ];
-// let currentUser = null;
-// User.deleteMany({ _id: { $in: duplicates } }).then(() => {
-// return User.findOne({ "email": "Silverstar09@hotmail.com" })
-// }).then((result) => {
-// currentUser = result;
-// console.log('Deleted other user accounts.');
-// currentUser.email = currentUser.email.toLowerCase();
-// return currentUser.save();
-// }).then(() => {
-// const mailOptions = renderAccountConsolidation({
-// body: {
-// domain: 'https://editor.p5js.org',
-// username: currentUser.username,
-// email: currentUser.email
-// },
-// to: currentUser.email,
-// });
-
-// return new Promise((resolve, reject) => {
-// mailerService.send(mailOptions, (mailErr, result) => {
-// console.log('Sent email.');
-// if (mailErr) {
-// return reject(mailErr);
-// }
-// return resolve(result);
-// });
-// });
-// });
-
-// import s3 from '@auth0/s3';
-
-// const client = s3.createClient({
-// maxAsyncS3: 20,
-// s3RetryCount: 3,
-// s3RetryDelay: 1000,
-// multipartUploadThreshold: 20971520, // this is the default (20 MB)
-// multipartUploadSize: 15728640, // this is the default (15 MB)
-// s3Options: {
-// accessKeyId: `${process.env.AWS_ACCESS_KEY}`,
-// secretAccessKey: `${process.env.AWS_SECRET_KEY}`,
-// region: `${process.env.AWS_REGION}`
-// },
-// });
-
-// const headParams = {
-// Bucket: `${process.env.S3_BUCKET}`,
-// Key: "5c9de807f6bccf0017da7927/8b9d95ae-7ddd-452a-b398-672392c4ac43.png"
-// };
-// client.s3.headObject(headParams, (err, data) => {
-// console.log(err);
-// console.log(data);
-// });
diff --git a/server/migrations/truncate.js b/server/migrations/truncate.js
index f26e7bc495..d1db63da67 100644
--- a/server/migrations/truncate.js
+++ b/server/migrations/truncate.js
@@ -13,24 +13,33 @@ mongoose.connect(process.env.MONGO_URL, {
useMongoClient: true
});
mongoose.connection.on('error', () => {
- console.error('MongoDB Connection Error. Please make sure that MongoDB is running.');
+ console.error(
+ 'MongoDB Connection Error. Please make sure that MongoDB is running.'
+ );
process.exit(1);
});
-Project.find({}, {}, {
- timeout: true
-}).cursor().eachAsync((project) => {
- console.log(project.name);
- if (project.name.length < 256) {
- console.log('Project name is okay.');
- return Promise.resolve();
+Project.find(
+ {},
+ {},
+ {
+ timeout: true
}
- project.name = project.name.substr(0, 255);
- project.slug = slugify(project.name, '_');
- return project.save().then(() => {
- console.log('Updated sketch slug to: ' + project.slug);
+)
+ .cursor()
+ .eachAsync((project) => {
+ console.log(project.name);
+ if (project.name.length < 256) {
+ console.log('Project name is okay.');
+ return Promise.resolve();
+ }
+ project.name = project.name.substr(0, 255);
+ project.slug = slugify(project.name, '_');
+ return project.save().then(() => {
+ console.log('Updated sketch slug to: ' + project.slug);
+ });
+ })
+ .then(() => {
+ console.log('Done iterating over every sketch.');
+ process.exit(0);
});
-}).then(() => {
- console.log('Done iterating over every sketch.');
- process.exit(0);
-});
\ No newline at end of file
diff --git a/server/models/project.js b/server/models/project.js
index 1cbcc78483..25b5dc773b 100644
--- a/server/models/project.js
+++ b/server/models/project.js
@@ -85,17 +85,16 @@ projectSchema.methods.isSlugUnique = async function isSlugUnique() {
* Queries Project collection by userId and returns all Projects that match.
* @return {Promise<{ isUnique: boolean; conflictingIds: string[] }>}
*/
-projectSchema.statics.getProjectsForUserId = async function getProjectsForUserId(
- userId
-) {
- const project = this;
+projectSchema.statics.getProjectsForUserId =
+ async function getProjectsForUserId(userId) {
+ const project = this;
- return project
- .find({ user: userId })
- .sort('-createdAt')
- .select('name files id createdAt updatedAt')
- .exec();
-};
+ return project
+ .find({ user: userId })
+ .sort('-createdAt')
+ .select('name files id createdAt updatedAt')
+ .exec();
+ };
export default mongoose.models.Project ||
mongoose.model('Project', projectSchema);
diff --git a/server/models/user.ts b/server/models/user.ts
index f3a92d93ea..02108ecc29 100644
--- a/server/models/user.ts
+++ b/server/models/user.ts
@@ -318,21 +318,22 @@ userSchema.statics.findByEmailOrUsername = async function findByEmailOrUsername(
* @param {string} username
* @return {UserDocument} - Returns User Object fulfilled by User document
*/
-userSchema.statics.findByEmailAndUsername = async function findByEmailAndUsername(
- email: string,
- username: string
-): Promise {
- const user = this;
- const query = {
- $or: [{ email }, { username }]
- };
- const foundUser = await user
- .findOne(query)
- .collation({ locale: 'en', strength: 2 })
- .exec();
+userSchema.statics.findByEmailAndUsername =
+ async function findByEmailAndUsername(
+ email: string,
+ username: string
+ ): Promise {
+ const user = this;
+ const query = {
+ $or: [{ email }, { username }]
+ };
+ const foundUser = await user
+ .findOne(query)
+ .collation({ locale: 'en', strength: 2 })
+ .exec();
- return foundUser;
-};
+ return foundUser;
+ };
userSchema.index({ username: 1 }, { collation: { locale: 'en', strength: 2 } });
userSchema.index({ email: 1 }, { collation: { locale: 'en', strength: 2 } });
diff --git a/server/routes/passport.routes.ts b/server/routes/passport.routes.ts
index c54091104e..ad1740cb2d 100644
--- a/server/routes/passport.routes.ts
+++ b/server/routes/passport.routes.ts
@@ -4,36 +4,33 @@ import { UserDocument } from '../types';
const router = Router();
-const authenticateOAuth = (service: string) => (
- req: Request,
- res: Response,
- next: NextFunction
-) => {
- passport.authenticate(
- service,
- { failureRedirect: '/login' },
- (err: unknown, user: UserDocument) => {
- if (err) {
- // use query string param to show error;
- res.redirect(`/account?error=${service}`);
- return;
- }
-
- if (!user) {
- res.redirect(`/account?error=${service}NoUser`);
- return;
- }
+const authenticateOAuth =
+ (service: string) => (req: Request, res: Response, next: NextFunction) => {
+ passport.authenticate(
+ service,
+ { failureRedirect: '/login' },
+ (err: unknown, user: UserDocument) => {
+ if (err) {
+ // use query string param to show error;
+ res.redirect(`/account?error=${service}`);
+ return;
+ }
- req.logIn(user, (loginErr) => {
- if (loginErr) {
- next(loginErr);
+ if (!user) {
+ res.redirect(`/account?error=${service}NoUser`);
return;
}
- res.redirect('/');
- });
- }
- )(req, res, next);
-};
+
+ req.logIn(user, (loginErr) => {
+ if (loginErr) {
+ next(loginErr);
+ return;
+ }
+ res.redirect('/');
+ });
+ }
+ )(req, res, next);
+ };
router.get('/auth/github', passport.authenticate('github'));
router.get('/auth/github/callback', authenticateOAuth('github'));
diff --git a/server/scripts/examples.js b/server/scripts/examples.js
index 9ea067e845..ff7dcd8c68 100644
--- a/server/scripts/examples.js
+++ b/server/scripts/examples.js
@@ -29,8 +29,7 @@ mongoose.connection.on('error', () => {
async function getCategories() {
const categories = [];
const options = {
- url:
- 'https://api.github.com/repos/processing/p5.js-website-legacy/contents/src/data/examples/en',
+ url: 'https://api.github.com/repos/processing/p5.js-website-legacy/contents/src/data/examples/en',
method: 'GET',
headers: {
...headers,
@@ -222,8 +221,7 @@ async function addAssetsToProject(assets, response, project) {
async function createProjectsInP5user(projectsInAllCategories) {
const options = {
- url:
- 'https://api.github.com/repos/processing/p5.js-website-legacy/contents/src/data/examples/assets',
+ url: 'https://api.github.com/repos/processing/p5.js-website-legacy/contents/src/data/examples/assets',
method: 'GET',
headers: {
...headers,
diff --git a/server/utils/fileUtils.js b/server/utils/fileUtils.js
index cd718a27b8..f051ee2c11 100644
--- a/server/utils/fileUtils.js
+++ b/server/utils/fileUtils.js
@@ -67,10 +67,13 @@ export const MEDIA_FILE_QUOTED_REGEX = new RegExp(
export const STRING_REGEX = /(['"])((\\\1|.)*?)\1/gm;
// these are files that have to be linked to with a blob url
-export const PLAINTEXT_FILE_REGEX = /.+\.(json|txt|csv|vert|frag|tsv|xml|stl|mtl)$/i;
+export const PLAINTEXT_FILE_REGEX =
+ /.+\.(json|txt|csv|vert|frag|tsv|xml|stl|mtl)$/i;
// these are files that users would want to edit as text (maybe svg should be here?)
-export const TEXT_FILE_REGEX = /.+\.(json|txt|csv|tsv|vert|frag|js|css|html|htm|jsx|xml|stl|mtl)$/i;
+export const TEXT_FILE_REGEX =
+ /.+\.(json|txt|csv|tsv|vert|frag|js|css|html|htm|jsx|xml|stl|mtl)$/i;
export const NOT_EXTERNAL_LINK_REGEX = /^(?!(http:\/\/|https:\/\/))/;
export const EXTERNAL_LINK_REGEX = /^(http:\/\/|https:\/\/)/;
-export const CREATE_FILE_REGEX = /.+\.(json|txt|csv|tsv|js|css|frag|vert|xml|html|htm|stl|mtl)$/i;
+export const CREATE_FILE_REGEX =
+ /.+\.(json|txt|csv|tsv|js|css|frag|vert|xml|html|htm|stl|mtl)$/i;
diff --git a/server/views/404Page.js b/server/views/404Page.js
index 50f40ea206..c9b49fd196 100644
--- a/server/views/404Page.js
+++ b/server/views/404Page.js
@@ -95,8 +95,9 @@ export const get404Sketch = async () => {
const sketch = projects[randomIndex];
// Get sketch files
- let htmlFile = sketch.files.find((file) => file.name.match(/.*\.html$/i))
- .content;
+ let htmlFile = sketch.files.find((file) =>
+ file.name.match(/.*\.html$/i)
+ ).content;
const jsFiles = sketch.files.filter((file) => file.name.match(/.*\.js$/i));
const cssFiles = sketch.files.filter((file) =>
file.name.match(/.*\.css$/i)
diff --git a/translations/contributor_docs/ko/CONTRIBUTING.md b/translations/contributor_docs/ko/CONTRIBUTING.md
index 1562eac923..b30b5d031b 100644
--- a/translations/contributor_docs/ko/CONTRIBUTING.md
+++ b/translations/contributor_docs/ko/CONTRIBUTING.md
@@ -1,8 +1,9 @@
-# p5.js 웹 에디터에 기여하기
+# p5.js 웹 에디터에 기여하기
안녕하세요! p5.js 웹 에디터에 다양한 형태로 기여해주실 분들을 환영합니다. 저희 커뮤니티에 대한 기여는 **코드 작성**에 국한되지 않으며, **버그 리포팅**, **새로운 기능 제안**, **UI/UX 디자인 제작**, **문서 업데이트** 등 여러가지 형태일 수 있습니다.
## 목차
+
- [p5.js 웹 에디터에 기여하기](#p5js-웹-에디터에-기여하기)
- [목차](#목차)
- [행동 수칙](#행동-수칙)
@@ -17,41 +18,51 @@
- [기여 가이드](#기여-가이드)
- [커밋 메세지 쓰는 법](#커밋-메세지-쓰는-법)
- [팁](#팁)
-
+
## 행동 수칙
[행동 수칙](https://github.com/processing/p5.js-web-editor/blob/develop/.github/CODE_OF_CONDUCT.md)에 있는 가이드라인을 따라주시기 바랍니다.
## 어떻게 기여할 수 있을까요?
+
만약 오픈 소스에 기여하는 게 처음이신 경우라면, [오픈 소스에 어떻게 기여할 수 있는지](https://opensource.guide/how-to-contribute/)를 읽어주시기 바랍니다.
### 첫 걸음
+
어디서 시작할지 모르시겠다구요? 시작점이 될 수 있을만한 몇 가지 제안들이 여기 있습니다:
-* 오픈 소스 작업을 통해 무엇을 배우기를 희망하는지 생각해보시기 바랍니다. 웹 에디터는 풀스택 웹 애플리케이션이므로, 여러가지 분야가 있습니다:
-- UI/UX 디자인
-- 프로젝트 매니지먼트: 티켓, 풀 리퀘스트, 과업 정리
-- 프런트엔드: 리액트/리덕스, CSS/사스(Sass), 코드 미러
-- 백엔드: Node, Express, MongoDB, Jest, AWS
-- 데브옵스: Travis CI, Jest, 도커, 쿠버네티스, AWS
-* [p5.js 웹 에디터](https://editor.p5js.org)를 사용해보세요! 버그를 찾으셨나요? 이 프로젝트에 뭔가를 더하실 수 있을 것 같으신가요? 그렇다면 이슈를 열어주세요.
-* 기존 이슈들을 확장시켜보세요. 가끔은 이슈들 중에 재현 과정이 미흡하거나, 솔루션 후보들이 필요한 경우들이 있습니다. 어쩔 땐 “이거 정말 중요해!” 하고 말해주는 목소리가 필요한 경우들도 있습니다.
-* 여러분의 로컬 컴퓨터에서 [설치 단계](./installation.md)를 따라 프로젝트를 실행해보세요.
-* [개발자 문서 디렉토리](./../../contributor_docs/) 안의 문서들을 읽어보세요. 더 확장될 수 있는 뭔가가 있나요? 뭔가 빠진게 있나요?
-* [개발 가이드](./development.md)를 읽어보세요.
+
+- 오픈 소스 작업을 통해 무엇을 배우기를 희망하는지 생각해보시기 바랍니다. 웹 에디터는 풀스택 웹 애플리케이션이므로, 여러가지 분야가 있습니다:
+
+* UI/UX 디자인
+* 프로젝트 매니지먼트: 티켓, 풀 리퀘스트, 과업 정리
+* 프런트엔드: 리액트/리덕스, CSS/사스(Sass), 코드 미러
+* 백엔드: Node, Express, MongoDB, Jest, AWS
+* 데브옵스: Travis CI, Jest, 도커, 쿠버네티스, AWS
+
+- [p5.js 웹 에디터](https://editor.p5js.org)를 사용해보세요! 버그를 찾으셨나요? 이 프로젝트에 뭔가를 더하실 수 있을 것 같으신가요? 그렇다면 이슈를 열어주세요.
+- 기존 이슈들을 확장시켜보세요. 가끔은 이슈들 중에 재현 과정이 미흡하거나, 솔루션 후보들이 필요한 경우들이 있습니다. 어쩔 땐 “이거 정말 중요해!” 하고 말해주는 목소리가 필요한 경우들도 있습니다.
+- 여러분의 로컬 컴퓨터에서 [설치 단계](./installation.md)를 따라 프로젝트를 실행해보세요.
+- [개발자 문서 디렉토리](./../../contributor_docs/) 안의 문서들을 읽어보세요. 더 확장될 수 있는 뭔가가 있나요? 뭔가 빠진게 있나요?
+- [개발 가이드](./development.md)를 읽어보세요.
### 좋은 첫 이슈들
+
처음 기여를 해보시는 분들이나, 작은 과업으로 기여를 시작하고자 하는 분들이라면, [좋은 첫 이슈들](https://github.com/processing/p5.js-web-editor/labels/good%20first%20issue) 혹은 [재현 단계들을 문서화 해야 하는 이슈들](https://github.com/processing/p5.js-web-editor/issues?q=is%3Aissue+is%3Aopen+label%3A%22needs+steps+to+reproduce%22)을 확인해보시기 바랍니다. 만약 이슈가 누구에게도 할당되지 않았다면, 여러분이 그 작업을 하셔도 좋습니다! 어떻게 이슈를 해결해야 할지 모르셔도 괜찮고, 문제를 어떻게 접근해야 할지 질문해주셔도 좋습니다! 우리는 모두 배우기 위해서, 뭔가 멋진걸 만들기 위해서 여기 있는 거니까요. 커뮤니티 멤버 중 누군가가 여러분을 도와줄 수도 있을거고, 이 이슈들은 웹 에디터, 파일 구조, 개발 과정에 대해 배울 수 있게 해주는 훌륭한 이슈들입니다.
### 좋은 중간 이슈들
+
좀 더 큰 규모의 일을 하고 싶다면, [좋은 중간 이슈](https://github.com/processing/p5.js-web-editor/labels/good%20medium%20issue)로 태그 되어 있는 이슈들을 살펴보시기 바랍니다. 이 이슈들은 꽤 오랜 시간이 걸릴 수 있는 독자적인 프로젝트인데, 더 깊이 관여해 기여하고 싶다면 이런 이슈들이 적당할 것입니다!
### 프로젝트 보드
+
많은 이슈들은 서로 연관이 있으며 더 큰 프로젝트의 일부이기도 합니다. 더 큰 그림을 보기 위해서는 [모든 프로젝트](https://github.com/processing/p5.js-web-editor/projects/4) 보드를 살펴보시기 바랍니다.
### 프로젝트 아이디어
+
구글 서머 오브 코드 혹은 더 큰 프로젝트를 위한 아이디어를 찾고 있다면, 프로세싱 재단 위키에 있는 [프로젝트 리스트](https://github.com/processing/processing/wiki/Project-List#p5js-web-editor)를 확인하시기 바랍니다.
### 이슈 검색 및 태깅
+
작업할 이슈를 찾고 있다면, [높은 우선 순위](https://github.com/processing/p5.js-web-editor/labels/priority%3Ahigh) 표시가 된 티켓들부터 시작하는 걸 권장드립니다. [기능 개선](https://github.com/processing/p5.js-web-editor/labels/type%3Afeature), [버그 수정](https://github.com/processing/p5.js-web-editor/labels/type%3Abug) 등의 태그들이 있는 티켓을 살펴보시는 것도 좋은 방법입니다.
만약 어떤 이슈가 잘못된 태그를 달고 있는 것 같다면(예: 낮은 우선 순위로 표시되어 있지만 우선 순위가 높다고 생각할 때), 이슈를 업데이트 해주시기 바랍니다!
@@ -64,41 +75,41 @@
### 기여 가이드
-* [https://guides.github.com/activities/hello-world/](https://guides.github.com/activities/hello-world/)
-* [https://guides.github.com/activities/forking/](https://guides.github.com/activities/forking/)
+- [https://guides.github.com/activities/hello-world/](https://guides.github.com/activities/hello-world/)
+- [https://guides.github.com/activities/forking/](https://guides.github.com/activities/forking/)
## 커밋 메세지 쓰는 법
좋은 커밋 메세지는 최소한 세 가지 중요한 목적을 충족시켜줍니다:
-* 리뷰 절차의 속도를 높여줍니다.
-* 좋은 릴리즈 노트를 작성하는 데에 도움을 줍니다.
-* 관리자들이 어떤 변화가 왜 일어났는지 이해하기 쉽게 해줍니다.
+- 리뷰 절차의 속도를 높여줍니다.
+- 좋은 릴리즈 노트를 작성하는 데에 도움을 줍니다.
+- 관리자들이 어떤 변화가 왜 일어났는지 이해하기 쉽게 해줍니다.
커밋 메세지는 다음과 같은 구조로 작성해주시기 바랍니다:
- ```
- 변경 사항(#이슈-번호 키워드 포함)에 대한 짧은 (50 문자 이하) 요약
-
- 필요 시 더 자세한 설명을 담은 텍스트 추가.
- 72 문자 이하로 작성.
- 어떤 맥락에서는 첫 줄은 이메일의 제목으로,
- 나머지는 본문으로 간주되기도 함.
- 요약과 본문을 분리시키는 빈 줄은 중요함(본문이 아예 빠지지 않는 한);
- 분리되지 않을 경우 리베이스 같은 툴은 혼란스러워 할 수 있음.
-
- 추가 문단들은 빈 줄 이후에 온다.
-
- - 불릿 포인트도 허용됨
-
- - 불릿은 보통 스페이스 한 칸 다음에 하이픈이나 별표가 이용되며, 불릿 간에는 빈 줄이 있지만 이 관례는 상황에 따라 다르게 적용됨
-
- ```
-
-* 요약과 설명의 경우 누군가에게 무언가를 명령하듯이 작성하시기 바랍니다. “Fixed”, “Added”, “Changed” 대신 “Fix”, “Add”, “Change”로 줄을 시작하십시오.
-* 두 번째 줄은 항상 빈 줄로 남겨두십시오.
-* 설명 란에선 최대한 자세히 서술해주십시오. 이는 커밋의 의도에 대해 더 잘 이해할 수 있게 해주고, 왜 이런 변경 사항이 있었는지 문맥을 제공해줍니다.
+```
+변경 사항(#이슈-번호 키워드 포함)에 대한 짧은 (50 문자 이하) 요약
+
+필요 시 더 자세한 설명을 담은 텍스트 추가.
+72 문자 이하로 작성.
+어떤 맥락에서는 첫 줄은 이메일의 제목으로,
+나머지는 본문으로 간주되기도 함.
+요약과 본문을 분리시키는 빈 줄은 중요함(본문이 아예 빠지지 않는 한);
+분리되지 않을 경우 리베이스 같은 툴은 혼란스러워 할 수 있음.
+
+추가 문단들은 빈 줄 이후에 온다.
+
+ - 불릿 포인트도 허용됨
+
+ - 불릿은 보통 스페이스 한 칸 다음에 하이픈이나 별표가 이용되며, 불릿 간에는 빈 줄이 있지만 이 관례는 상황에 따라 다르게 적용됨
+
+```
+
+- 요약과 설명의 경우 누군가에게 무언가를 명령하듯이 작성하시기 바랍니다. “Fixed”, “Added”, “Changed” 대신 “Fix”, “Add”, “Change”로 줄을 시작하십시오.
+- 두 번째 줄은 항상 빈 줄로 남겨두십시오.
+- 설명 란에선 최대한 자세히 서술해주십시오. 이는 커밋의 의도에 대해 더 잘 이해할 수 있게 해주고, 왜 이런 변경 사항이 있었는지 문맥을 제공해줍니다.
## 팁
-* 여러분의 커밋이 무슨 일을 하는지 요약하기 어렵다면, 여러가지 논리적 변화나 버그 수정을 하나에 담고 있기 때문일 가능성이 있으며, 이런 경우에는 `git add -p `를 이용해 여러 개의 커밋으로 나누는 편이 낫습니다.
+- 여러분의 커밋이 무슨 일을 하는지 요약하기 어렵다면, 여러가지 논리적 변화나 버그 수정을 하나에 담고 있기 때문일 가능성이 있으며, 이런 경우에는 `git add -p `를 이용해 여러 개의 커밋으로 나누는 편이 낫습니다.
diff --git a/translations/contributor_docs/ko/README.md b/translations/contributor_docs/ko/README.md
index 453ad38717..a5a04ede74 100644
--- a/translations/contributor_docs/ko/README.md
+++ b/translations/contributor_docs/ko/README.md
@@ -24,15 +24,13 @@ p5.js 웹 에디터에서 버그를 발견하셨다면, [“이슈” 탭](https
버그와 기능 요청은 각각에 알맞은 저장소에 보고해주시기 바랍니다:
-* p5.js 라이브러리와 p5.dom: [https://github.com/processing/p5.js/issues](https://github.com/processing/p5.js/issues)
-* p5.accessibility: [https://github.com/processing/p5.accessibility/issues](https://github.com/processing/p5.accessibility/issues)
-* p5.sound: [https://github.com/processing/p5.js-sound/issues](https://github.com/processing/p5.js-sound/issues)
-* p5.js 웹사이트: [https://github.com/processing/p5.js-website/issues](https://github.com/processing/p5.js-website/issues)
+- p5.js 라이브러리와 p5.dom: [https://github.com/processing/p5.js/issues](https://github.com/processing/p5.js/issues)
+- p5.accessibility: [https://github.com/processing/p5.accessibility/issues](https://github.com/processing/p5.accessibility/issues)
+- p5.sound: [https://github.com/processing/p5.js-sound/issues](https://github.com/processing/p5.js-sound/issues)
+- p5.js 웹사이트: [https://github.com/processing/p5.js-website/issues](https://github.com/processing/p5.js-website/issues)
## 감사의 말
본 프로젝트는 [프로세싱 재단](https://processingfoundation.org/), [뉴욕대 ITP](https://tisch.nyu.edu/itp), [뉴욕시 교육부의 CS4All](http://cs4all.nyc/)에서 후원해주셨습니다.
-호스팅과 기술적 지원은 다음 단체들에서 해주셨습니다:
-
-
+호스팅과 기술적 지원은 다음 단체들에서 해주셨습니다:
diff --git a/translations/contributor_docs/ko/installation.md b/translations/contributor_docs/ko/installation.md
index 15abf29fc9..94c2e57614 100644
--- a/translations/contributor_docs/ko/installation.md
+++ b/translations/contributor_docs/ko/installation.md
@@ -21,15 +21,16 @@ _주의_: 다음의 설치 단계들은 유닉스 계열의 쉘을 이용한다
$ cd p5.js-web-editor
$ npm install
```
+
6. MongoDB를 설치하고 잘 실행되는지 확인하십시오
- * [homebrew](http://brew.sh/)가 있는 맥 OSX:`brew tap mongodb/brew` 이후 `brew install mongodb-community` 그리고 `brew services start mongodb-community`로 서버를 시작하거나 다음의 설치 가이드를 살펴보십시오. [맥OS를 위한 설치 가이드](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
- * 윈도우와 리눅스: [MongoDB 설치](https://docs.mongodb.com/manual/installation/)
+ - [homebrew](http://brew.sh/)가 있는 맥 OSX:`brew tap mongodb/brew` 이후 `brew install mongodb-community` 그리고 `brew services start mongodb-community`로 서버를 시작하거나 다음의 설치 가이드를 살펴보십시오. [맥OS를 위한 설치 가이드](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
+ - 윈도우와 리눅스: [MongoDB 설치](https://docs.mongodb.com/manual/installation/)
7. `$ cp .env.example .env`
8. (선택사항) 깃허브에 로그인 하고 싶을 경우 깃헙 ID를 더하는 등 특정한 행동을 가능하게 하고 싶을 경우 .env에 필수 키를 업데이트 하십시오.
9. `$ npm run fetch-examples` - 이는 p5라 불리는 유저로 예시 스케치를 다운로드 합니다.
10. `$ npm start`
11. 브라우저에서 [http://localhost:8000](http://localhost:8000)에 접속하십시오.
-12. [리액트 개발자 도구](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en)를 설치하십시오.
+12. [리액트 개발자 도구](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en)를 설치하십시오.
13. `ctrl+h`로 리덕스 개발자 툴 열기와 닫기를, 그리고 `ctrl+w`로 이동시키기를 하십시오.
## 도커 설치
@@ -41,8 +42,8 @@ _주의_: 다음의 설치 단계들은 유닉스 계열의 쉘을 이용한다
다만 이는 여러분의 컴퓨터의 상당한 용량을 차지한다는 점을 주의하십시오. 최소한 5GB의 여유 공간을 확보해두시기 바랍니다.
1. 운영 체제에 도커를 설치하십시오.
- * 맥: https://www.docker.com/docker-mac
- * 윈도우: https://www.docker.com/docker-windows
+ - 맥: https://www.docker.com/docker-mac
+ - 윈도우: https://www.docker.com/docker-windows
2. 저장소를 클론하고 cd를 이용해 해당 저장소로 들어가십시오.
3. `$ docker-compose -f docker-compose-development.yml build`
4. `$ cp .env.example .env`
@@ -66,7 +67,7 @@ _주의_: 다음의 설치 단계들은 유닉스 계열의 쉘을 이용한다
애플리케이션 중 유저가 이미지, 비디오 등을 업로드 할 수 있도록 해주는 부분을 작업하지 않는 이상 이 부분은 필수 사항은 아니라는 점을 참고하십시오. 본 프로젝트에 사용될 S3 버킷을 설치하는 과정의 [요약본](https://gist.github.com/catarak/70c9301f0fd1ac2d6b58de03f61997e3)을 참고하십시오.
-만약 여러분의 S3 버킷이 미국 동부(북 버지니아) 지역(us-east-1)에 있다면, 해당 지역은 다른 지역과 달리 표준 명명 패턴을 따르지 않기 때문에 커스텀 URL 베이스를 설정해야 합니다. 다음을 environment/.env 파일에 추가해주십시오:
+만약 여러분의 S3 버킷이 미국 동부(북 버지니아) 지역(us-east-1)에 있다면, 해당 지역은 다른 지역과 달리 표준 명명 패턴을 따르지 않기 때문에 커스텀 URL 베이스를 설정해야 합니다. 다음을 environment/.env 파일에 추가해주십시오:
`S3_BUCKET_URL_BASE=https://s3.amazonaws.com`
@@ -74,5 +75,4 @@ _주의_: 다음의 설치 단계들은 유닉스 계열의 쉘을 이용한다
`S3_BUCKET_URL_BASE=https://files.mydomain.com`
-커스텀 도메인을 사용하는데에 필요한 더 많은 정보를 보기 위해선 다음의 문서 링크를 확인하십시오:
-http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs
+커스텀 도메인을 사용하는데에 필요한 더 많은 정보를 보기 위해선 다음의 문서 링크를 확인하십시오: http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html#VirtualHostingCustomURLs
diff --git a/translations/contributor_docs/pt-br/README.md b/translations/contributor_docs/pt-br/README.md
index 4f7bb07a18..c6aa4afb28 100644
--- a/translations/contributor_docs/pt-br/README.md
+++ b/translations/contributor_docs/pt-br/README.md
@@ -1,14 +1,16 @@
Essa pasta contém documentos destinados à desenvolvedores do Editor Web de p5.js.
## Lista de Documentos
-* [Guia de contribuição](https://github.com/processing/p5.js-web-editor/blob/master/.github/CONTRIBUTING.md) - Um lugar para começar!
-* [Instalação](installation.md) - Um guia para configurar seu ambiente de desenvolvimento
-* [Desenvolvimento](development.md) - Um guia para adicionar código para o editor web
-* [Preparando um pull-request](preparing_a_pull_request.md) - Instruções para como fazer um pull-request
-* [Orientações de Acessibilidade](accessibility.md) - Orientações para escrever código para criar uma aplicação acessível
-* [Deploy](deployment.md) - Um guia para realizar um deploy em produção e todas as plataformas que estão sendo usadas
+
+- [Guia de contribuição](https://github.com/processing/p5.js-web-editor/blob/master/.github/CONTRIBUTING.md) - Um lugar para começar!
+- [Instalação](installation.md) - Um guia para configurar seu ambiente de desenvolvimento
+- [Desenvolvimento](development.md) - Um guia para adicionar código para o editor web
+- [Preparando um pull-request](preparing_a_pull_request.md) - Instruções para como fazer um pull-request
+- [Orientações de Acessibilidade](accessibility.md) - Orientações para escrever código para criar uma aplicação acessível
+- [Deploy](deployment.md) - Um guia para realizar um deploy em produção e todas as plataformas que estão sendo usadas
## Documentos para criar
-* Princípios de Design - referencie [princípios de design do p5.js](https://github.com/processing/p5.js/blob/master/contributor_docs/design_principles.md)
-* Issue Labels - referencie [issue labels do p5.js](https://github.com/processing/p5.js/blob/master/contributor_docs/issue_labels.md)
-* Estrutura de Arquivos - Uma explicação da estrutura de arquivos dessa aplicação
+
+- Princípios de Design - referencie [princípios de design do p5.js](https://github.com/processing/p5.js/blob/master/contributor_docs/design_principles.md)
+- Issue Labels - referencie [issue labels do p5.js](https://github.com/processing/p5.js/blob/master/contributor_docs/issue_labels.md)
+- Estrutura de Arquivos - Uma explicação da estrutura de arquivos dessa aplicação
diff --git a/translations/contributor_docs/pt-br/accessibility.md b/translations/contributor_docs/pt-br/accessibility.md
index 015c4e4d4e..f28bd71eba 100644
--- a/translations/contributor_docs/pt-br/accessibility.md
+++ b/translations/contributor_docs/pt-br/accessibility.md
@@ -6,15 +6,15 @@ O código para o editor web de p5.js adere os padrões de acessibilidade web. As
**Estrutura do código**
-* Leitores de tela são uma tecnologia assistiva para perda de visão, que ajuda usuários a navegar páginas web. Eles são capazes de priorizar conteúdo baseado na semantica de tags HTML. Portanto, é importante usar tags específicas como `nav`, `ul`, `li`, `section` e por aí vai. `div` é a tag menos adequada para leitores de tela. Por exemplo, [aqui está o significado semântico da tag `body`](http://html5doctor.com/element-index/#body)
-* Todos os botões/links/janelas precisam ser acessíveis ao teclado (Ao apertar tab, espaço, etc.)
-* Em casos em que tags não são adequadas para leitores de tela, podemos tomar vantagem de [tabIndex](http://webaim.org/techniques/keyboard/tabindex). Usar tabIndex assegura que todos os elementos são acessíveis pelo teclado. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/Editor.jsx#L249)
-* Enquanto abrir uma nova janela ou pop up, assegure que o foco do teclaod também irá para a nova janela. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/NewFileForm.jsx#L16)
+- Leitores de tela são uma tecnologia assistiva para perda de visão, que ajuda usuários a navegar páginas web. Eles são capazes de priorizar conteúdo baseado na semantica de tags HTML. Portanto, é importante usar tags específicas como `nav`, `ul`, `li`, `section` e por aí vai. `div` é a tag menos adequada para leitores de tela. Por exemplo, [aqui está o significado semântico da tag `body`](http://html5doctor.com/element-index/#body)
+- Todos os botões/links/janelas precisam ser acessíveis ao teclado (Ao apertar tab, espaço, etc.)
+- Em casos em que tags não são adequadas para leitores de tela, podemos tomar vantagem de [tabIndex](http://webaim.org/techniques/keyboard/tabindex). Usar tabIndex assegura que todos os elementos são acessíveis pelo teclado. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/Editor.jsx#L249)
+- Enquanto abrir uma nova janela ou pop up, assegure que o foco do teclaod também irá para a nova janela. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/NewFileForm.jsx#L16)
**Marcação**
-* Enquanto criar ícones de botões, imagens ou algo sem texto (isso não inclui o `` do HTML5), use [aria-labels](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute). [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/Toolbar.jsx#L67)
-* Todas ``s precisam ter um atributo `summary`. Isso irá assegurar que o usuário terá o contexto para que serve a tabela. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/SketchList.jsx#L39)
-* Menus `ul`s e `nav`s precisam incluir um título. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/components/Nav.jsx#L7)
+- Enquanto criar ícones de botões, imagens ou algo sem texto (isso não inclui o `` do HTML5), use [aria-labels](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute). [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/Toolbar.jsx#L67)
+- Todas ``s precisam ter um atributo `summary`. Isso irá assegurar que o usuário terá o contexto para que serve a tabela. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/modules/IDE/components/SketchList.jsx#L39)
+- Menus `ul`s e `nav`s precisam incluir um título. [exemplo de código](https://github.com/processing/p5.js-web-editor/blob/master/client/components/Nav.jsx#L7)
Para mais informações sobre acessibilidade veja o [tutorial teach access](https://teachaccess.github.io/tutorial/)
diff --git a/translations/contributor_docs/pt-br/deployment.md b/translations/contributor_docs/pt-br/deployment.md
index 7a21275cc3..03f3970e59 100644
--- a/translations/contributor_docs/pt-br/deployment.md
+++ b/translations/contributor_docs/pt-br/deployment.md
@@ -3,15 +3,16 @@
Esse documento contém informações sobre como realizar um deploy para produção, todas as plataformas e ferramentas diferentes e como configura-las.
WIP.
-* Configuração/Instalação de Produção
-* Travis
-* Docker Hub
-* Kubernetes
-* S3
-* Mailgun
-* Cloudflare
-* DNS/Dreamhost
-* mLab
+
+- Configuração/Instalação de Produção
+- Travis
+- Docker Hub
+- Kubernetes
+- S3
+- Mailgun
+- Cloudflare
+- DNS/Dreamhost
+- mLab
## Processo de Deploy
@@ -29,7 +30,7 @@ Esses são os passos que acontecem quando você realiza o deploy da aplicação.
Você só terá que fazer isso se estiver testando o ambinente de produção loclamente.
-_Nota_: Os passos de instalação assumem que você está usando um shell baseado em Unix. Se você está usando Windows, você terá que usar `copy` no lugar de `cp`.
+_Nota_: Os passos de instalação assumem que você está usando um shell baseado em Unix. Se você está usando Windows, você terá que usar `copy` no lugar de `cp`.
1. Clone esse repositório e use um `cd` para entrar nele
2. `$ npm install`
@@ -47,7 +48,7 @@ Se você está interessado em hospedar e fazer deploy da sua própria instância
1. Se cadastre para uma conta grátis em: [Heroku](https://www.heroku.com/)
2. Clique aqui: [](https://heroku.com/deploy?template=https://github.com/processing/p5.js-web-editor/tree/master)
-3. Coloque um *Nome para o App* único, ele fará parte da url(i.e. https://nome-do-app.herokuapp.com/)
+3. Coloque um _Nome para o App_ único, ele fará parte da url(i.e. https://nome-do-app.herokuapp.com/)
4. Atualize qualquer variável de configuração ou aceite os valores default para uma avaliação rápida (elas podem ser alteradas depois para permitir total funcionalidade)
-5. Clique no botão "Deploy app"
+5. Clique no botão "Deploy app"
6. Quando copleto, clique no botão "View app"
diff --git a/translations/contributor_docs/pt-br/development.md b/translations/contributor_docs/pt-br/development.md
index 3456033ff0..8c3535338b 100644
--- a/translations/contributor_docs/pt-br/development.md
+++ b/translations/contributor_docs/pt-br/development.md
@@ -3,32 +3,35 @@
Um guia para adicionar código nesse projeto.
## Instalação
+
Sigua o [guia de instalação](https://github.com/processing/p5.js-web-editor/blob/master/developer_docs/pt-br/installation.md).
## Testes
+
Para rodar a suite de testes apenas rode `npm test` (depois de instalar as dependências com `npm install`)
Um exemplo de teste unitário pode ser encontrado aqui: [Nav.test.jsx](../client/components/__test__/Nav.test.jsx).
## Design
+
- [Guia de estilo/Design System on Figma](https://github.com/processing/p5.js-web-editor/labels/good%20medium%20issues)
- [ùltimo Design no Figma](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A1). Note que o design atual no website se divergiu, partes desse design não serão implementados, mas ainda é útil telos por perto para referência.
- [Designs para dispositivos móveis](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A2529), [Designs Responsivos](https://www.figma.com/file/5KychMUfHlq97H0uDsen1U/p5-web-editor-2017.p.copy?node-id=0%3A3292)
# Tecnologias usadas
-**MERN stack** - MongoDB, Express, React/Redux e Node.
+**MERN stack** - MongoDB, Express, React/Redux e Node.
+
+- Para uma referência para a **estrutura de arquivos** que esse projeto está usando, por favor olhe no [Mern Starter](https://github.com/Hashnode/mern-starter).
- - Para uma referência para a **estrutura de arquivos** que esse projeto está usando, por favor olhe no [Mern Starter](https://github.com/Hashnode/mern-starter).
+- Esse projeto não utiliza CSS Modules, styled-components, ou outras bibliotecas CSS-in-JS, mas usa Sass. [Orientações BEM e convenções de nome](http://getbem.com/) são seguidas.
- - Esse projeto não utiliza CSS Modules, styled-components, ou outras bibliotecas CSS-in-JS, mas usa Sass. [Orientações BEM e convenções de nome](http://getbem.com/) são seguidas.
-
- - Para estilos comuns e reutilizáveis, escreva OOSCSS (Object-Oriented SCSS) com placeholders e mixins. Para organizar estilos, siga o [Padrão 7-1](https://sass-guidelin.es/#the-7-1-pattern) para Sass.
+- Para estilos comuns e reutilizáveis, escreva OOSCSS (Object-Oriented SCSS) com placeholders e mixins. Para organizar estilos, siga o [Padrão 7-1](https://sass-guidelin.es/#the-7-1-pattern) para Sass.
- - Estamos usando [ES6](http://es6-features.org/) e transpilando para ES5 usando [Babel](https://babeljs.io/).
+- Estamos usando [ES6](http://es6-features.org/) e transpilando para ES5 usando [Babel](https://babeljs.io/).
- - Para referência para o guia de estilo de Javascript, veja o [Guia de Estilo do Airbnb](https://github.com/airbnb/javascript), [React ESLint Plugin](https://github.com/yannickcr/eslint-plugin-react).
+- Para referência para o guia de estilo de Javascript, veja o [Guia de Estilo do Airbnb](https://github.com/airbnb/javascript), [React ESLint Plugin](https://github.com/yannickcr/eslint-plugin-react).
- - A configuração de ESLint é baseada em alguns boilerplates populares de React/Redux. Abra para sugerir nisso. Se em desenvolvimento, você estiver ficando irritado com o ESLint, você pode remover temporariamente o `eslint-loader` do `webpack/config.dev.js` no JavaScript loader ou desativar qualquer linha de usar o eslint comentando `// eslint-disable-line` na linha.
+- A configuração de ESLint é baseada em alguns boilerplates populares de React/Redux. Abra para sugerir nisso. Se em desenvolvimento, você estiver ficando irritado com o ESLint, você pode remover temporariamente o `eslint-loader` do `webpack/config.dev.js` no JavaScript loader ou desativar qualquer linha de usar o eslint comentando `// eslint-disable-line` na linha.
- - [Jest](https://jestjs.io/) para testes unitários e testes de snapshop junto com o [Enzyme](https://airbnb.io/enzyme/) para testar React.
\ No newline at end of file
+- [Jest](https://jestjs.io/) para testes unitários e testes de snapshop junto com o [Enzyme](https://airbnb.io/enzyme/) para testar React.
diff --git a/translations/contributor_docs/pt-br/installation.md b/translations/contributor_docs/pt-br/installation.md
index 70e54b7930..d86d6cd302 100644
--- a/translations/contributor_docs/pt-br/installation.md
+++ b/translations/contributor_docs/pt-br/installation.md
@@ -21,9 +21,10 @@ _Nota_: Os passos de instalação assumem que você está usando um shell basead
$ cd p5.js-web-editor
$ npm install
```
+
6. Instale o MongoDB e cheque se está rodando.
- * Para Mac OSX com [homebrew](http://brew.sh/): `brew tap mongodb/brew` e então `brew install mongodb-community` e finalmente comece o server com `brew services start mongodb-community` ou você pode visitar o guia de instalação aqui [Guia de Instalação para MacOS](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
- * Para Windows e Linux: [Instalação do MongoDB](https://docs.mongodb.com/manual/installation/)
+ - Para Mac OSX com [homebrew](http://brew.sh/): `brew tap mongodb/brew` e então `brew install mongodb-community` e finalmente comece o server com `brew services start mongodb-community` ou você pode visitar o guia de instalação aqui [Guia de Instalação para MacOS](https://docs.mongodb.com/manual/tutorial/install-mongodb-on-os-x/)
+ - Para Windows e Linux: [Instalação do MongoDB](https://docs.mongodb.com/manual/installation/)
7. `$ cp .env.example .env`
8. (Opcional) Atualize o `.env` com as chaves necessárias para permitir certos comportamentos do app, i.e. adicionar GiHub ID e GitHub Secret se você quer conseguir entrar com o GitHub.
9. `$ npm run fetch-examples` - isso faz o download dos exemplos de esboço para um usuário chamado 'p5'
@@ -41,8 +42,8 @@ Usando Docker você pode ter um ambiente de desenvolvimento completo e consisten
Note que isso usa um espaço significante da sua máquina. Cheque se você tem pelo menos 5GB disponíveis.
1. Instale o Docker no seu sistema operacional
- * Mac: https://www.docker.com/docker-mac
- * Windows: https://www.docker.com/docker-windows
+ - Mac: https://www.docker.com/docker-mac
+ - Windows: https://www.docker.com/docker-windows
2. Clone esse repositŕio e use `cd` para entrar nele
3. `$ docker-compose -f docker-compose-development.yml build`
4. `$ cp .env.example .env`
@@ -54,20 +55,19 @@ Agora, em qualquer momento que você quiser iniciar o server com suas dependênc
7. `$ docker-compose -f docker-compose-development.yml up`
8. Navegue para [http://localhost:8000](http://localhost:8000) no seu browser
-Para abrir um terminal/shell no server Docker que está rodando (i.e. depois de ter rodado `docker-compose up`):
+Para abrir um terminal/shell no server Docker que está rodando (i.e. depois de ter rodado `docker-compose up`):
9. `$ docker-compose -f docker-compose-development.yml exec app bash -l`
Se você não tem todo o ambiente rodando, você pode rodar a instância de apenas um container (e deleta-lo automaticamente depois de ter o utilizado):
-10. `$ docker-compose -f docker-compose-development.yml run app --rm bash -l`
+10. `$ docker-compose -f docker-compose-development.yml run app --rm bash -l`
## Configuração do S3 Bucket
Note que isso é opcioal, a menos que você esteja trabalhando na parte da aplicação que permite que o usuário faça o upload de imagens, vídeos, etc. Por favor consulte o [gist](https://gist.github.com/catarak/70c9301f0fd1ac2d6b58de03f61997e3) para configurar um S3 bucket para ser usado com esse projeto.
-Se seu S3 bucket está na região Leste dos EUA (N Virginia) (us-east-1), você irá precisar configurar um URL customizada para isso, porque ele não segue o padrão de nomes do resto das regiões. Em vez disso, adicione o seguinte para seu arquivo
-environment/.env :
+Se seu S3 bucket está na região Leste dos EUA (N Virginia) (us-east-1), você irá precisar configurar um URL customizada para isso, porque ele não segue o padrão de nomes do resto das regiões. Em vez disso, adicione o seguinte para seu arquivo environment/.env :
`S3_BUCKET_URL_BASE=https://s3.amazonaws.com`
diff --git a/translations/contributor_docs/pt-br/preparing_a_pull_request.md b/translations/contributor_docs/pt-br/preparing_a_pull_request.md
index 02ee1183da..1a6cbfa5d6 100644
--- a/translations/contributor_docs/pt-br/preparing_a_pull_request.md
+++ b/translations/contributor_docs/pt-br/preparing_a_pull_request.md
@@ -7,12 +7,13 @@ Pull-requests são mais fáceis quando seu código está atualizado! Você pode
## Salve e Atualize
### Salve tudo que você tem!
+
git status
git add -u
git commit
-
### Descubra a respeito de mudanças
+
Verifique se você está acompanhando o repositório upstream p5.js.
git remote show upstream
@@ -26,24 +27,31 @@ Então pergunte ao git sobre as últimas mudanças.
git fetch upstream
### Só para garantir: faça uma cópia das suas mudanças em uma nova branch
+
git branch your-branch-name-backup
-### Aplique mudanças da branch master, adicione suas mudanças *depois*
+### Aplique mudanças da branch master, adicione suas mudanças _depois_
+
git rebase upstream/master
### Volte para a branch master
+
git checkout master
### Ajude outros contribuidores a entender as mudanças que você fez
- git commit -m "Fixed documentation typos"
-### Verifique o que o git estará commitando
- git status
+ git commit -m "Fixed documentation typos"
+
+### Verifique o que o git estará commitando
+
+ git status
## CONFLITOS
+
Você pode ter alguns conflitos! Tudo bem. Se sinta a vontade para pedir ajuda. Se merjar com a última master upstream causar conflitos, você pode sempre fazer um pull request com o repositório upstream, que torna os conflitos públicos.
## E finalmente, para grande glória
+
git push --set-upstream origin your-branch-name-backup
Aqui está uma boa referência sobre rebases, caso você esteja curioso sobre os detalhes técnicos. https://www.atlassian.com/git/tutorials/merging-vs-rebasing
diff --git a/translations/contributor_docs/pt-br/public_api.md b/translations/contributor_docs/pt-br/public_api.md
index ecbed9c2c7..fb743a7d0e 100644
--- a/translations/contributor_docs/pt-br/public_api.md
+++ b/translations/contributor_docs/pt-br/public_api.md
@@ -2,14 +2,13 @@
Essa API provê uma forma de importar informações para o p5.js Web Editor de forma programática.
-# Authenticação
+# Authenticação
Acesso à API está disponível via um Token de Acesso Pessoal, relacionado à uma conta de editor existente. Tokens podem ser criados e deletados na tela de Configurações de um usuário loggado.
Quando entrar em contato com a API, o nome de usuário e token devem ser enviados em todas requisições usando autenticação básica.
-Isso envolve enviar o base64 codificado `${username}:${personalAccessToken}` no header `Authorization`, Por exemplo:
- `Authorization: Basic cDU6YWJjMTIzYWJj`
+Isso envolve enviar o base64 codificado `${username}:${personalAccessToken}` no header `Authorization`, Por exemplo: `Authorization: Basic cDU6YWJjMTIzYWJj`
# Acesso à API
@@ -31,12 +30,11 @@ A API aceita e retorna as seguintes Models como JSON.
## Sketch
-| Nome | Tipo | Descrição |
-| ----- | ----------------- | ------------------------------------------------------------------------------ |
-| name | String | O título do esboço |
+| Nome | Tipo | Descrição |
+| --- | --- | --- |
+| name | String | O título do esboço |
| files | DirectoryContents | Os arquivos e diretórios no esboço. Veja `DirectoryContents` para a estrutura. |
-| slug | String | Um caminho que pode ser usado para acessar o esboço |
-
+| slug | String | Um caminho que pode ser usado para acessar o esboço |
{
"id": String, // opaque ID
@@ -81,10 +79,9 @@ Isso é editável na interfáce do editor e guardada no bando de dados do Editor
Esse arquivo é hospedado em outro lugar na Internet. Ele aparece na listagem do Editor e pode ser referenciado usando um proxy URL no Editor.
-
-| Nome | Tipo | Descrição |
-| ---- | ---- | ----------------------------------------------------------------- |
-| url | URL | Uma URL váçida apontando para um arquivo hospedado em outro lugar |
+| Nome | Tipo | Descrição |
+| --- | --- | --- |
+| url | URL | Uma URL váçida apontando para um arquivo hospedado em outro lugar |
{
"url": URL
@@ -115,9 +112,11 @@ Liste os esboços de um usuário.
Isso não irá retornar os arquivos dentro de um esboço, apenas a metadata do esboço.
### Formato da requisição
+
Sem corpo.
### Formato da resposta
+
{
"sketches": Array
}
@@ -125,7 +124,7 @@ Sem corpo.
### Exemplo
GET /p5/sketches
-
+
{
"sketches": [
{ "id": "H1PLJg8_", "name": "My Lovely Sketch" },
@@ -133,7 +132,6 @@ Sem corpo.
]
}
-
## `POST /:user/sketches`
Criar um novo esboço.
@@ -141,9 +139,11 @@ Criar um novo esboço.
Um esboço deve conter pelo menos um arquivo com a extenção `.html`. Se nenhum for fornecido no payload, um `index.html` padrão e um arquivo `style.css` associado serão criados automaticamente.
### Formato da requisição
+
Veja `Sketch` nas Models abaixo.
### Formato da resposta
+
{
"id": String
}
@@ -151,7 +151,7 @@ Veja `Sketch` nas Models abaixo.
### Exemplo
POST /p5/sketches
-
+
{
"name": "My Lovely Sketch",
"files": {
@@ -162,9 +162,8 @@ Veja `Sketch` nas Models abaixo.
`files` podem possuir uma hierarquia para representar uma estrutura de pastas. Por exemplo, isso irá criar um diretório "data" vazio no esboço:
-
POST /p5/sketches
-
+
{
"name": "My Lovely Sketch 2",
"files": [
@@ -182,16 +181,15 @@ Veja `Sketch` nas Models abaixo.
### Respostas
-| Código HTTP | Descrição |
-| ------------------------ | ------------------------------------------------------------------------------- |
-| 201 Created | id do esboço |
+| Código HTTP | Descrição |
+| --- | --- |
+| 201 Created | id do esboço |
| 422 Unprocessable Entity | falha na validação de um arquivo, tipo de arquivo não suportado, slug já existe |
-
### Exemplos
201 CREATED
-
+
{
"id": "Ckhf0APpg"
}
@@ -201,9 +199,11 @@ Veja `Sketch` nas Models abaixo.
Delete um esboço e todos os seus arquivos associados.
### Formato da requisição
+
Sem corpo
### Formato da resposta
+
Sem corpo
### Exemplo
diff --git a/translations/contributor_docs/pt-br/public_api_proposed.md b/translations/contributor_docs/pt-br/public_api_proposed.md
index d4c4682fa7..8c554b206c 100644
--- a/translations/contributor_docs/pt-br/public_api_proposed.md
+++ b/translations/contributor_docs/pt-br/public_api_proposed.md
@@ -22,15 +22,17 @@ Referência para a [API pública](./public_api.md) para a atual versão da API.
Buscar um esboço
### Formato da requisição
+
Sem corpo.
### Formato da resposta
+
Retorna `Sketch`.
### Exemplo
GET /p5/sketches/Ckhf0APpg`
-
+
{
"name": "Another title",
"slug": "example-1",
@@ -47,21 +49,22 @@ Retorna `Sketch`.
| 200 OK | Retorna o ID de um esboço criado |
| 404 Not Found | Esboço não existe |
-
## `PUT /:user/sketches/:id`
Substitui o esboço por um inteiramente novo, mantendo o mesmo ID. Qualquer arquivo existente será apagado antes que os novos sejam criados.
### Formato da requisição
+
Veja `Sketch` nas Models abaixo.
### Formato de resposta
+
Sem corpo.
### Exemplo
PUT /p5/sketches/Ckhf0APpg
-
+
{
"name": "Another title",
"files": {
@@ -72,13 +75,12 @@ Sem corpo.
### Respostas
-| Código HTTP | Descrição |
-| ------------------------ | ---------------------------------------------------------- |
-| 200 OK | |
-| 404 Not Found | Esboço não existe |
+| Código HTTP | Descrição |
+| --- | --- |
+| 200 OK | |
+| 404 Not Found | Esboço não existe |
| 422 Unprocessable Entity | validação de arquivo falhou, tipo de arquivo não suportado |
-
## `PATCH /:user/sketches/:id`
Atualiza o esboço enquanto mantém informações existentes:
@@ -87,25 +89,29 @@ Atualiza o esboço enquanto mantém informações existentes:
- Atualizar conteúdo de arquivo ou adicionar novos arquivos
### Formato da requisição
+
Veja `Sketch` nas Models abaixo.
### Formato da resposta
+
Sem corpo.
### Exemplo
+
Mudar o nome do esboço
PATCH /p5/sketches/Ckhf0APpg
-
+
{
"name": "My Very Lovely Sketch"
}
### Exemplo
+
Adicionar um arquivo ao esboço ou substituir um arquivo existente.
PATCH /p5/sketches/Ckhf0APpg
-
+
{
"files": {
"index.html": { "content": "My new content" }, // contents will be replaced
@@ -121,7 +127,6 @@ Adicionar um arquivo ao esboço ou substituir um arquivo existente.
| 404 Not Found | Esboço não existe |
| 422 Unprocessable Entity | Erro de validação dos arquivos |
-
## Operando em arquivos dentro de um esboço
Arquivos dentro de um esboço podem ser acessados individualmente pelos seus `path` e.g `data/something.json`.
@@ -131,41 +136,44 @@ Arquivos dentro de um esboço podem ser acessados individualmente pelos seus `pa
Buscar os conteúdos de um arquivo.
### Formato da requisição
+
Sem corpo.
### Formato da resposta
+
Retorna conteúdo dos arquivos
### Exemplo
GET /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
Content-Type: application/javascript
-
+
var uselessness = 12;
### Respostas
-| Código HTTP | Descrição |
-| ------------- | ----------------------------------------------------------------------------- |
-| 200 OK | Retorna corpo do arquivo com o content-type definido pela extenção do arquivo |
-| 404 Not Found | Arquivo não existe |
+| Código HTTP | Descrição |
+| --- | --- |
+| 200 OK | Retorna corpo do arquivo com o content-type definido pela extenção do arquivo |
+| 404 Not Found | Arquivo não existe |
-
-## `PATCH /:user/sketches/:id/files/:path`
+## `PATCH /:user/sketches/:id/files/:path`
Atualizar o nome ou conteúdos de um arquivo ou diretório.
### Formato da requisição
+
Veja `File` e `Directory` abaixo.
### Formato da resposta
+
Sem corpo.
### Exemplo: Mudar nome do arquivo
PATCH /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
{
"name": "new-name.js"
}
@@ -175,7 +183,7 @@ Arquivo `assets/something.js` → `assets/new-name.js`.
### Exemplo: Mudar o conteúdo do arquivo
PATCH /p5/sketches/Ckhf0APpg/files/assets/something.js
-
+
{
"content": "var answer = 24;"
}
@@ -203,15 +211,16 @@ Arquivos são adicionados ao diretório, em adição à o que está lá.
| 404 Not Found | Caminho não existe |
| 422 Unprocessable Entity | Erro de validação de arquivos |
-
## `DELETE /:user/:sketches/files/:path`
Delete um arquivo/diretório e seus conteúdos.
### Formato da requisição
+
Sem corpo.
### Formato da resposta
+
Sem corpo.
### Exemplo: Deletar arquivo
@@ -232,6 +241,3 @@ O diretório `assets` e tudo dentro dele será removido.
| ------------- | ------------------- |
| 200 OK | O item foi deletado |
| 404 Not Found | Caminho não existe |
-
-
-
diff --git a/translations/locales/de/translations.json b/translations/locales/de/translations.json
index 9c763d16b1..38bd01362c 100644
--- a/translations/locales/de/translations.json
+++ b/translations/locales/de/translations.json
@@ -87,7 +87,7 @@
"LogoARIA": "{{serviceauth}} logo"
},
"About": {
- "Title": "Über",
+ "Title": "Über",
"TitleHelmet": "p5.js Web Editor | Über",
"Contribute": "Mitwirken",
"NewP5": "Neu bei p5.js?",
@@ -280,7 +280,7 @@
"errorEmptyPassword": "Gib bitte ein Passwort ein",
"errorShortPassword": "Das Passwort muss mindestens aus 6 Zeichen bestehen",
"errorConfirmPassword": "Gib bitte das Passwort erneut ein",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorNewPassword": "Gib bitte ein neues Passwort ein oder lass dieses Feld frei.",
"errorEmptyUsername": "Gib bitte einen Nutzernamen ein.",
"errorLongUsername": "Der Nutzername muss weniger als 20 Zeichen haben.",
@@ -588,8 +588,8 @@
"Off": "Aus"
},
"MobileDashboardView": {
- "Examples": "Beispiele",
- "Sketches": "Sketche",
+ "Examples": "Beispiele",
+ "Sketches": "Sketche",
"Collections": "Sammlungen",
"Assets": "Assets",
"MyStuff": "Mein Zeug",
@@ -600,4 +600,3 @@
"Files": "Dateien"
}
}
-
diff --git a/translations/locales/en-US/translations.json b/translations/locales/en-US/translations.json
index 1d254a5afc..82d4717380 100644
--- a/translations/locales/en-US/translations.json
+++ b/translations/locales/en-US/translations.json
@@ -275,7 +275,8 @@
"AddFile": "Create file",
"AddFileARIA": "add file",
"UploadFile": "Upload file",
- "UploadFileARIA": "upload file"
+ "UploadFileARIA": "upload file",
+ "UploadFileRequiresLogin": "You must log in to upload files"
},
"FileNode": {
"OpenFolderARIA": "Open folder contents",
@@ -288,7 +289,8 @@
"UploadFile": "Upload file",
"UploadFileARIA": "upload file",
"Rename": "Rename",
- "Delete": "Delete"
+ "Delete": "Delete",
+ "UploadFileRequiresLogin": "You must log in to upload files"
},
"Common": {
"SiteName": "p5.js Web Editor",
@@ -466,7 +468,8 @@
"UploadFileModal": {
"Title": "Upload File",
"CloseButtonARIA": "Close upload file modal",
- "SizeLimitError": "Error: You cannot upload any more files. You have reached the total size limit of {{sizeLimit}}.\n If you would like to upload more, please remove the ones you aren't using anymore by\n in your "
+ "SizeLimitError": "Error: You cannot upload any more files. You have reached the total size limit of {{sizeLimit}}.\n If you would like to upload more, please remove the ones you aren't using anymore by\n in your ",
+ "UploadFileRequiresLogin": "You must log in to upload files"
},
"FileUploader": {
"DictDefaultMessage": "Drop files here or click to use the file browser"
diff --git a/translations/locales/es-419/translations.json b/translations/locales/es-419/translations.json
index 3694eba545..f59a3f8c2d 100644
--- a/translations/locales/es-419/translations.json
+++ b/translations/locales/es-419/translations.json
@@ -245,9 +245,9 @@
"SubmitFeedback": "Enviar retroalimentación",
"SubmitFeedbackARIA": "Enviar retroalimentación",
"AddCollectionTitle": "Agregar a colección",
- "AddCollectionARIA":"Agregar a colección",
+ "AddCollectionARIA": "Agregar a colección",
"ShareTitle": "Compartir",
- "ShareARIA":"compartir"
+ "ShareARIA": "compartir"
},
"NewFileModal": {
"Title": "Crear Archivo",
@@ -291,7 +291,7 @@
"errorShortPassword": "La contraseña debe tener al menos 6 caracteres",
"errorConfirmPassword": "Por favor confirma una contraseña",
"errorNewPassword": "Por favor introduce una nueva contraseña o deja la actual contraseña vacía",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorEmptyUsername": "Por favor introduce tu identificación",
"errorLongUsername": "La identificación debe ser menor a 20 caracteres.",
"errorValidUsername": "La identificación debe consistir solamente de números, letras, puntos, guiones y guiones bajos."
@@ -445,7 +445,7 @@
"Description": "descripción",
"NumSketches": "{{count}} bosquejo",
"NumSketches_plural": "{{count}} bosquejos",
- "By":"Colección por ",
+ "By": "Colección por ",
"NoSketches": "No hay bosquejos en la colección",
"TableSummary": "tabla que contiene todas las colecciones",
"HeaderName": "Nombre",
@@ -509,7 +509,7 @@
"Overlay": {
"AriaLabel": "Cerrar la capa {{title}}"
},
- "QuickAddList":{
+ "QuickAddList": {
"ButtonRemoveARIA": "Remover de colección",
"ButtonAddToCollectionARIA": "Agregar a colección",
"View": "Ver"
diff --git a/translations/locales/fr-CA/translations.json b/translations/locales/fr-CA/translations.json
index f3b1767a75..6af9dcb580 100644
--- a/translations/locales/fr-CA/translations.json
+++ b/translations/locales/fr-CA/translations.json
@@ -1,616 +1,615 @@
{
- "Nav": {
- "File": {
- "Title": "Fichier",
- "New": "Nouveau",
- "Share": "Partager",
- "Duplicate": "Dupliquer",
- "Open": "Ouvrir",
- "Download": "Télécharger",
- "AddToCollection": "Ajouter à la collection",
- "Examples": "Exemples"
- },
- "Edit": {
- "Title": "Edition",
- "TidyCode": "Nettoyer le code",
- "Find": "Rechercher",
- "FindNext": "Prochaine correspondance",
- "Replace": "Remplacer"
- },
- "Sketch": {
- "Title": "Croquis",
- "AddFile": "Nouveau fichier",
- "AddFolder": "Nouveau dossier",
- "Run": "Exécuter",
- "Stop": "Arrêter"
- },
- "Help": {
- "Title": "Aide",
- "KeyboardShortcuts": "Raccourcis clavier",
- "Reference": "Référence",
- "About": "À propos"
- },
- "Lang": "Langue",
- "BackEditor": "Retour à l'éditeur",
- "WarningUnsavedChanges": "Êtes-vous certain de vouloir quitter cette page? Vous avez des changements non enregistrés.",
- "Login": "Se connecter",
- "LoginOr": "ou",
- "SignUp": "S'inscrire",
- "Auth": {
- "Welcome": "Bienvenue",
- "Hello": "Bonjour",
- "MyAccount": "compte",
- "My": "Mon",
- "MySketches": "Mes croquis",
- "MyCollections": "Mes collections",
- "Asset": "Ressources",
- "MyAssets": "Mes ressources",
- "LogOut": "Se déconnecter"
- }
- },
- "Banner": {
- "Copy": "Donate Today! Support p5.js and the Processing Foundation."
- },
- "CodemirrorFindAndReplace": {
- "ToggleReplace": "Activer/désactiver le remplacement",
- "Find": "Rechercher",
- "FindPlaceholder": "Trouver dans les fichiers",
- "Replace": "Remplacer",
- "ReplaceAll": "Remplacer tout",
- "ReplacePlaceholder": "Texte à remplacer",
- "Regex": "Expression régulière",
- "CaseSensitive": "Sensible à la casse",
- "WholeWords": "Mots entiers",
- "Previous": "Précédent",
- "Next": "Suivant",
- "NoResults": "Aucun résultat",
- "Close": "Fermer"
- },
- "LoginForm": {
- "UsernameOrEmail": "Courriel ou nom d'utilisateur",
- "UsernameOrEmailARIA": "Courriel ou nom d'utilisateur",
- "Password": "Mot de passe",
- "PasswordARIA": "Mot de passe",
- "Submit": "Se connecter"
- },
- "LoginView": {
- "Title": "Editeur web p5.js | Se connecter",
- "Login": "Se connecter",
- "LoginOr": "ou",
- "SignUp": "S'enregistrer",
- "Email": "courriel",
- "Username": "Nom d'utilisateur",
- "DontHaveAccount": "Vous n'avez pas encore de compte? ",
- "ForgotPassword": "Mot de passe oublié? ",
- "ResetPassword": "Réinitialiser son mot de passe"
- },
- "SocialAuthButton": {
- "Connect": "Connecter au compte {{serviceauth}}",
- "Unlink": "Se déconnecter du compte {{serviceauth}}",
- "Login": "Se connecter via {{serviceauth}}",
- "LogoARIA": "logo {{serviceauth}}"
- },
- "About": {
- "Title": "À propos",
- "TitleHelmet": "Éditeur web p5.js | À propos",
- "Contribute": "Contribuer",
- "NewP5": "Nouveau à p5.js?",
- "Report": "Signaler un bogue",
- "Learn": "Apprendre",
- "Twitter": "Twitter",
- "Home": "Accueil",
- "Instagram": "Instagram",
- "Discord": "Discord",
- "WebEditor": "Éditeur web",
- "Resources": "Ressources",
- "Libraries": "Librairies",
- "Forum": "Forum",
- "Examples": "Exemples",
- "PrivacyPolicy": "Politique de confidentialité",
- "TermsOfUse": "Conditions d'utilisation",
- "CodeOfConduct": "Code de conduite"
- },
- "Toast": {
- "OpenedNewSketch": "Ouvrir un nouveau croquis.",
- "SketchSaved": "Croquis sauvegardé.",
- "SketchFailedSave": "Echec de la sauvegarde du croquis.",
- "AutosaveEnabled": "Sauvegarde automatique activée.",
- "LangChange": "Langue changée.",
- "SettingsSaved": "Paramètres sauvegardés."
- },
- "Toolbar": {
- "Preview": "Aperçu",
- "Auto-refresh": "Actualisation automatique",
- "OpenPreferencesARIA": "Ouvrir les préférences",
- "PlaySketchARIA": "Exécuter le croquis",
- "PlayOnlyVisualSketchARIA": "Exécuter seulement le croquis visuel",
- "StopSketchARIA": "Arrêter le croquis",
- "EditSketchARIA": "Éditer le nom du croquis",
- "NewSketchNameARIA": "Nouveau nom de croquis",
- "By": " par "
- },
- "Console": {
- "Title": "Console",
- "Clear": "Effacer",
- "ClearARIA": "Effacer la console",
- "Close": "Fermer",
- "CloseARIA": "Fermer la console",
- "Open": "Ouvrir",
- "OpenARIA": "Ouvrir la console"
- },
- "Preferences": {
- "Settings": "Paramètres",
- "GeneralSettings": "Paramètres généraux",
- "Accessibility": "Accessibilité",
- "LibraryManagement": "Gestion de bibliothèque",
- "Theme": "Thème",
- "LightTheme": "Clair",
- "LightThemeARIA": "Thème clair activé",
- "DarkTheme": "Sombre",
- "DarkThemeARIA": "Thème sombre activé",
- "HighContrastTheme": "Contraste élevé",
- "HighContrastThemeARIA": "Thème contraste élevé activé",
- "TextSize": "Taille du texte",
- "DecreaseFont": "Diminuer",
- "DecreaseFontARIA": "diminuer la taille de la police",
- "IncreaseFont": "Augmenter",
- "IncreaseFontARIA": "augmenter la taille de la police",
- "Autosave": "Sauvegarde automatique",
- "On": "Activé",
- "AutosaveOnARIA": "sauvegarde automatique activée",
- "Off": "Désactivé",
- "AutosaveOffARIA": "sauvegarde automatique désactivée",
- "AutocloseBracketsQuotes": "Fermeture automatique des crochets et des guillemets",
- "AutocloseBracketsQuotesOnARIA": "fermeture automatique des crochets et des guillemets activée",
- "AutocloseBracketsQuotesOffARIA": "fermeture automatique des crochets et des guillemets désactivée",
- "WordWrap": "Retour à la ligne automatique",
- "WordWrapOnARIA": "retour à la ligne automatique activé",
- "WordWrapOffARIA": "retour à la ligne automatique désactivé",
- "LineNumbers": "Numéros de lignes",
- "LineNumbersOnARIA": "numéros de lignes activés",
- "LineNumbersOffARIA": "numéros de lignes désactivés",
- "LintWarningSound": "Son d'alarme Lint",
- "LintWarningOnARIA": "son d'alarme Lint activé",
- "LintWarningOffARIA": "son d'alarme Lint désactivé",
- "PreviewSound": "Tester le son",
- "PreviewSoundARIA": "Tester le son",
- "AccessibleTextBasedCanvas": "Canvas textuel accessible",
- "UsedScreenReader": "Utilisé avec un lecteur de texte",
- "PlainText": "Texte brut",
- "TextOutputARIA": "sortie texte activée",
- "TableText": "Tableau de texte",
- "TableOutputARIA": "sortie tableau de texte activée",
- "LibraryVersion": "Version de p5.js",
- "LibraryVersionInfo": "Une [nouvelle version 2.0](https://github.com/processing/p5.js/releases/) de p5.js est disponible ! Elle deviendra la version par défaut en août 2026, alors profitez de ce temps pour la tester et signaler les bogues. Intéressé à migrer vos esquisses de 1.x vers 2.0 ? Consultez les [ressources de compatibilité et de transition.](https://github.com/processing/p5.js-compatibility)",
- "SoundAddon": "p5.sound.js Add-on Bibliothèque",
- "PreloadAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Préchargement",
- "ShapesAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Formes",
- "DataAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Structures de données",
- "Sound": "Son",
- "SoundOutputARIA": "sortie son activée"
- },
- "KeyboardShortcuts": {
- "Title": " Raccourcis clavier",
- "ShortcutsFollow": "Les raccourcis clavier de l'éditeur suivent",
- "SublimeText": "les raccourcis de Sublime Text",
- "CodeEditing": {
- "Tidy": "Nettoyer",
- "FindText": "Rechercher",
- "FindNextMatch": "Correspondance suivante",
- "FindPrevMatch": "Correspondance précédente",
- "IndentCodeLeft": "Indenter le code à gauche",
- "ReplaceTextMatch": "Remplacer la correspondance",
- "IndentCodeRight": "Indenter le code à droite",
- "CommentLine": "Ligne de commentaire",
- "FindNextTextMatch": "Correspondance texte suivante",
- "FindPreviousTextMatch": "Correspondance texte précédente",
- "CodeEditing": "Édition de code"
- },
- "GeneralSelection": {
- "StartSketch": "Exécuter le croquis",
- "StopSketch": "Arrêter le croquis",
- "TurnOnAccessibleOutput": "Activer la sortie accessible",
- "TurnOffAccessibleOutput": "Désactiver la sortie accessible"
- }
- },
- "Sidebar": {
- "Title": "Fichiers croquis",
- "ToggleARIA": "Alterner les options d'ouverture/fermeture du fichier croquis",
- "AddFolder": "Créer un dossier",
- "AddFolderARIA": "ajouter un dossier",
- "AddFile": "Créer un fichier",
- "AddFileARIA": "ajouter un fichier",
- "UploadFile": "Téléverser un fichier",
- "UploadFileARIA": "téléverser un fichier"
- },
- "FileNode": {
- "OpenFolderARIA": "Ouvrir le contenu du dossier",
- "CloseFolderARIA": "Fermer le contenu du dossier",
- "ToggleFileOptionsARIA": "Alterner l'ouverture/fermeture des options de fichiers",
- "AddFolder": "Créer un dossier",
- "AddFolderARIA": "ajouter un dossier",
- "AddFile": "Créer un fichier",
- "AddFileARIA": "ajouter un fichier",
- "UploadFile": "Téléverser un fichier",
- "UploadFileARIA": "téléverser un fichier",
- "Rename": "Renommer",
- "Delete": "Supprimer"
- },
- "Common": {
- "SiteName": "Éditeur web p5.js",
- "Error": "Erreur",
- "ErrorARIA": "Erreur",
- "Save": "Sauvegarder",
- "p5logoARIA": "Logo p5.js",
- "DeleteConfirmation": "Etes-vous sûr que vous voulez supprimer {{name}}?"
- },
- "IDEView": {
- "SubmitFeedback": "Soumettre des commentaires",
- "SubmitFeedbackARIA": "Soumettre des commentaires",
- "AddCollectionTitle": "Ajouter à la collection",
- "AddCollectionARIA":"Ajouter à la collection",
- "ShareTitle": "Partager",
- "ShareARIA":"partager"
- },
- "NewFileModal": {
- "Title": "Créer un fichier",
- "CloseButtonARIA": "Fermer la boîte de dialogue de création de fichier",
- "EnterName": "Veuillez saisir un nom",
- "InvalidType": "Type de fichier invalide. Les extensions valides sont .js, .css, .json, .txt, .csv, .tsv, .frag, and .vert."
- },
- "NewFileForm": {
- "AddFileSubmit": "Ajouter un fichier",
- "Placeholder": "Nom"
- },
- "NewFolderModal": {
- "Title": "Créer un dossier",
- "CloseButtonARIA": "Fermer la boîte de dialogue de création de dossier",
- "EnterName": "Veuillez saisir un nom",
- "EmptyName": "Le nom du dossier ne peut contenir uniquement des espaces",
- "InvalidExtension": "Le nom du dossier ne peut contenir une extension"
- },
- "NewFolderForm": {
- "AddFolderSubmit": "Ajouter un dossier",
- "Placeholder": "Nom"
- },
- "ResetPasswordForm": {
- "Email": "Courriel utilisé pour l'inscription",
- "EmailARIA": "courriel",
- "Submit": "Envoyer un courriel de réinitialisation du mot de passe"
- },
- "ResetPasswordView": {
- "Title": "Éditeur web p5.js | Réinitialisation du mot de passe",
- "Reset": "Réinitialiser votre mot de passe",
- "Submitted": "Votre courriel de réinitialisation de mot de passe devrait arriver sous peu. Si vous ne le voyez pas, vérifiez\n vos courriers indésirables, il est possible qu'il s'y retrouve.",
- "Login": "Se connecter",
- "LoginOr": "ou",
- "SignUp": "S'enregistrer"
- },
- "ReduxFormUtils": {
- "errorInvalidEmail": "Veuillez saisir une adresse courriel valide",
- "errorEmptyEmail": "Veuillez saisir une adresse courriel",
- "errorPasswordMismatch": "Les mots de passe doivent correspondre",
- "errorEmptyPassword": "Veuillez saisir un mot de passe",
- "errorShortPassword": "Le mot de passe doit comporter au moins 6 caractères",
- "errorConfirmPassword": "Veuillez saisir une confirmation de mot de passe",
- "errorNewPasswordRepeat":"Votre nouveau mot de passe doit être différent du mot de passe actuel.",
- "errorNewPassword": "Veuillez saisir un nouveau mot de passe ou laisser le mot de passe actuel vide.",
- "errorEmptyUsername": "Veuillez saisir un nom d'utilisateur.",
- "errorLongUsername": "Le nom d'utilisateur doit comporter moins de 20 caractères.",
- "errorValidUsername": "Le nom d'utilisateur ne peut qu'être composé de chiffres, de lettres, de points, de tirets et de traits de soulignement."
- },
- "NewPasswordView": {
- "Title": "Éditeur Web p5.js | Nouveau mot de passe",
- "Description": "Définir un nouveau mot de passe",
- "TokenInvalidOrExpired": "Le jeton de réinitialisation du mot de passe n'est pas valide ou a expiré.",
- "EmptyPassword": "Veuillez saisir un mot de passe",
- "PasswordConfirmation": "Veuillez saisir une confirmation de mot de passe",
- "PasswordMismatch": "les mots de passe doivent correspondre"
- },
- "AccountForm": {
- "Email": "Courriel",
- "EmailARIA": "courriel",
- "Unconfirmed": "Non confirmé.",
- "EmailSent": "Confirmation envoyée, vérifiez votre courriel.",
- "Resend": "Renvoyer un courriel de confirmation",
- "UserName": "Nom d'utilisateur",
- "UserNameARIA": "Nom d'utilisateur",
- "CurrentPassword": "Mot de passe actuel",
- "CurrentPasswordARIA": "Mot de passe actuel",
- "NewPassword": "Nouveau mot de passe",
- "NewPasswordARIA": "Nouveau mot de passe",
- "SubmitSaveAllSettings": "Sauvegarder tous les paramètres"
- },
- "AccountView": {
- "SocialLogin": "Identification à l'aide des réseaux sociaux",
- "SocialLoginDescription": "Utilisez votre compte GitHub ou Google pour vous connecter à l'éditeur Web p5.js.",
- "Title": "Éditeur web p5.js | Paramètres du compte",
- "Settings": "Paramètres du compte",
- "AccountTab": "Compte",
- "AccessTokensTab": "Jetons d'accès"
- },
- "APIKeyForm": {
- "ConfirmDelete": "Êtes-vous sûr de vouloir supprimer {{key_label}}?",
- "Summary": "Les jetons d'accès personnels agissent comme votre mot de passe\n pour permettre aux scripts automatisés d'accéder à l'API de l'éditeur.\n Créez un jeton pour chaque script nécessitant un accès.",
- "CreateToken": "Créer un nouveau jeton",
- "TokenLabel": "À quoi sert ce jeton?",
- "TokenPlaceholder": "À quoi sert ce jeton ? p. ex. Exemple de script d'importation",
- "CreateTokenSubmit": "Créer",
- "NoTokens": "Vous n'avez pas de jetons existants.",
- "NewTokenTitle": "Votre nouveau jeton d'accès",
- "NewTokenInfo": "Assurez-vous de copier votre nouveau jeton d'accès personnel.\n Vous ne pourrez plus revenir le voir!",
- "ExistingTokensTitle": "Jetons existants"
- },
- "APIKeyList": {
- "Name": "Nom",
- "Created": "Créée le",
- "LastUsed": "Dernière utilisation",
- "Actions": "Actions",
- "Never": "Jamais",
- "DeleteARIA": "Supprimer la clé API"
- },
- "NewPasswordForm": {
- "Title": "Mot de passe",
- "TitleARIA": "Mot de passe",
- "ConfirmPassword": "Confirmer le mot de passe",
- "ConfirmPasswordARIA": "Confirmer le mot de passe",
- "SubmitSetNewPassword": "Définir un nouveau mot de passe"
- },
- "SignupForm": {
- "Title": "Nom d'utilisateur",
- "TitleARIA": "nom d'utilisateur",
- "Email": "Courriel",
- "EmailARIA": "courriel",
- "Password": "Mot de passe",
- "PasswordARIA": "mot de passe",
- "ConfirmPassword": "Confirmer le mot de passe",
- "ConfirmPasswordARIA": "Confirmer le mot de passe",
- "SubmitSignup": "S'inscrire"
- },
- "SignupView": {
- "Title": "Éditeur web p5.js | S'inscrire",
- "Description": "S'inscrire",
- "Or": "Ou",
- "AlreadyHave": "Vous avez déjà un compte?",
- "Login": "Se connecter",
- "Warning" : "En vous inscrivant, vous acceptez les <0>Conditions d'utilisation0> et la <1>Politique de confidentialité1> de l'éditeur p5.js."
- },
- "EmailVerificationView": {
- "Title": "Éditeur web p5.js | Vérification du courriel",
- "Verify": "Vérifiez votre courriel",
- "InvalidTokenNull": "Ce lien n'est pas valide.",
- "Checking": "Validation du jeton, veuillez patienter...",
- "Verified": "Ça y est, votre adresse courriel a été vérifiée.",
- "InvalidState": "Le jeton est invalide ou expiré."
- },
- "AssetList": {
- "Title": "Éditeur web p5.js | Mes ressources",
- "ToggleOpenCloseARIA": "Activer/désactiver l'ouverture/fermeture des options ressources",
- "Delete": "Supprimer",
- "OpenNewTab": "Ouvrir dans un nouvel onglet",
- "NoUploadedAssets": "Aucune ressource téléversée.",
- "HeaderName": "Nom",
- "HeaderSize": "Taille",
- "HeaderSketch": "Croquis"
- },
- "Feedback": {
- "Title": "Éditeur web p5.js | Commentaires",
- "ViaGithubHeader": "Via Github Issues",
- "ViaGithubDescription": "Si vous connaissez bien Github, c'est notre méthode préférée pour recevoir des rapports de bugs et des commentaires.",
- "GoToGithub": "Aller à Github",
- "ViaGoogleHeader": "Via Google Form",
- "ViaGoogleDescription": "Vous pouvez également soumettre vos commentaires via ce formulaire.",
- "GoToForm": "Aller au formulaire"
- },
- "Searchbar": {
- "SearchSketch": "Chercher des croquis...",
- "SearchCollection": "Chercher des collections...",
- "ClearTerm": "effacer"
- },
- "UploadFileModal": {
- "Title": "Téléverser un fichier",
- "CloseButtonARIA": "Fermer la boîte de dialogue de téléversement de fichiers",
- "SizeLimitError": "Erreur: Vous ne pouvez plus téléverser de fichiers. Vous avez atteint la limite de taille totale de {{sizeLimit}}.\n If you would like to upload more, please remove the ones you aren't using anymore by\n in your "
- },
- "FileUploader": {
- "DictDefaultMessage": "Déposez des fichiers ici ou cliquez pour utiliser le navigateur de fichiers"
- },
- "ErrorModal": {
- "MessageLogin": "Pour pouvoir sauvegarder les croquis, vous devez être connecté. Veuillez ",
- "Login": "Se connecter",
- "LoginOr": " ou ",
- "SignUp": "S'enregistrer",
- "MessageLoggedOut": "Il semble que vous ayez été déconnecté. Veuillez ",
- "LogIn": "Se connecter",
- "SavedDifferentWindow": "Le projet que vous avez tenté de sauvegarder a été sauvegardé à partir d'une\n autre fenêtre. Veuillez rafraîchir la page pour voir la dernière version.",
- "LinkTitle": "Erreur de liaison de compte",
- "LinkMessage": "Il y a eu un problème pour relier votre compte {{serviceauth}} à votre compte éditeur web p5.js. Votre compte {{serviceauth}} a déjà été lié à un autre compte de éditeur Web p5.js."
- },
- "ShareModal": {
- "Embed": "Intégrer",
- "Present": "Présenter",
- "Fullscreen": "Plein écran",
- "Edit": "Éditer"
- },
- "CollectionView": {
- "TitleCreate": "Créer une collection",
- "TitleDefault": "collection"
- },
- "Collection": {
- "Title": "Éditeur web p5.js | Mes collections",
- "AnothersTitle": "Éditeur web p5.js | Collections de {{anotheruser}}",
+ "Nav": {
+ "File": {
+ "Title": "Fichier",
+ "New": "Nouveau",
"Share": "Partager",
- "URLLink": "Lien vers la collection",
- "AddSketch": "Ajouter un croquis",
- "DeleteFromCollection": "Êtes-vous sûr de vouloir supprimer {{name_sketch}} de cette collection?",
- "SketchDeleted": "Croquis supprimé",
- "SketchRemoveARIA": "Supprimer le croquis de la collection",
- "DescriptionPlaceholder": "Ajouter une description",
- "Description": "description",
- "NumSketches": "{{count}} croquis",
- "NumSketches_plural": "{{count}} croquis",
- "By":"Collection par ",
- "NoSketches": "Aucun croquis dans la collection",
- "TableSummary": "tableau contenant toutes les collections",
- "HeaderName": "Nom",
- "HeaderCreatedAt": "Date ajoutée",
- "HeaderUser": "Propriétaire",
- "DirectionAscendingARIA": "Ascendant",
- "DirectionDescendingARIA": "Descendant",
- "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
- "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant."
- },
- "AddToCollectionList": {
- "Title": "Éditeur web p5.js | Mes collections",
- "AnothersTitle": "Éditeur web p5.js | Collections de {{anotheruser}}",
- "Empty": "Aucune collection"
- },
- "CollectionCreate": {
- "Title": "Éditeur web p5.js | Créer une collection",
- "FormError": "Impossible de créer une collection",
- "FormLabel": "Nom de la collection",
- "FormLabelARIA": "nom",
- "NameRequired": "Le nom de la collection est requis",
- "Description": "Description (optionnel)",
- "DescriptionARIA": "description",
- "DescriptionPlaceholder": "Mes croquis préférés",
- "SubmitCollectionCreate": "Créer la collection"
- },
- "DashboardView": {
- "CreateCollection": "Créer une collection",
- "NewSketch": "Nouveau croquis",
- "CreateCollectionOverlay": "Créer une collection"
- },
- "DashboardTabSwitcher": {
- "Sketches": "Croquis",
- "Collections": "Collections",
- "Assets": "Ressources"
- },
- "CollectionList": {
- "Title": "Éditeur web p5.js | Mes collections",
- "AnothersTitle": "Éditeur web p5.js | collections de {{anotheruser}}",
- "NoCollections": "Aucune collection.",
- "TableSummary": "tableau contenant toutes les collections",
- "HeaderName": "Nom",
- "HeaderCreatedAt": "Date de création",
- "HeaderCreatedAt_mobile": "Créé",
- "HeaderUpdatedAt": "Date de mise à jour",
- "HeaderUpdatedAt_mobile": "Mise à jour",
- "HeaderNumItems": "# croquis",
- "HeaderNumItems_mobile": "# croquis",
- "DirectionAscendingARIA": "Ascendant",
- "DirectionDescendingARIA": "Descendant",
- "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
- "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant.",
- "AddSketch": "Ajouter un croquis"
- },
- "CollectionListRow": {
- "ToggleCollectionOptionsARIA": "Activer/désactiver l'ouverture/fermeture des options de collections",
- "AddSketch": "Ajouter un croquis",
- "Delete": "Supprimer",
- "Rename": "Renommer"
- },
- "Overlay": {
- "AriaLabel": "Fermer {{title}} superposé"
- },
- "QuickAddList":{
- "ButtonRemoveARIA": "Supprimer de la collection",
- "ButtonAddToCollectionARIA": "Ajouter à la collection",
- "View": "Voir"
- },
- "SketchList": {
- "View": "Voir",
- "Title": "Éditeur web p5.js | Mes croquis",
- "AnothersTitle": "Éditeur web p5.js | Croquis de {{anotheruser}}",
- "ToggleLabelARIA": "Activer/désactiver l'ouverture/fermeture des options de croquis",
- "DropdownRename": "Renommer",
- "DropdownDownload": "Télécharger",
- "DropdownDuplicate": "Dupliquer",
- "DropdownAddToCollection": "Ajouter à la collection",
- "DropdownDelete": "Supprimer",
- "DirectionAscendingARIA": "Ascendant",
- "DirectionDescendingARIA": "Descendant",
- "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
- "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant.",
- "AddToCollectionOverlayTitle": "Ajouter à la collection",
- "TableSummary": "tableau contenant toutes projets sauvegardés",
- "HeaderName": "Croquis",
- "HeaderCreatedAt": "Date de création",
- "HeaderCreatedAt_mobile": "Créé",
- "HeaderUpdatedAt": "Date de mise à jour",
- "HeaderUpdatedAt_mobile": "mise à jour",
- "NoSketches": "Aucun croquis."
- },
- "AddToCollectionSketchList": {
- "Title": "Éditeur web p5.js | Mes croquis",
- "AnothersTitle": "Éditeur web p5.js | Croquis de {{anotheruser}}",
- "NoCollections": "Aucune collection."
- },
- "Editor": {
- "OpenSketchARIA": "Ouvrir la navigation dans les fichiers croquis",
- "CloseSketchARIA": "Fermer la navigation dans les fichiers croquis",
- "UnsavedChangesARIA": "Le croquis a des modifications non sauvegardées",
- "KeyUpLineNumber": "ligne {{lineNumber}}"
- },
- "EditorAccessibility": {
- "NoLintMessages": "Il n'y a pas de messages lint",
- "CurrentLine": "Ligne actuelle"
- },
- "Timer": {
- "SavedAgo": "Sauvegardé: {{timeAgo}}"
- },
- "formatDate": {
- "JustNow": "à l'instant",
- "15Seconds": "Il y a 15 secondes",
- "25Seconds": "Il y a 25 secondes",
- "35Seconds": "Il y a 35 secondes",
- "Ago": "Il y a {{timeAgo}}"
- },
- "CopyableInput": {
- "CopiedARIA": "Copié dans le presse-papiers!",
- "OpenViewTabARIA": "Ouvrir la fenêtre {{label}} dans un nouvel onglet"
- },
- "EditableInput": {
- "EditValue": "Modifier la valeur de {{display}}",
- "EmptyPlaceholder": "Aucune valeur"
- },
- "PreviewNav": {
- "EditSketchARIA": "Modifier le croquis",
- "ByUser": "par"
- },
- "MobilePreferences": {
- "Settings": "Paramètres",
- "GeneralSettings": "Paramètres généraux",
- "Accessibility": "Accessibilité",
- "AccessibleOutput": "Sortie accessible",
- "Theme": "Thème",
- "LightTheme": "Clair",
- "DarkTheme": "Sombre",
- "HighContrastTheme": "Contraste élevé",
- "Autosave": "Sauvegarde automatique",
- "WordWrap": "Retour à la ligne automatique",
- "LineNumbers": "Numéros de ligne",
- "LintWarningSound": "Son d'alarme Lint",
- "UsedScreenReader": "Utilisé avec un lecteur de texte",
- "PlainText": "Text brut",
- "TableText": "Tableau de texte",
- "Sound": "Son"
- },
- "PreferenceCreators": {
- "On": "Activé",
- "Off": "Désactivé"
- },
- "MobileDashboardView": {
- "Examples": "Exemples",
- "Sketches": "Croquis",
- "Collections": "Collections",
- "Assets": "Ressources",
- "MyStuff": "Mes trucs",
- "CreateSketch": "Créer un croquis",
- "CreateCollection": "Créer une collection"
+ "Duplicate": "Dupliquer",
+ "Open": "Ouvrir",
+ "Download": "Télécharger",
+ "AddToCollection": "Ajouter à la collection",
+ "Examples": "Exemples"
},
- "Explorer": {
- "Files": "Fichiers"
+ "Edit": {
+ "Title": "Edition",
+ "TidyCode": "Nettoyer le code",
+ "Find": "Rechercher",
+ "FindNext": "Prochaine correspondance",
+ "Replace": "Remplacer"
+ },
+ "Sketch": {
+ "Title": "Croquis",
+ "AddFile": "Nouveau fichier",
+ "AddFolder": "Nouveau dossier",
+ "Run": "Exécuter",
+ "Stop": "Arrêter"
+ },
+ "Help": {
+ "Title": "Aide",
+ "KeyboardShortcuts": "Raccourcis clavier",
+ "Reference": "Référence",
+ "About": "À propos"
+ },
+ "Lang": "Langue",
+ "BackEditor": "Retour à l'éditeur",
+ "WarningUnsavedChanges": "Êtes-vous certain de vouloir quitter cette page? Vous avez des changements non enregistrés.",
+ "Login": "Se connecter",
+ "LoginOr": "ou",
+ "SignUp": "S'inscrire",
+ "Auth": {
+ "Welcome": "Bienvenue",
+ "Hello": "Bonjour",
+ "MyAccount": "compte",
+ "My": "Mon",
+ "MySketches": "Mes croquis",
+ "MyCollections": "Mes collections",
+ "Asset": "Ressources",
+ "MyAssets": "Mes ressources",
+ "LogOut": "Se déconnecter"
+ }
+ },
+ "Banner": {
+ "Copy": "Donate Today! Support p5.js and the Processing Foundation."
+ },
+ "CodemirrorFindAndReplace": {
+ "ToggleReplace": "Activer/désactiver le remplacement",
+ "Find": "Rechercher",
+ "FindPlaceholder": "Trouver dans les fichiers",
+ "Replace": "Remplacer",
+ "ReplaceAll": "Remplacer tout",
+ "ReplacePlaceholder": "Texte à remplacer",
+ "Regex": "Expression régulière",
+ "CaseSensitive": "Sensible à la casse",
+ "WholeWords": "Mots entiers",
+ "Previous": "Précédent",
+ "Next": "Suivant",
+ "NoResults": "Aucun résultat",
+ "Close": "Fermer"
+ },
+ "LoginForm": {
+ "UsernameOrEmail": "Courriel ou nom d'utilisateur",
+ "UsernameOrEmailARIA": "Courriel ou nom d'utilisateur",
+ "Password": "Mot de passe",
+ "PasswordARIA": "Mot de passe",
+ "Submit": "Se connecter"
+ },
+ "LoginView": {
+ "Title": "Editeur web p5.js | Se connecter",
+ "Login": "Se connecter",
+ "LoginOr": "ou",
+ "SignUp": "S'enregistrer",
+ "Email": "courriel",
+ "Username": "Nom d'utilisateur",
+ "DontHaveAccount": "Vous n'avez pas encore de compte? ",
+ "ForgotPassword": "Mot de passe oublié? ",
+ "ResetPassword": "Réinitialiser son mot de passe"
+ },
+ "SocialAuthButton": {
+ "Connect": "Connecter au compte {{serviceauth}}",
+ "Unlink": "Se déconnecter du compte {{serviceauth}}",
+ "Login": "Se connecter via {{serviceauth}}",
+ "LogoARIA": "logo {{serviceauth}}"
+ },
+ "About": {
+ "Title": "À propos",
+ "TitleHelmet": "Éditeur web p5.js | À propos",
+ "Contribute": "Contribuer",
+ "NewP5": "Nouveau à p5.js?",
+ "Report": "Signaler un bogue",
+ "Learn": "Apprendre",
+ "Twitter": "Twitter",
+ "Home": "Accueil",
+ "Instagram": "Instagram",
+ "Discord": "Discord",
+ "WebEditor": "Éditeur web",
+ "Resources": "Ressources",
+ "Libraries": "Librairies",
+ "Forum": "Forum",
+ "Examples": "Exemples",
+ "PrivacyPolicy": "Politique de confidentialité",
+ "TermsOfUse": "Conditions d'utilisation",
+ "CodeOfConduct": "Code de conduite"
+ },
+ "Toast": {
+ "OpenedNewSketch": "Ouvrir un nouveau croquis.",
+ "SketchSaved": "Croquis sauvegardé.",
+ "SketchFailedSave": "Echec de la sauvegarde du croquis.",
+ "AutosaveEnabled": "Sauvegarde automatique activée.",
+ "LangChange": "Langue changée.",
+ "SettingsSaved": "Paramètres sauvegardés."
+ },
+ "Toolbar": {
+ "Preview": "Aperçu",
+ "Auto-refresh": "Actualisation automatique",
+ "OpenPreferencesARIA": "Ouvrir les préférences",
+ "PlaySketchARIA": "Exécuter le croquis",
+ "PlayOnlyVisualSketchARIA": "Exécuter seulement le croquis visuel",
+ "StopSketchARIA": "Arrêter le croquis",
+ "EditSketchARIA": "Éditer le nom du croquis",
+ "NewSketchNameARIA": "Nouveau nom de croquis",
+ "By": " par "
+ },
+ "Console": {
+ "Title": "Console",
+ "Clear": "Effacer",
+ "ClearARIA": "Effacer la console",
+ "Close": "Fermer",
+ "CloseARIA": "Fermer la console",
+ "Open": "Ouvrir",
+ "OpenARIA": "Ouvrir la console"
+ },
+ "Preferences": {
+ "Settings": "Paramètres",
+ "GeneralSettings": "Paramètres généraux",
+ "Accessibility": "Accessibilité",
+ "LibraryManagement": "Gestion de bibliothèque",
+ "Theme": "Thème",
+ "LightTheme": "Clair",
+ "LightThemeARIA": "Thème clair activé",
+ "DarkTheme": "Sombre",
+ "DarkThemeARIA": "Thème sombre activé",
+ "HighContrastTheme": "Contraste élevé",
+ "HighContrastThemeARIA": "Thème contraste élevé activé",
+ "TextSize": "Taille du texte",
+ "DecreaseFont": "Diminuer",
+ "DecreaseFontARIA": "diminuer la taille de la police",
+ "IncreaseFont": "Augmenter",
+ "IncreaseFontARIA": "augmenter la taille de la police",
+ "Autosave": "Sauvegarde automatique",
+ "On": "Activé",
+ "AutosaveOnARIA": "sauvegarde automatique activée",
+ "Off": "Désactivé",
+ "AutosaveOffARIA": "sauvegarde automatique désactivée",
+ "AutocloseBracketsQuotes": "Fermeture automatique des crochets et des guillemets",
+ "AutocloseBracketsQuotesOnARIA": "fermeture automatique des crochets et des guillemets activée",
+ "AutocloseBracketsQuotesOffARIA": "fermeture automatique des crochets et des guillemets désactivée",
+ "WordWrap": "Retour à la ligne automatique",
+ "WordWrapOnARIA": "retour à la ligne automatique activé",
+ "WordWrapOffARIA": "retour à la ligne automatique désactivé",
+ "LineNumbers": "Numéros de lignes",
+ "LineNumbersOnARIA": "numéros de lignes activés",
+ "LineNumbersOffARIA": "numéros de lignes désactivés",
+ "LintWarningSound": "Son d'alarme Lint",
+ "LintWarningOnARIA": "son d'alarme Lint activé",
+ "LintWarningOffARIA": "son d'alarme Lint désactivé",
+ "PreviewSound": "Tester le son",
+ "PreviewSoundARIA": "Tester le son",
+ "AccessibleTextBasedCanvas": "Canvas textuel accessible",
+ "UsedScreenReader": "Utilisé avec un lecteur de texte",
+ "PlainText": "Texte brut",
+ "TextOutputARIA": "sortie texte activée",
+ "TableText": "Tableau de texte",
+ "TableOutputARIA": "sortie tableau de texte activée",
+ "LibraryVersion": "Version de p5.js",
+ "LibraryVersionInfo": "Une [nouvelle version 2.0](https://github.com/processing/p5.js/releases/) de p5.js est disponible ! Elle deviendra la version par défaut en août 2026, alors profitez de ce temps pour la tester et signaler les bogues. Intéressé à migrer vos esquisses de 1.x vers 2.0 ? Consultez les [ressources de compatibilité et de transition.](https://github.com/processing/p5.js-compatibility)",
+ "SoundAddon": "p5.sound.js Add-on Bibliothèque",
+ "PreloadAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Préchargement",
+ "ShapesAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Formes",
+ "DataAddon": "p5.js 1.x Compatibility Add-on Bibliothèque — Structures de données",
+ "Sound": "Son",
+ "SoundOutputARIA": "sortie son activée"
+ },
+ "KeyboardShortcuts": {
+ "Title": " Raccourcis clavier",
+ "ShortcutsFollow": "Les raccourcis clavier de l'éditeur suivent",
+ "SublimeText": "les raccourcis de Sublime Text",
+ "CodeEditing": {
+ "Tidy": "Nettoyer",
+ "FindText": "Rechercher",
+ "FindNextMatch": "Correspondance suivante",
+ "FindPrevMatch": "Correspondance précédente",
+ "IndentCodeLeft": "Indenter le code à gauche",
+ "ReplaceTextMatch": "Remplacer la correspondance",
+ "IndentCodeRight": "Indenter le code à droite",
+ "CommentLine": "Ligne de commentaire",
+ "FindNextTextMatch": "Correspondance texte suivante",
+ "FindPreviousTextMatch": "Correspondance texte précédente",
+ "CodeEditing": "Édition de code"
+ },
+ "GeneralSelection": {
+ "StartSketch": "Exécuter le croquis",
+ "StopSketch": "Arrêter le croquis",
+ "TurnOnAccessibleOutput": "Activer la sortie accessible",
+ "TurnOffAccessibleOutput": "Désactiver la sortie accessible"
}
+ },
+ "Sidebar": {
+ "Title": "Fichiers croquis",
+ "ToggleARIA": "Alterner les options d'ouverture/fermeture du fichier croquis",
+ "AddFolder": "Créer un dossier",
+ "AddFolderARIA": "ajouter un dossier",
+ "AddFile": "Créer un fichier",
+ "AddFileARIA": "ajouter un fichier",
+ "UploadFile": "Téléverser un fichier",
+ "UploadFileARIA": "téléverser un fichier"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "Ouvrir le contenu du dossier",
+ "CloseFolderARIA": "Fermer le contenu du dossier",
+ "ToggleFileOptionsARIA": "Alterner l'ouverture/fermeture des options de fichiers",
+ "AddFolder": "Créer un dossier",
+ "AddFolderARIA": "ajouter un dossier",
+ "AddFile": "Créer un fichier",
+ "AddFileARIA": "ajouter un fichier",
+ "UploadFile": "Téléverser un fichier",
+ "UploadFileARIA": "téléverser un fichier",
+ "Rename": "Renommer",
+ "Delete": "Supprimer"
+ },
+ "Common": {
+ "SiteName": "Éditeur web p5.js",
+ "Error": "Erreur",
+ "ErrorARIA": "Erreur",
+ "Save": "Sauvegarder",
+ "p5logoARIA": "Logo p5.js",
+ "DeleteConfirmation": "Etes-vous sûr que vous voulez supprimer {{name}}?"
+ },
+ "IDEView": {
+ "SubmitFeedback": "Soumettre des commentaires",
+ "SubmitFeedbackARIA": "Soumettre des commentaires",
+ "AddCollectionTitle": "Ajouter à la collection",
+ "AddCollectionARIA": "Ajouter à la collection",
+ "ShareTitle": "Partager",
+ "ShareARIA": "partager"
+ },
+ "NewFileModal": {
+ "Title": "Créer un fichier",
+ "CloseButtonARIA": "Fermer la boîte de dialogue de création de fichier",
+ "EnterName": "Veuillez saisir un nom",
+ "InvalidType": "Type de fichier invalide. Les extensions valides sont .js, .css, .json, .txt, .csv, .tsv, .frag, and .vert."
+ },
+ "NewFileForm": {
+ "AddFileSubmit": "Ajouter un fichier",
+ "Placeholder": "Nom"
+ },
+ "NewFolderModal": {
+ "Title": "Créer un dossier",
+ "CloseButtonARIA": "Fermer la boîte de dialogue de création de dossier",
+ "EnterName": "Veuillez saisir un nom",
+ "EmptyName": "Le nom du dossier ne peut contenir uniquement des espaces",
+ "InvalidExtension": "Le nom du dossier ne peut contenir une extension"
+ },
+ "NewFolderForm": {
+ "AddFolderSubmit": "Ajouter un dossier",
+ "Placeholder": "Nom"
+ },
+ "ResetPasswordForm": {
+ "Email": "Courriel utilisé pour l'inscription",
+ "EmailARIA": "courriel",
+ "Submit": "Envoyer un courriel de réinitialisation du mot de passe"
+ },
+ "ResetPasswordView": {
+ "Title": "Éditeur web p5.js | Réinitialisation du mot de passe",
+ "Reset": "Réinitialiser votre mot de passe",
+ "Submitted": "Votre courriel de réinitialisation de mot de passe devrait arriver sous peu. Si vous ne le voyez pas, vérifiez\n vos courriers indésirables, il est possible qu'il s'y retrouve.",
+ "Login": "Se connecter",
+ "LoginOr": "ou",
+ "SignUp": "S'enregistrer"
+ },
+ "ReduxFormUtils": {
+ "errorInvalidEmail": "Veuillez saisir une adresse courriel valide",
+ "errorEmptyEmail": "Veuillez saisir une adresse courriel",
+ "errorPasswordMismatch": "Les mots de passe doivent correspondre",
+ "errorEmptyPassword": "Veuillez saisir un mot de passe",
+ "errorShortPassword": "Le mot de passe doit comporter au moins 6 caractères",
+ "errorConfirmPassword": "Veuillez saisir une confirmation de mot de passe",
+ "errorNewPasswordRepeat": "Votre nouveau mot de passe doit être différent du mot de passe actuel.",
+ "errorNewPassword": "Veuillez saisir un nouveau mot de passe ou laisser le mot de passe actuel vide.",
+ "errorEmptyUsername": "Veuillez saisir un nom d'utilisateur.",
+ "errorLongUsername": "Le nom d'utilisateur doit comporter moins de 20 caractères.",
+ "errorValidUsername": "Le nom d'utilisateur ne peut qu'être composé de chiffres, de lettres, de points, de tirets et de traits de soulignement."
+ },
+ "NewPasswordView": {
+ "Title": "Éditeur Web p5.js | Nouveau mot de passe",
+ "Description": "Définir un nouveau mot de passe",
+ "TokenInvalidOrExpired": "Le jeton de réinitialisation du mot de passe n'est pas valide ou a expiré.",
+ "EmptyPassword": "Veuillez saisir un mot de passe",
+ "PasswordConfirmation": "Veuillez saisir une confirmation de mot de passe",
+ "PasswordMismatch": "les mots de passe doivent correspondre"
+ },
+ "AccountForm": {
+ "Email": "Courriel",
+ "EmailARIA": "courriel",
+ "Unconfirmed": "Non confirmé.",
+ "EmailSent": "Confirmation envoyée, vérifiez votre courriel.",
+ "Resend": "Renvoyer un courriel de confirmation",
+ "UserName": "Nom d'utilisateur",
+ "UserNameARIA": "Nom d'utilisateur",
+ "CurrentPassword": "Mot de passe actuel",
+ "CurrentPasswordARIA": "Mot de passe actuel",
+ "NewPassword": "Nouveau mot de passe",
+ "NewPasswordARIA": "Nouveau mot de passe",
+ "SubmitSaveAllSettings": "Sauvegarder tous les paramètres"
+ },
+ "AccountView": {
+ "SocialLogin": "Identification à l'aide des réseaux sociaux",
+ "SocialLoginDescription": "Utilisez votre compte GitHub ou Google pour vous connecter à l'éditeur Web p5.js.",
+ "Title": "Éditeur web p5.js | Paramètres du compte",
+ "Settings": "Paramètres du compte",
+ "AccountTab": "Compte",
+ "AccessTokensTab": "Jetons d'accès"
+ },
+ "APIKeyForm": {
+ "ConfirmDelete": "Êtes-vous sûr de vouloir supprimer {{key_label}}?",
+ "Summary": "Les jetons d'accès personnels agissent comme votre mot de passe\n pour permettre aux scripts automatisés d'accéder à l'API de l'éditeur.\n Créez un jeton pour chaque script nécessitant un accès.",
+ "CreateToken": "Créer un nouveau jeton",
+ "TokenLabel": "À quoi sert ce jeton?",
+ "TokenPlaceholder": "À quoi sert ce jeton ? p. ex. Exemple de script d'importation",
+ "CreateTokenSubmit": "Créer",
+ "NoTokens": "Vous n'avez pas de jetons existants.",
+ "NewTokenTitle": "Votre nouveau jeton d'accès",
+ "NewTokenInfo": "Assurez-vous de copier votre nouveau jeton d'accès personnel.\n Vous ne pourrez plus revenir le voir!",
+ "ExistingTokensTitle": "Jetons existants"
+ },
+ "APIKeyList": {
+ "Name": "Nom",
+ "Created": "Créée le",
+ "LastUsed": "Dernière utilisation",
+ "Actions": "Actions",
+ "Never": "Jamais",
+ "DeleteARIA": "Supprimer la clé API"
+ },
+ "NewPasswordForm": {
+ "Title": "Mot de passe",
+ "TitleARIA": "Mot de passe",
+ "ConfirmPassword": "Confirmer le mot de passe",
+ "ConfirmPasswordARIA": "Confirmer le mot de passe",
+ "SubmitSetNewPassword": "Définir un nouveau mot de passe"
+ },
+ "SignupForm": {
+ "Title": "Nom d'utilisateur",
+ "TitleARIA": "nom d'utilisateur",
+ "Email": "Courriel",
+ "EmailARIA": "courriel",
+ "Password": "Mot de passe",
+ "PasswordARIA": "mot de passe",
+ "ConfirmPassword": "Confirmer le mot de passe",
+ "ConfirmPasswordARIA": "Confirmer le mot de passe",
+ "SubmitSignup": "S'inscrire"
+ },
+ "SignupView": {
+ "Title": "Éditeur web p5.js | S'inscrire",
+ "Description": "S'inscrire",
+ "Or": "Ou",
+ "AlreadyHave": "Vous avez déjà un compte?",
+ "Login": "Se connecter",
+ "Warning": "En vous inscrivant, vous acceptez les <0>Conditions d'utilisation0> et la <1>Politique de confidentialité1> de l'éditeur p5.js."
+ },
+ "EmailVerificationView": {
+ "Title": "Éditeur web p5.js | Vérification du courriel",
+ "Verify": "Vérifiez votre courriel",
+ "InvalidTokenNull": "Ce lien n'est pas valide.",
+ "Checking": "Validation du jeton, veuillez patienter...",
+ "Verified": "Ça y est, votre adresse courriel a été vérifiée.",
+ "InvalidState": "Le jeton est invalide ou expiré."
+ },
+ "AssetList": {
+ "Title": "Éditeur web p5.js | Mes ressources",
+ "ToggleOpenCloseARIA": "Activer/désactiver l'ouverture/fermeture des options ressources",
+ "Delete": "Supprimer",
+ "OpenNewTab": "Ouvrir dans un nouvel onglet",
+ "NoUploadedAssets": "Aucune ressource téléversée.",
+ "HeaderName": "Nom",
+ "HeaderSize": "Taille",
+ "HeaderSketch": "Croquis"
+ },
+ "Feedback": {
+ "Title": "Éditeur web p5.js | Commentaires",
+ "ViaGithubHeader": "Via Github Issues",
+ "ViaGithubDescription": "Si vous connaissez bien Github, c'est notre méthode préférée pour recevoir des rapports de bugs et des commentaires.",
+ "GoToGithub": "Aller à Github",
+ "ViaGoogleHeader": "Via Google Form",
+ "ViaGoogleDescription": "Vous pouvez également soumettre vos commentaires via ce formulaire.",
+ "GoToForm": "Aller au formulaire"
+ },
+ "Searchbar": {
+ "SearchSketch": "Chercher des croquis...",
+ "SearchCollection": "Chercher des collections...",
+ "ClearTerm": "effacer"
+ },
+ "UploadFileModal": {
+ "Title": "Téléverser un fichier",
+ "CloseButtonARIA": "Fermer la boîte de dialogue de téléversement de fichiers",
+ "SizeLimitError": "Erreur: Vous ne pouvez plus téléverser de fichiers. Vous avez atteint la limite de taille totale de {{sizeLimit}}.\n If you would like to upload more, please remove the ones you aren't using anymore by\n in your "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "Déposez des fichiers ici ou cliquez pour utiliser le navigateur de fichiers"
+ },
+ "ErrorModal": {
+ "MessageLogin": "Pour pouvoir sauvegarder les croquis, vous devez être connecté. Veuillez ",
+ "Login": "Se connecter",
+ "LoginOr": " ou ",
+ "SignUp": "S'enregistrer",
+ "MessageLoggedOut": "Il semble que vous ayez été déconnecté. Veuillez ",
+ "LogIn": "Se connecter",
+ "SavedDifferentWindow": "Le projet que vous avez tenté de sauvegarder a été sauvegardé à partir d'une\n autre fenêtre. Veuillez rafraîchir la page pour voir la dernière version.",
+ "LinkTitle": "Erreur de liaison de compte",
+ "LinkMessage": "Il y a eu un problème pour relier votre compte {{serviceauth}} à votre compte éditeur web p5.js. Votre compte {{serviceauth}} a déjà été lié à un autre compte de éditeur Web p5.js."
+ },
+ "ShareModal": {
+ "Embed": "Intégrer",
+ "Present": "Présenter",
+ "Fullscreen": "Plein écran",
+ "Edit": "Éditer"
+ },
+ "CollectionView": {
+ "TitleCreate": "Créer une collection",
+ "TitleDefault": "collection"
+ },
+ "Collection": {
+ "Title": "Éditeur web p5.js | Mes collections",
+ "AnothersTitle": "Éditeur web p5.js | Collections de {{anotheruser}}",
+ "Share": "Partager",
+ "URLLink": "Lien vers la collection",
+ "AddSketch": "Ajouter un croquis",
+ "DeleteFromCollection": "Êtes-vous sûr de vouloir supprimer {{name_sketch}} de cette collection?",
+ "SketchDeleted": "Croquis supprimé",
+ "SketchRemoveARIA": "Supprimer le croquis de la collection",
+ "DescriptionPlaceholder": "Ajouter une description",
+ "Description": "description",
+ "NumSketches": "{{count}} croquis",
+ "NumSketches_plural": "{{count}} croquis",
+ "By": "Collection par ",
+ "NoSketches": "Aucun croquis dans la collection",
+ "TableSummary": "tableau contenant toutes les collections",
+ "HeaderName": "Nom",
+ "HeaderCreatedAt": "Date ajoutée",
+ "HeaderUser": "Propriétaire",
+ "DirectionAscendingARIA": "Ascendant",
+ "DirectionDescendingARIA": "Descendant",
+ "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
+ "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant."
+ },
+ "AddToCollectionList": {
+ "Title": "Éditeur web p5.js | Mes collections",
+ "AnothersTitle": "Éditeur web p5.js | Collections de {{anotheruser}}",
+ "Empty": "Aucune collection"
+ },
+ "CollectionCreate": {
+ "Title": "Éditeur web p5.js | Créer une collection",
+ "FormError": "Impossible de créer une collection",
+ "FormLabel": "Nom de la collection",
+ "FormLabelARIA": "nom",
+ "NameRequired": "Le nom de la collection est requis",
+ "Description": "Description (optionnel)",
+ "DescriptionARIA": "description",
+ "DescriptionPlaceholder": "Mes croquis préférés",
+ "SubmitCollectionCreate": "Créer la collection"
+ },
+ "DashboardView": {
+ "CreateCollection": "Créer une collection",
+ "NewSketch": "Nouveau croquis",
+ "CreateCollectionOverlay": "Créer une collection"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "Croquis",
+ "Collections": "Collections",
+ "Assets": "Ressources"
+ },
+ "CollectionList": {
+ "Title": "Éditeur web p5.js | Mes collections",
+ "AnothersTitle": "Éditeur web p5.js | collections de {{anotheruser}}",
+ "NoCollections": "Aucune collection.",
+ "TableSummary": "tableau contenant toutes les collections",
+ "HeaderName": "Nom",
+ "HeaderCreatedAt": "Date de création",
+ "HeaderCreatedAt_mobile": "Créé",
+ "HeaderUpdatedAt": "Date de mise à jour",
+ "HeaderUpdatedAt_mobile": "Mise à jour",
+ "HeaderNumItems": "# croquis",
+ "HeaderNumItems_mobile": "# croquis",
+ "DirectionAscendingARIA": "Ascendant",
+ "DirectionDescendingARIA": "Descendant",
+ "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
+ "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant.",
+ "AddSketch": "Ajouter un croquis"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "Activer/désactiver l'ouverture/fermeture des options de collections",
+ "AddSketch": "Ajouter un croquis",
+ "Delete": "Supprimer",
+ "Rename": "Renommer"
+ },
+ "Overlay": {
+ "AriaLabel": "Fermer {{title}} superposé"
+ },
+ "QuickAddList": {
+ "ButtonRemoveARIA": "Supprimer de la collection",
+ "ButtonAddToCollectionARIA": "Ajouter à la collection",
+ "View": "Voir"
+ },
+ "SketchList": {
+ "View": "Voir",
+ "Title": "Éditeur web p5.js | Mes croquis",
+ "AnothersTitle": "Éditeur web p5.js | Croquis de {{anotheruser}}",
+ "ToggleLabelARIA": "Activer/désactiver l'ouverture/fermeture des options de croquis",
+ "DropdownRename": "Renommer",
+ "DropdownDownload": "Télécharger",
+ "DropdownDuplicate": "Dupliquer",
+ "DropdownAddToCollection": "Ajouter à la collection",
+ "DropdownDelete": "Supprimer",
+ "DirectionAscendingARIA": "Ascendant",
+ "DirectionDescendingARIA": "Descendant",
+ "ButtonLabelAscendingARIA": "Trier par {{displayName}} ascendant.",
+ "ButtonLabelDescendingARIA": "Trier par {{displayName}} descendant.",
+ "AddToCollectionOverlayTitle": "Ajouter à la collection",
+ "TableSummary": "tableau contenant toutes projets sauvegardés",
+ "HeaderName": "Croquis",
+ "HeaderCreatedAt": "Date de création",
+ "HeaderCreatedAt_mobile": "Créé",
+ "HeaderUpdatedAt": "Date de mise à jour",
+ "HeaderUpdatedAt_mobile": "mise à jour",
+ "NoSketches": "Aucun croquis."
+ },
+ "AddToCollectionSketchList": {
+ "Title": "Éditeur web p5.js | Mes croquis",
+ "AnothersTitle": "Éditeur web p5.js | Croquis de {{anotheruser}}",
+ "NoCollections": "Aucune collection."
+ },
+ "Editor": {
+ "OpenSketchARIA": "Ouvrir la navigation dans les fichiers croquis",
+ "CloseSketchARIA": "Fermer la navigation dans les fichiers croquis",
+ "UnsavedChangesARIA": "Le croquis a des modifications non sauvegardées",
+ "KeyUpLineNumber": "ligne {{lineNumber}}"
+ },
+ "EditorAccessibility": {
+ "NoLintMessages": "Il n'y a pas de messages lint",
+ "CurrentLine": "Ligne actuelle"
+ },
+ "Timer": {
+ "SavedAgo": "Sauvegardé: {{timeAgo}}"
+ },
+ "formatDate": {
+ "JustNow": "à l'instant",
+ "15Seconds": "Il y a 15 secondes",
+ "25Seconds": "Il y a 25 secondes",
+ "35Seconds": "Il y a 35 secondes",
+ "Ago": "Il y a {{timeAgo}}"
+ },
+ "CopyableInput": {
+ "CopiedARIA": "Copié dans le presse-papiers!",
+ "OpenViewTabARIA": "Ouvrir la fenêtre {{label}} dans un nouvel onglet"
+ },
+ "EditableInput": {
+ "EditValue": "Modifier la valeur de {{display}}",
+ "EmptyPlaceholder": "Aucune valeur"
+ },
+ "PreviewNav": {
+ "EditSketchARIA": "Modifier le croquis",
+ "ByUser": "par"
+ },
+ "MobilePreferences": {
+ "Settings": "Paramètres",
+ "GeneralSettings": "Paramètres généraux",
+ "Accessibility": "Accessibilité",
+ "AccessibleOutput": "Sortie accessible",
+ "Theme": "Thème",
+ "LightTheme": "Clair",
+ "DarkTheme": "Sombre",
+ "HighContrastTheme": "Contraste élevé",
+ "Autosave": "Sauvegarde automatique",
+ "WordWrap": "Retour à la ligne automatique",
+ "LineNumbers": "Numéros de ligne",
+ "LintWarningSound": "Son d'alarme Lint",
+ "UsedScreenReader": "Utilisé avec un lecteur de texte",
+ "PlainText": "Text brut",
+ "TableText": "Tableau de texte",
+ "Sound": "Son"
+ },
+ "PreferenceCreators": {
+ "On": "Activé",
+ "Off": "Désactivé"
+ },
+ "MobileDashboardView": {
+ "Examples": "Exemples",
+ "Sketches": "Croquis",
+ "Collections": "Collections",
+ "Assets": "Ressources",
+ "MyStuff": "Mes trucs",
+ "CreateSketch": "Créer un croquis",
+ "CreateCollection": "Créer une collection"
+ },
+ "Explorer": {
+ "Files": "Fichiers"
}
-
+}
diff --git a/translations/locales/it/translations.json b/translations/locales/it/translations.json
index 28dd939f18..421ddfef5f 100644
--- a/translations/locales/it/translations.json
+++ b/translations/locales/it/translations.json
@@ -248,9 +248,9 @@
"SubmitFeedback": "Invia Feedback",
"SubmitFeedbackARIA": "invia-feedback",
"AddCollectionTitle": "Aggiungi a collezione",
- "AddCollectionARIA":"aggiungi a collezione",
+ "AddCollectionARIA": "aggiungi a collezione",
"ShareTitle": "Condividi",
- "ShareARIA":"condividi"
+ "ShareARIA": "condividi"
},
"NewFileModal": {
"Title": "Crea File",
@@ -294,7 +294,7 @@
"errorShortPassword": "La password dev'essere di almeno 6 caratteri",
"errorConfirmPassword": "Per favore inserisci la password di conferma",
"errorNewPassword": "Per favore inserisci una nuova password o lascia la password corrente vuota.",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorEmptyUsername": "Per favore inserisci un nome utente.",
"errorLongUsername": "Il nome utente deve avere meno di 20 caratteri.",
"errorValidUsername": "Il nome utente dev'essere composto solo da numeri, lettere, must only consist of numbers, letters, punti, trattini e trattini bassi."
@@ -448,7 +448,7 @@
"Description": "descrizione",
"NumSketches": "{{count}} sketch",
"NumSketches_plural": "{{count}} sketch",
- "By":"Collezione da ",
+ "By": "Collezione da ",
"NoSketches": "Nessuno sketch nella collezione",
"TableSummary": "pagina contenente tutte le collezioni",
"HeaderName": "Nome",
@@ -512,7 +512,7 @@
"Overlay": {
"AriaLabel": "Chiudi {{title}} sovrapposizione"
},
- "QuickAddList":{
+ "QuickAddList": {
"ButtonRemoveARIA": "Rimuovi dalla collezione",
"ButtonAddToCollectionARIA": "Aggiungi alla collezione",
"View": "Vista"
diff --git a/translations/locales/ja/translations.json b/translations/locales/ja/translations.json
index bb65617c9c..bfe967a534 100644
--- a/translations/locales/ja/translations.json
+++ b/translations/locales/ja/translations.json
@@ -1,608 +1,608 @@
{
- "Nav": {
- "File": {
- "Title": "ファイル",
- "New": "新規作成",
- "Share": "共有",
- "Duplicate": "別名で保存",
- "Open": "開く",
- "Download": "ダウンロード",
- "AddToCollection": "コレクションへ追加",
- "Examples": "サンプルを開く"
- },
- "Edit": {
- "Title": "編集",
- "TidyCode": "コード整形",
- "Find": "検索",
- "Replace": "置換"
- },
- "Sketch": {
- "Title": "スケッチ",
- "AddFile": "ファイルを追加",
- "AddFolder": "フォルダを追加",
- "Run": "実行",
- "Stop": "停止"
- },
- "Help": {
- "Title": "ヘルプ",
- "KeyboardShortcuts": "キーボードショートカット",
- "Reference": "リファレンス(英語)",
- "About": "ウェブエディタについて"
- },
- "Lang": "言語",
- "BackEditor": "エディタに戻る",
- "WarningUnsavedChanges": "このページを離れてもよろしいですか?未保存の変更があります。",
- "Login": "ログイン",
- "LoginOr": "もしくは",
- "SignUp": "アカウント作成",
- "Auth": {
- "Welcome": "ようこそ",
- "Hello": "こんにちは",
- "MyAccount": "マイアカウント",
- "My": "My",
- "MySketches": "マイスケッチ",
- "MyCollections": "マイコレクション",
- "Asset": "アセット",
- "MyAssets": "マイアセット",
- "LogOut": "ログアウト"
- }
- },
- "Banner": {
- "Copy": "Donate Today! Support p5.js and the Processing Foundation."
- },
- "CodemirrorFindAndReplace": {
- "ToggleReplace": "置換の切り替え",
- "Find": "検索",
- "FindPlaceholder": "ファイル内検索",
- "Replace": "置換",
- "ReplaceAll": "全て置換",
- "ReplacePlaceholder": "置換するテキスト",
- "Regex": "正規表現",
- "CaseSensitive": "大文字小文字を区別する",
- "WholeWords": "全単語",
- "Previous": "前へ",
- "Next": "次へ",
- "NoResults": "該当なし",
- "Close": "閉じる"
- },
- "LoginForm": {
- "UsernameOrEmail": "メールアドレスもしくはユーザー名",
- "UsernameOrEmailARIA": "メールアドレスもしくはユーザー名",
- "Password": "パスワード",
- "PasswordARIA": "パスワード",
- "Submit": "ログイン"
- },
- "LoginView": {
- "Title": "p5.js ウェブエディタ | ログイン",
- "Login": "ログイン",
- "LoginOr": "もしくは",
- "SignUp": "アカウントを作成してください",
- "Email": "メールアドレス",
- "Username": "ユーザー名",
- "DontHaveAccount": "ユーザー登録してない場合",
- "ForgotPassword": "パスワードを忘れた場合",
- "ResetPassword": "パスワードを再設定してください"
- },
- "SocialAuthButton": {
- "Connect": "{{serviceauth}} アカウントへ接続",
- "Unlink": "{{serviceauth}} アカウントへの接続解除",
- "Login": "{{serviceauth}} でログイン",
- "LogoARIA": "{{serviceauth}} ロゴ"
- },
- "About": {
- "Title": "ウェブエディタについて",
- "TitleHelmet": "p5.js ウェブエディター | ウェブエディタについて",
- "Contribute": "コントリビュート",
- "NewP5": "p5.jsは初めてですか?",
- "Report": "バグレポート",
- "Learn": "p5.jsを学ぶ",
- "Twitter": "Twitter",
- "Home": "ホーム",
- "Instagram": "Instagram",
- "Discord": "Discord",
- "WebEditor": "ウェブエディタ",
- "Resources": "参考資料",
- "Libraries": "ライブラリ",
- "Forum": "フォーラム",
- "Examples": "サンプルを開く",
- "PrivacyPolicy": "プライバシーポリシー",
- "TermsOfUse": "利用規約",
- "CodeOfConduct": "行動規範"
- },
- "Toast": {
- "OpenedNewSketch": "新しいスケッチを開きました",
- "SketchSaved": "スケッチを保存しました",
- "SketchFailedSave": "スケッチの保存に失敗しました",
- "AutosaveEnabled": "自動保存を有効にしました",
- "LangChange": "言語を変更しました",
- "SettingsSaved": "設定を保存しました"
- },
- "Toolbar": {
- "Preview": "プレビュー",
- "Auto-refresh": "自動更新",
- "OpenPreferencesARIA": "設定を開く",
- "PlaySketchARIA": "スケッチを実行",
- "PlayOnlyVisualSketchARIA": "ビジュアルスケッチのみ実行",
- "StopSketchARIA": "スケッチを停止",
- "EditSketchARIA": "スケッチ名を編集",
- "NewSketchNameARIA": "新しいスケッチ名",
- "By": " by "
- },
- "Console": {
- "Title": "コンソール",
- "Clear": "クリア",
- "ClearARIA": "コンソールをクリア",
- "Close": "閉じる",
- "CloseARIA": "コンソールを閉じる",
- "Open": "開く",
- "OpenARIA": "コンソールを開く"
- },
- "Preferences": {
- "Settings": "設定",
- "GeneralSettings": "一般設定",
- "Accessibility": "アクセシビリティ",
- "Theme": "テーマ",
- "LightTheme": "ライト",
- "LightThemeARIA": "ライトテーマ オン",
- "DarkTheme": "ダーク",
- "DarkThemeARIA": "ダークテーマ オン",
- "HighContrastTheme": "ハイコントラスト",
- "HighContrastThemeARIA": "ハイコントラストテーマ オン",
- "TextSize": "フォントサイズ",
- "DecreaseFont": "小さく",
- "DecreaseFontARIA": "フォントサイズを小さくする",
- "IncreaseFont": "大きく",
- "IncreaseFontARIA": "フォントサイズを大きくする",
- "Autosave": "自動保存",
- "On": "オン",
- "AutosaveOnARIA": "自動保存 オン",
- "Off": "オフ",
- "AutosaveOffARIA": "自動保存 オフ",
- "AutocloseBracketsQuotes": "括弧を自動的に閉じる",
- "AutocloseBracketsQuotesOnARIA": "括弧を自動的に閉じる オン",
- "AutocloseBracketsQuotesOffARIA": "括弧を自動的に閉じる オフ",
- "WordWrap": "ワードラップ",
- "WordWrapOnARIA": "ラインラップ オン",
- "WordWrapOffARIA": "ラインラップ オフ",
- "LineNumbers": "行番号",
- "LineNumbersOnARIA": "行番号 表示",
- "LineNumbersOffARIA": "行番号 非表示",
- "LintWarningSound": "リント警告音",
- "LintWarningOnARIA": "リント オン",
- "LintWarningOffARIA": "リント オフ",
- "PreviewSound": "プレビューサウンド",
- "PreviewSoundARIA": "プレビューサウンド",
- "AccessibleTextBasedCanvas": "アクセシビリティ用テキストベースのキャンバス",
- "UsedScreenReader": "スクリーンリーダーと併用",
- "PlainText": "プレーンテキスト",
- "TextOutputARIA": "テキスト出力 オン",
- "TableText": "テーブルテキスト",
- "TableOutputARIA": "テーブルテキスト出力 オン"
- },
- "KeyboardShortcuts": {
- "Title": " キーボードショートカット",
- "ShortcutsFollow": "エディタのショートカットは以下の通りです",
- "SublimeText": "Sublime Text ショートカット",
- "CodeEditing": {
- "Tidy": "整形",
- "FindText": "テキスト検索",
- "FindNextMatch": "次の一致を検索",
- "FindPrevMatch": "前の一致を検索",
- "ReplaceTextMatch": "一致するテキストの置換",
- "IndentCodeLeft": "インデント左揃え",
- "IndentCodeRight": "インデント右揃え",
- "CommentLine": "コメントアウト",
- "FindNextTextMatch": "次の一致するテキストを検索",
- "FindPreviousTextMatch": "前の一致するテキストを検索",
- "CodeEditing": "コード編集"
- },
- "GeneralSelection": {
- "StartSketch": "スケッチを実行",
- "StopSketch": "スケッチを停止",
- "TurnOnAccessibleOutput": "アクセシビリティ出力を有効にする",
- "TurnOffAccessibleOutput": "アクセシビリティ出力を無効にする"
- }
- },
- "Sidebar": {
- "Title": "スケッチファイル",
- "ToggleARIA": "スケッチファイルオプションの開く/閉じるを切り替える",
- "AddFolder": "フォルダを作成",
- "AddFolderARIA": "フォルダを追加",
- "AddFile": "ファイルを作成",
- "AddFileARIA": "ファイルを追加",
- "UploadFile": "ファイルアップロード",
- "UploadFileARIA": "ファイルアップロード"
- },
- "FileNode": {
- "OpenFolderARIA": "フォルダ内のコンテンツを開く",
- "CloseFolderARIA": "フォルダ内のコンテンツを閉じる",
- "ToggleFileOptionsARIA": "ファイルオプションの開く/閉じるを切り替える",
- "AddFolder": "フォルダを作成",
- "AddFolderARIA": "フォルダを追加",
- "AddFile": "ファイル作成",
- "AddFileARIA": "ファイルを追加",
- "UploadFile": "ファイルアップロード",
- "UploadFileARIA": "ファイルアップロード",
- "Rename": "名前を変更",
- "Delete": "削除"
- },
- "Common": {
- "SiteName": "p5.js Web Editor",
- "Error": "エラー",
- "ErrorARIA": "エラー",
- "Save": "保存",
- "p5logoARIA": "p5.js ロゴ",
- "DeleteConfirmation": "{{name}}を削除してもよろしいですか?"
- },
- "IDEView": {
- "SubmitFeedback": "フィードバック送信",
- "SubmitFeedbackARIA": "フィードバックを送信",
- "AddCollectionTitle": "コレクション追加",
- "AddCollectionARIA":"コレクションに追加する",
- "ShareTitle": "共有",
- "ShareARIA":"共有する"
- },
- "NewFileModal": {
- "Title": "ファイル作成",
- "CloseButtonARIA": "新規ファイルモーダルを閉じる",
- "EnterName": "ファイル名を入力してください",
- "InvalidType": "ファイルタイプが無効です。有効な拡張子は、.js、.css、.json、.xml、.stl、.txt、.csv、.tsv、.mtl、.frag、.vertです。"
- },
- "NewFileForm": {
- "AddFileSubmit": "ファイルを追加",
- "Placeholder": "ファイル名"
- },
- "NewFolderModal": {
- "Title": "フォルダ作成",
- "CloseButtonARIA": "新しいフォルダモーダルを閉じる",
- "EnterName": "フォルダ名を入力してください",
- "EmptyName": "スペースのみのフォルダ名は無効です",
- "InvalidExtension": "フォルダ名に拡張子を含めることはできません"
- },
- "NewFolderForm": {
- "AddFolderSubmit": "フォルダを追加",
- "Placeholder": "フォルダ名"
- },
- "ResetPasswordForm": {
- "Email": "登録に使用したメールアドレス",
- "EmailARIA": "メールアドレス",
- "Submit": "パスワードリセットのメールを送信する"
- },
- "ResetPasswordView": {
- "Title": "p5.js ウェブエディター | パスワードリセット",
- "Reset": "パスワードをリセットする",
- "Submitted": "パスワードリセットのメールを送信しました。もし、見当たらない場合は\n 迷惑メールフォルダに入っている可能性がありますので、確認してください。",
- "Login": "ログイン",
- "LoginOr": "もしくは",
- "SignUp": "アカウントを作成する"
- },
- "ReduxFormUtils": {
- "errorInvalidEmail": "無効なメールアドレスを入力してください",
- "errorEmptyEmail": "メールアドレスを入力してください",
- "errorPasswordMismatch": "パスワードが一致しません",
- "errorEmptyPassword": "パスワードを入力してください",
- "errorShortPassword": "パスワードは6文字以上にしてください",
- "errorConfirmPassword": "確認用のパスワードを入力してください",
- "errorNewPassword": "新しいパスワードを入力するか、現在のパスワードを空欄のままにしてください。",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
- "errorEmptyUsername": "ユーザー名を入力してください。",
- "errorLongUsername": "ユーザー名は20文字以内にしてください。",
- "errorValidUsername": "ユーザー名は、英数字、ピリオド(.)、ダッシュ(-)、アンダースコア(_)のみで構成されている必要があります。"
- },
- "NewPasswordView": {
- "Title": "p5.js ウェブエディター | 新しいパスワード",
- "Description": "新しいパスワードの設定",
- "TokenInvalidOrExpired": "パスワードリセットトークンが無効か、有効期限が切れています。",
- "EmptyPassword": "パスワードを入力してください",
- "PasswordConfirmation": "確認用のパスワードを入力してください",
- "PasswordMismatch": "パスワードは一致している必要があります"
- },
- "AccountForm": {
- "Email": "メールアドレス",
- "EmailARIA": "メールアドレス",
- "Unconfirmed": "未確認。",
- "EmailSent": "確認メールが送信されましたので、メールを確認してください。",
- "Resend": "確認メールを再送する",
- "UserName": "ユーザー名",
- "UserNameARIA": "ユーザー名",
- "CurrentPassword": "現在のパスワード",
- "CurrentPasswordARIA": "現在のパスワード",
- "NewPassword": "新しいパスワード",
- "NewPasswordARIA": "新しいパスワード",
- "SubmitSaveAllSettings": "すべての設定を保存"
- },
- "AccountView": {
- "SocialLogin": "ソーシャルログイン",
- "SocialLoginDescription": "GitHubやGoogleアカウントを使って、p5.js ウェブエディターにログインできます。",
- "Title": "p5.js ウェブエディター | アカウント設定",
- "Settings": "アカウント設定",
- "AccountTab": "アカウント",
- "AccessTokensTab": "アクセストークン"
- },
- "APIKeyForm": {
- "ConfirmDelete": "本当に{{key_label}}を削除しますか?",
- "Summary": "パーソナルアクセストークンは、自動スクリプトがエディタAPIにアクセスできるようにするための\n パスワードのような役割を果たします。\n アクセスを必要とするスクリプトごとにトークンを作成します。",
- "CreateToken": "新しいトークンを作成",
- "TokenLabel": "このトークンはなんのため?",
- "TokenPlaceholder": "このトークンはなんのため? 例:インポートスクリプト",
- "CreateTokenSubmit": "作成",
- "NoTokens": "既存のトークンはありません。",
- "NewTokenTitle": "新しいアクセストークン",
- "NewTokenInfo": "新しいパーソナルアクセストークンをコピーしてください。\n トークンをもう1度と見ることはできません!",
- "ExistingTokensTitle": "既存のトークン"
- },
- "APIKeyList": {
- "Name": "名前",
- "Created": "作成日時",
- "LastUsed": "最後に使用した日時",
- "Actions": "アクション",
- "Never": "一度も使用されていません",
- "DeleteARIA": "APIキーを削除"
- },
- "NewPasswordForm": {
- "Title": "パスワード",
- "TitleARIA": "パスワード",
- "ConfirmPassword": "確認用パスワード",
- "ConfirmPasswordARIA": "確認用パスワード",
- "SubmitSetNewPassword": "新しいパスワードを設定"
- },
- "SignupForm": {
- "Title": "ユーザー名",
- "TitleARIA": "ユーザー名",
- "Email": "メールアドレス",
- "EmailARIA": "メールアドレス",
- "Password": "パスワード",
- "PasswordARIA": "パスワード",
- "ConfirmPassword": "確認用パスワード",
- "ConfirmPasswordARIA": "確認用パスワード",
- "SubmitSignup": "アカウント作成"
- },
- "SignupView": {
- "Title": "p5.js ウェブエディター | ユーザー登録",
- "Description": "ユーザー登録",
- "Or": "もしくは",
- "AlreadyHave": "既にアカウントをお持ちですか?",
- "Login": "ログイン",
- "Warning": "アカウント作成をすると、p5.js エディターの <0>利用規約0> と <1>プライバシー ポリシー1> に同意したことになります。"
- },
- "EmailVerificationView": {
- "Title": "p5.js ウェブエディター | メールアドレス認証",
- "Verify": "メールアドレスを確認してください",
- "InvalidTokenNull": "そのリンクは無効です。",
- "Checking": "トークンを検証中です、お待ちください...",
- "Verified": "すべて完了しました、あなたのメールアドレスは確認されました。",
- "InvalidState": "何か問題が発生しました。"
- },
- "AssetList": {
- "Title": "p5.js ウェブエディター | マイアセット",
- "ToggleOpenCloseARIA": "アセットオプションの開閉を切り替え",
- "Delete": "削除",
- "OpenNewTab": "新しいタブで開く",
- "NoUploadedAssets": "アップロードされたアセットはありません。",
- "HeaderName": "Name",
- "HeaderSize": "サイズ",
- "HeaderSketch": "スケッチ"
- },
- "Feedback": {
- "Title": "p5.js ウェブエディター | フィードバック",
- "ViaGithubHeader": "Github Issuesを利用",
- "ViaGithubDescription": "Githubに詳しい方は、バグレポートやフィードバックのために、こちらからお願いします。",
- "GoToGithub": "Githubへアクセスする",
- "ViaGoogleHeader": "Google Formを利用",
- "ViaGoogleDescription": "こちらのフォームから報告することもできます。",
- "GoToForm": "フォームへアクセスする"
- },
- "Searchbar": {
- "SearchSketch": "スケッチを検索...",
- "SearchCollection": "コレクションを検索...",
- "ClearTerm": "clear"
- },
- "UploadFileModal": {
- "Title": "アップロードファイル",
- "CloseButtonARIA": "アップロードファイルモーダルを閉じる",
- "SizeLimitError": "エラー: これ以上ファイルをアップロードすることはできません。{{sizeLimit}}の合計サイズの上限に達しました。\n もっとアップロードしたい場合は、もう使っていないものを削除してください。 "
- },
- "FileUploader": {
- "DictDefaultMessage": "ここにファイルをドロップするか、クリックしてファイルブラウザを使用してください"
- },
- "ErrorModal": {
- "MessageLogin": "スケッチを保存するにはログインが必要です。ログインしてください。 ",
- "Login": "ログイン",
- "LoginOr": " もしくは ",
- "SignUp": "アカウントを作成してください",
- "MessageLoggedOut": "ログアウトされたようです。ログインしてください。 ",
- "LogIn": "ログイン",
- "SavedDifferentWindow": "保存しようとしたプロジェクトが別のウィンドウから保存されました。\n 最新版をご覧になるにはページを更新してください。",
- "LinkTitle": "アカウント接続エラー",
- "LinkMessage": "あなたの {{serviceauth}} アカウントとp5.js ウェブエディターアカウントの接続に問題がありました。 あなたの {{serviceauth}} アカウントは、すでに別のp5.js ウェブエディターアカウントに接続されています。"
- },
- "ShareModal": {
- "Embed": "埋め込み",
- "Present": "プレゼンモード",
- "Fullscreen": "フルスクリーン",
- "Edit": "共同編集"
- },
- "CollectionView": {
- "TitleCreate": "コレクション作成",
- "TitleDefault": "コレクション"
- },
- "Collection": {
- "Title": "p5.js ウェブエディター | マイコレクション",
- "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のコレクション",
+ "Nav": {
+ "File": {
+ "Title": "ファイル",
+ "New": "新規作成",
"Share": "共有",
- "URLLink": "コレクションのリンク",
- "AddSketch": "スケッチを追加する",
- "DeleteFromCollection": "このコレクションから {{name_sketch}} を削除してもよろしいですか?",
- "SketchDeleted": "スケッチが削除されました",
- "SketchRemoveARIA": "コレクションからスケッチを削除する",
- "DescriptionPlaceholder": "スケッチについて記述する",
- "Description": "コレクションについて",
- "NumSketches": "{{count}} スケッチ",
- "NumSketches_plural": "{{count}} スケッチ",
- "By":"作成者 ",
- "NoSketches": "コレクション内にスケッチがありません",
- "TableSummary": "全コレクションのテーブル",
- "HeaderName": "名前",
- "HeaderCreatedAt": "追加日時",
- "HeaderUser": "所有者",
- "DirectionAscendingARIA": "昇順",
- "DirectionDescendingARIA": "降順",
- "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
- "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。"
- },
- "AddToCollectionList": {
- "Title": "p5.js ウェブエディター | マイコレクション",
- "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
- "Empty": "コレクションは空です"
- },
- "CollectionCreate": {
- "Title": "p5.js ウェブエディター | コレクション作成",
- "FormError": "コレクションを作成することが出来ませんでした",
- "FormLabel": "コレクション名",
- "FormLabelARIA": "名前",
- "NameRequired": "コレクション名は必須です",
- "Description": "コレクションについて (任意)",
- "DescriptionARIA": "スケッチについて",
- "DescriptionPlaceholder": "お気に入りスケッチ",
- "SubmitCollectionCreate": "コレクションを作成"
- },
- "DashboardView": {
- "CreateCollection": "コレクションを作成",
- "NewSketch": "新しいスケッチ",
- "CreateCollectionOverlay": "コレクションを作成"
- },
- "DashboardTabSwitcher": {
- "Sketches": "スケッチ",
- "Collections": "コレクション",
- "Assets": "アセット"
- },
- "CollectionList": {
- "Title": "p5.js ウェブエディター | マイコレクション",
- "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
- "NoCollections": "コレクションがありません。",
- "TableSummary": "全コレクションのテーブル",
- "HeaderName": "名前",
- "HeaderCreatedAt": "作成日",
- "HeaderCreatedAt_mobile": "作成",
- "HeaderUpdatedAt": "更新日",
- "HeaderUpdatedAt_mobile": "更新",
- "HeaderNumItems": "スケッチ No.",
- "HeaderNumItems_mobile": "スケッチ No.",
- "DirectionAscendingARIA": "昇順",
- "DirectionDescendingARIA": "降順",
- "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
- "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。",
- "AddSketch": "スケッチを追加"
- },
- "CollectionListRow": {
- "ToggleCollectionOptionsARIA": "開く/閉じるコレクションのオプションを切り替え",
- "AddSketch": "スケッチを追加",
- "Delete": "削除",
- "Rename": "名前を変更"
- },
- "Overlay": {
- "AriaLabel": "{{title}} オーバーレイを閉じる"
- },
- "QuickAddList":{
- "ButtonRemoveARIA": "コレクションから削除",
- "ButtonAddToCollectionARIA": "コレクションへ追加",
- "View": "表示"
- },
- "SketchList": {
- "View": "表示",
- "Title": "p5.js ウェブエディター | マイスケッチ",
- "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
- "ToggleLabelARIA": "開く/閉じるスケッチ オプションの切り替え",
- "DropdownRename": "名前変更",
- "DropdownDownload": "ダウンロード",
- "DropdownDuplicate": "別名で保存",
- "DropdownAddToCollection": "コレクションへ追加",
- "DropdownDelete": "削除",
- "DirectionAscendingARIA": "昇順",
- "DirectionDescendingARIA": "降順",
- "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
- "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。",
- "AddToCollectionOverlayTitle": "コレクションへ追加",
- "TableSummary": "保存されたすべてのプロジェクトを含むテーブル",
- "HeaderName": "スケッチ",
- "HeaderCreatedAt": "作成日",
- "HeaderCreatedAt_mobile": "作成",
- "HeaderUpdatedAt": "更新日",
- "HeaderUpdatedAt_mobile": "更新",
- "NoSketches": "スケッチがありません"
- },
- "AddToCollectionSketchList": {
- "Title": "p5.js ウェブエディター | マイスケッチ",
- "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
- "NoCollections": "コレクションがありません。"
- },
- "Editor": {
- "OpenSketchARIA": "スケッチファイルのナビゲーションを開く",
- "CloseSketchARIA": "スケッチファイルのナビゲーションを閉じる",
- "UnsavedChangesARIA": "スケッチに未保存の変更があります",
- "KeyUpLineNumber": "{{lineNumber}} 行"
- },
- "EditorAccessibility": {
- "NoLintMessages": "リントメッセージはありません",
- "CurrentLine": "現在の行"
- },
- "Timer": {
- "SavedAgo": "保存されました: {{timeAgo}}"
- },
- "formatDate": {
- "JustNow": "たった今",
- "15Seconds": "15秒前",
- "25Seconds": "25秒前",
- "35Seconds": "35秒前",
- "Ago": "{{timeAgo}}前"
- },
- "CopyableInput": {
- "CopiedARIA": "クリップボードへコピーしました!",
- "OpenViewTabARIA": "新しいタブで {{label}} ビューを開く"
- },
- "EditableInput": {
- "EditValue": "{{display}} 値を編集",
- "EmptyPlaceholder": "値がありません"
- },
- "PreviewNav": {
- "EditSketchARIA": "スケッチを編集する",
- "ByUser": "によって"
- },
- "MobilePreferences": {
- "Settings": "設定",
- "GeneralSettings": "一般設定",
- "Accessibility": "アクセシビリティ",
- "AccessibleOutput": "アクセシビリティ出力",
- "Theme": "テーマ",
- "LightTheme": "ライト",
- "DarkTheme": "ダーク",
- "HighContrastTheme": "ハイコントラスト",
- "Autosave": "自動保存",
- "WordWrap": "ワードラップ",
- "LineNumbers": "行番号",
- "LintWarningSound": "リント警告音",
- "UsedScreenReader": "スクリーンリーダーと併用",
- "PlainText": "プレーンテキスト",
- "TableText": "テーブルテキスト",
- "Sound": "サウンド"
- },
- "PreferenceCreators": {
- "On": "オン",
- "Off": "オフ"
- },
- "MobileDashboardView": {
- "Examples": "サンプル",
- "Sketches": "スケッチ",
- "Collections": "コレクション",
- "Assets": "アセット",
- "MyStuff": "マイスタッフ",
- "CreateSketch": "スケッチ作成",
- "CreateCollection": "コレクション作成"
- },
- "Explorer": {
- "Files": "ファイル"
+ "Duplicate": "別名で保存",
+ "Open": "開く",
+ "Download": "ダウンロード",
+ "AddToCollection": "コレクションへ追加",
+ "Examples": "サンプルを開く"
},
- "Cookies": {
+ "Edit": {
+ "Title": "編集",
+ "TidyCode": "コード整形",
+ "Find": "検索",
+ "Replace": "置換"
+ },
+ "Sketch": {
+ "Title": "スケッチ",
+ "AddFile": "ファイルを追加",
+ "AddFolder": "フォルダを追加",
+ "Run": "実行",
+ "Stop": "停止"
+ },
+ "Help": {
+ "Title": "ヘルプ",
+ "KeyboardShortcuts": "キーボードショートカット",
+ "Reference": "リファレンス(英語)",
+ "About": "ウェブエディタについて"
+ },
+ "Lang": "言語",
+ "BackEditor": "エディタに戻る",
+ "WarningUnsavedChanges": "このページを離れてもよろしいですか?未保存の変更があります。",
+ "Login": "ログイン",
+ "LoginOr": "もしくは",
+ "SignUp": "アカウント作成",
+ "Auth": {
+ "Welcome": "ようこそ",
+ "Hello": "こんにちは",
+ "MyAccount": "マイアカウント",
+ "My": "My",
+ "MySketches": "マイスケッチ",
+ "MyCollections": "マイコレクション",
+ "Asset": "アセット",
+ "MyAssets": "マイアセット",
+ "LogOut": "ログアウト"
+ }
+ },
+ "Banner": {
+ "Copy": "Donate Today! Support p5.js and the Processing Foundation."
+ },
+ "CodemirrorFindAndReplace": {
+ "ToggleReplace": "置換の切り替え",
+ "Find": "検索",
+ "FindPlaceholder": "ファイル内検索",
+ "Replace": "置換",
+ "ReplaceAll": "全て置換",
+ "ReplacePlaceholder": "置換するテキスト",
+ "Regex": "正規表現",
+ "CaseSensitive": "大文字小文字を区別する",
+ "WholeWords": "全単語",
+ "Previous": "前へ",
+ "Next": "次へ",
+ "NoResults": "該当なし",
+ "Close": "閉じる"
+ },
+ "LoginForm": {
+ "UsernameOrEmail": "メールアドレスもしくはユーザー名",
+ "UsernameOrEmailARIA": "メールアドレスもしくはユーザー名",
+ "Password": "パスワード",
+ "PasswordARIA": "パスワード",
+ "Submit": "ログイン"
+ },
+ "LoginView": {
+ "Title": "p5.js ウェブエディタ | ログイン",
+ "Login": "ログイン",
+ "LoginOr": "もしくは",
+ "SignUp": "アカウントを作成してください",
+ "Email": "メールアドレス",
+ "Username": "ユーザー名",
+ "DontHaveAccount": "ユーザー登録してない場合",
+ "ForgotPassword": "パスワードを忘れた場合",
+ "ResetPassword": "パスワードを再設定してください"
+ },
+ "SocialAuthButton": {
+ "Connect": "{{serviceauth}} アカウントへ接続",
+ "Unlink": "{{serviceauth}} アカウントへの接続解除",
+ "Login": "{{serviceauth}} でログイン",
+ "LogoARIA": "{{serviceauth}} ロゴ"
+ },
+ "About": {
+ "Title": "ウェブエディタについて",
+ "TitleHelmet": "p5.js ウェブエディター | ウェブエディタについて",
+ "Contribute": "コントリビュート",
+ "NewP5": "p5.jsは初めてですか?",
+ "Report": "バグレポート",
+ "Learn": "p5.jsを学ぶ",
+ "Twitter": "Twitter",
+ "Home": "ホーム",
+ "Instagram": "Instagram",
+ "Discord": "Discord",
+ "WebEditor": "ウェブエディタ",
+ "Resources": "参考資料",
+ "Libraries": "ライブラリ",
+ "Forum": "フォーラム",
+ "Examples": "サンプルを開く",
+ "PrivacyPolicy": "プライバシーポリシー",
+ "TermsOfUse": "利用規約",
+ "CodeOfConduct": "行動規範"
+ },
+ "Toast": {
+ "OpenedNewSketch": "新しいスケッチを開きました",
+ "SketchSaved": "スケッチを保存しました",
+ "SketchFailedSave": "スケッチの保存に失敗しました",
+ "AutosaveEnabled": "自動保存を有効にしました",
+ "LangChange": "言語を変更しました",
+ "SettingsSaved": "設定を保存しました"
+ },
+ "Toolbar": {
+ "Preview": "プレビュー",
+ "Auto-refresh": "自動更新",
+ "OpenPreferencesARIA": "設定を開く",
+ "PlaySketchARIA": "スケッチを実行",
+ "PlayOnlyVisualSketchARIA": "ビジュアルスケッチのみ実行",
+ "StopSketchARIA": "スケッチを停止",
+ "EditSketchARIA": "スケッチ名を編集",
+ "NewSketchNameARIA": "新しいスケッチ名",
+ "By": " by "
+ },
+ "Console": {
+ "Title": "コンソール",
+ "Clear": "クリア",
+ "ClearARIA": "コンソールをクリア",
+ "Close": "閉じる",
+ "CloseARIA": "コンソールを閉じる",
+ "Open": "開く",
+ "OpenARIA": "コンソールを開く"
+ },
+ "Preferences": {
+ "Settings": "設定",
+ "GeneralSettings": "一般設定",
+ "Accessibility": "アクセシビリティ",
+ "Theme": "テーマ",
+ "LightTheme": "ライト",
+ "LightThemeARIA": "ライトテーマ オン",
+ "DarkTheme": "ダーク",
+ "DarkThemeARIA": "ダークテーマ オン",
+ "HighContrastTheme": "ハイコントラスト",
+ "HighContrastThemeARIA": "ハイコントラストテーマ オン",
+ "TextSize": "フォントサイズ",
+ "DecreaseFont": "小さく",
+ "DecreaseFontARIA": "フォントサイズを小さくする",
+ "IncreaseFont": "大きく",
+ "IncreaseFontARIA": "フォントサイズを大きくする",
+ "Autosave": "自動保存",
+ "On": "オン",
+ "AutosaveOnARIA": "自動保存 オン",
+ "Off": "オフ",
+ "AutosaveOffARIA": "自動保存 オフ",
+ "AutocloseBracketsQuotes": "括弧を自動的に閉じる",
+ "AutocloseBracketsQuotesOnARIA": "括弧を自動的に閉じる オン",
+ "AutocloseBracketsQuotesOffARIA": "括弧を自動的に閉じる オフ",
+ "WordWrap": "ワードラップ",
+ "WordWrapOnARIA": "ラインラップ オン",
+ "WordWrapOffARIA": "ラインラップ オフ",
+ "LineNumbers": "行番号",
+ "LineNumbersOnARIA": "行番号 表示",
+ "LineNumbersOffARIA": "行番号 非表示",
+ "LintWarningSound": "リント警告音",
+ "LintWarningOnARIA": "リント オン",
+ "LintWarningOffARIA": "リント オフ",
+ "PreviewSound": "プレビューサウンド",
+ "PreviewSoundARIA": "プレビューサウンド",
+ "AccessibleTextBasedCanvas": "アクセシビリティ用テキストベースのキャンバス",
+ "UsedScreenReader": "スクリーンリーダーと併用",
+ "PlainText": "プレーンテキスト",
+ "TextOutputARIA": "テキスト出力 オン",
+ "TableText": "テーブルテキスト",
+ "TableOutputARIA": "テーブルテキスト出力 オン"
+ },
+ "KeyboardShortcuts": {
+ "Title": " キーボードショートカット",
+ "ShortcutsFollow": "エディタのショートカットは以下の通りです",
+ "SublimeText": "Sublime Text ショートカット",
+ "CodeEditing": {
+ "Tidy": "整形",
+ "FindText": "テキスト検索",
+ "FindNextMatch": "次の一致を検索",
+ "FindPrevMatch": "前の一致を検索",
+ "ReplaceTextMatch": "一致するテキストの置換",
+ "IndentCodeLeft": "インデント左揃え",
+ "IndentCodeRight": "インデント右揃え",
+ "CommentLine": "コメントアウト",
+ "FindNextTextMatch": "次の一致するテキストを検索",
+ "FindPreviousTextMatch": "前の一致するテキストを検索",
+ "CodeEditing": "コード編集"
+ },
+ "GeneralSelection": {
+ "StartSketch": "スケッチを実行",
+ "StopSketch": "スケッチを停止",
+ "TurnOnAccessibleOutput": "アクセシビリティ出力を有効にする",
+ "TurnOffAccessibleOutput": "アクセシビリティ出力を無効にする"
+ }
+ },
+ "Sidebar": {
+ "Title": "スケッチファイル",
+ "ToggleARIA": "スケッチファイルオプションの開く/閉じるを切り替える",
+ "AddFolder": "フォルダを作成",
+ "AddFolderARIA": "フォルダを追加",
+ "AddFile": "ファイルを作成",
+ "AddFileARIA": "ファイルを追加",
+ "UploadFile": "ファイルアップロード",
+ "UploadFileARIA": "ファイルアップロード"
+ },
+ "FileNode": {
+ "OpenFolderARIA": "フォルダ内のコンテンツを開く",
+ "CloseFolderARIA": "フォルダ内のコンテンツを閉じる",
+ "ToggleFileOptionsARIA": "ファイルオプションの開く/閉じるを切り替える",
+ "AddFolder": "フォルダを作成",
+ "AddFolderARIA": "フォルダを追加",
+ "AddFile": "ファイル作成",
+ "AddFileARIA": "ファイルを追加",
+ "UploadFile": "ファイルアップロード",
+ "UploadFileARIA": "ファイルアップロード",
+ "Rename": "名前を変更",
+ "Delete": "削除"
+ },
+ "Common": {
+ "SiteName": "p5.js Web Editor",
+ "Error": "エラー",
+ "ErrorARIA": "エラー",
+ "Save": "保存",
+ "p5logoARIA": "p5.js ロゴ",
+ "DeleteConfirmation": "{{name}}を削除してもよろしいですか?"
+ },
+ "IDEView": {
+ "SubmitFeedback": "フィードバック送信",
+ "SubmitFeedbackARIA": "フィードバックを送信",
+ "AddCollectionTitle": "コレクション追加",
+ "AddCollectionARIA": "コレクションに追加する",
+ "ShareTitle": "共有",
+ "ShareARIA": "共有する"
+ },
+ "NewFileModal": {
+ "Title": "ファイル作成",
+ "CloseButtonARIA": "新規ファイルモーダルを閉じる",
+ "EnterName": "ファイル名を入力してください",
+ "InvalidType": "ファイルタイプが無効です。有効な拡張子は、.js、.css、.json、.xml、.stl、.txt、.csv、.tsv、.mtl、.frag、.vertです。"
+ },
+ "NewFileForm": {
+ "AddFileSubmit": "ファイルを追加",
+ "Placeholder": "ファイル名"
+ },
+ "NewFolderModal": {
+ "Title": "フォルダ作成",
+ "CloseButtonARIA": "新しいフォルダモーダルを閉じる",
+ "EnterName": "フォルダ名を入力してください",
+ "EmptyName": "スペースのみのフォルダ名は無効です",
+ "InvalidExtension": "フォルダ名に拡張子を含めることはできません"
+ },
+ "NewFolderForm": {
+ "AddFolderSubmit": "フォルダを追加",
+ "Placeholder": "フォルダ名"
+ },
+ "ResetPasswordForm": {
+ "Email": "登録に使用したメールアドレス",
+ "EmailARIA": "メールアドレス",
+ "Submit": "パスワードリセットのメールを送信する"
+ },
+ "ResetPasswordView": {
+ "Title": "p5.js ウェブエディター | パスワードリセット",
+ "Reset": "パスワードをリセットする",
+ "Submitted": "パスワードリセットのメールを送信しました。もし、見当たらない場合は\n 迷惑メールフォルダに入っている可能性がありますので、確認してください。",
+ "Login": "ログイン",
+ "LoginOr": "もしくは",
+ "SignUp": "アカウントを作成する"
+ },
+ "ReduxFormUtils": {
+ "errorInvalidEmail": "無効なメールアドレスを入力してください",
+ "errorEmptyEmail": "メールアドレスを入力してください",
+ "errorPasswordMismatch": "パスワードが一致しません",
+ "errorEmptyPassword": "パスワードを入力してください",
+ "errorShortPassword": "パスワードは6文字以上にしてください",
+ "errorConfirmPassword": "確認用のパスワードを入力してください",
+ "errorNewPassword": "新しいパスワードを入力するか、現在のパスワードを空欄のままにしてください。",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
+ "errorEmptyUsername": "ユーザー名を入力してください。",
+ "errorLongUsername": "ユーザー名は20文字以内にしてください。",
+ "errorValidUsername": "ユーザー名は、英数字、ピリオド(.)、ダッシュ(-)、アンダースコア(_)のみで構成されている必要があります。"
+ },
+ "NewPasswordView": {
+ "Title": "p5.js ウェブエディター | 新しいパスワード",
+ "Description": "新しいパスワードの設定",
+ "TokenInvalidOrExpired": "パスワードリセットトークンが無効か、有効期限が切れています。",
+ "EmptyPassword": "パスワードを入力してください",
+ "PasswordConfirmation": "確認用のパスワードを入力してください",
+ "PasswordMismatch": "パスワードは一致している必要があります"
+ },
+ "AccountForm": {
+ "Email": "メールアドレス",
+ "EmailARIA": "メールアドレス",
+ "Unconfirmed": "未確認。",
+ "EmailSent": "確認メールが送信されましたので、メールを確認してください。",
+ "Resend": "確認メールを再送する",
+ "UserName": "ユーザー名",
+ "UserNameARIA": "ユーザー名",
+ "CurrentPassword": "現在のパスワード",
+ "CurrentPasswordARIA": "現在のパスワード",
+ "NewPassword": "新しいパスワード",
+ "NewPasswordARIA": "新しいパスワード",
+ "SubmitSaveAllSettings": "すべての設定を保存"
+ },
+ "AccountView": {
+ "SocialLogin": "ソーシャルログイン",
+ "SocialLoginDescription": "GitHubやGoogleアカウントを使って、p5.js ウェブエディターにログインできます。",
+ "Title": "p5.js ウェブエディター | アカウント設定",
+ "Settings": "アカウント設定",
+ "AccountTab": "アカウント",
+ "AccessTokensTab": "アクセストークン"
+ },
+ "APIKeyForm": {
+ "ConfirmDelete": "本当に{{key_label}}を削除しますか?",
+ "Summary": "パーソナルアクセストークンは、自動スクリプトがエディタAPIにアクセスできるようにするための\n パスワードのような役割を果たします。\n アクセスを必要とするスクリプトごとにトークンを作成します。",
+ "CreateToken": "新しいトークンを作成",
+ "TokenLabel": "このトークンはなんのため?",
+ "TokenPlaceholder": "このトークンはなんのため? 例:インポートスクリプト",
+ "CreateTokenSubmit": "作成",
+ "NoTokens": "既存のトークンはありません。",
+ "NewTokenTitle": "新しいアクセストークン",
+ "NewTokenInfo": "新しいパーソナルアクセストークンをコピーしてください。\n トークンをもう1度と見ることはできません!",
+ "ExistingTokensTitle": "既存のトークン"
+ },
+ "APIKeyList": {
+ "Name": "名前",
+ "Created": "作成日時",
+ "LastUsed": "最後に使用した日時",
+ "Actions": "アクション",
+ "Never": "一度も使用されていません",
+ "DeleteARIA": "APIキーを削除"
+ },
+ "NewPasswordForm": {
+ "Title": "パスワード",
+ "TitleARIA": "パスワード",
+ "ConfirmPassword": "確認用パスワード",
+ "ConfirmPasswordARIA": "確認用パスワード",
+ "SubmitSetNewPassword": "新しいパスワードを設定"
+ },
+ "SignupForm": {
+ "Title": "ユーザー名",
+ "TitleARIA": "ユーザー名",
+ "Email": "メールアドレス",
+ "EmailARIA": "メールアドレス",
+ "Password": "パスワード",
+ "PasswordARIA": "パスワード",
+ "ConfirmPassword": "確認用パスワード",
+ "ConfirmPasswordARIA": "確認用パスワード",
+ "SubmitSignup": "アカウント作成"
+ },
+ "SignupView": {
+ "Title": "p5.js ウェブエディター | ユーザー登録",
+ "Description": "ユーザー登録",
+ "Or": "もしくは",
+ "AlreadyHave": "既にアカウントをお持ちですか?",
+ "Login": "ログイン",
+ "Warning": "アカウント作成をすると、p5.js エディターの <0>利用規約0> と <1>プライバシー ポリシー1> に同意したことになります。"
+ },
+ "EmailVerificationView": {
+ "Title": "p5.js ウェブエディター | メールアドレス認証",
+ "Verify": "メールアドレスを確認してください",
+ "InvalidTokenNull": "そのリンクは無効です。",
+ "Checking": "トークンを検証中です、お待ちください...",
+ "Verified": "すべて完了しました、あなたのメールアドレスは確認されました。",
+ "InvalidState": "何か問題が発生しました。"
+ },
+ "AssetList": {
+ "Title": "p5.js ウェブエディター | マイアセット",
+ "ToggleOpenCloseARIA": "アセットオプションの開閉を切り替え",
+ "Delete": "削除",
+ "OpenNewTab": "新しいタブで開く",
+ "NoUploadedAssets": "アップロードされたアセットはありません。",
+ "HeaderName": "Name",
+ "HeaderSize": "サイズ",
+ "HeaderSketch": "スケッチ"
+ },
+ "Feedback": {
+ "Title": "p5.js ウェブエディター | フィードバック",
+ "ViaGithubHeader": "Github Issuesを利用",
+ "ViaGithubDescription": "Githubに詳しい方は、バグレポートやフィードバックのために、こちらからお願いします。",
+ "GoToGithub": "Githubへアクセスする",
+ "ViaGoogleHeader": "Google Formを利用",
+ "ViaGoogleDescription": "こちらのフォームから報告することもできます。",
+ "GoToForm": "フォームへアクセスする"
+ },
+ "Searchbar": {
+ "SearchSketch": "スケッチを検索...",
+ "SearchCollection": "コレクションを検索...",
+ "ClearTerm": "clear"
+ },
+ "UploadFileModal": {
+ "Title": "アップロードファイル",
+ "CloseButtonARIA": "アップロードファイルモーダルを閉じる",
+ "SizeLimitError": "エラー: これ以上ファイルをアップロードすることはできません。{{sizeLimit}}の合計サイズの上限に達しました。\n もっとアップロードしたい場合は、もう使っていないものを削除してください。 "
+ },
+ "FileUploader": {
+ "DictDefaultMessage": "ここにファイルをドロップするか、クリックしてファイルブラウザを使用してください"
+ },
+ "ErrorModal": {
+ "MessageLogin": "スケッチを保存するにはログインが必要です。ログインしてください。 ",
+ "Login": "ログイン",
+ "LoginOr": " もしくは ",
+ "SignUp": "アカウントを作成してください",
+ "MessageLoggedOut": "ログアウトされたようです。ログインしてください。 ",
+ "LogIn": "ログイン",
+ "SavedDifferentWindow": "保存しようとしたプロジェクトが別のウィンドウから保存されました。\n 最新版をご覧になるにはページを更新してください。",
+ "LinkTitle": "アカウント接続エラー",
+ "LinkMessage": "あなたの {{serviceauth}} アカウントとp5.js ウェブエディターアカウントの接続に問題がありました。 あなたの {{serviceauth}} アカウントは、すでに別のp5.js ウェブエディターアカウントに接続されています。"
+ },
+ "ShareModal": {
+ "Embed": "埋め込み",
+ "Present": "プレゼンモード",
+ "Fullscreen": "フルスクリーン",
+ "Edit": "共同編集"
+ },
+ "CollectionView": {
+ "TitleCreate": "コレクション作成",
+ "TitleDefault": "コレクション"
+ },
+ "Collection": {
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のコレクション",
+ "Share": "共有",
+ "URLLink": "コレクションのリンク",
+ "AddSketch": "スケッチを追加する",
+ "DeleteFromCollection": "このコレクションから {{name_sketch}} を削除してもよろしいですか?",
+ "SketchDeleted": "スケッチが削除されました",
+ "SketchRemoveARIA": "コレクションからスケッチを削除する",
+ "DescriptionPlaceholder": "スケッチについて記述する",
+ "Description": "コレクションについて",
+ "NumSketches": "{{count}} スケッチ",
+ "NumSketches_plural": "{{count}} スケッチ",
+ "By": "作成者 ",
+ "NoSketches": "コレクション内にスケッチがありません",
+ "TableSummary": "全コレクションのテーブル",
+ "HeaderName": "名前",
+ "HeaderCreatedAt": "追加日時",
+ "HeaderUser": "所有者",
+ "DirectionAscendingARIA": "昇順",
+ "DirectionDescendingARIA": "降順",
+ "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
+ "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。"
+ },
+ "AddToCollectionList": {
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
+ "Empty": "コレクションは空です"
+ },
+ "CollectionCreate": {
+ "Title": "p5.js ウェブエディター | コレクション作成",
+ "FormError": "コレクションを作成することが出来ませんでした",
+ "FormLabel": "コレクション名",
+ "FormLabelARIA": "名前",
+ "NameRequired": "コレクション名は必須です",
+ "Description": "コレクションについて (任意)",
+ "DescriptionARIA": "スケッチについて",
+ "DescriptionPlaceholder": "お気に入りスケッチ",
+ "SubmitCollectionCreate": "コレクションを作成"
+ },
+ "DashboardView": {
+ "CreateCollection": "コレクションを作成",
+ "NewSketch": "新しいスケッチ",
+ "CreateCollectionOverlay": "コレクションを作成"
+ },
+ "DashboardTabSwitcher": {
+ "Sketches": "スケッチ",
+ "Collections": "コレクション",
+ "Assets": "アセット"
+ },
+ "CollectionList": {
+ "Title": "p5.js ウェブエディター | マイコレクション",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}}のコレクション",
+ "NoCollections": "コレクションがありません。",
+ "TableSummary": "全コレクションのテーブル",
+ "HeaderName": "名前",
+ "HeaderCreatedAt": "作成日",
+ "HeaderCreatedAt_mobile": "作成",
+ "HeaderUpdatedAt": "更新日",
+ "HeaderUpdatedAt_mobile": "更新",
+ "HeaderNumItems": "スケッチ No.",
+ "HeaderNumItems_mobile": "スケッチ No.",
+ "DirectionAscendingARIA": "昇順",
+ "DirectionDescendingARIA": "降順",
+ "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
+ "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。",
+ "AddSketch": "スケッチを追加"
+ },
+ "CollectionListRow": {
+ "ToggleCollectionOptionsARIA": "開く/閉じるコレクションのオプションを切り替え",
+ "AddSketch": "スケッチを追加",
+ "Delete": "削除",
+ "Rename": "名前を変更"
+ },
+ "Overlay": {
+ "AriaLabel": "{{title}} オーバーレイを閉じる"
+ },
+ "QuickAddList": {
+ "ButtonRemoveARIA": "コレクションから削除",
+ "ButtonAddToCollectionARIA": "コレクションへ追加",
+ "View": "表示"
+ },
+ "SketchList": {
+ "View": "表示",
+ "Title": "p5.js ウェブエディター | マイスケッチ",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
+ "ToggleLabelARIA": "開く/閉じるスケッチ オプションの切り替え",
+ "DropdownRename": "名前変更",
+ "DropdownDownload": "ダウンロード",
+ "DropdownDuplicate": "別名で保存",
+ "DropdownAddToCollection": "コレクションへ追加",
+ "DropdownDelete": "削除",
+ "DirectionAscendingARIA": "昇順",
+ "DirectionDescendingARIA": "降順",
+ "ButtonLabelAscendingARIA": "昇順に{{displayName}}で並び替えます。",
+ "ButtonLabelDescendingARIA": "降順に{{displayName}}で並び替えます。",
+ "AddToCollectionOverlayTitle": "コレクションへ追加",
+ "TableSummary": "保存されたすべてのプロジェクトを含むテーブル",
+ "HeaderName": "スケッチ",
+ "HeaderCreatedAt": "作成日",
+ "HeaderCreatedAt_mobile": "作成",
+ "HeaderUpdatedAt": "更新日",
+ "HeaderUpdatedAt_mobile": "更新",
+ "NoSketches": "スケッチがありません"
+ },
+ "AddToCollectionSketchList": {
+ "Title": "p5.js ウェブエディター | マイスケッチ",
+ "AnothersTitle": "p5.js ウェブエディター | {{anotheruser}} のスケッチ",
+ "NoCollections": "コレクションがありません。"
+ },
+ "Editor": {
+ "OpenSketchARIA": "スケッチファイルのナビゲーションを開く",
+ "CloseSketchARIA": "スケッチファイルのナビゲーションを閉じる",
+ "UnsavedChangesARIA": "スケッチに未保存の変更があります",
+ "KeyUpLineNumber": "{{lineNumber}} 行"
+ },
+ "EditorAccessibility": {
+ "NoLintMessages": "リントメッセージはありません",
+ "CurrentLine": "現在の行"
+ },
+ "Timer": {
+ "SavedAgo": "保存されました: {{timeAgo}}"
+ },
+ "formatDate": {
+ "JustNow": "たった今",
+ "15Seconds": "15秒前",
+ "25Seconds": "25秒前",
+ "35Seconds": "35秒前",
+ "Ago": "{{timeAgo}}前"
+ },
+ "CopyableInput": {
+ "CopiedARIA": "クリップボードへコピーしました!",
+ "OpenViewTabARIA": "新しいタブで {{label}} ビューを開く"
+ },
+ "EditableInput": {
+ "EditValue": "{{display}} 値を編集",
+ "EmptyPlaceholder": "値がありません"
+ },
+ "PreviewNav": {
+ "EditSketchARIA": "スケッチを編集する",
+ "ByUser": "によって"
+ },
+ "MobilePreferences": {
+ "Settings": "設定",
+ "GeneralSettings": "一般設定",
+ "Accessibility": "アクセシビリティ",
+ "AccessibleOutput": "アクセシビリティ出力",
+ "Theme": "テーマ",
+ "LightTheme": "ライト",
+ "DarkTheme": "ダーク",
+ "HighContrastTheme": "ハイコントラスト",
+ "Autosave": "自動保存",
+ "WordWrap": "ワードラップ",
+ "LineNumbers": "行番号",
+ "LintWarningSound": "リント警告音",
+ "UsedScreenReader": "スクリーンリーダーと併用",
+ "PlainText": "プレーンテキスト",
+ "TableText": "テーブルテキスト",
+ "Sound": "サウンド"
+ },
+ "PreferenceCreators": {
+ "On": "オン",
+ "Off": "オフ"
+ },
+ "MobileDashboardView": {
+ "Examples": "サンプル",
+ "Sketches": "スケッチ",
+ "Collections": "コレクション",
+ "Assets": "アセット",
+ "MyStuff": "マイスタッフ",
+ "CreateSketch": "スケッチ作成",
+ "CreateCollection": "コレクション作成"
+ },
+ "Explorer": {
+ "Files": "ファイル"
+ },
+ "Cookies": {
"Header": "Cookies",
"Body": "p5.jsエディターはクッキーを使用しています。 いくつかの項目はウェブサイトの機能に不可欠であり、アカウントとプリファレンスを管理することが可能です。 そのほかの項目は不可欠ではありません—それらは分析され、私たちのコミュニティについてより理解するために利用されます。 私たちがこのデータを販売したり、広告に使用したりすることは決してありません。 あなたはどのcookiesの利用を許可するか決めることができます。詳細については私たちの<0>プライバシーポリシー<0>をご参照ください。",
"AllowAll": "すべて許可",
diff --git a/translations/locales/ko/translations.json b/translations/locales/ko/translations.json
index 901a948b2a..d917e223d7 100644
--- a/translations/locales/ko/translations.json
+++ b/translations/locales/ko/translations.json
@@ -226,9 +226,9 @@
"SubmitFeedback": "Submit Feedback",
"SubmitFeedbackARIA": "submit-feedback",
"AddCollectionTitle": "Add to collection",
- "AddCollectionARIA":"add to collection",
+ "AddCollectionARIA": "add to collection",
"ShareTitle": "Share",
- "ShareARIA":"share"
+ "ShareARIA": "share"
},
"NewFileModal": {
"Title": "파일 생성",
@@ -272,7 +272,7 @@
"errorShortPassword": "Password must be at least 6 characters",
"errorConfirmPassword": "Please confirm your password",
"errorNewPassword": "Please enter a new password or leave the current password empty.",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorEmptyUsername": "Please enter a username.",
"errorLongUsername": "Username must be less than 20 characters.",
"errorValidUsername": "Username must only consist of numbers, letters, periods, dashes, and underscores."
@@ -351,7 +351,7 @@
"Or": "또는",
"AlreadyHave": "이미 계정이 있나요?",
"Login": "로그인",
- "Warning" : "가입하면 p5.js 편집기의 <0>이용 약관0> 및 <1>개인정보 보호정책1>에 동의하는 것입니다."
+ "Warning": "가입하면 p5.js 편집기의 <0>이용 약관0> 및 <1>개인정보 보호정책1>에 동의하는 것입니다."
},
"EmailVerificationView": {
"Title": "p5.js 웹에디터 | 이메일 확인",
@@ -427,7 +427,7 @@
"Description": "description",
"NumSketches": "{{count}} sketch",
"NumSketches_plural": "{{count}} sketches",
- "By":"Collection by ",
+ "By": "Collection by ",
"NoSketches": "No sketches in collection",
"TableSummary": "table containing all collections",
"HeaderName": "Name",
@@ -491,7 +491,7 @@
"Overlay": {
"AriaLabel": "Close {{title}} overlay"
},
- "QuickAddList":{
+ "QuickAddList": {
"ButtonRemoveARIA": "Remove from collection",
"ButtonAddToCollectionARIA": "Add to collection",
"View": "View"
diff --git a/translations/locales/sv/translations.json b/translations/locales/sv/translations.json
index 5937f38449..8bfb3d5e7a 100644
--- a/translations/locales/sv/translations.json
+++ b/translations/locales/sv/translations.json
@@ -238,9 +238,9 @@
"SubmitFeedback": "Skicka feedback",
"SubmitFeedbackARIA": "skicka-feedback",
"AddCollectionTitle": "Lägg till i samling",
- "AddCollectionARIA":"lägg till i samling",
+ "AddCollectionARIA": "lägg till i samling",
"ShareTitle": "Dela",
- "ShareARIA":"dela"
+ "ShareARIA": "dela"
},
"NewFileModal": {
"Title": "Skapa fil",
@@ -284,7 +284,7 @@
"errorShortPassword": "Lösenordet måste vara minst 6 tecken",
"errorConfirmPassword": "Ange en lösenordsbekräftelse",
"errorNewPassword": "Ange ett nytt lösenord eller lämna det nuvarande lösenordet tomt.",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorEmptyUsername": "Ange ett användarnamn.",
"errorLongUsername": "Användarnamnet får innehålla högst 19 tecken.",
"errorValidUsername": "Användarnamnet får bara innehålla siffror, bokstäver, punkter, bindestreck och understreck."
@@ -438,7 +438,7 @@
"Description": "beskrivning",
"NumSketches": "{{count}} sketch",
"NumSketches_plural": "{{count}} sketcher",
- "By":"Samling av ",
+ "By": "Samling av ",
"NoSketches": "Inga sketcher i samling",
"TableSummary": "tabell med alla samlingar",
"HeaderName": "Namn",
@@ -502,7 +502,7 @@
"Overlay": {
"AriaLabel": "Stäng {{title}} övre lager"
},
- "QuickAddList":{
+ "QuickAddList": {
"ButtonRemoveARIA": "Ta bort från samling",
"ButtonAddToCollectionARIA": "Lägg till i samling",
"View": "Granska"
@@ -613,4 +613,3 @@
"CodeOfConduct": "Uppförandekod"
}
}
-
diff --git a/translations/locales/tr/translations.json b/translations/locales/tr/translations.json
index f7b3b42d2b..641ec977bd 100644
--- a/translations/locales/tr/translations.json
+++ b/translations/locales/tr/translations.json
@@ -287,7 +287,7 @@
"errorShortPassword": "Şifre en az 6 karakter olmalıdır",
"errorConfirmPassword": "Lütfen şifrenizi doğrulayın",
"errorNewPassword": "Lütfen yeni bir şifre girin veya mevcut şifreyi boş bırakın.",
- "errorNewPasswordRepeat":"Your New Password must differ from the current one.",
+ "errorNewPasswordRepeat": "Your New Password must differ from the current one.",
"errorEmptyUsername": "Lütfen bir kullanıcı adı girin.",
"errorLongUsername": "Kullanıcı adı 20 karakterden az olmalıdır.",
"errorValidUsername": "Kullanıcı adı sadece sayılar, harfler, noktalar, tireler ve alt çizgilerden oluşmalıdır."
@@ -366,7 +366,7 @@
"Or": "Veya",
"AlreadyHave": "Zaten bir hesabın var mı?",
"Login": "Giriş yap",
- "Warning":"Kaydolarak p5.js Editörün Kullanım <0>Koşullarını0> ve <1>Gizlilik Politikasını1> kabul etmiş olursunuz."
+ "Warning": "Kaydolarak p5.js Editörün Kullanım <0>Koşullarını0> ve <1>Gizlilik Politikasını1> kabul etmiş olursunuz."
},
"EmailVerificationView": {
"Title": "p5.js Web Düzenleyicisi | E-posta Doğrulama",
diff --git a/translations/locales/uk-UA/translations.json b/translations/locales/uk-UA/translations.json
index 62e223dfde..da9c3d37dd 100644
--- a/translations/locales/uk-UA/translations.json
+++ b/translations/locales/uk-UA/translations.json
@@ -95,11 +95,11 @@
"About": {
"Title": "Про редактор",
"TitleHelmet": "p5.js вебредактор | Про редактор",
- "Headline": "Створюй, поширюй та реміксуй скетчі p5.js за допомогою редактора p5.js.",
+ "Headline": "Створюй, поширюй та реміксуй скетчі p5.js за допомогою редактора p5.js.",
"Contribute": "Внесок",
- "IntroDescription1": "p5.js — це безплатна бібліотека JavaScript з відкритим кодом для навчання програмуванню та створення мистецтва. За допомогою редактора p5.js ви можете створювати, поширювати та реміксувати скетчі p5.js без потреби щось завантажувати чи налаштовувати.",
+ "IntroDescription1": "p5.js — це безплатна бібліотека JavaScript з відкритим кодом для навчання програмуванню та створення мистецтва. За допомогою редактора p5.js ви можете створювати, поширювати та реміксувати скетчі p5.js без потреби щось завантажувати чи налаштовувати.",
"IntroDescription2": "Ми хочемо, щоб програмування та інструменти для його вивчення були відкритими й доступними. Підтримайте p5.js, зробивши внесок на користь Processing Foundation — це допоможе розвивати бібліотеку, створювати навчальні матеріали та проводити події для спільноти.",
- "Donate": "Підтримати",
+ "Donate": "Підтримати",
"NewP5": "Початківець в p5.js?",
"Report": "Повідомити про помилку",
"Learn": "Посібники",
@@ -107,21 +107,21 @@
"Home": "Головна",
"Instagram": "Instagram",
"Discord": "Discord",
- "DiscordCTA": "Доєднуйтесь у Discord",
- "Youtube": "Youtube",
+ "DiscordCTA": "Доєднуйтесь у Discord",
+ "Youtube": "Youtube",
"Github": "Github",
"GetInvolved": "Долучитися",
"WebEditor": "Вебредактор",
"Resources": "Ресурси",
- "Reference": "Довідка",
+ "Reference": "Довідка",
"Libraries": "Бібліотеки",
"Forum": "Форум",
- "ForumCTA": "Приєднатися до форуму",
+ "ForumCTA": "Приєднатися до форуму",
"Examples": "Приклади",
"PrivacyPolicy": "Політика конфіденційності",
"TermsOfUse": "Умови використання",
"CodeOfConduct": "Кодекс поведінки",
- "Email": "Електронна пошта",
+ "Email": "Електронна пошта",
"EmailAddress": "hello@p5js.org",
"Socials": "Соціальні мережі",
"LinkDescriptions": {
@@ -144,7 +144,7 @@
"AutosaveEnabled": "Автозбереження увімкнено.",
"LangChange": "Мова змінена",
"SettingsSaved": "Налаштування збережено.",
- "EmptyCurrentPass": "Ви не ввели пароль.",
+ "EmptyCurrentPass": "Ви не ввели пароль.",
"IncorrectCurrentPass": "Поточний пароль неправильний",
"DefaultError": "Щось пішло не так",
"UserNotFound": "Користувача не знайдено",
@@ -160,7 +160,7 @@
"EditSketchARIA": "Редагувати ім'я скетча",
"NewSketchNameARIA": "Нове ім'я скетча",
"By": " користувачем ",
- "CustomLibraryVersion": "Вибрана версія p5.js",
+ "CustomLibraryVersion": "Вибрана версія p5.js",
"VersionPickerARIA": "Вибір версії",
"NewVersionPickerARIA": "Вибір версії"
},
@@ -177,7 +177,7 @@
"Settings": "Налаштування",
"GeneralSettings": "Загальні налаштування",
"Accessibility": "Інші параметри",
- "LibraryManagement": "Управління бібліотекою",
+ "LibraryManagement": "Управління бібліотекою",
"Theme": "Тема",
"LightTheme": "Світла",
"LightThemeARIA": "світла тема на",
@@ -190,7 +190,7 @@
"DecreaseFontARIA": "зменшити розмір шрифту",
"IncreaseFont": "Збільшити",
"IncreaseFontARIA": "збільшити розмір шрифту",
- "FontSize": "Розмір шрифту",
+ "FontSize": "Розмір шрифту",
"SetFontSize": "встановити розмір шрифту",
"Autosave": "Автозбереження",
"On": "Так",
@@ -200,7 +200,7 @@
"AutocloseBracketsQuotes": "Автоматичне закриття дужок та лапок",
"AutocloseBracketsQuotesOnARIA": "автоматично закривати дужки та лапки",
"AutocloseBracketsQuotesOffARIA": "автоматично закривати дужки та лапки",
- "AutocompleteHinter": "Автозаповнення коду",
+ "AutocompleteHinter": "Автозаповнення коду",
"AutocompleteHinterOnARIA": "автозаповнення коду увімкено",
"AutocompleteHinterOffARIA": "автозаповнення коду вимкнено",
"WordWrap": "Перенесення слів",
@@ -220,12 +220,12 @@
"TextOutputARIA": "текст виводиться на",
"TableText": "Таблиця",
"TableOutputARIA": "виведення таблиці на",
- "LibraryVersion": "Версія p5.js",
+ "LibraryVersion": "Версія p5.js",
"LibraryVersionInfo": "Доступний [новий реліз 2.0](https://github.com/processing/p5.js/releases/) p5.js! Він стане стандартним у серпні 2026 року, тож скористайтеся цим часом, щоб протестувати його та повідомити про помилки. Зацікавлені в переході скетчів з 1.x на 2.0? Перегляньте [ресурсів сумісності та переходу.](https://github.com/processing/p5.js-compatibility)",
"CustomVersionTitle": "Керувати власними бібліотеками? Чудово!",
"CustomVersionInfo": "Версія p5.js наразі керується у коді файлу index.html. Це означає, що її не можна змінити з цієї вкладки.",
"CustomVersionReset": "Якщо ви хочете використовувати стандартні бібліотеки, замініть теги