Skip to content

Commit a9076f4

Browse files
GoodKimchiHugo-RM
authored andcommitted
added functions, defaults,
1 parent f53f7b0 commit a9076f4

File tree

1 file changed

+58
-40
lines changed

1 file changed

+58
-40
lines changed

client/utils/parseURLParams.js

Lines changed: 58 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,80 @@
1-
import { p5Versions, currentP5Version } from "../../common/p5Versions";
1+
import { p5Versions, currentP5Version } from '../../common/p5Versions';
2+
3+
const DEFAULTS = {
4+
sound: true,
5+
preload: false,
6+
shapes: false,
7+
data: false
8+
};
29

310
// One centralized parser
411
export function parseUrlParams(url) {
5-
const params = new URLSearchParams(new URL(url, 'https://dummy.origin').search);
12+
const params = new URLSearchParams(
13+
new URL(url, 'https://dummy.origin').search
14+
);
615

716
return {
817
version: validateVersion(params.get('version')), // string
9-
sound: validateSound(params.get('sound')), // bool
10-
preload: validatePreload(params.get('preload')), // bool
11-
shapes: validateShapes(params.get('shapes')), // bool
12-
data: validateData(params.get('data')) // bool
18+
sound: validateBool(params.get('sound'), DEFAULTS.sound), // bool
19+
preload: validateBool(params.get('preload'), DEFAULTS.preload), // bool
20+
shapes: validateBool(params.get('shapes'), DEFAULTS.shapes), // bool
21+
data: validateBool(params.get('data'), DEFAULTS.data) // bool
1322
// Easy to add more params here
1423
};
1524
}
1625

1726
function validateVersion(version) {
18-
if (!version) {
19-
return currentP5Version;
20-
}
21-
22-
// if valid return version
23-
27+
if (!version) {
2428
return currentP5Version;
25-
}
26-
function validateSound(sound) {
27-
return;
29+
}
30+
const v = String(version).trim();
31+
if (v.toLowerCase() === 'latest') {
32+
const newest = getNewestVersion(p5Versions);
33+
return newest ?? currentP5Version; //The ?? operator means: “if newest is null or undefined, use currentP5Version
34+
}
35+
if (v.toLowerCase() === 'current') return currentP5Version;
36+
if (p5Versions.includes(v)) return v;
37+
const normalized = v.replace(/^v/i, '');
38+
if (p5Versions.includes(normalized)) return normalized;
39+
//This line strips that leading v using a regular expression ^v (meaning “v at the start”) and then rechecks.
2840

29-
// on, true, 1 == on
30-
// off, false, 0 == off
31-
32-
// default if none triggered
41+
// if valid return version
42+
return currentP5Version;
43+
}
3344

45+
//picks highest version number from array
46+
function getNewestVersion(list) {
47+
// Defensive copy + semver sort (major.minor.patch)
48+
const parts = (s) => s.split('.').map((n) => parseInt(n, 10) || 0);
49+
return [...list].sort((a, b) => {
50+
const [am, an, ap] = parts(a);
51+
const [bm, bn, bp] = parts(b);
52+
if (am !== bm) return bm - am;
53+
if (an !== bn) return bn - an;
54+
return bp - ap;
55+
})[0];
3456
}
35-
function validatePreload(preload) {
36-
return;
3757

38-
// on, true, 1 == on
39-
// off, false, 0 == off
40-
41-
// default if none triggered
58+
function validateBool(value, defaultValue) {
59+
if (value) return defaultValue; // param absent
60+
//if (value === '') return true; // bare flag: ?flag
4261

43-
}
44-
function validateShapes(shapes) {
45-
return;
62+
const v = String(value).trim().toLowerCase();
4663

47-
// on, true, 1 == on
48-
// off, false, 0 == off
49-
50-
// default if none triggered
64+
const TRUTHY = new Set(['on', 'true', '1', 'yes', 'y', 'enable', 'enabled']);
65+
const FALSY = new Set([
66+
'off',
67+
'false',
68+
'0',
69+
//'no',
70+
//'n',
71+
//'disable',
72+
//'disabled'
73+
]);
5174

75+
if (TRUTHY.has(v)) return true;
76+
if (FALSY.has(v)) return false;
5277

78+
return defaultValue; // unrecognized → fall back safely
5379
}
54-
function validateData(data) {
55-
return;
56-
57-
// on, true, 1 == on
58-
// off, false, 0 == off
59-
60-
// default if none triggered
6180

62-
}

0 commit comments

Comments
 (0)