chore: improved schema
This commit is contained in:
4
packages/client/.gitignore
vendored
Normal file
4
packages/client/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
/node_modules/
|
||||
/dist/
|
||||
/coverage/
|
||||
/.env
|
||||
34
packages/client/package.json
Normal file
34
packages/client/package.json
Normal file
@@ -0,0 +1,34 @@
|
||||
{
|
||||
"type": "module",
|
||||
"main": "dist/exports.js",
|
||||
"scripts": {
|
||||
"build": "tsc --build",
|
||||
"test:unit": "vitest --run --passWithNoTests",
|
||||
"test": "pnpm run \"/^test:/\"",
|
||||
"generate:client": "openapi-typescript http://localhost:3400/docs/openapi.json -o src/__generated__/schema.ts"
|
||||
},
|
||||
"packageManager": "pnpm@10.6.0",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"exports": {
|
||||
".": "./dist/exports.js"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@morten-olsen/stash-configs": "workspace:*",
|
||||
"@morten-olsen/stash-tests": "workspace:*",
|
||||
"@types/node": "24.10.2",
|
||||
"@vitest/coverage-v8": "4.0.15",
|
||||
"openapi-typescript": "^7.10.1",
|
||||
"typescript": "5.9.3",
|
||||
"vitest": "4.0.15"
|
||||
},
|
||||
"name": "@morten-olsen/stash-client",
|
||||
"version": "1.0.0",
|
||||
"imports": {
|
||||
"#root/*": "./src/*"
|
||||
},
|
||||
"dependencies": {
|
||||
"openapi-fetch": "^0.15.0"
|
||||
}
|
||||
}
|
||||
515
packages/client/src/__generated__/schema.ts
generated
Normal file
515
packages/client/src/__generated__/schema.ts
generated
Normal file
@@ -0,0 +1,515 @@
|
||||
/**
|
||||
* This file was auto-generated by openapi-typescript.
|
||||
* Do not make direct changes to the file.
|
||||
*/
|
||||
|
||||
export interface paths {
|
||||
"/system/ready": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
/** Get system ready state */
|
||||
get: operations["GET/system/ready"];
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/documents": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/** Upsert document */
|
||||
post: operations["POST/documents"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/document-filters": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/** Find documents */
|
||||
post: operations["POST/documents-filters"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/document-chunk-filters": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get?: never;
|
||||
put?: never;
|
||||
/** Find document chunks */
|
||||
post: operations["POST/documents-chunk-filters"];
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
}
|
||||
export type webhooks = Record<string, never>;
|
||||
export interface components {
|
||||
schemas: never;
|
||||
responses: never;
|
||||
parameters: never;
|
||||
requestBodies: never;
|
||||
headers: never;
|
||||
pathItems: never;
|
||||
}
|
||||
export type $defs = Record<string, never>;
|
||||
export interface operations {
|
||||
"GET/system/ready": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Default Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
/** @enum {string} */
|
||||
status: "ok";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
"POST/documents": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: {
|
||||
content: {
|
||||
"application/json": {
|
||||
id?: string | null;
|
||||
owner?: string | null;
|
||||
contentType?: string | null;
|
||||
content?: string | null;
|
||||
source?: string | null;
|
||||
sourceId?: string | null;
|
||||
type?: string;
|
||||
typeVersion?: number | null;
|
||||
searchText?: string | null;
|
||||
metadata?: unknown;
|
||||
};
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Default Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
/** @enum {string} */
|
||||
action: "inserted" | "updated" | "skipped";
|
||||
id: string;
|
||||
document: {
|
||||
id: string;
|
||||
owner: string | null;
|
||||
/** Format: date-time */
|
||||
createdAt: string;
|
||||
/** Format: date-time */
|
||||
updatedAt: string;
|
||||
/** Format: date-time */
|
||||
deletedAt: string | null;
|
||||
contentType: string | null;
|
||||
content: string | null;
|
||||
source: string | null;
|
||||
sourceId: string | null;
|
||||
type: string;
|
||||
typeVersion: number | null;
|
||||
searchText: string | null;
|
||||
metadata: unknown;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
"POST/documents-filters": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody: {
|
||||
content: {
|
||||
"application/json": {
|
||||
/** @default 0 */
|
||||
offset?: number;
|
||||
/** @default 20 */
|
||||
limit?: number;
|
||||
condition: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: ({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
})[];
|
||||
})[];
|
||||
})[];
|
||||
}) | string;
|
||||
};
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Default Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
items: {
|
||||
id: string;
|
||||
owner: string | null;
|
||||
/** Format: date-time */
|
||||
createdAt: string;
|
||||
/** Format: date-time */
|
||||
updatedAt: string;
|
||||
/** Format: date-time */
|
||||
deletedAt: string | null;
|
||||
contentType: string | null;
|
||||
content: string | null;
|
||||
source: string | null;
|
||||
sourceId: string | null;
|
||||
type: string;
|
||||
typeVersion: number | null;
|
||||
searchText: string | null;
|
||||
metadata: unknown;
|
||||
}[];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
"POST/documents-chunk-filters": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: {
|
||||
content: {
|
||||
"application/json": {
|
||||
/** @default 20 */
|
||||
limit?: number;
|
||||
/** @default 0 */
|
||||
offset?: number;
|
||||
semanticText?: string;
|
||||
conditions?: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: (({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
}) | {
|
||||
/** @enum {string} */
|
||||
type: "operator";
|
||||
/** @enum {string} */
|
||||
operator: "and" | "or";
|
||||
conditions: ({
|
||||
/** @enum {string} */
|
||||
type: "text";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equal?: string | null;
|
||||
notEqual?: string;
|
||||
like?: string;
|
||||
notLike?: string;
|
||||
in?: string[];
|
||||
notIn?: string[];
|
||||
};
|
||||
} | {
|
||||
/** @enum {string} */
|
||||
type: "number";
|
||||
tableName?: string;
|
||||
field: string[];
|
||||
conditions: {
|
||||
equals?: number | null;
|
||||
notEquals?: number | null;
|
||||
greaterThan?: number;
|
||||
greaterThanOrEqual?: number;
|
||||
lessThan?: number;
|
||||
lessThanOrEqual?: number;
|
||||
in?: number[];
|
||||
notIn?: number[];
|
||||
};
|
||||
})[];
|
||||
})[];
|
||||
})[];
|
||||
}) | string;
|
||||
};
|
||||
};
|
||||
};
|
||||
responses: {
|
||||
/** @description Default Response */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
items: {
|
||||
id: string;
|
||||
owner: string;
|
||||
content: string;
|
||||
metadata: unknown;
|
||||
distance?: number;
|
||||
}[];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
19
packages/client/src/exports.ts
Normal file
19
packages/client/src/exports.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import createApiClient from 'openapi-fetch';
|
||||
|
||||
import type { paths } from './__generated__/schema.js';
|
||||
|
||||
type CreateStashClientOptions = {
|
||||
baseUrl: string;
|
||||
};
|
||||
|
||||
type StashClient = ReturnType<typeof createApiClient<paths>>;
|
||||
|
||||
const createStashClient = (options: CreateStashClientOptions): StashClient => {
|
||||
const client = createApiClient<paths>({
|
||||
baseUrl: options.baseUrl,
|
||||
});
|
||||
return client;
|
||||
};
|
||||
|
||||
export type { StashClient };
|
||||
export { createStashClient };
|
||||
9
packages/client/tsconfig.json
Normal file
9
packages/client/tsconfig.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "./dist"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts"
|
||||
],
|
||||
"extends": "@morten-olsen/stash-configs/tsconfig.json"
|
||||
}
|
||||
12
packages/client/vitest.config.ts
Normal file
12
packages/client/vitest.config.ts
Normal file
@@ -0,0 +1,12 @@
|
||||
import { defineConfig } from 'vitest/config';
|
||||
import { getAliases } from '@morten-olsen/stash-tests/vitest';
|
||||
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
export default defineConfig(async () => {
|
||||
const aliases = await getAliases();
|
||||
return {
|
||||
resolve: {
|
||||
alias: aliases,
|
||||
},
|
||||
};
|
||||
});
|
||||
Reference in New Issue
Block a user