strapi-typed-client 1.0.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 +21 -0
- package/README.md +83 -0
- package/dist/cli/commands/check.d.ts +27 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +91 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +28 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +129 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +21 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +113 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/index.d.ts +14 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/api-client.d.ts +41 -0
- package/dist/cli/utils/api-client.d.ts.map +1 -0
- package/dist/cli/utils/api-client.js +81 -0
- package/dist/cli/utils/api-client.js.map +1 -0
- package/dist/cli/utils/file-writer.d.ts +44 -0
- package/dist/cli/utils/file-writer.d.ts.map +1 -0
- package/dist/cli/utils/file-writer.js +89 -0
- package/dist/cli/utils/file-writer.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +37 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +622 -0
- package/dist/client.js +688 -0
- package/dist/core/endpoint-converter.d.ts +26 -0
- package/dist/core/endpoint-converter.d.ts.map +1 -0
- package/dist/core/endpoint-converter.js +161 -0
- package/dist/core/endpoint-converter.js.map +1 -0
- package/dist/core/generator/filters-generator.d.ts +22 -0
- package/dist/core/generator/filters-generator.d.ts.map +1 -0
- package/dist/core/generator/filters-generator.js +236 -0
- package/dist/core/generator/filters-generator.js.map +1 -0
- package/dist/core/index.d.ts +8 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +11 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/schema-transformer.d.ts +19 -0
- package/dist/core/schema-transformer.d.ts.map +1 -0
- package/dist/core/schema-transformer.js +306 -0
- package/dist/core/schema-transformer.js.map +1 -0
- package/dist/generator/auth-api-generator.d.ts +14 -0
- package/dist/generator/auth-api-generator.d.ts.map +1 -0
- package/dist/generator/auth-api-generator.js +518 -0
- package/dist/generator/auth-api-generator.js.map +1 -0
- package/dist/generator/blocks-types-template.d.ts +134 -0
- package/dist/generator/blocks-types-template.d.ts.map +1 -0
- package/dist/generator/blocks-types-template.js +4 -0
- package/dist/generator/blocks-types-template.js.map +1 -0
- package/dist/generator/client-generator.d.ts +19 -0
- package/dist/generator/client-generator.d.ts.map +1 -0
- package/dist/generator/client-generator.js +707 -0
- package/dist/generator/client-generator.js.map +1 -0
- package/dist/generator/custom-api-generator.d.ts +26 -0
- package/dist/generator/custom-api-generator.d.ts.map +1 -0
- package/dist/generator/custom-api-generator.js +145 -0
- package/dist/generator/custom-api-generator.js.map +1 -0
- package/dist/generator/index-generator.d.ts +4 -0
- package/dist/generator/index-generator.d.ts.map +1 -0
- package/dist/generator/index-generator.js +11 -0
- package/dist/generator/index-generator.js.map +1 -0
- package/dist/generator/index.d.ts +14 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +94 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/types-generator.d.ts +35 -0
- package/dist/generator/types-generator.d.ts.map +1 -0
- package/dist/generator/types-generator.js +641 -0
- package/dist/generator/types-generator.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +4 -0
- package/dist/next/index.d.ts +16 -0
- package/dist/next/index.d.ts.map +1 -0
- package/dist/next/index.js +224 -0
- package/dist/next/index.js.map +1 -0
- package/dist/parser/custom-types-parser.d.ts +39 -0
- package/dist/parser/custom-types-parser.d.ts.map +1 -0
- package/dist/parser/custom-types-parser.js +206 -0
- package/dist/parser/custom-types-parser.js.map +1 -0
- package/dist/parser/index.d.ts +23 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +457 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/routes-parser.d.ts +21 -0
- package/dist/parser/routes-parser.d.ts.map +1 -0
- package/dist/parser/routes-parser.js +184 -0
- package/dist/parser/routes-parser.js.map +1 -0
- package/dist/plugin/admin/src/index.d.ts +16 -0
- package/dist/plugin/admin/src/index.d.ts.map +1 -0
- package/dist/plugin/admin/src/index.js +30 -0
- package/dist/plugin/admin/src/index.js.map +1 -0
- package/dist/plugin/admin/src/pages/HomePage.d.ts +2 -0
- package/dist/plugin/admin/src/pages/HomePage.d.ts.map +1 -0
- package/dist/plugin/admin/src/pages/HomePage.js +273 -0
- package/dist/plugin/admin/src/pages/HomePage.js.map +1 -0
- package/dist/plugin/admin/src/pluginId.d.ts +2 -0
- package/dist/plugin/admin/src/pluginId.d.ts.map +1 -0
- package/dist/plugin/admin/src/pluginId.js +2 -0
- package/dist/plugin/admin/src/pluginId.js.map +1 -0
- package/dist/plugin/index.d.ts +22 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +22 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/server/src/config/index.d.ts +31 -0
- package/dist/plugin/server/src/config/index.d.ts.map +1 -0
- package/dist/plugin/server/src/config/index.js +35 -0
- package/dist/plugin/server/src/config/index.js.map +1 -0
- package/dist/plugin/server/src/controllers/schema.d.ts +41 -0
- package/dist/plugin/server/src/controllers/schema.d.ts.map +1 -0
- package/dist/plugin/server/src/controllers/schema.js +51 -0
- package/dist/plugin/server/src/controllers/schema.js.map +1 -0
- package/dist/plugin/server/src/index.d.ts +114 -0
- package/dist/plugin/server/src/index.d.ts.map +1 -0
- package/dist/plugin/server/src/index.js +76 -0
- package/dist/plugin/server/src/index.js.map +1 -0
- package/dist/plugin/server/src/routes/index.d.ts +14 -0
- package/dist/plugin/server/src/routes/index.d.ts.map +1 -0
- package/dist/plugin/server/src/routes/index.js +23 -0
- package/dist/plugin/server/src/routes/index.js.map +1 -0
- package/dist/plugin/server/src/services/endpoints.d.ts +36 -0
- package/dist/plugin/server/src/services/endpoints.d.ts.map +1 -0
- package/dist/plugin/server/src/services/endpoints.js +523 -0
- package/dist/plugin/server/src/services/endpoints.js.map +1 -0
- package/dist/plugin/server/src/services/schema.d.ts +25 -0
- package/dist/plugin/server/src/services/schema.d.ts.map +1 -0
- package/dist/plugin/server/src/services/schema.js +164 -0
- package/dist/plugin/server/src/services/schema.js.map +1 -0
- package/dist/schema-meta.ts +7 -0
- package/dist/schema-types.d.ts +104 -0
- package/dist/schema-types.d.ts.map +1 -0
- package/dist/schema-types.js +3 -0
- package/dist/schema-types.js.map +1 -0
- package/dist/shared/constants.d.ts +99 -0
- package/dist/shared/constants.d.ts.map +1 -0
- package/dist/shared/constants.js +89 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/endpoint-types.d.ts +42 -0
- package/dist/shared/endpoint-types.d.ts.map +1 -0
- package/dist/shared/endpoint-types.js +6 -0
- package/dist/shared/endpoint-types.js.map +1 -0
- package/dist/shared/index.d.ts +12 -0
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +13 -0
- package/dist/shared/index.js.map +1 -0
- package/dist/shared/naming-utils.d.ts +55 -0
- package/dist/shared/naming-utils.d.ts.map +1 -0
- package/dist/shared/naming-utils.js +106 -0
- package/dist/shared/naming-utils.js.map +1 -0
- package/dist/shared/schema-hash.d.ts +39 -0
- package/dist/shared/schema-hash.d.ts.map +1 -0
- package/dist/shared/schema-hash.js +67 -0
- package/dist/shared/schema-hash.js.map +1 -0
- package/dist/shared/strapi-schema-types.d.ts +77 -0
- package/dist/shared/strapi-schema-types.d.ts.map +1 -0
- package/dist/shared/strapi-schema-types.js +10 -0
- package/dist/shared/strapi-schema-types.js.map +1 -0
- package/dist/shared/string-utils.d.ts +68 -0
- package/dist/shared/string-utils.d.ts.map +1 -0
- package/dist/shared/string-utils.js +124 -0
- package/dist/shared/string-utils.js.map +1 -0
- package/dist/transformer/index.d.ts +17 -0
- package/dist/transformer/index.d.ts.map +1 -0
- package/dist/transformer/index.js +83 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/types.d.ts +3430 -0
- package/dist/types.js +3 -0
- package/package.json +152 -0
- package/strapi-admin.js +2 -0
- package/strapi-server.js +2 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 BoxLab Ltd
|
|
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,83 @@
|
|
|
1
|
+
# strapi-typed-client
|
|
2
|
+
|
|
3
|
+
Automatic TypeScript type generation and a fully typed API client for **Strapi v5**. Install a Strapi plugin, run a single CLI command, and get clean TypeScript interfaces plus a ready-to-use fetch client with full autocomplete.
|
|
4
|
+
|
|
5
|
+
**[Documentation](https://boxlab-ltd.github.io/strapi-typed-client/)**
|
|
6
|
+
|
|
7
|
+
## Quick Start
|
|
8
|
+
|
|
9
|
+
### 1. Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install strapi-typed-client
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
### 2. Enable the Strapi plugin
|
|
16
|
+
|
|
17
|
+
```typescript
|
|
18
|
+
// config/plugins.ts
|
|
19
|
+
export default {
|
|
20
|
+
'strapi-typed-client': {
|
|
21
|
+
enabled: true,
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### 3. Generate types
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx strapi-types generate --url http://localhost:1337
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### 4. Use
|
|
33
|
+
|
|
34
|
+
```typescript
|
|
35
|
+
import { StrapiClient } from './dist'
|
|
36
|
+
|
|
37
|
+
const strapi = new StrapiClient({
|
|
38
|
+
baseURL: 'http://localhost:1337',
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
const articles = await strapi.articles.find({
|
|
42
|
+
filters: { title: { $contains: 'hello' } },
|
|
43
|
+
populate: { category: true, cover: true },
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
articles[0].category.name // fully typed
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Features
|
|
50
|
+
|
|
51
|
+
- Clean, flat TypeScript interfaces from your Strapi schema
|
|
52
|
+
- Typed API client — `find`, `findOne`, `create`, `update`, `delete`
|
|
53
|
+
- Automatic type inference for `populate` — no manual casting
|
|
54
|
+
- Nested populate with unlimited depth
|
|
55
|
+
- Separate Input types for create/update (relations as IDs)
|
|
56
|
+
- DynamicZone support with union types
|
|
57
|
+
- Components and nested components
|
|
58
|
+
- Entity-specific filter types
|
|
59
|
+
- Next.js integration (`withStrapiTypes`, cache, revalidate, tags)
|
|
60
|
+
- Schema hashing — skips regeneration when nothing changed
|
|
61
|
+
- Framework-agnostic — works with any TypeScript project
|
|
62
|
+
|
|
63
|
+
## Requirements
|
|
64
|
+
|
|
65
|
+
- **Strapi v5**
|
|
66
|
+
- **Node.js >= 18**
|
|
67
|
+
|
|
68
|
+
## Documentation
|
|
69
|
+
|
|
70
|
+
Full documentation is available at **[boxlab-ltd.github.io/strapi-typed-client](https://boxlab-ltd.github.io/strapi-typed-client/)**:
|
|
71
|
+
|
|
72
|
+
- [Getting Started](https://boxlab-ltd.github.io/strapi-typed-client/guide/getting-started) — installation, plugin setup, first generation
|
|
73
|
+
- [CLI Commands](https://boxlab-ltd.github.io/strapi-typed-client/guide/cli) — generate, check, watch
|
|
74
|
+
- [Client Usage](https://boxlab-ltd.github.io/strapi-typed-client/guide/client) — CRUD operations, error handling
|
|
75
|
+
- [Populate](https://boxlab-ltd.github.io/strapi-typed-client/guide/populate) — type inference, nested populate
|
|
76
|
+
- [Filtering & Sorting](https://boxlab-ltd.github.io/strapi-typed-client/guide/filtering) — filters, pagination, field selection
|
|
77
|
+
- [Next.js Integration](https://boxlab-ltd.github.io/strapi-typed-client/guide/nextjs) — auto-generation, cache options
|
|
78
|
+
- [Plugin Config](https://boxlab-ltd.github.io/strapi-typed-client/advanced/plugin-config) — requireAuth, endpoints, schema hashing
|
|
79
|
+
- [API Reference](https://boxlab-ltd.github.io/strapi-typed-client/reference/api) — full StrapiClient API
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check command - verifies that local types are in sync with remote schema
|
|
3
|
+
* Returns exit code 0 if in sync, 1 if out of sync
|
|
4
|
+
*/
|
|
5
|
+
export interface CheckOptions {
|
|
6
|
+
url?: string;
|
|
7
|
+
token?: string;
|
|
8
|
+
output?: string;
|
|
9
|
+
silent?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface CheckResult {
|
|
12
|
+
inSync: boolean;
|
|
13
|
+
localHash: string | null;
|
|
14
|
+
remoteHash: string | null;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Check if local types are in sync with remote schema
|
|
19
|
+
*/
|
|
20
|
+
export declare function check(options: CheckOptions): Promise<CheckResult>;
|
|
21
|
+
/**
|
|
22
|
+
* CLI handler for check command
|
|
23
|
+
*/
|
|
24
|
+
export declare function createCheckCommand(program: {
|
|
25
|
+
command: (...args: any[]) => any;
|
|
26
|
+
}): void;
|
|
27
|
+
//# sourceMappingURL=check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA2DvE;AASD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CACnC,GAAG,IAAI,CA2CP"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check command - verifies that local types are in sync with remote schema
|
|
3
|
+
* Returns exit code 0 if in sync, 1 if out of sync
|
|
4
|
+
*/
|
|
5
|
+
import { createApiClient } from '../utils/api-client.js';
|
|
6
|
+
import { readLocalSchemaHash } from '../utils/file-writer.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if local types are in sync with remote schema
|
|
9
|
+
*/
|
|
10
|
+
export async function check(options) {
|
|
11
|
+
const outputDir = options.output || './dist';
|
|
12
|
+
try {
|
|
13
|
+
// Read local hash
|
|
14
|
+
const localHash = readLocalSchemaHash(outputDir);
|
|
15
|
+
if (!localHash) {
|
|
16
|
+
return {
|
|
17
|
+
inSync: false,
|
|
18
|
+
localHash: null,
|
|
19
|
+
remoteHash: null,
|
|
20
|
+
error: `No schema-meta.ts found in ${outputDir}. Run 'strapi-types generate' first.`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// Create API client
|
|
24
|
+
const client = createApiClient({
|
|
25
|
+
url: options.url,
|
|
26
|
+
token: options.token,
|
|
27
|
+
});
|
|
28
|
+
// Fetch remote hash
|
|
29
|
+
if (!options.silent) {
|
|
30
|
+
console.log(`Checking schema hash from ${options.url || process.env.STRAPI_URL || 'http://localhost:1337'}...`);
|
|
31
|
+
}
|
|
32
|
+
const { hash: remoteHash } = await client.getSchemaHash();
|
|
33
|
+
// Compare hashes
|
|
34
|
+
const inSync = localHash === remoteHash;
|
|
35
|
+
if (!options.silent) {
|
|
36
|
+
if (inSync) {
|
|
37
|
+
console.log(`Types are in sync (hash: ${localHash.substring(0, 8)}...)`);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log(`Types are out of sync!`);
|
|
41
|
+
console.log(` Local: ${localHash.substring(0, 8)}...`);
|
|
42
|
+
console.log(` Remote: ${remoteHash.substring(0, 8)}...`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
inSync,
|
|
47
|
+
localHash,
|
|
48
|
+
remoteHash,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return {
|
|
53
|
+
inSync: false,
|
|
54
|
+
localHash: null,
|
|
55
|
+
remoteHash: null,
|
|
56
|
+
error: error.message,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* CLI handler for check command
|
|
62
|
+
*/
|
|
63
|
+
export function createCheckCommand(program) {
|
|
64
|
+
program
|
|
65
|
+
.command('check')
|
|
66
|
+
.description('Check if local types are in sync with remote Strapi schema')
|
|
67
|
+
.option('-u, --url <url>', 'Strapi API URL (default: STRAPI_URL env or http://localhost:1337)')
|
|
68
|
+
.option('-t, --token <token>', 'Strapi API token (default: STRAPI_TOKEN env)')
|
|
69
|
+
.option('-o, --output <path>', 'Output directory to check (default: ./dist)')
|
|
70
|
+
.option('-s, --silent', 'Suppress output messages')
|
|
71
|
+
.action(async (opts) => {
|
|
72
|
+
const result = await check({
|
|
73
|
+
url: opts.url,
|
|
74
|
+
token: opts.token,
|
|
75
|
+
output: opts.output,
|
|
76
|
+
silent: opts.silent,
|
|
77
|
+
});
|
|
78
|
+
if (result.error) {
|
|
79
|
+
console.error('Check failed:', result.error);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
if (!result.inSync) {
|
|
83
|
+
if (!opts.silent) {
|
|
84
|
+
console.log("\nRun 'strapi-types generate' to update types.");
|
|
85
|
+
}
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
process.exit(0);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate command - generates TypeScript types from Strapi schema
|
|
3
|
+
*/
|
|
4
|
+
export interface GenerateOptions {
|
|
5
|
+
url?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
output?: string;
|
|
8
|
+
silent?: boolean;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface GenerateResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
filesWritten: string[];
|
|
14
|
+
hash?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
skipped?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate types from Strapi API
|
|
20
|
+
*/
|
|
21
|
+
export declare function generate(options: GenerateOptions): Promise<GenerateResult>;
|
|
22
|
+
/**
|
|
23
|
+
* CLI handler for generate command
|
|
24
|
+
*/
|
|
25
|
+
export declare function createGenerateCommand(program: {
|
|
26
|
+
command: (...args: any[]) => any;
|
|
27
|
+
}): void;
|
|
28
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,MAAM,WAAW,eAAe;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC1B,OAAO,EAAE,eAAe,GACzB,OAAO,CAAC,cAAc,CAAC,CAoHzB;AAUD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE;IAC3C,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CACnC,GAAG,IAAI,CAsCP"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generate command - generates TypeScript types from Strapi schema
|
|
3
|
+
*/
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { createApiClient } from '../utils/api-client.js';
|
|
6
|
+
import { writeFile, getSchemaMetaPath, generateSchemaMetaContent, readLocalSchemaHash, } from '../utils/file-writer.js';
|
|
7
|
+
import { Generator } from '../../generator/index.js';
|
|
8
|
+
import { transformSchema } from '../../core/schema-transformer.js';
|
|
9
|
+
/**
|
|
10
|
+
* Generate types from Strapi API
|
|
11
|
+
*/
|
|
12
|
+
export async function generate(options) {
|
|
13
|
+
const outputDir = options.output || './dist';
|
|
14
|
+
const filesWritten = [];
|
|
15
|
+
try {
|
|
16
|
+
// Create API client
|
|
17
|
+
const client = createApiClient({
|
|
18
|
+
url: options.url,
|
|
19
|
+
token: options.token,
|
|
20
|
+
});
|
|
21
|
+
const baseUrl = options.url || process.env.STRAPI_URL || 'http://localhost:1337';
|
|
22
|
+
// Check if we need to regenerate (compare hashes)
|
|
23
|
+
if (!options.force) {
|
|
24
|
+
const localHash = readLocalSchemaHash(outputDir);
|
|
25
|
+
if (localHash) {
|
|
26
|
+
if (!options.silent) {
|
|
27
|
+
console.log('Checking schema hash...');
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const { hash: remoteHash } = await client.getSchemaHash();
|
|
31
|
+
if (localHash === remoteHash) {
|
|
32
|
+
if (!options.silent) {
|
|
33
|
+
console.log(`Types are up to date (hash: ${localHash.substring(0, 8)}...)`);
|
|
34
|
+
}
|
|
35
|
+
return {
|
|
36
|
+
success: true,
|
|
37
|
+
filesWritten: [],
|
|
38
|
+
hash: localHash,
|
|
39
|
+
skipped: true,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
if (!options.silent) {
|
|
43
|
+
console.log(`Schema changed (${localHash.substring(0, 8)}... -> ${remoteHash.substring(0, 8)}...)`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// If hash check fails, continue with full generation
|
|
48
|
+
if (!options.silent) {
|
|
49
|
+
console.log('Could not check remote hash, regenerating...');
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Fetch schema from Strapi
|
|
55
|
+
if (!options.silent) {
|
|
56
|
+
console.log(`Fetching schema from ${baseUrl}...`);
|
|
57
|
+
}
|
|
58
|
+
const { schema, endpoints, extraTypes, hash, generatedAt } = await client.getSchema();
|
|
59
|
+
if (!options.silent) {
|
|
60
|
+
console.log(` Content types: ${Object.keys(schema.contentTypes).length}`);
|
|
61
|
+
console.log(` Components: ${Object.keys(schema.components).length}`);
|
|
62
|
+
if (endpoints && endpoints.length > 0) {
|
|
63
|
+
console.log(` Custom endpoints: ${endpoints.length}`);
|
|
64
|
+
}
|
|
65
|
+
if (extraTypes && extraTypes.length > 0) {
|
|
66
|
+
console.log(` Extra types: ${extraTypes.length}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
// Transform JSON schema to ParsedSchema format
|
|
70
|
+
const parsedSchema = transformSchema(schema);
|
|
71
|
+
// Generate types
|
|
72
|
+
if (!options.silent) {
|
|
73
|
+
console.log('Generating TypeScript types...');
|
|
74
|
+
}
|
|
75
|
+
const generator = new Generator(outputDir, undefined);
|
|
76
|
+
await generator.generate(parsedSchema, endpoints, extraTypes);
|
|
77
|
+
// Track generated files
|
|
78
|
+
filesWritten.push(path.join(outputDir, 'types.js'), path.join(outputDir, 'types.d.ts'), path.join(outputDir, 'client.js'), path.join(outputDir, 'client.d.ts'), path.join(outputDir, 'index.js'), path.join(outputDir, 'index.d.ts'));
|
|
79
|
+
// Write schema metadata
|
|
80
|
+
const metaPath = getSchemaMetaPath(outputDir);
|
|
81
|
+
writeFile(metaPath, generateSchemaMetaContent(hash, generatedAt));
|
|
82
|
+
filesWritten.push(metaPath);
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
filesWritten,
|
|
86
|
+
hash,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
return {
|
|
91
|
+
success: false,
|
|
92
|
+
filesWritten,
|
|
93
|
+
error: error.message,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* CLI handler for generate command
|
|
99
|
+
*/
|
|
100
|
+
export function createGenerateCommand(program) {
|
|
101
|
+
program
|
|
102
|
+
.command('generate')
|
|
103
|
+
.description('Generate TypeScript types from Strapi schema')
|
|
104
|
+
.option('-u, --url <url>', 'Strapi API URL (default: STRAPI_URL env or http://localhost:1337)')
|
|
105
|
+
.option('-t, --token <token>', 'Strapi API token (default: STRAPI_TOKEN env)')
|
|
106
|
+
.option('-o, --output <path>', 'Output directory (default: ./dist)')
|
|
107
|
+
.option('-s, --silent', 'Suppress output messages')
|
|
108
|
+
.option('-f, --force', 'Force regeneration even if schema unchanged')
|
|
109
|
+
.action(async (opts) => {
|
|
110
|
+
const result = await generate({
|
|
111
|
+
url: opts.url,
|
|
112
|
+
token: opts.token,
|
|
113
|
+
output: opts.output,
|
|
114
|
+
silent: opts.silent,
|
|
115
|
+
force: opts.force,
|
|
116
|
+
});
|
|
117
|
+
if (!result.success) {
|
|
118
|
+
console.error('Generation failed:', result.error);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
if (!opts.silent && !result.skipped) {
|
|
122
|
+
console.log('Generation complete!');
|
|
123
|
+
if (result.hash) {
|
|
124
|
+
console.log(`Schema hash: ${result.hash.substring(0, 8)}...`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch command - polls for schema changes and regenerates types
|
|
3
|
+
*/
|
|
4
|
+
export interface WatchOptions {
|
|
5
|
+
url?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
output?: string;
|
|
8
|
+
interval?: number;
|
|
9
|
+
silent?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Watch for schema changes
|
|
13
|
+
*/
|
|
14
|
+
export declare function watch(options: WatchOptions): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* CLI handler for watch command
|
|
17
|
+
*/
|
|
18
|
+
export declare function createWatchCommand(program: {
|
|
19
|
+
command: (...args: any[]) => any;
|
|
20
|
+
}): void;
|
|
21
|
+
//# sourceMappingURL=watch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,WAAW,YAAY;IACzB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGhE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE;IACxC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAA;CACnC,GAAG,IAAI,CAiCP"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watch command - polls for schema changes and regenerates types
|
|
3
|
+
*/
|
|
4
|
+
import { createApiClient } from '../utils/api-client.js';
|
|
5
|
+
import { readLocalSchemaHash } from '../utils/file-writer.js';
|
|
6
|
+
import { generate } from './generate.js';
|
|
7
|
+
/**
|
|
8
|
+
* Watch for schema changes
|
|
9
|
+
*/
|
|
10
|
+
export async function watch(options) {
|
|
11
|
+
const outputDir = options.output || './dist';
|
|
12
|
+
const interval = options.interval || 5000;
|
|
13
|
+
const client = createApiClient({
|
|
14
|
+
url: options.url,
|
|
15
|
+
token: options.token,
|
|
16
|
+
});
|
|
17
|
+
// Check if Strapi is reachable
|
|
18
|
+
const isReachable = await client.ping();
|
|
19
|
+
if (!isReachable) {
|
|
20
|
+
console.error(`Cannot connect to Strapi at ${options.url || process.env.STRAPI_URL || 'http://localhost:1337'}`);
|
|
21
|
+
console.error('Make sure the Strapi server is running and the strapi-types plugin is enabled.');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
console.log(`Watching for schema changes (polling every ${interval / 1000}s)...`);
|
|
25
|
+
console.log('Press Ctrl+C to stop.\n');
|
|
26
|
+
// Initial generation
|
|
27
|
+
const initialHash = readLocalSchemaHash(outputDir);
|
|
28
|
+
if (!initialHash) {
|
|
29
|
+
console.log('No existing types found. Generating initial types...');
|
|
30
|
+
await generate({
|
|
31
|
+
url: options.url,
|
|
32
|
+
token: options.token,
|
|
33
|
+
output: outputDir,
|
|
34
|
+
silent: options.silent,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
let lastHash = readLocalSchemaHash(outputDir);
|
|
38
|
+
// Start polling
|
|
39
|
+
const poll = async () => {
|
|
40
|
+
try {
|
|
41
|
+
const { hash: remoteHash } = await client.getSchemaHash();
|
|
42
|
+
if (lastHash !== remoteHash) {
|
|
43
|
+
console.log(`Schema change detected (${lastHash?.substring(0, 8) || 'none'} -> ${remoteHash.substring(0, 8)}...)`);
|
|
44
|
+
console.log('Regenerating types...');
|
|
45
|
+
const result = await generate({
|
|
46
|
+
url: options.url,
|
|
47
|
+
token: options.token,
|
|
48
|
+
output: outputDir,
|
|
49
|
+
silent: true,
|
|
50
|
+
});
|
|
51
|
+
if (result.success) {
|
|
52
|
+
console.log('Types regenerated successfully.\n');
|
|
53
|
+
lastHash = remoteHash;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
console.error('Failed to regenerate types:', result.error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Silently ignore connection errors during polling
|
|
62
|
+
// The server might be restarting
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
// Poll with recursive setTimeout to avoid overlapping calls
|
|
66
|
+
let timeoutId = null;
|
|
67
|
+
let stopping = false;
|
|
68
|
+
const schedulePoll = () => {
|
|
69
|
+
if (stopping)
|
|
70
|
+
return;
|
|
71
|
+
timeoutId = setTimeout(async () => {
|
|
72
|
+
await poll();
|
|
73
|
+
schedulePoll();
|
|
74
|
+
}, interval);
|
|
75
|
+
};
|
|
76
|
+
await poll();
|
|
77
|
+
schedulePoll();
|
|
78
|
+
// Handle graceful shutdown
|
|
79
|
+
const stop = () => {
|
|
80
|
+
stopping = true;
|
|
81
|
+
if (timeoutId)
|
|
82
|
+
clearTimeout(timeoutId);
|
|
83
|
+
process.exit(0);
|
|
84
|
+
};
|
|
85
|
+
process.on('SIGINT', () => {
|
|
86
|
+
console.log('\nStopping watch...');
|
|
87
|
+
stop();
|
|
88
|
+
});
|
|
89
|
+
process.on('SIGTERM', stop);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* CLI handler for watch command
|
|
93
|
+
*/
|
|
94
|
+
export function createWatchCommand(program) {
|
|
95
|
+
program
|
|
96
|
+
.command('watch')
|
|
97
|
+
.description('Watch for schema changes and regenerate types automatically')
|
|
98
|
+
.option('-u, --url <url>', 'Strapi API URL (default: STRAPI_URL env or http://localhost:1337)')
|
|
99
|
+
.option('-t, --token <token>', 'Strapi API token (default: STRAPI_TOKEN env)')
|
|
100
|
+
.option('-o, --output <path>', 'Output directory (default: ./strapi-types)')
|
|
101
|
+
.option('-i, --interval <ms>', 'Polling interval in milliseconds (default: 5000)', parseInt)
|
|
102
|
+
.option('-s, --silent', 'Suppress regeneration messages')
|
|
103
|
+
.action(async (opts) => {
|
|
104
|
+
await watch({
|
|
105
|
+
url: opts.url,
|
|
106
|
+
token: opts.token,
|
|
107
|
+
output: opts.output,
|
|
108
|
+
interval: opts.interval,
|
|
109
|
+
silent: opts.silent,
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/cli/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Strapi Types CLI
|
|
4
|
+
*
|
|
5
|
+
* Generate TypeScript types from Strapi schema
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx strapi-types generate --url http://localhost:1337
|
|
9
|
+
* npx strapi-types check --url http://localhost:1337
|
|
10
|
+
* npx strapi-types watch --url http://localhost:1337
|
|
11
|
+
* npx strapi-types generate --local # Use local .d.ts files
|
|
12
|
+
*/
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Strapi Types CLI
|
|
4
|
+
*
|
|
5
|
+
* Generate TypeScript types from Strapi schema
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* npx strapi-types generate --url http://localhost:1337
|
|
9
|
+
* npx strapi-types check --url http://localhost:1337
|
|
10
|
+
* npx strapi-types watch --url http://localhost:1337
|
|
11
|
+
* npx strapi-types generate --local # Use local .d.ts files
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
import { readFile } from 'fs/promises';
|
|
15
|
+
import { fileURLToPath } from 'url';
|
|
16
|
+
import * as path from 'path';
|
|
17
|
+
import { createGenerateCommand } from './commands/generate.js';
|
|
18
|
+
import { createCheckCommand } from './commands/check.js';
|
|
19
|
+
import { createWatchCommand } from './commands/watch.js';
|
|
20
|
+
// Read package.json for version (ESM compatible)
|
|
21
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
22
|
+
const __dirname = path.dirname(__filename);
|
|
23
|
+
const packageJsonPath = path.join(__dirname, '../../package.json');
|
|
24
|
+
const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf-8'));
|
|
25
|
+
const program = new Command();
|
|
26
|
+
program
|
|
27
|
+
.name('strapi-types')
|
|
28
|
+
.description('Generate TypeScript types from Strapi schema')
|
|
29
|
+
.version(packageJson.version);
|
|
30
|
+
// Register commands
|
|
31
|
+
createGenerateCommand(program);
|
|
32
|
+
createCheckCommand(program);
|
|
33
|
+
createWatchCommand(program);
|
|
34
|
+
// Parse command line arguments
|
|
35
|
+
program.parse(process.argv);
|
|
36
|
+
// Show help if no command is provided
|
|
37
|
+
if (!process.argv.slice(2).length) {
|
|
38
|
+
program.outputHelp();
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAA;AAExD,iDAAiD;AACjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;AAC1C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAA;AAClE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAA;AAExE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;AAE7B,OAAO;KACF,IAAI,CAAC,cAAc,CAAC;KACpB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;AAEjC,oBAAoB;AACpB,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC9B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAE3B,+BAA+B;AAC/B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAE3B,sCAAsC;AACtC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,UAAU,EAAE,CAAA;AACxB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API client for fetching schema from Strapi backend
|
|
3
|
+
*/
|
|
4
|
+
import type { SchemaResponse, HashResponse } from '../../shared/strapi-schema-types.js';
|
|
5
|
+
export type { SchemaResponse, HashResponse };
|
|
6
|
+
export interface ApiClientOptions {
|
|
7
|
+
baseUrl: string;
|
|
8
|
+
token?: string;
|
|
9
|
+
timeout?: number;
|
|
10
|
+
}
|
|
11
|
+
export declare class ApiClient {
|
|
12
|
+
private baseUrl;
|
|
13
|
+
private token?;
|
|
14
|
+
private timeout;
|
|
15
|
+
constructor(options: ApiClientOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Fetch the full schema from Strapi
|
|
18
|
+
*/
|
|
19
|
+
getSchema(): Promise<SchemaResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Fetch only the schema hash from Strapi
|
|
22
|
+
*/
|
|
23
|
+
getSchemaHash(): Promise<HashResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Check if the Strapi instance is reachable
|
|
26
|
+
*/
|
|
27
|
+
ping(): Promise<boolean>;
|
|
28
|
+
/**
|
|
29
|
+
* Make a request to the Strapi API
|
|
30
|
+
*/
|
|
31
|
+
private request;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create an API client from environment variables or CLI options
|
|
35
|
+
*/
|
|
36
|
+
export declare function createApiClient(options: {
|
|
37
|
+
url?: string;
|
|
38
|
+
token?: string;
|
|
39
|
+
timeout?: number;
|
|
40
|
+
}): ApiClient;
|
|
41
|
+
//# sourceMappingURL=api-client.d.ts.map
|