@tanstack/ai-worldlabs 0.0.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +42 -2
- package/dist/esm/adapters/world.d.ts +38 -0
- package/dist/esm/adapters/world.js +314 -0
- package/dist/esm/adapters/world.js.map +1 -0
- package/dist/esm/byok.d.ts +1 -0
- package/dist/esm/byok.js +11 -0
- package/dist/esm/byok.js.map +1 -0
- package/dist/esm/generated/client/client.gen.d.ts +2 -0
- package/dist/esm/generated/client/client.gen.js +174 -0
- package/dist/esm/generated/client/client.gen.js.map +1 -0
- package/dist/esm/generated/client/index.d.ts +10 -0
- package/dist/esm/generated/client/index.js +5 -0
- package/dist/esm/generated/client/types.gen.d.ts +120 -0
- package/dist/esm/generated/client/utils.gen.d.ts +37 -0
- package/dist/esm/generated/client/utils.gen.js +177 -0
- package/dist/esm/generated/client/utils.gen.js.map +1 -0
- package/dist/esm/generated/client.d.ts +1 -0
- package/dist/esm/generated/client.gen.d.ts +12 -0
- package/dist/esm/generated/client.gen.js +9 -0
- package/dist/esm/generated/client.gen.js.map +1 -0
- package/dist/esm/generated/client.js +5 -0
- package/dist/esm/generated/core/auth.gen.d.ts +25 -0
- package/dist/esm/generated/core/auth.gen.js +12 -0
- package/dist/esm/generated/core/auth.gen.js.map +1 -0
- package/dist/esm/generated/core/bodySerializer.gen.d.ts +25 -0
- package/dist/esm/generated/core/bodySerializer.gen.js +6 -0
- package/dist/esm/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/params.gen.d.ts +43 -0
- package/dist/esm/generated/core/params.gen.js +9 -0
- package/dist/esm/generated/core/params.gen.js.map +1 -0
- package/dist/esm/generated/core/pathSerializer.gen.d.ts +33 -0
- package/dist/esm/generated/core/pathSerializer.gen.js +82 -0
- package/dist/esm/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/esm/generated/core/queryKeySerializer.gen.d.ts +18 -0
- package/dist/esm/generated/core/serverSentEvents.gen.d.ts +71 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js +96 -0
- package/dist/esm/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/esm/generated/core/types.gen.d.ts +83 -0
- package/dist/esm/generated/core/utils.gen.d.ts +19 -0
- package/dist/esm/generated/core/utils.gen.js +78 -0
- package/dist/esm/generated/core/utils.gen.js.map +1 -0
- package/dist/esm/generated/index.d.ts +2 -0
- package/dist/esm/generated/sdk.gen.d.ts +275 -0
- package/dist/esm/generated/sdk.gen.js +79 -0
- package/dist/esm/generated/sdk.gen.js.map +1 -0
- package/dist/esm/generated/types.gen.d.ts +1610 -0
- package/dist/esm/index.d.ts +5 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/model-meta.d.ts +63 -0
- package/dist/esm/model-meta.js +17 -0
- package/dist/esm/model-meta.js.map +1 -0
- package/dist/esm/utils/client.d.ts +16 -0
- package/dist/esm/utils/client.js +35 -0
- package/dist/esm/utils/client.js.map +1 -0
- package/package.json +55 -6
- package/src/adapters/world.ts +535 -0
- package/src/byok.ts +7 -0
- package/src/generated/client/client.gen.ts +301 -0
- package/src/generated/client/index.ts +27 -0
- package/src/generated/client/types.gen.ts +247 -0
- package/src/generated/client/utils.gen.ts +332 -0
- package/src/generated/client.gen.ts +26 -0
- package/src/generated/client.ts +3 -0
- package/src/generated/core/auth.gen.ts +48 -0
- package/src/generated/core/bodySerializer.gen.ts +96 -0
- package/src/generated/core/params.gen.ts +186 -0
- package/src/generated/core/pathSerializer.gen.ts +186 -0
- package/src/generated/core/queryKeySerializer.gen.ts +139 -0
- package/src/generated/core/serverSentEvents.gen.ts +265 -0
- package/src/generated/core/types.gen.ts +124 -0
- package/src/generated/core/utils.gen.ts +146 -0
- package/src/generated/index.ts +113 -0
- package/src/generated/sdk.gen.ts +531 -0
- package/src/generated/types.gen.ts +1767 -0
- package/src/index.ts +20 -0
- package/src/model-meta.ts +79 -0
- package/src/utils/client.ts +50 -0
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { WorldLabsWorldAdapter, worldlabsWorld, createWorldLabsWorld, } from './adapters/world.js';
|
|
2
|
+
export type { WorldLabsClientConfig } from './adapters/world.js';
|
|
3
|
+
export { WORLDLABS_WORLD_MODELS, isWorldLabsWorldModel } from './model-meta.js';
|
|
4
|
+
export type { WorldLabsWorldModel, WorldLabsWorldProviderOptions, WorldLabsWorldModelProviderOptionsByName, WorldLabsMediaRef, WorldLabsLocatedImageRef, } from './model-meta.js';
|
|
5
|
+
export { DEFAULT_WORLDLABS_API_URL, getWorldLabsApiKeyFromEnv, } from './utils/client.js';
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DEFAULT_WORLDLABS_API_URL, getWorldLabsApiKeyFromEnv } from "./utils/client.js";
|
|
2
|
+
import { WorldLabsWorldAdapter, createWorldLabsWorld, worldlabsWorld } from "./adapters/world.js";
|
|
3
|
+
import { WORLDLABS_WORLD_MODELS, isWorldLabsWorldModel } from "./model-meta.js";
|
|
4
|
+
export { DEFAULT_WORLDLABS_API_URL, WORLDLABS_WORLD_MODELS, WorldLabsWorldAdapter, createWorldLabsWorld, getWorldLabsApiKeyFromEnv, isWorldLabsWorldModel, worldlabsWorld };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* World Labs Marble model ids for `worldlabsWorld('marble-1.1')`.
|
|
3
|
+
*/
|
|
4
|
+
export declare const WORLDLABS_WORLD_MODELS: readonly ["marble-1.1-plus", "marble-1.1", "marble-1.0", "marble-1.0-draft"];
|
|
5
|
+
export type WorldLabsWorldModel = (typeof WORLDLABS_WORLD_MODELS)[number];
|
|
6
|
+
export declare function isWorldLabsWorldModel(model: string): model is WorldLabsWorldModel;
|
|
7
|
+
export interface WorldLabsMediaRef {
|
|
8
|
+
/** Public URL for the media. */
|
|
9
|
+
uri?: string;
|
|
10
|
+
/** Id from a previous media-asset upload. */
|
|
11
|
+
mediaAssetId?: string;
|
|
12
|
+
/** Base64-encoded file bytes. */
|
|
13
|
+
dataBase64?: string;
|
|
14
|
+
/** File extension without a dot, used with `dataBase64`. */
|
|
15
|
+
extension?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface WorldLabsLocatedImageRef extends WorldLabsMediaRef {
|
|
18
|
+
/** Horizontal angle in degrees. 0 is front, 90 is right, 180 is back. */
|
|
19
|
+
azimuth?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Provider options for World Labs world generation.
|
|
23
|
+
*
|
|
24
|
+
* `createWorld` sends these on the generate request. Image, multi-image, and
|
|
25
|
+
* video inputs select the matching World Labs prompt type. Text-only calls
|
|
26
|
+
* use `generateWorld({ prompt })`.
|
|
27
|
+
*/
|
|
28
|
+
export interface WorldLabsWorldProviderOptions {
|
|
29
|
+
/** Optional title stored on the world. Max 64 characters. */
|
|
30
|
+
displayName?: string;
|
|
31
|
+
/** Random seed for generation. */
|
|
32
|
+
seed?: number;
|
|
33
|
+
/** Optional tags. Max 10 tags, each up to 32 characters. */
|
|
34
|
+
tags?: Array<string>;
|
|
35
|
+
/** If true, use the text prompt as-is without recaptioning. */
|
|
36
|
+
disableRecaption?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* How to treat a single image as a panorama. `auto` detects equirectangular
|
|
39
|
+
* panos. `true` always treats the image as a pano. `false` treats it as a
|
|
40
|
+
* standard image.
|
|
41
|
+
*/
|
|
42
|
+
isPano?: 'auto' | true | false;
|
|
43
|
+
/** Single image input. Do not combine with `images` or `video`. */
|
|
44
|
+
image?: WorldLabsMediaRef;
|
|
45
|
+
/** Multiple images of the same scene. Do not combine with `image` or `video`. */
|
|
46
|
+
images?: Array<WorldLabsLocatedImageRef>;
|
|
47
|
+
/** Video input. Do not combine with `image` or `images`. */
|
|
48
|
+
video?: WorldLabsMediaRef;
|
|
49
|
+
/** World visibility. Default is private. */
|
|
50
|
+
permission?: {
|
|
51
|
+
public?: boolean;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* When false, return after the generate call with `status: 'waiting'` and
|
|
55
|
+
* `operationId`. Default is true: poll until the world is ready.
|
|
56
|
+
*/
|
|
57
|
+
wait?: boolean;
|
|
58
|
+
/** Poll interval in milliseconds when `wait` is true. Default 2000. */
|
|
59
|
+
pollIntervalMs?: number;
|
|
60
|
+
}
|
|
61
|
+
export type WorldLabsWorldModelProviderOptionsByName = {
|
|
62
|
+
[M in WorldLabsWorldModel]: WorldLabsWorldProviderOptions;
|
|
63
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
//#region src/model-meta.ts
|
|
2
|
+
/**
|
|
3
|
+
* World Labs Marble model ids for `worldlabsWorld('marble-1.1')`.
|
|
4
|
+
*/
|
|
5
|
+
var WORLDLABS_WORLD_MODELS = [
|
|
6
|
+
"marble-1.1-plus",
|
|
7
|
+
"marble-1.1",
|
|
8
|
+
"marble-1.0",
|
|
9
|
+
"marble-1.0-draft"
|
|
10
|
+
];
|
|
11
|
+
function isWorldLabsWorldModel(model) {
|
|
12
|
+
return WORLDLABS_WORLD_MODELS.includes(model);
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { WORLDLABS_WORLD_MODELS, isWorldLabsWorldModel };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=model-meta.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-meta.js","names":[],"sources":["../../src/model-meta.ts"],"sourcesContent":["/**\n * World Labs Marble model ids for `worldlabsWorld('marble-1.1')`.\n */\n\nexport const WORLDLABS_WORLD_MODELS = [\n 'marble-1.1-plus',\n 'marble-1.1',\n 'marble-1.0',\n 'marble-1.0-draft',\n] as const\n\nexport type WorldLabsWorldModel = (typeof WORLDLABS_WORLD_MODELS)[number]\n\nexport function isWorldLabsWorldModel(\n model: string,\n): model is WorldLabsWorldModel {\n return (WORLDLABS_WORLD_MODELS as ReadonlyArray<string>).includes(model)\n}\n\nexport interface WorldLabsMediaRef {\n /** Public URL for the media. */\n uri?: string\n /** Id from a previous media-asset upload. */\n mediaAssetId?: string\n /** Base64-encoded file bytes. */\n dataBase64?: string\n /** File extension without a dot, used with `dataBase64`. */\n extension?: string\n}\n\nexport interface WorldLabsLocatedImageRef extends WorldLabsMediaRef {\n /** Horizontal angle in degrees. 0 is front, 90 is right, 180 is back. */\n azimuth?: number\n}\n\n/**\n * Provider options for World Labs world generation.\n *\n * `createWorld` sends these on the generate request. Image, multi-image, and\n * video inputs select the matching World Labs prompt type. Text-only calls\n * use `generateWorld({ prompt })`.\n */\nexport interface WorldLabsWorldProviderOptions {\n /** Optional title stored on the world. Max 64 characters. */\n displayName?: string\n /** Random seed for generation. */\n seed?: number\n /** Optional tags. Max 10 tags, each up to 32 characters. */\n tags?: Array<string>\n /** If true, use the text prompt as-is without recaptioning. */\n disableRecaption?: boolean\n /**\n * How to treat a single image as a panorama. `auto` detects equirectangular\n * panos. `true` always treats the image as a pano. `false` treats it as a\n * standard image.\n */\n isPano?: 'auto' | true | false\n /** Single image input. Do not combine with `images` or `video`. */\n image?: WorldLabsMediaRef\n /** Multiple images of the same scene. Do not combine with `image` or `video`. */\n images?: Array<WorldLabsLocatedImageRef>\n /** Video input. Do not combine with `image` or `images`. */\n video?: WorldLabsMediaRef\n /** World visibility. Default is private. */\n permission?: {\n public?: boolean\n }\n /**\n * When false, return after the generate call with `status: 'waiting'` and\n * `operationId`. Default is true: poll until the world is ready.\n */\n wait?: boolean\n /** Poll interval in milliseconds when `wait` is true. Default 2000. */\n pollIntervalMs?: number\n}\n\nexport type WorldLabsWorldModelProviderOptionsByName = {\n [M in WorldLabsWorldModel]: WorldLabsWorldProviderOptions\n}\n"],"mappings":";;;;AAIA,IAAa,yBAAyB;CACpC;CACA;CACA;CACA;AACF;AAIA,SAAgB,sBACd,OAC8B;CAC9B,OAAQ,uBAAiD,SAAS,KAAK;AACzE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Client } from '../generated/client/index.js';
|
|
2
|
+
export declare const DEFAULT_WORLDLABS_API_URL = "https://api.worldlabs.ai";
|
|
3
|
+
export interface WorldLabsClientConfig {
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
baseUrl?: string;
|
|
6
|
+
fetch?: typeof fetch;
|
|
7
|
+
defaultHeaders?: Record<string, string>;
|
|
8
|
+
}
|
|
9
|
+
export declare function getWorldLabsApiKeyFromEnv(): string;
|
|
10
|
+
export declare function resolveWorldLabsApiKey(config?: WorldLabsClientConfig): string;
|
|
11
|
+
export declare function resolveWorldLabsApiUrl(config?: WorldLabsClientConfig): string;
|
|
12
|
+
export declare function createWorldLabsClient(config?: WorldLabsClientConfig): {
|
|
13
|
+
client: Client;
|
|
14
|
+
apiKey: string;
|
|
15
|
+
baseUrl: string;
|
|
16
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { createConfig } from "../generated/client/utils.gen.js";
|
|
2
|
+
import { createClient } from "../generated/client/client.gen.js";
|
|
3
|
+
import "../generated/client/index.js";
|
|
4
|
+
import { getApiKeyFromEnv } from "@tanstack/ai-utils";
|
|
5
|
+
//#region src/utils/client.ts
|
|
6
|
+
var DEFAULT_WORLDLABS_API_URL = "https://api.worldlabs.ai";
|
|
7
|
+
function getWorldLabsApiKeyFromEnv() {
|
|
8
|
+
return getApiKeyFromEnv("WORLDLABS_API_KEY");
|
|
9
|
+
}
|
|
10
|
+
function resolveWorldLabsApiKey(config) {
|
|
11
|
+
return config?.apiKey ?? getWorldLabsApiKeyFromEnv();
|
|
12
|
+
}
|
|
13
|
+
function resolveWorldLabsApiUrl(config) {
|
|
14
|
+
return (config?.baseUrl ?? "https://api.worldlabs.ai").replace(/\/+$/, "");
|
|
15
|
+
}
|
|
16
|
+
function createWorldLabsClient(config = {}) {
|
|
17
|
+
const apiKey = resolveWorldLabsApiKey(config);
|
|
18
|
+
const baseUrl = resolveWorldLabsApiUrl(config);
|
|
19
|
+
const fetchImpl = config.fetch ?? globalThis.fetch;
|
|
20
|
+
if (typeof fetchImpl !== "function") throw new Error("global fetch is not available. Pass `fetch` in the World Labs adapter config.");
|
|
21
|
+
return {
|
|
22
|
+
client: createClient(createConfig({
|
|
23
|
+
baseUrl,
|
|
24
|
+
auth: apiKey,
|
|
25
|
+
fetch: fetchImpl,
|
|
26
|
+
headers: config.defaultHeaders
|
|
27
|
+
})),
|
|
28
|
+
apiKey,
|
|
29
|
+
baseUrl
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { DEFAULT_WORLDLABS_API_URL, createWorldLabsClient, getWorldLabsApiKeyFromEnv, resolveWorldLabsApiKey, resolveWorldLabsApiUrl };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","names":[],"sources":["../../../src/utils/client.ts"],"sourcesContent":["import { getApiKeyFromEnv } from '@tanstack/ai-utils'\nimport { createClient, createConfig } from '../generated/client/index'\nimport type { Client } from '../generated/client/index'\n\nexport const DEFAULT_WORLDLABS_API_URL = 'https://api.worldlabs.ai'\n\nexport interface WorldLabsClientConfig {\n apiKey?: string\n baseUrl?: string\n fetch?: typeof fetch\n defaultHeaders?: Record<string, string>\n}\n\nexport function getWorldLabsApiKeyFromEnv(): string {\n return getApiKeyFromEnv('WORLDLABS_API_KEY')\n}\n\nexport function resolveWorldLabsApiKey(config?: WorldLabsClientConfig): string {\n return config?.apiKey ?? getWorldLabsApiKeyFromEnv()\n}\n\nexport function resolveWorldLabsApiUrl(config?: WorldLabsClientConfig): string {\n return (config?.baseUrl ?? DEFAULT_WORLDLABS_API_URL).replace(/\\/+$/, '')\n}\n\nexport function createWorldLabsClient(config: WorldLabsClientConfig = {}): {\n client: Client\n apiKey: string\n baseUrl: string\n} {\n const apiKey = resolveWorldLabsApiKey(config)\n const baseUrl = resolveWorldLabsApiUrl(config)\n const fetchImpl = config.fetch ?? globalThis.fetch\n if (typeof fetchImpl !== 'function') {\n throw new Error(\n 'global fetch is not available. Pass `fetch` in the World Labs adapter config.',\n )\n }\n\n const client = createClient(\n createConfig({\n baseUrl,\n auth: apiKey,\n fetch: fetchImpl,\n headers: config.defaultHeaders,\n }),\n )\n\n return { client, apiKey, baseUrl }\n}\n"],"mappings":";;;;;AAIA,IAAa,4BAA4B;AASzC,SAAgB,4BAAoC;CAClD,OAAO,iBAAiB,mBAAmB;AAC7C;AAEA,SAAgB,uBAAuB,QAAwC;CAC7E,OAAO,QAAQ,UAAU,0BAA0B;AACrD;AAEA,SAAgB,uBAAuB,QAAwC;CAC7E,QAAQ,QAAQ,WAAA,2BAAA,CAAsC,QAAQ,QAAQ,EAAE;AAC1E;AAEA,SAAgB,sBAAsB,SAAgC,CAAC,GAIrE;CACA,MAAM,SAAS,uBAAuB,MAAM;CAC5C,MAAM,UAAU,uBAAuB,MAAM;CAC7C,MAAM,YAAY,OAAO,SAAS,WAAW;CAC7C,IAAI,OAAO,cAAc,YACvB,MAAM,IAAI,MACR,+EACF;CAYF,OAAO;EAAE,QATM,aACb,aAAa;GACX;GACA,MAAM;GACN,OAAO;GACP,SAAS,OAAO;EAClB,CAAC,CAGM;EAAQ;EAAQ;CAAQ;AACnC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/ai-worldlabs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "World Labs adapter for TanStack AI world generation (Marble).",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -13,11 +13,60 @@
|
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/TanStack/ai/issues"
|
|
15
15
|
},
|
|
16
|
+
"funding": {
|
|
17
|
+
"type": "github",
|
|
18
|
+
"url": "https://github.com/sponsors/tannerlinsley"
|
|
19
|
+
},
|
|
20
|
+
"type": "module",
|
|
21
|
+
"module": "./dist/esm/index.js",
|
|
22
|
+
"types": "./dist/esm/index.d.ts",
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/esm/index.d.ts",
|
|
26
|
+
"import": "./dist/esm/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./byok": {
|
|
29
|
+
"types": "./dist/esm/byok.d.ts",
|
|
30
|
+
"import": "./dist/esm/byok.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
16
33
|
"files": [
|
|
17
|
-
"
|
|
34
|
+
"dist",
|
|
35
|
+
"src"
|
|
36
|
+
],
|
|
37
|
+
"keywords": [
|
|
38
|
+
"ai",
|
|
39
|
+
"ai-sdk",
|
|
40
|
+
"typescript",
|
|
41
|
+
"tanstack",
|
|
42
|
+
"worldlabs",
|
|
43
|
+
"world labs",
|
|
44
|
+
"marble",
|
|
45
|
+
"adapter",
|
|
46
|
+
"world-generation"
|
|
18
47
|
],
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@tanstack/ai-utils": "^0.4.1"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@hey-api/openapi-ts": "^0.99.0",
|
|
53
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
54
|
+
"vite": "^8.2.1",
|
|
55
|
+
"@tanstack/ai": "0.63.0"
|
|
56
|
+
},
|
|
57
|
+
"peerDependencies": {
|
|
58
|
+
"@tanstack/ai": "^0.63.0"
|
|
59
|
+
},
|
|
60
|
+
"scripts": {
|
|
61
|
+
"build": "vite build",
|
|
62
|
+
"clean": "premove ./build ./dist",
|
|
63
|
+
"generate:client": "openapi-ts",
|
|
64
|
+
"lint:fix": "oxlint src --type-aware --fix",
|
|
65
|
+
"test:build": "publint --strict",
|
|
66
|
+
"test:oxlint": "oxlint src --type-aware",
|
|
67
|
+
"test:coverage": "vitest run --coverage --coverage.include='src/**' --coverage.reporter=text-summary --coverage.reporter=json-summary",
|
|
68
|
+
"test:lib": "vitest run",
|
|
69
|
+
"test:lib:dev": "pnpm test:lib --watch",
|
|
70
|
+
"test:types": "tsc"
|
|
22
71
|
}
|
|
23
|
-
}
|
|
72
|
+
}
|