refactor: Reorganize project structure and clean up repository
This commit reflects an intentional reorganization of the project. - Deletes obsolete root-level files. - Restructures the admin and gallery components. - Tracks previously untracked application modules.
This commit is contained in:
parent
e4240d3f02
commit
5053cbcf44
80
admin.html
80
admin.html
@ -1,80 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Admin - Store Status</title>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css">
|
|
||||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
|
|
||||||
<style>
|
|
||||||
.notification.is-hidden {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#spinner {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<section class="section">
|
|
||||||
<div class="container">
|
|
||||||
<div class="columns is-centered">
|
|
||||||
<div class="column is-half">
|
|
||||||
<div class="box">
|
|
||||||
<h1 class="title">Update Store Status</h1>
|
|
||||||
<h2 class="subtitle">
|
|
||||||
Modify the store's status and scrolling message. Enter your password and click "Save Changes" to apply them.
|
|
||||||
</h2>
|
|
||||||
|
|
||||||
<div class="field">
|
|
||||||
<label class="label" for="scrolling-message">Scrolling Message</label>
|
|
||||||
<div class="control">
|
|
||||||
<input class="input" type="text" id="scrolling-message" placeholder="e.g., We are having a sale!">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field">
|
|
||||||
<label class="checkbox">
|
|
||||||
<input type="checkbox" id="is-closed-checkbox">
|
|
||||||
Store is Closed (Override)
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field" id="closed-message-field" style="display: none;">
|
|
||||||
<label class="label" for="closed-message">Closed Message</label>
|
|
||||||
<div class="control">
|
|
||||||
<textarea class="textarea" id="closed-message" placeholder="e.g., We are closed for a private event."></textarea>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<hr>
|
|
||||||
|
|
||||||
<div class="field">
|
|
||||||
<label class="label" for="password">Password</label>
|
|
||||||
<div class="control">
|
|
||||||
<input class="input" type="password" id="password" placeholder="Enter password to save changes">
|
|
||||||
</div>
|
|
||||||
<p class="help">This is required to save any changes.</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="field">
|
|
||||||
<div class="control">
|
|
||||||
<button class="button is-success" id="save-button" disabled>
|
|
||||||
<span class="icon is-small" id="spinner">
|
|
||||||
<i class="fas fa-spinner fa-spin"></i>
|
|
||||||
</span>
|
|
||||||
<span>Save Changes</span>
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="notification is-hidden" id="feedback-message"></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<script src="admin.js"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
119
admin.js
119
admin.js
@ -1,119 +0,0 @@
|
|||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
const scrollingMessageInput = document.getElementById('scrolling-message');
|
|
||||||
const isClosedCheckbox = document.getElementById('is-closed-checkbox');
|
|
||||||
const closedMessageField = document.getElementById('closed-message-field');
|
|
||||||
const closedMessageTextarea = document.getElementById('closed-message');
|
|
||||||
const passwordInput = document.getElementById('password');
|
|
||||||
const saveButton = document.getElementById('save-button');
|
|
||||||
const spinner = document.getElementById('spinner');
|
|
||||||
const feedbackMessage = document.getElementById('feedback-message');
|
|
||||||
|
|
||||||
let initialData = {};
|
|
||||||
|
|
||||||
// --- UI Logic ---
|
|
||||||
isClosedCheckbox.addEventListener('change', () => {
|
|
||||||
closedMessageField.style.display = isClosedCheckbox.checked ? 'block' : 'none';
|
|
||||||
});
|
|
||||||
|
|
||||||
function checkForChanges() {
|
|
||||||
const currentData = {
|
|
||||||
message: scrollingMessageInput.value,
|
|
||||||
isClosed: isClosedCheckbox.checked,
|
|
||||||
closedMessage: closedMessageTextarea.value
|
|
||||||
};
|
|
||||||
const hasChanged = JSON.stringify(initialData) !== JSON.stringify(currentData);
|
|
||||||
saveButton.disabled = !hasChanged;
|
|
||||||
}
|
|
||||||
|
|
||||||
[scrollingMessageInput, isClosedCheckbox, closedMessageTextarea].forEach(el => {
|
|
||||||
el.addEventListener('input', checkForChanges);
|
|
||||||
el.addEventListener('change', checkForChanges);
|
|
||||||
});
|
|
||||||
|
|
||||||
// --- Data Handling ---
|
|
||||||
function loadInitialData() {
|
|
||||||
fetch('update.json')
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
const update = data[0];
|
|
||||||
initialData = { ...update }; // Store initial state
|
|
||||||
scrollingMessageInput.value = update.message;
|
|
||||||
isClosedCheckbox.checked = update.isClosed;
|
|
||||||
closedMessageTextarea.value = update.closedMessage;
|
|
||||||
isClosedCheckbox.dispatchEvent(new Event('change'));
|
|
||||||
saveButton.disabled = true; // Start with button disabled
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error loading initial data:', error);
|
|
||||||
showFeedback('Error loading current status. Please check the console.', 'is-danger');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showFeedback(message, type) {
|
|
||||||
feedbackMessage.textContent = message;
|
|
||||||
feedbackMessage.className = `notification ${type}`;
|
|
||||||
feedbackMessage.classList.remove('is-hidden');
|
|
||||||
setTimeout(() => {
|
|
||||||
feedbackMessage.classList.add('is-hidden');
|
|
||||||
}, 5000);
|
|
||||||
}
|
|
||||||
|
|
||||||
saveButton.addEventListener('click', () => {
|
|
||||||
const password = passwordInput.value;
|
|
||||||
if (!password) {
|
|
||||||
showFeedback('Please enter the password to save changes.', 'is-warning');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show loading state
|
|
||||||
saveButton.disabled = true;
|
|
||||||
spinner.style.display = 'inline-block';
|
|
||||||
|
|
||||||
const newUpdateData = [
|
|
||||||
{
|
|
||||||
message: scrollingMessageInput.value,
|
|
||||||
isClosed: isClosedCheckbox.checked,
|
|
||||||
closedMessage: closedMessageTextarea.value
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
fetch('/api/update-status', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json',
|
|
||||||
},
|
|
||||||
body: JSON.stringify({ password: password, data: newUpdateData }),
|
|
||||||
})
|
|
||||||
.then(response => {
|
|
||||||
const contentType = response.headers.get('content-type');
|
|
||||||
if (response.ok && contentType && contentType.includes('application/json')) {
|
|
||||||
return response.json();
|
|
||||||
}
|
|
||||||
return response.text().then(text => {
|
|
||||||
throw new Error(`Server response was not OK or not JSON. Status: ${response.status}. Body: ${text}`);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.then(result => {
|
|
||||||
if (result.success) {
|
|
||||||
showFeedback('Success! The store status has been updated.', 'is-success');
|
|
||||||
initialData = { ...newUpdateData[0] }; // Update initial state to current
|
|
||||||
passwordInput.value = ''; // Clear password field
|
|
||||||
} else {
|
|
||||||
showFeedback(`Error: ${result.message}`, 'is-danger');
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
console.error('Error sending update:', error);
|
|
||||||
showFeedback(error.message, 'is-danger');
|
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
// Hide loading state
|
|
||||||
spinner.style.display = 'none';
|
|
||||||
// Re-enable button only if there are still changes (e.g. if save failed)
|
|
||||||
checkForChanges();
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Load the data when the page loads
|
|
||||||
loadInitialData();
|
|
||||||
});
|
|
||||||
618
admin/admin.js
Normal file
618
admin/admin.js
Normal file
@ -0,0 +1,618 @@
|
|||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
// General Admin Elements
|
||||||
|
const loginModal = document.getElementById('login-modal');
|
||||||
|
const loginForm = document.getElementById('loginForm');
|
||||||
|
const passwordInput = document.getElementById('passwordInput');
|
||||||
|
const loginButton = document.getElementById('loginButton');
|
||||||
|
const adminContent = document.getElementById('admin-content');
|
||||||
|
|
||||||
|
// Tabs
|
||||||
|
const tabs = document.querySelectorAll('.tabs li');
|
||||||
|
const tabContents = document.querySelectorAll('.tab-content');
|
||||||
|
|
||||||
|
// Photo Gallery Elements
|
||||||
|
const uploadForm = document.getElementById('uploadForm');
|
||||||
|
const uploadButton = document.getElementById('uploadButton');
|
||||||
|
const uploadStatus = document.getElementById('uploadStatus');
|
||||||
|
const uploadProgress = document.getElementById('uploadProgress');
|
||||||
|
const tagsInput = document.getElementById('tagsInput');
|
||||||
|
const tagSuggestions = document.getElementById('tagSuggestions');
|
||||||
|
const quickTagButtons = document.getElementById('quickTagButtons');
|
||||||
|
const captionInput = document.getElementById('captionInput');
|
||||||
|
const captionToTagsButton = document.getElementById('captionToTags');
|
||||||
|
const manageGallery = document.getElementById('manage-gallery');
|
||||||
|
const editModal = document.getElementById('editModal');
|
||||||
|
const editPhotoId = document.getElementById('editPhotoId');
|
||||||
|
const editCaption = document.getElementById('editCaption');
|
||||||
|
const editTags = document.getElementById('editTags');
|
||||||
|
const saveChanges = document.getElementById('saveChanges');
|
||||||
|
const modalCloseButton = editModal.querySelector('.delete');
|
||||||
|
const modalCancelButton = editModal.querySelector('.modal-card-foot .button:not(.is-success)');
|
||||||
|
|
||||||
|
// Bulk Delete Modal
|
||||||
|
const bulkDeleteModal = document.getElementById('bulkDeleteModal');
|
||||||
|
const confirmBulkDeleteBtn = document.getElementById('confirmBulkDelete');
|
||||||
|
const cancelBulkDeleteBtn = document.getElementById('cancelBulkDelete');
|
||||||
|
const bulkDeleteModalCloseBtn = bulkDeleteModal.querySelector('.delete');
|
||||||
|
const bulkDeleteCountEl = document.getElementById('bulk-delete-count');
|
||||||
|
const bulkCaption = document.getElementById('bulkCaption');
|
||||||
|
const bulkTags = document.getElementById('bulkTags');
|
||||||
|
const bulkAppendTags = document.getElementById('bulkAppendTags');
|
||||||
|
const applyBulkEdits = document.getElementById('applyBulkEdits');
|
||||||
|
const bulkDelete = document.getElementById('bulkDelete');
|
||||||
|
const selectAllPhotosBtn = document.getElementById('selectAllPhotos');
|
||||||
|
const clearSelectionBtn = document.getElementById('clearSelection');
|
||||||
|
const selectedCountEl = document.getElementById('selectedCount');
|
||||||
|
const bulkPanel = document.getElementById('bulkPanel');
|
||||||
|
let selectedPhotoIds = new Set();
|
||||||
|
let photos = [];
|
||||||
|
|
||||||
|
// Store Status Elements
|
||||||
|
const messageInput = document.getElementById('scrollingMessageInput');
|
||||||
|
const isClosedCheckbox = document.getElementById('isClosedCheckbox');
|
||||||
|
const closedMessageInput = document.getElementById('closedMessageInput');
|
||||||
|
const updateButton = document.getElementById('updateButton');
|
||||||
|
const responseDiv = document.getElementById('response');
|
||||||
|
|
||||||
|
const backendUrl = (() => {
|
||||||
|
const { protocol, hostname } = window.location;
|
||||||
|
return `${protocol}//${hostname}:5000`;
|
||||||
|
})();
|
||||||
|
const LAST_TAGS_KEY = 'bpb-last-tags';
|
||||||
|
let adminPassword = '';
|
||||||
|
const storedPassword = localStorage.getItem('bpb-admin-password');
|
||||||
|
const getAdminPassword = () => adminPassword || localStorage.getItem('bpb-admin-password') || '';
|
||||||
|
|
||||||
|
const showAdmin = () => {
|
||||||
|
adminContent.style.display = 'block';
|
||||||
|
loginModal.classList.remove('is-active');
|
||||||
|
};
|
||||||
|
|
||||||
|
const showLogin = (message) => {
|
||||||
|
if (message) {
|
||||||
|
passwordInput.value = '';
|
||||||
|
passwordInput.placeholder = message;
|
||||||
|
}
|
||||||
|
loginModal.classList.add('is-active');
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleUnauthorized = () => {
|
||||||
|
localStorage.removeItem('bpb-admin-password');
|
||||||
|
adminPassword = '';
|
||||||
|
showLogin('Enter password to continue');
|
||||||
|
};
|
||||||
|
|
||||||
|
// --- Password Protection ---
|
||||||
|
function login(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
const passwordVal = passwordInput.value.trim();
|
||||||
|
if (!passwordVal) return;
|
||||||
|
adminPassword = passwordVal;
|
||||||
|
localStorage.setItem('bpb-admin-password', adminPassword);
|
||||||
|
showAdmin();
|
||||||
|
fetchPhotos();
|
||||||
|
fetchStatus();
|
||||||
|
preloadLastTags();
|
||||||
|
}
|
||||||
|
|
||||||
|
loginForm.addEventListener('submit', login);
|
||||||
|
loginButton.addEventListener('click', login);
|
||||||
|
|
||||||
|
if (storedPassword) {
|
||||||
|
adminPassword = storedPassword;
|
||||||
|
passwordInput.value = storedPassword;
|
||||||
|
showAdmin();
|
||||||
|
fetchPhotos();
|
||||||
|
fetchStatus();
|
||||||
|
preloadLastTags();
|
||||||
|
} else {
|
||||||
|
showLogin();
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Tab Switching ---
|
||||||
|
tabs.forEach(tab => {
|
||||||
|
tab.addEventListener('click', () => {
|
||||||
|
tabs.forEach(item => item.classList.remove('is-active'));
|
||||||
|
tab.classList.add('is-active');
|
||||||
|
|
||||||
|
const target = document.getElementById(tab.dataset.tab);
|
||||||
|
tabContents.forEach(content => content.style.display = 'none');
|
||||||
|
target.style.display = 'block';
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// --- Photo Management ---
|
||||||
|
async function fetchPhotos() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${backendUrl}/photos`);
|
||||||
|
if (response.status === 401) {
|
||||||
|
handleUnauthorized();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
photos = await response.json();
|
||||||
|
const validIds = new Set(photos.map(p => p._id));
|
||||||
|
selectedPhotoIds = new Set(Array.from(selectedPhotoIds).filter(id => validIds.has(id)));
|
||||||
|
updateTagSuggestions();
|
||||||
|
updateQuickTags();
|
||||||
|
renderManageGallery();
|
||||||
|
updateBulkUI();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching photos:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderManageGallery() {
|
||||||
|
manageGallery.innerHTML = '';
|
||||||
|
if (!photos.length) {
|
||||||
|
manageGallery.innerHTML = '<div class="column"><p class="has-text-grey">No photos yet. Upload a photo to get started.</p></div>';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
photos.forEach(photo => {
|
||||||
|
const photoCard = `
|
||||||
|
<div class="column is-half-tablet is-one-third-desktop is-one-quarter-widescreen">
|
||||||
|
<div class="card has-background-light" data-photo-id="${photo._id}">
|
||||||
|
<div class="card-content py-2 px-3 is-flex is-align-items-center is-justify-content-space-between">
|
||||||
|
<label class="checkbox is-size-7">
|
||||||
|
<input type="checkbox" class="select-photo-checkbox" data-photo-id="${photo._id}" ${selectedPhotoIds.has(photo._id) ? 'checked' : ''}>
|
||||||
|
Select
|
||||||
|
</label>
|
||||||
|
<span class="tag is-light">${photo.tags.length} tag${photo.tags.length === 1 ? '' : 's'}</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-image">
|
||||||
|
<figure class="image is-3by2">
|
||||||
|
<img src="${backendUrl}/${photo.path}" alt="${photo.caption}">
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="card-content">
|
||||||
|
<p class="has-text-dark"><strong class="has-text-dark">Caption:</strong> ${photo.caption}</p>
|
||||||
|
<p class="has-text-dark"><strong class="has-text-dark">Tags:</strong> ${photo.tags.join(', ')}</p>
|
||||||
|
</div>
|
||||||
|
<footer class="card-footer">
|
||||||
|
<a href="#" class="card-footer-item edit-button">Edit</a>
|
||||||
|
<a href="#" class="card-footer-item delete-button">Delete</a>
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
manageGallery.innerHTML += photoCard;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function openEditModal(photoId) {
|
||||||
|
const photo = photos.find(p => p._id === photoId);
|
||||||
|
if (photo) {
|
||||||
|
editPhotoId.value = photo._id;
|
||||||
|
editCaption.value = photo.caption;
|
||||||
|
editTags.value = photo.tags.join(', ');
|
||||||
|
editModal.classList.add('is-active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeEditModal() {
|
||||||
|
editModal.classList.remove('is-active');
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateBulkUI() {
|
||||||
|
const count = selectedPhotoIds.size;
|
||||||
|
selectedCountEl.textContent = `${count} selected`;
|
||||||
|
const disabled = count === 0;
|
||||||
|
applyBulkEdits.disabled = disabled;
|
||||||
|
bulkDelete.disabled = disabled;
|
||||||
|
if (bulkPanel) {
|
||||||
|
bulkPanel.style.display = count ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleSelectAll() {
|
||||||
|
if (selectedPhotoIds.size === photos.length) {
|
||||||
|
selectedPhotoIds.clear();
|
||||||
|
} else {
|
||||||
|
photos.forEach(p => selectedPhotoIds.add(p._id));
|
||||||
|
}
|
||||||
|
renderManageGallery();
|
||||||
|
updateBulkUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearSelection() {
|
||||||
|
selectedPhotoIds.clear();
|
||||||
|
renderManageGallery();
|
||||||
|
updateBulkUI();
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleSaveChanges() {
|
||||||
|
const photoId = editPhotoId.value;
|
||||||
|
const updatedPhoto = {
|
||||||
|
caption: editCaption.value,
|
||||||
|
tags: editTags.value
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${backendUrl}/photos/update/${photoId}`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
},
|
||||||
|
body: JSON.stringify(updatedPhoto)
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
closeEditModal();
|
||||||
|
fetchPhotos(); // Refresh the gallery
|
||||||
|
} else {
|
||||||
|
alert('Failed to save changes.');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error saving changes:', error);
|
||||||
|
alert('An error occurred while saving. Please try again.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function deletePhoto(id) {
|
||||||
|
if (confirm('Are you sure you want to delete this photo?')) {
|
||||||
|
try {
|
||||||
|
await fetch(`${backendUrl}/photos/${id}`, { method: 'DELETE' });
|
||||||
|
fetchPhotos();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error deleting photo:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openBulkDeleteModal() {
|
||||||
|
const count = selectedPhotoIds.size;
|
||||||
|
if (count === 0) return;
|
||||||
|
bulkDeleteCountEl.textContent = `You are about to delete ${count} photo(s).`;
|
||||||
|
bulkDeleteModal.classList.add('is-active');
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeBulkDeleteModal() {
|
||||||
|
bulkDeleteModal.classList.remove('is-active');
|
||||||
|
}
|
||||||
|
|
||||||
|
async function handleConfirmBulkDelete() {
|
||||||
|
const ids = Array.from(selectedPhotoIds);
|
||||||
|
if (ids.length === 0) {
|
||||||
|
closeBulkDeleteModal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
confirmBulkDeleteBtn.classList.add('is-loading');
|
||||||
|
try {
|
||||||
|
await Promise.all(ids.map(id => fetch(`${backendUrl}/photos/${id}`, { method: 'DELETE' })));
|
||||||
|
clearSelection();
|
||||||
|
fetchPhotos();
|
||||||
|
closeBulkDeleteModal();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error deleting photos:', error);
|
||||||
|
alert('Some deletions may have failed. Please refresh and check.');
|
||||||
|
} finally {
|
||||||
|
confirmBulkDeleteBtn.classList.remove('is-loading');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function bulkDeletePhotos() {
|
||||||
|
openBulkDeleteModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseTagsString(str) {
|
||||||
|
return str.split(',').map(t => t.trim()).filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function bulkApplyEdits() {
|
||||||
|
if (!selectedPhotoIds.size) return;
|
||||||
|
const newCaption = bulkCaption.value.trim();
|
||||||
|
const tagStr = bulkTags.value.trim();
|
||||||
|
const hasCaption = newCaption.length > 0;
|
||||||
|
const hasTags = tagStr.length > 0;
|
||||||
|
if (!hasCaption && !hasTags) {
|
||||||
|
alert('Enter a caption and/or tags to apply.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const ids = Array.from(selectedPhotoIds);
|
||||||
|
const append = bulkAppendTags.checked;
|
||||||
|
try {
|
||||||
|
await Promise.all(ids.map(async (id) => {
|
||||||
|
const photo = photos.find(p => p._id === id);
|
||||||
|
if (!photo) return;
|
||||||
|
const existingTags = Array.isArray(photo.tags) ? photo.tags : [];
|
||||||
|
let finalTags = existingTags;
|
||||||
|
if (hasTags) {
|
||||||
|
const incoming = parseTagsString(tagStr);
|
||||||
|
finalTags = append ? Array.from(new Set([...existingTags, ...incoming])) : incoming;
|
||||||
|
}
|
||||||
|
const payload = {
|
||||||
|
caption: hasCaption ? newCaption : photo.caption,
|
||||||
|
tags: (hasTags ? finalTags : existingTags).join(', ')
|
||||||
|
};
|
||||||
|
await fetch(`${backendUrl}/photos/update/${id}`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify(payload)
|
||||||
|
});
|
||||||
|
}));
|
||||||
|
fetchPhotos();
|
||||||
|
clearSelection();
|
||||||
|
bulkCaption.value = '';
|
||||||
|
bulkTags.value = '';
|
||||||
|
bulkAppendTags.checked = false;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error applying bulk edits:', error);
|
||||||
|
alert('Some edits may have failed. Please refresh and verify.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
manageGallery.addEventListener('click', (e) => {
|
||||||
|
if (e.target.classList.contains('edit-button')) {
|
||||||
|
e.preventDefault();
|
||||||
|
const photoId = e.target.closest('.card').dataset.photoId;
|
||||||
|
openEditModal(photoId);
|
||||||
|
}
|
||||||
|
if (e.target.classList.contains('delete-button')) {
|
||||||
|
e.preventDefault();
|
||||||
|
const photoId = e.target.closest('.card').dataset.photoId;
|
||||||
|
deletePhoto(photoId);
|
||||||
|
}
|
||||||
|
if (e.target.classList.contains('select-photo-checkbox')) {
|
||||||
|
const id = e.target.dataset.photoId;
|
||||||
|
if (e.target.checked) {
|
||||||
|
selectedPhotoIds.add(id);
|
||||||
|
} else {
|
||||||
|
selectedPhotoIds.delete(id);
|
||||||
|
}
|
||||||
|
updateBulkUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
manageGallery.addEventListener('change', (e) => {
|
||||||
|
if (e.target.classList.contains('select-photo-checkbox')) {
|
||||||
|
const id = e.target.dataset.photoId;
|
||||||
|
if (e.target.checked) {
|
||||||
|
selectedPhotoIds.add(id);
|
||||||
|
} else {
|
||||||
|
selectedPhotoIds.delete(id);
|
||||||
|
}
|
||||||
|
updateBulkUI();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
selectAllPhotosBtn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
toggleSelectAll();
|
||||||
|
});
|
||||||
|
|
||||||
|
clearSelectionBtn.addEventListener('click', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
clearSelection();
|
||||||
|
});
|
||||||
|
|
||||||
|
uploadForm.addEventListener('submit', (e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
const photoInput = document.getElementById('photoInput');
|
||||||
|
const captionInput = document.getElementById('captionInput');
|
||||||
|
|
||||||
|
uploadStatus.textContent = '';
|
||||||
|
uploadStatus.className = 'help mt-3';
|
||||||
|
uploadProgress.style.display = 'none';
|
||||||
|
uploadProgress.value = 0;
|
||||||
|
|
||||||
|
const files = photoInput.files ? Array.from(photoInput.files) : [];
|
||||||
|
|
||||||
|
if (!files.length) {
|
||||||
|
uploadStatus.textContent = 'Please choose an image before uploading.';
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formData = new FormData();
|
||||||
|
files.forEach(file => formData.append('photos', file));
|
||||||
|
formData.append('caption', captionInput.value);
|
||||||
|
formData.append('tags', tagsInput.value);
|
||||||
|
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.upload.addEventListener('progress', (event) => {
|
||||||
|
if (event.lengthComputable) {
|
||||||
|
const percentComplete = (event.loaded / event.total) * 100;
|
||||||
|
uploadProgress.value = percentComplete;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.addEventListener('load', () => {
|
||||||
|
uploadButton.classList.remove('is-loading');
|
||||||
|
uploadProgress.style.display = 'none';
|
||||||
|
|
||||||
|
if (xhr.status === 401) {
|
||||||
|
handleUnauthorized();
|
||||||
|
uploadStatus.textContent = 'Session expired. Please log in again.';
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (xhr.status < 200 || xhr.status >= 300) {
|
||||||
|
const errorText = xhr.responseText;
|
||||||
|
uploadStatus.textContent = `Upload failed: ${errorText || xhr.statusText}`;
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const result = JSON.parse(xhr.responseText);
|
||||||
|
const uploadedCount = Array.isArray(result?.uploaded) ? result.uploaded.length : 0;
|
||||||
|
const skippedCount = Array.isArray(result?.skipped) ? result.skipped.length : 0;
|
||||||
|
if (result?.success === false) {
|
||||||
|
uploadStatus.textContent = result?.error || 'Upload failed.';
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
uploadStatus.textContent = result?.message || `Uploaded ${uploadedCount || files.length} photo${(uploadedCount || files.length) === 1 ? '' : 's'} successfully!` + (skippedCount ? ` Skipped ${skippedCount} duplicate${skippedCount === 1 ? '' : 's'}.` : '');
|
||||||
|
uploadStatus.classList.add('has-text-success');
|
||||||
|
localStorage.setItem(LAST_TAGS_KEY, tagsInput.value.trim());
|
||||||
|
fetchPhotos();
|
||||||
|
uploadForm.reset();
|
||||||
|
preloadLastTags();
|
||||||
|
} catch (jsonError) {
|
||||||
|
console.error('Error parsing upload response:', jsonError);
|
||||||
|
uploadStatus.textContent = 'Received an invalid response from the server.';
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.addEventListener('error', () => {
|
||||||
|
uploadButton.classList.remove('is-loading');
|
||||||
|
uploadProgress.style.display = 'none';
|
||||||
|
uploadStatus.textContent = 'An unexpected error occurred during upload.';
|
||||||
|
uploadStatus.classList.add('has-text-danger');
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.addEventListener('abort', () => {
|
||||||
|
uploadButton.classList.remove('is-loading');
|
||||||
|
uploadProgress.style.display = 'none';
|
||||||
|
uploadStatus.textContent = 'Upload cancelled.';
|
||||||
|
uploadStatus.classList.add('has-text-grey');
|
||||||
|
});
|
||||||
|
|
||||||
|
xhr.open('POST', `${backendUrl}/photos/upload`);
|
||||||
|
|
||||||
|
uploadButton.classList.add('is-loading');
|
||||||
|
uploadProgress.style.display = 'block';
|
||||||
|
xhr.send(formData);
|
||||||
|
});
|
||||||
|
|
||||||
|
function updateTagSuggestions() {
|
||||||
|
if (!tagSuggestions) return;
|
||||||
|
const uniqueTags = new Set();
|
||||||
|
photos.forEach(photo => {
|
||||||
|
const rawTags = Array.isArray(photo.tags) ? photo.tags : String(photo.tags || '').split(',');
|
||||||
|
rawTags.map(t => t.trim()).filter(Boolean).forEach(t => uniqueTags.add(t));
|
||||||
|
});
|
||||||
|
tagSuggestions.innerHTML = '';
|
||||||
|
Array.from(uniqueTags).sort().forEach(tag => {
|
||||||
|
const option = document.createElement('option');
|
||||||
|
option.value = tag;
|
||||||
|
tagSuggestions.appendChild(option);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateQuickTags() {
|
||||||
|
if (!quickTagButtons) return;
|
||||||
|
const tagCounts = {};
|
||||||
|
photos.forEach(photo => {
|
||||||
|
const rawTags = Array.isArray(photo.tags) ? photo.tags : String(photo.tags || '').split(',');
|
||||||
|
rawTags.map(t => t.trim()).filter(Boolean).forEach(tag => {
|
||||||
|
tagCounts[tag] = (tagCounts[tag] || 0) + 1;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
const sorted = Object.entries(tagCounts)
|
||||||
|
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
||||||
|
.slice(0, 8)
|
||||||
|
.map(entry => entry[0]);
|
||||||
|
quickTagButtons.innerHTML = sorted.map(tag => `<button type="button" class="button is-light is-rounded" data-tag="${tag}">${tag}</button>`).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeTagsInput(value) {
|
||||||
|
return String(value || '')
|
||||||
|
.split(',')
|
||||||
|
.map(t => t.trim())
|
||||||
|
.filter(Boolean);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTagToInput(tag) {
|
||||||
|
const existing = normalizeTagsInput(tagsInput.value);
|
||||||
|
if (!existing.includes(tag)) {
|
||||||
|
existing.push(tag);
|
||||||
|
tagsInput.value = existing.join(', ');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function preloadLastTags() {
|
||||||
|
const last = localStorage.getItem(LAST_TAGS_KEY);
|
||||||
|
if (last && tagsInput && !tagsInput.value) {
|
||||||
|
tagsInput.value = last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quickTagButtons) {
|
||||||
|
quickTagButtons.addEventListener('click', (e) => {
|
||||||
|
const btn = e.target.closest('button[data-tag]');
|
||||||
|
if (!btn) return;
|
||||||
|
addTagToInput(btn.dataset.tag);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (captionToTagsButton) {
|
||||||
|
captionToTagsButton.addEventListener('click', () => {
|
||||||
|
const caption = captionInput.value || '';
|
||||||
|
const words = (caption.match(/[A-Za-z0-9]+/g) || [])
|
||||||
|
.map(w => w.toLowerCase())
|
||||||
|
.filter(w => w.length > 2);
|
||||||
|
const unique = Array.from(new Set(words));
|
||||||
|
unique.forEach(addTagToInput);
|
||||||
|
uploadStatus.textContent = unique.length ? 'Tags pulled from caption.' : 'No words found to convert to tags.';
|
||||||
|
uploadStatus.className = 'help mt-3 ' + (unique.length ? 'has-text-success' : 'has-text-grey');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
updateBulkUI();
|
||||||
|
saveChanges.addEventListener('click', handleSaveChanges);
|
||||||
|
modalCloseButton.addEventListener('click', closeEditModal);
|
||||||
|
modalCancelButton.addEventListener('click', closeEditModal);
|
||||||
|
applyBulkEdits.addEventListener('click', bulkApplyEdits);
|
||||||
|
bulkDelete.addEventListener('click', bulkDeletePhotos);
|
||||||
|
confirmBulkDeleteBtn.addEventListener('click', handleConfirmBulkDelete);
|
||||||
|
cancelBulkDeleteBtn.addEventListener('click', closeBulkDeleteModal);
|
||||||
|
bulkDeleteModalCloseBtn.addEventListener('click', closeBulkDeleteModal);
|
||||||
|
|
||||||
|
|
||||||
|
// --- Store Status Management ---
|
||||||
|
async function fetchStatus() {
|
||||||
|
try {
|
||||||
|
const response = await fetch('../update.json');
|
||||||
|
const data = await response.json();
|
||||||
|
const currentStatus = data[0];
|
||||||
|
messageInput.value = currentStatus.message;
|
||||||
|
isClosedCheckbox.checked = currentStatus.isClosed;
|
||||||
|
closedMessageInput.value = currentStatus.closedMessage;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching current status:', error);
|
||||||
|
responseDiv.textContent = 'Error fetching current status.';
|
||||||
|
responseDiv.classList.add('is-danger');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateButton.addEventListener('click', async () => {
|
||||||
|
const data = [
|
||||||
|
{
|
||||||
|
message: messageInput.value,
|
||||||
|
isClosed: isClosedCheckbox.checked,
|
||||||
|
closedMessage: closedMessageInput.value
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch('/api/update-status', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({ data })
|
||||||
|
});
|
||||||
|
|
||||||
|
const result = await response.json();
|
||||||
|
|
||||||
|
if (result.success) {
|
||||||
|
responseDiv.textContent = 'Status updated successfully!';
|
||||||
|
responseDiv.classList.remove('is-danger');
|
||||||
|
responseDiv.classList.add('is-success');
|
||||||
|
} else {
|
||||||
|
responseDiv.textContent = `Error: ${result.message}`;
|
||||||
|
responseDiv.classList.remove('is-success');
|
||||||
|
responseDiv.classList.add('is-danger');
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error updating status:', error);
|
||||||
|
responseDiv.textContent = 'An unexpected error occurred.';
|
||||||
|
responseDiv.classList.remove('is-success');
|
||||||
|
responseDiv.classList.add('is-danger');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
7
docker-compose.dev.yml
Normal file
7
docker-compose.dev.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
services:
|
||||||
|
bpb-website:
|
||||||
|
environment:
|
||||||
|
NODE_ENV: development
|
||||||
|
volumes:
|
||||||
|
- ./:/usr/src/app
|
||||||
|
- /usr/src/app/node_modules
|
||||||
@ -11,3 +11,37 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./update.json:/usr/src/app/update.json # Persist update.json changes
|
- ./update.json:/usr/src/app/update.json # Persist update.json changes
|
||||||
restart: always
|
restart: always
|
||||||
|
depends_on:
|
||||||
|
- photo-gallery-backend
|
||||||
|
|
||||||
|
photo-gallery-backend:
|
||||||
|
build: ./photo-gallery-app/backend
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
|
environment:
|
||||||
|
MONGO_URI: mongodb://mongodb:27017/photogallery
|
||||||
|
WATERMARK_URL: http://watermarker:8000/watermark
|
||||||
|
volumes:
|
||||||
|
- ./photo-gallery-app/backend/uploads:/usr/src/app/uploads # Persist uploaded photos
|
||||||
|
depends_on:
|
||||||
|
- mongodb
|
||||||
|
- watermarker
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
watermarker:
|
||||||
|
build: ./photo-gallery-app/watermarker
|
||||||
|
environment:
|
||||||
|
FLASK_ENV: production
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
mongodb:
|
||||||
|
image: mongo:latest
|
||||||
|
ports:
|
||||||
|
- "27017:27017"
|
||||||
|
volumes:
|
||||||
|
- mongodb_data:/data/db
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mongodb_data:
|
||||||
|
|||||||
7
error.log
Normal file
7
error.log
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
Command 'Ran' not found, did you mean:
|
||||||
|
command 'dan' from deb emboss (6.6.0+dfsg-11ubuntu1)
|
||||||
|
command 'Ray' from deb ray (2.3.1-7build1)
|
||||||
|
command 'pan' from deb pan (0.149-1)
|
||||||
|
command 'an' from deb an (1.2-6build4)
|
||||||
|
command 'man' from deb man-db (2.10.2-1)
|
||||||
|
Try: sudo apt install <deb name>
|
||||||
256
gallery.js
Normal file
256
gallery.js
Normal file
@ -0,0 +1,256 @@
|
|||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
const gallery = document.getElementById('photo-gallery');
|
||||||
|
const searchInput = document.getElementById('searchInput');
|
||||||
|
const filterBtns = document.querySelectorAll('.filter-btn');
|
||||||
|
const modal = document.getElementById('image-modal');
|
||||||
|
const modalImg = document.getElementById('modal-image-src');
|
||||||
|
const modalCaption = document.getElementById('modal-caption');
|
||||||
|
const modalCaptionTags = document.getElementById('modal-caption-tags');
|
||||||
|
const modalCloseBtn = modal.querySelector('.modal-close-btn') || modal.querySelector('.delete');
|
||||||
|
const modalBackground = modal.querySelector('.modal-background');
|
||||||
|
const resultCountEl = document.getElementById('result-count');
|
||||||
|
const noResults = document.getElementById('no-results');
|
||||||
|
const isTouchDevice = 'ontouchstart' in window || (navigator.maxTouchPoints || 0) > 0;
|
||||||
|
const topButton = document.getElementById('top');
|
||||||
|
|
||||||
|
const fallbackPhotos = [
|
||||||
|
{
|
||||||
|
path: 'assets/pics/gallery/classic/20230617_131551.webp',
|
||||||
|
caption: "20' Classic Arch",
|
||||||
|
tags: ['arch', 'classic', 'outdoor', 'wedding']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'assets/pics/gallery/classic/_Photos_20241207_083534.webp',
|
||||||
|
caption: 'Classic Columns',
|
||||||
|
tags: ['columns', 'classic', 'indoor', 'corporate', 'black-tie']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'assets/pics/gallery/centerpiece/20230108_112718.jpg}.webp',
|
||||||
|
caption: 'Cocktail Arrangements',
|
||||||
|
tags: ['centerpiece', 'cocktail', 'tablescape', 'baby-shower']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'assets/pics/gallery/organic/20241121_200047~2.jpg',
|
||||||
|
caption: 'Organic Garland',
|
||||||
|
tags: ['organic', 'garland', 'outdoor', 'birthday']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'assets/pics/gallery/organic/20250202_133930~2.jpg',
|
||||||
|
caption: 'Organic Garland (Pastel)',
|
||||||
|
tags: ['organic', 'garland', 'pastel']
|
||||||
|
}
|
||||||
|
];
|
||||||
|
let photos = [];
|
||||||
|
|
||||||
|
const normalizeTags = (tags) => {
|
||||||
|
if (Array.isArray(tags)) return tags;
|
||||||
|
if (typeof tags === 'string') {
|
||||||
|
return tags.split(',').map(tag => tag.trim()).filter(Boolean);
|
||||||
|
}
|
||||||
|
return [];
|
||||||
|
};
|
||||||
|
|
||||||
|
async function fetchPhotos() {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${window.location.protocol}//${window.location.hostname}:5000/photos`);
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(`Fetch failed with status ${response.status}`);
|
||||||
|
}
|
||||||
|
const data = await response.json();
|
||||||
|
photos = Array.isArray(data) && data.length ? data : fallbackPhotos;
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching photos:', error);
|
||||||
|
photos = fallbackPhotos;
|
||||||
|
}
|
||||||
|
renderFlatGallery(photos);
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateResultCount(count) {
|
||||||
|
if (!resultCountEl) return;
|
||||||
|
const total = photos.length;
|
||||||
|
const totalText = total ? `${total}` : '0';
|
||||||
|
const countText = count !== undefined ? `${count}` : totalText;
|
||||||
|
if (count === 0) {
|
||||||
|
resultCountEl.innerHTML = `<span>${countText}</span> photos shown • ${totalText} total`;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resultCountEl.innerHTML = count === total
|
||||||
|
? `<span>${countText}</span> photos on display`
|
||||||
|
: `<span>${countText}</span> shown • ${totalText} total`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderFlatGallery(photoArray) {
|
||||||
|
gallery.innerHTML = ''; // Clear skeleton or old photos
|
||||||
|
updateResultCount(photoArray.length);
|
||||||
|
|
||||||
|
if (photoArray.length === 0) {
|
||||||
|
if (noResults) {
|
||||||
|
gallery.appendChild(noResults);
|
||||||
|
noResults.style.display = 'block';
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (noResults) {
|
||||||
|
noResults.style.display = 'none';
|
||||||
|
}
|
||||||
|
|
||||||
|
photoArray.forEach((photo, idx) => {
|
||||||
|
const resolveUrl = (p) => {
|
||||||
|
if (typeof p !== 'string') return '';
|
||||||
|
if (p.startsWith('http') || p.startsWith('assets') || p.startsWith('/assets')) return p;
|
||||||
|
return `http://localhost:5000/${p}`;
|
||||||
|
};
|
||||||
|
const src = resolveUrl(photo.path);
|
||||||
|
const srcset = photo.variants
|
||||||
|
? [
|
||||||
|
photo.variants.thumb ? `${resolveUrl(photo.variants.thumb)} 640w` : null,
|
||||||
|
photo.variants.medium ? `${resolveUrl(photo.variants.medium)} 1200w` : null,
|
||||||
|
src ? `${src} 2000w` : null
|
||||||
|
].filter(Boolean).join(', ')
|
||||||
|
: '';
|
||||||
|
const photoTags = normalizeTags(photo.tags);
|
||||||
|
const photoCard = document.createElement('div');
|
||||||
|
photoCard.className = 'gallery-item';
|
||||||
|
const tagBadges = photoTags.map(tag => `<span class="tag-chip"><i class="fa-solid fa-wand-magic-sparkles"></i>${tag}</span>`).join('');
|
||||||
|
photoCard.innerHTML = `
|
||||||
|
<div class="gallery-photo">
|
||||||
|
<img loading="lazy" ${srcset ? `srcset="${srcset}" sizes="(min-width: 1024px) 33vw, (min-width: 768px) 45vw, 90vw"` : ''} src="${src}" alt="${photo.caption}" data-caption="${photo.caption}" data-tags="${photoTags.join(',')}" data-full-src="${src}" decoding="async">
|
||||||
|
</div>
|
||||||
|
<div class="gallery-overlay">
|
||||||
|
<div class="overlay-bottom">
|
||||||
|
<p class="overlay-title">${photo.caption}</p>
|
||||||
|
<p class="overlay-subtitle">${photoTags.join(', ')}</p>
|
||||||
|
<div class="overlay-tags" aria-label="Tags for ${photo.caption}">${tagBadges}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
gallery.appendChild(photoCard);
|
||||||
|
setTimeout(() => requestAnimationFrame(() => photoCard.classList.add('is-visible')), idx * 70);
|
||||||
|
|
||||||
|
const imgEl = photoCard.querySelector('img');
|
||||||
|
imgEl.addEventListener('click', (e) => {
|
||||||
|
const card = e.currentTarget.closest('.gallery-item');
|
||||||
|
if (isTouchDevice && card) {
|
||||||
|
if (!card.classList.contains('touch-active')) {
|
||||||
|
card.classList.add('touch-active');
|
||||||
|
setTimeout(() => card.classList.remove('touch-active'), 2200);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
openModal(e.target);
|
||||||
|
if (card) card.classList.remove('touch-active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function filterPhotos() {
|
||||||
|
const searchTerm = searchInput.value.toLowerCase();
|
||||||
|
// Deactivate tag buttons when searching
|
||||||
|
filterBtns.forEach(btn => btn.classList.remove('is-active'));
|
||||||
|
if (searchTerm) {
|
||||||
|
const filteredPhotos = photos.filter(photo => {
|
||||||
|
const photoTags = normalizeTags(photo.tags);
|
||||||
|
const captionMatch = photo.caption.toLowerCase().includes(searchTerm);
|
||||||
|
const tagMatch = photoTags.some(tag => tag.toLowerCase().includes(searchTerm));
|
||||||
|
return captionMatch || tagMatch;
|
||||||
|
});
|
||||||
|
renderFlatGallery(filteredPhotos);
|
||||||
|
} else {
|
||||||
|
renderFlatGallery(photos);
|
||||||
|
// Reactivate 'All' button if search is cleared
|
||||||
|
document.querySelector('.filter-btn[data-tag="all"]').classList.add('is-active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function filterByTag(tag) {
|
||||||
|
searchInput.value = '';
|
||||||
|
if (tag === 'all') {
|
||||||
|
renderFlatGallery(photos);
|
||||||
|
} else {
|
||||||
|
const filteredPhotos = photos.filter(photo => {
|
||||||
|
const photoTags = normalizeTags(photo.tags);
|
||||||
|
return photoTags.some(t => t.toLowerCase() === tag);
|
||||||
|
});
|
||||||
|
renderFlatGallery(filteredPhotos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function openModal(imageElement) {
|
||||||
|
const rect = imageElement.getBoundingClientRect();
|
||||||
|
const centerX = window.innerWidth / 2;
|
||||||
|
const centerY = window.innerHeight / 2;
|
||||||
|
const imgCenterX = rect.left + rect.width / 2;
|
||||||
|
const imgCenterY = rect.top + rect.height / 2;
|
||||||
|
const translateX = imgCenterX - centerX;
|
||||||
|
const translateY = imgCenterY - centerY;
|
||||||
|
const scaleStartRaw = Math.max(
|
||||||
|
rect.width / (window.innerWidth * 0.8),
|
||||||
|
rect.height / (window.innerHeight * 0.8),
|
||||||
|
0.55
|
||||||
|
);
|
||||||
|
const scaleStart = Math.min(Math.max(scaleStartRaw, 0.72), 0.96);
|
||||||
|
document.documentElement.style.setProperty('--modal-img-translate-x', `${translateX}px`);
|
||||||
|
document.documentElement.style.setProperty('--modal-img-translate-y', `${translateY}px`);
|
||||||
|
document.documentElement.style.setProperty('--modal-img-scale', scaleStart.toFixed(3));
|
||||||
|
modalImg.src = imageElement.dataset.fullSrc || imageElement.src;
|
||||||
|
modalCaption.textContent = imageElement.dataset.caption;
|
||||||
|
if (modalCaptionTags) {
|
||||||
|
const tags = (imageElement.dataset.tags || '').split(',').filter(Boolean);
|
||||||
|
modalCaptionTags.innerHTML = tags.map(t => `<span class="tag-chip"><i class="fa-solid fa-wand-magic-sparkles"></i>${t}</span>`).join('');
|
||||||
|
}
|
||||||
|
modal.classList.remove('show-bg');
|
||||||
|
modal.classList.add('chrome-hidden');
|
||||||
|
modal.classList.add('is-active');
|
||||||
|
document.documentElement.classList.add('is-clipped');
|
||||||
|
document.body.classList.add('modal-open');
|
||||||
|
if (topButton) topButton.style.display = 'none';
|
||||||
|
// Fade in chrome and background immediately after paint
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
modal.classList.add('show-bg');
|
||||||
|
modal.classList.remove('chrome-hidden');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function closeModal() {
|
||||||
|
modal.classList.remove('is-active');
|
||||||
|
modal.classList.remove('show-bg');
|
||||||
|
modal.classList.remove('chrome-hidden');
|
||||||
|
document.documentElement.classList.remove('is-clipped');
|
||||||
|
document.body.classList.remove('modal-open');
|
||||||
|
document.documentElement.style.removeProperty('--modal-img-translate-x');
|
||||||
|
document.documentElement.style.removeProperty('--modal-img-translate-y');
|
||||||
|
document.documentElement.style.removeProperty('--modal-img-scale');
|
||||||
|
if (topButton) {
|
||||||
|
const shouldShow = document.body.scrollTop > 130 || document.documentElement.scrollTop > 130;
|
||||||
|
topButton.style.display = shouldShow ? 'block' : 'none';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
searchInput.addEventListener('keyup', filterPhotos);
|
||||||
|
|
||||||
|
filterBtns.forEach(btn => {
|
||||||
|
btn.addEventListener('click', () => {
|
||||||
|
const tag = btn.dataset.tag;
|
||||||
|
filterByTag(tag.toLowerCase());
|
||||||
|
filterBtns.forEach(otherBtn => otherBtn.classList.remove('is-active'));
|
||||||
|
btn.classList.add('is-active');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (modalCloseBtn) modalCloseBtn.addEventListener('click', closeModal);
|
||||||
|
modalBackground.addEventListener('click', closeModal);
|
||||||
|
|
||||||
|
function renderSkeletonLoader() {
|
||||||
|
gallery.innerHTML = ''; // Clear gallery
|
||||||
|
for (let i = 0; i < 8; i++) {
|
||||||
|
const skeletonItem = document.createElement('div');
|
||||||
|
skeletonItem.className = 'skeleton-item';
|
||||||
|
gallery.appendChild(skeletonItem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
renderSkeletonLoader();
|
||||||
|
fetchPhotos();
|
||||||
|
});
|
||||||
@ -79,8 +79,10 @@
|
|||||||
<button onclick="topFunction()" class="has-text-dark" id="top" title="Go to top">Top</button>
|
<button onclick="topFunction()" class="has-text-dark" id="top" title="Go to top">Top</button>
|
||||||
|
|
||||||
<div class="container is-justify-content-center padding">
|
<div class="container is-justify-content-center padding">
|
||||||
|
<figure class="image">
|
||||||
<img src="assets/pics/classic/hero.webp" alt="Image 1" >
|
<img src="assets/pics/classic/hero.webp" alt="Image 1" >
|
||||||
<img class="is-overlay" src="assets/logo/BeachPartyBalloons-logo.webp" alt="Image 2">
|
<img class="is-overlay" src="assets/logo/BeachPartyBalloons-logo.webp" alt="Image 2" style="width: 50%; height: auto; margin: auto;">
|
||||||
|
</figure>
|
||||||
</div>
|
</div>
|
||||||
<div class="is-flex-direction-column is-dark">
|
<div class="is-flex-direction-column is-dark">
|
||||||
<h1 class="is-size-3" style="text-align: center;">Visit our store</h1>
|
<h1 class="is-size-3" style="text-align: center;">Visit our store</h1>
|
||||||
|
|||||||
317
package-lock.json
generated
317
package-lock.json
generated
@ -13,6 +13,9 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^17.2.3",
|
"dotenv": "^17.2.3",
|
||||||
"express": "^5.1.0"
|
"express": "^5.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"concurrently": "^9.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/accepts": {
|
"node_modules/accepts": {
|
||||||
@ -28,6 +31,32 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ansi-regex": {
|
||||||
|
"version": "5.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
||||||
|
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ansi-styles": {
|
||||||
|
"version": "4.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
||||||
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"color-convert": "^2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/body-parser": {
|
"node_modules/body-parser": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz",
|
||||||
@ -86,6 +115,96 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/chalk": {
|
||||||
|
"version": "4.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
|
||||||
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.1.0",
|
||||||
|
"supports-color": "^7.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/chalk?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/chalk/node_modules/supports-color": {
|
||||||
|
"version": "7.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
|
||||||
|
"integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cliui": {
|
||||||
|
"version": "8.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
||||||
|
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": "^4.2.0",
|
||||||
|
"strip-ansi": "^6.0.1",
|
||||||
|
"wrap-ansi": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-convert": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"color-name": "~1.1.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/color-name": {
|
||||||
|
"version": "1.1.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
|
"node_modules/concurrently": {
|
||||||
|
"version": "9.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz",
|
||||||
|
"integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "4.1.2",
|
||||||
|
"rxjs": "7.8.2",
|
||||||
|
"shell-quote": "1.8.3",
|
||||||
|
"supports-color": "8.1.1",
|
||||||
|
"tree-kill": "1.2.2",
|
||||||
|
"yargs": "17.7.2"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"conc": "dist/bin/concurrently.js",
|
||||||
|
"concurrently": "dist/bin/concurrently.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=18"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/content-disposition": {
|
"node_modules/content-disposition": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz",
|
||||||
@ -196,6 +315,13 @@
|
|||||||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
"node_modules/emoji-regex": {
|
||||||
|
"version": "8.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
||||||
|
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/encodeurl": {
|
"node_modules/encodeurl": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
||||||
@ -235,6 +361,16 @@
|
|||||||
"node": ">= 0.4"
|
"node": ">= 0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/escalade": {
|
||||||
|
"version": "3.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
||||||
|
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/escape-html": {
|
"node_modules/escape-html": {
|
||||||
"version": "1.0.3",
|
"version": "1.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
@ -336,6 +472,16 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/get-caller-file": {
|
||||||
|
"version": "2.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": "6.* || 8.* || >= 10.*"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/get-intrinsic": {
|
"node_modules/get-intrinsic": {
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
||||||
@ -385,6 +531,16 @@
|
|||||||
"url": "https://github.com/sponsors/ljharb"
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/has-flag": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/has-symbols": {
|
"node_modules/has-symbols": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
||||||
@ -461,6 +617,16 @@
|
|||||||
"node": ">= 0.10"
|
"node": ">= 0.10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/is-fullwidth-code-point": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/is-promise": {
|
"node_modules/is-promise": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
|
||||||
@ -662,6 +828,16 @@
|
|||||||
"url": "https://opencollective.com/express"
|
"url": "https://opencollective.com/express"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/require-directory": {
|
||||||
|
"version": "2.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
||||||
|
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/router": {
|
"node_modules/router": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz",
|
||||||
@ -678,6 +854,16 @@
|
|||||||
"node": ">= 18"
|
"node": ">= 18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/rxjs": {
|
||||||
|
"version": "7.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz",
|
||||||
|
"integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"tslib": "^2.1.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/safe-buffer": {
|
"node_modules/safe-buffer": {
|
||||||
"version": "5.2.1",
|
"version": "5.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
@ -747,6 +933,19 @@
|
|||||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
},
|
},
|
||||||
|
"node_modules/shell-quote": {
|
||||||
|
"version": "1.8.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
|
||||||
|
"integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/side-channel": {
|
"node_modules/side-channel": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
||||||
@ -828,6 +1027,50 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/string-width": {
|
||||||
|
"version": "4.2.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
||||||
|
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"emoji-regex": "^8.0.0",
|
||||||
|
"is-fullwidth-code-point": "^3.0.0",
|
||||||
|
"strip-ansi": "^6.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/strip-ansi": {
|
||||||
|
"version": "6.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
||||||
|
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-regex": "^5.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/supports-color": {
|
||||||
|
"version": "8.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
|
||||||
|
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"has-flag": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/toidentifier": {
|
"node_modules/toidentifier": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||||
@ -837,6 +1080,23 @@
|
|||||||
"node": ">=0.6"
|
"node": ">=0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/tree-kill": {
|
||||||
|
"version": "1.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
|
||||||
|
"integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"tree-kill": "cli.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"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/type-is": {
|
"node_modules/type-is": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
|
||||||
@ -869,11 +1129,68 @@
|
|||||||
"node": ">= 0.8"
|
"node": ">= 0.8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wrap-ansi": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"ansi-styles": "^4.0.0",
|
||||||
|
"string-width": "^4.1.0",
|
||||||
|
"strip-ansi": "^6.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/wrappy": {
|
"node_modules/wrappy": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
||||||
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
||||||
"license": "ISC"
|
"license": "ISC"
|
||||||
|
},
|
||||||
|
"node_modules/y18n": {
|
||||||
|
"version": "5.0.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||||
|
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yargs": {
|
||||||
|
"version": "17.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
||||||
|
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"cliui": "^8.0.1",
|
||||||
|
"escalade": "^3.1.1",
|
||||||
|
"get-caller-file": "^2.0.5",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"string-width": "^4.2.3",
|
||||||
|
"y18n": "^5.0.5",
|
||||||
|
"yargs-parser": "^21.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yargs-parser": {
|
||||||
|
"version": "21.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
||||||
|
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "ISC",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,6 +6,8 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node server.js",
|
"start": "node server.js",
|
||||||
"start:prod": "NODE_ENV=production node server.js",
|
"start:prod": "NODE_ENV=production node server.js",
|
||||||
|
"start:backend": "npm start --prefix photo-gallery-app/backend",
|
||||||
|
"start:all": "concurrently --names \"web,api\" \"npm start\" \"npm run start:backend\"",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
@ -16,5 +18,8 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dotenv": "^17.2.3",
|
"dotenv": "^17.2.3",
|
||||||
"express": "^5.1.0"
|
"express": "^5.1.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"concurrently": "^9.2.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
26
photo-gallery-app/backend/Dockerfile
Normal file
26
photo-gallery-app/backend/Dockerfile
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Use a Node.js base image
|
||||||
|
FROM node:18
|
||||||
|
|
||||||
|
# Set the working directory in the container
|
||||||
|
WORKDIR /usr/src/app
|
||||||
|
|
||||||
|
# Install required system libraries for ImageMagick
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
imagemagick \
|
||||||
|
ghostscript \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Copy package.json and package-lock.json to the working directory
|
||||||
|
COPY package*.json ./
|
||||||
|
|
||||||
|
# Install npm dependencies
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
# Copy the rest of the application code
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
# Expose port 5000
|
||||||
|
EXPOSE 5000
|
||||||
|
|
||||||
|
# Command to run the application
|
||||||
|
CMD [ "npm", "start" ]
|
||||||
38
photo-gallery-app/backend/models/photo.js
Normal file
38
photo-gallery-app/backend/models/photo.js
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
const photoSchema = new Schema({
|
||||||
|
filename: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
path: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
variants: {
|
||||||
|
medium: { type: String },
|
||||||
|
thumb: { type: String },
|
||||||
|
},
|
||||||
|
caption: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
tags: {
|
||||||
|
type: [String],
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
hash: {
|
||||||
|
type: String,
|
||||||
|
unique: true,
|
||||||
|
sparse: true,
|
||||||
|
index: true
|
||||||
|
}
|
||||||
|
}, {
|
||||||
|
timestamps: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
const Photo = mongoose.model('Photo', photoSchema);
|
||||||
|
|
||||||
|
module.exports = Photo;
|
||||||
1
photo-gallery-app/backend/node_modules/.bin/mkdirp
generated
vendored
Symbolic link
1
photo-gallery-app/backend/node_modules/.bin/mkdirp
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../mkdirp/bin/cmd.js
|
||||||
1
photo-gallery-app/backend/node_modules/.bin/node-which
generated
vendored
Symbolic link
1
photo-gallery-app/backend/node_modules/.bin/node-which
generated
vendored
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../which/bin/node-which
|
||||||
1335
photo-gallery-app/backend/node_modules/.package-lock.json
generated
vendored
Normal file
1335
photo-gallery-app/backend/node_modules/.package-lock.json
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
22
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/LICENSE
generated
vendored
Normal file
22
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/LICENSE
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
Copyright (c) 2014 Dmitry Tsvettsikh
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
4
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs
generated
vendored
Normal file
4
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/.esm-wrapper.mjs
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import mod from "./node.js";
|
||||||
|
|
||||||
|
export default mod;
|
||||||
|
export const saslprep = mod.saslprep;
|
||||||
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.d.ts
generated
vendored
Normal file
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.d.ts
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
declare const saslprep: (input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
} | undefined) => string;
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=browser.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAMA,QAAA,MAAM,QAAQ;;wBAAmC,CAAC;AAIlD,SAAS,QAAQ,CAAC"}
|
||||||
12
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.js
generated
vendored
Normal file
12
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.js
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
const index_1 = __importDefault(require("./index"));
|
||||||
|
const memory_code_points_1 = require("./memory-code-points");
|
||||||
|
const code_points_data_browser_1 = __importDefault(require("./code-points-data-browser"));
|
||||||
|
const codePoints = (0, memory_code_points_1.createMemoryCodePoints)(code_points_data_browser_1.default);
|
||||||
|
const saslprep = index_1.default.bind(null, codePoints);
|
||||||
|
Object.assign(saslprep, { saslprep, default: saslprep });
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=browser.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/browser.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;;AAAA,oDAAgC;AAChC,6DAA8D;AAC9D,0FAA8C;AAE9C,MAAM,UAAU,GAAG,IAAA,2CAAsB,EAAC,kCAAI,CAAC,CAAC;AAEhD,MAAM,QAAQ,GAAG,eAAS,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAElD,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEzD,iBAAS,QAAQ,CAAC"}
|
||||||
3
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts
generated
vendored
Normal file
3
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
declare const data: Buffer<ArrayBuffer>;
|
||||||
|
export default data;
|
||||||
|
//# sourceMappingURL=code-points-data-browser.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data-browser.d.ts","sourceRoot":"","sources":["../src/code-points-data-browser.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,IAAI,qBAGT,CAAC;AACF,eAAe,IAAI,CAAC"}
|
||||||
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js
generated
vendored
Normal file
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data-browser.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data-browser.js","sourceRoot":"","sources":["../src/code-points-data-browser.ts"],"names":[],"mappings":";;AAAA,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CACtB,8sliBAA8sliB,EAC9sliB,QAAQ,CACT,CAAC;AACF,kBAAe,IAAI,CAAC"}
|
||||||
3
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts
generated
vendored
Normal file
3
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts
generated
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
declare const _default: Buffer<ArrayBufferLike>;
|
||||||
|
export default _default;
|
||||||
|
//# sourceMappingURL=code-points-data.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data.d.ts","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";AAEA,wBAKE"}
|
||||||
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.js
generated
vendored
Normal file
5
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.js
generated
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const zlib_1 = require("zlib");
|
||||||
|
exports.default = (0, zlib_1.gunzipSync)(Buffer.from('H4sIAAAAAAACA+3dTYgcaRkA4LemO9Mhxm0FITnE9Cwr4jHgwgZ22B6YywqCJ0HQg5CL4sGTuOjCtGSF4CkHEW856MlTQHD3EJnWkU0Owh5VxE3LHlYQdNxd2U6mU59UV/d09fw4M2EySSXPAzNdP1/9fX/99bzVNZEN4jisRDulVFnQmLxm1aXF9Id/2/xMxNJ4XZlg576yuYlGt9gupV6xoFf8jhu9YvulVrFlp5XSx+lfvYhORGPXvqIRWSxERKtIm8bKFd10WNfKDS5Fo9jJWrq2+M2IlW+8uHgl/+BsROfPF4v5L7148Ur68Sha6dqZpYiVVy8tvLCWXo80Sf/lS89dGX2wHGvpzoXVn75/YWH5wmqe8uika82ViJXTy83Ve2k5Urozm38wm4/ls6t5uT6yfsTSJ7J3T0VKt8c5ExEXI8aFkH729c3eT+7EC6ca8cVULZUiYacX0R5PNWNxlh9L1y90q5kyzrpyy+9WcvOV6URntqw7La9sNVstXyczWVaWYbaaTYqzOHpr7pyiNT3/YzKuT63Z/FqKZlFTiuXtFM2vVOtIq7jiyKJbWZaOWD0euz0yoV2Z7kY0xq2x0YhfzVpmM5px9nTEH7JZ0ot5u39p0ma75Z472/s/H+2yr2inYyuq7fMvJivH2rM72N/Z3lyL31F2b1ya1P0zn816k2KP6JU9UzseucdQH5YqVeH/lFajSN2udg+TLJ9rksNxlvV2lki19rXKI43TPLejFu4ov7k3nMbhyhfY3Xb37f8BAGCf0eMTOH5szf154KmnNgKcnLb+Fzi2AfXktbN7fJelwTAiO/W5uQ2KINXRYu+znqo/WTAdLadURHmy3qciazd3bra4T3w16/f7t7Ms9U5gfJu10955sx1r3vmhBAAAAAAAgId20J1iZbDowNvIjuH427Gr5l/eiC+8OplZON8sVjx/qr9y+Pj+YRItT+NqAM+kkZs3AAAAAID6yfx1FwCAI97/dCh1/ub6SA0AAAAAAAAAgNoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hP/BwAAAAAAAID6E/8HAAAAAAAAgPoT/wcAAAAAAACA+hutp5SiQpYAAAAAAAAAQO2MIpZiT804flnAE2fhwjOeAZXr76kOAAAAAAAA8FjNf4N/l0NE3U/vuVQskLpSd4/Yh2xu9xTu0tFeeNYsLI2f/VMdNxTzj6Je9E/+6pp6Nn3awW3A54goe4Bss6v+PGsjQGMAAAAAAOBp5XEgwH6e7J7rwEQHRb/XvAMAAAAAAAA8yzoDeQDwVGjIAgAAAAAAAACoPfF/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqD/xfwAAAAAAAACoP/F/AAAAAAAAAKg/8X8AAAAAAAAAqL/GSkSkClkCAAAAAAAAALXTSAAAAAAAAABA3Y1kAQAAAAAAAADUX8RSXZ9dsHC9+M8Fg2Ex/em1lAZpEBGttcrVjZqLEa+k0XpKw9mG4zWx4ukPUMhkAQAAAAAAABzBqbSe3//rXOS9HxGdo4TqR2XkutCdBu+LaPZw/lBbO7cbHnh2C7N7AIo4evEznllqLqWUp/LnYOtpM2bnOH66wI1+9GO4sOuISwv/TOlumu56FDv3NZhc4mR9v7zYIrafr40j/Cccvj9Xns3t3mu99E7qxUv3bqS0/ouNH/08++RGemfQ+nsx/5uNXsQPGulynPvv3ZTW37zd+1ovrqaYpP/122X6Xpx779Z3zr/3YOPKW1lkaRDf31pPaf3j/msRsVGkL+d/f+/m4sJsPm1cfSsr16e8m9Ldj/KsnyIuR3nXw83Is3EhxLd/2V773ks3m/cj/THKUummdP9qKhIOImuOU0Xjwb3y+oqt735rpTetVbF9n8R4x9crRfO77TKqVOZpDclv5bfK18lMnk+q0K18UpxF/RrGXE0Zxtqx3tWSj+vxbL4XaasfKb0dRbtLW73JsfPGg177H+OmGKlfvS1msllt7JEJm9XOJqXR+Fkfo1H66uy5H1v3Xx5+uJmGLw9jro2u7Loj4PnuR6+f+e3d261+eazNhzrL7X83MohoHpS4PddV8ki1it61//pw1g7z6p1U/26Nm2llST57B5rUvuG0XqSU/rPd7jYrqWcbd+beJQ77BgPMDwn37/8BAGCf0eMTOH4cPlufv9VGgJOzqf8Fjm1APXkd7B7f5dF57GPMaWy/MTvjvNvtXj6h8W2+GXvnzXaseeeHEgAAAAAAAB7aQXeKlcGiadBoEOeLb2dtpGOL2MyOtf391a3P/zD96c3JzIP3t4oV797vrh8+vn+YRL5bBuj/AQAAAABqJvfHXQAAHkX82zfXAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACeAgkAAAAAAAAAqLuRLAAAAAAAAACA2hv9D1iu/VAYaAYA', 'base64'));
|
||||||
|
//# sourceMappingURL=code-points-data.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-data.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data.js","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";;AAAA,+BAAkC;AAElC,kBAAe,IAAA,iBAAU,EACvB,MAAM,CAAC,IAAI,CACT,knFAAknF,EAClnF,QAAQ,CACT,CACF,CAAC"}
|
||||||
7
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts
generated
vendored
Normal file
7
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts
generated
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export declare const unassigned_code_points: Set<number>;
|
||||||
|
export declare const commonly_mapped_to_nothing: Set<number>;
|
||||||
|
export declare const non_ASCII_space_characters: Set<number>;
|
||||||
|
export declare const prohibited_characters: Set<number>;
|
||||||
|
export declare const bidirectional_r_al: Set<number>;
|
||||||
|
export declare const bidirectional_l: Set<number>;
|
||||||
|
//# sourceMappingURL=code-points-src.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-src.d.ts","sourceRoot":"","sources":["../src/code-points-src.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,sBAAsB,aA6YjC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aAIrC,CAAC;AAMH,eAAO,MAAM,0BAA0B,aASrC,CAAC;AAMH,eAAO,MAAM,qBAAqB,aA6GhC,CAAC;AAMH,eAAO,MAAM,kBAAkB,aAmC7B,CAAC;AAMH,eAAO,MAAM,eAAe,aAyW1B,CAAC"}
|
||||||
881
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.js
generated
vendored
Normal file
881
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.js
generated
vendored
Normal file
@ -0,0 +1,881 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.bidirectional_l = exports.bidirectional_r_al = exports.prohibited_characters = exports.non_ASCII_space_characters = exports.commonly_mapped_to_nothing = exports.unassigned_code_points = void 0;
|
||||||
|
const util_1 = require("./util");
|
||||||
|
exports.unassigned_code_points = new Set([
|
||||||
|
0x0221,
|
||||||
|
...(0, util_1.range)(0x0234, 0x024f),
|
||||||
|
...(0, util_1.range)(0x02ae, 0x02af),
|
||||||
|
...(0, util_1.range)(0x02ef, 0x02ff),
|
||||||
|
...(0, util_1.range)(0x0350, 0x035f),
|
||||||
|
...(0, util_1.range)(0x0370, 0x0373),
|
||||||
|
...(0, util_1.range)(0x0376, 0x0379),
|
||||||
|
...(0, util_1.range)(0x037b, 0x037d),
|
||||||
|
...(0, util_1.range)(0x037f, 0x0383),
|
||||||
|
0x038b,
|
||||||
|
0x038d,
|
||||||
|
0x03a2,
|
||||||
|
0x03cf,
|
||||||
|
...(0, util_1.range)(0x03f7, 0x03ff),
|
||||||
|
0x0487,
|
||||||
|
0x04cf,
|
||||||
|
...(0, util_1.range)(0x04f6, 0x04f7),
|
||||||
|
...(0, util_1.range)(0x04fa, 0x04ff),
|
||||||
|
...(0, util_1.range)(0x0510, 0x0530),
|
||||||
|
...(0, util_1.range)(0x0557, 0x0558),
|
||||||
|
0x0560,
|
||||||
|
0x0588,
|
||||||
|
...(0, util_1.range)(0x058b, 0x0590),
|
||||||
|
0x05a2,
|
||||||
|
0x05ba,
|
||||||
|
...(0, util_1.range)(0x05c5, 0x05cf),
|
||||||
|
...(0, util_1.range)(0x05eb, 0x05ef),
|
||||||
|
...(0, util_1.range)(0x05f5, 0x060b),
|
||||||
|
...(0, util_1.range)(0x060d, 0x061a),
|
||||||
|
...(0, util_1.range)(0x061c, 0x061e),
|
||||||
|
0x0620,
|
||||||
|
...(0, util_1.range)(0x063b, 0x063f),
|
||||||
|
...(0, util_1.range)(0x0656, 0x065f),
|
||||||
|
...(0, util_1.range)(0x06ee, 0x06ef),
|
||||||
|
0x06ff,
|
||||||
|
0x070e,
|
||||||
|
...(0, util_1.range)(0x072d, 0x072f),
|
||||||
|
...(0, util_1.range)(0x074b, 0x077f),
|
||||||
|
...(0, util_1.range)(0x07b2, 0x0900),
|
||||||
|
0x0904,
|
||||||
|
...(0, util_1.range)(0x093a, 0x093b),
|
||||||
|
...(0, util_1.range)(0x094e, 0x094f),
|
||||||
|
...(0, util_1.range)(0x0955, 0x0957),
|
||||||
|
...(0, util_1.range)(0x0971, 0x0980),
|
||||||
|
0x0984,
|
||||||
|
...(0, util_1.range)(0x098d, 0x098e),
|
||||||
|
...(0, util_1.range)(0x0991, 0x0992),
|
||||||
|
0x09a9,
|
||||||
|
0x09b1,
|
||||||
|
...(0, util_1.range)(0x09b3, 0x09b5),
|
||||||
|
...(0, util_1.range)(0x09ba, 0x09bb),
|
||||||
|
0x09bd,
|
||||||
|
...(0, util_1.range)(0x09c5, 0x09c6),
|
||||||
|
...(0, util_1.range)(0x09c9, 0x09ca),
|
||||||
|
...(0, util_1.range)(0x09ce, 0x09d6),
|
||||||
|
...(0, util_1.range)(0x09d8, 0x09db),
|
||||||
|
0x09de,
|
||||||
|
...(0, util_1.range)(0x09e4, 0x09e5),
|
||||||
|
...(0, util_1.range)(0x09fb, 0x0a01),
|
||||||
|
...(0, util_1.range)(0x0a03, 0x0a04),
|
||||||
|
...(0, util_1.range)(0x0a0b, 0x0a0e),
|
||||||
|
...(0, util_1.range)(0x0a11, 0x0a12),
|
||||||
|
0x0a29,
|
||||||
|
0x0a31,
|
||||||
|
0x0a34,
|
||||||
|
0x0a37,
|
||||||
|
...(0, util_1.range)(0x0a3a, 0x0a3b),
|
||||||
|
0x0a3d,
|
||||||
|
...(0, util_1.range)(0x0a43, 0x0a46),
|
||||||
|
...(0, util_1.range)(0x0a49, 0x0a4a),
|
||||||
|
...(0, util_1.range)(0x0a4e, 0x0a58),
|
||||||
|
0x0a5d,
|
||||||
|
...(0, util_1.range)(0x0a5f, 0x0a65),
|
||||||
|
...(0, util_1.range)(0x0a75, 0x0a80),
|
||||||
|
0x0a84,
|
||||||
|
0x0a8c,
|
||||||
|
0x0a8e,
|
||||||
|
0x0a92,
|
||||||
|
0x0aa9,
|
||||||
|
0x0ab1,
|
||||||
|
0x0ab4,
|
||||||
|
...(0, util_1.range)(0x0aba, 0x0abb),
|
||||||
|
0x0ac6,
|
||||||
|
0x0aca,
|
||||||
|
...(0, util_1.range)(0x0ace, 0x0acf),
|
||||||
|
...(0, util_1.range)(0x0ad1, 0x0adf),
|
||||||
|
...(0, util_1.range)(0x0ae1, 0x0ae5),
|
||||||
|
...(0, util_1.range)(0x0af0, 0x0b00),
|
||||||
|
0x0b04,
|
||||||
|
...(0, util_1.range)(0x0b0d, 0x0b0e),
|
||||||
|
...(0, util_1.range)(0x0b11, 0x0b12),
|
||||||
|
0x0b29,
|
||||||
|
0x0b31,
|
||||||
|
...(0, util_1.range)(0x0b34, 0x0b35),
|
||||||
|
...(0, util_1.range)(0x0b3a, 0x0b3b),
|
||||||
|
...(0, util_1.range)(0x0b44, 0x0b46),
|
||||||
|
...(0, util_1.range)(0x0b49, 0x0b4a),
|
||||||
|
...(0, util_1.range)(0x0b4e, 0x0b55),
|
||||||
|
...(0, util_1.range)(0x0b58, 0x0b5b),
|
||||||
|
0x0b5e,
|
||||||
|
...(0, util_1.range)(0x0b62, 0x0b65),
|
||||||
|
...(0, util_1.range)(0x0b71, 0x0b81),
|
||||||
|
0x0b84,
|
||||||
|
...(0, util_1.range)(0x0b8b, 0x0b8d),
|
||||||
|
0x0b91,
|
||||||
|
...(0, util_1.range)(0x0b96, 0x0b98),
|
||||||
|
0x0b9b,
|
||||||
|
0x0b9d,
|
||||||
|
...(0, util_1.range)(0x0ba0, 0x0ba2),
|
||||||
|
...(0, util_1.range)(0x0ba5, 0x0ba7),
|
||||||
|
...(0, util_1.range)(0x0bab, 0x0bad),
|
||||||
|
0x0bb6,
|
||||||
|
...(0, util_1.range)(0x0bba, 0x0bbd),
|
||||||
|
...(0, util_1.range)(0x0bc3, 0x0bc5),
|
||||||
|
0x0bc9,
|
||||||
|
...(0, util_1.range)(0x0bce, 0x0bd6),
|
||||||
|
...(0, util_1.range)(0x0bd8, 0x0be6),
|
||||||
|
...(0, util_1.range)(0x0bf3, 0x0c00),
|
||||||
|
0x0c04,
|
||||||
|
0x0c0d,
|
||||||
|
0x0c11,
|
||||||
|
0x0c29,
|
||||||
|
0x0c34,
|
||||||
|
...(0, util_1.range)(0x0c3a, 0x0c3d),
|
||||||
|
0x0c45,
|
||||||
|
0x0c49,
|
||||||
|
...(0, util_1.range)(0x0c4e, 0x0c54),
|
||||||
|
...(0, util_1.range)(0x0c57, 0x0c5f),
|
||||||
|
...(0, util_1.range)(0x0c62, 0x0c65),
|
||||||
|
...(0, util_1.range)(0x0c70, 0x0c81),
|
||||||
|
0x0c84,
|
||||||
|
0x0c8d,
|
||||||
|
0x0c91,
|
||||||
|
0x0ca9,
|
||||||
|
0x0cb4,
|
||||||
|
...(0, util_1.range)(0x0cba, 0x0cbd),
|
||||||
|
0x0cc5,
|
||||||
|
0x0cc9,
|
||||||
|
...(0, util_1.range)(0x0cce, 0x0cd4),
|
||||||
|
...(0, util_1.range)(0x0cd7, 0x0cdd),
|
||||||
|
0x0cdf,
|
||||||
|
...(0, util_1.range)(0x0ce2, 0x0ce5),
|
||||||
|
...(0, util_1.range)(0x0cf0, 0x0d01),
|
||||||
|
0x0d04,
|
||||||
|
0x0d0d,
|
||||||
|
0x0d11,
|
||||||
|
0x0d29,
|
||||||
|
...(0, util_1.range)(0x0d3a, 0x0d3d),
|
||||||
|
...(0, util_1.range)(0x0d44, 0x0d45),
|
||||||
|
0x0d49,
|
||||||
|
...(0, util_1.range)(0x0d4e, 0x0d56),
|
||||||
|
...(0, util_1.range)(0x0d58, 0x0d5f),
|
||||||
|
...(0, util_1.range)(0x0d62, 0x0d65),
|
||||||
|
...(0, util_1.range)(0x0d70, 0x0d81),
|
||||||
|
0x0d84,
|
||||||
|
...(0, util_1.range)(0x0d97, 0x0d99),
|
||||||
|
0x0db2,
|
||||||
|
0x0dbc,
|
||||||
|
...(0, util_1.range)(0x0dbe, 0x0dbf),
|
||||||
|
...(0, util_1.range)(0x0dc7, 0x0dc9),
|
||||||
|
...(0, util_1.range)(0x0dcb, 0x0dce),
|
||||||
|
0x0dd5,
|
||||||
|
0x0dd7,
|
||||||
|
...(0, util_1.range)(0x0de0, 0x0df1),
|
||||||
|
...(0, util_1.range)(0x0df5, 0x0e00),
|
||||||
|
...(0, util_1.range)(0x0e3b, 0x0e3e),
|
||||||
|
...(0, util_1.range)(0x0e5c, 0x0e80),
|
||||||
|
0x0e83,
|
||||||
|
...(0, util_1.range)(0x0e85, 0x0e86),
|
||||||
|
0x0e89,
|
||||||
|
...(0, util_1.range)(0x0e8b, 0x0e8c),
|
||||||
|
...(0, util_1.range)(0x0e8e, 0x0e93),
|
||||||
|
0x0e98,
|
||||||
|
0x0ea0,
|
||||||
|
0x0ea4,
|
||||||
|
0x0ea6,
|
||||||
|
...(0, util_1.range)(0x0ea8, 0x0ea9),
|
||||||
|
0x0eac,
|
||||||
|
0x0eba,
|
||||||
|
...(0, util_1.range)(0x0ebe, 0x0ebf),
|
||||||
|
0x0ec5,
|
||||||
|
0x0ec7,
|
||||||
|
...(0, util_1.range)(0x0ece, 0x0ecf),
|
||||||
|
...(0, util_1.range)(0x0eda, 0x0edb),
|
||||||
|
...(0, util_1.range)(0x0ede, 0x0eff),
|
||||||
|
0x0f48,
|
||||||
|
...(0, util_1.range)(0x0f6b, 0x0f70),
|
||||||
|
...(0, util_1.range)(0x0f8c, 0x0f8f),
|
||||||
|
0x0f98,
|
||||||
|
0x0fbd,
|
||||||
|
...(0, util_1.range)(0x0fcd, 0x0fce),
|
||||||
|
...(0, util_1.range)(0x0fd0, 0x0fff),
|
||||||
|
0x1022,
|
||||||
|
0x1028,
|
||||||
|
0x102b,
|
||||||
|
...(0, util_1.range)(0x1033, 0x1035),
|
||||||
|
...(0, util_1.range)(0x103a, 0x103f),
|
||||||
|
...(0, util_1.range)(0x105a, 0x109f),
|
||||||
|
...(0, util_1.range)(0x10c6, 0x10cf),
|
||||||
|
...(0, util_1.range)(0x10f9, 0x10fa),
|
||||||
|
...(0, util_1.range)(0x10fc, 0x10ff),
|
||||||
|
...(0, util_1.range)(0x115a, 0x115e),
|
||||||
|
...(0, util_1.range)(0x11a3, 0x11a7),
|
||||||
|
...(0, util_1.range)(0x11fa, 0x11ff),
|
||||||
|
0x1207,
|
||||||
|
0x1247,
|
||||||
|
0x1249,
|
||||||
|
...(0, util_1.range)(0x124e, 0x124f),
|
||||||
|
0x1257,
|
||||||
|
0x1259,
|
||||||
|
...(0, util_1.range)(0x125e, 0x125f),
|
||||||
|
0x1287,
|
||||||
|
0x1289,
|
||||||
|
...(0, util_1.range)(0x128e, 0x128f),
|
||||||
|
0x12af,
|
||||||
|
0x12b1,
|
||||||
|
...(0, util_1.range)(0x12b6, 0x12b7),
|
||||||
|
0x12bf,
|
||||||
|
0x12c1,
|
||||||
|
...(0, util_1.range)(0x12c6, 0x12c7),
|
||||||
|
0x12cf,
|
||||||
|
0x12d7,
|
||||||
|
0x12ef,
|
||||||
|
0x130f,
|
||||||
|
0x1311,
|
||||||
|
...(0, util_1.range)(0x1316, 0x1317),
|
||||||
|
0x131f,
|
||||||
|
0x1347,
|
||||||
|
...(0, util_1.range)(0x135b, 0x1360),
|
||||||
|
...(0, util_1.range)(0x137d, 0x139f),
|
||||||
|
...(0, util_1.range)(0x13f5, 0x1400),
|
||||||
|
...(0, util_1.range)(0x1677, 0x167f),
|
||||||
|
...(0, util_1.range)(0x169d, 0x169f),
|
||||||
|
...(0, util_1.range)(0x16f1, 0x16ff),
|
||||||
|
0x170d,
|
||||||
|
...(0, util_1.range)(0x1715, 0x171f),
|
||||||
|
...(0, util_1.range)(0x1737, 0x173f),
|
||||||
|
...(0, util_1.range)(0x1754, 0x175f),
|
||||||
|
0x176d,
|
||||||
|
0x1771,
|
||||||
|
...(0, util_1.range)(0x1774, 0x177f),
|
||||||
|
...(0, util_1.range)(0x17dd, 0x17df),
|
||||||
|
...(0, util_1.range)(0x17ea, 0x17ff),
|
||||||
|
0x180f,
|
||||||
|
...(0, util_1.range)(0x181a, 0x181f),
|
||||||
|
...(0, util_1.range)(0x1878, 0x187f),
|
||||||
|
...(0, util_1.range)(0x18aa, 0x1dff),
|
||||||
|
...(0, util_1.range)(0x1e9c, 0x1e9f),
|
||||||
|
...(0, util_1.range)(0x1efa, 0x1eff),
|
||||||
|
...(0, util_1.range)(0x1f16, 0x1f17),
|
||||||
|
...(0, util_1.range)(0x1f1e, 0x1f1f),
|
||||||
|
...(0, util_1.range)(0x1f46, 0x1f47),
|
||||||
|
...(0, util_1.range)(0x1f4e, 0x1f4f),
|
||||||
|
0x1f58,
|
||||||
|
0x1f5a,
|
||||||
|
0x1f5c,
|
||||||
|
0x1f5e,
|
||||||
|
...(0, util_1.range)(0x1f7e, 0x1f7f),
|
||||||
|
0x1fb5,
|
||||||
|
0x1fc5,
|
||||||
|
...(0, util_1.range)(0x1fd4, 0x1fd5),
|
||||||
|
0x1fdc,
|
||||||
|
...(0, util_1.range)(0x1ff0, 0x1ff1),
|
||||||
|
0x1ff5,
|
||||||
|
0x1fff,
|
||||||
|
...(0, util_1.range)(0x2053, 0x2056),
|
||||||
|
...(0, util_1.range)(0x2058, 0x205e),
|
||||||
|
...(0, util_1.range)(0x2064, 0x2069),
|
||||||
|
...(0, util_1.range)(0x2072, 0x2073),
|
||||||
|
...(0, util_1.range)(0x208f, 0x209f),
|
||||||
|
...(0, util_1.range)(0x20b2, 0x20cf),
|
||||||
|
...(0, util_1.range)(0x20eb, 0x20ff),
|
||||||
|
...(0, util_1.range)(0x213b, 0x213c),
|
||||||
|
...(0, util_1.range)(0x214c, 0x2152),
|
||||||
|
...(0, util_1.range)(0x2184, 0x218f),
|
||||||
|
...(0, util_1.range)(0x23cf, 0x23ff),
|
||||||
|
...(0, util_1.range)(0x2427, 0x243f),
|
||||||
|
...(0, util_1.range)(0x244b, 0x245f),
|
||||||
|
0x24ff,
|
||||||
|
...(0, util_1.range)(0x2614, 0x2615),
|
||||||
|
0x2618,
|
||||||
|
...(0, util_1.range)(0x267e, 0x267f),
|
||||||
|
...(0, util_1.range)(0x268a, 0x2700),
|
||||||
|
0x2705,
|
||||||
|
...(0, util_1.range)(0x270a, 0x270b),
|
||||||
|
0x2728,
|
||||||
|
0x274c,
|
||||||
|
0x274e,
|
||||||
|
...(0, util_1.range)(0x2753, 0x2755),
|
||||||
|
0x2757,
|
||||||
|
...(0, util_1.range)(0x275f, 0x2760),
|
||||||
|
...(0, util_1.range)(0x2795, 0x2797),
|
||||||
|
0x27b0,
|
||||||
|
...(0, util_1.range)(0x27bf, 0x27cf),
|
||||||
|
...(0, util_1.range)(0x27ec, 0x27ef),
|
||||||
|
...(0, util_1.range)(0x2b00, 0x2e7f),
|
||||||
|
0x2e9a,
|
||||||
|
...(0, util_1.range)(0x2ef4, 0x2eff),
|
||||||
|
...(0, util_1.range)(0x2fd6, 0x2fef),
|
||||||
|
...(0, util_1.range)(0x2ffc, 0x2fff),
|
||||||
|
0x3040,
|
||||||
|
...(0, util_1.range)(0x3097, 0x3098),
|
||||||
|
...(0, util_1.range)(0x3100, 0x3104),
|
||||||
|
...(0, util_1.range)(0x312d, 0x3130),
|
||||||
|
0x318f,
|
||||||
|
...(0, util_1.range)(0x31b8, 0x31ef),
|
||||||
|
...(0, util_1.range)(0x321d, 0x321f),
|
||||||
|
...(0, util_1.range)(0x3244, 0x3250),
|
||||||
|
...(0, util_1.range)(0x327c, 0x327e),
|
||||||
|
...(0, util_1.range)(0x32cc, 0x32cf),
|
||||||
|
0x32ff,
|
||||||
|
...(0, util_1.range)(0x3377, 0x337a),
|
||||||
|
...(0, util_1.range)(0x33de, 0x33df),
|
||||||
|
0x33ff,
|
||||||
|
...(0, util_1.range)(0x4db6, 0x4dff),
|
||||||
|
...(0, util_1.range)(0x9fa6, 0x9fff),
|
||||||
|
...(0, util_1.range)(0xa48d, 0xa48f),
|
||||||
|
...(0, util_1.range)(0xa4c7, 0xabff),
|
||||||
|
...(0, util_1.range)(0xd7a4, 0xd7ff),
|
||||||
|
...(0, util_1.range)(0xfa2e, 0xfa2f),
|
||||||
|
...(0, util_1.range)(0xfa6b, 0xfaff),
|
||||||
|
...(0, util_1.range)(0xfb07, 0xfb12),
|
||||||
|
...(0, util_1.range)(0xfb18, 0xfb1c),
|
||||||
|
0xfb37,
|
||||||
|
0xfb3d,
|
||||||
|
0xfb3f,
|
||||||
|
0xfb42,
|
||||||
|
0xfb45,
|
||||||
|
...(0, util_1.range)(0xfbb2, 0xfbd2),
|
||||||
|
...(0, util_1.range)(0xfd40, 0xfd4f),
|
||||||
|
...(0, util_1.range)(0xfd90, 0xfd91),
|
||||||
|
...(0, util_1.range)(0xfdc8, 0xfdcf),
|
||||||
|
...(0, util_1.range)(0xfdfd, 0xfdff),
|
||||||
|
...(0, util_1.range)(0xfe10, 0xfe1f),
|
||||||
|
...(0, util_1.range)(0xfe24, 0xfe2f),
|
||||||
|
...(0, util_1.range)(0xfe47, 0xfe48),
|
||||||
|
0xfe53,
|
||||||
|
0xfe67,
|
||||||
|
...(0, util_1.range)(0xfe6c, 0xfe6f),
|
||||||
|
0xfe75,
|
||||||
|
...(0, util_1.range)(0xfefd, 0xfefe),
|
||||||
|
0xff00,
|
||||||
|
...(0, util_1.range)(0xffbf, 0xffc1),
|
||||||
|
...(0, util_1.range)(0xffc8, 0xffc9),
|
||||||
|
...(0, util_1.range)(0xffd0, 0xffd1),
|
||||||
|
...(0, util_1.range)(0xffd8, 0xffd9),
|
||||||
|
...(0, util_1.range)(0xffdd, 0xffdf),
|
||||||
|
0xffe7,
|
||||||
|
...(0, util_1.range)(0xffef, 0xfff8),
|
||||||
|
...(0, util_1.range)(0x10000, 0x102ff),
|
||||||
|
0x1031f,
|
||||||
|
...(0, util_1.range)(0x10324, 0x1032f),
|
||||||
|
...(0, util_1.range)(0x1034b, 0x103ff),
|
||||||
|
...(0, util_1.range)(0x10426, 0x10427),
|
||||||
|
...(0, util_1.range)(0x1044e, 0x1cfff),
|
||||||
|
...(0, util_1.range)(0x1d0f6, 0x1d0ff),
|
||||||
|
...(0, util_1.range)(0x1d127, 0x1d129),
|
||||||
|
...(0, util_1.range)(0x1d1de, 0x1d3ff),
|
||||||
|
0x1d455,
|
||||||
|
0x1d49d,
|
||||||
|
...(0, util_1.range)(0x1d4a0, 0x1d4a1),
|
||||||
|
...(0, util_1.range)(0x1d4a3, 0x1d4a4),
|
||||||
|
...(0, util_1.range)(0x1d4a7, 0x1d4a8),
|
||||||
|
0x1d4ad,
|
||||||
|
0x1d4ba,
|
||||||
|
0x1d4bc,
|
||||||
|
0x1d4c1,
|
||||||
|
0x1d4c4,
|
||||||
|
0x1d506,
|
||||||
|
...(0, util_1.range)(0x1d50b, 0x1d50c),
|
||||||
|
0x1d515,
|
||||||
|
0x1d51d,
|
||||||
|
0x1d53a,
|
||||||
|
0x1d53f,
|
||||||
|
0x1d545,
|
||||||
|
...(0, util_1.range)(0x1d547, 0x1d549),
|
||||||
|
0x1d551,
|
||||||
|
...(0, util_1.range)(0x1d6a4, 0x1d6a7),
|
||||||
|
...(0, util_1.range)(0x1d7ca, 0x1d7cd),
|
||||||
|
...(0, util_1.range)(0x1d800, 0x1fffd),
|
||||||
|
...(0, util_1.range)(0x2a6d7, 0x2f7ff),
|
||||||
|
...(0, util_1.range)(0x2fa1e, 0x2fffd),
|
||||||
|
...(0, util_1.range)(0x30000, 0x3fffd),
|
||||||
|
...(0, util_1.range)(0x40000, 0x4fffd),
|
||||||
|
...(0, util_1.range)(0x50000, 0x5fffd),
|
||||||
|
...(0, util_1.range)(0x60000, 0x6fffd),
|
||||||
|
...(0, util_1.range)(0x70000, 0x7fffd),
|
||||||
|
...(0, util_1.range)(0x80000, 0x8fffd),
|
||||||
|
...(0, util_1.range)(0x90000, 0x9fffd),
|
||||||
|
...(0, util_1.range)(0xa0000, 0xafffd),
|
||||||
|
...(0, util_1.range)(0xb0000, 0xbfffd),
|
||||||
|
...(0, util_1.range)(0xc0000, 0xcfffd),
|
||||||
|
...(0, util_1.range)(0xd0000, 0xdfffd),
|
||||||
|
0xe0000,
|
||||||
|
...(0, util_1.range)(0xe0002, 0xe001f),
|
||||||
|
...(0, util_1.range)(0xe0080, 0xefffd),
|
||||||
|
]);
|
||||||
|
exports.commonly_mapped_to_nothing = new Set([
|
||||||
|
0x00ad, 0x034f, 0x1806, 0x180b, 0x180c, 0x180d, 0x200b, 0x200c, 0x200d,
|
||||||
|
0x2060, 0xfe00, 0xfe01, 0xfe02, 0xfe03, 0xfe04, 0xfe05, 0xfe06, 0xfe07,
|
||||||
|
0xfe08, 0xfe09, 0xfe0a, 0xfe0b, 0xfe0c, 0xfe0d, 0xfe0e, 0xfe0f, 0xfeff,
|
||||||
|
]);
|
||||||
|
exports.non_ASCII_space_characters = new Set([
|
||||||
|
0x00a0, 0x1680,
|
||||||
|
0x2000, 0x2001, 0x2002,
|
||||||
|
0x2003, 0x2004,
|
||||||
|
0x2005, 0x2006,
|
||||||
|
0x2007, 0x2008,
|
||||||
|
0x2009, 0x200a,
|
||||||
|
0x200b, 0x202f,
|
||||||
|
0x205f, 0x3000,
|
||||||
|
]);
|
||||||
|
exports.prohibited_characters = new Set([
|
||||||
|
...exports.non_ASCII_space_characters,
|
||||||
|
...(0, util_1.range)(0, 0x001f),
|
||||||
|
0x007f,
|
||||||
|
...(0, util_1.range)(0x0080, 0x009f),
|
||||||
|
0x06dd,
|
||||||
|
0x070f,
|
||||||
|
0x180e,
|
||||||
|
0x200c,
|
||||||
|
0x200d,
|
||||||
|
0x2028,
|
||||||
|
0x2029,
|
||||||
|
0x2060,
|
||||||
|
0x2061,
|
||||||
|
0x2062,
|
||||||
|
0x2063,
|
||||||
|
...(0, util_1.range)(0x206a, 0x206f),
|
||||||
|
0xfeff,
|
||||||
|
...(0, util_1.range)(0xfff9, 0xfffc),
|
||||||
|
...(0, util_1.range)(0x1d173, 0x1d17a),
|
||||||
|
...(0, util_1.range)(0xe000, 0xf8ff),
|
||||||
|
...(0, util_1.range)(0xf0000, 0xffffd),
|
||||||
|
...(0, util_1.range)(0x100000, 0x10fffd),
|
||||||
|
...(0, util_1.range)(0xfdd0, 0xfdef),
|
||||||
|
...(0, util_1.range)(0xfffe, 0xffff),
|
||||||
|
...(0, util_1.range)(0x1fffe, 0x1ffff),
|
||||||
|
...(0, util_1.range)(0x2fffe, 0x2ffff),
|
||||||
|
...(0, util_1.range)(0x3fffe, 0x3ffff),
|
||||||
|
...(0, util_1.range)(0x4fffe, 0x4ffff),
|
||||||
|
...(0, util_1.range)(0x5fffe, 0x5ffff),
|
||||||
|
...(0, util_1.range)(0x6fffe, 0x6ffff),
|
||||||
|
...(0, util_1.range)(0x7fffe, 0x7ffff),
|
||||||
|
...(0, util_1.range)(0x8fffe, 0x8ffff),
|
||||||
|
...(0, util_1.range)(0x9fffe, 0x9ffff),
|
||||||
|
...(0, util_1.range)(0xafffe, 0xaffff),
|
||||||
|
...(0, util_1.range)(0xbfffe, 0xbffff),
|
||||||
|
...(0, util_1.range)(0xcfffe, 0xcffff),
|
||||||
|
...(0, util_1.range)(0xdfffe, 0xdffff),
|
||||||
|
...(0, util_1.range)(0xefffe, 0xeffff),
|
||||||
|
...(0, util_1.range)(0x10fffe, 0x10ffff),
|
||||||
|
...(0, util_1.range)(0xd800, 0xdfff),
|
||||||
|
0xfff9,
|
||||||
|
0xfffa,
|
||||||
|
0xfffb,
|
||||||
|
0xfffc,
|
||||||
|
0xfffd,
|
||||||
|
...(0, util_1.range)(0x2ff0, 0x2ffb),
|
||||||
|
0x0340,
|
||||||
|
0x0341,
|
||||||
|
0x200e,
|
||||||
|
0x200f,
|
||||||
|
0x202a,
|
||||||
|
0x202b,
|
||||||
|
0x202c,
|
||||||
|
0x202d,
|
||||||
|
0x202e,
|
||||||
|
0x206a,
|
||||||
|
0x206b,
|
||||||
|
0x206c,
|
||||||
|
0x206d,
|
||||||
|
0x206e,
|
||||||
|
0x206f,
|
||||||
|
0xe0001,
|
||||||
|
...(0, util_1.range)(0xe0020, 0xe007f),
|
||||||
|
]);
|
||||||
|
exports.bidirectional_r_al = new Set([
|
||||||
|
0x05be,
|
||||||
|
0x05c0,
|
||||||
|
0x05c3,
|
||||||
|
...(0, util_1.range)(0x05d0, 0x05ea),
|
||||||
|
...(0, util_1.range)(0x05f0, 0x05f4),
|
||||||
|
0x061b,
|
||||||
|
0x061f,
|
||||||
|
...(0, util_1.range)(0x0621, 0x063a),
|
||||||
|
...(0, util_1.range)(0x0640, 0x064a),
|
||||||
|
...(0, util_1.range)(0x066d, 0x066f),
|
||||||
|
...(0, util_1.range)(0x0671, 0x06d5),
|
||||||
|
0x06dd,
|
||||||
|
...(0, util_1.range)(0x06e5, 0x06e6),
|
||||||
|
...(0, util_1.range)(0x06fa, 0x06fe),
|
||||||
|
...(0, util_1.range)(0x0700, 0x070d),
|
||||||
|
0x0710,
|
||||||
|
...(0, util_1.range)(0x0712, 0x072c),
|
||||||
|
...(0, util_1.range)(0x0780, 0x07a5),
|
||||||
|
0x07b1,
|
||||||
|
0x200f,
|
||||||
|
0xfb1d,
|
||||||
|
...(0, util_1.range)(0xfb1f, 0xfb28),
|
||||||
|
...(0, util_1.range)(0xfb2a, 0xfb36),
|
||||||
|
...(0, util_1.range)(0xfb38, 0xfb3c),
|
||||||
|
0xfb3e,
|
||||||
|
...(0, util_1.range)(0xfb40, 0xfb41),
|
||||||
|
...(0, util_1.range)(0xfb43, 0xfb44),
|
||||||
|
...(0, util_1.range)(0xfb46, 0xfbb1),
|
||||||
|
...(0, util_1.range)(0xfbd3, 0xfd3d),
|
||||||
|
...(0, util_1.range)(0xfd50, 0xfd8f),
|
||||||
|
...(0, util_1.range)(0xfd92, 0xfdc7),
|
||||||
|
...(0, util_1.range)(0xfdf0, 0xfdfc),
|
||||||
|
...(0, util_1.range)(0xfe70, 0xfe74),
|
||||||
|
...(0, util_1.range)(0xfe76, 0xfefc),
|
||||||
|
]);
|
||||||
|
exports.bidirectional_l = new Set([
|
||||||
|
...(0, util_1.range)(0x0041, 0x005a),
|
||||||
|
...(0, util_1.range)(0x0061, 0x007a),
|
||||||
|
0x00aa,
|
||||||
|
0x00b5,
|
||||||
|
0x00ba,
|
||||||
|
...(0, util_1.range)(0x00c0, 0x00d6),
|
||||||
|
...(0, util_1.range)(0x00d8, 0x00f6),
|
||||||
|
...(0, util_1.range)(0x00f8, 0x0220),
|
||||||
|
...(0, util_1.range)(0x0222, 0x0233),
|
||||||
|
...(0, util_1.range)(0x0250, 0x02ad),
|
||||||
|
...(0, util_1.range)(0x02b0, 0x02b8),
|
||||||
|
...(0, util_1.range)(0x02bb, 0x02c1),
|
||||||
|
...(0, util_1.range)(0x02d0, 0x02d1),
|
||||||
|
...(0, util_1.range)(0x02e0, 0x02e4),
|
||||||
|
0x02ee,
|
||||||
|
0x037a,
|
||||||
|
0x0386,
|
||||||
|
...(0, util_1.range)(0x0388, 0x038a),
|
||||||
|
0x038c,
|
||||||
|
...(0, util_1.range)(0x038e, 0x03a1),
|
||||||
|
...(0, util_1.range)(0x03a3, 0x03ce),
|
||||||
|
...(0, util_1.range)(0x03d0, 0x03f5),
|
||||||
|
...(0, util_1.range)(0x0400, 0x0482),
|
||||||
|
...(0, util_1.range)(0x048a, 0x04ce),
|
||||||
|
...(0, util_1.range)(0x04d0, 0x04f5),
|
||||||
|
...(0, util_1.range)(0x04f8, 0x04f9),
|
||||||
|
...(0, util_1.range)(0x0500, 0x050f),
|
||||||
|
...(0, util_1.range)(0x0531, 0x0556),
|
||||||
|
...(0, util_1.range)(0x0559, 0x055f),
|
||||||
|
...(0, util_1.range)(0x0561, 0x0587),
|
||||||
|
0x0589,
|
||||||
|
0x0903,
|
||||||
|
...(0, util_1.range)(0x0905, 0x0939),
|
||||||
|
...(0, util_1.range)(0x093d, 0x0940),
|
||||||
|
...(0, util_1.range)(0x0949, 0x094c),
|
||||||
|
0x0950,
|
||||||
|
...(0, util_1.range)(0x0958, 0x0961),
|
||||||
|
...(0, util_1.range)(0x0964, 0x0970),
|
||||||
|
...(0, util_1.range)(0x0982, 0x0983),
|
||||||
|
...(0, util_1.range)(0x0985, 0x098c),
|
||||||
|
...(0, util_1.range)(0x098f, 0x0990),
|
||||||
|
...(0, util_1.range)(0x0993, 0x09a8),
|
||||||
|
...(0, util_1.range)(0x09aa, 0x09b0),
|
||||||
|
0x09b2,
|
||||||
|
...(0, util_1.range)(0x09b6, 0x09b9),
|
||||||
|
...(0, util_1.range)(0x09be, 0x09c0),
|
||||||
|
...(0, util_1.range)(0x09c7, 0x09c8),
|
||||||
|
...(0, util_1.range)(0x09cb, 0x09cc),
|
||||||
|
0x09d7,
|
||||||
|
...(0, util_1.range)(0x09dc, 0x09dd),
|
||||||
|
...(0, util_1.range)(0x09df, 0x09e1),
|
||||||
|
...(0, util_1.range)(0x09e6, 0x09f1),
|
||||||
|
...(0, util_1.range)(0x09f4, 0x09fa),
|
||||||
|
...(0, util_1.range)(0x0a05, 0x0a0a),
|
||||||
|
...(0, util_1.range)(0x0a0f, 0x0a10),
|
||||||
|
...(0, util_1.range)(0x0a13, 0x0a28),
|
||||||
|
...(0, util_1.range)(0x0a2a, 0x0a30),
|
||||||
|
...(0, util_1.range)(0x0a32, 0x0a33),
|
||||||
|
...(0, util_1.range)(0x0a35, 0x0a36),
|
||||||
|
...(0, util_1.range)(0x0a38, 0x0a39),
|
||||||
|
...(0, util_1.range)(0x0a3e, 0x0a40),
|
||||||
|
...(0, util_1.range)(0x0a59, 0x0a5c),
|
||||||
|
0x0a5e,
|
||||||
|
...(0, util_1.range)(0x0a66, 0x0a6f),
|
||||||
|
...(0, util_1.range)(0x0a72, 0x0a74),
|
||||||
|
0x0a83,
|
||||||
|
...(0, util_1.range)(0x0a85, 0x0a8b),
|
||||||
|
0x0a8d,
|
||||||
|
...(0, util_1.range)(0x0a8f, 0x0a91),
|
||||||
|
...(0, util_1.range)(0x0a93, 0x0aa8),
|
||||||
|
...(0, util_1.range)(0x0aaa, 0x0ab0),
|
||||||
|
...(0, util_1.range)(0x0ab2, 0x0ab3),
|
||||||
|
...(0, util_1.range)(0x0ab5, 0x0ab9),
|
||||||
|
...(0, util_1.range)(0x0abd, 0x0ac0),
|
||||||
|
0x0ac9,
|
||||||
|
...(0, util_1.range)(0x0acb, 0x0acc),
|
||||||
|
0x0ad0,
|
||||||
|
0x0ae0,
|
||||||
|
...(0, util_1.range)(0x0ae6, 0x0aef),
|
||||||
|
...(0, util_1.range)(0x0b02, 0x0b03),
|
||||||
|
...(0, util_1.range)(0x0b05, 0x0b0c),
|
||||||
|
...(0, util_1.range)(0x0b0f, 0x0b10),
|
||||||
|
...(0, util_1.range)(0x0b13, 0x0b28),
|
||||||
|
...(0, util_1.range)(0x0b2a, 0x0b30),
|
||||||
|
...(0, util_1.range)(0x0b32, 0x0b33),
|
||||||
|
...(0, util_1.range)(0x0b36, 0x0b39),
|
||||||
|
...(0, util_1.range)(0x0b3d, 0x0b3e),
|
||||||
|
0x0b40,
|
||||||
|
...(0, util_1.range)(0x0b47, 0x0b48),
|
||||||
|
...(0, util_1.range)(0x0b4b, 0x0b4c),
|
||||||
|
0x0b57,
|
||||||
|
...(0, util_1.range)(0x0b5c, 0x0b5d),
|
||||||
|
...(0, util_1.range)(0x0b5f, 0x0b61),
|
||||||
|
...(0, util_1.range)(0x0b66, 0x0b70),
|
||||||
|
0x0b83,
|
||||||
|
...(0, util_1.range)(0x0b85, 0x0b8a),
|
||||||
|
...(0, util_1.range)(0x0b8e, 0x0b90),
|
||||||
|
...(0, util_1.range)(0x0b92, 0x0b95),
|
||||||
|
...(0, util_1.range)(0x0b99, 0x0b9a),
|
||||||
|
0x0b9c,
|
||||||
|
...(0, util_1.range)(0x0b9e, 0x0b9f),
|
||||||
|
...(0, util_1.range)(0x0ba3, 0x0ba4),
|
||||||
|
...(0, util_1.range)(0x0ba8, 0x0baa),
|
||||||
|
...(0, util_1.range)(0x0bae, 0x0bb5),
|
||||||
|
...(0, util_1.range)(0x0bb7, 0x0bb9),
|
||||||
|
...(0, util_1.range)(0x0bbe, 0x0bbf),
|
||||||
|
...(0, util_1.range)(0x0bc1, 0x0bc2),
|
||||||
|
...(0, util_1.range)(0x0bc6, 0x0bc8),
|
||||||
|
...(0, util_1.range)(0x0bca, 0x0bcc),
|
||||||
|
0x0bd7,
|
||||||
|
...(0, util_1.range)(0x0be7, 0x0bf2),
|
||||||
|
...(0, util_1.range)(0x0c01, 0x0c03),
|
||||||
|
...(0, util_1.range)(0x0c05, 0x0c0c),
|
||||||
|
...(0, util_1.range)(0x0c0e, 0x0c10),
|
||||||
|
...(0, util_1.range)(0x0c12, 0x0c28),
|
||||||
|
...(0, util_1.range)(0x0c2a, 0x0c33),
|
||||||
|
...(0, util_1.range)(0x0c35, 0x0c39),
|
||||||
|
...(0, util_1.range)(0x0c41, 0x0c44),
|
||||||
|
...(0, util_1.range)(0x0c60, 0x0c61),
|
||||||
|
...(0, util_1.range)(0x0c66, 0x0c6f),
|
||||||
|
...(0, util_1.range)(0x0c82, 0x0c83),
|
||||||
|
...(0, util_1.range)(0x0c85, 0x0c8c),
|
||||||
|
...(0, util_1.range)(0x0c8e, 0x0c90),
|
||||||
|
...(0, util_1.range)(0x0c92, 0x0ca8),
|
||||||
|
...(0, util_1.range)(0x0caa, 0x0cb3),
|
||||||
|
...(0, util_1.range)(0x0cb5, 0x0cb9),
|
||||||
|
0x0cbe,
|
||||||
|
...(0, util_1.range)(0x0cc0, 0x0cc4),
|
||||||
|
...(0, util_1.range)(0x0cc7, 0x0cc8),
|
||||||
|
...(0, util_1.range)(0x0cca, 0x0ccb),
|
||||||
|
...(0, util_1.range)(0x0cd5, 0x0cd6),
|
||||||
|
0x0cde,
|
||||||
|
...(0, util_1.range)(0x0ce0, 0x0ce1),
|
||||||
|
...(0, util_1.range)(0x0ce6, 0x0cef),
|
||||||
|
...(0, util_1.range)(0x0d02, 0x0d03),
|
||||||
|
...(0, util_1.range)(0x0d05, 0x0d0c),
|
||||||
|
...(0, util_1.range)(0x0d0e, 0x0d10),
|
||||||
|
...(0, util_1.range)(0x0d12, 0x0d28),
|
||||||
|
...(0, util_1.range)(0x0d2a, 0x0d39),
|
||||||
|
...(0, util_1.range)(0x0d3e, 0x0d40),
|
||||||
|
...(0, util_1.range)(0x0d46, 0x0d48),
|
||||||
|
...(0, util_1.range)(0x0d4a, 0x0d4c),
|
||||||
|
0x0d57,
|
||||||
|
...(0, util_1.range)(0x0d60, 0x0d61),
|
||||||
|
...(0, util_1.range)(0x0d66, 0x0d6f),
|
||||||
|
...(0, util_1.range)(0x0d82, 0x0d83),
|
||||||
|
...(0, util_1.range)(0x0d85, 0x0d96),
|
||||||
|
...(0, util_1.range)(0x0d9a, 0x0db1),
|
||||||
|
...(0, util_1.range)(0x0db3, 0x0dbb),
|
||||||
|
0x0dbd,
|
||||||
|
...(0, util_1.range)(0x0dc0, 0x0dc6),
|
||||||
|
...(0, util_1.range)(0x0dcf, 0x0dd1),
|
||||||
|
...(0, util_1.range)(0x0dd8, 0x0ddf),
|
||||||
|
...(0, util_1.range)(0x0df2, 0x0df4),
|
||||||
|
...(0, util_1.range)(0x0e01, 0x0e30),
|
||||||
|
...(0, util_1.range)(0x0e32, 0x0e33),
|
||||||
|
...(0, util_1.range)(0x0e40, 0x0e46),
|
||||||
|
...(0, util_1.range)(0x0e4f, 0x0e5b),
|
||||||
|
...(0, util_1.range)(0x0e81, 0x0e82),
|
||||||
|
0x0e84,
|
||||||
|
...(0, util_1.range)(0x0e87, 0x0e88),
|
||||||
|
0x0e8a,
|
||||||
|
0x0e8d,
|
||||||
|
...(0, util_1.range)(0x0e94, 0x0e97),
|
||||||
|
...(0, util_1.range)(0x0e99, 0x0e9f),
|
||||||
|
...(0, util_1.range)(0x0ea1, 0x0ea3),
|
||||||
|
0x0ea5,
|
||||||
|
0x0ea7,
|
||||||
|
...(0, util_1.range)(0x0eaa, 0x0eab),
|
||||||
|
...(0, util_1.range)(0x0ead, 0x0eb0),
|
||||||
|
...(0, util_1.range)(0x0eb2, 0x0eb3),
|
||||||
|
0x0ebd,
|
||||||
|
...(0, util_1.range)(0x0ec0, 0x0ec4),
|
||||||
|
0x0ec6,
|
||||||
|
...(0, util_1.range)(0x0ed0, 0x0ed9),
|
||||||
|
...(0, util_1.range)(0x0edc, 0x0edd),
|
||||||
|
...(0, util_1.range)(0x0f00, 0x0f17),
|
||||||
|
...(0, util_1.range)(0x0f1a, 0x0f34),
|
||||||
|
0x0f36,
|
||||||
|
0x0f38,
|
||||||
|
...(0, util_1.range)(0x0f3e, 0x0f47),
|
||||||
|
...(0, util_1.range)(0x0f49, 0x0f6a),
|
||||||
|
0x0f7f,
|
||||||
|
0x0f85,
|
||||||
|
...(0, util_1.range)(0x0f88, 0x0f8b),
|
||||||
|
...(0, util_1.range)(0x0fbe, 0x0fc5),
|
||||||
|
...(0, util_1.range)(0x0fc7, 0x0fcc),
|
||||||
|
0x0fcf,
|
||||||
|
...(0, util_1.range)(0x1000, 0x1021),
|
||||||
|
...(0, util_1.range)(0x1023, 0x1027),
|
||||||
|
...(0, util_1.range)(0x1029, 0x102a),
|
||||||
|
0x102c,
|
||||||
|
0x1031,
|
||||||
|
0x1038,
|
||||||
|
...(0, util_1.range)(0x1040, 0x1057),
|
||||||
|
...(0, util_1.range)(0x10a0, 0x10c5),
|
||||||
|
...(0, util_1.range)(0x10d0, 0x10f8),
|
||||||
|
0x10fb,
|
||||||
|
...(0, util_1.range)(0x1100, 0x1159),
|
||||||
|
...(0, util_1.range)(0x115f, 0x11a2),
|
||||||
|
...(0, util_1.range)(0x11a8, 0x11f9),
|
||||||
|
...(0, util_1.range)(0x1200, 0x1206),
|
||||||
|
...(0, util_1.range)(0x1208, 0x1246),
|
||||||
|
0x1248,
|
||||||
|
...(0, util_1.range)(0x124a, 0x124d),
|
||||||
|
...(0, util_1.range)(0x1250, 0x1256),
|
||||||
|
0x1258,
|
||||||
|
...(0, util_1.range)(0x125a, 0x125d),
|
||||||
|
...(0, util_1.range)(0x1260, 0x1286),
|
||||||
|
0x1288,
|
||||||
|
...(0, util_1.range)(0x128a, 0x128d),
|
||||||
|
...(0, util_1.range)(0x1290, 0x12ae),
|
||||||
|
0x12b0,
|
||||||
|
...(0, util_1.range)(0x12b2, 0x12b5),
|
||||||
|
...(0, util_1.range)(0x12b8, 0x12be),
|
||||||
|
0x12c0,
|
||||||
|
...(0, util_1.range)(0x12c2, 0x12c5),
|
||||||
|
...(0, util_1.range)(0x12c8, 0x12ce),
|
||||||
|
...(0, util_1.range)(0x12d0, 0x12d6),
|
||||||
|
...(0, util_1.range)(0x12d8, 0x12ee),
|
||||||
|
...(0, util_1.range)(0x12f0, 0x130e),
|
||||||
|
0x1310,
|
||||||
|
...(0, util_1.range)(0x1312, 0x1315),
|
||||||
|
...(0, util_1.range)(0x1318, 0x131e),
|
||||||
|
...(0, util_1.range)(0x1320, 0x1346),
|
||||||
|
...(0, util_1.range)(0x1348, 0x135a),
|
||||||
|
...(0, util_1.range)(0x1361, 0x137c),
|
||||||
|
...(0, util_1.range)(0x13a0, 0x13f4),
|
||||||
|
...(0, util_1.range)(0x1401, 0x1676),
|
||||||
|
...(0, util_1.range)(0x1681, 0x169a),
|
||||||
|
...(0, util_1.range)(0x16a0, 0x16f0),
|
||||||
|
...(0, util_1.range)(0x1700, 0x170c),
|
||||||
|
...(0, util_1.range)(0x170e, 0x1711),
|
||||||
|
...(0, util_1.range)(0x1720, 0x1731),
|
||||||
|
...(0, util_1.range)(0x1735, 0x1736),
|
||||||
|
...(0, util_1.range)(0x1740, 0x1751),
|
||||||
|
...(0, util_1.range)(0x1760, 0x176c),
|
||||||
|
...(0, util_1.range)(0x176e, 0x1770),
|
||||||
|
...(0, util_1.range)(0x1780, 0x17b6),
|
||||||
|
...(0, util_1.range)(0x17be, 0x17c5),
|
||||||
|
...(0, util_1.range)(0x17c7, 0x17c8),
|
||||||
|
...(0, util_1.range)(0x17d4, 0x17da),
|
||||||
|
0x17dc,
|
||||||
|
...(0, util_1.range)(0x17e0, 0x17e9),
|
||||||
|
...(0, util_1.range)(0x1810, 0x1819),
|
||||||
|
...(0, util_1.range)(0x1820, 0x1877),
|
||||||
|
...(0, util_1.range)(0x1880, 0x18a8),
|
||||||
|
...(0, util_1.range)(0x1e00, 0x1e9b),
|
||||||
|
...(0, util_1.range)(0x1ea0, 0x1ef9),
|
||||||
|
...(0, util_1.range)(0x1f00, 0x1f15),
|
||||||
|
...(0, util_1.range)(0x1f18, 0x1f1d),
|
||||||
|
...(0, util_1.range)(0x1f20, 0x1f45),
|
||||||
|
...(0, util_1.range)(0x1f48, 0x1f4d),
|
||||||
|
...(0, util_1.range)(0x1f50, 0x1f57),
|
||||||
|
0x1f59,
|
||||||
|
0x1f5b,
|
||||||
|
0x1f5d,
|
||||||
|
...(0, util_1.range)(0x1f5f, 0x1f7d),
|
||||||
|
...(0, util_1.range)(0x1f80, 0x1fb4),
|
||||||
|
...(0, util_1.range)(0x1fb6, 0x1fbc),
|
||||||
|
0x1fbe,
|
||||||
|
...(0, util_1.range)(0x1fc2, 0x1fc4),
|
||||||
|
...(0, util_1.range)(0x1fc6, 0x1fcc),
|
||||||
|
...(0, util_1.range)(0x1fd0, 0x1fd3),
|
||||||
|
...(0, util_1.range)(0x1fd6, 0x1fdb),
|
||||||
|
...(0, util_1.range)(0x1fe0, 0x1fec),
|
||||||
|
...(0, util_1.range)(0x1ff2, 0x1ff4),
|
||||||
|
...(0, util_1.range)(0x1ff6, 0x1ffc),
|
||||||
|
0x200e,
|
||||||
|
0x2071,
|
||||||
|
0x207f,
|
||||||
|
0x2102,
|
||||||
|
0x2107,
|
||||||
|
...(0, util_1.range)(0x210a, 0x2113),
|
||||||
|
0x2115,
|
||||||
|
...(0, util_1.range)(0x2119, 0x211d),
|
||||||
|
0x2124,
|
||||||
|
0x2126,
|
||||||
|
0x2128,
|
||||||
|
...(0, util_1.range)(0x212a, 0x212d),
|
||||||
|
...(0, util_1.range)(0x212f, 0x2131),
|
||||||
|
...(0, util_1.range)(0x2133, 0x2139),
|
||||||
|
...(0, util_1.range)(0x213d, 0x213f),
|
||||||
|
...(0, util_1.range)(0x2145, 0x2149),
|
||||||
|
...(0, util_1.range)(0x2160, 0x2183),
|
||||||
|
...(0, util_1.range)(0x2336, 0x237a),
|
||||||
|
0x2395,
|
||||||
|
...(0, util_1.range)(0x249c, 0x24e9),
|
||||||
|
...(0, util_1.range)(0x3005, 0x3007),
|
||||||
|
...(0, util_1.range)(0x3021, 0x3029),
|
||||||
|
...(0, util_1.range)(0x3031, 0x3035),
|
||||||
|
...(0, util_1.range)(0x3038, 0x303c),
|
||||||
|
...(0, util_1.range)(0x3041, 0x3096),
|
||||||
|
...(0, util_1.range)(0x309d, 0x309f),
|
||||||
|
...(0, util_1.range)(0x30a1, 0x30fa),
|
||||||
|
...(0, util_1.range)(0x30fc, 0x30ff),
|
||||||
|
...(0, util_1.range)(0x3105, 0x312c),
|
||||||
|
...(0, util_1.range)(0x3131, 0x318e),
|
||||||
|
...(0, util_1.range)(0x3190, 0x31b7),
|
||||||
|
...(0, util_1.range)(0x31f0, 0x321c),
|
||||||
|
...(0, util_1.range)(0x3220, 0x3243),
|
||||||
|
...(0, util_1.range)(0x3260, 0x327b),
|
||||||
|
...(0, util_1.range)(0x327f, 0x32b0),
|
||||||
|
...(0, util_1.range)(0x32c0, 0x32cb),
|
||||||
|
...(0, util_1.range)(0x32d0, 0x32fe),
|
||||||
|
...(0, util_1.range)(0x3300, 0x3376),
|
||||||
|
...(0, util_1.range)(0x337b, 0x33dd),
|
||||||
|
...(0, util_1.range)(0x33e0, 0x33fe),
|
||||||
|
...(0, util_1.range)(0x3400, 0x4db5),
|
||||||
|
...(0, util_1.range)(0x4e00, 0x9fa5),
|
||||||
|
...(0, util_1.range)(0xa000, 0xa48c),
|
||||||
|
...(0, util_1.range)(0xac00, 0xd7a3),
|
||||||
|
...(0, util_1.range)(0xd800, 0xfa2d),
|
||||||
|
...(0, util_1.range)(0xfa30, 0xfa6a),
|
||||||
|
...(0, util_1.range)(0xfb00, 0xfb06),
|
||||||
|
...(0, util_1.range)(0xfb13, 0xfb17),
|
||||||
|
...(0, util_1.range)(0xff21, 0xff3a),
|
||||||
|
...(0, util_1.range)(0xff41, 0xff5a),
|
||||||
|
...(0, util_1.range)(0xff66, 0xffbe),
|
||||||
|
...(0, util_1.range)(0xffc2, 0xffc7),
|
||||||
|
...(0, util_1.range)(0xffca, 0xffcf),
|
||||||
|
...(0, util_1.range)(0xffd2, 0xffd7),
|
||||||
|
...(0, util_1.range)(0xffda, 0xffdc),
|
||||||
|
...(0, util_1.range)(0x10300, 0x1031e),
|
||||||
|
...(0, util_1.range)(0x10320, 0x10323),
|
||||||
|
...(0, util_1.range)(0x10330, 0x1034a),
|
||||||
|
...(0, util_1.range)(0x10400, 0x10425),
|
||||||
|
...(0, util_1.range)(0x10428, 0x1044d),
|
||||||
|
...(0, util_1.range)(0x1d000, 0x1d0f5),
|
||||||
|
...(0, util_1.range)(0x1d100, 0x1d126),
|
||||||
|
...(0, util_1.range)(0x1d12a, 0x1d166),
|
||||||
|
...(0, util_1.range)(0x1d16a, 0x1d172),
|
||||||
|
...(0, util_1.range)(0x1d183, 0x1d184),
|
||||||
|
...(0, util_1.range)(0x1d18c, 0x1d1a9),
|
||||||
|
...(0, util_1.range)(0x1d1ae, 0x1d1dd),
|
||||||
|
...(0, util_1.range)(0x1d400, 0x1d454),
|
||||||
|
...(0, util_1.range)(0x1d456, 0x1d49c),
|
||||||
|
...(0, util_1.range)(0x1d49e, 0x1d49f),
|
||||||
|
0x1d4a2,
|
||||||
|
...(0, util_1.range)(0x1d4a5, 0x1d4a6),
|
||||||
|
...(0, util_1.range)(0x1d4a9, 0x1d4ac),
|
||||||
|
...(0, util_1.range)(0x1d4ae, 0x1d4b9),
|
||||||
|
0x1d4bb,
|
||||||
|
...(0, util_1.range)(0x1d4bd, 0x1d4c0),
|
||||||
|
...(0, util_1.range)(0x1d4c2, 0x1d4c3),
|
||||||
|
...(0, util_1.range)(0x1d4c5, 0x1d505),
|
||||||
|
...(0, util_1.range)(0x1d507, 0x1d50a),
|
||||||
|
...(0, util_1.range)(0x1d50d, 0x1d514),
|
||||||
|
...(0, util_1.range)(0x1d516, 0x1d51c),
|
||||||
|
...(0, util_1.range)(0x1d51e, 0x1d539),
|
||||||
|
...(0, util_1.range)(0x1d53b, 0x1d53e),
|
||||||
|
...(0, util_1.range)(0x1d540, 0x1d544),
|
||||||
|
0x1d546,
|
||||||
|
...(0, util_1.range)(0x1d54a, 0x1d550),
|
||||||
|
...(0, util_1.range)(0x1d552, 0x1d6a3),
|
||||||
|
...(0, util_1.range)(0x1d6a8, 0x1d7c9),
|
||||||
|
...(0, util_1.range)(0x20000, 0x2a6d6),
|
||||||
|
...(0, util_1.range)(0x2f800, 0x2fa1d),
|
||||||
|
...(0, util_1.range)(0xf0000, 0xffffd),
|
||||||
|
...(0, util_1.range)(0x100000, 0x10fffd),
|
||||||
|
]);
|
||||||
|
//# sourceMappingURL=code-points-src.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/code-points-src.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
2
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts
generated
vendored
Normal file
2
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export {};
|
||||||
|
//# sourceMappingURL=generate-code-points.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"generate-code-points.d.ts","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":""}
|
||||||
83
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js
generated
vendored
Normal file
83
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js
generated
vendored
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
"use strict";
|
||||||
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||||
|
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||||
|
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||||
|
}
|
||||||
|
Object.defineProperty(o, k2, desc);
|
||||||
|
}) : (function(o, m, k, k2) {
|
||||||
|
if (k2 === undefined) k2 = k;
|
||||||
|
o[k2] = m[k];
|
||||||
|
}));
|
||||||
|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||||
|
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||||
|
}) : function(o, v) {
|
||||||
|
o["default"] = v;
|
||||||
|
});
|
||||||
|
var __importStar = (this && this.__importStar) || (function () {
|
||||||
|
var ownKeys = function(o) {
|
||||||
|
ownKeys = Object.getOwnPropertyNames || function (o) {
|
||||||
|
var ar = [];
|
||||||
|
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
||||||
|
return ar;
|
||||||
|
};
|
||||||
|
return ownKeys(o);
|
||||||
|
};
|
||||||
|
return function (mod) {
|
||||||
|
if (mod && mod.__esModule) return mod;
|
||||||
|
var result = {};
|
||||||
|
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
||||||
|
__setModuleDefault(result, mod);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
const zlib_1 = require("zlib");
|
||||||
|
const sparse_bitfield_1 = __importDefault(require("sparse-bitfield"));
|
||||||
|
const codePoints = __importStar(require("./code-points-src"));
|
||||||
|
const fs_1 = require("fs");
|
||||||
|
const prettier = __importStar(require("prettier"));
|
||||||
|
const unassigned_code_points = (0, sparse_bitfield_1.default)();
|
||||||
|
const commonly_mapped_to_nothing = (0, sparse_bitfield_1.default)();
|
||||||
|
const non_ascii_space_characters = (0, sparse_bitfield_1.default)();
|
||||||
|
const prohibited_characters = (0, sparse_bitfield_1.default)();
|
||||||
|
const bidirectional_r_al = (0, sparse_bitfield_1.default)();
|
||||||
|
const bidirectional_l = (0, sparse_bitfield_1.default)();
|
||||||
|
function traverse(bits, src) {
|
||||||
|
for (const code of src.keys()) {
|
||||||
|
bits.set(code, true);
|
||||||
|
}
|
||||||
|
const buffer = bits.toBuffer();
|
||||||
|
return Buffer.concat([createSize(buffer), buffer]);
|
||||||
|
}
|
||||||
|
function createSize(buffer) {
|
||||||
|
const buf = Buffer.alloc(4);
|
||||||
|
buf.writeUInt32BE(buffer.length);
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
const memory = [];
|
||||||
|
memory.push(traverse(unassigned_code_points, codePoints.unassigned_code_points), traverse(commonly_mapped_to_nothing, codePoints.commonly_mapped_to_nothing), traverse(non_ascii_space_characters, codePoints.non_ASCII_space_characters), traverse(prohibited_characters, codePoints.prohibited_characters), traverse(bidirectional_r_al, codePoints.bidirectional_r_al), traverse(bidirectional_l, codePoints.bidirectional_l));
|
||||||
|
async function writeCodepoints() {
|
||||||
|
const config = await prettier.resolveConfig(__dirname);
|
||||||
|
const formatOptions = { ...config, parser: 'typescript' };
|
||||||
|
function write(stream, chunk) {
|
||||||
|
return new Promise((resolve) => stream.write(chunk, () => resolve()));
|
||||||
|
}
|
||||||
|
await write((0, fs_1.createWriteStream)(process.argv[2]), await prettier.format(`import { gunzipSync } from 'zlib';
|
||||||
|
|
||||||
|
export default gunzipSync(
|
||||||
|
Buffer.from(
|
||||||
|
'${(0, zlib_1.gzipSync)(Buffer.concat(memory), { level: 9 }).toString('base64')}',
|
||||||
|
'base64'
|
||||||
|
)
|
||||||
|
);
|
||||||
|
`, formatOptions));
|
||||||
|
const fsStreamUncompressedData = (0, fs_1.createWriteStream)(process.argv[3]);
|
||||||
|
await write(fsStreamUncompressedData, await prettier.format(`const data = Buffer.from('${Buffer.concat(memory).toString('base64')}', 'base64');\nexport default data;\n`, formatOptions));
|
||||||
|
}
|
||||||
|
writeCodepoints().catch((error) => console.error('error occurred generating saslprep codepoint data', { error }));
|
||||||
|
//# sourceMappingURL=generate-code-points.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/generate-code-points.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"generate-code-points.js","sourceRoot":"","sources":["../src/generate-code-points.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAAgC;AAChC,sEAAuC;AACvC,8DAAgD;AAChD,2BAAuC;AACvC,mDAAqC;AAGrC,MAAM,sBAAsB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC1C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,0BAA0B,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAC9C,MAAM,qBAAqB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACzC,MAAM,kBAAkB,GAAG,IAAA,yBAAQ,GAAE,CAAC;AACtC,MAAM,eAAe,GAAG,IAAA,yBAAQ,GAAE,CAAC;AAMnC,SAAS,QAAQ,CAAC,IAA+B,EAAE,GAAgB;IACjE,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,MAAM,GAAa,EAAE,CAAC;AAE5B,MAAM,CAAC,IAAI,CACT,QAAQ,CAAC,sBAAsB,EAAE,UAAU,CAAC,sBAAsB,CAAC,EACnE,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,0BAA0B,EAAE,UAAU,CAAC,0BAA0B,CAAC,EAC3E,QAAQ,CAAC,qBAAqB,EAAE,UAAU,CAAC,qBAAqB,CAAC,EACjE,QAAQ,CAAC,kBAAkB,EAAE,UAAU,CAAC,kBAAkB,CAAC,EAC3D,QAAQ,CAAC,eAAe,EAAE,UAAU,CAAC,eAAe,CAAC,CACtD,CAAC;AAEF,KAAK,UAAU,eAAe;IAC5B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAE1D,SAAS,KAAK,CAAC,MAAgB,EAAE,KAAa;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,KAAK,CACT,IAAA,sBAAiB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAClC,MAAM,QAAQ,CAAC,MAAM,CACnB;;;;SAIG,IAAA,eAAQ,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;;;;GAItE,EACG,aAAa,CACd,CACF,CAAC;IAEF,MAAM,wBAAwB,GAAG,IAAA,sBAAiB,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpE,MAAM,KAAK,CACT,wBAAwB,EACxB,MAAM,QAAQ,CAAC,MAAM,CACnB,6BAA6B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CACzD,QAAQ,CACT,uCAAuC,EACxC,aAAa,CACd,CACF,CAAC;AACJ,CAAC;AAED,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAEhC,OAAO,CAAC,KAAK,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,CAAC,CAC9E,CAAC"}
|
||||||
11
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.d.ts
generated
vendored
Normal file
11
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import type { createMemoryCodePoints } from './memory-code-points';
|
||||||
|
declare function saslprep({ unassigned_code_points, commonly_mapped_to_nothing, non_ASCII_space_characters, prohibited_characters, bidirectional_r_al, bidirectional_l, }: ReturnType<typeof createMemoryCodePoints>, input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
}): string;
|
||||||
|
declare namespace saslprep {
|
||||||
|
export var saslprep: typeof import(".");
|
||||||
|
var _a: typeof import(".");
|
||||||
|
export { _a as default };
|
||||||
|
}
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=index.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAsCnE,iBAAS,QAAQ,CACf,EACE,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAChB,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,EAC5C,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAO,GACvC,MAAM,CAqGR;kBAhHQ,QAAQ;;;;;AAoHjB,SAAS,QAAQ,CAAC"}
|
||||||
65
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.js
generated
vendored
Normal file
65
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.js
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
"use strict";
|
||||||
|
const getCodePoint = (character) => character.codePointAt(0);
|
||||||
|
const first = (x) => x[0];
|
||||||
|
const last = (x) => x[x.length - 1];
|
||||||
|
function toCodePoints(input) {
|
||||||
|
const codepoints = [];
|
||||||
|
const size = input.length;
|
||||||
|
for (let i = 0; i < size; i += 1) {
|
||||||
|
const before = input.charCodeAt(i);
|
||||||
|
if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {
|
||||||
|
const next = input.charCodeAt(i + 1);
|
||||||
|
if (next >= 0xdc00 && next <= 0xdfff) {
|
||||||
|
codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);
|
||||||
|
i += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
codepoints.push(before);
|
||||||
|
}
|
||||||
|
return codepoints;
|
||||||
|
}
|
||||||
|
function saslprep({ unassigned_code_points, commonly_mapped_to_nothing, non_ASCII_space_characters, prohibited_characters, bidirectional_r_al, bidirectional_l, }, input, opts = {}) {
|
||||||
|
const mapping2space = non_ASCII_space_characters;
|
||||||
|
const mapping2nothing = commonly_mapped_to_nothing;
|
||||||
|
if (typeof input !== 'string') {
|
||||||
|
throw new TypeError('Expected string.');
|
||||||
|
}
|
||||||
|
if (input.length === 0) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
const mapped_input = toCodePoints(input)
|
||||||
|
.map((character) => (mapping2space.get(character) ? 0x20 : character))
|
||||||
|
.filter((character) => !mapping2nothing.get(character));
|
||||||
|
const normalized_input = String.fromCodePoint
|
||||||
|
.apply(null, mapped_input)
|
||||||
|
.normalize('NFKC');
|
||||||
|
const normalized_map = toCodePoints(normalized_input);
|
||||||
|
const hasProhibited = normalized_map.some((character) => prohibited_characters.get(character));
|
||||||
|
if (hasProhibited) {
|
||||||
|
throw new Error('Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3');
|
||||||
|
}
|
||||||
|
if (opts.allowUnassigned !== true) {
|
||||||
|
const hasUnassigned = normalized_map.some((character) => unassigned_code_points.get(character));
|
||||||
|
if (hasUnassigned) {
|
||||||
|
throw new Error('Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const hasBidiRAL = normalized_map.some((character) => bidirectional_r_al.get(character));
|
||||||
|
const hasBidiL = normalized_map.some((character) => bidirectional_l.get(character));
|
||||||
|
if (hasBidiRAL && hasBidiL) {
|
||||||
|
throw new Error('String must not contain RandALCat and LCat at the same time,' +
|
||||||
|
' see https://tools.ietf.org/html/rfc3454#section-6');
|
||||||
|
}
|
||||||
|
const isFirstBidiRAL = bidirectional_r_al.get(getCodePoint(first(normalized_input)));
|
||||||
|
const isLastBidiRAL = bidirectional_r_al.get(getCodePoint(last(normalized_input)));
|
||||||
|
if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {
|
||||||
|
throw new Error('Bidirectional RandALCat character must be the first and the last' +
|
||||||
|
' character of the string, see https://tools.ietf.org/html/rfc3454#section-6');
|
||||||
|
}
|
||||||
|
return normalized_input;
|
||||||
|
}
|
||||||
|
saslprep.saslprep = saslprep;
|
||||||
|
saslprep.default = saslprep;
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=index.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/index.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAGA,MAAM,YAAY,GAAG,CAAC,SAAiB,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACrE,MAAM,KAAK,GAAG,CAA2B,CAAI,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,MAAM,IAAI,GAAG,CAA2B,CAAI,EAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAO5E,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;IAE1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAEnC,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAErC,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBACrC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;gBACrE,CAAC,IAAI,CAAC,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAKD,SAAS,QAAQ,CACf,EACE,sBAAsB,EACtB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,GAC2B,EAC5C,KAAa,EACb,OAAsC,EAAE;IAQxC,MAAM,aAAa,GAAG,0BAA0B,CAAC;IAMjD,MAAM,eAAe,GAAG,0BAA0B,CAAC;IAEnD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,SAAS,CAAC,kBAAkB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC;IAGD,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC;SAErC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SAErE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAG1D,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa;SAC1C,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC;SACzB,SAAS,CAAC,MAAM,CAAC,CAAC;IAErB,MAAM,cAAc,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;IAGtD,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CACrC,CAAC;IAEF,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IAGD,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACtD,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,CACtC,CAAC;QAEF,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,4EAA4E,CAC7E,CAAC;QACJ,CAAC;IACH,CAAC;IAID,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACnD,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAClC,CAAC;IAEF,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CACjD,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAC/B,CAAC;IAIF,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,8DAA8D;YAC5D,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAQD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAC3C,YAAY,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAE,CACvC,CAAC;IACF,MAAM,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAC1C,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAE,CACtC,CAAC;IAEF,IAAI,UAAU,IAAI,CAAC,CAAC,cAAc,IAAI,aAAa,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,6EAA6E,CAChF,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAC5B,iBAAS,QAAQ,CAAC"}
|
||||||
10
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts
generated
vendored
Normal file
10
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import bitfield from 'sparse-bitfield';
|
||||||
|
export declare function createMemoryCodePoints(data: Buffer): {
|
||||||
|
unassigned_code_points: bitfield.BitFieldInstance;
|
||||||
|
commonly_mapped_to_nothing: bitfield.BitFieldInstance;
|
||||||
|
non_ASCII_space_characters: bitfield.BitFieldInstance;
|
||||||
|
prohibited_characters: bitfield.BitFieldInstance;
|
||||||
|
bidirectional_r_al: bitfield.BitFieldInstance;
|
||||||
|
bidirectional_l: bitfield.BitFieldInstance;
|
||||||
|
};
|
||||||
|
//# sourceMappingURL=memory-code-points.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"memory-code-points.d.ts","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM;;;;;;;EA+BlD"}
|
||||||
32
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js
generated
vendored
Normal file
32
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js
generated
vendored
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.createMemoryCodePoints = createMemoryCodePoints;
|
||||||
|
const sparse_bitfield_1 = __importDefault(require("sparse-bitfield"));
|
||||||
|
function createMemoryCodePoints(data) {
|
||||||
|
let offset = 0;
|
||||||
|
function read() {
|
||||||
|
const size = data.readUInt32BE(offset);
|
||||||
|
offset += 4;
|
||||||
|
const codepoints = data.slice(offset, offset + size);
|
||||||
|
offset += size;
|
||||||
|
return (0, sparse_bitfield_1.default)({ buffer: codepoints });
|
||||||
|
}
|
||||||
|
const unassigned_code_points = read();
|
||||||
|
const commonly_mapped_to_nothing = read();
|
||||||
|
const non_ASCII_space_characters = read();
|
||||||
|
const prohibited_characters = read();
|
||||||
|
const bidirectional_r_al = read();
|
||||||
|
const bidirectional_l = read();
|
||||||
|
return {
|
||||||
|
unassigned_code_points,
|
||||||
|
commonly_mapped_to_nothing,
|
||||||
|
non_ASCII_space_characters,
|
||||||
|
prohibited_characters,
|
||||||
|
bidirectional_r_al,
|
||||||
|
bidirectional_l,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=memory-code-points.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/memory-code-points.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"memory-code-points.js","sourceRoot":"","sources":["../src/memory-code-points.ts"],"names":[],"mappings":";;;;;AAEA,wDA+BC;AAjCD,sEAAuC;AAEvC,SAAgB,sBAAsB,CAAC,IAAY;IACjD,IAAI,MAAM,GAAG,CAAC,CAAC;IAKf,SAAS,IAAI;QACX,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,CAAC,CAAC;QAEZ,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;QACrD,MAAM,IAAI,IAAI,CAAC;QAEf,OAAO,IAAA,yBAAQ,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,EAAE,CAAC;IACtC,MAAM,0BAA0B,GAAG,IAAI,EAAE,CAAC;IAC1C,MAAM,0BAA0B,GAAG,IAAI,EAAE,CAAC;IAC1C,MAAM,qBAAqB,GAAG,IAAI,EAAE,CAAC;IACrC,MAAM,kBAAkB,GAAG,IAAI,EAAE,CAAC;IAClC,MAAM,eAAe,GAAG,IAAI,EAAE,CAAC;IAE/B,OAAO;QACL,sBAAsB;QACtB,0BAA0B;QAC1B,0BAA0B;QAC1B,qBAAqB;QACrB,kBAAkB;QAClB,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
||||||
10
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.d.ts
generated
vendored
Normal file
10
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.d.ts
generated
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
declare function saslprep(input: string, opts?: {
|
||||||
|
allowUnassigned?: boolean;
|
||||||
|
}): string;
|
||||||
|
declare namespace saslprep {
|
||||||
|
export var saslprep: typeof import("./node");
|
||||||
|
var _a: typeof import("./node");
|
||||||
|
export { _a as default };
|
||||||
|
}
|
||||||
|
export = saslprep;
|
||||||
|
//# sourceMappingURL=node.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAMA,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAE7E;kBAFQ,QAAQ;;;;;AAOjB,SAAS,QAAQ,CAAC"}
|
||||||
15
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.js
generated
vendored
Normal file
15
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.js
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
"use strict";
|
||||||
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||||
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
|
};
|
||||||
|
const index_1 = __importDefault(require("./index"));
|
||||||
|
const memory_code_points_1 = require("./memory-code-points");
|
||||||
|
const code_points_data_1 = __importDefault(require("./code-points-data"));
|
||||||
|
const codePoints = (0, memory_code_points_1.createMemoryCodePoints)(code_points_data_1.default);
|
||||||
|
function saslprep(input, opts) {
|
||||||
|
return (0, index_1.default)(codePoints, input, opts);
|
||||||
|
}
|
||||||
|
saslprep.saslprep = saslprep;
|
||||||
|
saslprep.default = saslprep;
|
||||||
|
module.exports = saslprep;
|
||||||
|
//# sourceMappingURL=node.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/node.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":";;;;AAAA,oDAAgC;AAChC,6DAA8D;AAC9D,0EAAsC;AAEtC,MAAM,UAAU,GAAG,IAAA,2CAAsB,EAAC,0BAAI,CAAC,CAAC;AAEhD,SAAS,QAAQ,CAAC,KAAa,EAAE,IAAoC;IACnE,OAAO,IAAA,eAAS,EAAC,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAE5B,iBAAS,QAAQ,CAAC"}
|
||||||
2
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.d.ts
generated
vendored
Normal file
2
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.d.ts
generated
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
export declare function range(from: number, to: number): number[];
|
||||||
|
//# sourceMappingURL=util.d.ts.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.d.ts.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAQxD"}
|
||||||
11
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.js
generated
vendored
Normal file
11
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.js
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
"use strict";
|
||||||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
|
exports.range = range;
|
||||||
|
function range(from, to) {
|
||||||
|
const list = new Array(to - from + 1);
|
||||||
|
for (let i = 0; i < list.length; i += 1) {
|
||||||
|
list[i] = from + i;
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
//# sourceMappingURL=util.js.map
|
||||||
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.js.map
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/dist/util.js.map
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAGA,sBAQC;AARD,SAAgB,KAAK,CAAC,IAAY,EAAE,EAAU;IAE5C,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;IAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
||||||
87
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/package.json
generated
vendored
Normal file
87
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/package.json
generated
vendored
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
{
|
||||||
|
"name": "@mongodb-js/saslprep",
|
||||||
|
"description": "SASLprep: Stringprep Profile for User Names and Passwords, rfc4013",
|
||||||
|
"keywords": [
|
||||||
|
"sasl",
|
||||||
|
"saslprep",
|
||||||
|
"stringprep",
|
||||||
|
"rfc4013",
|
||||||
|
"4013"
|
||||||
|
],
|
||||||
|
"author": "Dmitry Tsvettsikh <me@reklatsmasters.com>",
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
},
|
||||||
|
"main": "dist/node.js",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://jira.mongodb.org/projects/COMPASS/issues",
|
||||||
|
"email": "compass@mongodb.com"
|
||||||
|
},
|
||||||
|
"homepage": "https://github.com/mongodb-js/devtools-shared/tree/main/packages/saslprep",
|
||||||
|
"version": "1.3.2",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/mongodb-js/devtools-shared.git"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"exports": {
|
||||||
|
"browser": {
|
||||||
|
"types": "./dist/browser.d.ts",
|
||||||
|
"default": "./dist/browser.js"
|
||||||
|
},
|
||||||
|
"import": {
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"default": "./dist/.esm-wrapper.mjs"
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"default": "./dist/node.js"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"types": "./dist/node.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"gen-code-points": "ts-node src/generate-code-points.ts src/code-points-data.ts src/code-points-data-browser.ts",
|
||||||
|
"bootstrap": "npm run compile",
|
||||||
|
"prepublishOnly": "npm run compile",
|
||||||
|
"compile": "npm run gen-code-points && tsc -p tsconfig.json && gen-esm-wrapper . ./dist/.esm-wrapper.mjs",
|
||||||
|
"typecheck": "tsc --noEmit",
|
||||||
|
"eslint": "eslint",
|
||||||
|
"prettier": "prettier",
|
||||||
|
"lint": "npm run eslint . && npm run prettier -- --check .",
|
||||||
|
"depcheck": "depcheck",
|
||||||
|
"check": "npm run typecheck && npm run lint && npm run depcheck",
|
||||||
|
"check-ci": "npm run check",
|
||||||
|
"test": "mocha",
|
||||||
|
"test-cov": "nyc -x \"**/*.spec.*\" --reporter=lcov --reporter=text --reporter=html npm run test",
|
||||||
|
"test-watch": "npm run test -- --watch",
|
||||||
|
"test-ci": "npm run test-cov",
|
||||||
|
"reformat": "npm run prettier -- --write ."
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"sparse-bitfield": "^3.0.3"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@mongodb-js/eslint-config-devtools": "0.9.12",
|
||||||
|
"@mongodb-js/mocha-config-devtools": "^1.0.5",
|
||||||
|
"@mongodb-js/prettier-config-devtools": "^1.0.2",
|
||||||
|
"@mongodb-js/tsconfig-devtools": "^1.0.4",
|
||||||
|
"@types/chai": "^4.2.21",
|
||||||
|
"@types/mocha": "^9.1.1",
|
||||||
|
"@types/node": "^22.15.30",
|
||||||
|
"@types/sinon-chai": "^3.2.5",
|
||||||
|
"@types/sparse-bitfield": "^3.0.1",
|
||||||
|
"chai": "^4.5.0",
|
||||||
|
"depcheck": "^1.4.7",
|
||||||
|
"eslint": "^7.25.0",
|
||||||
|
"gen-esm-wrapper": "^1.1.3",
|
||||||
|
"mocha": "^8.4.0",
|
||||||
|
"nyc": "^15.1.0",
|
||||||
|
"prettier": "^3.5.3",
|
||||||
|
"sinon": "^9.2.3",
|
||||||
|
"typescript": "^5.0.4"
|
||||||
|
},
|
||||||
|
"gitHead": "8928faef983172b1ade2647008b9f6a0183e4a13"
|
||||||
|
}
|
||||||
29
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/readme.md
generated
vendored
Normal file
29
photo-gallery-app/backend/node_modules/@mongodb-js/saslprep/readme.md
generated
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# saslprep
|
||||||
|
|
||||||
|
_Note: This is a fork of the original [`saslprep`](https://www.npmjs.com/package/saslprep) npm package
|
||||||
|
and provides equivalent functionality._
|
||||||
|
|
||||||
|
Stringprep Profile for User Names and Passwords, [rfc4013](https://tools.ietf.org/html/rfc4013)
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
```js
|
||||||
|
const saslprep = require('@mongodb-js/saslprep');
|
||||||
|
|
||||||
|
saslprep('password\u00AD'); // password
|
||||||
|
saslprep('password\u0007'); // Error: prohibited character
|
||||||
|
```
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
##### `saslprep(input: String, opts: Options): String`
|
||||||
|
|
||||||
|
Normalize user name or password.
|
||||||
|
|
||||||
|
##### `Options.allowUnassigned: bool`
|
||||||
|
|
||||||
|
A special behavior for unassigned code points, see https://tools.ietf.org/html/rfc4013#section-2.5. Disabled by default.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT, 2017-2019 (c) Dmitriy Tsvettsikh
|
||||||
21
photo-gallery-app/backend/node_modules/@types/webidl-conversions/LICENSE
generated
vendored
Normal file
21
photo-gallery-app/backend/node_modules/@types/webidl-conversions/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE
|
||||||
15
photo-gallery-app/backend/node_modules/@types/webidl-conversions/README.md
generated
vendored
Normal file
15
photo-gallery-app/backend/node_modules/@types/webidl-conversions/README.md
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Installation
|
||||||
|
> `npm install --save @types/webidl-conversions`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for webidl-conversions (https://github.com/jsdom/webidl-conversions#readme).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Tue, 07 Nov 2023 15:11:36 GMT
|
||||||
|
* Dependencies: none
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [ExE Boss](https://github.com/ExE-Boss), and [BendingBender](https://github.com/BendingBender).
|
||||||
91
photo-gallery-app/backend/node_modules/@types/webidl-conversions/index.d.ts
generated
vendored
Normal file
91
photo-gallery-app/backend/node_modules/@types/webidl-conversions/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
declare namespace WebIDLConversions {
|
||||||
|
interface Globals {
|
||||||
|
[key: string]: unknown;
|
||||||
|
|
||||||
|
Number: (value?: unknown) => number;
|
||||||
|
String: (value?: unknown) => string;
|
||||||
|
TypeError: new(message?: string) => TypeError;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Options {
|
||||||
|
context?: string | undefined;
|
||||||
|
globals?: Globals | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface IntegerOptions extends Options {
|
||||||
|
enforceRange?: boolean | undefined;
|
||||||
|
clamp?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StringOptions extends Options {
|
||||||
|
treatNullAsEmptyString?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface BufferSourceOptions extends Options {
|
||||||
|
allowShared?: boolean | undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
type IntegerConversion = (V: unknown, opts?: IntegerOptions) => number;
|
||||||
|
type StringConversion = (V: unknown, opts?: StringOptions) => string;
|
||||||
|
type NumberConversion = (V: unknown, opts?: Options) => number;
|
||||||
|
}
|
||||||
|
|
||||||
|
declare const WebIDLConversions: {
|
||||||
|
any<V>(V: V, opts?: WebIDLConversions.Options): V;
|
||||||
|
undefined(V?: unknown, opts?: WebIDLConversions.Options): void;
|
||||||
|
boolean(V: unknown, opts?: WebIDLConversions.Options): boolean;
|
||||||
|
|
||||||
|
byte(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
octet(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
short(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned short"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
long(V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
["long long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
["unsigned long long"](V: unknown, opts?: WebIDLConversions.IntegerOptions): number;
|
||||||
|
|
||||||
|
double(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
["unrestricted double"](V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
|
||||||
|
float(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
["unrestricted float"](V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
|
||||||
|
DOMString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
ByteString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
USVString(V: unknown, opts?: WebIDLConversions.StringOptions): string;
|
||||||
|
|
||||||
|
object<V>(V: V, opts?: WebIDLConversions.Options): V extends object ? V : V & object;
|
||||||
|
ArrayBuffer(
|
||||||
|
V: unknown,
|
||||||
|
opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined },
|
||||||
|
): ArrayBuffer;
|
||||||
|
ArrayBuffer(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike;
|
||||||
|
DataView(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): DataView;
|
||||||
|
|
||||||
|
Int8Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int8Array;
|
||||||
|
Int16Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int16Array;
|
||||||
|
Int32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Int32Array;
|
||||||
|
|
||||||
|
Uint8Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint8Array;
|
||||||
|
Uint16Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint16Array;
|
||||||
|
Uint32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint32Array;
|
||||||
|
Uint8ClampedArray(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Uint8ClampedArray;
|
||||||
|
|
||||||
|
Float32Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Float32Array;
|
||||||
|
Float64Array(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): Float64Array;
|
||||||
|
|
||||||
|
ArrayBufferView(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferView;
|
||||||
|
BufferSource(
|
||||||
|
V: unknown,
|
||||||
|
opts?: WebIDLConversions.BufferSourceOptions & { allowShared?: false | undefined },
|
||||||
|
): ArrayBuffer | ArrayBufferView;
|
||||||
|
BufferSource(V: unknown, opts?: WebIDLConversions.BufferSourceOptions): ArrayBufferLike | ArrayBufferView;
|
||||||
|
|
||||||
|
DOMTimeStamp(V: unknown, opts?: WebIDLConversions.Options): number;
|
||||||
|
};
|
||||||
|
|
||||||
|
// This can't use ES6 style exports, as those can't have spaces in export names.
|
||||||
|
export = WebIDLConversions;
|
||||||
30
photo-gallery-app/backend/node_modules/@types/webidl-conversions/package.json
generated
vendored
Normal file
30
photo-gallery-app/backend/node_modules/@types/webidl-conversions/package.json
generated
vendored
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"name": "@types/webidl-conversions",
|
||||||
|
"version": "7.0.3",
|
||||||
|
"description": "TypeScript definitions for webidl-conversions",
|
||||||
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/webidl-conversions",
|
||||||
|
"license": "MIT",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "ExE Boss",
|
||||||
|
"githubUsername": "ExE-Boss",
|
||||||
|
"url": "https://github.com/ExE-Boss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BendingBender",
|
||||||
|
"githubUsername": "BendingBender",
|
||||||
|
"url": "https://github.com/BendingBender"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||||
|
"directory": "types/webidl-conversions"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"dependencies": {},
|
||||||
|
"typesPublisherContentHash": "ff1514e10869784e8b7cca9c4099a4213d3f14b48c198b1bf116300df94bf608",
|
||||||
|
"typeScriptVersion": "4.5"
|
||||||
|
}
|
||||||
21
photo-gallery-app/backend/node_modules/@types/whatwg-url/LICENSE
generated
vendored
Normal file
21
photo-gallery-app/backend/node_modules/@types/whatwg-url/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) Microsoft Corporation.
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE
|
||||||
15
photo-gallery-app/backend/node_modules/@types/whatwg-url/README.md
generated
vendored
Normal file
15
photo-gallery-app/backend/node_modules/@types/whatwg-url/README.md
generated
vendored
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Installation
|
||||||
|
> `npm install --save @types/whatwg-url`
|
||||||
|
|
||||||
|
# Summary
|
||||||
|
This package contains type definitions for whatwg-url (https://github.com/jsdom/whatwg-url#readme).
|
||||||
|
|
||||||
|
# Details
|
||||||
|
Files were exported from https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url.
|
||||||
|
|
||||||
|
### Additional Details
|
||||||
|
* Last updated: Sat, 18 May 2024 21:06:54 GMT
|
||||||
|
* Dependencies: [@types/webidl-conversions](https://npmjs.com/package/@types/webidl-conversions)
|
||||||
|
|
||||||
|
# Credits
|
||||||
|
These definitions were written by [Alexander Marks](https://github.com/aomarks), [ExE Boss](https://github.com/ExE-Boss), and [BendingBender](https://github.com/BendingBender).
|
||||||
169
photo-gallery-app/backend/node_modules/@types/whatwg-url/index.d.ts
generated
vendored
Normal file
169
photo-gallery-app/backend/node_modules/@types/whatwg-url/index.d.ts
generated
vendored
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
/// <reference lib="es2020"/>
|
||||||
|
/** https://url.spec.whatwg.org/#url-representation */
|
||||||
|
export interface URLRecord {
|
||||||
|
scheme: string;
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
host: string | number | IPv6Address | null;
|
||||||
|
port: number | null;
|
||||||
|
path: string | string[];
|
||||||
|
query: string | null;
|
||||||
|
fragment: string | null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-ipv6 */
|
||||||
|
export type IPv6Address = [number, number, number, number, number, number, number, number];
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-class */
|
||||||
|
export class URL {
|
||||||
|
constructor(url: string, base?: string | URL);
|
||||||
|
|
||||||
|
get href(): string;
|
||||||
|
set href(V: string);
|
||||||
|
|
||||||
|
get origin(): string;
|
||||||
|
|
||||||
|
get protocol(): string;
|
||||||
|
set protocol(V: string);
|
||||||
|
|
||||||
|
get username(): string;
|
||||||
|
set username(V: string);
|
||||||
|
|
||||||
|
get password(): string;
|
||||||
|
set password(V: string);
|
||||||
|
|
||||||
|
get host(): string;
|
||||||
|
set host(V: string);
|
||||||
|
|
||||||
|
get hostname(): string;
|
||||||
|
set hostname(V: string);
|
||||||
|
|
||||||
|
get port(): string;
|
||||||
|
set port(V: string);
|
||||||
|
|
||||||
|
get pathname(): string;
|
||||||
|
set pathname(V: string);
|
||||||
|
|
||||||
|
get search(): string;
|
||||||
|
set search(V: string);
|
||||||
|
|
||||||
|
get searchParams(): URLSearchParams;
|
||||||
|
|
||||||
|
get hash(): string;
|
||||||
|
set hash(V: string);
|
||||||
|
|
||||||
|
toJSON(): string;
|
||||||
|
|
||||||
|
readonly [Symbol.toStringTag]: "URL";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#interface-urlsearchparams */
|
||||||
|
export class URLSearchParams {
|
||||||
|
constructor(
|
||||||
|
init?:
|
||||||
|
| ReadonlyArray<readonly [name: string, value: string]>
|
||||||
|
| Iterable<readonly [name: string, value: string]>
|
||||||
|
| { readonly [name: string]: string }
|
||||||
|
| string,
|
||||||
|
);
|
||||||
|
|
||||||
|
append(name: string, value: string): void;
|
||||||
|
delete(name: string): void;
|
||||||
|
get(name: string): string | null;
|
||||||
|
getAll(name: string): string[];
|
||||||
|
has(name: string): boolean;
|
||||||
|
set(name: string, value: string): void;
|
||||||
|
sort(): void;
|
||||||
|
|
||||||
|
keys(): IterableIterator<string>;
|
||||||
|
values(): IterableIterator<string>;
|
||||||
|
entries(): IterableIterator<[name: string, value: string]>;
|
||||||
|
forEach<THIS_ARG = void>(
|
||||||
|
callback: (this: THIS_ARG, value: string, name: string, searchParams: this) => void,
|
||||||
|
thisArg?: THIS_ARG,
|
||||||
|
): void;
|
||||||
|
|
||||||
|
readonly [Symbol.toStringTag]: "URLSearchParams";
|
||||||
|
[Symbol.iterator](): IterableIterator<[name: string, value: string]>;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-url-parser */
|
||||||
|
export function parseURL(input: string, options?: { readonly baseURL?: URLRecord | undefined }): URLRecord | null;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-basic-url-parser */
|
||||||
|
export function basicURLParse(
|
||||||
|
input: string,
|
||||||
|
options?: {
|
||||||
|
baseURL?: URLRecord | undefined;
|
||||||
|
url?: URLRecord | undefined;
|
||||||
|
stateOverride?: StateOverride | undefined;
|
||||||
|
},
|
||||||
|
): URLRecord | null;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#scheme-start-state */
|
||||||
|
export type StateOverride =
|
||||||
|
| "scheme start"
|
||||||
|
| "scheme"
|
||||||
|
| "no scheme"
|
||||||
|
| "special relative or authority"
|
||||||
|
| "path or authority"
|
||||||
|
| "relative"
|
||||||
|
| "relative slash"
|
||||||
|
| "special authority slashes"
|
||||||
|
| "special authority ignore slashes"
|
||||||
|
| "authority"
|
||||||
|
| "host"
|
||||||
|
| "hostname"
|
||||||
|
| "port"
|
||||||
|
| "file"
|
||||||
|
| "file slash"
|
||||||
|
| "file host"
|
||||||
|
| "path start"
|
||||||
|
| "path"
|
||||||
|
| "opaque path"
|
||||||
|
| "query"
|
||||||
|
| "fragment";
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-url-serializer */
|
||||||
|
export function serializeURL(urlRecord: URLRecord, excludeFragment?: boolean): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#concept-host-serializer */
|
||||||
|
export function serializeHost(host: string | number | IPv6Address): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-path-serializer */
|
||||||
|
export function serializePath(urlRecord: URLRecord): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#serialize-an-integer */
|
||||||
|
export function serializeInteger(number: number): string;
|
||||||
|
|
||||||
|
/** https://html.spec.whatwg.org#ascii-serialisation-of-an-origin */
|
||||||
|
export function serializeURLOrigin(urlRecord: URLRecord): string;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#set-the-username */
|
||||||
|
export function setTheUsername(urlRecord: URLRecord, username: string): void;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#set-the-password */
|
||||||
|
export function setThePassword(urlRecord: URLRecord, password: string): void;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#url-opaque-path */
|
||||||
|
export function hasAnOpaquePath(urlRecord: URLRecord): boolean;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#cannot-have-a-username-password-port */
|
||||||
|
export function cannotHaveAUsernamePasswordPort(urlRecord: URLRecord): boolean;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#percent-decode */
|
||||||
|
export function percentDecodeBytes(buffer: TypedArray): Uint8Array;
|
||||||
|
|
||||||
|
/** https://url.spec.whatwg.org/#string-percent-decode */
|
||||||
|
export function percentDecodeString(string: string): Uint8Array;
|
||||||
|
|
||||||
|
export type TypedArray =
|
||||||
|
| Uint8Array
|
||||||
|
| Uint8ClampedArray
|
||||||
|
| Uint16Array
|
||||||
|
| Uint32Array
|
||||||
|
| Int8Array
|
||||||
|
| Int16Array
|
||||||
|
| Int32Array
|
||||||
|
| Float32Array
|
||||||
|
| Float64Array;
|
||||||
22
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URL-impl.d.ts
generated
vendored
Normal file
22
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URL-impl.d.ts
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { Globals } from "webidl-conversions";
|
||||||
|
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl";
|
||||||
|
|
||||||
|
declare class URLImpl {
|
||||||
|
constructor(globalObject: Globals, constructorArgs: readonly [url: string, base?: string]);
|
||||||
|
|
||||||
|
href: string;
|
||||||
|
readonly origin: string;
|
||||||
|
protocol: string;
|
||||||
|
username: string;
|
||||||
|
password: string;
|
||||||
|
host: string;
|
||||||
|
hostname: string;
|
||||||
|
port: string;
|
||||||
|
pathname: string;
|
||||||
|
search: string;
|
||||||
|
readonly searchParams: URLSearchParamsImpl;
|
||||||
|
hash: string;
|
||||||
|
|
||||||
|
toJSON(): string;
|
||||||
|
}
|
||||||
|
export { URLImpl as implementation };
|
||||||
66
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URL.d.ts
generated
vendored
Normal file
66
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URL.d.ts
generated
vendored
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
import { URL } from "../index";
|
||||||
|
import { implementation as URLImpl } from "./URL-impl";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URL` object with an implementation
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function is(obj: unknown): obj is URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLImpl` WebIDL2JS implementation object
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function isImpl(obj: unknown): obj is URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the `URL` wrapper into a `URLImpl` object.
|
||||||
|
*
|
||||||
|
* @throws {TypeError} If `obj` is not a `URL` wrapper instance provided by this package.
|
||||||
|
*/
|
||||||
|
export function convert(globalObject: object, obj: unknown, { context }?: { context: string }): URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URL` instance.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URL` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function create(globalObject: object, constructorArgs: readonly [url: string, base?: string]): URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls `create()` and returns the internal `URLImpl`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URL` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function createImpl(globalObject: object, constructorArgs: readonly [url: string, base?: string]): URLImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the `URL` instance, called by `create()`.
|
||||||
|
*
|
||||||
|
* Useful when manually sub-classing a non-constructable wrapper object.
|
||||||
|
*/
|
||||||
|
export function setup<T extends URL>(
|
||||||
|
obj: T,
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs: readonly [url: string, base?: string],
|
||||||
|
): T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URL` object without runing the constructor steps.
|
||||||
|
*
|
||||||
|
* Useful when implementing specifications that initialize objects
|
||||||
|
* in different ways than their constructors do.
|
||||||
|
*/
|
||||||
|
declare function _new(globalObject: object, newTarget?: new(url: string, base?: string) => URL): URLImpl;
|
||||||
|
export { _new as new };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the `URL` constructor onto the `globalObject`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor.
|
||||||
|
*/
|
||||||
|
export function install(globalObject: object, globalNames: readonly string[]): void;
|
||||||
20
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URLSearchParams-impl.d.ts
generated
vendored
Normal file
20
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URLSearchParams-impl.d.ts
generated
vendored
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
declare class URLSearchParamsImpl {
|
||||||
|
constructor(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs: readonly [
|
||||||
|
init?: ReadonlyArray<readonly [name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData: { readonly doNotStripQMark?: boolean | undefined },
|
||||||
|
);
|
||||||
|
|
||||||
|
append(name: string, value: string): void;
|
||||||
|
delete(name: string): void;
|
||||||
|
get(name: string): string | null;
|
||||||
|
getAll(name: string): string[];
|
||||||
|
has(name: string): boolean;
|
||||||
|
set(name: string, value: string): void;
|
||||||
|
sort(): void;
|
||||||
|
|
||||||
|
[Symbol.iterator](): IterableIterator<[name: string, value: string]>;
|
||||||
|
}
|
||||||
|
export { URLSearchParamsImpl as implementation };
|
||||||
92
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URLSearchParams.d.ts
generated
vendored
Normal file
92
photo-gallery-app/backend/node_modules/@types/whatwg-url/lib/URLSearchParams.d.ts
generated
vendored
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
import { URLSearchParams } from "../index";
|
||||||
|
import { implementation as URLSearchParamsImpl } from "./URLSearchParams-impl";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLSearchParams` object with an implementation
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function is(obj: unknown): obj is URLSearchParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether `obj` is a `URLSearchParamsImpl` WebIDL2JS implementation object
|
||||||
|
* provided by this package.
|
||||||
|
*/
|
||||||
|
export function isImpl(obj: unknown): obj is URLSearchParamsImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts the `URLSearchParams` wrapper into a `URLSearchParamsImpl` object.
|
||||||
|
*
|
||||||
|
* @throws {TypeError} If `obj` is not a `URLSearchParams` wrapper instance provided by this package.
|
||||||
|
*/
|
||||||
|
export function convert(globalObject: object, obj: unknown, { context }?: { context: string }): URLSearchParamsImpl;
|
||||||
|
|
||||||
|
export function createDefaultIterator<TIteratorKind extends "key" | "value" | "key+value">(
|
||||||
|
globalObject: object,
|
||||||
|
target: URLSearchParamsImpl,
|
||||||
|
kind: TIteratorKind,
|
||||||
|
): IterableIterator<TIteratorKind extends "key" | "value" ? string : [name: string, value: string]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URLSearchParams` instance.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URLSearchParams` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function create(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): URLSearchParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls `create()` and returns the internal `URLSearchParamsImpl`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the `globalObject` doesn't have a WebIDL2JS constructor
|
||||||
|
* registry or a `URLSearchParams` constructor provided by this package
|
||||||
|
* in the WebIDL2JS constructor registry.
|
||||||
|
*/
|
||||||
|
export function createImpl(
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): URLSearchParamsImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the `URLSearchParams` instance, called by `create()`.
|
||||||
|
*
|
||||||
|
* Useful when manually sub-classing a non-constructable wrapper object.
|
||||||
|
*/
|
||||||
|
export function setup<T extends URLSearchParams>(
|
||||||
|
obj: T,
|
||||||
|
globalObject: object,
|
||||||
|
constructorArgs?: readonly [
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
],
|
||||||
|
privateData?: { doNotStripQMark?: boolean | undefined },
|
||||||
|
): T;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new `URLSearchParams` object without runing the constructor steps.
|
||||||
|
*
|
||||||
|
* Useful when implementing specifications that initialize objects
|
||||||
|
* in different ways than their constructors do.
|
||||||
|
*/
|
||||||
|
declare function _new(
|
||||||
|
globalObject: object,
|
||||||
|
newTarget?: new(
|
||||||
|
init: ReadonlyArray<[name: string, value: string]> | { readonly [name: string]: string } | string,
|
||||||
|
) => URLSearchParams,
|
||||||
|
): URLSearchParamsImpl;
|
||||||
|
export { _new as new };
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Installs the `URLSearchParams` constructor onto the `globalObject`.
|
||||||
|
*
|
||||||
|
* @throws {Error} If the target `globalObject` doesn't have an `Error` constructor.
|
||||||
|
*/
|
||||||
|
export function install(globalObject: object, globalNames: readonly string[]): void;
|
||||||
37
photo-gallery-app/backend/node_modules/@types/whatwg-url/package.json
generated
vendored
Normal file
37
photo-gallery-app/backend/node_modules/@types/whatwg-url/package.json
generated
vendored
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
"name": "@types/whatwg-url",
|
||||||
|
"version": "11.0.5",
|
||||||
|
"description": "TypeScript definitions for whatwg-url",
|
||||||
|
"homepage": "https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/whatwg-url",
|
||||||
|
"license": "MIT",
|
||||||
|
"contributors": [
|
||||||
|
{
|
||||||
|
"name": "Alexander Marks",
|
||||||
|
"githubUsername": "aomarks",
|
||||||
|
"url": "https://github.com/aomarks"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ExE Boss",
|
||||||
|
"githubUsername": "ExE-Boss",
|
||||||
|
"url": "https://github.com/ExE-Boss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BendingBender",
|
||||||
|
"githubUsername": "BendingBender",
|
||||||
|
"url": "https://github.com/BendingBender"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"main": "",
|
||||||
|
"types": "index.d.ts",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/DefinitelyTyped/DefinitelyTyped.git",
|
||||||
|
"directory": "types/whatwg-url"
|
||||||
|
},
|
||||||
|
"scripts": {},
|
||||||
|
"dependencies": {
|
||||||
|
"@types/webidl-conversions": "*"
|
||||||
|
},
|
||||||
|
"typesPublisherContentHash": "c6cfac1bbd7b2ef315fdad11fc9bdb6a8f0ae2b1c3ff057cfca7bc9880eeaa9d",
|
||||||
|
"typeScriptVersion": "4.7"
|
||||||
|
}
|
||||||
4
photo-gallery-app/backend/node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts
generated
vendored
Normal file
4
photo-gallery-app/backend/node_modules/@types/whatwg-url/webidl2js-wrapper.d.ts
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
import * as URL from "./lib/URL";
|
||||||
|
import * as URLSearchParams from "./lib/URLSearchParams";
|
||||||
|
|
||||||
|
export { URL, URLSearchParams };
|
||||||
250
photo-gallery-app/backend/node_modules/accepts/HISTORY.md
generated
vendored
Normal file
250
photo-gallery-app/backend/node_modules/accepts/HISTORY.md
generated
vendored
Normal file
@ -0,0 +1,250 @@
|
|||||||
|
2.0.0 / 2024-08-31
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Drop node <18 support
|
||||||
|
* deps: mime-types@^3.0.0
|
||||||
|
* deps: negotiator@^1.0.0
|
||||||
|
|
||||||
|
1.3.8 / 2022-02-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.34
|
||||||
|
- deps: mime-db@~1.51.0
|
||||||
|
* deps: negotiator@0.6.3
|
||||||
|
|
||||||
|
1.3.7 / 2019-04-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.6.2
|
||||||
|
- Fix sorting charset, encoding, and language with extra parameters
|
||||||
|
|
||||||
|
1.3.6 / 2019-04-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.24
|
||||||
|
- deps: mime-db@~1.40.0
|
||||||
|
|
||||||
|
1.3.5 / 2018-02-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.18
|
||||||
|
- deps: mime-db@~1.33.0
|
||||||
|
|
||||||
|
1.3.4 / 2017-08-22
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.16
|
||||||
|
- deps: mime-db@~1.29.0
|
||||||
|
|
||||||
|
1.3.3 / 2016-05-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.11
|
||||||
|
- deps: mime-db@~1.23.0
|
||||||
|
* deps: negotiator@0.6.1
|
||||||
|
- perf: improve `Accept` parsing speed
|
||||||
|
- perf: improve `Accept-Charset` parsing speed
|
||||||
|
- perf: improve `Accept-Encoding` parsing speed
|
||||||
|
- perf: improve `Accept-Language` parsing speed
|
||||||
|
|
||||||
|
1.3.2 / 2016-03-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.10
|
||||||
|
- Fix extension of `application/dash+xml`
|
||||||
|
- Update primary extension for `audio/mp4`
|
||||||
|
- deps: mime-db@~1.22.0
|
||||||
|
|
||||||
|
1.3.1 / 2016-01-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.9
|
||||||
|
- deps: mime-db@~1.21.0
|
||||||
|
|
||||||
|
1.3.0 / 2015-09-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.7
|
||||||
|
- deps: mime-db@~1.19.0
|
||||||
|
* deps: negotiator@0.6.0
|
||||||
|
- Fix including type extensions in parameters in `Accept` parsing
|
||||||
|
- Fix parsing `Accept` parameters with quoted equals
|
||||||
|
- Fix parsing `Accept` parameters with quoted semicolons
|
||||||
|
- Lazy-load modules from main entry point
|
||||||
|
- perf: delay type concatenation until needed
|
||||||
|
- perf: enable strict mode
|
||||||
|
- perf: hoist regular expressions
|
||||||
|
- perf: remove closures getting spec properties
|
||||||
|
- perf: remove a closure from media type parsing
|
||||||
|
- perf: remove property delete from media type parsing
|
||||||
|
|
||||||
|
1.2.13 / 2015-09-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.6
|
||||||
|
- deps: mime-db@~1.18.0
|
||||||
|
|
||||||
|
1.2.12 / 2015-07-30
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.4
|
||||||
|
- deps: mime-db@~1.16.0
|
||||||
|
|
||||||
|
1.2.11 / 2015-07-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.3
|
||||||
|
- deps: mime-db@~1.15.0
|
||||||
|
|
||||||
|
1.2.10 / 2015-07-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.2
|
||||||
|
- deps: mime-db@~1.14.0
|
||||||
|
|
||||||
|
1.2.9 / 2015-06-08
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.1
|
||||||
|
- perf: fix deopt during mapping
|
||||||
|
|
||||||
|
1.2.8 / 2015-06-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.1.0
|
||||||
|
- deps: mime-db@~1.13.0
|
||||||
|
* perf: avoid argument reassignment & argument slice
|
||||||
|
* perf: avoid negotiator recursive construction
|
||||||
|
* perf: enable strict mode
|
||||||
|
* perf: remove unnecessary bitwise operator
|
||||||
|
|
||||||
|
1.2.7 / 2015-05-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.5.3
|
||||||
|
- Fix media type parameter matching to be case-insensitive
|
||||||
|
|
||||||
|
1.2.6 / 2015-05-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.11
|
||||||
|
- deps: mime-db@~1.9.1
|
||||||
|
* deps: negotiator@0.5.2
|
||||||
|
- Fix comparing media types with quoted values
|
||||||
|
- Fix splitting media types with quoted commas
|
||||||
|
|
||||||
|
1.2.5 / 2015-03-13
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.10
|
||||||
|
- deps: mime-db@~1.8.0
|
||||||
|
|
||||||
|
1.2.4 / 2015-02-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Support Node.js 0.6
|
||||||
|
* deps: mime-types@~2.0.9
|
||||||
|
- deps: mime-db@~1.7.0
|
||||||
|
* deps: negotiator@0.5.1
|
||||||
|
- Fix preference sorting to be stable for long acceptable lists
|
||||||
|
|
||||||
|
1.2.3 / 2015-01-31
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.8
|
||||||
|
- deps: mime-db@~1.6.0
|
||||||
|
|
||||||
|
1.2.2 / 2014-12-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.7
|
||||||
|
- deps: mime-db@~1.5.0
|
||||||
|
|
||||||
|
1.2.1 / 2014-12-30
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.5
|
||||||
|
- deps: mime-db@~1.3.1
|
||||||
|
|
||||||
|
1.2.0 / 2014-12-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.5.0
|
||||||
|
- Fix list return order when large accepted list
|
||||||
|
- Fix missing identity encoding when q=0 exists
|
||||||
|
- Remove dynamic building of Negotiator class
|
||||||
|
|
||||||
|
1.1.4 / 2014-12-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.4
|
||||||
|
- deps: mime-db@~1.3.0
|
||||||
|
|
||||||
|
1.1.3 / 2014-11-09
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.3
|
||||||
|
- deps: mime-db@~1.2.0
|
||||||
|
|
||||||
|
1.1.2 / 2014-10-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.9
|
||||||
|
- Fix error when media type has invalid parameter
|
||||||
|
|
||||||
|
1.1.1 / 2014-09-28
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: mime-types@~2.0.2
|
||||||
|
- deps: mime-db@~1.1.0
|
||||||
|
* deps: negotiator@0.4.8
|
||||||
|
- Fix all negotiations to be case-insensitive
|
||||||
|
- Stable sort preferences of same quality according to client order
|
||||||
|
|
||||||
|
1.1.0 / 2014-09-02
|
||||||
|
==================
|
||||||
|
|
||||||
|
* update `mime-types`
|
||||||
|
|
||||||
|
1.0.7 / 2014-07-04
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix wrong type returned from `type` when match after unknown extension
|
||||||
|
|
||||||
|
1.0.6 / 2014-06-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.7
|
||||||
|
|
||||||
|
1.0.5 / 2014-06-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix crash when unknown extension given
|
||||||
|
|
||||||
|
1.0.4 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* use `mime-types`
|
||||||
|
|
||||||
|
1.0.3 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: negotiator@0.4.6
|
||||||
|
- Order by specificity when quality is the same
|
||||||
|
|
||||||
|
1.0.2 / 2014-05-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Fix interpretation when header not in request
|
||||||
|
* deps: pin negotiator@0.4.5
|
||||||
|
|
||||||
|
1.0.1 / 2014-01-18
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Identity encoding isn't always acceptable
|
||||||
|
* deps: negotiator@~0.4.0
|
||||||
|
|
||||||
|
1.0.0 / 2013-12-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* Genesis
|
||||||
23
photo-gallery-app/backend/node_modules/accepts/LICENSE
generated
vendored
Normal file
23
photo-gallery-app/backend/node_modules/accepts/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
||||||
|
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
140
photo-gallery-app/backend/node_modules/accepts/README.md
generated
vendored
Normal file
140
photo-gallery-app/backend/node_modules/accepts/README.md
generated
vendored
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
# accepts
|
||||||
|
|
||||||
|
[![NPM Version][npm-version-image]][npm-url]
|
||||||
|
[![NPM Downloads][npm-downloads-image]][npm-url]
|
||||||
|
[![Node.js Version][node-version-image]][node-version-url]
|
||||||
|
[![Build Status][github-actions-ci-image]][github-actions-ci-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
|
||||||
|
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
|
||||||
|
Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
|
||||||
|
|
||||||
|
In addition to negotiator, it allows:
|
||||||
|
|
||||||
|
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
|
||||||
|
as well as `('text/html', 'application/json')`.
|
||||||
|
- Allows type shorthands such as `json`.
|
||||||
|
- Returns `false` when no types match
|
||||||
|
- Treats non-existent headers as `*`
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
This is a [Node.js](https://nodejs.org/en/) module available through the
|
||||||
|
[npm registry](https://www.npmjs.com/). Installation is done using the
|
||||||
|
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install accepts
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
var accepts = require('accepts')
|
||||||
|
```
|
||||||
|
|
||||||
|
### accepts(req)
|
||||||
|
|
||||||
|
Create a new `Accepts` object for the given `req`.
|
||||||
|
|
||||||
|
#### .charset(charsets)
|
||||||
|
|
||||||
|
Return the first accepted charset. If nothing in `charsets` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .charsets()
|
||||||
|
|
||||||
|
Return the charsets that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .encoding(encodings)
|
||||||
|
|
||||||
|
Return the first accepted encoding. If nothing in `encodings` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .encodings()
|
||||||
|
|
||||||
|
Return the encodings that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .language(languages)
|
||||||
|
|
||||||
|
Return the first accepted language. If nothing in `languages` is accepted,
|
||||||
|
then `false` is returned.
|
||||||
|
|
||||||
|
#### .languages()
|
||||||
|
|
||||||
|
Return the languages that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
#### .type(types)
|
||||||
|
|
||||||
|
Return the first accepted type (and it is returned as the same text as what
|
||||||
|
appears in the `types` array). If nothing in `types` is accepted, then `false`
|
||||||
|
is returned.
|
||||||
|
|
||||||
|
The `types` array can contain full MIME types or file extensions. Any value
|
||||||
|
that is not a full MIME type is passed to `require('mime-types').lookup`.
|
||||||
|
|
||||||
|
#### .types()
|
||||||
|
|
||||||
|
Return the types that the request accepts, in the order of the client's
|
||||||
|
preference (most preferred first).
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Simple type negotiation
|
||||||
|
|
||||||
|
This simple example shows how to use `accepts` to return a different typed
|
||||||
|
respond body based on what the client wants to accept. The server lists it's
|
||||||
|
preferences in order and will get back the best match between the client and
|
||||||
|
server.
|
||||||
|
|
||||||
|
```js
|
||||||
|
var accepts = require('accepts')
|
||||||
|
var http = require('http')
|
||||||
|
|
||||||
|
function app (req, res) {
|
||||||
|
var accept = accepts(req)
|
||||||
|
|
||||||
|
// the order of this list is significant; should be server preferred order
|
||||||
|
switch (accept.type(['json', 'html'])) {
|
||||||
|
case 'json':
|
||||||
|
res.setHeader('Content-Type', 'application/json')
|
||||||
|
res.write('{"hello":"world!"}')
|
||||||
|
break
|
||||||
|
case 'html':
|
||||||
|
res.setHeader('Content-Type', 'text/html')
|
||||||
|
res.write('<b>hello, world!</b>')
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
// the fallback is text/plain, so no need to specify it above
|
||||||
|
res.setHeader('Content-Type', 'text/plain')
|
||||||
|
res.write('hello, world!')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
res.end()
|
||||||
|
}
|
||||||
|
|
||||||
|
http.createServer(app).listen(3000)
|
||||||
|
```
|
||||||
|
|
||||||
|
You can test this out with the cURL program:
|
||||||
|
```sh
|
||||||
|
curl -I -H'Accept: text/html' http://localhost:3000/
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
|
||||||
|
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
|
||||||
|
[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
|
||||||
|
[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
|
||||||
|
[node-version-image]: https://badgen.net/npm/node/accepts
|
||||||
|
[node-version-url]: https://nodejs.org/en/download
|
||||||
|
[npm-downloads-image]: https://badgen.net/npm/dm/accepts
|
||||||
|
[npm-url]: https://npmjs.org/package/accepts
|
||||||
|
[npm-version-image]: https://badgen.net/npm/v/accepts
|
||||||
238
photo-gallery-app/backend/node_modules/accepts/index.js
generated
vendored
Normal file
238
photo-gallery-app/backend/node_modules/accepts/index.js
generated
vendored
Normal file
@ -0,0 +1,238 @@
|
|||||||
|
/*!
|
||||||
|
* accepts
|
||||||
|
* Copyright(c) 2014 Jonathan Ong
|
||||||
|
* Copyright(c) 2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var Negotiator = require('negotiator')
|
||||||
|
var mime = require('mime-types')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = Accepts
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new Accepts object for the given req.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function Accepts (req) {
|
||||||
|
if (!(this instanceof Accepts)) {
|
||||||
|
return new Accepts(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.headers = req.headers
|
||||||
|
this.negotiator = new Negotiator(req)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given `type(s)` is acceptable, returning
|
||||||
|
* the best match when true, otherwise `undefined`, in which
|
||||||
|
* case you should respond with 406 "Not Acceptable".
|
||||||
|
*
|
||||||
|
* The `type` value may be a single mime type string
|
||||||
|
* such as "application/json", the extension name
|
||||||
|
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
|
||||||
|
* or array is given the _best_ match, if any is returned.
|
||||||
|
*
|
||||||
|
* Examples:
|
||||||
|
*
|
||||||
|
* // Accept: text/html
|
||||||
|
* this.types('html');
|
||||||
|
* // => "html"
|
||||||
|
*
|
||||||
|
* // Accept: text/*, application/json
|
||||||
|
* this.types('html');
|
||||||
|
* // => "html"
|
||||||
|
* this.types('text/html');
|
||||||
|
* // => "text/html"
|
||||||
|
* this.types('json', 'text');
|
||||||
|
* // => "json"
|
||||||
|
* this.types('application/json');
|
||||||
|
* // => "application/json"
|
||||||
|
*
|
||||||
|
* // Accept: text/*, application/json
|
||||||
|
* this.types('image/png');
|
||||||
|
* this.types('png');
|
||||||
|
* // => undefined
|
||||||
|
*
|
||||||
|
* // Accept: text/*;q=.5, application/json
|
||||||
|
* this.types(['html', 'json']);
|
||||||
|
* this.types('html', 'json');
|
||||||
|
* // => "json"
|
||||||
|
*
|
||||||
|
* @param {String|Array} types...
|
||||||
|
* @return {String|Array|Boolean}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.type =
|
||||||
|
Accepts.prototype.types = function (types_) {
|
||||||
|
var types = types_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (types && !Array.isArray(types)) {
|
||||||
|
types = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < types.length; i++) {
|
||||||
|
types[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no types, return all requested types
|
||||||
|
if (!types || types.length === 0) {
|
||||||
|
return this.negotiator.mediaTypes()
|
||||||
|
}
|
||||||
|
|
||||||
|
// no accept header, return first given type
|
||||||
|
if (!this.headers.accept) {
|
||||||
|
return types[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
var mimes = types.map(extToMime)
|
||||||
|
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
|
||||||
|
var first = accepts[0]
|
||||||
|
|
||||||
|
return first
|
||||||
|
? types[mimes.indexOf(first)]
|
||||||
|
: false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted encodings or best fit based on `encodings`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Encoding: gzip, deflate`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['gzip', 'deflate']
|
||||||
|
*
|
||||||
|
* @param {String|Array} encodings...
|
||||||
|
* @return {String|Array}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.encoding =
|
||||||
|
Accepts.prototype.encodings = function (encodings_) {
|
||||||
|
var encodings = encodings_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (encodings && !Array.isArray(encodings)) {
|
||||||
|
encodings = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < encodings.length; i++) {
|
||||||
|
encodings[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no encodings, return all requested encodings
|
||||||
|
if (!encodings || encodings.length === 0) {
|
||||||
|
return this.negotiator.encodings()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.encodings(encodings)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted charsets or best fit based on `charsets`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['utf-8', 'utf-7', 'iso-8859-1']
|
||||||
|
*
|
||||||
|
* @param {String|Array} charsets...
|
||||||
|
* @return {String|Array}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.charset =
|
||||||
|
Accepts.prototype.charsets = function (charsets_) {
|
||||||
|
var charsets = charsets_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (charsets && !Array.isArray(charsets)) {
|
||||||
|
charsets = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < charsets.length; i++) {
|
||||||
|
charsets[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no charsets, return all requested charsets
|
||||||
|
if (!charsets || charsets.length === 0) {
|
||||||
|
return this.negotiator.charsets()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.charsets(charsets)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return accepted languages or best fit based on `langs`.
|
||||||
|
*
|
||||||
|
* Given `Accept-Language: en;q=0.8, es, pt`
|
||||||
|
* an array sorted by quality is returned:
|
||||||
|
*
|
||||||
|
* ['es', 'pt', 'en']
|
||||||
|
*
|
||||||
|
* @param {String|Array} langs...
|
||||||
|
* @return {Array|String}
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Accepts.prototype.lang =
|
||||||
|
Accepts.prototype.langs =
|
||||||
|
Accepts.prototype.language =
|
||||||
|
Accepts.prototype.languages = function (languages_) {
|
||||||
|
var languages = languages_
|
||||||
|
|
||||||
|
// support flattened arguments
|
||||||
|
if (languages && !Array.isArray(languages)) {
|
||||||
|
languages = new Array(arguments.length)
|
||||||
|
for (var i = 0; i < languages.length; i++) {
|
||||||
|
languages[i] = arguments[i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no languages, return all requested languages
|
||||||
|
if (!languages || languages.length === 0) {
|
||||||
|
return this.negotiator.languages()
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.negotiator.languages(languages)[0] || false
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert extnames to mime.
|
||||||
|
*
|
||||||
|
* @param {String} type
|
||||||
|
* @return {String}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function extToMime (type) {
|
||||||
|
return type.indexOf('/') === -1
|
||||||
|
? mime.lookup(type)
|
||||||
|
: type
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if mime is valid.
|
||||||
|
*
|
||||||
|
* @param {String} type
|
||||||
|
* @return {Boolean}
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function validMime (type) {
|
||||||
|
return typeof type === 'string'
|
||||||
|
}
|
||||||
47
photo-gallery-app/backend/node_modules/accepts/package.json
generated
vendored
Normal file
47
photo-gallery-app/backend/node_modules/accepts/package.json
generated
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
{
|
||||||
|
"name": "accepts",
|
||||||
|
"description": "Higher-level content negotiation",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"contributors": [
|
||||||
|
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
||||||
|
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"repository": "jshttp/accepts",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-types": "^3.0.0",
|
||||||
|
"negotiator": "^1.0.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"deep-equal": "1.0.1",
|
||||||
|
"eslint": "7.32.0",
|
||||||
|
"eslint-config-standard": "14.1.1",
|
||||||
|
"eslint-plugin-import": "2.25.4",
|
||||||
|
"eslint-plugin-markdown": "2.2.1",
|
||||||
|
"eslint-plugin-node": "11.1.0",
|
||||||
|
"eslint-plugin-promise": "4.3.1",
|
||||||
|
"eslint-plugin-standard": "4.1.0",
|
||||||
|
"mocha": "9.2.0",
|
||||||
|
"nyc": "15.1.0"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"LICENSE",
|
||||||
|
"HISTORY.md",
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"lint": "eslint .",
|
||||||
|
"test": "mocha --reporter spec --check-leaks --bail test/",
|
||||||
|
"test-ci": "nyc --reporter=lcov --reporter=text npm test",
|
||||||
|
"test-cov": "nyc --reporter=html --reporter=text npm test"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"content",
|
||||||
|
"negotiation",
|
||||||
|
"accept",
|
||||||
|
"accepts"
|
||||||
|
]
|
||||||
|
}
|
||||||
1
photo-gallery-app/backend/node_modules/append-field/.npmignore
generated
vendored
Normal file
1
photo-gallery-app/backend/node_modules/append-field/.npmignore
generated
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
node_modules/
|
||||||
21
photo-gallery-app/backend/node_modules/append-field/LICENSE
generated
vendored
Normal file
21
photo-gallery-app/backend/node_modules/append-field/LICENSE
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 Linus Unnebäck
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
44
photo-gallery-app/backend/node_modules/append-field/README.md
generated
vendored
Normal file
44
photo-gallery-app/backend/node_modules/append-field/README.md
generated
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# `append-field`
|
||||||
|
|
||||||
|
A [W3C HTML JSON forms spec](http://www.w3.org/TR/html-json-forms/) compliant
|
||||||
|
field appender (for lack of a better name). Useful for people implementing
|
||||||
|
`application/x-www-form-urlencoded` and `multipart/form-data` parsers.
|
||||||
|
|
||||||
|
It works best on objects created with `Object.create(null)`. Otherwise it might
|
||||||
|
conflict with variables from the prototype (e.g. `hasOwnProperty`).
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install --save append-field
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
var appendField = require('append-field')
|
||||||
|
var obj = Object.create(null)
|
||||||
|
|
||||||
|
appendField(obj, 'pets[0][species]', 'Dahut')
|
||||||
|
appendField(obj, 'pets[0][name]', 'Hypatia')
|
||||||
|
appendField(obj, 'pets[1][species]', 'Felis Stultus')
|
||||||
|
appendField(obj, 'pets[1][name]', 'Billie')
|
||||||
|
|
||||||
|
console.log(obj)
|
||||||
|
```
|
||||||
|
|
||||||
|
```text
|
||||||
|
{ pets:
|
||||||
|
[ { species: 'Dahut', name: 'Hypatia' },
|
||||||
|
{ species: 'Felis Stultus', name: 'Billie' } ] }
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
### `appendField(store, key, value)`
|
||||||
|
|
||||||
|
Adds the field named `key` with the value `value` to the object `store`.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
12
photo-gallery-app/backend/node_modules/append-field/index.js
generated
vendored
Normal file
12
photo-gallery-app/backend/node_modules/append-field/index.js
generated
vendored
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var parsePath = require('./lib/parse-path')
|
||||||
|
var setValue = require('./lib/set-value')
|
||||||
|
|
||||||
|
function appendField (store, key, value) {
|
||||||
|
var steps = parsePath(key)
|
||||||
|
|
||||||
|
steps.reduce(function (context, step) {
|
||||||
|
return setValue(context, step, context[step.key], value)
|
||||||
|
}, store)
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = appendField
|
||||||
53
photo-gallery-app/backend/node_modules/append-field/lib/parse-path.js
generated
vendored
Normal file
53
photo-gallery-app/backend/node_modules/append-field/lib/parse-path.js
generated
vendored
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
var reFirstKey = /^[^\[]*/
|
||||||
|
var reDigitPath = /^\[(\d+)\]/
|
||||||
|
var reNormalPath = /^\[([^\]]+)\]/
|
||||||
|
|
||||||
|
function parsePath (key) {
|
||||||
|
function failure () {
|
||||||
|
return [{ type: 'object', key: key, last: true }]
|
||||||
|
}
|
||||||
|
|
||||||
|
var firstKey = reFirstKey.exec(key)[0]
|
||||||
|
if (!firstKey) return failure()
|
||||||
|
|
||||||
|
var len = key.length
|
||||||
|
var pos = firstKey.length
|
||||||
|
var tail = { type: 'object', key: firstKey }
|
||||||
|
var steps = [tail]
|
||||||
|
|
||||||
|
while (pos < len) {
|
||||||
|
var m
|
||||||
|
|
||||||
|
if (key[pos] === '[' && key[pos + 1] === ']') {
|
||||||
|
pos += 2
|
||||||
|
tail.append = true
|
||||||
|
if (pos !== len) return failure()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
m = reDigitPath.exec(key.substring(pos))
|
||||||
|
if (m !== null) {
|
||||||
|
pos += m[0].length
|
||||||
|
tail.nextType = 'array'
|
||||||
|
tail = { type: 'array', key: parseInt(m[1], 10) }
|
||||||
|
steps.push(tail)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
m = reNormalPath.exec(key.substring(pos))
|
||||||
|
if (m !== null) {
|
||||||
|
pos += m[0].length
|
||||||
|
tail.nextType = 'object'
|
||||||
|
tail = { type: 'object', key: m[1] }
|
||||||
|
steps.push(tail)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
return failure()
|
||||||
|
}
|
||||||
|
|
||||||
|
tail.last = true
|
||||||
|
return steps
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = parsePath
|
||||||
64
photo-gallery-app/backend/node_modules/append-field/lib/set-value.js
generated
vendored
Normal file
64
photo-gallery-app/backend/node_modules/append-field/lib/set-value.js
generated
vendored
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
function valueType (value) {
|
||||||
|
if (value === undefined) return 'undefined'
|
||||||
|
if (Array.isArray(value)) return 'array'
|
||||||
|
if (typeof value === 'object') return 'object'
|
||||||
|
return 'scalar'
|
||||||
|
}
|
||||||
|
|
||||||
|
function setLastValue (context, step, currentValue, entryValue) {
|
||||||
|
switch (valueType(currentValue)) {
|
||||||
|
case 'undefined':
|
||||||
|
if (step.append) {
|
||||||
|
context[step.key] = [entryValue]
|
||||||
|
} else {
|
||||||
|
context[step.key] = entryValue
|
||||||
|
}
|
||||||
|
break
|
||||||
|
case 'array':
|
||||||
|
context[step.key].push(entryValue)
|
||||||
|
break
|
||||||
|
case 'object':
|
||||||
|
return setLastValue(currentValue, { type: 'object', key: '', last: true }, currentValue[''], entryValue)
|
||||||
|
case 'scalar':
|
||||||
|
context[step.key] = [context[step.key], entryValue]
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return context
|
||||||
|
}
|
||||||
|
|
||||||
|
function setValue (context, step, currentValue, entryValue) {
|
||||||
|
if (step.last) return setLastValue(context, step, currentValue, entryValue)
|
||||||
|
|
||||||
|
var obj
|
||||||
|
switch (valueType(currentValue)) {
|
||||||
|
case 'undefined':
|
||||||
|
if (step.nextType === 'array') {
|
||||||
|
context[step.key] = []
|
||||||
|
} else {
|
||||||
|
context[step.key] = Object.create(null)
|
||||||
|
}
|
||||||
|
return context[step.key]
|
||||||
|
case 'object':
|
||||||
|
return context[step.key]
|
||||||
|
case 'array':
|
||||||
|
if (step.nextType === 'array') {
|
||||||
|
return currentValue
|
||||||
|
}
|
||||||
|
|
||||||
|
obj = Object.create(null)
|
||||||
|
context[step.key] = obj
|
||||||
|
currentValue.forEach(function (item, i) {
|
||||||
|
if (item !== undefined) obj['' + i] = item
|
||||||
|
})
|
||||||
|
|
||||||
|
return obj
|
||||||
|
case 'scalar':
|
||||||
|
obj = Object.create(null)
|
||||||
|
obj[''] = currentValue
|
||||||
|
context[step.key] = obj
|
||||||
|
return obj
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = setValue
|
||||||
19
photo-gallery-app/backend/node_modules/append-field/package.json
generated
vendored
Normal file
19
photo-gallery-app/backend/node_modules/append-field/package.json
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "append-field",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "MIT",
|
||||||
|
"author": "Linus Unnebäck <linus@folkdatorn.se>",
|
||||||
|
"main": "index.js",
|
||||||
|
"devDependencies": {
|
||||||
|
"mocha": "^2.2.4",
|
||||||
|
"standard": "^6.0.5",
|
||||||
|
"testdata-w3c-json-form": "^0.2.0"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"test": "standard && mocha"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "http://github.com/LinusU/node-append-field.git"
|
||||||
|
}
|
||||||
|
}
|
||||||
19
photo-gallery-app/backend/node_modules/append-field/test/forms.js
generated
vendored
Normal file
19
photo-gallery-app/backend/node_modules/append-field/test/forms.js
generated
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
/* eslint-env mocha */
|
||||||
|
|
||||||
|
var assert = require('assert')
|
||||||
|
var appendField = require('../')
|
||||||
|
var testData = require('testdata-w3c-json-form')
|
||||||
|
|
||||||
|
describe('Append Field', function () {
|
||||||
|
for (var test of testData) {
|
||||||
|
it('handles ' + test.name, function () {
|
||||||
|
var store = Object.create(null)
|
||||||
|
|
||||||
|
for (var field of test.fields) {
|
||||||
|
appendField(store, field.key, field.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.deepEqual(store, test.expected)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
58
photo-gallery-app/backend/node_modules/array-parallel/.npmignore
generated
vendored
Normal file
58
photo-gallery-app/backend/node_modules/array-parallel/.npmignore
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# Compiled source #
|
||||||
|
###################
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Packages #
|
||||||
|
############
|
||||||
|
# it's better to unpack these files and commit the raw source
|
||||||
|
# git has its own built in compression methods
|
||||||
|
*.7z
|
||||||
|
*.dmg
|
||||||
|
*.gz
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Logs and databases #
|
||||||
|
######################
|
||||||
|
*.log
|
||||||
|
*.sql
|
||||||
|
*.sqlite
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
.DS_Store*
|
||||||
|
ehthumbs.db
|
||||||
|
Icon?
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Node.js #
|
||||||
|
###########
|
||||||
|
lib-cov
|
||||||
|
*.seed
|
||||||
|
*.log
|
||||||
|
*.csv
|
||||||
|
*.dat
|
||||||
|
*.out
|
||||||
|
*.pid
|
||||||
|
*.gz
|
||||||
|
|
||||||
|
pids
|
||||||
|
logs
|
||||||
|
results
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
|
||||||
|
# Components #
|
||||||
|
##############
|
||||||
|
|
||||||
|
/build
|
||||||
|
/components
|
||||||
6
photo-gallery-app/backend/node_modules/array-parallel/.travis.yml
generated
vendored
Normal file
6
photo-gallery-app/backend/node_modules/array-parallel/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "0.4"
|
||||||
|
- "0.6"
|
||||||
|
- "0.8"
|
||||||
|
- "0.10"
|
||||||
78
photo-gallery-app/backend/node_modules/array-parallel/README.md
generated
vendored
Normal file
78
photo-gallery-app/backend/node_modules/array-parallel/README.md
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
# Array Series [](https://travis-ci.org/component/array-parallel)
|
||||||
|
|
||||||
|
Call an array of asynchronous functions in parallel
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
#### parallel(fns[, context[, callback]])
|
||||||
|
|
||||||
|
```js
|
||||||
|
var parallel = require('array-parallel')
|
||||||
|
|
||||||
|
parallel([
|
||||||
|
function (done) {
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
], this, function (err) {
|
||||||
|
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### fns
|
||||||
|
|
||||||
|
`fns` is an array of functions to call in parallel.
|
||||||
|
The argument signature should be:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function (done) {
|
||||||
|
done(new Error())
|
||||||
|
// or
|
||||||
|
done(null, result)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
That is, each function should only take a `done` as an argument.
|
||||||
|
Each callback should only take an `Error` as the first argument,
|
||||||
|
or a value as the second.
|
||||||
|
|
||||||
|
#### context
|
||||||
|
|
||||||
|
Optional context to pass to each `fn`.
|
||||||
|
Basically `fn.call(context, done)`.
|
||||||
|
|
||||||
|
#### callback(err, results)
|
||||||
|
|
||||||
|
```js
|
||||||
|
function (err, results) {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Only argument is an `Error` argument.
|
||||||
|
It will be the first error retrieved from all the `fns`.
|
||||||
|
`results` will be an array of results from each `fn`,
|
||||||
|
thus this could be considered an asynchronous version of `[].map`.
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013 Jonathan Ong me@jongleberry.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
11
photo-gallery-app/backend/node_modules/array-parallel/component.json
generated
vendored
Normal file
11
photo-gallery-app/backend/node_modules/array-parallel/component.json
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "array-parallel",
|
||||||
|
"description": "Call an array of asynchronous functions in parallel",
|
||||||
|
"repo": "array-parallel",
|
||||||
|
"version": "0.1.3",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
40
photo-gallery-app/backend/node_modules/array-parallel/index.js
generated
vendored
Normal file
40
photo-gallery-app/backend/node_modules/array-parallel/index.js
generated
vendored
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
module.exports = function parallel(fns, context, callback) {
|
||||||
|
if (!callback) {
|
||||||
|
if (typeof context === 'function') {
|
||||||
|
callback = context
|
||||||
|
context = null
|
||||||
|
} else {
|
||||||
|
callback = noop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var pending = fns && fns.length
|
||||||
|
if (!pending) return callback(null, []);
|
||||||
|
|
||||||
|
var finished = false
|
||||||
|
var results = new Array(pending)
|
||||||
|
|
||||||
|
fns.forEach(context ? function (fn, i) {
|
||||||
|
fn.call(context, maybeDone(i))
|
||||||
|
} : function (fn, i) {
|
||||||
|
fn(maybeDone(i))
|
||||||
|
})
|
||||||
|
|
||||||
|
function maybeDone(i) {
|
||||||
|
return function (err, result) {
|
||||||
|
if (finished) return;
|
||||||
|
|
||||||
|
if (err) {
|
||||||
|
callback(err, results)
|
||||||
|
finished = true
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
results[i] = result
|
||||||
|
|
||||||
|
if (!--pending) callback(null, results);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function noop() {}
|
||||||
23
photo-gallery-app/backend/node_modules/array-parallel/package.json
generated
vendored
Normal file
23
photo-gallery-app/backend/node_modules/array-parallel/package.json
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "array-parallel",
|
||||||
|
"description": "Call an array of asynchronous functions in parallel",
|
||||||
|
"version": "0.1.3",
|
||||||
|
"scripts": {
|
||||||
|
"test": "node test"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "Jonathan Ong",
|
||||||
|
"email": "me@jongleberry.com",
|
||||||
|
"url": "http://jongleberry.com",
|
||||||
|
"twitter": "https://twitter.com/jongleberry"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/component/array-parallel.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/component/array-parallel/issues",
|
||||||
|
"email": "me@jongleberry.com"
|
||||||
|
},
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
62
photo-gallery-app/backend/node_modules/array-parallel/test.js
generated
vendored
Normal file
62
photo-gallery-app/backend/node_modules/array-parallel/test.js
generated
vendored
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
var assert = require('assert')
|
||||||
|
var parallel = require('./')
|
||||||
|
|
||||||
|
var a, b, c
|
||||||
|
parallel([
|
||||||
|
function (done) {
|
||||||
|
setTimeout(function () {
|
||||||
|
done(null, a = 0)
|
||||||
|
}, 5)
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
setTimeout(function () {
|
||||||
|
done(null, b = 1)
|
||||||
|
}, 10)
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
setTimeout(function () {
|
||||||
|
done(null, c = 2)
|
||||||
|
}, 15)
|
||||||
|
}
|
||||||
|
], function (err, results) {
|
||||||
|
assert.equal(a, 0)
|
||||||
|
assert.equal(b, 1)
|
||||||
|
assert.equal(c, 2)
|
||||||
|
|
||||||
|
assert.deepEqual(results, [0, 1, 2])
|
||||||
|
})
|
||||||
|
|
||||||
|
var d, e
|
||||||
|
parallel([
|
||||||
|
function (done) {
|
||||||
|
setTimeout(function () {
|
||||||
|
d = 1
|
||||||
|
done(new Error('message'))
|
||||||
|
}, 5)
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
setTimeout(function () {
|
||||||
|
e = 2
|
||||||
|
done()
|
||||||
|
}, 10)
|
||||||
|
}
|
||||||
|
], function (err) {
|
||||||
|
assert.equal(err.message, 'message')
|
||||||
|
assert.equal(d, 1)
|
||||||
|
assert.equal(e, undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
var context = 'hello'
|
||||||
|
parallel([function (done) {
|
||||||
|
assert.equal(this, context)
|
||||||
|
}], context)
|
||||||
|
|
||||||
|
var f
|
||||||
|
parallel([function (done) {
|
||||||
|
f = true
|
||||||
|
done()
|
||||||
|
}])
|
||||||
|
|
||||||
|
process.nextTick(function () {
|
||||||
|
assert.equal(f, true)
|
||||||
|
})
|
||||||
58
photo-gallery-app/backend/node_modules/array-series/.npmignore
generated
vendored
Normal file
58
photo-gallery-app/backend/node_modules/array-series/.npmignore
generated
vendored
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# Compiled source #
|
||||||
|
###################
|
||||||
|
*.com
|
||||||
|
*.class
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
*.o
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Packages #
|
||||||
|
############
|
||||||
|
# it's better to unpack these files and commit the raw source
|
||||||
|
# git has its own built in compression methods
|
||||||
|
*.7z
|
||||||
|
*.dmg
|
||||||
|
*.gz
|
||||||
|
*.iso
|
||||||
|
*.jar
|
||||||
|
*.rar
|
||||||
|
*.tar
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# Logs and databases #
|
||||||
|
######################
|
||||||
|
*.log
|
||||||
|
*.sql
|
||||||
|
*.sqlite
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
.DS_Store*
|
||||||
|
ehthumbs.db
|
||||||
|
Icon?
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Node.js #
|
||||||
|
###########
|
||||||
|
lib-cov
|
||||||
|
*.seed
|
||||||
|
*.log
|
||||||
|
*.csv
|
||||||
|
*.dat
|
||||||
|
*.out
|
||||||
|
*.pid
|
||||||
|
*.gz
|
||||||
|
|
||||||
|
pids
|
||||||
|
logs
|
||||||
|
results
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
npm-debug.log
|
||||||
|
|
||||||
|
# Components #
|
||||||
|
##############
|
||||||
|
|
||||||
|
/build
|
||||||
|
/components
|
||||||
4
photo-gallery-app/backend/node_modules/array-series/.travis.yml
generated
vendored
Normal file
4
photo-gallery-app/backend/node_modules/array-series/.travis.yml
generated
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
language: node_js
|
||||||
|
node_js:
|
||||||
|
- "0.8"
|
||||||
|
- "0.10"
|
||||||
76
photo-gallery-app/backend/node_modules/array-series/README.md
generated
vendored
Normal file
76
photo-gallery-app/backend/node_modules/array-series/README.md
generated
vendored
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# Array Series [](https://travis-ci.org/component/array-series)
|
||||||
|
|
||||||
|
Call an array of asynchronous functions in series
|
||||||
|
|
||||||
|
### API
|
||||||
|
|
||||||
|
#### series(fns[, context[, callback]])
|
||||||
|
|
||||||
|
```js
|
||||||
|
var series = require('array-series')
|
||||||
|
|
||||||
|
series([
|
||||||
|
function (done) {
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
], this, function (err) {
|
||||||
|
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
#### fns
|
||||||
|
|
||||||
|
`fns` is an array of functions to call in series.
|
||||||
|
The argument signature should be:
|
||||||
|
|
||||||
|
```js
|
||||||
|
function (done) {
|
||||||
|
done(new Error())
|
||||||
|
// or
|
||||||
|
done()
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
That is, each function should only take a `done` as an argument.
|
||||||
|
Each callback should only take an optional `Error` as an argument.
|
||||||
|
|
||||||
|
#### context
|
||||||
|
|
||||||
|
Optional context to pass to each `fn`.
|
||||||
|
Basically `fn.call(context, done)`.
|
||||||
|
|
||||||
|
#### callback(err)
|
||||||
|
|
||||||
|
```js
|
||||||
|
function (err) {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Only argument is an `Error` argument.
|
||||||
|
It will return the first error in the series of functions that returns an error,
|
||||||
|
and no function after will be called.
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2013 Jonathan Ong me@jongleberry.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
||||||
11
photo-gallery-app/backend/node_modules/array-series/component.json
generated
vendored
Normal file
11
photo-gallery-app/backend/node_modules/array-series/component.json
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "array-series",
|
||||||
|
"description": "Call an array of asynchronous functions in series",
|
||||||
|
"repo": "component/array-series",
|
||||||
|
"version": "0.1.5",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": [
|
||||||
|
"index.js"
|
||||||
|
],
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
34
photo-gallery-app/backend/node_modules/array-series/index.js
generated
vendored
Normal file
34
photo-gallery-app/backend/node_modules/array-series/index.js
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
module.exports = function series(fns, context, callback) {
|
||||||
|
if (!callback) {
|
||||||
|
if (typeof context === 'function') {
|
||||||
|
callback = context
|
||||||
|
context = null
|
||||||
|
} else {
|
||||||
|
callback = noop
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(fns && fns.length)) return callback();
|
||||||
|
|
||||||
|
fns = fns.slice(0)
|
||||||
|
|
||||||
|
var call = context
|
||||||
|
? function () {
|
||||||
|
fns.length
|
||||||
|
? fns.shift().call(context, next)
|
||||||
|
: callback()
|
||||||
|
}
|
||||||
|
: function () {
|
||||||
|
fns.length
|
||||||
|
? fns.shift()(next)
|
||||||
|
: callback()
|
||||||
|
}
|
||||||
|
|
||||||
|
call()
|
||||||
|
|
||||||
|
function next(err) {
|
||||||
|
err ? callback(err) : call()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function noop() {}
|
||||||
23
photo-gallery-app/backend/node_modules/array-series/package.json
generated
vendored
Normal file
23
photo-gallery-app/backend/node_modules/array-series/package.json
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"name": "array-series",
|
||||||
|
"description": "Call an array of asynchronous functions in series",
|
||||||
|
"version": "0.1.5",
|
||||||
|
"scripts": {
|
||||||
|
"test": "node test"
|
||||||
|
},
|
||||||
|
"author": {
|
||||||
|
"name": "Jonathan Ong",
|
||||||
|
"email": "me@jongleberry.com",
|
||||||
|
"url": "http://jongleberry.com",
|
||||||
|
"twitter": "https://twitter.com/jongleberry"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/component/array-series.git"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/component/array-series/issues",
|
||||||
|
"email": "me@jongleberry.com"
|
||||||
|
},
|
||||||
|
"license": "MIT"
|
||||||
|
}
|
||||||
88
photo-gallery-app/backend/node_modules/array-series/test.js
generated
vendored
Normal file
88
photo-gallery-app/backend/node_modules/array-series/test.js
generated
vendored
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
var assert = require('assert')
|
||||||
|
var series = require('./')
|
||||||
|
|
||||||
|
var a, b, c
|
||||||
|
|
||||||
|
series([
|
||||||
|
function (done) {
|
||||||
|
a = 1
|
||||||
|
process.nextTick(done)
|
||||||
|
check('a')
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
b = 2
|
||||||
|
process.nextTick(done)
|
||||||
|
check('b')
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
c = 3
|
||||||
|
process.nextTick(done)
|
||||||
|
check('c')
|
||||||
|
}
|
||||||
|
], function (err) {
|
||||||
|
assert.ifError(err)
|
||||||
|
assert.equal(a, 1)
|
||||||
|
assert.equal(b, 2)
|
||||||
|
assert.equal(c, 3)
|
||||||
|
})
|
||||||
|
|
||||||
|
function check(x) {
|
||||||
|
switch (x) {
|
||||||
|
case 'a':
|
||||||
|
assert.equal(a, 1)
|
||||||
|
assert.equal(b, undefined)
|
||||||
|
assert.equal(c, undefined)
|
||||||
|
break
|
||||||
|
case 'b':
|
||||||
|
assert.equal(a, 1)
|
||||||
|
assert.equal(b, 2)
|
||||||
|
assert.equal(c, undefined)
|
||||||
|
break
|
||||||
|
case 'c':
|
||||||
|
assert.equal(a, 1)
|
||||||
|
assert.equal(b, 2)
|
||||||
|
assert.equal(c, 3)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var context = 'hello'
|
||||||
|
series([function (done) {
|
||||||
|
assert.equal(this, context)
|
||||||
|
done()
|
||||||
|
}], context)
|
||||||
|
|
||||||
|
var finished
|
||||||
|
series([], function (err) {
|
||||||
|
finished = true
|
||||||
|
})
|
||||||
|
|
||||||
|
process.nextTick(function () {
|
||||||
|
if (!finished)
|
||||||
|
throw new Error('Failed with no functions.');
|
||||||
|
})
|
||||||
|
|
||||||
|
var r, d, o
|
||||||
|
series([
|
||||||
|
function (done) {
|
||||||
|
r = 1
|
||||||
|
process.nextTick(done)
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
d = 0
|
||||||
|
process.nextTick(function () {
|
||||||
|
done(new Error('message'))
|
||||||
|
})
|
||||||
|
},
|
||||||
|
function (done) {
|
||||||
|
o = 0
|
||||||
|
process.nextTick(done)
|
||||||
|
}
|
||||||
|
], function (err) {
|
||||||
|
assert.equal(err.message, 'message')
|
||||||
|
assert.equal(r, 1)
|
||||||
|
assert.equal(d, 0)
|
||||||
|
assert.equal(o, undefined)
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log('Array series tests pass!')
|
||||||
731
photo-gallery-app/backend/node_modules/body-parser/HISTORY.md
generated
vendored
Normal file
731
photo-gallery-app/backend/node_modules/body-parser/HISTORY.md
generated
vendored
Normal file
@ -0,0 +1,731 @@
|
|||||||
|
2.2.0 / 2025-03-27
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* refactor: normalize common options for all parsers
|
||||||
|
* deps:
|
||||||
|
* iconv-lite@^0.6.3
|
||||||
|
|
||||||
|
2.1.0 / 2025-02-10
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* deps:
|
||||||
|
* type-is@^2.0.0
|
||||||
|
* debug@^4.4.0
|
||||||
|
* Removed destroy
|
||||||
|
* refactor: prefix built-in node module imports
|
||||||
|
* use the node require cache instead of custom caching
|
||||||
|
|
||||||
|
2.0.2 / 2024-10-31
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* remove `unpipe` package and use native `unpipe()` method
|
||||||
|
|
||||||
|
2.0.1 / 2024-09-10
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* Restore expected behavior `extended` to `false`
|
||||||
|
|
||||||
|
2.0.0 / 2024-09-10
|
||||||
|
=========================
|
||||||
|
* Propagate changes from 1.20.3
|
||||||
|
* add brotli support #406
|
||||||
|
* Breaking Change: Node.js 18 is the minimum supported version
|
||||||
|
|
||||||
|
2.0.0-beta.2 / 2023-02-23
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This incorporates all changes after 1.19.1 up to 1.20.2.
|
||||||
|
|
||||||
|
* Remove deprecated `bodyParser()` combination middleware
|
||||||
|
* deps: debug@3.1.0
|
||||||
|
- Add `DEBUG_HIDE_DATE` environment variable
|
||||||
|
- Change timer to per-namespace instead of global
|
||||||
|
- Change non-TTY date format
|
||||||
|
- Remove `DEBUG_FD` environment variable support
|
||||||
|
- Support 256 namespace colors
|
||||||
|
* deps: iconv-lite@0.5.2
|
||||||
|
- Add encoding cp720
|
||||||
|
- Add encoding UTF-32
|
||||||
|
* deps: raw-body@3.0.0-beta.1
|
||||||
|
|
||||||
|
2.0.0-beta.1 / 2021-12-17
|
||||||
|
=========================
|
||||||
|
|
||||||
|
* Drop support for Node.js 0.8
|
||||||
|
* `req.body` is no longer always initialized to `{}`
|
||||||
|
- it is left `undefined` unless a body is parsed
|
||||||
|
* `urlencoded` parser now defaults `extended` to `false`
|
||||||
|
* Use `on-finished` to determine when body read
|
||||||
|
|
||||||
|
1.20.3 / 2024-09-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.13.0
|
||||||
|
* add `depth` option to customize the depth level in the parser
|
||||||
|
* IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
|
||||||
|
|
||||||
|
1.20.2 / 2023-02-21
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix strict json error message on Node.js 19+
|
||||||
|
* deps: content-type@~1.0.5
|
||||||
|
- perf: skip value escaping when unnecessary
|
||||||
|
* deps: raw-body@2.5.2
|
||||||
|
|
||||||
|
1.20.1 / 2022-10-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.11.0
|
||||||
|
* perf: remove unnecessary object clone
|
||||||
|
|
||||||
|
1.20.0 / 2022-04-02
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix error message for json parse whitespace in `strict`
|
||||||
|
* Fix internal error when inflated body exceeds limit
|
||||||
|
* Prevent loss of async hooks context
|
||||||
|
* Prevent hanging when request already read
|
||||||
|
* deps: depd@2.0.0
|
||||||
|
- Replace internal `eval` usage with `Function` constructor
|
||||||
|
- Use instance methods on `process` to check for listeners
|
||||||
|
* deps: http-errors@2.0.0
|
||||||
|
- deps: depd@2.0.0
|
||||||
|
- deps: statuses@2.0.1
|
||||||
|
* deps: on-finished@2.4.1
|
||||||
|
* deps: qs@6.10.3
|
||||||
|
* deps: raw-body@2.5.1
|
||||||
|
- deps: http-errors@2.0.0
|
||||||
|
|
||||||
|
1.19.2 / 2022-02-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.2
|
||||||
|
* deps: qs@6.9.7
|
||||||
|
* Fix handling of `__proto__` keys
|
||||||
|
* deps: raw-body@2.4.3
|
||||||
|
- deps: bytes@3.1.2
|
||||||
|
|
||||||
|
1.19.1 / 2021-12-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.1
|
||||||
|
* deps: http-errors@1.8.1
|
||||||
|
- deps: inherits@2.0.4
|
||||||
|
- deps: toidentifier@1.0.1
|
||||||
|
- deps: setprototypeof@1.2.0
|
||||||
|
* deps: qs@6.9.6
|
||||||
|
* deps: raw-body@2.4.2
|
||||||
|
- deps: bytes@3.1.1
|
||||||
|
- deps: http-errors@1.8.1
|
||||||
|
* deps: safe-buffer@5.2.1
|
||||||
|
* deps: type-is@~1.6.18
|
||||||
|
|
||||||
|
1.19.0 / 2019-04-25
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@3.1.0
|
||||||
|
- Add petabyte (`pb`) support
|
||||||
|
* deps: http-errors@1.7.2
|
||||||
|
- Set constructor name when possible
|
||||||
|
- deps: setprototypeof@1.1.1
|
||||||
|
- deps: statuses@'>= 1.5.0 < 2'
|
||||||
|
* deps: iconv-lite@0.4.24
|
||||||
|
- Added encoding MIK
|
||||||
|
* deps: qs@6.7.0
|
||||||
|
- Fix parsing array brackets after index
|
||||||
|
* deps: raw-body@2.4.0
|
||||||
|
- deps: bytes@3.1.0
|
||||||
|
- deps: http-errors@1.7.2
|
||||||
|
- deps: iconv-lite@0.4.24
|
||||||
|
* deps: type-is@~1.6.17
|
||||||
|
- deps: mime-types@~2.1.24
|
||||||
|
- perf: prevent internal `throw` on invalid type
|
||||||
|
|
||||||
|
1.18.3 / 2018-05-14
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix stack trace for strict json parse error
|
||||||
|
* deps: depd@~1.1.2
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
* deps: http-errors@~1.6.3
|
||||||
|
- deps: depd@~1.1.2
|
||||||
|
- deps: setprototypeof@1.1.0
|
||||||
|
- deps: statuses@'>= 1.3.1 < 2'
|
||||||
|
* deps: iconv-lite@0.4.23
|
||||||
|
- Fix loading encoding with year appended
|
||||||
|
- Fix deprecation warnings on Node.js 10+
|
||||||
|
* deps: qs@6.5.2
|
||||||
|
* deps: raw-body@2.3.3
|
||||||
|
- deps: http-errors@1.6.3
|
||||||
|
- deps: iconv-lite@0.4.23
|
||||||
|
* deps: type-is@~1.6.16
|
||||||
|
- deps: mime-types@~2.1.18
|
||||||
|
|
||||||
|
1.18.2 / 2017-09-22
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.9
|
||||||
|
* perf: remove argument reassignment
|
||||||
|
|
||||||
|
1.18.1 / 2017-09-12
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: content-type@~1.0.4
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
- perf: skip parameter parsing when no parameters
|
||||||
|
* deps: iconv-lite@0.4.19
|
||||||
|
- Fix ISO-8859-1 regression
|
||||||
|
- Update Windows-1255
|
||||||
|
* deps: qs@6.5.1
|
||||||
|
- Fix parsing & compacting very deep objects
|
||||||
|
* deps: raw-body@2.3.2
|
||||||
|
- deps: iconv-lite@0.4.19
|
||||||
|
|
||||||
|
1.18.0 / 2017-09-08
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix JSON strict violation error to match native parse error
|
||||||
|
* Include the `body` property on verify errors
|
||||||
|
* Include the `type` property on all generated errors
|
||||||
|
* Use `http-errors` to set status code on errors
|
||||||
|
* deps: bytes@3.0.0
|
||||||
|
* deps: debug@2.6.8
|
||||||
|
* deps: depd@~1.1.1
|
||||||
|
- Remove unnecessary `Buffer` loading
|
||||||
|
* deps: http-errors@~1.6.2
|
||||||
|
- deps: depd@1.1.1
|
||||||
|
* deps: iconv-lite@0.4.18
|
||||||
|
- Add support for React Native
|
||||||
|
- Add a warning if not loaded as utf-8
|
||||||
|
- Fix CESU-8 decoding in Node.js 8
|
||||||
|
- Improve speed of ISO-8859-1 encoding
|
||||||
|
* deps: qs@6.5.0
|
||||||
|
* deps: raw-body@2.3.1
|
||||||
|
- Use `http-errors` for standard emitted errors
|
||||||
|
- deps: bytes@3.0.0
|
||||||
|
- deps: iconv-lite@0.4.18
|
||||||
|
- perf: skip buffer decoding on overage chunk
|
||||||
|
* perf: prevent internal `throw` when missing charset
|
||||||
|
|
||||||
|
1.17.2 / 2017-05-17
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.7
|
||||||
|
- Fix `DEBUG_MAX_ARRAY_LENGTH`
|
||||||
|
- deps: ms@2.0.0
|
||||||
|
* deps: type-is@~1.6.15
|
||||||
|
- deps: mime-types@~2.1.15
|
||||||
|
|
||||||
|
1.17.1 / 2017-03-06
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@6.4.0
|
||||||
|
- Fix regression parsing keys starting with `[`
|
||||||
|
|
||||||
|
1.17.0 / 2017-03-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: http-errors@~1.6.1
|
||||||
|
- Make `message` property enumerable for `HttpError`s
|
||||||
|
- deps: setprototypeof@1.0.3
|
||||||
|
* deps: qs@6.3.1
|
||||||
|
- Fix compacting nested arrays
|
||||||
|
|
||||||
|
1.16.1 / 2017-02-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.1
|
||||||
|
- Fix deprecation messages in WebStorm and other editors
|
||||||
|
- Undeprecate `DEBUG_FD` set to `1` or `2`
|
||||||
|
|
||||||
|
1.16.0 / 2017-01-17
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@2.6.0
|
||||||
|
- Allow colors in workers
|
||||||
|
- Deprecated `DEBUG_FD` environment variable
|
||||||
|
- Fix error when running under React Native
|
||||||
|
- Use same color for same namespace
|
||||||
|
- deps: ms@0.7.2
|
||||||
|
* deps: http-errors@~1.5.1
|
||||||
|
- deps: inherits@2.0.3
|
||||||
|
- deps: setprototypeof@1.0.2
|
||||||
|
- deps: statuses@'>= 1.3.1 < 2'
|
||||||
|
* deps: iconv-lite@0.4.15
|
||||||
|
- Added encoding MS-31J
|
||||||
|
- Added encoding MS-932
|
||||||
|
- Added encoding MS-936
|
||||||
|
- Added encoding MS-949
|
||||||
|
- Added encoding MS-950
|
||||||
|
- Fix GBK/GB18030 handling of Euro character
|
||||||
|
* deps: qs@6.2.1
|
||||||
|
- Fix array parsing from skipping empty values
|
||||||
|
* deps: raw-body@~2.2.0
|
||||||
|
- deps: iconv-lite@0.4.15
|
||||||
|
* deps: type-is@~1.6.14
|
||||||
|
- deps: mime-types@~2.1.13
|
||||||
|
|
||||||
|
1.15.2 / 2016-06-19
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.4.0
|
||||||
|
* deps: content-type@~1.0.2
|
||||||
|
- perf: enable strict mode
|
||||||
|
* deps: http-errors@~1.5.0
|
||||||
|
- Use `setprototypeof` module to replace `__proto__` setting
|
||||||
|
- deps: statuses@'>= 1.3.0 < 2'
|
||||||
|
- perf: enable strict mode
|
||||||
|
* deps: qs@6.2.0
|
||||||
|
* deps: raw-body@~2.1.7
|
||||||
|
- deps: bytes@2.4.0
|
||||||
|
- perf: remove double-cleanup on happy path
|
||||||
|
* deps: type-is@~1.6.13
|
||||||
|
- deps: mime-types@~2.1.11
|
||||||
|
|
||||||
|
1.15.1 / 2016-05-05
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.3.0
|
||||||
|
- Drop partial bytes on all parsed units
|
||||||
|
- Fix parsing byte string that looks like hex
|
||||||
|
* deps: raw-body@~2.1.6
|
||||||
|
- deps: bytes@2.3.0
|
||||||
|
* deps: type-is@~1.6.12
|
||||||
|
- deps: mime-types@~2.1.10
|
||||||
|
|
||||||
|
1.15.0 / 2016-02-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: http-errors@~1.4.0
|
||||||
|
- Add `HttpError` export, for `err instanceof createError.HttpError`
|
||||||
|
- deps: inherits@2.0.1
|
||||||
|
- deps: statuses@'>= 1.2.1 < 2'
|
||||||
|
* deps: qs@6.1.0
|
||||||
|
* deps: type-is@~1.6.11
|
||||||
|
- deps: mime-types@~2.1.9
|
||||||
|
|
||||||
|
1.14.2 / 2015-12-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: bytes@2.2.0
|
||||||
|
* deps: iconv-lite@0.4.13
|
||||||
|
* deps: qs@5.2.0
|
||||||
|
* deps: raw-body@~2.1.5
|
||||||
|
- deps: bytes@2.2.0
|
||||||
|
- deps: iconv-lite@0.4.13
|
||||||
|
* deps: type-is@~1.6.10
|
||||||
|
- deps: mime-types@~2.1.8
|
||||||
|
|
||||||
|
1.14.1 / 2015-09-27
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix issue where invalid charset results in 400 when `verify` used
|
||||||
|
* deps: iconv-lite@0.4.12
|
||||||
|
- Fix CESU-8 decoding in Node.js 4.x
|
||||||
|
* deps: raw-body@~2.1.4
|
||||||
|
- Fix masking critical errors from `iconv-lite`
|
||||||
|
- deps: iconv-lite@0.4.12
|
||||||
|
* deps: type-is@~1.6.9
|
||||||
|
- deps: mime-types@~2.1.7
|
||||||
|
|
||||||
|
1.14.0 / 2015-09-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Fix JSON strict parse error to match syntax errors
|
||||||
|
* Provide static `require` analysis in `urlencoded` parser
|
||||||
|
* deps: depd@~1.1.0
|
||||||
|
- Support web browser loading
|
||||||
|
* deps: qs@5.1.0
|
||||||
|
* deps: raw-body@~2.1.3
|
||||||
|
- Fix sync callback when attaching data listener causes sync read
|
||||||
|
* deps: type-is@~1.6.8
|
||||||
|
- Fix type error when given invalid type to match against
|
||||||
|
- deps: mime-types@~2.1.6
|
||||||
|
|
||||||
|
1.13.3 / 2015-07-31
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: type-is@~1.6.6
|
||||||
|
- deps: mime-types@~2.1.4
|
||||||
|
|
||||||
|
1.13.2 / 2015-07-05
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.11
|
||||||
|
* deps: qs@4.0.0
|
||||||
|
- Fix dropping parameters like `hasOwnProperty`
|
||||||
|
- Fix user-visible incompatibilities from 3.1.0
|
||||||
|
- Fix various parsing edge cases
|
||||||
|
* deps: raw-body@~2.1.2
|
||||||
|
- Fix error stack traces to skip `makeError`
|
||||||
|
- deps: iconv-lite@0.4.11
|
||||||
|
* deps: type-is@~1.6.4
|
||||||
|
- deps: mime-types@~2.1.2
|
||||||
|
- perf: enable strict mode
|
||||||
|
- perf: remove argument reassignment
|
||||||
|
|
||||||
|
1.13.1 / 2015-06-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@2.4.2
|
||||||
|
- Downgraded from 3.1.0 because of user-visible incompatibilities
|
||||||
|
|
||||||
|
1.13.0 / 2015-06-14
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Add `statusCode` property on `Error`s, in addition to `status`
|
||||||
|
* Change `type` default to `application/json` for JSON parser
|
||||||
|
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
|
||||||
|
* Provide static `require` analysis
|
||||||
|
* Use the `http-errors` module to generate errors
|
||||||
|
* deps: bytes@2.1.0
|
||||||
|
- Slight optimizations
|
||||||
|
* deps: iconv-lite@0.4.10
|
||||||
|
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
|
||||||
|
- Leading BOM is now removed when decoding
|
||||||
|
* deps: on-finished@~2.3.0
|
||||||
|
- Add defined behavior for HTTP `CONNECT` requests
|
||||||
|
- Add defined behavior for HTTP `Upgrade` requests
|
||||||
|
- deps: ee-first@1.1.1
|
||||||
|
* deps: qs@3.1.0
|
||||||
|
- Fix dropping parameters like `hasOwnProperty`
|
||||||
|
- Fix various parsing edge cases
|
||||||
|
- Parsed object now has `null` prototype
|
||||||
|
* deps: raw-body@~2.1.1
|
||||||
|
- Use `unpipe` module for unpiping requests
|
||||||
|
- deps: iconv-lite@0.4.10
|
||||||
|
* deps: type-is@~1.6.3
|
||||||
|
- deps: mime-types@~2.1.1
|
||||||
|
- perf: reduce try block size
|
||||||
|
- perf: remove bitwise operations
|
||||||
|
* perf: enable strict mode
|
||||||
|
* perf: remove argument reassignment
|
||||||
|
* perf: remove delete call
|
||||||
|
|
||||||
|
1.12.4 / 2015-05-10
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.2.0
|
||||||
|
* deps: qs@2.4.2
|
||||||
|
- Fix allowing parameters like `constructor`
|
||||||
|
* deps: on-finished@~2.2.1
|
||||||
|
* deps: raw-body@~2.0.1
|
||||||
|
- Fix a false-positive when unpiping in Node.js 0.8
|
||||||
|
- deps: bytes@2.0.1
|
||||||
|
* deps: type-is@~1.6.2
|
||||||
|
- deps: mime-types@~2.0.11
|
||||||
|
|
||||||
|
1.12.3 / 2015-04-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* Slight efficiency improvement when not debugging
|
||||||
|
* deps: depd@~1.0.1
|
||||||
|
* deps: iconv-lite@0.4.8
|
||||||
|
- Add encoding alias UNICODE-1-1-UTF-7
|
||||||
|
* deps: raw-body@1.3.4
|
||||||
|
- Fix hanging callback if request aborts during read
|
||||||
|
- deps: iconv-lite@0.4.8
|
||||||
|
|
||||||
|
1.12.2 / 2015-03-16
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: qs@2.4.1
|
||||||
|
- Fix error when parameter `hasOwnProperty` is present
|
||||||
|
|
||||||
|
1.12.1 / 2015-03-15
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: debug@~2.1.3
|
||||||
|
- Fix high intensity foreground color for bold
|
||||||
|
- deps: ms@0.7.0
|
||||||
|
* deps: type-is@~1.6.1
|
||||||
|
- deps: mime-types@~2.0.10
|
||||||
|
|
||||||
|
1.12.0 / 2015-02-13
|
||||||
|
===================
|
||||||
|
|
||||||
|
* add `debug` messages
|
||||||
|
* accept a function for the `type` option
|
||||||
|
* use `content-type` to parse `Content-Type` headers
|
||||||
|
* deps: iconv-lite@0.4.7
|
||||||
|
- Gracefully support enumerables on `Object.prototype`
|
||||||
|
* deps: raw-body@1.3.3
|
||||||
|
- deps: iconv-lite@0.4.7
|
||||||
|
* deps: type-is@~1.6.0
|
||||||
|
- fix argument reassignment
|
||||||
|
- fix false-positives in `hasBody` `Transfer-Encoding` check
|
||||||
|
- support wildcard for both type and subtype (`*/*`)
|
||||||
|
- deps: mime-types@~2.0.9
|
||||||
|
|
||||||
|
1.11.0 / 2015-01-30
|
||||||
|
===================
|
||||||
|
|
||||||
|
* make internal `extended: true` depth limit infinity
|
||||||
|
* deps: type-is@~1.5.6
|
||||||
|
- deps: mime-types@~2.0.8
|
||||||
|
|
||||||
|
1.10.2 / 2015-01-20
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.6
|
||||||
|
- Fix rare aliases of single-byte encodings
|
||||||
|
* deps: raw-body@1.3.2
|
||||||
|
- deps: iconv-lite@0.4.6
|
||||||
|
|
||||||
|
1.10.1 / 2015-01-01
|
||||||
|
===================
|
||||||
|
|
||||||
|
* deps: on-finished@~2.2.0
|
||||||
|
* deps: type-is@~1.5.5
|
||||||
|
- deps: mime-types@~2.0.7
|
||||||
|
|
||||||
|
1.10.0 / 2014-12-02
|
||||||
|
===================
|
||||||
|
|
||||||
|
* make internal `extended: true` array limit dynamic
|
||||||
|
|
||||||
|
1.9.3 / 2014-11-21
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: iconv-lite@0.4.5
|
||||||
|
- Fix Windows-31J and X-SJIS encoding support
|
||||||
|
* deps: qs@2.3.3
|
||||||
|
- Fix `arrayLimit` behavior
|
||||||
|
* deps: raw-body@1.3.1
|
||||||
|
- deps: iconv-lite@0.4.5
|
||||||
|
* deps: type-is@~1.5.3
|
||||||
|
- deps: mime-types@~2.0.3
|
||||||
|
|
||||||
|
1.9.2 / 2014-10-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.3.2
|
||||||
|
- Fix parsing of mixed objects and values
|
||||||
|
|
||||||
|
1.9.1 / 2014-10-22
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: on-finished@~2.1.1
|
||||||
|
- Fix handling of pipelined requests
|
||||||
|
* deps: qs@2.3.0
|
||||||
|
- Fix parsing of mixed implicit and explicit arrays
|
||||||
|
* deps: type-is@~1.5.2
|
||||||
|
- deps: mime-types@~2.0.2
|
||||||
|
|
||||||
|
1.9.0 / 2014-09-24
|
||||||
|
==================
|
||||||
|
|
||||||
|
* include the charset in "unsupported charset" error message
|
||||||
|
* include the encoding in "unsupported content encoding" error message
|
||||||
|
* deps: depd@~1.0.0
|
||||||
|
|
||||||
|
1.8.4 / 2014-09-23
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix content encoding to be case-insensitive
|
||||||
|
|
||||||
|
1.8.3 / 2014-09-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.4
|
||||||
|
- Fix issue with object keys starting with numbers truncated
|
||||||
|
|
||||||
|
1.8.2 / 2014-09-15
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.5
|
||||||
|
|
||||||
|
1.8.1 / 2014-09-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: media-typer@0.3.0
|
||||||
|
* deps: type-is@~1.5.1
|
||||||
|
|
||||||
|
1.8.0 / 2014-09-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* make empty-body-handling consistent between chunked requests
|
||||||
|
- empty `json` produces `{}`
|
||||||
|
- empty `raw` produces `new Buffer(0)`
|
||||||
|
- empty `text` produces `''`
|
||||||
|
- empty `urlencoded` produces `{}`
|
||||||
|
* deps: qs@2.2.3
|
||||||
|
- Fix issue where first empty value in array is discarded
|
||||||
|
* deps: type-is@~1.5.0
|
||||||
|
- fix `hasbody` to be true for `content-length: 0`
|
||||||
|
|
||||||
|
1.7.0 / 2014-09-01
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `parameterLimit` option to `urlencoded` parser
|
||||||
|
* change `urlencoded` extended array limit to 100
|
||||||
|
* respond with 413 when over `parameterLimit` in `urlencoded`
|
||||||
|
|
||||||
|
1.6.7 / 2014-08-29
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.2
|
||||||
|
- Remove unnecessary cloning
|
||||||
|
|
||||||
|
1.6.6 / 2014-08-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@2.2.0
|
||||||
|
- Array parsing fix
|
||||||
|
- Performance improvements
|
||||||
|
|
||||||
|
1.6.5 / 2014-08-16
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: on-finished@2.1.0
|
||||||
|
|
||||||
|
1.6.4 / 2014-08-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.2
|
||||||
|
|
||||||
|
1.6.3 / 2014-08-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.1
|
||||||
|
|
||||||
|
1.6.2 / 2014-08-07
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.2.0
|
||||||
|
- Fix parsing array of objects
|
||||||
|
|
||||||
|
1.6.1 / 2014-08-06
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.1.0
|
||||||
|
- Accept urlencoded square brackets
|
||||||
|
- Accept empty values in implicit array notation
|
||||||
|
|
||||||
|
1.6.0 / 2014-08-05
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: qs@1.0.2
|
||||||
|
- Complete rewrite
|
||||||
|
- Limits array length to 20
|
||||||
|
- Limits object depth to 5
|
||||||
|
- Limits parameters to 1,000
|
||||||
|
|
||||||
|
1.5.2 / 2014-07-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.4
|
||||||
|
- Work-around v8 generating empty stack traces
|
||||||
|
|
||||||
|
1.5.1 / 2014-07-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.3
|
||||||
|
- Fix exception when global `Error.stackTraceLimit` is too low
|
||||||
|
|
||||||
|
1.5.0 / 2014-07-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: depd@0.4.2
|
||||||
|
- Add `TRACE_DEPRECATION` environment variable
|
||||||
|
- Remove non-standard grey color from color output
|
||||||
|
- Support `--no-deprecation` argument
|
||||||
|
- Support `--trace-deprecation` argument
|
||||||
|
* deps: iconv-lite@0.4.4
|
||||||
|
- Added encoding UTF-7
|
||||||
|
* deps: raw-body@1.3.0
|
||||||
|
- deps: iconv-lite@0.4.4
|
||||||
|
- Added encoding UTF-7
|
||||||
|
- Fix `Cannot switch to old mode now` error on Node.js 0.10+
|
||||||
|
* deps: type-is@~1.3.2
|
||||||
|
|
||||||
|
1.4.3 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.3.1
|
||||||
|
- fix global variable leak
|
||||||
|
|
||||||
|
1.4.2 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.3.0
|
||||||
|
- improve type parsing
|
||||||
|
|
||||||
|
1.4.1 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix urlencoded extended deprecation message
|
||||||
|
|
||||||
|
1.4.0 / 2014-06-19
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `text` parser
|
||||||
|
* add `raw` parser
|
||||||
|
* check accepted charset in content-type (accepts utf-8)
|
||||||
|
* check accepted encoding in content-encoding (accepts identity)
|
||||||
|
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
|
||||||
|
* deprecate `urlencoded()` without provided `extended` option
|
||||||
|
* lazy-load urlencoded parsers
|
||||||
|
* parsers split into files for reduced mem usage
|
||||||
|
* support gzip and deflate bodies
|
||||||
|
- set `inflate: false` to turn off
|
||||||
|
* deps: raw-body@1.2.2
|
||||||
|
- Support all encodings from `iconv-lite`
|
||||||
|
|
||||||
|
1.3.1 / 2014-06-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: type-is@1.2.1
|
||||||
|
- Switch dependency from mime to mime-types@1.0.0
|
||||||
|
|
||||||
|
1.3.0 / 2014-05-31
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `extended` option to urlencoded parser
|
||||||
|
|
||||||
|
1.2.2 / 2014-05-27
|
||||||
|
==================
|
||||||
|
|
||||||
|
* deps: raw-body@1.1.6
|
||||||
|
- assert stream encoding on node.js 0.8
|
||||||
|
- assert stream encoding on node.js < 0.10.6
|
||||||
|
- deps: bytes@1
|
||||||
|
|
||||||
|
1.2.1 / 2014-05-26
|
||||||
|
==================
|
||||||
|
|
||||||
|
* invoke `next(err)` after request fully read
|
||||||
|
- prevents hung responses and socket hang ups
|
||||||
|
|
||||||
|
1.2.0 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `verify` option
|
||||||
|
* deps: type-is@1.2.0
|
||||||
|
- support suffix matching
|
||||||
|
|
||||||
|
1.1.2 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* improve json parser speed
|
||||||
|
|
||||||
|
1.1.1 / 2014-05-11
|
||||||
|
==================
|
||||||
|
|
||||||
|
* fix repeated limit parsing with every request
|
||||||
|
|
||||||
|
1.1.0 / 2014-05-10
|
||||||
|
==================
|
||||||
|
|
||||||
|
* add `type` option
|
||||||
|
* deps: pin for safety and consistency
|
||||||
|
|
||||||
|
1.0.2 / 2014-04-14
|
||||||
|
==================
|
||||||
|
|
||||||
|
* use `type-is` module
|
||||||
|
|
||||||
|
1.0.1 / 2014-03-20
|
||||||
|
==================
|
||||||
|
|
||||||
|
* lower default limits to 100kb
|
||||||
23
photo-gallery-app/backend/node_modules/body-parser/LICENSE
generated
vendored
Normal file
23
photo-gallery-app/backend/node_modules/body-parser/LICENSE
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
(The MIT License)
|
||||||
|
|
||||||
|
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
||||||
|
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
|
a copy of this software and associated documentation files (the
|
||||||
|
'Software'), to deal in the Software without restriction, including
|
||||||
|
without limitation the rights to use, copy, modify, merge, publish,
|
||||||
|
distribute, sublicense, and/or sell copies of the Software, and to
|
||||||
|
permit persons to whom the Software is furnished to do so, subject to
|
||||||
|
the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||||
|
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||||
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||||
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||||
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
491
photo-gallery-app/backend/node_modules/body-parser/README.md
generated
vendored
Normal file
491
photo-gallery-app/backend/node_modules/body-parser/README.md
generated
vendored
Normal file
@ -0,0 +1,491 @@
|
|||||||
|
# body-parser
|
||||||
|
|
||||||
|
[![NPM Version][npm-version-image]][npm-url]
|
||||||
|
[![NPM Downloads][npm-downloads-image]][npm-url]
|
||||||
|
[![Build Status][ci-image]][ci-url]
|
||||||
|
[![Test Coverage][coveralls-image]][coveralls-url]
|
||||||
|
[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
|
||||||
|
|
||||||
|
Node.js body parsing middleware.
|
||||||
|
|
||||||
|
Parse incoming request bodies in a middleware before your handlers, available
|
||||||
|
under the `req.body` property.
|
||||||
|
|
||||||
|
**Note** As `req.body`'s shape is based on user-controlled input, all
|
||||||
|
properties and values in this object are untrusted and should be validated
|
||||||
|
before trusting. For example, `req.body.foo.toString()` may fail in multiple
|
||||||
|
ways, for example the `foo` property may not be there or may not be a string,
|
||||||
|
and `toString` may not be a function and instead a string or other user input.
|
||||||
|
|
||||||
|
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
|
||||||
|
|
||||||
|
_This does not handle multipart bodies_, due to their complex and typically
|
||||||
|
large nature. For multipart bodies, you may be interested in the following
|
||||||
|
modules:
|
||||||
|
|
||||||
|
* [busboy](https://www.npmjs.org/package/busboy#readme) and
|
||||||
|
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
|
||||||
|
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and
|
||||||
|
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
|
||||||
|
* [formidable](https://www.npmjs.org/package/formidable#readme)
|
||||||
|
* [multer](https://www.npmjs.org/package/multer#readme)
|
||||||
|
|
||||||
|
This module provides the following parsers:
|
||||||
|
|
||||||
|
* [JSON body parser](#bodyparserjsonoptions)
|
||||||
|
* [Raw body parser](#bodyparserrawoptions)
|
||||||
|
* [Text body parser](#bodyparsertextoptions)
|
||||||
|
* [URL-encoded form body parser](#bodyparserurlencodedoptions)
|
||||||
|
|
||||||
|
Other body parsers you might be interested in:
|
||||||
|
|
||||||
|
- [body](https://www.npmjs.org/package/body#readme)
|
||||||
|
- [co-body](https://www.npmjs.org/package/co-body#readme)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```sh
|
||||||
|
$ npm install body-parser
|
||||||
|
```
|
||||||
|
|
||||||
|
## API
|
||||||
|
|
||||||
|
```js
|
||||||
|
const bodyParser = require('body-parser')
|
||||||
|
```
|
||||||
|
|
||||||
|
The `bodyParser` object exposes various factories to create middlewares. All
|
||||||
|
middlewares will populate the `req.body` property with the parsed body when
|
||||||
|
the `Content-Type` request header matches the `type` option.
|
||||||
|
|
||||||
|
The various errors returned by this module are described in the
|
||||||
|
[errors section](#errors).
|
||||||
|
|
||||||
|
### bodyParser.json([options])
|
||||||
|
|
||||||
|
Returns middleware that only parses `json` and only looks at requests where
|
||||||
|
the `Content-Type` header matches the `type` option. This parser accepts any
|
||||||
|
Unicode encoding of the body and supports automatic inflation of `gzip`,
|
||||||
|
`br` (brotli) and `deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`).
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `json` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### reviver
|
||||||
|
|
||||||
|
The `reviver` option is passed directly to `JSON.parse` as the second
|
||||||
|
argument. You can find more information on this argument
|
||||||
|
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
|
||||||
|
|
||||||
|
##### strict
|
||||||
|
|
||||||
|
When set to `true`, will only accept arrays and objects; when `false` will
|
||||||
|
accept anything `JSON.parse` accepts. Defaults to `true`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not a
|
||||||
|
function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `json`), a mime type (like `application/json`), or
|
||||||
|
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
|
||||||
|
option is called as `fn(req)` and the request is parsed if it returns a truthy
|
||||||
|
value. Defaults to `application/json`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.raw([options])
|
||||||
|
|
||||||
|
Returns middleware that parses all bodies as a `Buffer` and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser supports automatic inflation of `gzip`, `br` (brotli) and `deflate`
|
||||||
|
encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This will be a `Buffer` object
|
||||||
|
of the body.
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `raw` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function.
|
||||||
|
If not a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this
|
||||||
|
can be an extension name (like `bin`), a mime type (like
|
||||||
|
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
|
||||||
|
`application/*`). If a function, the `type` option is called as `fn(req)`
|
||||||
|
and the request is parsed if it returns a truthy value. Defaults to
|
||||||
|
`application/octet-stream`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.text([options])
|
||||||
|
|
||||||
|
Returns middleware that parses all bodies as a string and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser supports automatic inflation of `gzip`, `br` (brotli) and `deflate`
|
||||||
|
encodings.
|
||||||
|
|
||||||
|
A new `body` string containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This will be a string of the
|
||||||
|
body.
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `text` function takes an optional `options` object that may contain any of
|
||||||
|
the following keys:
|
||||||
|
|
||||||
|
##### defaultCharset
|
||||||
|
|
||||||
|
Specify the default character set for the text content if the charset is not
|
||||||
|
specified in the `Content-Type` header of the request. Defaults to `utf-8`.
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not
|
||||||
|
a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
|
||||||
|
type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
|
||||||
|
option is called as `fn(req)` and the request is parsed if it returns a
|
||||||
|
truthy value. Defaults to `text/plain`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
### bodyParser.urlencoded([options])
|
||||||
|
|
||||||
|
Returns middleware that only parses `urlencoded` bodies and only looks at
|
||||||
|
requests where the `Content-Type` header matches the `type` option. This
|
||||||
|
parser accepts only UTF-8 encoding of the body and supports automatic
|
||||||
|
inflation of `gzip`, `br` (brotli) and `deflate` encodings.
|
||||||
|
|
||||||
|
A new `body` object containing the parsed data is populated on the `request`
|
||||||
|
object after the middleware (i.e. `req.body`). This object will contain
|
||||||
|
key-value pairs, where the value can be a string or array (when `extended` is
|
||||||
|
`false`), or any type (when `extended` is `true`).
|
||||||
|
|
||||||
|
#### Options
|
||||||
|
|
||||||
|
The `urlencoded` function takes an optional `options` object that may contain
|
||||||
|
any of the following keys:
|
||||||
|
|
||||||
|
##### extended
|
||||||
|
|
||||||
|
The "extended" syntax allows for rich objects and arrays to be encoded into the
|
||||||
|
URL-encoded format, allowing for a JSON-like experience with URL-encoded. For
|
||||||
|
more information, please [see the qs
|
||||||
|
library](https://www.npmjs.org/package/qs#readme).
|
||||||
|
|
||||||
|
Defaults to `false`.
|
||||||
|
|
||||||
|
##### inflate
|
||||||
|
|
||||||
|
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
||||||
|
`false`, deflated bodies are rejected. Defaults to `true`.
|
||||||
|
|
||||||
|
##### limit
|
||||||
|
|
||||||
|
Controls the maximum request body size. If this is a number, then the value
|
||||||
|
specifies the number of bytes; if it is a string, the value is passed to the
|
||||||
|
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
||||||
|
to `'100kb'`.
|
||||||
|
|
||||||
|
##### parameterLimit
|
||||||
|
|
||||||
|
The `parameterLimit` option controls the maximum number of parameters that
|
||||||
|
are allowed in the URL-encoded data. If a request contains more parameters
|
||||||
|
than this value, a 413 will be returned to the client. Defaults to `1000`.
|
||||||
|
|
||||||
|
##### type
|
||||||
|
|
||||||
|
The `type` option is used to determine what media type the middleware will
|
||||||
|
parse. This option can be a string, array of strings, or a function. If not
|
||||||
|
a function, `type` option is passed directly to the
|
||||||
|
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
||||||
|
be an extension name (like `urlencoded`), a mime type (like
|
||||||
|
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
|
||||||
|
`*/x-www-form-urlencoded`). If a function, the `type` option is called as
|
||||||
|
`fn(req)` and the request is parsed if it returns a truthy value. Defaults
|
||||||
|
to `application/x-www-form-urlencoded`.
|
||||||
|
|
||||||
|
##### verify
|
||||||
|
|
||||||
|
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
||||||
|
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
||||||
|
encoding of the request. The parsing can be aborted by throwing an error.
|
||||||
|
|
||||||
|
##### defaultCharset
|
||||||
|
|
||||||
|
The default charset to parse as, if not specified in content-type. Must be
|
||||||
|
either `utf-8` or `iso-8859-1`. Defaults to `utf-8`.
|
||||||
|
|
||||||
|
##### charsetSentinel
|
||||||
|
|
||||||
|
Whether to let the value of the `utf8` parameter take precedence as the charset
|
||||||
|
selector. It requires the form to contain a parameter named `utf8` with a value
|
||||||
|
of `✓`. Defaults to `false`.
|
||||||
|
|
||||||
|
##### interpretNumericEntities
|
||||||
|
|
||||||
|
Whether to decode numeric entities such as `☺` when parsing an iso-8859-1
|
||||||
|
form. Defaults to `false`.
|
||||||
|
|
||||||
|
|
||||||
|
#### depth
|
||||||
|
|
||||||
|
The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
The middlewares provided by this module create errors using the
|
||||||
|
[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
|
||||||
|
will typically have a `status`/`statusCode` property that contains the suggested
|
||||||
|
HTTP response code, an `expose` property to determine if the `message` property
|
||||||
|
should be displayed to the client, a `type` property to determine the type of
|
||||||
|
error without matching against the `message`, and a `body` property containing
|
||||||
|
the read body, if available.
|
||||||
|
|
||||||
|
The following are the common errors created, though any error can come through
|
||||||
|
for various reasons.
|
||||||
|
|
||||||
|
### content encoding unsupported
|
||||||
|
|
||||||
|
This error will occur when the request had a `Content-Encoding` header that
|
||||||
|
contained an encoding but the "inflation" option was set to `false`. The
|
||||||
|
`status` property is set to `415`, the `type` property is set to
|
||||||
|
`'encoding.unsupported'`, and the `charset` property will be set to the
|
||||||
|
encoding that is unsupported.
|
||||||
|
|
||||||
|
### entity parse failed
|
||||||
|
|
||||||
|
This error will occur when the request contained an entity that could not be
|
||||||
|
parsed by the middleware. The `status` property is set to `400`, the `type`
|
||||||
|
property is set to `'entity.parse.failed'`, and the `body` property is set to
|
||||||
|
the entity value that failed parsing.
|
||||||
|
|
||||||
|
### entity verify failed
|
||||||
|
|
||||||
|
This error will occur when the request contained an entity that could not be
|
||||||
|
failed verification by the defined `verify` option. The `status` property is
|
||||||
|
set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
|
||||||
|
`body` property is set to the entity value that failed verification.
|
||||||
|
|
||||||
|
### request aborted
|
||||||
|
|
||||||
|
This error will occur when the request is aborted by the client before reading
|
||||||
|
the body has finished. The `received` property will be set to the number of
|
||||||
|
bytes received before the request was aborted and the `expected` property is
|
||||||
|
set to the number of expected bytes. The `status` property is set to `400`
|
||||||
|
and `type` property is set to `'request.aborted'`.
|
||||||
|
|
||||||
|
### request entity too large
|
||||||
|
|
||||||
|
This error will occur when the request body's size is larger than the "limit"
|
||||||
|
option. The `limit` property will be set to the byte limit and the `length`
|
||||||
|
property will be set to the request body's length. The `status` property is
|
||||||
|
set to `413` and the `type` property is set to `'entity.too.large'`.
|
||||||
|
|
||||||
|
### request size did not match content length
|
||||||
|
|
||||||
|
This error will occur when the request's length did not match the length from
|
||||||
|
the `Content-Length` header. This typically occurs when the request is malformed,
|
||||||
|
typically when the `Content-Length` header was calculated based on characters
|
||||||
|
instead of bytes. The `status` property is set to `400` and the `type` property
|
||||||
|
is set to `'request.size.invalid'`.
|
||||||
|
|
||||||
|
### stream encoding should not be set
|
||||||
|
|
||||||
|
This error will occur when something called the `req.setEncoding` method prior
|
||||||
|
to this middleware. This module operates directly on bytes only and you cannot
|
||||||
|
call `req.setEncoding` when using this module. The `status` property is set to
|
||||||
|
`500` and the `type` property is set to `'stream.encoding.set'`.
|
||||||
|
|
||||||
|
### stream is not readable
|
||||||
|
|
||||||
|
This error will occur when the request is no longer readable when this middleware
|
||||||
|
attempts to read it. This typically means something other than a middleware from
|
||||||
|
this module read the request body already and the middleware was also configured to
|
||||||
|
read the same request. The `status` property is set to `500` and the `type`
|
||||||
|
property is set to `'stream.not.readable'`.
|
||||||
|
|
||||||
|
### too many parameters
|
||||||
|
|
||||||
|
This error will occur when the content of the request exceeds the configured
|
||||||
|
`parameterLimit` for the `urlencoded` parser. The `status` property is set to
|
||||||
|
`413` and the `type` property is set to `'parameters.too.many'`.
|
||||||
|
|
||||||
|
### unsupported charset "BOGUS"
|
||||||
|
|
||||||
|
This error will occur when the request had a charset parameter in the
|
||||||
|
`Content-Type` header, but the `iconv-lite` module does not support it OR the
|
||||||
|
parser does not support it. The charset is contained in the message as well
|
||||||
|
as in the `charset` property. The `status` property is set to `415`, the
|
||||||
|
`type` property is set to `'charset.unsupported'`, and the `charset` property
|
||||||
|
is set to the charset that is unsupported.
|
||||||
|
|
||||||
|
### unsupported content encoding "bogus"
|
||||||
|
|
||||||
|
This error will occur when the request had a `Content-Encoding` header that
|
||||||
|
contained an unsupported encoding. The encoding is contained in the message
|
||||||
|
as well as in the `encoding` property. The `status` property is set to `415`,
|
||||||
|
the `type` property is set to `'encoding.unsupported'`, and the `encoding`
|
||||||
|
property is set to the encoding that is unsupported.
|
||||||
|
|
||||||
|
### The input exceeded the depth
|
||||||
|
|
||||||
|
This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
### Express/Connect top-level generic
|
||||||
|
|
||||||
|
This example demonstrates adding a generic JSON and URL-encoded parser as a
|
||||||
|
top-level middleware, which will parse the bodies of all incoming requests.
|
||||||
|
This is the simplest setup.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const express = require('express')
|
||||||
|
const bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
const app = express()
|
||||||
|
|
||||||
|
// parse application/x-www-form-urlencoded
|
||||||
|
app.use(bodyParser.urlencoded())
|
||||||
|
|
||||||
|
// parse application/json
|
||||||
|
app.use(bodyParser.json())
|
||||||
|
|
||||||
|
app.use(function (req, res) {
|
||||||
|
res.setHeader('Content-Type', 'text/plain')
|
||||||
|
res.write('you posted:\n')
|
||||||
|
res.end(String(JSON.stringify(req.body, null, 2)))
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Express route-specific
|
||||||
|
|
||||||
|
This example demonstrates adding body parsers specifically to the routes that
|
||||||
|
need them. In general, this is the most recommended way to use body-parser with
|
||||||
|
Express.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const express = require('express')
|
||||||
|
const bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
const app = express()
|
||||||
|
|
||||||
|
// create application/json parser
|
||||||
|
const jsonParser = bodyParser.json()
|
||||||
|
|
||||||
|
// create application/x-www-form-urlencoded parser
|
||||||
|
const urlencodedParser = bodyParser.urlencoded()
|
||||||
|
|
||||||
|
// POST /login gets urlencoded bodies
|
||||||
|
app.post('/login', urlencodedParser, function (req, res) {
|
||||||
|
if (!req.body || !req.body.username) res.sendStatus(400)
|
||||||
|
res.send('welcome, ' + req.body.username)
|
||||||
|
})
|
||||||
|
|
||||||
|
// POST /api/users gets JSON bodies
|
||||||
|
app.post('/api/users', jsonParser, function (req, res) {
|
||||||
|
if (!req.body) res.sendStatus(400)
|
||||||
|
// create user in req.body
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
|
### Change accepted type for parsers
|
||||||
|
|
||||||
|
All the parsers accept a `type` option which allows you to change the
|
||||||
|
`Content-Type` that the middleware will parse.
|
||||||
|
|
||||||
|
```js
|
||||||
|
const express = require('express')
|
||||||
|
const bodyParser = require('body-parser')
|
||||||
|
|
||||||
|
const app = express()
|
||||||
|
|
||||||
|
// parse various different custom JSON types as JSON
|
||||||
|
app.use(bodyParser.json({ type: 'application/*+json' }))
|
||||||
|
|
||||||
|
// parse some custom thing into a Buffer
|
||||||
|
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
|
||||||
|
|
||||||
|
// parse an HTML body into a string
|
||||||
|
app.use(bodyParser.text({ type: 'text/html' }))
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
[MIT](LICENSE)
|
||||||
|
|
||||||
|
[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
|
||||||
|
[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
|
||||||
|
[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
|
||||||
|
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
|
||||||
|
[node-version-image]: https://badgen.net/npm/node/body-parser
|
||||||
|
[node-version-url]: https://nodejs.org/en/download
|
||||||
|
[npm-downloads-image]: https://badgen.net/npm/dm/body-parser
|
||||||
|
[npm-url]: https://npmjs.org/package/body-parser
|
||||||
|
[npm-version-image]: https://badgen.net/npm/v/body-parser
|
||||||
|
[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
|
||||||
|
[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
|
||||||
80
photo-gallery-app/backend/node_modules/body-parser/index.js
generated
vendored
Normal file
80
photo-gallery-app/backend/node_modules/body-parser/index.js
generated
vendored
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef Parsers
|
||||||
|
* @type {function}
|
||||||
|
* @property {function} json
|
||||||
|
* @property {function} raw
|
||||||
|
* @property {function} text
|
||||||
|
* @property {function} urlencoded
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
* @type {Parsers}
|
||||||
|
*/
|
||||||
|
|
||||||
|
exports = module.exports = bodyParser
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'json', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: () => require('./lib/types/json')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Raw parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'raw', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: () => require('./lib/types/raw')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Text parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'text', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: () => require('./lib/types/text')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* URL-encoded parser.
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
Object.defineProperty(exports, 'urlencoded', {
|
||||||
|
configurable: true,
|
||||||
|
enumerable: true,
|
||||||
|
get: () => require('./lib/types/urlencoded')
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a middleware to parse json and urlencoded bodies.
|
||||||
|
*
|
||||||
|
* @param {object} [options]
|
||||||
|
* @return {function}
|
||||||
|
* @deprecated
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
|
||||||
|
function bodyParser () {
|
||||||
|
throw new Error('The bodyParser() generic has been split into individual middleware to use instead.')
|
||||||
|
}
|
||||||
210
photo-gallery-app/backend/node_modules/body-parser/lib/read.js
generated
vendored
Normal file
210
photo-gallery-app/backend/node_modules/body-parser/lib/read.js
generated
vendored
Normal file
@ -0,0 +1,210 @@
|
|||||||
|
/*!
|
||||||
|
* body-parser
|
||||||
|
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
||||||
|
* MIT Licensed
|
||||||
|
*/
|
||||||
|
|
||||||
|
'use strict'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module dependencies.
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
var createError = require('http-errors')
|
||||||
|
var getBody = require('raw-body')
|
||||||
|
var iconv = require('iconv-lite')
|
||||||
|
var onFinished = require('on-finished')
|
||||||
|
var zlib = require('node:zlib')
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Module exports.
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = read
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read a request into a buffer and parse.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {object} res
|
||||||
|
* @param {function} next
|
||||||
|
* @param {function} parse
|
||||||
|
* @param {function} debug
|
||||||
|
* @param {object} options
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function read (req, res, next, parse, debug, options) {
|
||||||
|
var length
|
||||||
|
var opts = options
|
||||||
|
var stream
|
||||||
|
|
||||||
|
// read options
|
||||||
|
var encoding = opts.encoding !== null
|
||||||
|
? opts.encoding
|
||||||
|
: null
|
||||||
|
var verify = opts.verify
|
||||||
|
|
||||||
|
try {
|
||||||
|
// get the content stream
|
||||||
|
stream = contentstream(req, debug, opts.inflate)
|
||||||
|
length = stream.length
|
||||||
|
stream.length = undefined
|
||||||
|
} catch (err) {
|
||||||
|
return next(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// set raw-body options
|
||||||
|
opts.length = length
|
||||||
|
opts.encoding = verify
|
||||||
|
? null
|
||||||
|
: encoding
|
||||||
|
|
||||||
|
// assert charset is supported
|
||||||
|
if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) {
|
||||||
|
return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
||||||
|
charset: encoding.toLowerCase(),
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
// read body
|
||||||
|
debug('read body')
|
||||||
|
getBody(stream, opts, function (error, body) {
|
||||||
|
if (error) {
|
||||||
|
var _error
|
||||||
|
|
||||||
|
if (error.type === 'encoding.unsupported') {
|
||||||
|
// echo back charset
|
||||||
|
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
|
||||||
|
charset: encoding.toLowerCase(),
|
||||||
|
type: 'charset.unsupported'
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// set status code on error
|
||||||
|
_error = createError(400, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// unpipe from stream and destroy
|
||||||
|
if (stream !== req) {
|
||||||
|
req.unpipe()
|
||||||
|
stream.destroy()
|
||||||
|
}
|
||||||
|
|
||||||
|
// read off entire request
|
||||||
|
dump(req, function onfinished () {
|
||||||
|
next(createError(400, _error))
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify
|
||||||
|
if (verify) {
|
||||||
|
try {
|
||||||
|
debug('verify body')
|
||||||
|
verify(req, res, body, encoding)
|
||||||
|
} catch (err) {
|
||||||
|
next(createError(403, err, {
|
||||||
|
body: body,
|
||||||
|
type: err.type || 'entity.verify.failed'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// parse
|
||||||
|
var str = body
|
||||||
|
try {
|
||||||
|
debug('parse body')
|
||||||
|
str = typeof body !== 'string' && encoding !== null
|
||||||
|
? iconv.decode(body, encoding)
|
||||||
|
: body
|
||||||
|
req.body = parse(str, encoding)
|
||||||
|
} catch (err) {
|
||||||
|
next(createError(400, err, {
|
||||||
|
body: str,
|
||||||
|
type: err.type || 'entity.parse.failed'
|
||||||
|
}))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the content stream of the request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {function} debug
|
||||||
|
* @param {boolean} [inflate=true]
|
||||||
|
* @return {object}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function contentstream (req, debug, inflate) {
|
||||||
|
var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase()
|
||||||
|
var length = req.headers['content-length']
|
||||||
|
|
||||||
|
debug('content-encoding "%s"', encoding)
|
||||||
|
|
||||||
|
if (inflate === false && encoding !== 'identity') {
|
||||||
|
throw createError(415, 'content encoding unsupported', {
|
||||||
|
encoding: encoding,
|
||||||
|
type: 'encoding.unsupported'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (encoding === 'identity') {
|
||||||
|
req.length = length
|
||||||
|
return req
|
||||||
|
}
|
||||||
|
|
||||||
|
var stream = createDecompressionStream(encoding, debug)
|
||||||
|
req.pipe(stream)
|
||||||
|
return stream
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a decompression stream for the given encoding.
|
||||||
|
* @param {string} encoding
|
||||||
|
* @param {function} debug
|
||||||
|
* @return {object}
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
function createDecompressionStream (encoding, debug) {
|
||||||
|
switch (encoding) {
|
||||||
|
case 'deflate':
|
||||||
|
debug('inflate body')
|
||||||
|
return zlib.createInflate()
|
||||||
|
case 'gzip':
|
||||||
|
debug('gunzip body')
|
||||||
|
return zlib.createGunzip()
|
||||||
|
case 'br':
|
||||||
|
debug('brotli decompress body')
|
||||||
|
return zlib.createBrotliDecompress()
|
||||||
|
default:
|
||||||
|
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
|
||||||
|
encoding: encoding,
|
||||||
|
type: 'encoding.unsupported'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Dump the contents of a request.
|
||||||
|
*
|
||||||
|
* @param {object} req
|
||||||
|
* @param {function} callback
|
||||||
|
* @api private
|
||||||
|
*/
|
||||||
|
|
||||||
|
function dump (req, callback) {
|
||||||
|
if (onFinished.isFinished(req)) {
|
||||||
|
callback(null)
|
||||||
|
} else {
|
||||||
|
onFinished(req, callback)
|
||||||
|
req.resume()
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user