@malevich-studio/strapi-sdk-typescript 1.0.5 → 1.0.6

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/dist/cli.cjs CHANGED
File without changes
package/dist/cli.mjs CHANGED
File without changes
package/dist/index.d.ts CHANGED
@@ -1,4 +1,17 @@
1
- export { RelationInput } from '@/generator/attributes/relation';
1
+ type RelationData = {
2
+ documentId: string;
3
+ before?: string;
4
+ after?: string;
5
+ start?: true;
6
+ end?: true;
7
+ locale?: string;
8
+ status?: 'published' | 'draft';
9
+ } | string;
10
+ type RelationInput = {
11
+ connect?: RelationData[];
12
+ disconnect?: RelationData[];
13
+ set?: RelationData[];
14
+ } | RelationData[];
2
15
 
3
16
  type Response<T> = {
4
17
  data: T;
@@ -116,4 +129,4 @@ declare class Strapi {
116
129
  private baseRequest;
117
130
  }
118
131
 
119
- export { type File, type FilterValue, type Filters, type Folder, type Query, Strapi };
132
+ export { type File, type FilterValue, type Filters, type Folder, type Query, type RelationInput, Strapi };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@malevich-studio/strapi-sdk-typescript",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "sideEffects": false,
5
5
  "bin": {
6
6
  "generate-strapi-types": "./dist/cli.mjs"
@@ -1,5 +0,0 @@
1
- import { Strapi } from "./index.ts";
2
- /**
3
- * Main function to fetch Strapi (v5) data and generate the d.ts file
4
- */
5
- export declare function generateStrapiTypes(strapi: Strapi): Promise<void>;
package/dist/test.cjs DELETED
@@ -1,114 +0,0 @@
1
- 'use strict';
2
-
3
- require('dotenv/config');
4
- var _ = require('lodash');
5
- var qs = require('qs');
6
- var mime = require('mime');
7
- var promises = require('fs/promises');
8
- var node_path = require('node:path');
9
-
10
- class Strapi {
11
- constructor(url, token) {
12
- this.url = url;
13
- this.token = token;
14
- }
15
- async request(endpoint, data = {}, params = {}) {
16
- const queryString = params.method === 'GET' ? qs.stringify(data) : '';
17
- return await this.baseRequest(queryString ? `${endpoint}?${queryString}` : endpoint, _.merge({
18
- headers: {
19
- 'Content-Type': 'application/json',
20
- },
21
- ...(params.method && !['GET', 'DELETE'].includes(params.method) ? {
22
- body: JSON.stringify({
23
- data,
24
- })
25
- } : {}),
26
- }, params));
27
- }
28
- async getDocuments(endpoint, data, params = {}) {
29
- return await this.request(endpoint, data, {
30
- method: 'GET',
31
- ...params,
32
- });
33
- }
34
- async getDocument(endpoint, data, params = {}) {
35
- return await this.request(endpoint, data, {
36
- method: 'GET',
37
- ...params,
38
- });
39
- }
40
- async create(endpoint, data, params = {}) {
41
- return await this.request(endpoint, data, {
42
- method: 'POST',
43
- ...params,
44
- });
45
- }
46
- async update(endpoint, id, data, params = {}) {
47
- return await this.request(`${endpoint}/${id}`, data, {
48
- method: 'PUT',
49
- ...params,
50
- });
51
- }
52
- async delete(endpoint, id, params = {}) {
53
- return await this.request(`${endpoint}/${id}`, {}, {
54
- method: 'DELETE',
55
- ...params,
56
- });
57
- }
58
- /**
59
- * For Node.js
60
- *
61
- * @param files list of files names which will be uploaded, example: ['/app/data/cover.js']
62
- */
63
- async upload(files) {
64
- const form = new FormData();
65
- await Promise.all(files.map(async (item) => {
66
- const fileBuffer = await promises.readFile(item.path);
67
- const file = new File([fileBuffer], item.filename || node_path.basename(item.path), { type: mime.getType(item.path) || 'image/jpeg' });
68
- form.append('files', file);
69
- }));
70
- return await this.uploadForm(form);
71
- }
72
- async uploadForm(form) {
73
- return await this.baseRequest('upload', {
74
- method: 'POST',
75
- body: form,
76
- });
77
- }
78
- async baseRequest(endpoint, params = {}) {
79
- const response = await fetch(`${this.url}/api/${endpoint}`, _.merge({
80
- headers: {
81
- Authorization: `Bearer ${this.token}`,
82
- },
83
- }, params));
84
- if (!response.ok) {
85
- console.log(`${this.url}/api/${endpoint}`);
86
- console.log(_.merge({
87
- headers: {
88
- Authorization: `Bearer ${this.token}`,
89
- },
90
- }, params));
91
- console.log(response);
92
- console.log(await response.json());
93
- throw new Error(`Помилка запиту до Strapi: ${response.status} ${response.statusText}`);
94
- }
95
- return (await response.json());
96
- }
97
- }
98
-
99
- if (!process.env.STRAPI_URL || !process.env.STRAPI_TOKEN) {
100
- throw new Error('STRAPI_URL and STRAPI_TOKEN must be provided.');
101
- }
102
- const strapi = new Strapi(process.env.STRAPI_URL, process.env.STRAPI_TOKEN);
103
- async function test() {
104
- const result = await strapi.upload([{
105
- path: '/home/peretyaka/Downloads/534a35da71395a2684ade26eecf3a672e122e069_original.jpeg',
106
- filename: 'test1.jpeg',
107
- }, {
108
- path: '/home/peretyaka/Downloads/photo_2024-07-29_18-43-43.jpg',
109
- filename: 'test2.jpeg',
110
- }]);
111
- console.log(result);
112
- }
113
- test();
114
- //# sourceMappingURL=test.cjs.map
package/dist/test.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.cjs","sources":["../src/index.ts","../src/test.ts"],"sourcesContent":["import _ from 'lodash';\nimport qs from 'qs';\nimport mime from 'mime';\nimport { readFile } from 'fs/promises';\nimport { basename } from 'node:path';\n\nimport type {RelationInput} from \"@/generator/attributes/relation\";\nexport type {RelationInput};\n\ntype Response<T> = {\n data: T,\n meta: {\n pagination: {\n total?: number,\n } & ({\n page: number,\n pageSize: number,\n pageCount?: number,\n } | {\n start: number,\n limit: number,\n }),\n }\n}\n\nexport type File = {\n id?: number;\n documentId?: string;\n createdAt?: string;\n updatedAt?: string;\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: object;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n url: string;\n previewUrl?: string;\n provider: string;\n provider_metadata?: object;\n related?: any;\n folder?: Folder;\n folderPath: string;\n}\n\nexport type Folder = {\n id?: number;\n documentId?: string;\n createdAt?: string;\n updatedAt?: string;\n name: string;\n pathId: number;\n parent?: Folder;\n children?: Folder[];\n files?: File[];\n path: string;\n}\n\n// export type\n\nexport type Filters<T> = {\n // Joins the filters in an \"or\" expression\n $or?: Filters<T>[],\n // Joins the filters in an \"and\" expression\n $and?: Filters<T>[],\n // Joins the filters in a \"not\" expression\n $not?: Filters<T>[],\n} | T;\n\nexport type FilterValue<T> = {\n // Equal\n $eq?: T,\n // Equal (case-insensitive)\n $eqi?: string,\n // Not equal\n $ne?: T,\n // Not equal (case-insensitive)\n $nei?: string,\n // Less than\n $lt?: T,\n // Less than or equal to\n $lte?: T,\n // Greater than\n $gt?: T,\n // Greater than or equal to\n $gte?: T,\n // Included in an array\n $in?: T[],\n // Not included in an array\n $notIn?: T[],\n // Contains\n $contains?: string,\n // Does not contain\n $notContains?: string,\n // Contains (case-insensitive)\n $containsi?: string,\n // Does not contain (case-insensitive)\n $notContainsi?: string,\n // Is between\n $between?: [T, T],\n // Starts with\n $startsWith?: string,\n // Starts with (case-insensitive)\n $startsWithi?: string,\n // Ends with\n $endsWith?: string,\n // Ends with (case-insensitive)\n $endsWithi?: string,\n} | T;\n\nexport type Query<Fields, Sort, Filters, Populate> = {\n populate?: Populate,\n fields?: Fields[] | '*',\n filters?: Filters,\n locale?: string,\n status?: 'published' | 'draft',\n sort?: Sort[] | Sort,\n pagination?: {\n withCount?: boolean,\n } & ({\n page?: number,\n pageSize?: number,\n } | {\n start?: number,\n limit?: number,\n }),\n}\n\nexport class Strapi {\n constructor(\n private readonly url: string,\n private readonly token: string,\n ) {}\n\n public async request<T>(endpoint: string, data: object | FormData = {}, params: RequestInit = {}): Promise<Response<T>> {\n const queryString = params.method === 'GET' ? qs.stringify(data) : '';\n\n return await this.baseRequest(queryString ? `${endpoint}?${queryString}` : endpoint, _.merge({\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(params.method && !['GET', 'DELETE'].includes(params.method) ? {\n body: JSON.stringify({\n data,\n })\n } : {}\n ),\n }, params));\n }\n\n async getDocuments<T, Q extends object>(endpoint: string, data?: Q, params: RequestInit = {}): Promise<Response<T[]>> {\n return await this.request<T[]>(endpoint, data, {\n method: 'GET',\n ...params,\n });\n }\n\n async getDocument<T, Q extends object>(endpoint: string, data?: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(endpoint, data, {\n method: 'GET',\n ...params,\n });\n }\n\n async create<T, Q extends object>(endpoint: string, data: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(endpoint, data, {\n method: 'POST',\n ...params,\n });\n }\n\n async update<T, Q extends object>(endpoint: string, id: string, data: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(`${endpoint}/${id}`, data, {\n method: 'PUT',\n ...params,\n });\n }\n\n async delete<T>(endpoint: string, id: string, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(`${endpoint}/${id}`, {}, {\n method: 'DELETE',\n ...params,\n });\n }\n\n /**\n * For Node.js\n *\n * @param files list of files names which will be uploaded, example: ['/app/data/cover.js']\n */\n async upload(files: { path: string, filename?: string }[]) {\n const form = new FormData();\n await Promise.all(files.map(async (item) => {\n const fileBuffer = await readFile(item.path);\n const file = new File([fileBuffer], item.filename || basename(item.path), {type: mime.getType(item.path) || 'image/jpeg'});\n form.append( 'files', file);\n }));\n return await this.uploadForm(form);\n }\n\n async uploadForm(form: FormData): Promise<File[]> {\n return await this.baseRequest('upload', {\n method: 'POST',\n body: form,\n });\n }\n\n private async baseRequest(endpoint: string, params: RequestInit = {}) {\n const response = await fetch(`${this.url}/api/${endpoint}`, _.merge({\n headers: {\n Authorization: `Bearer ${this.token}`,\n },\n }, params));\n\n if (!response.ok) {\n console.log(`${this.url}/api/${endpoint}`);\n console.log(_.merge({\n headers: {\n Authorization: `Bearer ${this.token}`,\n },\n }, params));\n console.log(response);\n console.log(await response.json());\n throw new Error(`Помилка запиту до Strapi: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json());\n }\n}\n","import 'dotenv/config'\nimport {Strapi} from \"@/index.ts\";\n\nif (!process.env.STRAPI_URL || !process.env.STRAPI_TOKEN) {\n throw new Error('STRAPI_URL and STRAPI_TOKEN must be provided.');\n}\n\n\nconst strapi = new Strapi(\n process.env.STRAPI_URL,\n process.env.STRAPI_TOKEN,\n);\n\nasync function test() {\n const result = await strapi.upload([{\n path: '/home/peretyaka/Downloads/534a35da71395a2684ade26eecf3a672e122e069_original.jpeg',\n filename: 'test1.jpeg',\n }, {\n path: '/home/peretyaka/Downloads/photo_2024-07-29_18-43-43.jpg',\n filename: 'test2.jpeg',\n }]);\n\n console.log(result);\n}\n\ntest();"],"names":["readFile","basename"],"mappings":"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"}
package/dist/test.d.ts DELETED
@@ -1 +0,0 @@
1
- import 'dotenv/config';
package/dist/test.mjs DELETED
@@ -1,112 +0,0 @@
1
- import 'dotenv/config';
2
- import _ from 'lodash';
3
- import qs from 'qs';
4
- import mime from 'mime';
5
- import { readFile } from 'fs/promises';
6
- import { basename } from 'node:path';
7
-
8
- class Strapi {
9
- constructor(url, token) {
10
- this.url = url;
11
- this.token = token;
12
- }
13
- async request(endpoint, data = {}, params = {}) {
14
- const queryString = params.method === 'GET' ? qs.stringify(data) : '';
15
- return await this.baseRequest(queryString ? `${endpoint}?${queryString}` : endpoint, _.merge({
16
- headers: {
17
- 'Content-Type': 'application/json',
18
- },
19
- ...(params.method && !['GET', 'DELETE'].includes(params.method) ? {
20
- body: JSON.stringify({
21
- data,
22
- })
23
- } : {}),
24
- }, params));
25
- }
26
- async getDocuments(endpoint, data, params = {}) {
27
- return await this.request(endpoint, data, {
28
- method: 'GET',
29
- ...params,
30
- });
31
- }
32
- async getDocument(endpoint, data, params = {}) {
33
- return await this.request(endpoint, data, {
34
- method: 'GET',
35
- ...params,
36
- });
37
- }
38
- async create(endpoint, data, params = {}) {
39
- return await this.request(endpoint, data, {
40
- method: 'POST',
41
- ...params,
42
- });
43
- }
44
- async update(endpoint, id, data, params = {}) {
45
- return await this.request(`${endpoint}/${id}`, data, {
46
- method: 'PUT',
47
- ...params,
48
- });
49
- }
50
- async delete(endpoint, id, params = {}) {
51
- return await this.request(`${endpoint}/${id}`, {}, {
52
- method: 'DELETE',
53
- ...params,
54
- });
55
- }
56
- /**
57
- * For Node.js
58
- *
59
- * @param files list of files names which will be uploaded, example: ['/app/data/cover.js']
60
- */
61
- async upload(files) {
62
- const form = new FormData();
63
- await Promise.all(files.map(async (item) => {
64
- const fileBuffer = await readFile(item.path);
65
- const file = new File([fileBuffer], item.filename || basename(item.path), { type: mime.getType(item.path) || 'image/jpeg' });
66
- form.append('files', file);
67
- }));
68
- return await this.uploadForm(form);
69
- }
70
- async uploadForm(form) {
71
- return await this.baseRequest('upload', {
72
- method: 'POST',
73
- body: form,
74
- });
75
- }
76
- async baseRequest(endpoint, params = {}) {
77
- const response = await fetch(`${this.url}/api/${endpoint}`, _.merge({
78
- headers: {
79
- Authorization: `Bearer ${this.token}`,
80
- },
81
- }, params));
82
- if (!response.ok) {
83
- console.log(`${this.url}/api/${endpoint}`);
84
- console.log(_.merge({
85
- headers: {
86
- Authorization: `Bearer ${this.token}`,
87
- },
88
- }, params));
89
- console.log(response);
90
- console.log(await response.json());
91
- throw new Error(`Помилка запиту до Strapi: ${response.status} ${response.statusText}`);
92
- }
93
- return (await response.json());
94
- }
95
- }
96
-
97
- if (!process.env.STRAPI_URL || !process.env.STRAPI_TOKEN) {
98
- throw new Error('STRAPI_URL and STRAPI_TOKEN must be provided.');
99
- }
100
- const strapi = new Strapi(process.env.STRAPI_URL, process.env.STRAPI_TOKEN);
101
- async function test() {
102
- const result = await strapi.upload([{
103
- path: '/home/peretyaka/Downloads/534a35da71395a2684ade26eecf3a672e122e069_original.jpeg',
104
- filename: 'test1.jpeg',
105
- }, {
106
- path: '/home/peretyaka/Downloads/photo_2024-07-29_18-43-43.jpg',
107
- filename: 'test2.jpeg',
108
- }]);
109
- console.log(result);
110
- }
111
- test();
112
- //# sourceMappingURL=test.mjs.map
package/dist/test.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"test.mjs","sources":["../src/index.ts","../src/test.ts"],"sourcesContent":["import _ from 'lodash';\nimport qs from 'qs';\nimport mime from 'mime';\nimport { readFile } from 'fs/promises';\nimport { basename } from 'node:path';\n\nimport type {RelationInput} from \"@/generator/attributes/relation\";\nexport type {RelationInput};\n\ntype Response<T> = {\n data: T,\n meta: {\n pagination: {\n total?: number,\n } & ({\n page: number,\n pageSize: number,\n pageCount?: number,\n } | {\n start: number,\n limit: number,\n }),\n }\n}\n\nexport type File = {\n id?: number;\n documentId?: string;\n createdAt?: string;\n updatedAt?: string;\n name: string;\n alternativeText?: string;\n caption?: string;\n width?: number;\n height?: number;\n formats?: object;\n hash: string;\n ext?: string;\n mime: string;\n size: number;\n url: string;\n previewUrl?: string;\n provider: string;\n provider_metadata?: object;\n related?: any;\n folder?: Folder;\n folderPath: string;\n}\n\nexport type Folder = {\n id?: number;\n documentId?: string;\n createdAt?: string;\n updatedAt?: string;\n name: string;\n pathId: number;\n parent?: Folder;\n children?: Folder[];\n files?: File[];\n path: string;\n}\n\n// export type\n\nexport type Filters<T> = {\n // Joins the filters in an \"or\" expression\n $or?: Filters<T>[],\n // Joins the filters in an \"and\" expression\n $and?: Filters<T>[],\n // Joins the filters in a \"not\" expression\n $not?: Filters<T>[],\n} | T;\n\nexport type FilterValue<T> = {\n // Equal\n $eq?: T,\n // Equal (case-insensitive)\n $eqi?: string,\n // Not equal\n $ne?: T,\n // Not equal (case-insensitive)\n $nei?: string,\n // Less than\n $lt?: T,\n // Less than or equal to\n $lte?: T,\n // Greater than\n $gt?: T,\n // Greater than or equal to\n $gte?: T,\n // Included in an array\n $in?: T[],\n // Not included in an array\n $notIn?: T[],\n // Contains\n $contains?: string,\n // Does not contain\n $notContains?: string,\n // Contains (case-insensitive)\n $containsi?: string,\n // Does not contain (case-insensitive)\n $notContainsi?: string,\n // Is between\n $between?: [T, T],\n // Starts with\n $startsWith?: string,\n // Starts with (case-insensitive)\n $startsWithi?: string,\n // Ends with\n $endsWith?: string,\n // Ends with (case-insensitive)\n $endsWithi?: string,\n} | T;\n\nexport type Query<Fields, Sort, Filters, Populate> = {\n populate?: Populate,\n fields?: Fields[] | '*',\n filters?: Filters,\n locale?: string,\n status?: 'published' | 'draft',\n sort?: Sort[] | Sort,\n pagination?: {\n withCount?: boolean,\n } & ({\n page?: number,\n pageSize?: number,\n } | {\n start?: number,\n limit?: number,\n }),\n}\n\nexport class Strapi {\n constructor(\n private readonly url: string,\n private readonly token: string,\n ) {}\n\n public async request<T>(endpoint: string, data: object | FormData = {}, params: RequestInit = {}): Promise<Response<T>> {\n const queryString = params.method === 'GET' ? qs.stringify(data) : '';\n\n return await this.baseRequest(queryString ? `${endpoint}?${queryString}` : endpoint, _.merge({\n headers: {\n 'Content-Type': 'application/json',\n },\n ...(params.method && !['GET', 'DELETE'].includes(params.method) ? {\n body: JSON.stringify({\n data,\n })\n } : {}\n ),\n }, params));\n }\n\n async getDocuments<T, Q extends object>(endpoint: string, data?: Q, params: RequestInit = {}): Promise<Response<T[]>> {\n return await this.request<T[]>(endpoint, data, {\n method: 'GET',\n ...params,\n });\n }\n\n async getDocument<T, Q extends object>(endpoint: string, data?: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(endpoint, data, {\n method: 'GET',\n ...params,\n });\n }\n\n async create<T, Q extends object>(endpoint: string, data: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(endpoint, data, {\n method: 'POST',\n ...params,\n });\n }\n\n async update<T, Q extends object>(endpoint: string, id: string, data: Q, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(`${endpoint}/${id}`, data, {\n method: 'PUT',\n ...params,\n });\n }\n\n async delete<T>(endpoint: string, id: string, params: RequestInit = {}): Promise<Response<T>> {\n return await this.request<T>(`${endpoint}/${id}`, {}, {\n method: 'DELETE',\n ...params,\n });\n }\n\n /**\n * For Node.js\n *\n * @param files list of files names which will be uploaded, example: ['/app/data/cover.js']\n */\n async upload(files: { path: string, filename?: string }[]) {\n const form = new FormData();\n await Promise.all(files.map(async (item) => {\n const fileBuffer = await readFile(item.path);\n const file = new File([fileBuffer], item.filename || basename(item.path), {type: mime.getType(item.path) || 'image/jpeg'});\n form.append( 'files', file);\n }));\n return await this.uploadForm(form);\n }\n\n async uploadForm(form: FormData): Promise<File[]> {\n return await this.baseRequest('upload', {\n method: 'POST',\n body: form,\n });\n }\n\n private async baseRequest(endpoint: string, params: RequestInit = {}) {\n const response = await fetch(`${this.url}/api/${endpoint}`, _.merge({\n headers: {\n Authorization: `Bearer ${this.token}`,\n },\n }, params));\n\n if (!response.ok) {\n console.log(`${this.url}/api/${endpoint}`);\n console.log(_.merge({\n headers: {\n Authorization: `Bearer ${this.token}`,\n },\n }, params));\n console.log(response);\n console.log(await response.json());\n throw new Error(`Помилка запиту до Strapi: ${response.status} ${response.statusText}`);\n }\n\n return (await response.json());\n }\n}\n","import 'dotenv/config'\nimport {Strapi} from \"@/index.ts\";\n\nif (!process.env.STRAPI_URL || !process.env.STRAPI_TOKEN) {\n throw new Error('STRAPI_URL and STRAPI_TOKEN must be provided.');\n}\n\n\nconst strapi = new Strapi(\n process.env.STRAPI_URL,\n process.env.STRAPI_TOKEN,\n);\n\nasync function test() {\n const result = await strapi.upload([{\n path: '/home/peretyaka/Downloads/534a35da71395a2684ade26eecf3a672e122e069_original.jpeg',\n filename: 'test1.jpeg',\n }, {\n path: '/home/peretyaka/Downloads/photo_2024-07-29_18-43-43.jpg',\n filename: 'test2.jpeg',\n }]);\n\n console.log(result);\n}\n\ntest();"],"names":[],"mappings":"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"}