url-search-params

说明

模拟实现浏览器的URLSearchParamsAPI

源码

用法

urlSearchParams.test.ts
import { URLSearchParams } from "../../utility/algorithm/url-search-params";
// ? URLSearchParams
describe('URLSearchParams tests', () => {
test('URLSearchParams.handleAppend should add the new value to the tail of the `params` and update the url', () => {
// !!! https://ddzy.github.io/login?name=ddzy&age=21&isSelf=true
const received = [
{
key: 'skill',
value: 'programmer',
},
];
const expected = [
{
url: 'https://ddzy.github.io/login?name=ddzy&age=21&isSelf=true&skill=programmer',
params: {
name: 'ddzy',
age: '21',
isSelf: 'true',
skill: 'programmer',
},
},
];
const usp = new URLSearchParams({});
for (const [i, v] of received.entries()) {
const __this__ = usp.handleAppend(v.key, v.value);
const { url, params } = usp.state;
// ? check this
expect(__this__ instanceof URLSearchParams).toBeTruthy();
// ? check url
expect(url).toBe(expected[i].url);
// ? check params
expect(params).toEqual(expected[i].params);
}
});
test('URLSearchParams.handleDelete should remove the special `key` from url and params', () => {
const received = [
'age',
];
const expected = [
{
url: 'https://ddzy.github.io/login?name=ddzy&isSelf=true',
params: {
name: 'ddzy',
isSelf: 'true',
},
},
];
const usp = new URLSearchParams({});
for (const [i, v] of received.entries()) {
const __this__ = usp.handleDelete(v);
const { url, params } = usp.state;
// ? check this
expect(__this__ instanceof URLSearchParams).toBeTruthy();
// ? check url
expect(url).toBe(expected[i].url);
// ? check params
expect(params).toEqual(expected[i].params);
}
});
test('URLSearchParams.handleGet should received the `key` and return the value of this key', () => {
const received = [
'',
'skill',
'name',
'age',
];
const expected = [
null,
null,
'ddzy',
'21',
];
const usp = new URLSearchParams({});
for (const [i, v] of received.entries()) {
const result = usp.handleGet(v);
expect(result).toBe(expected[i]);
}
});
test('URLSearchParams.handleGetAll should return all of the params liked `[["name", "ddzy"], ...]`', () => {
const expected = [
['name', 'ddzy'],
['age', '21'],
['isSelf', 'true'],
];
const usp = new URLSearchParams({});
const result = usp.handleGetAll();
for (const [i, v] of result.entries()) {
expect(v[0]).toBe(expected[i][0]);
expect(v[1]).toBe(expected[i][1]);
}
});
test('URLSearchParams.handleHas should return `true` if the params has its own property that received', () => {
const received = [
'',
'skill',
'name',
'age',
];
const expected = [
false,
false,
true,
true,
];
const usp = new URLSearchParams({});
for (const [i, v] of received.entries()) {
const result = usp.handleHas(v);
expect(result).toBe(expected[i]);
}
});
test('URLSearchParams.handleSet should set all of the new value to the key which was received', () => {
const received = [
{
key: 'name',
value: 'duanzhaoyang',
},
{
key: 'age',
value: 50,
},
];
const expected = [
{
url: 'https://ddzy.github.io/login?name=duanzhaoyang&age=21&isSelf=true',
params: {
name: 'duanzhaoyang',
age: '21',
isSelf: 'true',
},
},
{
url: 'https://ddzy.github.io/login?name=duanzhaoyang&age=50&isSelf=true',
params: {
name: 'duanzhaoyang',
age: '50',
isSelf: 'true',
},
},
];
const usp = new URLSearchParams({});
for (const [i, v] of received.entries()) {
const __this__ = usp.handleSet(v.key, v.value);
const { url, params } = usp.state;
// ? check this
expect(__this__ instanceof URLSearchParams).toBeTruthy();
// ? check url
expect(url).toBe(expected[i].url);
// ? check params
expect(params).toEqual(expected[i].params);
}
});
test('URLSearchParams.handleKeys should return the `keys-collection` of the params', () => {
const expected = [
'name',
'age',
'isSelf',
];
const usp = new URLSearchParams({});
const result = usp.handleKeys();
for (const [i, v] of expected.entries()) {
expect(v).toBe(result[i]);
}
});
test('URLSearchParams.handleValues should return the `values-collection` of the params', () => {
const expected = [
'ddzy',
'21',
'true',
];
const usp = new URLSearchParams({});
const result = usp.handleValues();
for (const [i, v] of expected.entries()) {
expect(v).toBe(result[i]);
}
});
test('URLSearchParams.iterator should being called by the `iterator`', () => {
const expected = [
['name', 'ddzy'],
['age', '21'],
['isSelf', 'true'],
];
const usp = new URLSearchParams({});
let count = 0;
for (const [key, value] of (usp.state.params as any)) {
expect(key).toBe(expected[count][0]);
expect(value).toBe(expected[count][1]);
count++;
}
});
});

API

Name
Type
Description
handleAppend
function
追加新的键值对
handleDelete
function
移除某个键值对
handleGet
function
获取指定的参数键值
handleGetAll
function
获取所有的参数值
handleHas
function
判断是否存在指定键名
handleSet
function
更新源 url 中的对应键值(但是 params 中的值是不变的)
handleKeys
function
获取键名数组
handleValues
function
获取键值数组
复制链接