strapi-query 0.1.0

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # strapi-query
2
+
3
+ Schema-first typed query client for Strapi REST APIs.
4
+
5
+ `strapi-query` keeps runtime entity types clean while deriving relation-aware filters,
6
+ populate options, and response types from a schema registry.
7
+
8
+ ## Install
9
+
10
+ ```sh
11
+ pnpm add strapi-query
12
+ ```
13
+
14
+ ## Define a Schema
15
+
16
+ ```ts
17
+ import { collection, defineSchema, entity, many, one, single } from 'strapi-query';
18
+
19
+ interface Article {
20
+ id: number;
21
+ documentId: string;
22
+ title: string;
23
+ slug: string;
24
+ content: string;
25
+ publishedAt: string;
26
+ }
27
+
28
+ interface Theme {
29
+ id: number;
30
+ documentId: string;
31
+ name: string;
32
+ uid: string;
33
+ }
34
+
35
+ interface UploadFile {
36
+ id: number;
37
+ documentId: string;
38
+ url: string;
39
+ alternativeText: string | null;
40
+ }
41
+
42
+ interface HomePage {
43
+ id: number;
44
+ documentId: string;
45
+ }
46
+
47
+ export const schema = defineSchema({
48
+ article: collection('articles', {
49
+ entity: entity<Article>(),
50
+ relations: {
51
+ cover: one('uploadFile'),
52
+ themes: many('theme')
53
+ }
54
+ }),
55
+ theme: collection('themes', { entity: entity<Theme>() }),
56
+ uploadFile: collection('upload-files', { entity: entity<UploadFile>() }),
57
+ homePage: single('home-page', {
58
+ entity: entity<HomePage>(),
59
+ relations: {
60
+ featuredArticle: one('article'),
61
+ trendingArticles: many('article')
62
+ }
63
+ })
64
+ });
65
+ ```
66
+
67
+ ## Query Strapi
68
+
69
+ ```ts
70
+ import { createStrapiClient } from 'strapi-query';
71
+ import { schema } from './schema';
72
+
73
+ const strapi = createStrapiClient({
74
+ endpoint: 'https://cms.example.com',
75
+ token: process.env.STRAPI_API_TOKEN,
76
+ schema
77
+ });
78
+
79
+ const articles = await strapi.collection('article').findMany({
80
+ filters: {
81
+ slug: { $eq: 'best-reits-singapore' },
82
+ themes: { uid: 'reits' }
83
+ },
84
+ fields: ['title', 'slug', 'publishedAt'],
85
+ populate: {
86
+ cover: true,
87
+ themes: true
88
+ },
89
+ sort: ['publishedAt:desc'],
90
+ pagination: { page: 1, pageSize: 10 }
91
+ });
92
+ ```
93
+
94
+ The response type is inferred from the schema and `populate` object. Runtime records
95
+ do not contain fake relation metadata.
96
+
97
+ ## Type Helpers
98
+
99
+ ```ts
100
+ import type { Entity, Populated } from 'strapi-query';
101
+ import { schema } from './schema';
102
+
103
+ type PlainArticle = Entity<typeof schema, 'article'>;
104
+ type ArticleCard = Populated<typeof schema, 'article', { cover: true; themes: true }>;
105
+ ```
106
+
107
+ ## Scope
108
+
109
+ This is intentionally not an ORM. It does not model persistence, lazy loading,
110
+ transactions, or identity maps. It is a typed REST query boundary for Strapi.
@@ -0,0 +1,9 @@
1
+ export declare class StrapiHttpError extends Error {
2
+ readonly status: number;
3
+ readonly url: string;
4
+ readonly body?: string | undefined;
5
+ readonly name = "StrapiHttpError";
6
+ constructor(message: string, status: number, url: string, body?: string | undefined);
7
+ static fromResponse(response: Response, url: string): Promise<StrapiHttpError>;
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAgB,SAAQ,KAAK;IAKtC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM;IACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IANxB,QAAQ,CAAC,IAAI,qBAAqB;gBAGhC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,YAAA;WAKX,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM;CAK1D"}
package/dist/errors.js ADDED
@@ -0,0 +1,18 @@
1
+ export class StrapiHttpError extends Error {
2
+ status;
3
+ url;
4
+ body;
5
+ name = 'StrapiHttpError';
6
+ constructor(message, status, url, body) {
7
+ super(message);
8
+ this.status = status;
9
+ this.url = url;
10
+ this.body = body;
11
+ }
12
+ static async fromResponse(response, url) {
13
+ const body = await response.text().catch(() => undefined);
14
+ const message = `Strapi request failed with ${response.status} ${response.statusText}`;
15
+ return new StrapiHttpError(message, response.status, url, body || undefined);
16
+ }
17
+ }
18
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAK7B;IACA;IACA;IANF,IAAI,GAAG,iBAAiB,CAAC;IAElC,YACE,OAAe,EACN,MAAc,EACd,GAAW,EACX,IAAa;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJN,WAAM,GAAN,MAAM,CAAQ;QACd,QAAG,GAAH,GAAG,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAS;IAGxB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAkB,EAAE,GAAW;QACvD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,8BAA8B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;QACvF,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;IAC/E,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { collection, createStrapiClient, defineSchema, entity, many, one, single } from './public-api.js';
2
+ export type { CollectionResource, CreateStrapiClientOptions, Entity, FieldSelection, Filters, ManyRelation, OneRelation, Pagination, Populate, Populated, Query, RelationDefinitions, ResourceDefinition, SchemaDefinition, SingleResource, Sort, StrapiClient, StrapiCollectionResponse, StrapiMeta, StrapiSingleResponse } from './types.js';
3
+ export { StrapiHttpError } from './errors.js';
4
+ export { stringifyQuery } from './query-string.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,GAAG,EACH,MAAM,EACN,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,MAAM,EACN,cAAc,EACd,OAAO,EACP,YAAY,EACZ,WAAW,EACX,UAAU,EACV,QAAQ,EACR,SAAS,EACT,KAAK,EACL,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,IAAI,EACJ,YAAY,EACZ,wBAAwB,EACxB,UAAU,EACV,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { collection, createStrapiClient, defineSchema, entity, many, one, single } from './public-api.js';
2
+ export { StrapiHttpError } from './errors.js';
3
+ export { stringifyQuery } from './query-string.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,IAAI,EACJ,GAAG,EACH,MAAM,EACN,MAAM,iBAAiB,CAAC;AAyBzB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { CollectionResource, CreateStrapiClientOptions, ManyRelation, OneRelation, RelationDefinitions, SchemaDefinition, SingleResource, StrapiClient } from './types.js';
2
+ export declare function one<const Target extends string>(target: Target): OneRelation<Target>;
3
+ export declare function many<const Target extends string>(target: Target): ManyRelation<Target>;
4
+ export declare function entity<Entity>(): Entity;
5
+ export declare function collection<Entity>(path: string): CollectionResource<Entity, {}>;
6
+ export declare function collection<Entity, const Relations extends RelationDefinitions = {}>(path: string, options: {
7
+ entity: Entity;
8
+ relations?: Relations;
9
+ }): CollectionResource<Entity, Relations>;
10
+ export declare function single<Entity>(path: string): SingleResource<Entity, {}>;
11
+ export declare function single<Entity, const Relations extends RelationDefinitions = {}>(path: string, options: {
12
+ entity: Entity;
13
+ relations?: Relations;
14
+ }): SingleResource<Entity, Relations>;
15
+ export declare function defineSchema<const Schema extends SchemaDefinition>(schema: Schema): Schema;
16
+ export declare function createStrapiClient<const Schema extends SchemaDefinition>(options: CreateStrapiClientOptions<Schema>): StrapiClient<Schema>;
17
+ //# sourceMappingURL=public-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.d.ts","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAIV,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,WAAW,EAEX,mBAAmB,EACnB,gBAAgB,EAChB,cAAc,EACd,YAAY,EAGb,MAAM,YAAY,CAAC;AAEpB,wBAAgB,GAAG,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAEpF;AAED,wBAAgB,IAAI,CAAC,KAAK,CAAC,MAAM,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAEtF;AAED,wBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAEvC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAChC,IAAI,EAAE,MAAM,GACV,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAClC,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,SAAS,mBAAmB,GAAG,EAAE,EAClF,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GAChD,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAYzC,wBAAgB,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACzE,wBAAgB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,SAAS,mBAAmB,GAAG,EAAE,EAC9E,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,SAAS,CAAA;CAAE,GAChD,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAYrC,wBAAgB,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1F;AAED,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,MAAM,SAAS,gBAAgB,EACvE,OAAO,EAAE,yBAAyB,CAAC,MAAM,CAAC,GACxC,YAAY,CAAC,MAAM,CAAC,CA2DtB"}
@@ -0,0 +1,91 @@
1
+ import { StrapiHttpError } from './errors.js';
2
+ import { stringifyQuery } from './query-string.js';
3
+ export function one(target) {
4
+ return { kind: 'relation', cardinality: 'one', target };
5
+ }
6
+ export function many(target) {
7
+ return { kind: 'relation', cardinality: 'many', target };
8
+ }
9
+ export function entity() {
10
+ return undefined;
11
+ }
12
+ export function collection(path, options) {
13
+ return {
14
+ kind: 'collection',
15
+ path,
16
+ relations: (options?.relations ?? {})
17
+ };
18
+ }
19
+ export function single(path, options) {
20
+ return {
21
+ kind: 'single',
22
+ path,
23
+ relations: (options?.relations ?? {})
24
+ };
25
+ }
26
+ export function defineSchema(schema) {
27
+ return schema;
28
+ }
29
+ export function createStrapiClient(options) {
30
+ const endpoint = normalizeEndpoint(options.endpoint);
31
+ const fetcher = options.fetch ?? globalThis.fetch;
32
+ if (!fetcher) {
33
+ throw new Error('No fetch implementation is available. Pass `fetch` to createStrapiClient().');
34
+ }
35
+ async function requestJson(resource, query) {
36
+ const url = buildUrl(endpoint, resource.path, query);
37
+ const headers = new Headers(options.headers);
38
+ if (options.token && !headers.has('Authorization')) {
39
+ headers.set('Authorization', `Bearer ${options.token}`);
40
+ }
41
+ const response = await fetcher(url, {
42
+ method: 'GET',
43
+ headers
44
+ });
45
+ if (!response.ok) {
46
+ throw await StrapiHttpError.fromResponse(response, url);
47
+ }
48
+ return response.json();
49
+ }
50
+ const client = {
51
+ collection(key) {
52
+ const resource = options.schema[key];
53
+ assertResource(key, resource, 'collection');
54
+ return {
55
+ findMany(query) {
56
+ return requestJson(resource, query);
57
+ },
58
+ async findFirst(query) {
59
+ const response = await requestJson(resource, query);
60
+ return response.data[0] ?? null;
61
+ }
62
+ };
63
+ },
64
+ single(key) {
65
+ const resource = options.schema[key];
66
+ assertResource(key, resource, 'single');
67
+ return {
68
+ find(query) {
69
+ return requestJson(resource, query);
70
+ }
71
+ };
72
+ }
73
+ };
74
+ return client;
75
+ }
76
+ function normalizeEndpoint(endpoint) {
77
+ return endpoint.replace(/\/+$/, '').replace(/\/api$/, '') + '/api';
78
+ }
79
+ function buildUrl(endpoint, path, query) {
80
+ const queryString = query ? stringifyQuery(query) : '';
81
+ return `${endpoint}/${path.replace(/^\/+/, '')}${queryString ? `?${queryString}` : ''}`;
82
+ }
83
+ function assertResource(key, resource, kind) {
84
+ if (!resource) {
85
+ throw new Error(`Unknown Strapi resource: ${String(key)}`);
86
+ }
87
+ if (resource.kind !== kind) {
88
+ throw new Error(`Strapi resource ${String(key)} is a ${resource.kind}, not a ${kind}.`);
89
+ }
90
+ }
91
+ //# sourceMappingURL=public-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public-api.js","sourceRoot":"","sources":["../src/public-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function stringifyQuery(query: Record<string, unknown>): string;
2
+ //# sourceMappingURL=query-string.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-string.d.ts","sourceRoot":"","sources":["../src/query-string.ts"],"names":[],"mappings":"AAUA,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAI5D"}
@@ -0,0 +1,34 @@
1
+ export function stringifyQuery(query) {
2
+ const params = new URLSearchParams();
3
+ appendValue(params, undefined, query);
4
+ return params.toString();
5
+ }
6
+ function appendValue(params, key, value) {
7
+ if (value === undefined) {
8
+ return;
9
+ }
10
+ if (value === null) {
11
+ if (key)
12
+ params.append(key, '');
13
+ return;
14
+ }
15
+ if (value instanceof Date) {
16
+ if (key)
17
+ params.append(key, value.toISOString());
18
+ return;
19
+ }
20
+ if (Array.isArray(value)) {
21
+ value.forEach((item, index) => appendValue(params, key ? `${key}[${index}]` : `${index}`, item));
22
+ return;
23
+ }
24
+ if (typeof value === 'object') {
25
+ Object.entries(value).forEach(([childKey, childValue]) => {
26
+ appendValue(params, key ? `${key}[${childKey}]` : childKey, childValue);
27
+ });
28
+ return;
29
+ }
30
+ if (key) {
31
+ params.append(key, String(value));
32
+ }
33
+ }
34
+ //# sourceMappingURL=query-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-string.js","sourceRoot":"","sources":["../src/query-string.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,cAAc,CAAC,KAA8B;IAC5D,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,KAAmB,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,GAAuB,EAAE,KAAiB;IACtF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,IAAI,GAAG;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAChC,OAAO;IACT,CAAC;IAED,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,IAAI,GAAG;YAAE,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QACjG,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;YACvD,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -0,0 +1,139 @@
1
+ export interface OneRelation<Target extends string = string> {
2
+ kind: 'relation';
3
+ cardinality: 'one';
4
+ target: Target;
5
+ }
6
+ export interface ManyRelation<Target extends string = string> {
7
+ kind: 'relation';
8
+ cardinality: 'many';
9
+ target: Target;
10
+ }
11
+ export type RelationDefinition = OneRelation | ManyRelation;
12
+ export type RelationDefinitions = Record<string, RelationDefinition>;
13
+ export interface ResourceDefinition<Entity, Relations extends RelationDefinitions, Kind extends 'collection' | 'single'> {
14
+ kind: Kind;
15
+ path: string;
16
+ relations: Relations;
17
+ readonly __entity?: Entity;
18
+ }
19
+ export type CollectionResource<Entity, Relations extends RelationDefinitions = {}> = ResourceDefinition<Entity, Relations, 'collection'>;
20
+ export type SingleResource<Entity, Relations extends RelationDefinitions = {}> = ResourceDefinition<Entity, Relations, 'single'>;
21
+ export type AnyCollectionResource = CollectionResource<unknown, RelationDefinitions>;
22
+ export type AnySingleResource = SingleResource<unknown, RelationDefinitions>;
23
+ export type AnyResource = AnyCollectionResource | AnySingleResource;
24
+ export type SchemaDefinition = Record<string, AnyResource>;
25
+ export type CollectionKey<Schema extends SchemaDefinition> = {
26
+ [Key in keyof Schema]: Schema[Key] extends ResourceDefinition<unknown, RelationDefinitions, 'collection'> ? Key : never;
27
+ }[keyof Schema];
28
+ export type SingleKey<Schema extends SchemaDefinition> = {
29
+ [Key in keyof Schema]: Schema[Key] extends ResourceDefinition<unknown, RelationDefinitions, 'single'> ? Key : never;
30
+ }[keyof Schema];
31
+ export type Entity<Schema extends SchemaDefinition, Key extends keyof Schema> = Schema[Key] extends ResourceDefinition<infer ResourceEntity, RelationDefinitions, 'collection' | 'single'> ? ResourceEntity : never;
32
+ export type Relations<Schema extends SchemaDefinition, Key extends keyof Schema> = Schema[Key] extends ResourceDefinition<unknown, infer ResourceRelations, 'collection' | 'single'> ? ResourceRelations : never;
33
+ type StringKeyOf<T> = Extract<keyof T, string>;
34
+ type TargetKey<Schema extends SchemaDefinition, Relation extends RelationDefinition> = Relation extends OneRelation<infer Target> ? Extract<Target, keyof Schema> : Relation extends ManyRelation<infer Target> ? Extract<Target, keyof Schema> : never;
35
+ type RelationValue<Schema extends SchemaDefinition, Relation extends RelationDefinition, PopulateValue> = Relation extends OneRelation ? Populated<Schema, TargetKey<Schema, Relation>, NestedPopulate<PopulateValue>> | null : Relation extends ManyRelation ? Populated<Schema, TargetKey<Schema, Relation>, NestedPopulate<PopulateValue>>[] : never;
36
+ type NestedPopulate<PopulateValue> = PopulateValue extends {
37
+ populate: infer Nested;
38
+ } ? Nested : never;
39
+ export type Populated<Schema extends SchemaDefinition, Key extends keyof Schema, PopulateShape = never> = Entity<Schema, Key> & ([PopulateShape] extends [object] ? {
40
+ [RelationKey in Extract<keyof PopulateShape, keyof Relations<Schema, Key>>]: RelationValue<Schema, Relations<Schema, Key>[RelationKey], PopulateShape[RelationKey]>;
41
+ } : {});
42
+ export type FieldSelection<Schema extends SchemaDefinition, Key extends keyof Schema> = readonly StringKeyOf<Entity<Schema, Key>>[];
43
+ export type Sort<Schema extends SchemaDefinition, Key extends keyof Schema> = StringKeyOf<Entity<Schema, Key>> | `${StringKeyOf<Entity<Schema, Key>>}:asc` | `${StringKeyOf<Entity<Schema, Key>>}:desc`;
44
+ type Primitive = string | number | boolean | null | Date;
45
+ type FieldOperators<Value> = {
46
+ $eq?: Value;
47
+ $eqi?: Value extends string ? string : never;
48
+ $ne?: Value;
49
+ $lt?: Value;
50
+ $lte?: Value;
51
+ $gt?: Value;
52
+ $gte?: Value;
53
+ $in?: Value[];
54
+ $notIn?: Value[];
55
+ $contains?: Value extends string ? string : never;
56
+ $notContains?: Value extends string ? string : never;
57
+ $containsi?: Value extends string ? string : never;
58
+ $notContainsi?: Value extends string ? string : never;
59
+ $startsWith?: Value extends string ? string : never;
60
+ $endsWith?: Value extends string ? string : never;
61
+ $null?: boolean;
62
+ $notNull?: boolean;
63
+ $between?: [Value, Value];
64
+ };
65
+ type FilterValue<Value> = Value extends Primitive ? Value | Value[] | FieldOperators<NonNullable<Value>> : Value extends Array<infer Item> ? Item | Item[] | FieldOperators<Item> : Value | FieldOperators<Value>;
66
+ type FieldFilters<Schema extends SchemaDefinition, Key extends keyof Schema> = {
67
+ [Field in StringKeyOf<Entity<Schema, Key>>]?: FilterValue<Entity<Schema, Key>[Field]>;
68
+ };
69
+ type RelationFilters<Schema extends SchemaDefinition, Key extends keyof Schema> = {
70
+ [RelationKey in StringKeyOf<Relations<Schema, Key>>]?: Filters<Schema, TargetKey<Schema, Relations<Schema, Key>[RelationKey]>>;
71
+ };
72
+ export type Filters<Schema extends SchemaDefinition, Key extends keyof Schema> = ((FieldFilters<Schema, Key> & RelationFilters<Schema, Key>) | {
73
+ $and?: Filters<Schema, Key>[];
74
+ $or?: Filters<Schema, Key>[];
75
+ $not?: Filters<Schema, Key>;
76
+ }) & {};
77
+ type PopulateRelationValue<Schema extends SchemaDefinition, Relation extends RelationDefinition> = true | {
78
+ fields?: FieldSelection<Schema, TargetKey<Schema, Relation>>;
79
+ filters?: Filters<Schema, TargetKey<Schema, Relation>>;
80
+ populate?: Populate<Schema, TargetKey<Schema, Relation>>;
81
+ sort?: Sort<Schema, TargetKey<Schema, Relation>>[];
82
+ };
83
+ export type Populate<Schema extends SchemaDefinition, Key extends keyof Schema> = {
84
+ [RelationKey in StringKeyOf<Relations<Schema, Key>>]?: PopulateRelationValue<Schema, Relations<Schema, Key>[RelationKey]>;
85
+ };
86
+ export interface Pagination {
87
+ page?: number;
88
+ pageSize?: number;
89
+ withCount?: boolean;
90
+ limit?: number;
91
+ start?: number;
92
+ }
93
+ export interface Query<Schema extends SchemaDefinition, Key extends keyof Schema, PopulateShape extends Populate<Schema, Key> | undefined = undefined> {
94
+ filters?: Filters<Schema, Key>;
95
+ fields?: FieldSelection<Schema, Key>;
96
+ populate?: PopulateShape;
97
+ sort?: Sort<Schema, Key>[];
98
+ pagination?: Pagination;
99
+ status?: 'draft' | 'published';
100
+ publicationState?: 'live' | 'preview';
101
+ locale?: string | string[];
102
+ }
103
+ export interface StrapiMeta {
104
+ pagination?: {
105
+ page: number;
106
+ pageSize: number;
107
+ pageCount: number;
108
+ total: number;
109
+ };
110
+ [key: string]: unknown;
111
+ }
112
+ export interface StrapiCollectionResponse<Data> {
113
+ data: Data[];
114
+ meta: StrapiMeta;
115
+ }
116
+ export interface StrapiSingleResponse<Data> {
117
+ data: Data;
118
+ meta: StrapiMeta;
119
+ }
120
+ export interface CreateStrapiClientOptions<Schema extends SchemaDefinition> {
121
+ endpoint: string;
122
+ token?: string;
123
+ headers?: HeadersInit;
124
+ fetch?: typeof fetch;
125
+ schema: Schema;
126
+ }
127
+ export interface StrapiCollectionClient<Schema extends SchemaDefinition, Key extends CollectionKey<Schema>> {
128
+ findMany<const PopulateShape extends Populate<Schema, Key> | undefined = undefined>(query?: Query<Schema, Key, PopulateShape>): Promise<StrapiCollectionResponse<Populated<Schema, Key, NonNullable<PopulateShape>>>>;
129
+ findFirst<const PopulateShape extends Populate<Schema, Key> | undefined = undefined>(query?: Query<Schema, Key, PopulateShape>): Promise<Populated<Schema, Key, NonNullable<PopulateShape>> | null>;
130
+ }
131
+ export interface StrapiSingleClient<Schema extends SchemaDefinition, Key extends SingleKey<Schema>> {
132
+ find<const PopulateShape extends Populate<Schema, Key> | undefined = undefined>(query?: Query<Schema, Key, PopulateShape>): Promise<StrapiSingleResponse<Populated<Schema, Key, NonNullable<PopulateShape>>>>;
133
+ }
134
+ export interface StrapiClient<Schema extends SchemaDefinition> {
135
+ collection<Key extends CollectionKey<Schema>>(key: Key): StrapiCollectionClient<Schema, Key>;
136
+ single<Key extends SingleKey<Schema>>(key: Key): StrapiSingleClient<Schema, Key>;
137
+ }
138
+ export {};
139
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "strapi-query",
3
+ "version": "0.1.0",
4
+ "description": "Schema-first typed query client for Strapi REST APIs.",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "packageManager": "pnpm@10.12.1",
8
+ "sideEffects": false,
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "default": "./dist/index.js"
16
+ }
17
+ },
18
+ "types": "./dist/index.d.ts",
19
+ "main": "./dist/index.js",
20
+ "scripts": {
21
+ "build": "tsc -p tsconfig.json",
22
+ "test": "vitest run",
23
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.typecheck.json --noEmit"
24
+ },
25
+ "keywords": [
26
+ "strapi",
27
+ "typescript",
28
+ "typed-client",
29
+ "rest",
30
+ "query"
31
+ ],
32
+ "peerDependencies": {
33
+ "typescript": ">=5.4"
34
+ },
35
+ "devDependencies": {
36
+ "@types/node": "^22.10.0",
37
+ "typescript": "^5.7.2",
38
+ "vitest": "^2.1.8"
39
+ }
40
+ }