forked from mirrors/homebox
move to nuxt
This commit is contained in:
parent
890eb55d27
commit
26ecb5a9d4
93 changed files with 5273 additions and 4749 deletions
17
frontend/lib/api/base/base-api.ts
Normal file
17
frontend/lib/api/base/base-api.ts
Normal file
|
@ -0,0 +1,17 @@
|
|||
import { Requests } from '../../requests';
|
||||
// <
|
||||
// TGetResult,
|
||||
// TPostData,
|
||||
// TPostResult,
|
||||
// TPutData = TPostData,
|
||||
// TPutResult = TPostResult,
|
||||
// TDeleteResult = void
|
||||
// >
|
||||
|
||||
export class BaseAPI {
|
||||
http: Requests;
|
||||
|
||||
constructor(requests: Requests) {
|
||||
this.http = requests;
|
||||
}
|
||||
}
|
3
frontend/lib/api/base/base-types.ts
Normal file
3
frontend/lib/api/base/base-types.ts
Normal file
|
@ -0,0 +1,3 @@
|
|||
export type Results<T> = {
|
||||
items: T[];
|
||||
};
|
24
frontend/lib/api/base/index.test.ts
Normal file
24
frontend/lib/api/base/index.test.ts
Normal file
|
@ -0,0 +1,24 @@
|
|||
import { describe, expect, it } from 'vitest';
|
||||
import { UrlBuilder } from '.';
|
||||
|
||||
describe('UrlBuilder', () => {
|
||||
it('basic query parameter', () => {
|
||||
const result = UrlBuilder('/test', { a: 'b' });
|
||||
expect(result).toBe('/api/v1/test?a=b');
|
||||
});
|
||||
|
||||
it('multiple query parameters', () => {
|
||||
const result = UrlBuilder('/test', { a: 'b', c: 'd' });
|
||||
expect(result).toBe('/api/v1/test?a=b&c=d');
|
||||
});
|
||||
|
||||
it('no query parameters', () => {
|
||||
const result = UrlBuilder('/test');
|
||||
expect(result).toBe('/api/v1/test');
|
||||
});
|
||||
|
||||
it('list-like query parameters', () => {
|
||||
const result = UrlBuilder('/test', { a: ['b', 'c'] });
|
||||
expect(result).toBe('/api/v1/test?a=b&a=c');
|
||||
});
|
||||
});
|
2
frontend/lib/api/base/index.ts
Normal file
2
frontend/lib/api/base/index.ts
Normal file
|
@ -0,0 +1,2 @@
|
|||
export { BaseAPI } from './base-api';
|
||||
export { UrlBuilder } from './urls';
|
31
frontend/lib/api/base/urls.ts
Normal file
31
frontend/lib/api/base/urls.ts
Normal file
|
@ -0,0 +1,31 @@
|
|||
export const prefix = '/api/v1';
|
||||
|
||||
export type QueryValue =
|
||||
| string
|
||||
| string[]
|
||||
| number
|
||||
| number[]
|
||||
| boolean
|
||||
| null
|
||||
| undefined;
|
||||
|
||||
export function UrlBuilder(
|
||||
rest: string,
|
||||
params: Record<string, QueryValue> = {}
|
||||
): string {
|
||||
// we use a stub base URL to leverage the URL class
|
||||
const url = new URL(prefix + rest, 'http://localhost.com');
|
||||
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
if (Array.isArray(value)) {
|
||||
for (const item of value) {
|
||||
url.searchParams.append(key, String(item));
|
||||
}
|
||||
} else {
|
||||
url.searchParams.append(key, String(value));
|
||||
}
|
||||
}
|
||||
|
||||
// we return the path only, without the base URL
|
||||
return url.toString().replace('http://localhost.com', '');
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue