Punycode slug encoding for non-ascii characters
This commit is contained in:
parent
a73eb76d43
commit
00b47e2656
|
|
@ -18,6 +18,7 @@
|
||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"dayjs": "^1.10.4",
|
"dayjs": "^1.10.4",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
"express": "^4.17.1"
|
"express": "^4.17.1",
|
||||||
|
"punycode": "^2.1.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,26 @@
|
||||||
const dayjs = require('dayjs');
|
const dayjs = require('dayjs');
|
||||||
|
const punycode = require('punycode/');
|
||||||
|
|
||||||
const adjectives = require('../res/adjectives.json');
|
const adjectives = require('../res/adjectives.json');
|
||||||
const crabs = require('../res/crabs.json');
|
const crabs = require('../res/crabs.json');
|
||||||
|
|
||||||
const capitalize = (string) => string.charAt(0).toUpperCase() + string.slice(1);
|
const capitalize = string => string.charAt(0).toUpperCase() + string.slice(1);
|
||||||
|
|
||||||
const generateId = (name) => {
|
|
||||||
const id = name.trim().toLowerCase().replace(/[^A-Za-z0-9 ]/g, '').replace(/\s+/g, '-');
|
|
||||||
const number = Math.floor(100000 + Math.random() * 900000);
|
|
||||||
return `${id}-${number}`;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
// Generate a random name based on an adjective and a crab species
|
||||||
const generateName = () => {
|
const generateName = () => {
|
||||||
return `${capitalize(adjectives[Math.floor(Math.random() * adjectives.length)])} ${crabs[Math.floor(Math.random() * crabs.length)]} Crab`;
|
return `${capitalize(adjectives[Math.floor(Math.random() * adjectives.length)])} ${crabs[Math.floor(Math.random() * crabs.length)]} Crab`;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Generate a slug for the crab fit
|
||||||
|
const generateId = name => {
|
||||||
|
let id = punycode.encode(name.trim().toLowerCase()).trim().replace(/[^A-Za-z0-9 ]/g, '').replace(/\s+/g, '-');
|
||||||
|
if (id.replace(/-/g, '') === '') {
|
||||||
|
id = generateName().trim().toLowerCase().replace(/[^A-Za-z0-9 ]/g, '').replace(/\s+/g, '-');
|
||||||
|
}
|
||||||
|
const number = Math.floor(100000 + Math.random() * 900000);
|
||||||
|
return `${id}-${number}`;
|
||||||
|
};
|
||||||
|
|
||||||
module.exports = async (req, res) => {
|
module.exports = async (req, res) => {
|
||||||
const { event } = req.body;
|
const { event } = req.body;
|
||||||
|
|
||||||
|
|
@ -23,6 +29,7 @@ module.exports = async (req, res) => {
|
||||||
let eventId = generateId(name);
|
let eventId = generateId(name);
|
||||||
const currentTime = dayjs().unix();
|
const currentTime = dayjs().unix();
|
||||||
|
|
||||||
|
// Check if the event ID already exists, and if so generate a new one
|
||||||
let eventResult;
|
let eventResult;
|
||||||
do {
|
do {
|
||||||
const query = req.datastore.createQuery(req.types.event)
|
const query = req.datastore.createQuery(req.types.event)
|
||||||
|
|
|
||||||
|
|
@ -942,6 +942,11 @@ pumpify@^2.0.1:
|
||||||
inherits "^2.0.3"
|
inherits "^2.0.3"
|
||||||
pump "^3.0.0"
|
pump "^3.0.0"
|
||||||
|
|
||||||
|
punycode@^2.1.1:
|
||||||
|
version "2.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||||
|
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||||
|
|
||||||
qs@6.7.0:
|
qs@6.7.0:
|
||||||
version "6.7.0"
|
version "6.7.0"
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue