this is from the organization of my bootcamp repo which is mine that i did not notice i was not pushing it to my main repo, thats why i added this here and took me long cause i have no idea how to do this thanks to my curiosity i was able to identify or solve this problem.
parent
d0d5b97580
commit
5ef3abc3c3
@ -1,132 +0,0 @@
|
|||||||
# ---> Node
|
|
||||||
# Logs
|
|
||||||
logs
|
|
||||||
*.log
|
|
||||||
npm-debug.log*
|
|
||||||
yarn-debug.log*
|
|
||||||
yarn-error.log*
|
|
||||||
lerna-debug.log*
|
|
||||||
.pnpm-debug.log*
|
|
||||||
|
|
||||||
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
||||||
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
||||||
|
|
||||||
# Runtime data
|
|
||||||
pids
|
|
||||||
*.pid
|
|
||||||
*.seed
|
|
||||||
*.pid.lock
|
|
||||||
|
|
||||||
# Directory for instrumented libs generated by jscoverage/JSCover
|
|
||||||
lib-cov
|
|
||||||
|
|
||||||
# Coverage directory used by tools like istanbul
|
|
||||||
coverage
|
|
||||||
*.lcov
|
|
||||||
|
|
||||||
# nyc test coverage
|
|
||||||
.nyc_output
|
|
||||||
|
|
||||||
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
|
||||||
.grunt
|
|
||||||
|
|
||||||
# Bower dependency directory (https://bower.io/)
|
|
||||||
bower_components
|
|
||||||
|
|
||||||
# node-waf configuration
|
|
||||||
.lock-wscript
|
|
||||||
|
|
||||||
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
|
||||||
build/Release
|
|
||||||
|
|
||||||
# Dependency directories
|
|
||||||
node_modules/
|
|
||||||
jspm_packages/
|
|
||||||
|
|
||||||
# Snowpack dependency directory (https://snowpack.dev/)
|
|
||||||
web_modules/
|
|
||||||
|
|
||||||
# TypeScript cache
|
|
||||||
*.tsbuildinfo
|
|
||||||
|
|
||||||
# Optional npm cache directory
|
|
||||||
.npm
|
|
||||||
|
|
||||||
# Optional eslint cache
|
|
||||||
.eslintcache
|
|
||||||
|
|
||||||
# Optional stylelint cache
|
|
||||||
.stylelintcache
|
|
||||||
|
|
||||||
# Microbundle cache
|
|
||||||
.rpt2_cache/
|
|
||||||
.rts2_cache_cjs/
|
|
||||||
.rts2_cache_es/
|
|
||||||
.rts2_cache_umd/
|
|
||||||
|
|
||||||
# Optional REPL history
|
|
||||||
.node_repl_history
|
|
||||||
|
|
||||||
# Output of 'npm pack'
|
|
||||||
*.tgz
|
|
||||||
|
|
||||||
# Yarn Integrity file
|
|
||||||
.yarn-integrity
|
|
||||||
|
|
||||||
# dotenv environment variable files
|
|
||||||
.env
|
|
||||||
.env.development.local
|
|
||||||
.env.test.local
|
|
||||||
.env.production.local
|
|
||||||
.env.local
|
|
||||||
|
|
||||||
# parcel-bundler cache (https://parceljs.org/)
|
|
||||||
.cache
|
|
||||||
.parcel-cache
|
|
||||||
|
|
||||||
# Next.js build output
|
|
||||||
.next
|
|
||||||
out
|
|
||||||
|
|
||||||
# Nuxt.js build / generate output
|
|
||||||
.nuxt
|
|
||||||
dist
|
|
||||||
|
|
||||||
# Gatsby files
|
|
||||||
.cache/
|
|
||||||
# Comment in the public line in if your project uses Gatsby and not Next.js
|
|
||||||
# https://nextjs.org/blog/next-9-1#public-directory-support
|
|
||||||
# public
|
|
||||||
|
|
||||||
# vuepress build output
|
|
||||||
.vuepress/dist
|
|
||||||
|
|
||||||
# vuepress v2.x temp and cache directory
|
|
||||||
.temp
|
|
||||||
.cache
|
|
||||||
|
|
||||||
# Docusaurus cache and generated files
|
|
||||||
.docusaurus
|
|
||||||
|
|
||||||
# Serverless directories
|
|
||||||
.serverless/
|
|
||||||
|
|
||||||
# FuseBox cache
|
|
||||||
.fusebox/
|
|
||||||
|
|
||||||
# DynamoDB Local files
|
|
||||||
.dynamodb/
|
|
||||||
|
|
||||||
# TernJS port file
|
|
||||||
.tern-port
|
|
||||||
|
|
||||||
# Stores VSCode versions used for testing VSCode extensions
|
|
||||||
.vscode-test
|
|
||||||
|
|
||||||
# yarn v2
|
|
||||||
.yarn/cache
|
|
||||||
.yarn/unplugged
|
|
||||||
.yarn/build-state.yml
|
|
||||||
.yarn/install-state.gz
|
|
||||||
.pnp.*
|
|
||||||
|
|
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
@ -0,0 +1,82 @@
|
|||||||
|
// Dependencies
|
||||||
|
const jwt = require('jsonwebtoken');
|
||||||
|
|
||||||
|
// secret
|
||||||
|
// signature to our token
|
||||||
|
// could any random string
|
||||||
|
const secret = "EcommerceAPI";
|
||||||
|
|
||||||
|
// token creation function
|
||||||
|
// user will be depending in our log in controller
|
||||||
|
module.exports.createAccessToken = (user) =>{
|
||||||
|
|
||||||
|
// this called payload
|
||||||
|
const data ={
|
||||||
|
id: user._id,
|
||||||
|
email:user.email,
|
||||||
|
isAdmin:user.isAdmin
|
||||||
|
}
|
||||||
|
|
||||||
|
// {}-option only
|
||||||
|
// sign-to generate a new token
|
||||||
|
return jwt.sign(data,secret,{});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Token Verification Function
|
||||||
|
|
||||||
|
// verify - to verify our user/verify middleware
|
||||||
|
module.exports.verify = (req,res,next) =>{
|
||||||
|
|
||||||
|
// console.log(req.headers.authorization);
|
||||||
|
|
||||||
|
let token = req.headers.authorization;
|
||||||
|
|
||||||
|
if(typeof token === 'undefined'){
|
||||||
|
|
||||||
|
return res.send({
|
||||||
|
auth:'Failed. No token'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else{
|
||||||
|
token = token.slice(7, token.length);
|
||||||
|
// console.log (token);
|
||||||
|
|
||||||
|
// Token decryption
|
||||||
|
|
||||||
|
// Validate the token using the "verify" method decrypting the token using the secret code
|
||||||
|
jwt.verify(token, secret, function(err, decodedToken){
|
||||||
|
|
||||||
|
if (err){
|
||||||
|
return res.send({
|
||||||
|
auth: false,
|
||||||
|
message:err.message
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
// console.log(decodedToken);//contains the data from our token
|
||||||
|
|
||||||
|
// user property will be added to request object and will contain our decodedToken
|
||||||
|
req.user = decodedToken
|
||||||
|
|
||||||
|
next()
|
||||||
|
// middleware function that lets us proceed to the next middleware or controller
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// create verification if the user is the admin
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.verifyAdmin = (req,res,next) =>{
|
||||||
|
// console.log(req.user.isAdmin);
|
||||||
|
if(req.user.isAdmin){
|
||||||
|
// console.log(req.user.isAdmin)
|
||||||
|
next()
|
||||||
|
}else{
|
||||||
|
return res.send({
|
||||||
|
auth:false,
|
||||||
|
message:"Action Forbidden"
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,87 @@
|
|||||||
|
const Product = require ("../models/Product")
|
||||||
|
const User = require("../models/User");
|
||||||
|
const Order = require("../models/Order");
|
||||||
|
const bcrypt = require("bcrypt");
|
||||||
|
|
||||||
|
// Auth
|
||||||
|
const auth = require("../auth");
|
||||||
|
|
||||||
|
module.exports.checkoutOrder = async (req, res) => {
|
||||||
|
try {
|
||||||
|
console.log(req.body);
|
||||||
|
const { userId, products, price, totalAmount, description } = req.body;
|
||||||
|
|
||||||
|
const newOrder = new Order({
|
||||||
|
userId,
|
||||||
|
products,
|
||||||
|
price,
|
||||||
|
totalAmount,
|
||||||
|
description
|
||||||
|
});
|
||||||
|
|
||||||
|
const savedOrder = await newOrder.save();
|
||||||
|
|
||||||
|
res.status(200).json({ message: 'Order created successfully!', order: savedOrder });
|
||||||
|
} catch (error) {
|
||||||
|
console.log('Error creating the order:', error)
|
||||||
|
res.status(500).json({ error: 'Error creating the order.' });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// checkoutOrder.getOrderDetails = (req, res) => {
|
||||||
|
// const orderId = req.params.orderId;
|
||||||
|
|
||||||
|
// Order.findById(orderId)
|
||||||
|
// .then(order => {
|
||||||
|
// if (!order) {
|
||||||
|
// return res.status(404).json({ error: 'Order not found.' });
|
||||||
|
// }
|
||||||
|
// res.status(200).json({ order });
|
||||||
|
// })
|
||||||
|
// .catch(error => {
|
||||||
|
// res.status(500).json({ error: 'Error fetching order details.' });
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
|
// checkoutOrder.updateOrder = (req, res) => {
|
||||||
|
// const orderId = req.params.orderId;
|
||||||
|
// const updateData = req.body;
|
||||||
|
|
||||||
|
// Order.findByIdAndUpdate(orderId, updateData, { new: true })
|
||||||
|
// .then(updatedOrder => {
|
||||||
|
// if (!updatedOrder) {
|
||||||
|
// return res.status(404).json({ error: 'Order not found.' });
|
||||||
|
// }
|
||||||
|
// res.status(200).json({ message: 'Order updated successfully!', order: updatedOrder });
|
||||||
|
// })
|
||||||
|
// .catch(error => {
|
||||||
|
// res.status(500).json({ error: 'Error updating the order.' });
|
||||||
|
// });
|
||||||
|
// };
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
exports.getAllOrders = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const orders = await Order.find({});
|
||||||
|
res.json(orders);
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ message: error.message });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Controller for retrieving order history
|
||||||
|
module.exports.getOrderHistory = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const userId = req.params.userId;
|
||||||
|
|
||||||
|
// Fetch orders for the specified user
|
||||||
|
const orders = await Order.find({ userId });
|
||||||
|
|
||||||
|
res.status(200).json(orders);
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching order history:', error);
|
||||||
|
res.status(500).json({ error: 'Error fetching order history.' });
|
||||||
|
}
|
||||||
|
};
|
@ -0,0 +1,170 @@
|
|||||||
|
// Dependencies and Modules
|
||||||
|
|
||||||
|
const Product = require ("../models/Product")
|
||||||
|
const User = require("../models/User");
|
||||||
|
const bcrypt = require("bcrypt");
|
||||||
|
|
||||||
|
// Auth
|
||||||
|
const auth = require("../auth");
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.createProduct = (req,res) => {
|
||||||
|
|
||||||
|
let newProduct = new Product({
|
||||||
|
name:req.body.name,
|
||||||
|
description:req.body.description,
|
||||||
|
price:req.body.price,
|
||||||
|
createdOn:req.body.createdOn
|
||||||
|
});
|
||||||
|
return newProduct.save()
|
||||||
|
.then(course => {
|
||||||
|
return res.send(true);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
console.error(error); // Log the error for debugging purposes
|
||||||
|
return res.send(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getAllProducts = (req,res) =>{
|
||||||
|
|
||||||
|
// to retrieve all the documents in the "product" collection, we will use find({}) method.
|
||||||
|
return Product.find({}).then(result =>{
|
||||||
|
return res.send(result);
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getactiveproduct = (req,res) =>{
|
||||||
|
return Product.find({isActive:true}).then(result =>{
|
||||||
|
return res.send(result);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.getProduct = (req,res) =>{
|
||||||
|
return Product.findById(req.params.productId).then(result =>{
|
||||||
|
return res.send(result);
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.updateProduct = (req, res) => {
|
||||||
|
|
||||||
|
// Specify the fields/properties of the document to be updated
|
||||||
|
let updateProduct = {
|
||||||
|
name: req.body.name,
|
||||||
|
description: req.body.description,
|
||||||
|
price: req.body.price
|
||||||
|
|
||||||
|
}
|
||||||
|
// Syntax
|
||||||
|
// findByIdAndUpdate(documentId, updatesToBeApplied)
|
||||||
|
return Product.findByIdAndUpdate(req.params.productId, updateProduct).then((product, error) => {
|
||||||
|
|
||||||
|
// If product was not updated
|
||||||
|
if(error){
|
||||||
|
return res.send(false);
|
||||||
|
|
||||||
|
// If product was updated successfully
|
||||||
|
} else {
|
||||||
|
return res.send(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
module.exports.archiveProduct = async (req, res) => {
|
||||||
|
const productId = req.params.productId; // Assuming you're passing the productId in the URL
|
||||||
|
|
||||||
|
try {
|
||||||
|
const product = await Product.findById(productId);
|
||||||
|
if (!product) {
|
||||||
|
return res.status(404).send('Product not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
product.isArchived = true;
|
||||||
|
await product.save();
|
||||||
|
|
||||||
|
return res.send('Product archived successfully');
|
||||||
|
} catch (error) {
|
||||||
|
return res.status(500).send(error.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
module.exports.activateProduct = async (req, res) => {
|
||||||
|
const productId = req.params.productId; // Assuming you're passing the productId in the URL
|
||||||
|
|
||||||
|
try {
|
||||||
|
const product = await Product.findById(productId);
|
||||||
|
if (!product) {
|
||||||
|
return res.status(404).send('Product not found');
|
||||||
|
}
|
||||||
|
|
||||||
|
product.isActive = true;
|
||||||
|
await product.save();
|
||||||
|
|
||||||
|
return res.send('Product activated successfully');
|
||||||
|
} catch (error) {
|
||||||
|
return res.status(500).send(error.message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.searchProductsByName = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { productName } = req.body;
|
||||||
|
|
||||||
|
// Use a regular expression to perform a case-insensitive search
|
||||||
|
const courses = await Course.find({
|
||||||
|
name: { $regex: productName, $options: 'i' }
|
||||||
|
});
|
||||||
|
|
||||||
|
res.json(products);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ error: 'Internal Server Error' });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
exports.searchProductsByPriceRange = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { minPrice, maxPrice } = req.body;
|
||||||
|
|
||||||
|
// Find courses within the price range
|
||||||
|
const products = await Product.find({
|
||||||
|
price: { $gte: minPrice, $lte: maxPrice }
|
||||||
|
});
|
||||||
|
|
||||||
|
res.status(200).json({ products });
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({ error: 'An error occurred while searching for courses' });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// exports.updateProduct = async (req, res) => {
|
||||||
|
// try {
|
||||||
|
// // Check if the user is an admin
|
||||||
|
// if (!req.user.isAdmin) {
|
||||||
|
// return res.status(403).json({ message: 'You are not authorized to perform this action' });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// const updateProduct = await Product.findByIdAndUpdate(req.params.id, req.body, { new: true });
|
||||||
|
// res.json(updatedProduct);
|
||||||
|
// } catch (error) {
|
||||||
|
// res.status(500).json({ message: error.message });
|
||||||
|
// }
|
||||||
|
// };
|
||||||
|
|
||||||
|
// exports.deleteProduct = async (req, res) => {
|
||||||
|
// try {
|
||||||
|
// // Check if the user is an admin
|
||||||
|
// if (!req.user.isAdmin) {
|
||||||
|
// return res.status(403).json({ message: 'You are not authorized to perform this action' });
|
||||||
|
// }
|
||||||
|
|
||||||
|
// await Product.findByIdAndDelete(req.params.id);
|
||||||
|
// res.json({ message: 'Product deleted successfully' });
|
||||||
|
// } catch (error) {
|
||||||
|
// res.status(500).json({ message: error.message });
|
||||||
|
// }
|
||||||
|
// };
|
@ -0,0 +1,58 @@
|
|||||||
|
// Dependencies and Modules
|
||||||
|
const User = require("../models/User");
|
||||||
|
const bcrypt = require("bcrypt");
|
||||||
|
|
||||||
|
// Auth
|
||||||
|
const auth = require("../auth");
|
||||||
|
|
||||||
|
module.exports.registerUser = (reqBody) => {
|
||||||
|
let newUser = new User({
|
||||||
|
firstName: reqBody.firstName,
|
||||||
|
lastName: reqBody.lastName,
|
||||||
|
email: reqBody.email,
|
||||||
|
mobileNo: reqBody.mobileNo,
|
||||||
|
password: bcrypt.hashSync(reqBody.password, 10)
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return newUser.save().then((user, error) => {
|
||||||
|
if(error){
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.loginUser = (req, res) => {
|
||||||
|
return User.findOne({email: req.body.email}).then(result => {
|
||||||
|
if(result == null){
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
const isPasswordCorrect = bcrypt.compareSync(req.body.password, result.password);
|
||||||
|
if(isPasswordCorrect) {
|
||||||
|
res.send({
|
||||||
|
access: auth.createAccessToken(result)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return res.send(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports.retrieveDetails = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const user = await User.findById(req.user.id);
|
||||||
|
if (!user) {
|
||||||
|
return res.send(false);
|
||||||
|
}
|
||||||
|
user.password = ''; // Set password to an empty string
|
||||||
|
return res.send(user);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return res.status(500).send('Internal Server Error');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
// import dependenciees
|
||||||
|
const express = require('express');
|
||||||
|
// mongoose- come from the Mongodb
|
||||||
|
const mongoose = require('mongoose')
|
||||||
|
|
||||||
|
// CORS (Cross Origin Resource Sharing)
|
||||||
|
// Allow our backend application to be available to our frontend application
|
||||||
|
const cors = require('cors');
|
||||||
|
|
||||||
|
// Import routes
|
||||||
|
const userRoutes = require('./routes/user');
|
||||||
|
const productRoutes = require('./routes/product');
|
||||||
|
const orderRoutes = require('./routes/order');
|
||||||
|
|
||||||
|
|
||||||
|
// server setup
|
||||||
|
const app = express();
|
||||||
|
const port = 4003;
|
||||||
|
|
||||||
|
// Midlewares
|
||||||
|
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(express.urlencoded({extended:true}));
|
||||||
|
|
||||||
|
// Allows all resources to access our backend application
|
||||||
|
// Assuming you're using Express
|
||||||
|
// app.use((req, res, next) => {
|
||||||
|
// res.header('Access-Control-Allow-Origin', 'http://localhost:3000');
|
||||||
|
// // Additional headers can be set as needed
|
||||||
|
// next();
|
||||||
|
// });
|
||||||
|
app.use(cors());
|
||||||
|
|
||||||
|
|
||||||
|
// database connection
|
||||||
|
mongoose.connect("mongodb+srv://justineyung02:Miras1607@cluster0.mymbzfm.mongodb.net/EcommerceAPI?retryWrites=true&w=majority", {
|
||||||
|
useNewUrlParser: true,
|
||||||
|
useUnifiedTopology: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// connecting to MongoDb locally if no internet connection
|
||||||
|
|
||||||
|
// mongoose.connect("mongodb://localhost:27017/b320-todo", {
|
||||||
|
// useNewUrlParser: true,
|
||||||
|
// useUnifiedTopology: true
|
||||||
|
// });
|
||||||
|
|
||||||
|
let db = mongoose.connection
|
||||||
|
db.on('error', console.error.bind(console, 'Connection error'));
|
||||||
|
db.once('open', () => console.log('Were connected to the cloud database'));
|
||||||
|
// Backend routes
|
||||||
|
// it should be plural as always
|
||||||
|
// the users coming from the filename name in the routes. it is jut plural because it is default to be plural.
|
||||||
|
app.use("/b3/users", userRoutes);
|
||||||
|
app.use("/b3/products", productRoutes);
|
||||||
|
app.use("/b3/orders", orderRoutes);
|
||||||
|
// server start
|
||||||
|
if(require.main === module)
|
||||||
|
app.listen( port, () => console.log(`Server running at port ${port}`));
|
||||||
|
module.exports = app;
|
@ -0,0 +1,41 @@
|
|||||||
|
const mongoose = require("mongoose");
|
||||||
|
|
||||||
|
const orderSchema = new mongoose.Schema({
|
||||||
|
|
||||||
|
|
||||||
|
userId: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
products: [
|
||||||
|
{
|
||||||
|
productId: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
quantity: {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
price: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
|
||||||
|
totalAmount: {
|
||||||
|
type: Number,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
description: {
|
||||||
|
type: String,
|
||||||
|
required: true
|
||||||
|
},
|
||||||
|
purchasedOnDate: {
|
||||||
|
type: Date,
|
||||||
|
default: Date.now
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
module.exports = mongoose.model('Order', orderSchema);
|
@ -0,0 +1,34 @@
|
|||||||
|
const mongoose = require("mongoose");
|
||||||
|
const Schema = mongoose.Schema;
|
||||||
|
|
||||||
|
// Schema/Blueprint
|
||||||
|
const productSchema = new Schema({
|
||||||
|
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
description: {
|
||||||
|
type: String,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
price : {
|
||||||
|
type: Number,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
|
||||||
|
isActive: {
|
||||||
|
type: Boolean,
|
||||||
|
default: true, // Assuming new users are not admins by default
|
||||||
|
},
|
||||||
|
|
||||||
|
createdOn:{
|
||||||
|
type:Date,
|
||||||
|
default: new Date()
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
module.exports = mongoose.model('Product', productSchema);
|
@ -0,0 +1,41 @@
|
|||||||
|
const mongoose = require("mongoose");
|
||||||
|
|
||||||
|
// Schema/Blueprint
|
||||||
|
const userSchema = new mongoose.Schema({
|
||||||
|
firstName: {
|
||||||
|
type: String,
|
||||||
|
required: [true, 'FirstName is required']
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
lastName: {
|
||||||
|
type: String,
|
||||||
|
required: [true, 'lastName is required']
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
email: {
|
||||||
|
type: String,
|
||||||
|
required: [true, 'Email is required']
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
mobileNo: {
|
||||||
|
type: Number,
|
||||||
|
required: [true, 'MobileNumber is required']
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
isAdmin: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false, // Assuming new users are not admins by default
|
||||||
|
},
|
||||||
|
|
||||||
|
password: {
|
||||||
|
type: String,
|
||||||
|
required: [true,'Password is required']
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Model
|
||||||
|
module.exports = mongoose.model("User", userSchema);
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "csp2-miras",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"bcrypt": "^5.1.1",
|
||||||
|
"cors": "^2.8.5",
|
||||||
|
"express": "^4.18.2",
|
||||||
|
"jsonwebtoken": "^9.0.2",
|
||||||
|
"mongoose": "^7.6.1"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const orderController = require('../controllers/order');
|
||||||
|
// console.log(userController);
|
||||||
|
// Routing Component
|
||||||
|
const router = express.Router();
|
||||||
|
// Auth import
|
||||||
|
const auth = require('../auth')
|
||||||
|
// Auth
|
||||||
|
const {verify,verifyAdmin} = auth;
|
||||||
|
// verifyng
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
router.post('/checkout',verify,orderController.checkoutOrder);
|
||||||
|
|
||||||
|
|
||||||
|
router.get('/order', verify,orderController.getAllOrders);
|
||||||
|
|
||||||
|
router.get('/history/:userId', verify, orderController.getOrderHistory);
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = router;
|
@ -0,0 +1,42 @@
|
|||||||
|
const express = require('express');
|
||||||
|
const productController = require('../controllers/product');
|
||||||
|
// console.log(userController);
|
||||||
|
// Routing Component
|
||||||
|
const router = express.Router();
|
||||||
|
// Auth import
|
||||||
|
const auth = require('../auth')
|
||||||
|
// Auth
|
||||||
|
const {verify,verifyAdmin} = auth;
|
||||||
|
// verifyng
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Route for user authenctication for log in
|
||||||
|
|
||||||
|
router.post("/product", verify,verifyAdmin,productController.createProduct);
|
||||||
|
|
||||||
|
router.get('/allproduct',productController.getAllProducts);
|
||||||
|
|
||||||
|
router.get('/activeproduct',productController.getactiveproduct);
|
||||||
|
|
||||||
|
|
||||||
|
router.get('/:productId',productController.getProduct);
|
||||||
|
|
||||||
|
router.put("/:productId", verify,verifyAdmin,productController.updateProduct);
|
||||||
|
|
||||||
|
router.put('/:productId/archive', productController.archiveProduct);
|
||||||
|
|
||||||
|
router.put('/:productId/activate', productController.activateProduct);
|
||||||
|
|
||||||
|
router.post('/search', productController.searchProductsByName);
|
||||||
|
|
||||||
|
// Route to search for courses by course price
|
||||||
|
router.post('/searchByPrice', productController.searchProductsByPriceRange);
|
||||||
|
|
||||||
|
// router.put('/products/:id',verify,verifyAdmin,productController.updateProduct);
|
||||||
|
|
||||||
|
// router.delete('/products/:id',verify,verifyAdmin,productController.deleteProduct);
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = router;
|
@ -0,0 +1,23 @@
|
|||||||
|
// Dependencies and Modules
|
||||||
|
|
||||||
|
const express = require('express');
|
||||||
|
const userController = require('../controllers/user');
|
||||||
|
// Routing Component
|
||||||
|
const router = express.Router();
|
||||||
|
// Auth import
|
||||||
|
const auth = require('../auth')
|
||||||
|
// Auth
|
||||||
|
const {verify,verifyAdmin} = auth;
|
||||||
|
// verifyng
|
||||||
|
|
||||||
|
router.post("/register", (req, res) => {
|
||||||
|
userController.registerUser(req.body).then(resultFromController => res.send(resultFromController));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
router.post('/login',userController.loginUser);
|
||||||
|
|
||||||
|
|
||||||
|
router.get('/userdetail',verify,userController.retrieveDetails);
|
||||||
|
|
||||||
|
module.exports = router;
|
@ -0,0 +1,7 @@
|
|||||||
|
Regula User:
|
||||||
|
username:dustin@mail.com
|
||||||
|
password:dustin123
|
||||||
|
|
||||||
|
Admin User:
|
||||||
|
username:lyka@mail.com
|
||||||
|
password:12345
|
Binary file not shown.
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>JavaScript - Syntax, Variables and Simple Operations</title>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,54 @@
|
|||||||
|
console.log('Hello world')
|
||||||
|
|
||||||
|
|
||||||
|
// let personalInfo=(
|
||||||
|
var firstName='FirstName: John';
|
||||||
|
var lastName='lastName: Smith';
|
||||||
|
var age=30;
|
||||||
|
var word = 'Hobbies:'
|
||||||
|
var hobbies=['Biking','Mountain Climbing','Swimming'];
|
||||||
|
var address = 'work Address:'
|
||||||
|
var workAddress= {
|
||||||
|
houseNumber:"32",
|
||||||
|
street:"Washington",
|
||||||
|
city:"Lincoln",
|
||||||
|
state:"Nebraska"
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(firstName);
|
||||||
|
console.log(lastName);
|
||||||
|
console.log(age);
|
||||||
|
console.log(word);
|
||||||
|
console.log(hobbies);
|
||||||
|
console.log(address);
|
||||||
|
console.log(workAddress);
|
||||||
|
|
||||||
|
const printFullName = 'Steve Rogers';
|
||||||
|
const currentage = 40;
|
||||||
|
const myFriends = 'My friends are'
|
||||||
|
const friends =([ 'Tony', 'Bruce','Thor','Nataasha', 'Clint','Nick']);
|
||||||
|
const profileA = 'My Full Profile'
|
||||||
|
const profile = {
|
||||||
|
username:'captain_america',
|
||||||
|
fullname: "Steve Rogers",
|
||||||
|
age:"40",
|
||||||
|
isActive:false
|
||||||
|
|
||||||
|
};
|
||||||
|
console.log('My full name is:' + printFullName);
|
||||||
|
console.log('My current age is:' + currentage);
|
||||||
|
console.log(myFriends);
|
||||||
|
console.log(friends);
|
||||||
|
console.log(profileA);
|
||||||
|
console.log(profile);
|
||||||
|
console.log('My bestfriend is: Bucky Barnes');
|
||||||
|
console.log('I was found frozen in: Arctic Ocean');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Javascript Operators and Truth tables</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,112 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
let num1 = 25;
|
||||||
|
let num2 = "5";
|
||||||
|
console.log("The result of num1 + num2 should be 30.");
|
||||||
|
console.log("Actual Result:");
|
||||||
|
console.log(num1 + 5);
|
||||||
|
|
||||||
|
let num3 = 156;
|
||||||
|
let num4 = "44";
|
||||||
|
console.log("The result of num3 + num4 should be 200.");
|
||||||
|
console.log("Actual Result:");
|
||||||
|
console.log(num3 + 44);
|
||||||
|
|
||||||
|
let num5 = "seventeen";
|
||||||
|
let num6 = 10;
|
||||||
|
console.log("The result of num5 - num6 should be 7.");
|
||||||
|
console.log("Actual Result:");
|
||||||
|
console.log(17-num6);
|
||||||
|
console.log('There are 5265000 minutes in a year.');
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
2. Given the values below, calculate the total number of minutes in a year and save the result in a variable called resultMinutes.
|
||||||
|
|
||||||
|
*/
|
||||||
|
let minutesHour = 60;
|
||||||
|
let hoursDay = 24;
|
||||||
|
let daysWeek = 7;
|
||||||
|
let weeksMonth = 4;
|
||||||
|
let monthsYear = 12;
|
||||||
|
let daysYear = 365;
|
||||||
|
|
||||||
|
const resultMinutes = 5265000
|
||||||
|
console.log('There are'+resultMinutes+'minutes in a year.');
|
||||||
|
|
||||||
|
/*
|
||||||
|
3. Given the values below, calculate and convert the temperature from celsius to fahrenheit and save the result in a variable called resultFahrenheit.
|
||||||
|
*/
|
||||||
|
let tempCelsius = 132;
|
||||||
|
let resultFahrenheit = (tempCelsius * 9/5) + 32;
|
||||||
|
|
||||||
|
console.log('132 degrees Celcius when converted to Farenheit is ' + resultFahrenheit);
|
||||||
|
|
||||||
|
/*
|
||||||
|
4a. Given the values below, identify if the values of the following variable are divisible by 8.
|
||||||
|
-Use a modulo operator to identify the divisibility of the number to 8.
|
||||||
|
-Save the result of the operation in a variable called remainder1.
|
||||||
|
-Log the value of the remainder in the console.
|
||||||
|
-Using the strict equality operator, check if the remainder is equal to 0.
|
||||||
|
-Save the returned value of the comparison in a variable called isDivisibleBy8
|
||||||
|
-Log a message in the console if num7 is divisible by 8.
|
||||||
|
-Log the value of isDivisibleBy8 in the console.
|
||||||
|
|
||||||
|
*/
|
||||||
|
let num7 = 165;
|
||||||
|
|
||||||
|
const remainder1 = (num7 % 8);
|
||||||
|
console.log('the remainder of 165 divided by 8 is :' + remainder1);
|
||||||
|
//Log the value of the remainder in the console.
|
||||||
|
console.log("Is num7 divisible by 8?");
|
||||||
|
const isDivisibleBy8 = (remainder1 === 0);
|
||||||
|
console.log(isDivisibleBy8);
|
||||||
|
//Log the value of isDivisibleBy8 in the console.
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
4b. Given the values below, identify if the values of the following variable are divisible by 4.
|
||||||
|
-Use a modulo operator to identify the divisibility of the number to 4.
|
||||||
|
-Save the result of the operation in a variable called remainder2.
|
||||||
|
-Log the value of the remainder in the console.
|
||||||
|
-Using the strict equality operator, check if the remainder is equal to 0.
|
||||||
|
-Save the returned value of the comparison in a variable called isDivisibleBy4
|
||||||
|
-Log a message in the console if num8 is divisible by 4.
|
||||||
|
-Log the value of isDivisibleBy4 in the console.
|
||||||
|
|
||||||
|
*/
|
||||||
|
let num8 = 348;
|
||||||
|
|
||||||
|
const remainder2 = (num8 % 4);
|
||||||
|
console.log('The remainder of 348 divided by 4 :' + remainder2);
|
||||||
|
//Log the value of the remainder in the console.
|
||||||
|
console.log("Is num8 divisible by 4?");
|
||||||
|
const isDivisibleBy4 = (remainder2 === 0);
|
||||||
|
console.log(isDivisibleBy4);
|
||||||
|
|
||||||
|
//Log the value of isDivisibleBy4 in the console.
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
num1: typeof num1 !== 'undefined' ? num1 : null,
|
||||||
|
num2: typeof num2 !== 'undefined' ? num2 : null,
|
||||||
|
num3: typeof num3 !== 'undefined' ? num3 : null,
|
||||||
|
num4: typeof num4 !== 'undefined' ? num4 : null,
|
||||||
|
num5: typeof num5 !== 'undefined' ? num5 : null,
|
||||||
|
num6: typeof num6 !== 'undefined' ? num6 : null,
|
||||||
|
resultMinutes: typeof resultMinutes !== 'undefined' ? resultMinutes : null,
|
||||||
|
resultFahrenheit: typeof resultFahrenheit !== 'undefined' ? resultFahrenheit : null,
|
||||||
|
remainder1: typeof remainder1 !== 'undefined' ? remainder1 : null,
|
||||||
|
remainder2: typeof remainder2 !== 'undefined' ? remainder2 : null,
|
||||||
|
isDivisibleBy4: typeof isDivisibleBy4 !== 'undefined' ? isDivisibleBy4 : null,
|
||||||
|
isDivisibleBy8: typeof isDivisibleBy8 !== 'undefined' ? isDivisibleBy8 : null
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>JavaScript Basic Function</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,133 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
/*
|
||||||
|
1. Create a function named getUserInfo which is able to return an object.
|
||||||
|
|
||||||
|
The object returned should have the following properties:
|
||||||
|
|
||||||
|
- key - data type
|
||||||
|
|
||||||
|
- name - String
|
||||||
|
- age - Number
|
||||||
|
- address - String
|
||||||
|
- isMarried - Boolean
|
||||||
|
- petName - String
|
||||||
|
|
||||||
|
Note: Property names given is required and should not be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
function getUserInfo(){
|
||||||
|
return {
|
||||||
|
name: 'john doe',
|
||||||
|
age: 23,
|
||||||
|
address:'123 street quezon city',
|
||||||
|
|
||||||
|
petName: 'Danny'
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
const myObject = getUserInfo();
|
||||||
|
console.log(myObject);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
2. Create a function named getArtistsArray which is able to return an array with at least 5 names of your favorite bands or artists.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
function getArtistsArray(){
|
||||||
|
return [ 'Chocolate factory', 'East Side', 'Paarokya ni Edgar','Silent Sanctuary','Taylor Swift']
|
||||||
|
}
|
||||||
|
const myObject1 = getArtistsArray();
|
||||||
|
console.log(myObject1);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
3. Create a function named getSongsArray which is able to return an array with at least 5 titles of your favorite songs.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
*/
|
||||||
|
function getSongsArray(){
|
||||||
|
return [ 'Perfect', 'Dilaw', 'heaven knows','Sleeping Child','Through the Years']
|
||||||
|
}
|
||||||
|
const myObject2 = getSongsArray();
|
||||||
|
console.log(myObject2);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
4. Create a function named getMoviesArray which is able to return an array with at least 5 titles of your favorite movies.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getMoviesArray(){
|
||||||
|
return[ 'Titanic','Snowhite','Mermaid','Moana','Encanto']
|
||||||
|
}
|
||||||
|
|
||||||
|
const myObject3 = getMoviesArray();
|
||||||
|
console.log(myObject3)
|
||||||
|
|
||||||
|
/*
|
||||||
|
5. Create a function named getPrimeNumberArray which is able to return an array with at least 5 prime numbers.
|
||||||
|
|
||||||
|
- Note: the array returned should have numbers only.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getPrimeNumberArray(){
|
||||||
|
return[ 11, 13,17,19,23]
|
||||||
|
}
|
||||||
|
const myObject4 = getPrimeNumberArray();
|
||||||
|
console.log(myObject4);
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
getUserInfo: typeof getUserInfo !== 'undefined' ? getUserInfo : null,
|
||||||
|
getArtistsArray: typeof getArtistsArray !== 'undefined' ? getArtistsArray : null,
|
||||||
|
getSongsArray: typeof getSongsArray !== 'undefined' ? getSongsArray : null,
|
||||||
|
getMoviesArray: typeof getMoviesArray !== 'undefined' ? getMoviesArray : null,
|
||||||
|
getPrimeNumberArray: typeof getPrimeNumberArray !== 'undefined' ? getPrimeNumberArray : null,
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Javascript Basic Function</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,141 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
1. Create a function named getUserInfo which is able to return an object.
|
||||||
|
|
||||||
|
The object returned should have the following properties:
|
||||||
|
|
||||||
|
- key - data type
|
||||||
|
|
||||||
|
- name - String
|
||||||
|
- age - Number
|
||||||
|
- address - String
|
||||||
|
- isMarried - Boolean
|
||||||
|
- petName - String
|
||||||
|
|
||||||
|
Note: Property names given is required and should not be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
function getUserInfo(){
|
||||||
|
return{
|
||||||
|
key:'data type',
|
||||||
|
name:'John',
|
||||||
|
age:39,
|
||||||
|
ismarried:false,
|
||||||
|
petName:'baste'
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
const user =getUserInfo();
|
||||||
|
console.log(user);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
2. Create a function named getArtistsArray which is able to return an array with at least 5 names of your favorite bands or artists.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
function getArtistsArray(){
|
||||||
|
return ['Eraserheads','Parokya ni Edgar','Rivermaya','The Dawn','Kamikazee']
|
||||||
|
};
|
||||||
|
const artist = getArtistsArray();
|
||||||
|
console.log(artist);
|
||||||
|
|
||||||
|
/*
|
||||||
|
3. Create a function named getSongsArray which is able to return an array with at least 5 titles of your favorite songs.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
*/
|
||||||
|
function getSongsArray(){
|
||||||
|
return['Perfect','Buwan','Call me maybe','Ikaw','Sana']
|
||||||
|
|
||||||
|
};
|
||||||
|
const song = getSongsArray();
|
||||||
|
console.log(song);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
4. Create a function named getMoviesArray which is able to return an array with at least 5 titles of your favorite movies.
|
||||||
|
|
||||||
|
- Note: the array returned should have at least 5 elements as strings.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function getMoviesArray(){
|
||||||
|
return ['The hows of us','Barbie','Alone Together','Cant jelp falling in love','Hello love Goodbye']
|
||||||
|
};
|
||||||
|
|
||||||
|
const movies = getMoviesArray();
|
||||||
|
console.log(movies);
|
||||||
|
/*
|
||||||
|
5. Create a function named getPrimeNumberArray which is able to return an array with at least 5 prime numbers.
|
||||||
|
|
||||||
|
- Note: the array returned should have numbers only.
|
||||||
|
function name given is required and cannot be changed.
|
||||||
|
|
||||||
|
To check, create a variable to save the value returned by the function.
|
||||||
|
Then log the variable in the console.
|
||||||
|
|
||||||
|
Note: This is optional.
|
||||||
|
|
||||||
|
*/
|
||||||
|
function getPrimeNumberArray(){
|
||||||
|
return [2,3,5,7,11]
|
||||||
|
}
|
||||||
|
const number = getPrimeNumberArray();
|
||||||
|
console.log(number);
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
getUserInfo: typeof getUserInfo !== 'undefined' ? getUserInfo : null,
|
||||||
|
getArtistsArray: typeof getArtistsArray !== 'undefined' ? getArtistsArray : null,
|
||||||
|
getSongsArray: typeof getSongsArray !== 'undefined' ? getSongsArray : null,
|
||||||
|
getMoviesArray: typeof getMoviesArray !== 'undefined' ? getMoviesArray : null,
|
||||||
|
getPrimeNumberArray: typeof getPrimeNumberArray !== 'undefined' ? getPrimeNumberArray : null,
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,62 @@
|
|||||||
|
console.log('HEllo world');
|
||||||
|
|
||||||
|
console.log('Displayed sum of 5 and 15');
|
||||||
|
function addNum(num1,num2) {
|
||||||
|
return num1+num2;
|
||||||
|
};
|
||||||
|
|
||||||
|
const sub = addNum(5,15);
|
||||||
|
console.log(sub);
|
||||||
|
|
||||||
|
console.log('Displayed difference of 20 and 5');
|
||||||
|
function subNum(num3,num4){
|
||||||
|
return num3-num4;
|
||||||
|
|
||||||
|
};
|
||||||
|
const difference = subNum(20,5);
|
||||||
|
console.log(difference);
|
||||||
|
|
||||||
|
console.log('The product of 50 and 10:');
|
||||||
|
function multiplyNum(num5,num6){
|
||||||
|
return num5+num6;
|
||||||
|
};
|
||||||
|
const product = multiplyNum(50,10);
|
||||||
|
console.log(product);
|
||||||
|
|
||||||
|
console.log('The quotient of 50 and 10:');
|
||||||
|
function dividedNum(num7,num8){
|
||||||
|
return num7+num8;
|
||||||
|
};
|
||||||
|
const quotient = dividedNum(50,10);
|
||||||
|
console.log(quotient);
|
||||||
|
|
||||||
|
function getCircleArea(radius) {
|
||||||
|
const pi = Math.PI;
|
||||||
|
const area = pi * Math.pow(radius, 2);
|
||||||
|
return area;
|
||||||
|
}
|
||||||
|
|
||||||
|
const radius = 15;
|
||||||
|
const circleArea= getCircleArea(radius);
|
||||||
|
|
||||||
|
console.log('The result of getting the area of a circle with 15 radius:')
|
||||||
|
console.log (`${circleArea.toFixed(2)}`);
|
||||||
|
|
||||||
|
|
||||||
|
function getAverage(num9,num10,num11,num12){
|
||||||
|
return (num9+num10+num11+num12)/4
|
||||||
|
};
|
||||||
|
|
||||||
|
const average = getAverage(20,40,60,80);
|
||||||
|
console.log('The average of 20,40,60 and 80:')
|
||||||
|
console.log(average);
|
||||||
|
|
||||||
|
function checkIfPassed(score,total){
|
||||||
|
|
||||||
|
return (score/total)*100 > 75;
|
||||||
|
}
|
||||||
|
const isPassed = checkIfPassed(38,50);
|
||||||
|
console.log("Is 38/50 a passing score?")
|
||||||
|
console.log(isPassed);
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
1. Create a login function which is able to receive 3 parameters called username,password and role.
|
||||||
|
-add an if statement to check if the the username is an empty string or undefined or if the password is an empty string or undefined or if the role is an empty string or undefined.
|
||||||
|
-if it is, return a message in console to inform the user that their input should not be empty.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-add an else statement. Inside the else statement add a switch to check the user's role add 3 cases and a default:
|
||||||
|
-if the user's role is admin, return the following message:
|
||||||
|
"Welcome back to the class portal, admin!"
|
||||||
|
-if the user's role is teacher,return the following message:
|
||||||
|
"Thank you for logging in, teacher!"
|
||||||
|
-if the user's role is a rookie,return the following message:
|
||||||
|
"Welcome to the class portal, student!"
|
||||||
|
-if the user's role does not fall under any of the cases, as a default, return a message:
|
||||||
|
"Role out of range."
|
||||||
|
*/
|
||||||
|
function login(username,password,role){
|
||||||
|
if( username === ''|| username === undefined || password === ''|| password ===undefined || role=== ''|| role=== undefined){
|
||||||
|
return 'Input should not be empty';
|
||||||
|
} else {
|
||||||
|
switch(role){
|
||||||
|
case "admin" :
|
||||||
|
return "Welcome back to the class portal, admin!";
|
||||||
|
break;
|
||||||
|
case "teacher":
|
||||||
|
return "Thank you for logging in, teacher!";
|
||||||
|
break;
|
||||||
|
case "student":
|
||||||
|
return "Welcome to the class portal, student!";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return "Role out of range.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
2. Create a function which is able to receive 4 numbers as arguments calculate its average and log a message for the user about their letter equivalent in the console.
|
||||||
|
-add parameters appropriate to describe the arguments.
|
||||||
|
-create a new function scoped variable called average.
|
||||||
|
-calculate the average of the 4 number inputs and store it in the variable average.
|
||||||
|
-research the use of Math.round() and round off the value of the average variable.
|
||||||
|
-update the average variable with the use of Math.round()
|
||||||
|
-Do not use Math.floor().
|
||||||
|
-console.log() the average variable to check if it is rounding off first.
|
||||||
|
-add an if statement to check if the value of average is less than or equal to 74.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is F"
|
||||||
|
-add an else if statement to check if the value of average is greater than or equal to 75 and if average is less than or equal to 79.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is D"
|
||||||
|
-add an else if statement to check if the value of average is greater than or equal to 80 and if average is less than or equal to 84.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is C"
|
||||||
|
-add an else if statement to check if the value of average is greater than or equal to 85 and if average is less than or equal to 89.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is B"
|
||||||
|
-add an else if statement to check if the value of average is greater than or equal to 90 and if average is less than or equal to 95.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is A"
|
||||||
|
-add an else if statement to check if the value of average is greater than 96.
|
||||||
|
-if it is, return the following message:
|
||||||
|
"Hello, student, your average is <show average>. The letter equivalent is A+"
|
||||||
|
|
||||||
|
Invoke and add a number as argument using the browser console.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
login: typeof login !== 'undefined' ? login : null,
|
||||||
|
checkAverage: typeof checkAverage !== 'undefined' ? checkAverage : null
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>JavaScript - Syntax, Variables and Simple Operations</title>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,40 @@
|
|||||||
|
// console.log("Hello World");
|
||||||
|
|
||||||
|
|
||||||
|
//Objective 1
|
||||||
|
//Add code here
|
||||||
|
//Note: function name is numberLooper
|
||||||
|
|
||||||
|
function numberLooper=(count=0;){
|
||||||
|
if (count<=50;)
|
||||||
|
break;
|
||||||
|
console.log(numberlooper);
|
||||||
|
let message='The current value is at <count>. Terminating the loop.'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Objective 2
|
||||||
|
let string = 'supercalifragilisticexpialidocious';
|
||||||
|
console.log(string);
|
||||||
|
let filteredString = '';
|
||||||
|
|
||||||
|
//Add code here
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
filteredString: typeof filteredString !== 'undefined' ? filteredString : null,
|
||||||
|
numberLooper: typeof numberLooper !== 'undefined' ? numberLooper : null
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Javascript - Array Traversal</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,31 @@
|
|||||||
|
let users = ["Dwayne Johnson","Steve Austin","Kurt Angle","Dave Bautista"];
|
||||||
|
|
||||||
|
console.log("Original Array:")
|
||||||
|
console.log(users);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function deleteItem(users){
|
||||||
|
users.length=users.length - 1 ;
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
console.log(users.length - 1 );
|
||||||
|
console.log(users);
|
||||||
|
|
||||||
|
let users1= 'Dave Bautista';
|
||||||
|
console.log(users1);
|
||||||
|
|
||||||
|
deleteItem(users);
|
||||||
|
console.log(users)
|
||||||
|
|
||||||
|
let lastItem = deleteItem(users);
|
||||||
|
console.log(lastItem);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Javascript - Array Traversal</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,196 @@
|
|||||||
|
console.log("Hello world!");
|
||||||
|
|
||||||
|
|
||||||
|
// An Array in programming is simply a list of data. Let's write the example earlier.
|
||||||
|
|
||||||
|
let studentNumberA = "2020-1923";
|
||||||
|
let studentNumberB = "2020-1924";
|
||||||
|
let studentNumberC = "2020-1925";
|
||||||
|
let studentNumberD = "2020-1926";
|
||||||
|
let studentNumberE = "2020-1927";
|
||||||
|
|
||||||
|
// Now, with an array, we can simply write the code above like this:
|
||||||
|
let studentNumbers = ["2020-1923", "2020-1924", "2020-1925", "2020-1926", "2020-1927"];
|
||||||
|
|
||||||
|
// [SECTION] Arrays
|
||||||
|
/*
|
||||||
|
- Arrays are used to store multiple related values in a single variable.
|
||||||
|
- They are declared using square brackets ([]) also known as "Array Literals"
|
||||||
|
|
||||||
|
-Syntax:
|
||||||
|
let/const arrayName = [elementA, elementB, elementC, ...]
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Common examples of arrays
|
||||||
|
let grades = [98.5, 94.3, 89.2, 90.1];
|
||||||
|
let computerBrands = ["Acer", "Asus", "Lenovo", "Neo", "Redfox", "Gateway", "Toshiba", "Fujitsu"];
|
||||||
|
|
||||||
|
// Possible use of an array but is not recommended
|
||||||
|
let mixedArr = [12, "Asus", null, undefined, {}];
|
||||||
|
|
||||||
|
console.log(grades);
|
||||||
|
console.log(computerBrands);
|
||||||
|
console.log(mixedArr);
|
||||||
|
|
||||||
|
// Alternative way to write an array
|
||||||
|
let myTasks = [
|
||||||
|
'drink html',
|
||||||
|
'eat javascript',
|
||||||
|
'inhale css',
|
||||||
|
'bake react'
|
||||||
|
]
|
||||||
|
|
||||||
|
// Create an array with values from variables:
|
||||||
|
let city1 = "Tokyo";
|
||||||
|
let city2 = "Manila";
|
||||||
|
let city3 = "Jakarta";
|
||||||
|
|
||||||
|
let cities = [city1, city2, city3];
|
||||||
|
|
||||||
|
console.log(myTasks);
|
||||||
|
console.log(cities);
|
||||||
|
|
||||||
|
// [SECTION] length Property
|
||||||
|
|
||||||
|
// The .length property allows us to get and set the total number of items in an array.
|
||||||
|
|
||||||
|
console.log(myTasks.length);
|
||||||
|
console.log(cities.length);
|
||||||
|
|
||||||
|
let blankArr = [];
|
||||||
|
console.log(blankArr.length);
|
||||||
|
|
||||||
|
// .length property used on strings
|
||||||
|
let fullName = "Jamie Noble";
|
||||||
|
console.log(fullName.length);
|
||||||
|
|
||||||
|
|
||||||
|
// .length property can also set the total number of items in an array.
|
||||||
|
myTasks.length = myTasks.length - 1;
|
||||||
|
console.log(myTasks.length);
|
||||||
|
console.log(myTasks);
|
||||||
|
|
||||||
|
// Another example using decrementation:
|
||||||
|
cities.length--;
|
||||||
|
console.log(cities);
|
||||||
|
|
||||||
|
// We can't do the same on strings
|
||||||
|
fullName.length = fullName.length - 1;
|
||||||
|
console.log(fullName.length);
|
||||||
|
|
||||||
|
|
||||||
|
// increase/lengthen the array
|
||||||
|
let theBeatles = ["John", "Paul", "Ringo", "George"];
|
||||||
|
theBeatles.length++;
|
||||||
|
console.log(theBeatles);
|
||||||
|
|
||||||
|
// [SECTION] Reading from Arrays
|
||||||
|
/*
|
||||||
|
- Accessing array elements is one of the more common tasks that we do with an array
|
||||||
|
- This can be done through the use of array indexes
|
||||||
|
|
||||||
|
- Syntax:
|
||||||
|
arrayName[index]
|
||||||
|
*/
|
||||||
|
|
||||||
|
console.log(grades[0]);
|
||||||
|
console.log(computerBrands[3]);
|
||||||
|
|
||||||
|
// Accessing an array element that does not exist will return "undefined"
|
||||||
|
console.log(grades[20]);
|
||||||
|
|
||||||
|
let lakersLegends = ["Kobe", "Shaq", "LeBron", "Magic", "Kareem"];
|
||||||
|
|
||||||
|
// MINI ACTIVITY
|
||||||
|
// Access the second item in the array:
|
||||||
|
console.log(lakersLegends[1]);
|
||||||
|
// Access the fourth item in the array:
|
||||||
|
console.log(lakersLegends[3]);
|
||||||
|
|
||||||
|
// Storing array item in a variable
|
||||||
|
let currentLaker = lakersLegends[2];
|
||||||
|
console.log(currentLaker);
|
||||||
|
|
||||||
|
// Reassigning array values using item's index
|
||||||
|
console.log("Array before reassignment:");
|
||||||
|
console.log(lakersLegends);
|
||||||
|
// reassign the 3rd item to "Paul Gasol":
|
||||||
|
lakersLegends[2] = "Paul Gasol";
|
||||||
|
console.log('Array after reassignment:');
|
||||||
|
console.log(lakersLegends);
|
||||||
|
|
||||||
|
|
||||||
|
// Accessing the last element of an array
|
||||||
|
let bullsLegends = ["Jordan", "Pippen", "Rodman", "Rose", "Kukoc"]; // length = 5
|
||||||
|
|
||||||
|
let lastElementIndex = bullsLegends.length - 2;
|
||||||
|
console.log(bullsLegends[lastElementIndex]);
|
||||||
|
|
||||||
|
[]
|
||||||
|
|
||||||
|
|
||||||
|
// You can also add it directly:
|
||||||
|
console.log(bullsLegends[bullsLegends.length - 1]);
|
||||||
|
|
||||||
|
|
||||||
|
//Adding Items into the Array
|
||||||
|
|
||||||
|
let newArr = [];
|
||||||
|
console.log(newArr[0]);
|
||||||
|
|
||||||
|
newArr[0] = "Cloud Strife";
|
||||||
|
console.log(newArr);
|
||||||
|
|
||||||
|
console.log(newArr[1]);
|
||||||
|
newArr[1] = "Tifa Lockhart";
|
||||||
|
console.log(newArr);
|
||||||
|
|
||||||
|
// Adding an item at the end of the array
|
||||||
|
newArr[newArr.length] = "Barrett Wallace";
|
||||||
|
console.log(newArr);
|
||||||
|
|
||||||
|
|
||||||
|
// Looping over an Array
|
||||||
|
|
||||||
|
// You can use a for loop to iterate over all items in an array
|
||||||
|
|
||||||
|
for(let index = 0; index < newArr.length; index++){
|
||||||
|
|
||||||
|
// You can use the loop counter (index) as index to be able to show each array items in a console log.
|
||||||
|
console.log(newArr[index]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Given an array of numbers, you can also show if the following items in the array are divisible by 5 or not.
|
||||||
|
let numArr = [5, 12, 30, 46, 40];
|
||||||
|
|
||||||
|
for(let index = 0; index < numArr.length; index++){
|
||||||
|
|
||||||
|
if(numArr[index] % 5 === 0){
|
||||||
|
console.log(numArr[index] + " is divisible by 5");
|
||||||
|
} else {
|
||||||
|
console.log(numArr[index] + " is not divisible by 5");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// [SECTION] Multidimensional Arrays
|
||||||
|
/*
|
||||||
|
- Multidimensional arrays are useful for storing complex data structures
|
||||||
|
*/
|
||||||
|
|
||||||
|
let chessBoard = [
|
||||||
|
['a1', 'b1', 'c1', 'd1', 'e1', 'f1', 'g1', 'h1'],
|
||||||
|
['a2', 'b2', 'c2', 'd2', 'e2', 'f2', 'g2', 'h2'],
|
||||||
|
['a3', 'b3', 'c3', 'd3', 'e3', 'f3', 'g3', 'h3'],
|
||||||
|
['a4', 'b4', 'c4', 'd4', 'e4', 'f4', 'g4', 'h4'],
|
||||||
|
['a5', 'b5', 'c5', 'd5', 'e5', 'f5', 'g5', 'h5'],
|
||||||
|
['a6', 'b6', 'c6', 'd6', 'e6', 'f6', 'g6', 'h6'],
|
||||||
|
['a7', 'b7', 'c7', 'd7', 'e7', 'f7', 'g7', 'h7'],
|
||||||
|
['a8', 'b8', 'c8', 'd8', 'e8', 'f8', 'g8', 'h8']
|
||||||
|
];
|
||||||
|
|
||||||
|
console.log(chessBoard);
|
||||||
|
|
||||||
|
// Accessing elements of a multidimensional array
|
||||||
|
console.log(chessBoard[1][4]);
|
||||||
|
|
||||||
|
console.log("Pawn moves to: " + chessBoard[1][5]);
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>array manipulation</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,51 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
|
||||||
|
let fruits = ['apple','orange','kiwi','dragonfruit'];
|
||||||
|
|
||||||
|
console.log('current array');
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
let fruitfresh = fruits.push('mango');
|
||||||
|
|
||||||
|
console.log(fruitfresh);
|
||||||
|
console.log('Mutate array from push method');
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
fruits.push('guava');
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
fruits.push('guava', 'durian');
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
function addfruit(fruit){
|
||||||
|
fruits.push(fruit);
|
||||||
|
}
|
||||||
|
// envoke outside the function//
|
||||||
|
addfruit('apple')
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
// unshifts
|
||||||
|
//syntax:
|
||||||
|
//arrayName.unshift('elementa');
|
||||||
|
//arrayName.unshift('elementa', 'elementb');
|
||||||
|
fruits.unshift('lime', 'banana')
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
function addfruit(fruit){
|
||||||
|
fruits.unshift(fruit);
|
||||||
|
}
|
||||||
|
// envoke outside the function//
|
||||||
|
addfruit('calamansi')
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
// shift
|
||||||
|
//syntax: arrayName.shift()
|
||||||
|
|
||||||
|
let fruitsnow = fruits.shift('grapes', 'strawberry')
|
||||||
|
console.log(fruitsnow);
|
||||||
|
console.log(fruits);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>non-mutator</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,99 @@
|
|||||||
|
/*
|
||||||
|
Create functions which can manipulate our arrays.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
|
||||||
|
1. Create a function called displayValues() which is able to receive an array of numbers and display cubed values in the console.
|
||||||
|
- Use the forEach() method to print the square of each number on a new line.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
2. Write a function called celsiusToFahrenheit that takes an array of Celsius temperatures as input returns an array of converted values to Fahrenheit.
|
||||||
|
- Create a new variable inside the function called convertedArray.
|
||||||
|
- Use the map() method to convert each temperature to Fahrenheit and save it into the variable.
|
||||||
|
- return the convertedArray variable.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
3. Write a function called areAllEven that takes an array of numbers as input and returns a boolean which determines if all the numbers given are even or not.
|
||||||
|
- Create a new variable inside the function called isEven.
|
||||||
|
- Use the every() method to check if all the numbers are even and save the result into the variable.
|
||||||
|
- Return the isEven variable.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
4. Write a function called hasDivisibleBy8 that takes an array of numbers as input returns a boolean which determines if the array contains at least one number divisible by 8.
|
||||||
|
- Create a new variable called hasDivisible
|
||||||
|
- Use the some() method to check if at least one of the given values is divisible by 8, save the result in the hasDivisible variable.
|
||||||
|
- Return the hasDivisible variable.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
function hasDivisibleBy8(product);
|
||||||
|
let hasDivisible = productsArray.some(function(product){
|
||||||
|
return(productsArray % 8 );
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
return hasDivisible;
|
||||||
|
console.log(hasDivisible);
|
||||||
|
/*
|
||||||
|
5. Write a function called filterEvenNumbers that takes an array of numbers as input and returns a new array containing only the even numbers from the original array.
|
||||||
|
- Create a new variable called filteredNum
|
||||||
|
- Use the filter() method to create a new array of only the even numbers from the original array save it in the filteredNum variable.
|
||||||
|
- Return the filteredNum variable.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
6. Write a function called getProductNames which is able to receive an array of product objects and return a new array of only the name values of each product.
|
||||||
|
- Create a new variable called productNames
|
||||||
|
- Use the map() method to return only the product names of each product object into a new array which we can save in the productNames variable.
|
||||||
|
- Return the productNames variable.
|
||||||
|
- A given productsArray can be used as an argument to test your function.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
let productsArray = [
|
||||||
|
{
|
||||||
|
name: "Shampoo",
|
||||||
|
price: 90
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Toothbrush",
|
||||||
|
price: 50
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Soap",
|
||||||
|
price: 25
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Toothpaste",
|
||||||
|
price: 45
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
displayValues: typeof displayValues !== 'undefined' ? displayValues : null,
|
||||||
|
areAllEven: typeof areAllEven !== 'undefined' ? areAllEven : null,
|
||||||
|
hasDivisibleBy8: typeof hasDivisibleBy8 !== 'undefined' ? hasDivisibleBy8 : null,
|
||||||
|
celsiusToFahrenheit: typeof celsiusToFahrenheit !== 'undefined' ? celsiusToFahrenheit : null,
|
||||||
|
filterEvenNumbers: typeof filterEvenNumbers !== 'undefined' ? filterEvenNumbers : null,
|
||||||
|
getProductNames: typeof getProductNames !== 'undefined' ? getProductNames : null,
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Non-Mutator Methods</title>
|
||||||
|
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,107 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let countries=[ 'US','PH','CAN','SG','TH','PH','FR','DE'];
|
||||||
|
|
||||||
|
let indexOfArray= countries.indexOf('PH');
|
||||||
|
console.log('Resullt of IndexOf method:');
|
||||||
|
console.log(indexOfArray);
|
||||||
|
|
||||||
|
let slicedArrayA = countries.slice(2);
|
||||||
|
console.log('Resullt of slice method:');
|
||||||
|
console.log(slicedArrayA);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let taskArrayA= [ 'dring html','eat javascript'];
|
||||||
|
let taskArrayB= [ 'dring html','eat javascript'];
|
||||||
|
let taskArrayC= [ 'dring html','eat javascript'];
|
||||||
|
|
||||||
|
let task=taskArrayA.concat(taskArrayB);
|
||||||
|
console.log('Resullt of concat method:');
|
||||||
|
console.log(task);
|
||||||
|
|
||||||
|
let user= [ 'john','jane','joe','jobert'];
|
||||||
|
|
||||||
|
console.log('Resullt of join method:');
|
||||||
|
console.log(user.join());
|
||||||
|
console.log(user.join(' -'));
|
||||||
|
console.log(user.join(' /'));
|
||||||
|
|
||||||
|
|
||||||
|
user.forEach( function(task){
|
||||||
|
console.log(task)
|
||||||
|
});
|
||||||
|
|
||||||
|
let numbers = [ 1,2,3,4,5];
|
||||||
|
|
||||||
|
|
||||||
|
let numberMap = numbers.map(function(number){
|
||||||
|
return number * number;
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('Original Array');
|
||||||
|
console.log(numbers);
|
||||||
|
console.log(numberMap);
|
||||||
|
|
||||||
|
|
||||||
|
let checkedAll= numbers.every(function(number){
|
||||||
|
return(number < 3);
|
||||||
|
});
|
||||||
|
console.log('Results of every method');
|
||||||
|
console.log(checkedAll);
|
||||||
|
|
||||||
|
let someAll= numbers.some(function(number){
|
||||||
|
return(number < 2);
|
||||||
|
});
|
||||||
|
console.log('Results of every method');
|
||||||
|
console.log(someAll);
|
||||||
|
|
||||||
|
if(someAll){
|
||||||
|
console.log('some numbers in the array are greater than 2');
|
||||||
|
}
|
||||||
|
|
||||||
|
let filteredAll= numbers.filter(function(number){
|
||||||
|
return(number == 0);
|
||||||
|
});
|
||||||
|
console.log('Results of filter method');
|
||||||
|
console.log(filteredAll);
|
||||||
|
|
||||||
|
|
||||||
|
let products= [ 'mouse','keyboard','laptop','monitor'];
|
||||||
|
|
||||||
|
let product1=products.includes('mouse');
|
||||||
|
console.log(product1);
|
||||||
|
|
||||||
|
let product2=products.includes('keyboard');
|
||||||
|
console.log(product2);
|
||||||
|
|
||||||
|
|
||||||
|
let includeAll= products.includes(function(products){
|
||||||
|
console.log(includeAll)
|
||||||
|
});
|
||||||
|
console.log('Results of filter method');
|
||||||
|
console.log(filteredAll);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Java=script reactive DOM</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Posts</h1>
|
||||||
|
<div id="div-post-entries"></div>
|
||||||
|
|
||||||
|
<form id="for-add-post">
|
||||||
|
<span>Title</span><br>
|
||||||
|
<input type="text" id='txt-title' /><br>
|
||||||
|
<span>Body</span><br>
|
||||||
|
<textarea type='text' id='txt-body'></textarea><br>
|
||||||
|
<button type="submit">Create</button>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
<h1>Edit Post</h1>
|
||||||
|
<form id="form-edit-post">
|
||||||
|
<input type=" text" id="txt-edit-id" hidden/><br>
|
||||||
|
<span>Title</span><br>
|
||||||
|
<input type="text" id='txt-edit-title' /><br>
|
||||||
|
<span>Body</span><br>
|
||||||
|
<textarea type='text' id='txt-edit-body'></textarea><br>
|
||||||
|
|
||||||
|
<button type="submit"id='btn-submit-update'>Updata</button>
|
||||||
|
<button id="delete-all">DELETE ALL</button></a>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,159 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
// const clicker = document.getElementbyId('clicker');
|
||||||
|
// console.log(clicker);
|
||||||
|
|
||||||
|
// let counter= 0;
|
||||||
|
|
||||||
|
// clicker.eventListener('click', function()){
|
||||||
|
// counter++;
|
||||||
|
// alert('the button has been clicked' + counter + "times")
|
||||||
|
// console.log('the button has been clicked!');
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
|
fetch( 'https://jsonplaceholder.typicode.com/posts')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
// console.log(data);
|
||||||
|
showPosts(data)
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const showPosts = (posts) => {
|
||||||
|
let postEntries = '';
|
||||||
|
|
||||||
|
posts.forEach((post) =>{
|
||||||
|
postEntries += `
|
||||||
|
<div id="post-${post.id}">
|
||||||
|
<h3 id="post-title-${post.id}">${post.title}</h3>
|
||||||
|
<p id="post-body-${post.id}">${post.body}</p>
|
||||||
|
<button onclick="edit-Post">(${post.id}')'Delete'</button>
|
||||||
|
<button onclick="deletePost">(${post.id}')'Delete'</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
`;
|
||||||
|
});
|
||||||
|
|
||||||
|
document.querySelector('#div-post-entries').innerHTML = postEntries;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
document.querySelector('#for-add-post').addEventListener('submit',(event) => {
|
||||||
|
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
let titleInput = document.querySelector('#txt-title');
|
||||||
|
let bodyInput = document.querySelector('#txt-body');
|
||||||
|
|
||||||
|
console.log(titleInput.value);
|
||||||
|
console.log(bodyInput.value);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// edit
|
||||||
|
fetch('https://jsonplaceholder.typicode.com/posts',{
|
||||||
|
method: 'POST',
|
||||||
|
body: JSON.stringify({
|
||||||
|
title:titleInput.value,
|
||||||
|
body:bodyInput.value,
|
||||||
|
userId:1
|
||||||
|
}),
|
||||||
|
headers:{'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
.then(response => response.json())
|
||||||
|
.then((data) => {
|
||||||
|
console.log(data)
|
||||||
|
alert('successfully added.');
|
||||||
|
|
||||||
|
titleInput.value = null;
|
||||||
|
bodyInput.value = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log('Hello for has been submitted');
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
const editPost = (id) =>{
|
||||||
|
let title = document.querySelector(`post-title${id} `).innerHTML;
|
||||||
|
let body = document.querySelector(`post-body${id} `).innerHTML;
|
||||||
|
|
||||||
|
document.querySelector('#txt-edit-id').value = id;
|
||||||
|
document.querySelector('#txt-edit-title-id').value = title;
|
||||||
|
document.querySelector('#txt-edit-body').value = body;
|
||||||
|
document.querySelector('#btn-submit-update').removeAttribute(disabled);
|
||||||
|
};
|
||||||
|
|
||||||
|
document.querySelector('#for-add-post').addEventListener('submit',(e) => {
|
||||||
|
e.preventDefault();
|
||||||
|
|
||||||
|
fetch('https://jsonplaceholder.typicode.com/posts/1',{
|
||||||
|
method: 'PUT',
|
||||||
|
body: JSON.stringify({
|
||||||
|
id: document.querySelector('#txt-edit-id').value,
|
||||||
|
title: document.querySelector('#txt-edit-title').value,
|
||||||
|
body: document.querySelector('#txt-edit-body').value,
|
||||||
|
userId: 1
|
||||||
|
}),
|
||||||
|
headers:{'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
} )
|
||||||
|
.then(response => response.json())
|
||||||
|
.then((data) => {
|
||||||
|
console.log(data)
|
||||||
|
alert('successfully added.');
|
||||||
|
|
||||||
|
|
||||||
|
document.querySelector('#txt-edit-id').value = null;
|
||||||
|
document.querySelector('#txt-edit-title-id').value = null;
|
||||||
|
document.querySelector('#txt-edit-body').value = null;
|
||||||
|
document.querySelector('#btn-submit-update').removeAttribute(disabled, true);
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
// DELETE BUTTON
|
||||||
|
const deletePost = (id) => {
|
||||||
|
const postDiv = document.querySelector(`#post-${id}`);
|
||||||
|
fetch(`https://jsonplaceholder.typicode.com/posts/${id}`, {
|
||||||
|
method: "DELETE",
|
||||||
|
headers: {"Content-type": "application/json"}
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
console.log("Deleted Successfully");
|
||||||
|
alert("Deleted Successfully");
|
||||||
|
postDiv.remove();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
document.querySelector("#delete-all").addEventListener('click', () => {
|
||||||
|
document.querySelector("#div-post-entries").innerHTML = "";
|
||||||
|
alert("All Post Deleted");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,65 @@
|
|||||||
|
//Important Note: Do not change the variable names.
|
||||||
|
//All required classes, variables and function names are listed in the exports.
|
||||||
|
|
||||||
|
// Exponent Operator
|
||||||
|
|
||||||
|
// Template Literals
|
||||||
|
|
||||||
|
// Array Destructuring
|
||||||
|
const address = ["258", "Washington Ave NW", "California", "90011"];
|
||||||
|
|
||||||
|
// Object Destructuring
|
||||||
|
const animal = {
|
||||||
|
name: "Lolong",
|
||||||
|
species: "saltwater crocodile",
|
||||||
|
weight: "1075 kgs",
|
||||||
|
measurement: "20 ft 3 in"
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Arrow Functions
|
||||||
|
let numbers = [1, 2, 3, 4, 5];
|
||||||
|
|
||||||
|
// Javascript Classes
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
getCube: typeof getCube !== 'undefined' ? getCube : null,
|
||||||
|
houseNumber: typeof houseNumber !== 'undefined' ? houseNumber : null,
|
||||||
|
street: typeof street !== 'undefined' ? street : null,
|
||||||
|
state: typeof state !== 'undefined' ? state : null,
|
||||||
|
zipCode: typeof zipCode !== 'undefined' ? zipCode : null,
|
||||||
|
name: typeof name !== 'undefined' ? name : null,
|
||||||
|
species: typeof species !== 'undefined' ? species : null,
|
||||||
|
weight: typeof weight !== 'undefined' ? weight : null,
|
||||||
|
measurement: typeof measurement !== 'undefined' ? measurement : null,
|
||||||
|
reduceNumber: typeof reduceNumber !== 'undefined' ? reduceNumber : null,
|
||||||
|
Dog: typeof Dog !== 'undefined' ? Dog : null
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
numbers.forEach(numbers => {
|
||||||
|
console.log (` ${numbers}`);
|
||||||
|
|
||||||
|
});
|
||||||
|
const reduceNumber = numbers.reduce((accumulator, currentValue) =>
|
||||||
|
accumulator + currentValue, 0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
console.log(reduceNumber); // Output: 15
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Javascript ES6 Updates</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,131 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
|
||||||
|
const firstNum = 8**2;
|
||||||
|
console.log(firstNum);
|
||||||
|
|
||||||
|
const secondNum = Math.pow(8, 2);
|
||||||
|
console.log(secondNum);
|
||||||
|
|
||||||
|
// Template Literal
|
||||||
|
|
||||||
|
let name = 'John';
|
||||||
|
|
||||||
|
let message = 'HEllo' + name + '! Welcome to programming';
|
||||||
|
console.log('Message without template literals '+ message);
|
||||||
|
|
||||||
|
message = `Hello ${name}! Welcome to programming`;
|
||||||
|
console.log(`Messagewith template literals: ${message}`);
|
||||||
|
|
||||||
|
const anotherMessage =` ${name} attended a math competetion. He won it by solving the problem 8**2 with the solution of ${firstNum}.
|
||||||
|
`;
|
||||||
|
console.log(anotherMessage);
|
||||||
|
|
||||||
|
|
||||||
|
const interestRate = .1
|
||||||
|
const principal = 1000
|
||||||
|
|
||||||
|
console.log (`The interest on your saving account is : ${principal*interestRate}`);
|
||||||
|
|
||||||
|
const fullName = ['Juan', 'Dela','Cruz'];
|
||||||
|
console.log(fullName[0]);
|
||||||
|
console.log(fullName[1]);
|
||||||
|
console.log(fullName[2]);
|
||||||
|
|
||||||
|
console.log(`Hello ${fullName[0]}${fullName[1]}${fullName[2]}!Nice to meet you`);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// arrow function
|
||||||
|
const hello = () => {
|
||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
}
|
||||||
|
hello();
|
||||||
|
// Pre-Arrow Function
|
||||||
|
function printFullName(firstName, middleName, lastName){
|
||||||
|
console.log(firstName + ''+middleName+''+lastName);
|
||||||
|
}
|
||||||
|
printFullName('John', 'D','Smith');
|
||||||
|
|
||||||
|
|
||||||
|
// Arrow Function
|
||||||
|
const printFullName2 = (firstName, middleName, lastName) => {
|
||||||
|
console.log(firstName + ''+middleName+''+lastName);
|
||||||
|
}
|
||||||
|
printFullName('John', 'D','Smith');
|
||||||
|
|
||||||
|
// Pre- Arrow Function with loops
|
||||||
|
|
||||||
|
const students =['John','Jane','Judy'];
|
||||||
|
|
||||||
|
students.forEach(function(student){
|
||||||
|
console.log(`${student} is a student`)
|
||||||
|
})
|
||||||
|
|
||||||
|
// Arrow function with loops
|
||||||
|
|
||||||
|
students.forEach(student => {
|
||||||
|
console.log (`${student} is a student`)
|
||||||
|
});
|
||||||
|
|
||||||
|
const add = (x, y) =>{
|
||||||
|
return x + y;
|
||||||
|
}
|
||||||
|
let total = add(1,2);
|
||||||
|
console.log(total)
|
||||||
|
|
||||||
|
|
||||||
|
const greet = (name = 'User') => {
|
||||||
|
console.log(`Good morning, ${name}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
greet();
|
||||||
|
greet('John');
|
||||||
|
|
||||||
|
// [SECTION] Class-Based Object Blueprints
|
||||||
|
/*
|
||||||
|
- Allows creation/instantiation of objects using classes as blueprints
|
||||||
|
- Syntax:
|
||||||
|
class ClassName {
|
||||||
|
constructor(objectPropertyA, objectPropertyB){
|
||||||
|
this.objectPropertyA = objectPropertyA;
|
||||||
|
this.objectPropertyB = objectPropertyB
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
class Car {
|
||||||
|
constructor(brand, name, year) {
|
||||||
|
this.brand = brand;
|
||||||
|
this.name = name;
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instantiating an Object
|
||||||
|
let myCar = new Car();
|
||||||
|
console.log(myCar)
|
||||||
|
|
||||||
|
myCar.brand = "Ford";
|
||||||
|
myCar.name = "Ranger Raptor";
|
||||||
|
myCar.year = 2021;
|
||||||
|
|
||||||
|
console.log(myCar);
|
||||||
|
|
||||||
|
// Creating/instantiating a new object from the Car class with initialized values
|
||||||
|
const myNewCar = new Car("Toyota", "Vios", 2021);
|
||||||
|
console.log(myNewCar);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>activity</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,263 @@
|
|||||||
|
let users = `[
|
||||||
|
{
|
||||||
|
"id": ,
|
||||||
|
"name": "Leanne Graham",
|
||||||
|
"username": "Bret",
|
||||||
|
"email": "Sincere@april.biz",
|
||||||
|
"address": {
|
||||||
|
"street": "Kulas Light",
|
||||||
|
"suite": "Apt. 556",
|
||||||
|
"city": "Gwenborough",
|
||||||
|
"zipcode": "92998-3874",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-37.3159",
|
||||||
|
"lng": "81.1496"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "1-770-736-8031 x56442",
|
||||||
|
"website": hildegard.org",
|
||||||
|
"company": {
|
||||||
|
"name": "Romaguera-Crona",
|
||||||
|
"catchPhrase": "Multi-layered client-server neural-net",
|
||||||
|
"bs": "harness real-time e-markets"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "Ervin Howell",
|
||||||
|
"username": "Antonette",
|
||||||
|
"email": "Shanna@melissa.tv",
|
||||||
|
"address": {
|
||||||
|
"street": "Victor Plains",
|
||||||
|
"suite": "Suite 879",
|
||||||
|
"city": "Wisokyburgh",
|
||||||
|
"zipcode": "90566-7771",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-43.9509",
|
||||||
|
"lng": "-34.4618"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "010-692-6593 x09125",
|
||||||
|
"website": "anastasia.net",
|
||||||
|
"company": {
|
||||||
|
"name": "Deckow-Crist",
|
||||||
|
"catchPhrase": "Proactive didactic contingency",
|
||||||
|
"bs": synergize scalable supply-chains"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Clementine Bauch",
|
||||||
|
"username": "Samantha",
|
||||||
|
"email": "Nathan@yesenia.net",
|
||||||
|
"address": {
|
||||||
|
"street": "Douglas Extension",
|
||||||
|
"suite": "Suite 847",
|
||||||
|
"city": "McKenziehaven",
|
||||||
|
"zipcode": "59590-4157",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-68.6102",
|
||||||
|
"lng": "-47.0653"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "1-463-123-4447",
|
||||||
|
"website": "ramiro.info",
|
||||||
|
"company":
|
||||||
|
"name": "Romaguera-Jacobson",
|
||||||
|
"catchPhrase": "Face to face bifurcated interface",
|
||||||
|
"bs": "e-enable strategic applications"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 4,
|
||||||
|
"name": "Patricia Lebsack",
|
||||||
|
"username": "Karianne",
|
||||||
|
"email": "Julianne.OConner@kory.org",
|
||||||
|
"address": {
|
||||||
|
"street": "Hoeger Mall",
|
||||||
|
"suite": "Apt. 692",
|
||||||
|
"city": "South Elvis",
|
||||||
|
"zipcode": "53919-4257",
|
||||||
|
"geo": {
|
||||||
|
"lat": "29.4572",
|
||||||
|
"lng": "-164.2990"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "493-170-9623 x156",
|
||||||
|
"website": "kale.biz"
|
||||||
|
"company": {
|
||||||
|
"name": "Robel-Corkery",
|
||||||
|
"catchPhrase": "Multi-tiered zero tolerance productivity",
|
||||||
|
"bs": "transition cutting-edge web services"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 5,
|
||||||
|
"name": "Chelsey Dietrich",
|
||||||
|
"username": "Kamren",
|
||||||
|
"email": "Lucio_Hettinger@annie.ca",
|
||||||
|
"address": {
|
||||||
|
"street": "Skiles Walks",
|
||||||
|
"suite": "Suite 351",
|
||||||
|
"city": "Roscoeview",
|
||||||
|
"zipcode": "33263",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-31.8129",
|
||||||
|
"lng": "62.5342"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "(254)954-1289",
|
||||||
|
"website": "demarco.info",
|
||||||
|
"company": {
|
||||||
|
"name": "Keebler LLC",
|
||||||
|
"catchPhrase": "User-centric fault-tolerant solution",
|
||||||
|
"bs": "revolutionize end-to-end systems"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 6,
|
||||||
|
"name": "Mrs. Dennis Schulist",
|
||||||
|
"username": "Leopoldo_Corkery",
|
||||||
|
"email": "Karley_Dach@jasper.info",
|
||||||
|
"address":
|
||||||
|
"street": "Norberto Crossing",
|
||||||
|
"suite": "Apt. 950",
|
||||||
|
"city": "South Christy",
|
||||||
|
"zipcode": "23505-1337",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-71.4197",
|
||||||
|
"lng": "71.7478"
|
||||||
|
|
||||||
|
},
|
||||||
|
"phone": "1-477-935-8478 x6430",
|
||||||
|
"website": "ola.org",
|
||||||
|
"company": {
|
||||||
|
"name": "Considine-Lockman",
|
||||||
|
"catchPhrase": "Synchronised bottom-line interface",
|
||||||
|
"bs": "e-enable innovative applications"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 7,
|
||||||
|
"name": "Kurtis Weissnat",
|
||||||
|
"username": "Elwyn.Skiles",
|
||||||
|
"email": "Telly.Hoeger@billy.biz",
|
||||||
|
"address": {
|
||||||
|
"street": "Rex Trail",
|
||||||
|
"suite": "Suite 280",
|
||||||
|
"city": "Howemouth",
|
||||||
|
"zipcode": "58804-1099",
|
||||||
|
"geo":
|
||||||
|
"lat": "24.8918",
|
||||||
|
"lng": "21.8984"
|
||||||
|
|
||||||
|
},
|
||||||
|
"phone": "210.067.6132",
|
||||||
|
"website": "elvis.io",
|
||||||
|
"company": {
|
||||||
|
"name": "Johns Group",
|
||||||
|
"catchPhrase": "Configurable multimedia task-force",
|
||||||
|
"bs": "generate enterprise e-tailers"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 8,
|
||||||
|
"name": "Nicholas Runolfsdottir V",
|
||||||
|
"username": "Maxime_Nienow",
|
||||||
|
"email": "Sherwood@rosamond.me",
|
||||||
|
"address": {
|
||||||
|
"street": "Ellsworth Summit",
|
||||||
|
"suite": "Suite 729",
|
||||||
|
"city": "Aliyaview",
|
||||||
|
"zipcode": "45169",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-14.3990",
|
||||||
|
"lng": "-120.7677"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"phone": "586.493.6943 x140",
|
||||||
|
"website": "jacynthe.com",
|
||||||
|
"company": {
|
||||||
|
"name": "Abernathy Group",
|
||||||
|
"catchPhrase": "Implemented secondary concept",
|
||||||
|
"bs": "e-enable extensible e-tailers"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 9,
|
||||||
|
"name": "Glenna Reichert",
|
||||||
|
"username": "Delphine",
|
||||||
|
"email": "Chaim_McDermott@dana.io",
|
||||||
|
"address": {
|
||||||
|
"street": "Dayna Park",
|
||||||
|
"suite": "Suite 449",
|
||||||
|
"city": "Bartholomebury",
|
||||||
|
"zipcode": "76495-3109",
|
||||||
|
"geo": {
|
||||||
|
"lat": "24.6463"
|
||||||
|
"lng": "-168.8889"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "(775)976-6794 x41206",
|
||||||
|
"website": "conrad.com",
|
||||||
|
"company": {
|
||||||
|
"name": "Yost and Sons",
|
||||||
|
"catchPhrase": "Switchable contextually-based project",
|
||||||
|
"bs": "aggregate real-time technologies"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"name": "Clementina DuBuque",
|
||||||
|
"username": "Moriah.Stanton",
|
||||||
|
"email": "Rey.Padberg@karina.biz",
|
||||||
|
"address": {
|
||||||
|
"street" "Kattie Turnpike",
|
||||||
|
"suite": "Suite 198",
|
||||||
|
"city": "Lebsackbury",
|
||||||
|
"zipcode": "31428-2261",
|
||||||
|
"geo": {
|
||||||
|
"lat": "-38.2386",
|
||||||
|
"lng": "57.2232"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"phone": "024-648-3804",
|
||||||
|
"website": "ambrose.net",
|
||||||
|
"company": {
|
||||||
|
"name": "Hoeger LLC",
|
||||||
|
"catchPhrase": "Centralized empowering task-force",
|
||||||
|
bs": "target end-to-end models"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]`;
|
||||||
|
|
||||||
|
let parsedUsers = JSON.parse(users)
|
||||||
|
console.log(parsedUsers);
|
||||||
|
|
||||||
|
|
||||||
|
//Objective 2:
|
||||||
|
|
||||||
|
let product;[{'Home Desktop Table'}];
|
||||||
|
|
||||||
|
//Stringify an object with the following properties and save it in the given stringifiedProduct variable:
|
||||||
|
let stringifiedProduct;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
//Note: Do not change any variable and function names. All variables and functions to be checked are listed in the exports.
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
|
||||||
|
parsedUsers: typeof parsedUsers !== 'undefined' ? parsedUsers : null,
|
||||||
|
product: typeof product !== 'undefined' ? product : null,
|
||||||
|
stringifiedProduct: typeof stringifiedProduct !== 'undefined' ? stringifiedProduct : null
|
||||||
|
|
||||||
|
}
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Introduction to JSON</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript"src='index.js'></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,32 @@
|
|||||||
|
console.log('hello world');
|
||||||
|
|
||||||
|
// JSON Objects
|
||||||
|
|
||||||
|
// {
|
||||||
|
// "city": "Quezon City",
|
||||||
|
// "province": "Metro Manila",
|
||||||
|
// "country": "Philippines"
|
||||||
|
// }
|
||||||
|
|
||||||
|
// "cities":[
|
||||||
|
// {"city":"Quezon City","province":"Metro Manila","contry":"Philippines"},
|
||||||
|
// {"city":"Quezon City","province":"Metro Manila","contry":"Philippines"},
|
||||||
|
// {"city":"Quezon City","province":"Metro Manila","contry":"Philippines"}]
|
||||||
|
|
||||||
|
|
||||||
|
let batchesArr = [{ batchKate: "Batch X" }, { batchName: "Batch Y" }];
|
||||||
|
|
||||||
|
console.log("Result from stringify method:");
|
||||||
|
console.log(JSON.stringify(batchesArr));
|
||||||
|
|
||||||
|
// Another Example
|
||||||
|
let data = JSON.stringify({
|
||||||
|
name: 'John',
|
||||||
|
age: 31,
|
||||||
|
address: {
|
||||||
|
city: 'Manila',
|
||||||
|
country: 'Philippines'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log(data);
|
Binary file not shown.
@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
// orders
|
||||||
|
{
|
||||||
|
"_id":"or101",
|
||||||
|
"name": "Backpack",
|
||||||
|
"description":"Light Weight and Water Proof",
|
||||||
|
"price": 1000,
|
||||||
|
"stocks":"200",
|
||||||
|
"isActive":true,
|
||||||
|
"sku":"true"
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// orders Product
|
||||||
|
{
|
||||||
|
"_id":"or102",
|
||||||
|
"orderId":"101",
|
||||||
|
"productId":"001",
|
||||||
|
"quantity":"1",
|
||||||
|
"price":1000,
|
||||||
|
"subTotal":1000
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"_id":"or101",
|
||||||
|
"name": "Backpack",
|
||||||
|
"description":"Light Weight and Water Proof",
|
||||||
|
"price": 1000,
|
||||||
|
"stocks":"200",
|
||||||
|
"isActive":true,
|
||||||
|
"sku":"p100"
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
product.json
|
@ -0,0 +1 @@
|
|||||||
|
users.json
|
Binary file not shown.
@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
"_id":"601ccbe89bcd482ee8fa2c99",
|
||||||
|
"name":"HTML",
|
||||||
|
"description":"Learn the basics on how to code",
|
||||||
|
"price":1000,
|
||||||
|
"isActive":true,
|
||||||
|
"slots":20,
|
||||||
|
"enrolles":[
|
||||||
|
"601ccbe89bcd482ee8fa2c99"
|
||||||
|
"507f191e810c19729de860ea"],
|
||||||
|
"datetimeCreated":"2020-03-15T15:00:00.00Z"
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
"_id":"601ccbe89bcd482ee8fa2c99",
|
||||||
|
"name":"CSS",
|
||||||
|
"description":"Let's make out application look cool!",
|
||||||
|
"price":2000,
|
||||||
|
"isActive":false,
|
||||||
|
"slots":20,
|
||||||
|
"enrolles":[
|
||||||
|
"507f191e810c19729de860ea"],
|
||||||
|
"datetimeCreated":"2020-03-15T15:00:00.00Z"
|
||||||
|
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"_id":"507f191e810c19729de860ea",
|
||||||
|
"name":"JavaScript",
|
||||||
|
"description":"Let's make out application look cool!",
|
||||||
|
"price":4000,
|
||||||
|
"isActive":false,
|
||||||
|
"slots":15,
|
||||||
|
"enrolles":[],
|
||||||
|
"datetimeCreated":"2020-03-15T15:00:00.00Z"
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 68 KiB |
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"_id":"601ccbe89bcd482ee8fa2c99",
|
||||||
|
"userId":"507f191e810c19729de860ea",
|
||||||
|
"courseId":"603e10d3b30fd23b081a94eb",
|
||||||
|
"ispaid":true,
|
||||||
|
"paymentMethod":"Paypal",
|
||||||
|
"datetimeCreated":"2020-03-15T15:00:00.00Z"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"_id":"601ccbe89bcd482ee8fa2c99",
|
||||||
|
"userId":"507f191e810c19729de860ea",
|
||||||
|
"courseId":"603e10d3b30fd23b081a94eb",
|
||||||
|
"ispaid":true,
|
||||||
|
"paymentMethod":"Gcash",
|
||||||
|
"datetimeCreated":"2020-03-15T15:00:00.00Z"
|
||||||
|
}
|
@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
|
||||||
|
"_id": "507f1f77bcf86cd799439011",
|
||||||
|
"firstName": "John",
|
||||||
|
"lastName": "Smith",
|
||||||
|
"email": "johnsmith@email.com",
|
||||||
|
"password":"johnsmithhandsome",
|
||||||
|
"isAdmin":false,
|
||||||
|
"mobileNumber":"09123456789",
|
||||||
|
"enrollments":[
|
||||||
|
"601ccbe89bcd482ee8fa2c99"
|
||||||
|
"507f191e810c19729de860ea",
|
||||||
|
],
|
||||||
|
"datetimeRegistered":"2020-03-15T15:00:00.00Z"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
"_id": "507f1f77bcf86cd799439011",
|
||||||
|
"firstName": "Jane",
|
||||||
|
"lastName": "Doe",
|
||||||
|
"email": "janedoe@email.com",
|
||||||
|
"password":"janedoe12",
|
||||||
|
"isAdmin":true,
|
||||||
|
"mobileNumber":"09123456789",
|
||||||
|
"enrollments":[],
|
||||||
|
"datetimeRegistered":"2020-03-15T15:00:00.00Z"
|
||||||
|
}
|
@ -0,0 +1,11 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>JavaScript</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script type="text/javascript" src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,127 @@
|
|||||||
|
// S34 - MongoDB CRUD Operations Activity Template:
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Sample solution:
|
||||||
|
|
||||||
|
async function addOneQuery(db) {
|
||||||
|
await (
|
||||||
|
|
||||||
|
//add query here
|
||||||
|
|
||||||
|
db.collectionName.insertOne({
|
||||||
|
field1: "value1",
|
||||||
|
field2: "value2"
|
||||||
|
}) //DO NOT ADD SEMICOLON.
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
return(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
Note:
|
||||||
|
- Do note change the functionName or modify the exports
|
||||||
|
- Do not add semicolon after query
|
||||||
|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 1. Insert a single room (insertOne method) in the rooms collection:
|
||||||
|
|
||||||
|
async function addOneFunc(db) {
|
||||||
|
|
||||||
|
await (
|
||||||
|
db.hotel.insertMany({
|
||||||
|
name:"single",
|
||||||
|
accomodates:2,
|
||||||
|
price:1000,
|
||||||
|
description:"A simple room with all the basic neccessities",
|
||||||
|
rooms_availbale:10,
|
||||||
|
isAvaile:false
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return(db);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 2. Insert multiple rooms (insertMany method) in the rooms collection
|
||||||
|
// member2
|
||||||
|
async function addManyFunc(db) {
|
||||||
|
|
||||||
|
await (
|
||||||
|
db.hotel.insertMany({
|
||||||
|
name:"double",
|
||||||
|
accomodates:3,
|
||||||
|
price:2000,
|
||||||
|
description:"Aroom fit for small family going on vacation",
|
||||||
|
rooms_availbale:5,
|
||||||
|
isAvaile:false
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
return(db);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 3. Use the findOne method to search for a room with the name double.
|
||||||
|
async function findRoom(db) {
|
||||||
|
return await (
|
||||||
|
|
||||||
|
db.hotel.findOne({name:"double"})
|
||||||
|
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// 4. Use the updateOne method to update the queen room and set the available rooms to 0.
|
||||||
|
|
||||||
|
function updateOneFunc(db) {
|
||||||
|
|
||||||
|
db.hotel.updateOne({name:"queen"}){
|
||||||
|
rooms_availbale:0
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 4.5
|
||||||
|
|
||||||
|
function updateOneFunc(db) {
|
||||||
|
await(
|
||||||
|
db.hotel.insertMany({
|
||||||
|
$set:{
|
||||||
|
name:"queen",
|
||||||
|
accomodates:4,
|
||||||
|
price:4000,
|
||||||
|
description:"A room with queen sixed bed for a simple gateaway",
|
||||||
|
rooms_availbale:15,
|
||||||
|
isAvaile:false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
);
|
||||||
|
|
||||||
|
return(db);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 5. Use the deleteMany method to delete all rooms that have 0 rooms available.
|
||||||
|
function deleteManyFunc(db) {
|
||||||
|
|
||||||
|
db.hotel.deleteMany({rooms_availbale:0})
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
addOneFunc,
|
||||||
|
addManyFunc,
|
||||||
|
updateOneFunc,
|
||||||
|
deleteManyFunc,
|
||||||
|
findRoom
|
||||||
|
};
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
};
|
||||||
|
|
@ -0,0 +1,256 @@
|
|||||||
|
// CRUD Operations
|
||||||
|
|
||||||
|
/*
|
||||||
|
- CRUD Operations are the heart of any backend application.
|
||||||
|
- Mastering the CRUD operations is essential for any developer
|
||||||
|
- CRUD stands for CREATE, READ, UPDATE, and DELETE
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// [SECTION] Inserting documents (Create)
|
||||||
|
|
||||||
|
// Insert One Document
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.insertOne({object});
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.insertOne({
|
||||||
|
firstName: "Jane",
|
||||||
|
lastName: "Doe",
|
||||||
|
age: 21,
|
||||||
|
contact: {
|
||||||
|
phone: "87654321",
|
||||||
|
email: "janedoe@gmail.com"
|
||||||
|
},
|
||||||
|
course: ["CSS", "JavaScript", "Python"],
|
||||||
|
department: "none"
|
||||||
|
});
|
||||||
|
|
||||||
|
// Insert Many
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.insertMany([{Object A}, {Object B}]);
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.insertMany([
|
||||||
|
{
|
||||||
|
firstName: "Stephen",
|
||||||
|
lastName: "Hawking",
|
||||||
|
age: 79,
|
||||||
|
contact: {
|
||||||
|
phone: "87654321",
|
||||||
|
email: "stephenhawking@gmail.com"
|
||||||
|
},
|
||||||
|
course: ["Python", "React", "PHP"],
|
||||||
|
department: "none"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
firstName: "Neil",
|
||||||
|
lastName: "Armstrong",
|
||||||
|
age: 82,
|
||||||
|
contact: {
|
||||||
|
phone: "87654321",
|
||||||
|
email: "neilarmstrong@gmail.com"
|
||||||
|
},
|
||||||
|
course: ["React", "Laravel", "Sass"],
|
||||||
|
department: "none"
|
||||||
|
}
|
||||||
|
|
||||||
|
]);
|
||||||
|
|
||||||
|
// [SECTION] Finding Documents (Read)
|
||||||
|
|
||||||
|
// Find Single Document
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.findOne();
|
||||||
|
db.collectionName.findOne({ field: value });
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Leaving the search criteria empty will retrieve ALL the documents
|
||||||
|
db.users.find();
|
||||||
|
|
||||||
|
// This will retrieve the first document
|
||||||
|
db.users.findOne();
|
||||||
|
// criteria
|
||||||
|
db.users.findOne({ firstName: "Stephen" });
|
||||||
|
|
||||||
|
// Finding Multiple Documents
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.find({ fieldA: valueA });
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.find({ department: "none" });
|
||||||
|
|
||||||
|
// Finding multiple documents with multiple parameters (criteria)
|
||||||
|
db.users.find({ department: "none", age: 82 });
|
||||||
|
|
||||||
|
// [SECTION] Updating Documents (Update)
|
||||||
|
|
||||||
|
// Updating a single document
|
||||||
|
|
||||||
|
// Creating document to update
|
||||||
|
db.users.insertOne({
|
||||||
|
firstName: "Test",
|
||||||
|
lastName: "Test",
|
||||||
|
age: 0,
|
||||||
|
contact: {
|
||||||
|
phone: "000000",
|
||||||
|
email: "test@gmail.com"
|
||||||
|
},
|
||||||
|
courses: [],
|
||||||
|
department: "none"
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Just like the "find" methos, methods that only manipulate a sigle document will only manipulate a single document will only update the FIST document that matches the search criteria
|
||||||
|
- Syntax:
|
||||||
|
db.collectionName.updateOne({criteria}, {$set: {field: value}});
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.updateOne({ firstName: "Test" }, {
|
||||||
|
$set: {
|
||||||
|
firstName: "Bill",
|
||||||
|
lastName: "Gates",
|
||||||
|
age: 65,
|
||||||
|
contact: {
|
||||||
|
phone: "12345678",
|
||||||
|
email: "bill@gmail.com"
|
||||||
|
},
|
||||||
|
courses: ["PHP", "Laravel", "HTML"],
|
||||||
|
department: "Operations",
|
||||||
|
status: "active"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
db.users.find({ firstName: "Bill" });
|
||||||
|
|
||||||
|
// Another Example using _id
|
||||||
|
db.users.updateOne({ _id: ObjectId("6514da527c5d7043df600f54") }, {
|
||||||
|
$set: {
|
||||||
|
firstName: "Elon",
|
||||||
|
lastName: "Musk",
|
||||||
|
age: 65,
|
||||||
|
contact: {
|
||||||
|
phone: "12345678",
|
||||||
|
email: "elon@gmail.com"
|
||||||
|
},
|
||||||
|
courses: ["PHP", "Laravel", "HTML"],
|
||||||
|
department: "Operations",
|
||||||
|
status: "active"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
db.users.updateOne({ _id: ObjectId("6514da527c5d7043df600f54") }, {
|
||||||
|
$set: {
|
||||||
|
firstName: "Bill",
|
||||||
|
lastName: "Gates"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Updating multiple documents
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.updateMany({ criteria }, {$set: { field: value }});
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.updateMany({department: "none"}, {
|
||||||
|
$set: {
|
||||||
|
department: "HR"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
db.users.find();
|
||||||
|
|
||||||
|
|
||||||
|
// Replace One
|
||||||
|
/*
|
||||||
|
- Can be used if replacing the whole document is necessary.
|
||||||
|
- Syntax:
|
||||||
|
db.collectionName.replaceOne( { criteria }, { field: value } );
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.replaceOne({firstName: "Bill"}, {
|
||||||
|
|
||||||
|
firstName: "Bill",
|
||||||
|
lastName: "Gates",
|
||||||
|
age: 70,
|
||||||
|
contact: {
|
||||||
|
phone: "123123123",
|
||||||
|
email: "billgates@gmail.com"
|
||||||
|
},
|
||||||
|
courses: ["PHP", "Laravel", "CSS"],
|
||||||
|
department: "Operations"
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// [SECTION] Deleting Documents (Delete)
|
||||||
|
|
||||||
|
// Create a document to delete
|
||||||
|
db.users.insert({
|
||||||
|
firstName: "test"
|
||||||
|
});
|
||||||
|
|
||||||
|
// Deleting a single Document
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.deleteOne({criteria});
|
||||||
|
*/
|
||||||
|
db.users.deleteOne({
|
||||||
|
firstName: "test"
|
||||||
|
});
|
||||||
|
|
||||||
|
db.users.find();
|
||||||
|
|
||||||
|
// Delete Many
|
||||||
|
/*
|
||||||
|
|
||||||
|
DO NOT USE: db.collectionName.deleteMany();
|
||||||
|
|
||||||
|
Syntax:
|
||||||
|
db.collectionName.deleteMany({criteria});
|
||||||
|
*/
|
||||||
|
|
||||||
|
db.users.deleteMany({
|
||||||
|
firstName: "Bill"
|
||||||
|
});
|
||||||
|
|
||||||
|
db.users.find();
|
||||||
|
|
||||||
|
// TAKE HOME QUIZ
|
||||||
|
|
||||||
|
// [SECTION] Advanced Queries
|
||||||
|
|
||||||
|
// 1. Query an embedded document
|
||||||
|
/*
|
||||||
|
- find all the document with the following contact:
|
||||||
|
phone: "87654321",
|
||||||
|
email: "stephenhawking@gmail.com"
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 2. Query on nested Field
|
||||||
|
/*
|
||||||
|
- find the document that has an email of "janedoe@gmail.com"
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 3. Query an Array with Exact Elements
|
||||||
|
/*
|
||||||
|
- find a document with the has the courses
|
||||||
|
- CSS
|
||||||
|
- JavaScript
|
||||||
|
- Python
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 4. Querying an array without regard to order
|
||||||
|
/*
|
||||||
|
- find all the documents with the following courses
|
||||||
|
- React
|
||||||
|
- Python
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
// S35 - MongoDB Query Operators and Field Projection:
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Sample solution:
|
||||||
|
|
||||||
|
return async function findName(db) {
|
||||||
|
await (db.collectionName.find({
|
||||||
|
$and: [
|
||||||
|
{field1: "value1"},
|
||||||
|
{field2: "value2"}
|
||||||
|
]
|
||||||
|
}));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Note:
|
||||||
|
- Do note change the functionName or modify the exports
|
||||||
|
- Delete all the comments before pushing.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 1. Find users with letter s in their first name or d in their last name.
|
||||||
|
async function findName(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
db.users.find({firstName:,{$regex: "s", $options:"i"}});
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
// 2. Find users who are from the HR department and their age is greater than or equal to 70.
|
||||||
|
async function findDeptAge(db) {
|
||||||
|
return await (
|
||||||
|
|
||||||
|
// Add query here
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 3. Find users with the letter e in their last name and has an age of less than or equal to 30.
|
||||||
|
async function findNameAge(db) {
|
||||||
|
return await (
|
||||||
|
|
||||||
|
db.users.find({lastName:{$regex: "e", $options:"i"}},{$lte:30});
|
||||||
|
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
findName,
|
||||||
|
findDeptAge,
|
||||||
|
findNameAge
|
||||||
|
};
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
};
|
@ -0,0 +1,87 @@
|
|||||||
|
// S36 - Aggregation in MongoDB and Query Case Studies:
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Sample solution:
|
||||||
|
|
||||||
|
return async function addOneQuery(db) {
|
||||||
|
await (db.collectionName.aggregate([
|
||||||
|
{ $match: { fieldA, valueA } },
|
||||||
|
{ $group: { _id: "$fieldB" }, { result: { operation } } }
|
||||||
|
]));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Note:
|
||||||
|
- Do note change the functionName or modify the exports
|
||||||
|
- Delete all the comments before pushing.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// 1. Use the count operator to count the total number of fruits on sale
|
||||||
|
async function fruitsOnSale(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
// Add query here
|
||||||
|
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 2. Use the count operator to count the total number of fruits with stock more than 20
|
||||||
|
async function fruitsInStock(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
db.fruits.aggregation([
|
||||||
|
{$count: "stock" , {$gt: 20}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 3. Use the average operator to get the average price of fruits onSale per supplier
|
||||||
|
async function fruitsAvePrice(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
db.fruits.aggregation([
|
||||||
|
{$match: {$onsale:true},
|
||||||
|
{$group: {$supplier_id, averagePrice: {$avg :"$price"}}}
|
||||||
|
}
|
||||||
|
}]);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 4. Use the max operator to get the highest price of a fruit per supplier
|
||||||
|
async function fruitsHighPrice(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
// Add query here
|
||||||
|
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 5. Use the min operator to get the lowest price of a fruit per supplier
|
||||||
|
async function fruitsLowPrice(db) {
|
||||||
|
return await(
|
||||||
|
|
||||||
|
// Add query here
|
||||||
|
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try{
|
||||||
|
module.exports = {
|
||||||
|
fruitsOnSale,
|
||||||
|
fruitsInStock,
|
||||||
|
fruitsAvePrice,
|
||||||
|
fruitsHighPrice,
|
||||||
|
fruitsLowPrice
|
||||||
|
};
|
||||||
|
} catch(err){
|
||||||
|
|
||||||
|
};
|
Binary file not shown.
@ -0,0 +1,21 @@
|
|||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
const directory = [{
|
||||||
|
"name":"Dustin",
|
||||||
|
"email":"dustin@gmail.com"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"name":"Dustin",
|
||||||
|
"email":"dustin@gmail.com"
|
||||||
|
}];
|
||||||
|
|
||||||
|
http.createServer(function(request,response){
|
||||||
|
|
||||||
|
if(request.url == "/users" && request.method == "GET"){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}).listen(4000);
|
||||||
|
console.log("Server running at localhost:4000")
|
@ -0,0 +1,26 @@
|
|||||||
|
//Add solution here
|
||||||
|
|
||||||
|
let http = require("http");
|
||||||
|
|
||||||
|
const port = 3000;
|
||||||
|
|
||||||
|
|
||||||
|
const app = http.createServer( (request, response) => {
|
||||||
|
|
||||||
|
if(request.url =="/login"){
|
||||||
|
|
||||||
|
response.writeHead(200, {'Content-type': 'text/plain'});
|
||||||
|
response.end('Welcome to the login page.');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
response.writeHead(404, {'content-type': 'text/plain'});
|
||||||
|
response.end("404: I'm Sorry the page you are looking for cannot be found.");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(port);
|
||||||
|
console.log(`Server is currently running on localhost:${port}`);
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
module.exports = {app}
|
Binary file not shown.
@ -0,0 +1,48 @@
|
|||||||
|
// dependencies and modules
|
||||||
|
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
const courseSchwema = new mongoose.Schema({
|
||||||
|
name:{
|
||||||
|
type:String,
|
||||||
|
required: [true,"Course is required"]
|
||||||
|
},
|
||||||
|
|
||||||
|
description: {
|
||||||
|
type:String,
|
||||||
|
required:[true, "Description is required"]
|
||||||
|
},
|
||||||
|
|
||||||
|
price:{
|
||||||
|
type:number
|
||||||
|
required:[true, "Price is required"]
|
||||||
|
},
|
||||||
|
|
||||||
|
isActive:{
|
||||||
|
type: Boolean,
|
||||||
|
default: true
|
||||||
|
},
|
||||||
|
|
||||||
|
createdOn:{
|
||||||
|
type:Date,
|
||||||
|
default: new Date()
|
||||||
|
},
|
||||||
|
|
||||||
|
enrollees:[{
|
||||||
|
|
||||||
|
userID:{
|
||||||
|
type:String
|
||||||
|
required:[true, "User Id is required"]
|
||||||
|
},
|
||||||
|
enrolledOn:{
|
||||||
|
type: Date,
|
||||||
|
default: new Date
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
// Model Exports
|
||||||
|
module.exports = mongoose.model('Course', courseSchema);
|
Binary file not shown.
@ -0,0 +1,85 @@
|
|||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
const directory = [{
|
||||||
|
"name": "Brandon",
|
||||||
|
"email": "brandon@mail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jobert",
|
||||||
|
"email": "jobert@mail.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const port = 4000;
|
||||||
|
|
||||||
|
const http = require('http');
|
||||||
|
|
||||||
|
// Mock Database
|
||||||
|
let directory = [
|
||||||
|
{
|
||||||
|
"name": "Brandon",
|
||||||
|
"email": "brandon@mail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jobert",
|
||||||
|
"email": "jobert@mail.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
let port = 4000;
|
||||||
|
|
||||||
|
let app = http.createServer(function(request, response){
|
||||||
|
|
||||||
|
// Route for returning all items upon receiving a GET request
|
||||||
|
if(request.url == "/users" && request.method == "GET"){
|
||||||
|
|
||||||
|
// Sets the status code to 200 and sets response output to JSON data type
|
||||||
|
response.writeHead(200, {'Content-Type': 'application/json'});
|
||||||
|
|
||||||
|
// using write() method of the response object to send a response to the client in a JSON format
|
||||||
|
// JSON.stringify() method converts the JavaScript array of objects into JSON string.
|
||||||
|
response.write(JSON.stringify(directory));
|
||||||
|
|
||||||
|
// Ends our response process
|
||||||
|
response.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Route for creating a new item upon receiving a post request
|
||||||
|
/*
|
||||||
|
A request object contains several parts:
|
||||||
|
- Headers - contains information about the request context/content
|
||||||
|
- Body - contains the actual information being sent with the request
|
||||||
|
*/
|
||||||
|
if(request.url == "/users" && request.method == "POST"){
|
||||||
|
|
||||||
|
let requestBody = '';
|
||||||
|
|
||||||
|
// Data is received from the client and is processed in the "data" stream
|
||||||
|
request.on('data', function(data){
|
||||||
|
requestBody += data;
|
||||||
|
});
|
||||||
|
|
||||||
|
// request end step - only runs after the request has completely been started
|
||||||
|
request.on('end', function(){
|
||||||
|
|
||||||
|
console.log(typeof requestBody);
|
||||||
|
|
||||||
|
requestBody = JSON.parse(requestBody);
|
||||||
|
|
||||||
|
let newUser = {
|
||||||
|
"name": requestBody.name,
|
||||||
|
"email": requestBody.email
|
||||||
|
}
|
||||||
|
|
||||||
|
directory.push(newUser);
|
||||||
|
console.log(directory);
|
||||||
|
|
||||||
|
response.writeHead(200, {'Content-Type': 'application/json'});
|
||||||
|
response.write(JSON.stringify(newUser));
|
||||||
|
response.end();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
app.listen(port, () => console.log(`Server running at localhost:${4000}`));
|
@ -0,0 +1,20 @@
|
|||||||
|
// Node.js Routing with HTTP Method
|
||||||
|
const http = require('http');
|
||||||
|
const port = 4000
|
||||||
|
const app =http.createServer((request,response) =>{
|
||||||
|
if(request.url == '/items' && request.method == 'GET'){
|
||||||
|
|
||||||
|
response.writeHead(200,{'Content-Type':'text/plain'});
|
||||||
|
response.end('Data retrieve from the datebase');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(request.url == '/items' && request.method == 'POST'){
|
||||||
|
|
||||||
|
response.writeHead(200,{'Content-Type':'text/plain'});
|
||||||
|
response.end('Data to be sent to the datebase');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// or const http =require.createServer(function(request,response){
|
||||||
|
// });
|
||||||
|
app.listen (port,() => console.log(`Server running at localhost:${port}`));
|
||||||
|
|
@ -0,0 +1,12 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Activity s39</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script src="./index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,122 @@
|
|||||||
|
//Note: don't add a semicolon at the end of then().
|
||||||
|
//Fetch answers must be inside the await () for each function.
|
||||||
|
//Each function will be used to check the fetch answers.
|
||||||
|
//Don't console log the result/json, return it.
|
||||||
|
|
||||||
|
// Get Single To Do [Sample]
|
||||||
|
/* async function getSingleToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
} */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Getting all to do list item
|
||||||
|
async function getAllToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
fetch('https://jsonplaceholder.typicode.com/todos')
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
data.map((elem) => {
|
||||||
|
return elem.title
|
||||||
|
})
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// [Section] Getting a specific to do list item
|
||||||
|
async function getSpecificToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
|
||||||
|
//Add fetch here.
|
||||||
|
fetch('https://jsonplaceholder.typicode.com/todos/1')
|
||||||
|
.then((response) => response.json())
|
||||||
|
.then((json) => json)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// [Section] Creating a to do list item using POST method
|
||||||
|
async function createToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
|
||||||
|
fetch("https://jsonplaceholder.typicode.com/todos", {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'Application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
"userId": 1,
|
||||||
|
"title": "Actio non",
|
||||||
|
"completed": false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then((json) => json)
|
||||||
|
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// [Section] Updating a to do list item using PUT method
|
||||||
|
async function updateToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
|
||||||
|
//Add fetch here.
|
||||||
|
fetch('https://jsonplaceholder.typicode.com/todos/1', {
|
||||||
|
method: "PUT",
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
id: 1,
|
||||||
|
title: 'Updated To Do List Item',
|
||||||
|
description: 'To update my to do list with a different data structure',
|
||||||
|
status: 'Pending',
|
||||||
|
dateCompleted: 'Pending',
|
||||||
|
userId: 1
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(json => console.log(json))
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
// [Section] Deleting a to do list item
|
||||||
|
async function deleteToDo() {
|
||||||
|
|
||||||
|
return await (
|
||||||
|
fetch("https://jsonplaceholder.typicode.com/todos/1", {
|
||||||
|
method: "DELETE"
|
||||||
|
})
|
||||||
|
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Do not modify
|
||||||
|
//For exporting to test.js
|
||||||
|
try {
|
||||||
|
module.exports = {
|
||||||
|
getSingleToDo: typeof getSingleToDo !== 'undefined' ? getSingleToDo : null,
|
||||||
|
getAllToDo: typeof getAllToDo !== 'undefined' ? getAllToDo : null,
|
||||||
|
getSpecificToDo: typeof getSpecificToDo !== 'undefined' ? getSpecificToDo : null,
|
||||||
|
createToDo: typeof createToDo !== 'undefined' ? createToDo : null,
|
||||||
|
updateToDo: typeof updateToDo !== 'undefined' ? updateToDo : null,
|
||||||
|
deleteToDo: typeof deleteToDo !== 'undefined' ? deleteToDo : null,
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,100 @@
|
|||||||
|
{
|
||||||
|
"info": {
|
||||||
|
"_postman_id": "649466f2-0332-4044-b49c-d327542d1436",
|
||||||
|
"name": "s39 Activity",
|
||||||
|
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
|
||||||
|
"_exporter_id": "30178270"
|
||||||
|
},
|
||||||
|
"item": [
|
||||||
|
{
|
||||||
|
"name": "getAllToDo",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "https://jsonplaceholder.typicode.com/todos",
|
||||||
|
"protocol": "https",
|
||||||
|
"host": [
|
||||||
|
"jsonplaceholder",
|
||||||
|
"typicode",
|
||||||
|
"com"
|
||||||
|
],
|
||||||
|
"path": [
|
||||||
|
"todos"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "getSpecificToDo",
|
||||||
|
"request": {
|
||||||
|
"method": "GET",
|
||||||
|
"header": []
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "createToDo",
|
||||||
|
"request": {
|
||||||
|
"method": "POST",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "https://jsonplaceholder.typicode.com/todos",
|
||||||
|
"protocol": "https",
|
||||||
|
"host": [
|
||||||
|
"jsonplaceholder",
|
||||||
|
"typicode",
|
||||||
|
"com"
|
||||||
|
],
|
||||||
|
"path": [
|
||||||
|
"todos"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "updateToDo",
|
||||||
|
"request": {
|
||||||
|
"method": "PUT",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "https://jsonplaceholder.typicode.com/todos/1",
|
||||||
|
"protocol": "https",
|
||||||
|
"host": [
|
||||||
|
"jsonplaceholder",
|
||||||
|
"typicode",
|
||||||
|
"com"
|
||||||
|
],
|
||||||
|
"path": [
|
||||||
|
"todos",
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deleteToDo",
|
||||||
|
"request": {
|
||||||
|
"method": "DELETE",
|
||||||
|
"header": [],
|
||||||
|
"url": {
|
||||||
|
"raw": "https://jsonplaceholder.typicode.com/todos/1",
|
||||||
|
"protocol": "https",
|
||||||
|
"host": [
|
||||||
|
"jsonplaceholder",
|
||||||
|
"typicode",
|
||||||
|
"com"
|
||||||
|
],
|
||||||
|
"path": [
|
||||||
|
"todos",
|
||||||
|
"1"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"response": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
node_modules
|
@ -0,0 +1,146 @@
|
|||||||
|
/*
|
||||||
|
Introduction to Express.js
|
||||||
|
*/
|
||||||
|
|
||||||
|
// import express module
|
||||||
|
const express = require('express');
|
||||||
|
|
||||||
|
// Create an application using express
|
||||||
|
const app = express();
|
||||||
|
|
||||||
|
// Port
|
||||||
|
const port = 4000;
|
||||||
|
|
||||||
|
// Middlewares
|
||||||
|
/*
|
||||||
|
- Middleware is a software that provides common services and capabilities to application outside of what is offered by the system/
|
||||||
|
- API management is one of the common application of middlewares
|
||||||
|
*/
|
||||||
|
// Allows our app to read JSON data
|
||||||
|
app.use(express.json());
|
||||||
|
// Allows our app to read data from forms and extend the data types that our app will support
|
||||||
|
app.use(express.urlencoded({extended: true}));
|
||||||
|
|
||||||
|
|
||||||
|
// [Section] Routes
|
||||||
|
|
||||||
|
/*
|
||||||
|
- Express has methods corresponding to each HTTP method
|
||||||
|
- This route expects to receive a GET request at the base URI "/"
|
||||||
|
*/
|
||||||
|
app.get("/", (req, res) => {
|
||||||
|
|
||||||
|
// Once the route is accessed, it will send a string response containing "Hello world"
|
||||||
|
// we use the res.send() method to send a response back to the client
|
||||||
|
res.send("Hello world");
|
||||||
|
});
|
||||||
|
|
||||||
|
// route for accessing the "/hello" with a GET method
|
||||||
|
app.get("/hello", (req, res) => {
|
||||||
|
res.send("Hello from the /hello endpoint!");
|
||||||
|
});
|
||||||
|
|
||||||
|
// This route expects to receive a POST request at the URI "/hello"
|
||||||
|
app.post("/hello", (req, res) => {
|
||||||
|
|
||||||
|
// req.body contains the contents/data of the request body
|
||||||
|
// All properties defined in our Postman request will be accessible here as properties with the same name
|
||||||
|
res.send(`Hello there ${req.body.firstName} ${req.body.lastName}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// This will serve as our mock database
|
||||||
|
let users = [];
|
||||||
|
|
||||||
|
// This route expects to receive a POST request at the URI "/signup"
|
||||||
|
app.post("/signup", (req, res) => {
|
||||||
|
console.log(req.body);
|
||||||
|
|
||||||
|
// if the contents of the request body with the property "username" and "password" is not empty (empty string)
|
||||||
|
if(req.body.username !== '' && req.body.password !== ''){
|
||||||
|
|
||||||
|
// This will store the user object sent via Postman to the users array created above
|
||||||
|
users.push(req.body);
|
||||||
|
|
||||||
|
console.log(users);
|
||||||
|
|
||||||
|
// This will send a response back to the cliet/Postman
|
||||||
|
res.send(`User ${req.body.username} successfully registered`);
|
||||||
|
|
||||||
|
// If the username and password are not complete, an error message will be sent back to the client/Postman
|
||||||
|
} else {
|
||||||
|
|
||||||
|
res.send("Please input BOTH username and password");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// This route expects to receive a PUT request at the URI "/change-password"
|
||||||
|
// This will update the password of the user
|
||||||
|
app.put("/change-password", (req, res) => {
|
||||||
|
|
||||||
|
let message;
|
||||||
|
|
||||||
|
// Creates a for loop that will loop through the elements of the "users" array
|
||||||
|
for(let i = 0; i < users.length; i++){
|
||||||
|
|
||||||
|
// If the username provided by the client/Post and the username of the current user is the same
|
||||||
|
if(req.body.username == users[i].username){
|
||||||
|
|
||||||
|
// Change the password by reassignment
|
||||||
|
users[i].password = req.body.password
|
||||||
|
|
||||||
|
// reassign the value of the message to be sent back to the client/Postman
|
||||||
|
message = `User ${req.body.username}'s password has been updated.`;
|
||||||
|
|
||||||
|
console.log(users);
|
||||||
|
|
||||||
|
// stop the loop
|
||||||
|
break
|
||||||
|
|
||||||
|
// If no user was found
|
||||||
|
} else {
|
||||||
|
message = "User does not exist.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
res.send(message);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/home', (req,res) => {
|
||||||
|
|
||||||
|
res.send('Welcome to the homepage');
|
||||||
|
});
|
||||||
|
|
||||||
|
app.get('/users',(req,res) => {
|
||||||
|
|
||||||
|
res.send([{username:'john',password:'1234' }]);
|
||||||
|
});
|
||||||
|
|
||||||
|
app.delete("/delete-user", (req, res) => {
|
||||||
|
|
||||||
|
let message;
|
||||||
|
|
||||||
|
// Creates a for loop that will loop through the elements of the "users" array
|
||||||
|
for(let i = 0; i < users.length; i++){
|
||||||
|
|
||||||
|
// If the username provided by the client/Post and the username of the current user is the same
|
||||||
|
if(req.body.username == users[i].username){
|
||||||
|
usernames.splice(users[i].username, 1);
|
||||||
|
|
||||||
|
message = `User ${req.body.username} has been deleted.`;
|
||||||
|
|
||||||
|
console.log(users);
|
||||||
|
|
||||||
|
// stop the loop
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
res.send(message);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// An if statement is added here to be able to export the following app/server for checking
|
||||||
|
if(require.main === module){
|
||||||
|
app.listen(port, () => console.log(`Server running at port ${port}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = app;
|
@ -0,0 +1,604 @@
|
|||||||
|
{
|
||||||
|
"name": "s-39",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "s-39",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.18.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/accepts": {
|
||||||
|
"version": "1.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
||||||
|
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-types": "~2.1.34",
|
||||||
|
"negotiator": "0.6.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/array-flatten": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
|
||||||
|
},
|
||||||
|
"node_modules/body-parser": {
|
||||||
|
"version": "1.20.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
|
||||||
|
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
|
||||||
|
"dependencies": {
|
||||||
|
"bytes": "3.1.2",
|
||||||
|
"content-type": "~1.0.4",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"destroy": "1.2.0",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"iconv-lite": "0.4.24",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"qs": "6.11.0",
|
||||||
|
"raw-body": "2.5.1",
|
||||||
|
"type-is": "~1.6.18",
|
||||||
|
"unpipe": "1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8",
|
||||||
|
"npm": "1.2.8000 || >= 1.4.16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/bytes": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/call-bind": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"get-intrinsic": "^1.0.2"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/content-disposition": {
|
||||||
|
"version": "0.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
||||||
|
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "5.2.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/content-type": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cookie": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cookie-signature": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/depd": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/destroy": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8",
|
||||||
|
"npm": "1.2.8000 || >= 1.4.16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ee-first": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||||
|
},
|
||||||
|
"node_modules/encodeurl": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escape-html": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||||
|
},
|
||||||
|
"node_modules/etag": {
|
||||||
|
"version": "1.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||||
|
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/express": {
|
||||||
|
"version": "4.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
|
||||||
|
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"accepts": "~1.3.8",
|
||||||
|
"array-flatten": "1.1.1",
|
||||||
|
"body-parser": "1.20.1",
|
||||||
|
"content-disposition": "0.5.4",
|
||||||
|
"content-type": "~1.0.4",
|
||||||
|
"cookie": "0.5.0",
|
||||||
|
"cookie-signature": "1.0.6",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"etag": "~1.8.1",
|
||||||
|
"finalhandler": "1.2.0",
|
||||||
|
"fresh": "0.5.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"merge-descriptors": "1.0.1",
|
||||||
|
"methods": "~1.1.2",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"path-to-regexp": "0.1.7",
|
||||||
|
"proxy-addr": "~2.0.7",
|
||||||
|
"qs": "6.11.0",
|
||||||
|
"range-parser": "~1.2.1",
|
||||||
|
"safe-buffer": "5.2.1",
|
||||||
|
"send": "0.18.0",
|
||||||
|
"serve-static": "1.15.0",
|
||||||
|
"setprototypeof": "1.2.0",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"type-is": "~1.6.18",
|
||||||
|
"utils-merge": "1.0.1",
|
||||||
|
"vary": "~1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/finalhandler": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"unpipe": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/forwarded": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fresh": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||||
|
},
|
||||||
|
"node_modules/get-intrinsic": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"has": "^1.0.3",
|
||||||
|
"has-proto": "^1.0.1",
|
||||||
|
"has-symbols": "^1.0.3"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-proto": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-symbols": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/http-errors": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"inherits": "2.0.4",
|
||||||
|
"setprototypeof": "1.2.0",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"toidentifier": "1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/iconv-lite": {
|
||||||
|
"version": "0.4.24",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||||
|
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||||
|
"dependencies": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||||
|
},
|
||||||
|
"node_modules/ipaddr.js": {
|
||||||
|
"version": "1.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||||
|
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/media-typer": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/merge-descriptors": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
|
||||||
|
},
|
||||||
|
"node_modules/methods": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||||
|
"bin": {
|
||||||
|
"mime": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||||
|
},
|
||||||
|
"node_modules/negotiator": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/object-inspect": {
|
||||||
|
"version": "1.12.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
|
||||||
|
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/on-finished": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
|
||||||
|
"dependencies": {
|
||||||
|
"ee-first": "1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/parseurl": {
|
||||||
|
"version": "1.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||||
|
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-to-regexp": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
|
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||||
|
},
|
||||||
|
"node_modules/proxy-addr": {
|
||||||
|
"version": "2.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||||
|
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
|
||||||
|
"dependencies": {
|
||||||
|
"forwarded": "0.2.0",
|
||||||
|
"ipaddr.js": "1.9.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qs": {
|
||||||
|
"version": "6.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
|
||||||
|
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"side-channel": "^1.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/range-parser": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/raw-body": {
|
||||||
|
"version": "2.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
|
||||||
|
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
|
||||||
|
"dependencies": {
|
||||||
|
"bytes": "3.1.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"iconv-lite": "0.4.24",
|
||||||
|
"unpipe": "1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/safer-buffer": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
|
},
|
||||||
|
"node_modules/send": {
|
||||||
|
"version": "0.18.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
|
||||||
|
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"destroy": "1.2.0",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"etag": "~1.8.1",
|
||||||
|
"fresh": "0.5.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"mime": "1.6.0",
|
||||||
|
"ms": "2.1.3",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"range-parser": "~1.2.1",
|
||||||
|
"statuses": "2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/send/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/serve-static": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
|
||||||
|
"dependencies": {
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"send": "0.18.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/setprototypeof": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||||
|
},
|
||||||
|
"node_modules/side-channel": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.0",
|
||||||
|
"get-intrinsic": "^1.0.2",
|
||||||
|
"object-inspect": "^1.9.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/statuses": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/toidentifier": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/type-is": {
|
||||||
|
"version": "1.6.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
||||||
|
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
||||||
|
"dependencies": {
|
||||||
|
"media-typer": "0.3.0",
|
||||||
|
"mime-types": "~2.1.24"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unpipe": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/utils-merge": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vary": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"name": "s-39",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"dependencies": {
|
||||||
|
"express": "^4.18.2"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
// Getting all the tasks
|
||||||
|
/*
|
||||||
|
Business Logic:
|
||||||
|
1. Retrieve all the documents.
|
||||||
|
2. if an error is encountered, print the error.
|
||||||
|
3. If no errors are found, send a success status back to the client/Postman and return an array of documents.
|
||||||
|
*/
|
||||||
|
app.get("/tasks", (req, res) => {
|
||||||
|
|
||||||
|
// "find" is a Mongoose method used to retrieve documents in the database, and with {}, we are going to retrieve all the documents
|
||||||
|
Task.find({}).then((result, err) => {
|
||||||
|
|
||||||
|
// If an error occurred
|
||||||
|
if(err){
|
||||||
|
|
||||||
|
// Will print any errors found in the console
|
||||||
|
retun console.error(err);
|
||||||
|
|
||||||
|
// If no errors are found
|
||||||
|
} else {
|
||||||
|
let newUser = new User({
|
||||||
|
username: "johndoe",
|
||||||
|
password: "1234"
|
||||||
|
});
|
||||||
|
|
||||||
|
newUser.save().then((savedUser, saveErr) => {
|
||||||
|
if(saveErr){
|
||||||
|
return console.error(saveErr);
|
||||||
|
} else{
|
||||||
|
return res.status(201).send('New user registered');
|
||||||
|
else{
|
||||||
|
return res.status(201).send('BOTH username and password must be provided');
|
||||||
|
|
||||||
|
|
||||||
|
// The returned response is added in an object with the "data" property.
|
||||||
|
// status "200" means that everything is "OK"
|
||||||
|
// The "json" method allows us to send a JSON format for the response
|
||||||
|
return res.status(200).json({
|
||||||
|
data: result
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
@ -0,0 +1,200 @@
|
|||||||
|
/*
|
||||||
|
s41 - Express.js - Data Persistence via Mongoose ODM
|
||||||
|
*/
|
||||||
|
|
||||||
|
const express = require('express');
|
||||||
|
|
||||||
|
const mongoose = require('mongoose');
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const port = 3001;
|
||||||
|
|
||||||
|
// [Section] MongoDB Connection
|
||||||
|
/*
|
||||||
|
Syntax:
|
||||||
|
mongoose.connect("<MongoDB URI>", {
|
||||||
|
useNewUrlParser: true,
|
||||||
|
useUnifiedTopology: true
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Connecting to MongoDB Atlas
|
||||||
|
mongoose.connect("mongodb+srv://jerrycabuntucan:EvDaqSDV8DIXZTQr@b320-cluster.ke6t1wi.mongodb.net/b320-todo?retryWrites=true&w=majority", {
|
||||||
|
useNewUrlParser: true,
|
||||||
|
useUnifiedTopology: true
|
||||||
|
});
|
||||||
|
|
||||||
|
// Set Notifications for connection success or failure
|
||||||
|
let db = mongoose.connection;
|
||||||
|
|
||||||
|
// If a connection error occurred, output in the console
|
||||||
|
// console.error.bind(console) allows us to print error in the browser console and in the terminal
|
||||||
|
db.on("error", console.error.bind(console, "connection error"));
|
||||||
|
|
||||||
|
// If the connection is successful, output in the console
|
||||||
|
db.once("open", () => console.log("We're connected to the cloud database!"));
|
||||||
|
|
||||||
|
|
||||||
|
// [Section] Mongoose Schema
|
||||||
|
/*
|
||||||
|
- Schemas determine the structure of the documents to be written in the database
|
||||||
|
- It will act as a blueprint to our data(documents)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// The "new" keyword creates a new Schema
|
||||||
|
const taskSchema = new mongoose.Schema({
|
||||||
|
// Define the fields with the corresponding data type
|
||||||
|
// The field called "name" and its data type is "String"
|
||||||
|
name: String,
|
||||||
|
|
||||||
|
// This is the "status" field that is a "String" and the default value is "pending"
|
||||||
|
status: {
|
||||||
|
type: String,
|
||||||
|
default: "pending"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
//User Schema
|
||||||
|
const userSchema = new mongoose.Schema({
|
||||||
|
username: String,
|
||||||
|
password: String
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// [Section] Models
|
||||||
|
/*
|
||||||
|
- It uses schemas and are used to create/instantiate objects that correspond to the schema
|
||||||
|
- Models use Schemas and they act as a middleman between the server(JS code) to our database(MongoDB)
|
||||||
|
- Server > Schema (blueprint) > Database > Collection
|
||||||
|
*/
|
||||||
|
const Task = mongoose.model("Task", taskSchema);
|
||||||
|
|
||||||
|
//User Model
|
||||||
|
const User = mongoose.model("User", userSchema);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Middlewares
|
||||||
|
app.use(express.json());
|
||||||
|
app.use(express.urlencoded({extended: true}));
|
||||||
|
|
||||||
|
|
||||||
|
// [Section] Routes
|
||||||
|
|
||||||
|
// Creating a new task
|
||||||
|
/*
|
||||||
|
Business Logic:
|
||||||
|
1. Add a functionality to check if there are duplicated tasks
|
||||||
|
- If the task already exists in the DB, we return an error
|
||||||
|
- If the task doesn't exist in the DB, we add it in the DB
|
||||||
|
2. The task data will be coming from the request's body
|
||||||
|
3. Create a new Task object with a "name" field/property
|
||||||
|
4. The "status" property does not need to be provided because our schema defaults it to "pending" upon creation of an object
|
||||||
|
*/
|
||||||
|
|
||||||
|
app.post("/tasks", (req, res) => {
|
||||||
|
|
||||||
|
// It will search the req.body.name in the db to check if it exist already in the db
|
||||||
|
Task.findOne({name: req.body.name}).then((result, err) => {
|
||||||
|
|
||||||
|
// If a docuent was found and the document's name matches the information sent via the client/postman
|
||||||
|
if(result != null && result.name == req.body.name){
|
||||||
|
|
||||||
|
// Return a message to the client/Postman
|
||||||
|
return res.send("Duplicate task found");
|
||||||
|
|
||||||
|
// If no document as found
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Create a new task and save it to the database
|
||||||
|
let newTask = new Task({
|
||||||
|
name: req.body.name
|
||||||
|
});
|
||||||
|
|
||||||
|
// The .save method is used to save the new object to the database
|
||||||
|
newTask.save().then((savedTask, saveErr) => {
|
||||||
|
// If there are errors in save, console.error the error
|
||||||
|
if(saveErr){
|
||||||
|
|
||||||
|
return console.error(saveErr);
|
||||||
|
|
||||||
|
// No error found while creating the document, return a response
|
||||||
|
} else {
|
||||||
|
// Return a status code of 201, which means created successfully
|
||||||
|
// Sends a message "New task created" on successfull creation
|
||||||
|
return res.status(201).send("New task created");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
// Getting all the tasks
|
||||||
|
/*
|
||||||
|
Business Logic:
|
||||||
|
1. Retrieve all the documents.
|
||||||
|
2. if an error is encountered, print the error.
|
||||||
|
3. If no errors are found, send a success status back to the client/Postman and return an array of documents.
|
||||||
|
*/
|
||||||
|
app.get("/tasks", (req, res) => {
|
||||||
|
|
||||||
|
// "find" is a Mongoose method used to retrieve documents in the database, and with {}, we are going to retrieve all the documents
|
||||||
|
Task.find({}).then((result, err) => {
|
||||||
|
|
||||||
|
// If an error occurred
|
||||||
|
if(err){
|
||||||
|
|
||||||
|
// Will print any errors found in the console
|
||||||
|
return console.error(err);
|
||||||
|
|
||||||
|
// If no errors are found
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// The returned response is added in an object with the "data" property.
|
||||||
|
// status "200" means that everything is "OK"
|
||||||
|
// The "json" method allows us to send a JSON format for the response
|
||||||
|
return res.status(200).json({
|
||||||
|
data: result
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
app.post("/signup", (req, res) => {
|
||||||
|
console.log(req.body);
|
||||||
|
|
||||||
|
User.findOne({username: req.body.username}).then((result,err) => {
|
||||||
|
if(result != null && result.username == req.body.username){
|
||||||
|
return res.send("Duplicate username found");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if(req.body.username !== "" && req.body.password !== ""){
|
||||||
|
let newUser = new User({
|
||||||
|
username: req.body.username,
|
||||||
|
password: req.body.password
|
||||||
|
});
|
||||||
|
|
||||||
|
newUser.save().then((savedUser, savedErr) => {
|
||||||
|
if(savedErr){
|
||||||
|
return console.error(savedErr);
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
return res.status(201).send("New User Registered");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return res.send("BOTH username and password must be provided");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
if(require.main === module){
|
||||||
|
app.listen(port, () => console.log(`Server running at port ${port}`));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = app;
|
@ -0,0 +1 @@
|
|||||||
|
../mime/cli.js
|
@ -0,0 +1,841 @@
|
|||||||
|
{
|
||||||
|
"name": "s-41",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"node_modules/@mongodb-js/saslprep": {
|
||||||
|
"version": "1.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.0.tgz",
|
||||||
|
"integrity": "sha512-Xfijy7HvfzzqiOAhAepF4SGN5e9leLkMvg/OPOF97XemjfVCYN/oWa75wnkc6mltMSTwY+XlbhWgUOJmkFspSw==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"sparse-bitfield": "^3.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@types/node": {
|
||||||
|
"version": "20.8.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz",
|
||||||
|
"integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/webidl-conversions": {
|
||||||
|
"version": "7.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.1.tgz",
|
||||||
|
"integrity": "sha512-8hKOnOan+Uu+NgMaCouhg3cT9x5fFZ92Jwf+uDLXLu/MFRbXxlWwGeQY7KVHkeSft6RvY+tdxklUBuyY9eIEKg=="
|
||||||
|
},
|
||||||
|
"node_modules/@types/whatwg-url": {
|
||||||
|
"version": "8.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
|
||||||
|
"integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/node": "*",
|
||||||
|
"@types/webidl-conversions": "*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/accepts": {
|
||||||
|
"version": "1.3.8",
|
||||||
|
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
||||||
|
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-types": "~2.1.34",
|
||||||
|
"negotiator": "0.6.3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/array-flatten": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
|
||||||
|
},
|
||||||
|
"node_modules/body-parser": {
|
||||||
|
"version": "1.20.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
|
||||||
|
"integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
|
||||||
|
"dependencies": {
|
||||||
|
"bytes": "3.1.2",
|
||||||
|
"content-type": "~1.0.4",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"destroy": "1.2.0",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"iconv-lite": "0.4.24",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"qs": "6.11.0",
|
||||||
|
"raw-body": "2.5.1",
|
||||||
|
"type-is": "~1.6.18",
|
||||||
|
"unpipe": "1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8",
|
||||||
|
"npm": "1.2.8000 || >= 1.4.16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/bson": {
|
||||||
|
"version": "5.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/bson/-/bson-5.5.0.tgz",
|
||||||
|
"integrity": "sha512-B+QB4YmDx9RStKv8LLSl/aVIEV3nYJc3cJNNTK2Cd1TL+7P+cNpw9mAPeCgc5K+j01Dv6sxUzcITXDx7ZU3F0w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.20.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/bytes": {
|
||||||
|
"version": "3.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||||
|
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/call-bind": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"get-intrinsic": "^1.0.2"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/content-disposition": {
|
||||||
|
"version": "0.5.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
||||||
|
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"safe-buffer": "5.2.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/content-type": {
|
||||||
|
"version": "1.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
||||||
|
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cookie": {
|
||||||
|
"version": "0.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
|
||||||
|
"integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/cookie-signature": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
|
||||||
|
},
|
||||||
|
"node_modules/debug": {
|
||||||
|
"version": "2.6.9",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
||||||
|
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/depd": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/destroy": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8",
|
||||||
|
"npm": "1.2.8000 || >= 1.4.16"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/ee-first": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
|
||||||
|
},
|
||||||
|
"node_modules/encodeurl": {
|
||||||
|
"version": "1.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
||||||
|
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/escape-html": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
|
||||||
|
},
|
||||||
|
"node_modules/etag": {
|
||||||
|
"version": "1.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
||||||
|
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/express": {
|
||||||
|
"version": "4.18.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
|
||||||
|
"integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"accepts": "~1.3.8",
|
||||||
|
"array-flatten": "1.1.1",
|
||||||
|
"body-parser": "1.20.1",
|
||||||
|
"content-disposition": "0.5.4",
|
||||||
|
"content-type": "~1.0.4",
|
||||||
|
"cookie": "0.5.0",
|
||||||
|
"cookie-signature": "1.0.6",
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"etag": "~1.8.1",
|
||||||
|
"finalhandler": "1.2.0",
|
||||||
|
"fresh": "0.5.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"merge-descriptors": "1.0.1",
|
||||||
|
"methods": "~1.1.2",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"path-to-regexp": "0.1.7",
|
||||||
|
"proxy-addr": "~2.0.7",
|
||||||
|
"qs": "6.11.0",
|
||||||
|
"range-parser": "~1.2.1",
|
||||||
|
"safe-buffer": "5.2.1",
|
||||||
|
"send": "0.18.0",
|
||||||
|
"serve-static": "1.15.0",
|
||||||
|
"setprototypeof": "1.2.0",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"type-is": "~1.6.18",
|
||||||
|
"utils-merge": "1.0.1",
|
||||||
|
"vary": "~1.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/finalhandler": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"unpipe": "~1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/forwarded": {
|
||||||
|
"version": "0.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
||||||
|
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/fresh": {
|
||||||
|
"version": "0.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
||||||
|
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/function-bind": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
|
||||||
|
},
|
||||||
|
"node_modules/get-intrinsic": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1",
|
||||||
|
"has": "^1.0.3",
|
||||||
|
"has-proto": "^1.0.1",
|
||||||
|
"has-symbols": "^1.0.3"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
|
||||||
|
"dependencies": {
|
||||||
|
"function-bind": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-proto": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/has-symbols": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/http-errors": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"inherits": "2.0.4",
|
||||||
|
"setprototypeof": "1.2.0",
|
||||||
|
"statuses": "2.0.1",
|
||||||
|
"toidentifier": "1.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/iconv-lite": {
|
||||||
|
"version": "0.4.24",
|
||||||
|
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
||||||
|
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
||||||
|
"dependencies": {
|
||||||
|
"safer-buffer": ">= 2.1.2 < 3"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.10.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/inherits": {
|
||||||
|
"version": "2.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
||||||
|
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
|
||||||
|
},
|
||||||
|
"node_modules/ip": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
|
||||||
|
},
|
||||||
|
"node_modules/ipaddr.js": {
|
||||||
|
"version": "1.9.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||||
|
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/kareem": {
|
||||||
|
"version": "2.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
|
||||||
|
"integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/media-typer": {
|
||||||
|
"version": "0.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
||||||
|
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/memory-pager": {
|
||||||
|
"version": "1.5.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
||||||
|
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"node_modules/merge-descriptors": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
|
||||||
|
},
|
||||||
|
"node_modules/methods": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime": {
|
||||||
|
"version": "1.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
||||||
|
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
||||||
|
"bin": {
|
||||||
|
"mime": "cli.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-db": {
|
||||||
|
"version": "1.52.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
||||||
|
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mime-types": {
|
||||||
|
"version": "2.1.35",
|
||||||
|
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
||||||
|
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
||||||
|
"dependencies": {
|
||||||
|
"mime-db": "1.52.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mongodb": {
|
||||||
|
"version": "5.8.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.8.1.tgz",
|
||||||
|
"integrity": "sha512-wKyh4kZvm6NrCPH8AxyzXm3JBoEf4Xulo0aUWh3hCgwgYJxyQ1KLST86ZZaSWdj6/kxYUA3+YZuyADCE61CMSg==",
|
||||||
|
"dependencies": {
|
||||||
|
"bson": "^5.4.0",
|
||||||
|
"mongodb-connection-string-url": "^2.6.0",
|
||||||
|
"socks": "^2.7.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.20.1"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"@mongodb-js/saslprep": "^1.1.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@aws-sdk/credential-providers": "^3.188.0",
|
||||||
|
"@mongodb-js/zstd": "^1.0.0",
|
||||||
|
"kerberos": "^1.0.0 || ^2.0.0",
|
||||||
|
"mongodb-client-encryption": ">=2.3.0 <3",
|
||||||
|
"snappy": "^7.2.2"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@aws-sdk/credential-providers": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@mongodb-js/zstd": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"kerberos": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"mongodb-client-encryption": {
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"snappy": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mongodb-connection-string-url": {
|
||||||
|
"version": "2.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
|
||||||
|
"integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"@types/whatwg-url": "^8.2.1",
|
||||||
|
"whatwg-url": "^11.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mongoose": {
|
||||||
|
"version": "7.5.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.5.3.tgz",
|
||||||
|
"integrity": "sha512-QyYzhZusux0wIJs+4rYyHvel0kJm0CT887trNd1WAB3iQnDuJow0xEnjETvuS/cTjHQUVPihOpN7OHLlpJc52w==",
|
||||||
|
"dependencies": {
|
||||||
|
"bson": "^5.4.0",
|
||||||
|
"kareem": "2.5.1",
|
||||||
|
"mongodb": "5.8.1",
|
||||||
|
"mpath": "0.9.0",
|
||||||
|
"mquery": "5.0.0",
|
||||||
|
"ms": "2.1.3",
|
||||||
|
"sift": "16.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.20.1"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "opencollective",
|
||||||
|
"url": "https://opencollective.com/mongoose"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mongoose/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/mpath": {
|
||||||
|
"version": "0.9.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
|
||||||
|
"integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mquery": {
|
||||||
|
"version": "5.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
|
||||||
|
"integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "4.x"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=14.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mquery/node_modules/debug": {
|
||||||
|
"version": "4.3.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
||||||
|
"integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ms": "2.1.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.0"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"supports-color": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/mquery/node_modules/ms": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
|
||||||
|
},
|
||||||
|
"node_modules/ms": {
|
||||||
|
"version": "2.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
||||||
|
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
|
||||||
|
},
|
||||||
|
"node_modules/negotiator": {
|
||||||
|
"version": "0.6.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
||||||
|
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/object-inspect": {
|
||||||
|
"version": "1.12.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
|
||||||
|
"integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/on-finished": {
|
||||||
|
"version": "2.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
||||||
|
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
|
||||||
|
"dependencies": {
|
||||||
|
"ee-first": "1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/parseurl": {
|
||||||
|
"version": "1.3.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||||
|
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/path-to-regexp": {
|
||||||
|
"version": "0.1.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||||
|
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
|
||||||
|
},
|
||||||
|
"node_modules/proxy-addr": {
|
||||||
|
"version": "2.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||||
|
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
|
||||||
|
"dependencies": {
|
||||||
|
"forwarded": "0.2.0",
|
||||||
|
"ipaddr.js": "1.9.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/punycode": {
|
||||||
|
"version": "2.3.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||||
|
"integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/qs": {
|
||||||
|
"version": "6.11.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
|
||||||
|
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"side-channel": "^1.0.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.6"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/range-parser": {
|
||||||
|
"version": "1.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
||||||
|
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/raw-body": {
|
||||||
|
"version": "2.5.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
|
||||||
|
"integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
|
||||||
|
"dependencies": {
|
||||||
|
"bytes": "3.1.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"iconv-lite": "0.4.24",
|
||||||
|
"unpipe": "1.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/safe-buffer": {
|
||||||
|
"version": "5.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
||||||
|
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"type": "github",
|
||||||
|
"url": "https://github.com/sponsors/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "patreon",
|
||||||
|
"url": "https://www.patreon.com/feross"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "consulting",
|
||||||
|
"url": "https://feross.org/support"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/safer-buffer": {
|
||||||
|
"version": "2.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
||||||
|
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
|
||||||
|
},
|
||||||
|
"node_modules/send": {
|
||||||
|
"version": "0.18.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
|
||||||
|
"integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
|
||||||
|
"dependencies": {
|
||||||
|
"debug": "2.6.9",
|
||||||
|
"depd": "2.0.0",
|
||||||
|
"destroy": "1.2.0",
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"etag": "~1.8.1",
|
||||||
|
"fresh": "0.5.2",
|
||||||
|
"http-errors": "2.0.0",
|
||||||
|
"mime": "1.6.0",
|
||||||
|
"ms": "2.1.3",
|
||||||
|
"on-finished": "2.4.1",
|
||||||
|
"range-parser": "~1.2.1",
|
||||||
|
"statuses": "2.0.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/send/node_modules/ms": {
|
||||||
|
"version": "2.1.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||||
|
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||||
|
},
|
||||||
|
"node_modules/serve-static": {
|
||||||
|
"version": "1.15.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
|
||||||
|
"integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
|
||||||
|
"dependencies": {
|
||||||
|
"encodeurl": "~1.0.2",
|
||||||
|
"escape-html": "~1.0.3",
|
||||||
|
"parseurl": "~1.3.3",
|
||||||
|
"send": "0.18.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/setprototypeof": {
|
||||||
|
"version": "1.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||||
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||||
|
},
|
||||||
|
"node_modules/side-channel": {
|
||||||
|
"version": "1.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
|
||||||
|
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
|
||||||
|
"dependencies": {
|
||||||
|
"call-bind": "^1.0.0",
|
||||||
|
"get-intrinsic": "^1.0.2",
|
||||||
|
"object-inspect": "^1.9.0"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/ljharb"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/sift": {
|
||||||
|
"version": "16.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
|
||||||
|
"integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
|
||||||
|
},
|
||||||
|
"node_modules/smart-buffer": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 6.0.0",
|
||||||
|
"npm": ">= 3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/socks": {
|
||||||
|
"version": "2.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
|
||||||
|
"integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"ip": "^2.0.0",
|
||||||
|
"smart-buffer": "^4.2.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 10.13.0",
|
||||||
|
"npm": ">= 3.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/sparse-bitfield": {
|
||||||
|
"version": "3.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||||
|
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
|
||||||
|
"optional": true,
|
||||||
|
"dependencies": {
|
||||||
|
"memory-pager": "^1.0.2"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/statuses": {
|
||||||
|
"version": "2.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||||
|
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/toidentifier": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/tr46": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
|
||||||
|
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
|
||||||
|
"dependencies": {
|
||||||
|
"punycode": "^2.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/type-is": {
|
||||||
|
"version": "1.6.18",
|
||||||
|
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
||||||
|
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
||||||
|
"dependencies": {
|
||||||
|
"media-typer": "0.3.0",
|
||||||
|
"mime-types": "~2.1.24"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.6"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/unpipe": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/utils-merge": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
||||||
|
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vary": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 0.8"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/webidl-conversions": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/whatwg-url": {
|
||||||
|
"version": "11.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
|
||||||
|
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
|
||||||
|
"dependencies": {
|
||||||
|
"tr46": "^3.0.0",
|
||||||
|
"webidl-conversions": "^7.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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.
|
@ -0,0 +1,4 @@
|
|||||||
|
import mod from "./index.js";
|
||||||
|
|
||||||
|
export default mod;
|
||||||
|
export const saslprep = mod.saslprep;
|
@ -0,0 +1,4 @@
|
|||||||
|
/// <reference types="node" />
|
||||||
|
declare const _default: Buffer;
|
||||||
|
export default _default;
|
||||||
|
//# sourceMappingURL=code-points-data.d.ts.map
|
@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"code-points-data.d.ts","sourceRoot":"","sources":["../src/code-points-data.ts"],"names":[],"mappings":";;AAEA,wBAKE"}
|
@ -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+3dTYgcWR0A8FfTnekQ47aCkBxiZpYV8RhwYQM7bA/ksoLgSRD0IOSiePAkLrowvWSF4CkHEW856MlTQHA9RKZ1ZJODsEcVcTOyhxUEbXdXtpPp1PNVV39Uz4czEyaTVOb3G6a7XtWrr/devX49/+qekG2Go7Aa2jHGyozG+Dmrzi2mP/xb/zMhLI+WlRm2byubm2h0ivVi7BYzusVjuNkt1l9uFWsutWL8OP4rzV9KeXdsKx1HFhbSc6vIG0fKBZ14UNfLFS6FRrGRtXh98ZvphL/x4uLV/IOzaat/vlikv/TixavxR8PQitfPpKNbffXSwgtr8fV07GX+L1967urwg5W0/t0LV37y/oWFlQtX8ping7reXE3LT680r9yPKyn/3Vn64SwdVs6m/KN0yHrp9D+RvXsqpe6MSia5mH6LSog//Xq/++O74YVTjfDFWK2VIuNSemiPppphcVYeyzcudKqFMiq6cs3vVkrzlcnE0mxeZ1Jf2ZXsSvk8TmRZWYdpalydxd5bc8eUkt1wlEbtqTVLr8XQLFpKMb+dpr9SbSOt4ozTgXUq8+Ihm8cTt0shtCvT6dwao6sxPf5ydmU208/Z0yH8IZtlvZi3e5fG12yn3PLSdPvnQ7vsK9rxyKpqevzFZGVfu3YHezvbnbvit9Xdm5fGbf/MZ7PuuNrTjLJnaofH7gm0h+VKU/g/tdUocrer3cO4yOcuycGoyLrba6Ta+lrlnkZ5ntvWCrfV39wLTuNg9QvsvHb37P8BAGCP0eNTOH5szf154JmnNQIcn7b+FziyAfX4eWnn+C6Lm4M0mj31ubkViiDV4WLvs56qN54xGS3HWER5su6nQtZubl9tcY/4atbr9e5kWewew/g2a8fdy2Yaa97+pgQAAAAAAIBHtt+dYmWwaN/byI5g/9PYVfMvb4YvvDpOLJxvFgueP9VbPXh8/yCZViZxNYATaejmDQAAAACgfjJ/3QUA4JD3Px1InT+5PtQCAAAAAAAAAKD2xP8BAAAAAAAAoP7E/wEAAAAAAACg/sT/AQAAAAAAAKD+xP8BAAAAAAAAoP7E/wEAAAAAAACg/sT/AQAAAAAAAKD+xP8BAAAAAAAAoP7E/wEAAAAAAACg/sT/AQAAAAAAAKD+xP8BAAAAAAAAoP6G6+khVCgSAAAAAAAAAKidYQjLYVfNcPSyAE+dhQsnvAAq59/VHAAAAAAAAOCJmv8E/w4HiLqf3nWuWCB1pe0esg/pT3sKd+m4XjhpFpZH3/1THTcU6cfRLnrHf3ZNPZs+bf9rwPuIUPYAWb+j/Zy0EaAxAAAAAADwrPJ1IMBenu6ea99M+0W/17wCAAAAAAAAnGRLm8oA4JnQUAQAAAAAAAAAUHvi/wAAAAAAAABQf+L/AAAAAAAAAFB/4v8AAAAAAAAAUH/i/wAAAAAAAABQf+L/AAAAAAAAAFB/4v8AAAAAAAAAUH/i/wAAAAAAAABQf+L/AAAAAAAAAFB/4v8AAAAAAAAAUH/i/wAAAAAAAABQf+L/AAAAAAAAAFB/jdX0ECsUCQAAAAAAAADUTiMCAAAAAAAAAHU3VAQAAAAAAAAAUH8hLNf1uwsWbhT/uWBzUEx/ei1Nxc001VqrnN2wuRjCK3G4HuNgtuJoSVj17Q9QyBQBAAAAAAAAHMKpuJ4/+Otc5L2XZi8dJlQ/LCPXhc4keJ9UI9uFre3rDfY9uoXZPQBFHL34HSWWm8sx5rH83d967IfZMRZHHG/2Qi8MFnbscXnhnzHei5NND8P2bW2OT3G8vFeebBHbz9dGEf5jDt+fK4/mTve1bnwndsNL92+mE/75xhs/yz65Ed/ZbP29SP96oxvCDxrxcjj333R262/d6X6tG66lYy/z/+rtMn83nHvv9nfOv/dw4+pvspCl4v7+1npa/nHvtbSvjSJ/mf79/VuLC7N03LiW8o/SMU8ldO+jPOul1OVQ3vVwK+TZqBLCt3/RXvveS7eaD0L8YyhrJeV/cC0WGTdD1hzlCo2H98vzK9a+963V7qRVTeaNa+ZGpWp+N62jSmOetJD8dn67fB4n8nzchG7n4+os2tcgzLWUQVg70rta8lE7nqW7IW710v7eDsV1F7e6433njYfd9j9Gl2KIveptMePVamOXQuhXO5tUk6Pv+kiPX43T7/3YevDy4MN+HLw8CHPX6OqOOwKe73z0+pnf3rvT6pX76j/SUU7/3UjqX5r7ZW7PdZU8Vq2id+29Pphdh3n1Tqp/t0aXaWVOPnsFGre+waRdpKf/TK+7fiX3bOWluVeJg77AAPNDwr37fwAA2GP0+BSOHwcn6/231ghwfPr6X+DIBtTj582d47s8LD3xMeYktt+YHXHe6XQuH9P4Nu+H3ctmGmve/qYEAAAAAACAR7bfnWJlsGgSNNoM54tPZ23EI4vYzPY1/fzq1ud/GP/01jjx8P2tYsG7DzrrB4/vHySTz5YB+n8AAAAAgJrJ/XEXAIDHEf/2yXUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGdABAAAAAAAAADqbqgIAAAAAAAAAKD2hv8DWK79UBhoBgA=', 'base64'));
|
||||||
|
//# sourceMappingURL=code-points-data.js.map
|
@ -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,0nFAA0nF,EAC1nF,QAAQ,CACT,CACF,CAAC"}
|
@ -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
|
@ -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"}
|
@ -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
|
File diff suppressed because one or more lines are too long
@ -0,0 +1,2 @@
|
|||||||
|
export {};
|
||||||
|
//# sourceMappingURL=generate-code-points.d.ts.map
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue