strapi-rest-lite 0.1.5 → 0.1.7
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/README.md +53 -27
- package/dist/constants/populate.d.ts +15 -0
- package/dist/constants/populate.d.ts.map +1 -0
- package/dist/constants/populate.js +18 -0
- package/dist/constants/populate.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/models/article.d.ts +5 -6
- package/dist/models/article.d.ts.map +1 -1
- package/dist/models/block.d.ts +6 -0
- package/dist/models/block.d.ts.map +1 -0
- package/dist/models/block.js +2 -0
- package/dist/models/block.js.map +1 -0
- package/dist/models/index.d.ts +2 -0
- package/dist/models/index.d.ts.map +1 -1
- package/dist/models/index.js +2 -0
- package/dist/models/index.js.map +1 -1
- package/dist/models/page.d.ts +2 -2
- package/dist/models/page.d.ts.map +1 -1
- package/dist/models/seo.d.ts +11 -0
- package/dist/models/seo.d.ts.map +1 -0
- package/dist/models/seo.js +2 -0
- package/dist/models/seo.js.map +1 -0
- package/dist/repositories/collection-repository.d.ts.map +1 -1
- package/dist/repositories/collection-repository.js +8 -4
- package/dist/repositories/collection-repository.js.map +1 -1
- package/dist/repositories/contracts.d.ts +13 -0
- package/dist/repositories/contracts.d.ts.map +1 -1
- package/dist/services/article-service.d.ts.map +1 -1
- package/dist/services/article-service.js +9 -2
- package/dist/services/article-service.js.map +1 -1
- package/dist/services/category-service.d.ts.map +1 -1
- package/dist/services/category-service.js +1 -3
- package/dist/services/category-service.js.map +1 -1
- package/dist/services/page-service.d.ts.map +1 -1
- package/dist/services/page-service.js +2 -1
- package/dist/services/page-service.js.map +1 -1
- package/dist/services/product-service.d.ts.map +1 -1
- package/dist/services/product-service.js +2 -1
- package/dist/services/product-service.js.map +1 -1
- package/dist/utils/normalize.d.ts +4 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +37 -0
- package/dist/utils/normalize.js.map +1 -0
- package/package.json +2 -3
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
# strapi-rest-lite
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
TypeScript-SDK (ESM) für Strapi v4 REST: flache, typisierte Responses, fertige Repositories/Services für Artikel, Kategorien, Pages, Produkte und generische Helfer für eigene Collections.
|
|
4
|
+
|
|
5
|
+
## Was macht das Paket?
|
|
6
|
+
- Baut auf Strapi REST v4 auf, nimmt dir das Query-Building ab und normalisiert Responses (`data/attributes`, Relationen, Media) zu flachen Objekten.
|
|
7
|
+
- Liefert vorgefertigte Repositories/Services mit sinnvollen Populate-Defaults je Typ.
|
|
8
|
+
- Enthält Models/Typen für die Standard-Content-Types und Exports für eigene Typen/Collections.
|
|
9
|
+
- Ermöglicht Override von Collection-Slugs, Populate-Defaults und eigener Query-Nutzung.
|
|
4
10
|
|
|
5
11
|
## Installation
|
|
6
12
|
|
|
@@ -15,39 +21,40 @@ npm install strapi-rest-lite
|
|
|
15
21
|
import { createRepositories, createServices } from 'strapi-rest-lite'
|
|
16
22
|
|
|
17
23
|
const apiBase = 'https://cms.example.com/api'
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const repositories = createRepositories(apiBase)
|
|
21
|
-
|
|
22
|
-
// Optionale Services mit sinnvollen Defaults (populate: '*')
|
|
23
|
-
const services = createServices(repositories)
|
|
24
|
+
const repositories = createRepositories(apiBase) // Artikel, Kategorien, Pages, Produkte
|
|
25
|
+
const services = createServices(repositories) // mit Populate-Defaults
|
|
24
26
|
|
|
25
27
|
const article = await services.articleService.getBySlug('hello-world', { locale: 'en' })
|
|
26
28
|
console.log(article.data?.title)
|
|
27
29
|
```
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
Eigene Collection-Slugs (wenn dein Strapi andere Routen nutzt):
|
|
30
32
|
|
|
31
33
|
```ts
|
|
32
34
|
import { createRepositories, CollectionName } from 'strapi-rest-lite'
|
|
33
35
|
|
|
34
36
|
const repositories = createRepositories(apiBase, {
|
|
35
37
|
product: 'shop-products',
|
|
36
|
-
page: CollectionName.Page, //
|
|
38
|
+
page: CollectionName.Page, // Enum für Defaults
|
|
37
39
|
})
|
|
38
40
|
```
|
|
39
41
|
|
|
42
|
+
Populate überschreiben pro Call (statt Defaults):
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
await services.articleService.getBySlug('hello-world', { populate: ['author', 'seo'] })
|
|
46
|
+
```
|
|
47
|
+
|
|
40
48
|
## Bausteine
|
|
41
49
|
|
|
42
|
-
- `createStrapiClient(apiBase)`:
|
|
43
|
-
- `createCollectionRepository(collectionName, httpClient)`: generisches
|
|
44
|
-
- Vorkonfigurierte Repositories: `createArticleRepository`, `createCategoryRepository`, `createPageRepository`, `createProductRepository
|
|
45
|
-
- `createRepositories(apiBase, collections?)`: bündelt die
|
|
46
|
-
- `CollectionName`-Enum:
|
|
47
|
-
- `createCollectionService(
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Typen/Models: `RepositoryQuery`, `CollectionRepository`, `CollectionService`, Strapi-Response-Typen und Models (`Article`, `Category`, `Page`, `Product`, `Author`).
|
|
50
|
+
- `createStrapiClient(apiBase)`: `ofetch`-Wrapper mit Query-Serializer.
|
|
51
|
+
- `createCollectionRepository(collectionName, httpClient)`: generisches Repo mit `findAll`, `findOneById`, `findOneBySlug`.
|
|
52
|
+
- Vorkonfigurierte Repositories: `createArticleRepository`, `createCategoryRepository`, `createPageRepository`, `createProductRepository`.
|
|
53
|
+
- `createRepositories(apiBase, collections?)`: bündelt die Repos, erlaubt Slug-Overrides.
|
|
54
|
+
- `CollectionName`-Enum: Default-Slugs (`articles`, `categories`, `pages`, `products`).
|
|
55
|
+
- Services: `createCollectionService`, `withDefaults` (mergt Default-Queries), plus fertige Services für Artikel/Kategorie/Page/Produkt.
|
|
56
|
+
- Populate-Enums: `ArticlePopulate`, `PagePopulate`, `ProductPopulate` (für klare Defaults/Overrides).
|
|
57
|
+
- Normalizer: `normalizeCollectionResponse`, `normalizeSingleResponse` machen Strapi-REST flach.
|
|
51
58
|
|
|
52
59
|
### Eigene Collection anbinden
|
|
53
60
|
|
|
@@ -59,29 +66,48 @@ type FAQ = { id: number; question: string; answer: string }
|
|
|
59
66
|
const client = createStrapiClient('https://cms.example.com/api')
|
|
60
67
|
const faqRepository = createCollectionRepository<FAQ>('faqs', client)
|
|
61
68
|
|
|
62
|
-
const faqs = await faqRepository.findAll({ locale: 'de' })
|
|
69
|
+
const faqs = await faqRepository.findAll({ locale: 'de', populate: ['seo'] })
|
|
63
70
|
```
|
|
64
71
|
|
|
65
72
|
## Queries (RepositoryQuery)
|
|
66
73
|
|
|
67
74
|
Unterstützt Strapi-Standardparameter:
|
|
68
|
-
|
|
69
|
-
- `populate`: `'*'` oder Feldnamen/Arrays.
|
|
75
|
+
- `populate`: `'*'` oder Feldnamen/Arrays (siehe Populate-Enums).
|
|
70
76
|
- `filters`: beliebige Filter-Objekte (werden korrekt zu Querystring serialisiert).
|
|
71
77
|
- `sort`, `fields`, `pagination`, `locale`, weitere Schlüssel möglich.
|
|
72
78
|
|
|
73
|
-
`mergeFilters(query, filters)` hilft, zusätzliche Filter mit bestehenden zu kombinieren.
|
|
79
|
+
`mergeFilters(query, filters)` hilft, zusätzliche Filter mit bestehenden zu kombinieren (z. B. Slug).
|
|
80
|
+
|
|
81
|
+
## Strapi-Schema (erforderliche Felder)
|
|
82
|
+
|
|
83
|
+
Damit die SDK-Typen ohne zusätzliches Mapping funktionieren, sollten die Content-Types in Strapi so aussehen (die SDK normalisiert `data/attributes` automatisch):
|
|
84
|
+
|
|
85
|
+
- **Article (`articles`)**
|
|
86
|
+
- Felder: `title`, `description`, `slug` (UID), `cover` (Media → URL), `blocks` (Dynamic Zone/Component mit `body` o. ä.), `seo` (Component mit `metaTitle`, `metaDescription`, `shareImage`/`metaImage`), optional `documentId`.
|
|
87
|
+
- Relationen: `author`, `category`.
|
|
88
|
+
- Erwartet flach: `cover` als String/URL, `blocks` als Array `{ __component, id?, body? }`, `seo` flach.
|
|
89
|
+
|
|
90
|
+
- **Page (`pages`)**
|
|
91
|
+
- Felder: `title`, `description?`, `slug` (UID), `primarypage` (Boolean), `dynamic` (DZ, z. B. `shared.rich-text`, `shared.seo`), `seo`.
|
|
92
|
+
- DZ als Array mit `__component`, `id` etc.
|
|
74
93
|
|
|
75
|
-
|
|
94
|
+
- **Category (`categories`)**: `name`, `slug` (UID), `description?`, optional `documentId`.
|
|
95
|
+
- **Author (`authors`)**: `name`, `email?`, `avatar?` (Media → URL), optional `documentId`.
|
|
96
|
+
- **Product (`products`)**: `title`, `slug` (UID), `description?`, `price?`, `sku?`, `cover?` (Media → URL), optional `documentId`.
|
|
76
97
|
|
|
77
|
-
|
|
98
|
+
### Populate-Defaults der Services
|
|
99
|
+
- Article: `author`, `category`, `blocks`, `seo`, `cover`
|
|
100
|
+
- Page: `dynamic`, `seo`
|
|
101
|
+
- Product: `cover`
|
|
102
|
+
- Category: keine Defaults
|
|
103
|
+
Diese Defaults kannst du pro Call überschreiben.
|
|
78
104
|
|
|
79
105
|
## Build / Release
|
|
80
106
|
|
|
81
107
|
```bash
|
|
82
108
|
npm run build # erzeugt dist/ mit ESM + .d.ts
|
|
83
|
-
npm pack # optional zum Prüfen des
|
|
84
|
-
#
|
|
109
|
+
npm pack # optional zum Prüfen des Tarballs
|
|
110
|
+
# Publish: npm publish --access public --otp <code>
|
|
85
111
|
```
|
|
86
112
|
|
|
87
|
-
Das Paket ist ESM-only (`"type": "module"`, `moduleResolution: NodeNext`) und exportiert den Root-Eintragspunkt über
|
|
113
|
+
Das Paket ist ESM-only (`"type": "module"`, `moduleResolution: NodeNext`) und exportiert den Root-Eintragspunkt über `exports`.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare enum ArticlePopulate {
|
|
2
|
+
Author = "author",
|
|
3
|
+
Category = "category",
|
|
4
|
+
Blocks = "blocks",
|
|
5
|
+
Seo = "seo",
|
|
6
|
+
Cover = "cover"
|
|
7
|
+
}
|
|
8
|
+
export declare enum PagePopulate {
|
|
9
|
+
Dynamic = "dynamic",
|
|
10
|
+
Seo = "seo"
|
|
11
|
+
}
|
|
12
|
+
export declare enum ProductPopulate {
|
|
13
|
+
Cover = "cover"
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=populate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populate.d.ts","sourceRoot":"","sources":["../../src/constants/populate.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;CAChB;AAED,oBAAY,YAAY;IACtB,OAAO,YAAY;IACnB,GAAG,QAAQ;CACZ;AAED,oBAAY,eAAe;IACzB,KAAK,UAAU;CAChB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export var ArticlePopulate;
|
|
2
|
+
(function (ArticlePopulate) {
|
|
3
|
+
ArticlePopulate["Author"] = "author";
|
|
4
|
+
ArticlePopulate["Category"] = "category";
|
|
5
|
+
ArticlePopulate["Blocks"] = "blocks";
|
|
6
|
+
ArticlePopulate["Seo"] = "seo";
|
|
7
|
+
ArticlePopulate["Cover"] = "cover";
|
|
8
|
+
})(ArticlePopulate || (ArticlePopulate = {}));
|
|
9
|
+
export var PagePopulate;
|
|
10
|
+
(function (PagePopulate) {
|
|
11
|
+
PagePopulate["Dynamic"] = "dynamic";
|
|
12
|
+
PagePopulate["Seo"] = "seo";
|
|
13
|
+
})(PagePopulate || (PagePopulate = {}));
|
|
14
|
+
export var ProductPopulate;
|
|
15
|
+
(function (ProductPopulate) {
|
|
16
|
+
ProductPopulate["Cover"] = "cover";
|
|
17
|
+
})(ProductPopulate || (ProductPopulate = {}));
|
|
18
|
+
//# sourceMappingURL=populate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populate.js","sourceRoot":"","sources":["../../src/constants/populate.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,oCAAiB,CAAA;IACjB,8BAAW,CAAA;IACX,kCAAe,CAAA;AACjB,CAAC,EANW,eAAe,KAAf,eAAe,QAM1B;AAED,MAAM,CAAN,IAAY,YAGX;AAHD,WAAY,YAAY;IACtB,mCAAmB,CAAA;IACnB,2BAAW,CAAA;AACb,CAAC,EAHW,YAAY,KAAZ,YAAY,QAGvB;AAED,MAAM,CAAN,IAAY,eAEX;AAFD,WAAY,eAAe;IACzB,kCAAe,CAAA;AACjB,CAAC,EAFW,eAAe,KAAf,eAAe,QAE1B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -15,4 +15,6 @@ export * from './services/category-service.js';
|
|
|
15
15
|
export * from './services/page-service.js';
|
|
16
16
|
export * from './services/product-service.js';
|
|
17
17
|
export * from './services/index.js';
|
|
18
|
+
export * from './utils/normalize.js';
|
|
19
|
+
export * from './constants/populate.js';
|
|
18
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAEjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,yBAAyB,CAAA;AAEvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAEjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,yBAAyB,CAAA;AAEvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AAEnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -15,4 +15,6 @@ export * from './services/category-service.js';
|
|
|
15
15
|
export * from './services/page-service.js';
|
|
16
16
|
export * from './services/product-service.js';
|
|
17
17
|
export * from './services/index.js';
|
|
18
|
+
export * from './utils/normalize.js';
|
|
19
|
+
export * from './constants/populate.js';
|
|
18
20
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAEjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,yBAAyB,CAAA;AAEvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AAEjC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,sCAAsC,CAAA;AACpD,cAAc,uCAAuC,CAAA;AACrD,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,yBAAyB,CAAA;AAEvC,cAAc,yBAAyB,CAAA;AACvC,cAAc,kCAAkC,CAAA;AAChD,cAAc,+BAA+B,CAAA;AAC7C,cAAc,gCAAgC,CAAA;AAC9C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,+BAA+B,CAAA;AAC7C,cAAc,qBAAqB,CAAA;AAEnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA"}
|
package/dist/models/article.d.ts
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import type { Author } from './author.js';
|
|
2
2
|
import type { Category } from './category.js';
|
|
3
|
+
import type { Block } from './block.js';
|
|
4
|
+
import type { SeoMeta } from './seo.js';
|
|
3
5
|
export interface Article {
|
|
4
6
|
id: number;
|
|
5
7
|
documentId: string;
|
|
6
8
|
title: string;
|
|
7
9
|
description: string;
|
|
8
10
|
slug: string;
|
|
9
|
-
cover
|
|
11
|
+
cover: string | null;
|
|
10
12
|
createdAt: string;
|
|
11
13
|
updatedAt: string;
|
|
12
14
|
publishedAt: string;
|
|
13
15
|
author: Author;
|
|
14
16
|
category: Category;
|
|
15
|
-
blocks
|
|
16
|
-
|
|
17
|
-
body?: string;
|
|
18
|
-
}>;
|
|
19
|
-
seo?: Record<string, unknown>;
|
|
17
|
+
blocks: Block[];
|
|
18
|
+
seo?: SeoMeta;
|
|
20
19
|
}
|
|
21
20
|
//# sourceMappingURL=article.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article.d.ts","sourceRoot":"","sources":["../../src/models/article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"article.d.ts","sourceRoot":"","sources":["../../src/models/article.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEvC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,QAAQ,CAAA;IAClB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,GAAG,CAAC,EAAE,OAAO,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/models/block.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/models/block.ts"],"names":[],"mappings":""}
|
package/dist/models/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA"}
|
package/dist/models/index.js
CHANGED
package/dist/models/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,UAAU,CAAA"}
|
package/dist/models/page.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export interface Page {
|
|
2
2
|
id: number;
|
|
3
3
|
documentId: string;
|
|
4
|
-
|
|
4
|
+
title: string;
|
|
5
5
|
slug: string;
|
|
6
6
|
primarypage: boolean;
|
|
7
7
|
description?: string | null;
|
|
@@ -10,7 +10,7 @@ export interface Page {
|
|
|
10
10
|
id: number;
|
|
11
11
|
[key: string]: any;
|
|
12
12
|
}>;
|
|
13
|
-
seo?:
|
|
13
|
+
seo?: import('./seo.js').SeoMeta;
|
|
14
14
|
createdAt: string;
|
|
15
15
|
updatedAt: string;
|
|
16
16
|
publishedAt: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/models/page.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAA;QACnB,EAAE,EAAE,MAAM,CAAA;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAC,CAAA;IACF,GAAG,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"page.d.ts","sourceRoot":"","sources":["../../src/models/page.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAA;QACnB,EAAE,EAAE,MAAM,CAAA;QACV,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KACnB,CAAC,CAAA;IACF,GAAG,CAAC,EAAE,OAAO,UAAU,EAAE,OAAO,CAAA;IAChC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/models/seo.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACtB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,UAAU,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;IACpD,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;CACpD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.js","sourceRoot":"","sources":["../../src/models/seo.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-repository.d.ts","sourceRoot":"","sources":["../../src/repositories/collection-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EAIX,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"collection-repository.d.ts","sourceRoot":"","sources":["../../src/repositories/collection-repository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,UAAU,EAIX,MAAM,gBAAgB,CAAA;AAIvB;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAC1C,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,UAAU,GACf,oBAAoB,CAAC,CAAC,CAAC,CA8BzB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { mergeFilters } from './strapi-client.js';
|
|
2
|
+
import { normalizeCollectionResponse, normalizeSingleResponse } from '../utils/normalize.js';
|
|
2
3
|
/**
|
|
3
4
|
* Erstellt ein Repository für eine Strapi-Collection.
|
|
4
5
|
* Dieses Repository kapselt alle API-Aufrufe für eine bestimmte Daten-Collection.
|
|
@@ -7,21 +8,24 @@ export function createCollectionRepository(collectionName, http) {
|
|
|
7
8
|
const baseUrl = `/${collectionName}`;
|
|
8
9
|
return {
|
|
9
10
|
async findAll(query) {
|
|
10
|
-
|
|
11
|
+
const response = await http.get(baseUrl, query);
|
|
12
|
+
return normalizeCollectionResponse(response);
|
|
11
13
|
},
|
|
12
14
|
async findOneById(id, query) {
|
|
13
15
|
const url = `${baseUrl}/${id}`;
|
|
14
|
-
|
|
16
|
+
const response = await http.get(url, query);
|
|
17
|
+
return normalizeSingleResponse(response);
|
|
15
18
|
},
|
|
16
19
|
async findOneBySlug(slug, query) {
|
|
17
20
|
const finalQuery = mergeFilters(query, {
|
|
18
21
|
slug: { $eq: slug },
|
|
19
22
|
});
|
|
20
23
|
const result = await http.get(baseUrl, finalQuery);
|
|
24
|
+
const normalized = normalizeCollectionResponse(result);
|
|
21
25
|
// Strapi gibt ein Array zurück
|
|
22
26
|
return {
|
|
23
|
-
data:
|
|
24
|
-
meta:
|
|
27
|
+
data: normalized.data[0] ?? null,
|
|
28
|
+
meta: normalized.meta,
|
|
25
29
|
};
|
|
26
30
|
},
|
|
27
31
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collection-repository.js","sourceRoot":"","sources":["../../src/repositories/collection-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"collection-repository.js","sourceRoot":"","sources":["../../src/repositories/collection-repository.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAA;AAE5F;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,cAAsB,EACtB,IAAgB;IAEhB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAA;IAEpC,OAAO;QACL,KAAK,CAAC,OAAO,CAAC,KAAuB;YACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAA8B,OAAO,EAAE,KAAK,CAAC,CAAA;YAC5E,OAAO,2BAA2B,CAAI,QAAQ,CAAC,CAAA;QACjD,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,EAAmB,EAAE,KAAuB;YAC5D,MAAM,GAAG,GAAG,GAAG,OAAO,IAAI,EAAE,EAAE,CAAA;YAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,GAAG,CAA0B,GAAG,EAAE,KAAK,CAAC,CAAA;YACpE,OAAO,uBAAuB,CAAI,QAAQ,CAAC,CAAA;QAC7C,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAAY,EAAE,KAAuB;YACvD,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE;gBACrC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;aACpB,CAAC,CAAA;YAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,CAA8B,OAAO,EAAE,UAAU,CAAC,CAAA;YAC/E,MAAM,UAAU,GAAG,2BAA2B,CAAI,MAAM,CAAC,CAAA;YAEzD,+BAA+B;YAC/B,OAAO;gBACL,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;gBAChC,IAAI,EAAE,UAAU,CAAC,IAAI;aACtB,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -17,6 +17,19 @@ export interface StrapiSingleResponse<T> {
|
|
|
17
17
|
meta?: StrapiMeta;
|
|
18
18
|
}
|
|
19
19
|
export type StrapiPopulate = '*' | string | string[];
|
|
20
|
+
export interface StrapiRestEntity<T> {
|
|
21
|
+
id: number | string;
|
|
22
|
+
attributes: T;
|
|
23
|
+
[key: string]: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface StrapiRestCollection<T> {
|
|
26
|
+
data: Array<StrapiRestEntity<T>>;
|
|
27
|
+
meta: StrapiMeta;
|
|
28
|
+
}
|
|
29
|
+
export interface StrapiRestSingle<T> {
|
|
30
|
+
data: StrapiRestEntity<T> | null;
|
|
31
|
+
meta?: StrapiMeta;
|
|
32
|
+
}
|
|
20
33
|
export interface RepositoryQuery {
|
|
21
34
|
populate?: StrapiPopulate;
|
|
22
35
|
sort?: string | string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/repositories/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/repositories/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAElD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAC9B;AAED,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;IACd,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,GAAG,GAAG,MAAM,GAAG,MAAM,EAAE,CAAA;AAGpD,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,UAAU,EAAE,CAAC,CAAA;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,IAAI,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IAChC,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC;IACjC,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAChC,IAAI,CAAC,EAAE,UAAU,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,UAAU,CAAC,EAAE,gBAAgB,CAAA;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACtE;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAA;IACtE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3F,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAA;CACvF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-service.d.ts","sourceRoot":"","sources":["../../src/services/article-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"article-service.d.ts","sourceRoot":"","sources":["../../src/services/article-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AASnD,eAAO,MAAM,oBAAoB,4DAQ/B,CAAA"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { createCollectionService, withDefaults } from './collection-service.js';
|
|
2
|
+
import { ArticlePopulate } from '../constants/populate.js';
|
|
2
3
|
const createBaseArticleService = (repository) => createCollectionService(repository);
|
|
3
|
-
// Default populate to fetch related author/category/blocks unless overridden.
|
|
4
|
+
// Default populate to fetch related author/category/blocks/seo unless overridden.
|
|
4
5
|
export const createArticleService = withDefaults(createBaseArticleService, {
|
|
5
|
-
populate:
|
|
6
|
+
populate: [
|
|
7
|
+
ArticlePopulate.Author,
|
|
8
|
+
ArticlePopulate.Category,
|
|
9
|
+
ArticlePopulate.Blocks,
|
|
10
|
+
ArticlePopulate.Seo,
|
|
11
|
+
ArticlePopulate.Cover,
|
|
12
|
+
],
|
|
6
13
|
});
|
|
7
14
|
//# sourceMappingURL=article-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"article-service.js","sourceRoot":"","sources":["../../src/services/article-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"article-service.js","sourceRoot":"","sources":["../../src/services/article-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,MAAM,wBAAwB,GAAG,CAAC,UAAyC,EAAE,EAAE,CAC7E,uBAAuB,CAAU,UAAU,CAAC,CAAA;AAE9C,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAU,wBAAwB,EAAE;IAClF,QAAQ,EAAE;QACR,eAAe,CAAC,MAAM;QACtB,eAAe,CAAC,QAAQ;QACxB,eAAe,CAAC,MAAM;QACtB,eAAe,CAAC,GAAG;QACnB,eAAe,CAAC,KAAK;KACtB;CACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"category-service.d.ts","sourceRoot":"","sources":["../../src/services/category-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAOrD,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"category-service.d.ts","sourceRoot":"","sources":["../../src/services/category-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAOrD,eAAO,MAAM,qBAAqB,6DAAwD,CAAA"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { createCollectionService, withDefaults } from './collection-service.js';
|
|
2
2
|
const createBaseCategoryService = (repository) => createCollectionService(repository);
|
|
3
|
-
export const createCategoryService = withDefaults(createBaseCategoryService, {
|
|
4
|
-
populate: '*',
|
|
5
|
-
});
|
|
3
|
+
export const createCategoryService = withDefaults(createBaseCategoryService, {});
|
|
6
4
|
//# sourceMappingURL=category-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"category-service.js","sourceRoot":"","sources":["../../src/services/category-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE/E,MAAM,yBAAyB,GAAG,CAAC,UAA0C,EAAE,EAAE,CAC/E,uBAAuB,CAAW,UAAU,CAAC,CAAA;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAW,yBAAyB,EAAE
|
|
1
|
+
{"version":3,"file":"category-service.js","sourceRoot":"","sources":["../../src/services/category-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE/E,MAAM,yBAAyB,GAAG,CAAC,UAA0C,EAAE,EAAE,CAC/E,uBAAuB,CAAW,UAAU,CAAC,CAAA;AAE/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,YAAY,CAAW,yBAAyB,EAAE,EAAE,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-service.d.ts","sourceRoot":"","sources":["../../src/services/page-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"page-service.d.ts","sourceRoot":"","sources":["../../src/services/page-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAQ7C,eAAO,MAAM,iBAAiB,yDAE5B,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createCollectionService, withDefaults } from './collection-service.js';
|
|
2
|
+
import { PagePopulate } from '../constants/populate.js';
|
|
2
3
|
const createBasePageService = (repository) => createCollectionService(repository);
|
|
3
4
|
export const createPageService = withDefaults(createBasePageService, {
|
|
4
|
-
populate:
|
|
5
|
+
populate: [PagePopulate.Dynamic, PagePopulate.Seo],
|
|
5
6
|
});
|
|
6
7
|
//# sourceMappingURL=page-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"page-service.js","sourceRoot":"","sources":["../../src/services/page-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"page-service.js","sourceRoot":"","sources":["../../src/services/page-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,qBAAqB,GAAG,CAAC,UAAsC,EAAE,EAAE,CACvE,uBAAuB,CAAO,UAAU,CAAC,CAAA;AAE3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,YAAY,CAAO,qBAAqB,EAAE;IACzE,QAAQ,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC;CACnD,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-service.d.ts","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"product-service.d.ts","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAQnD,eAAO,MAAM,oBAAoB,4DAE/B,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createCollectionService, withDefaults } from './collection-service.js';
|
|
2
|
+
import { ProductPopulate } from '../constants/populate.js';
|
|
2
3
|
const createBaseProductService = (repository) => createCollectionService(repository);
|
|
3
4
|
export const createProductService = withDefaults(createBaseProductService, {
|
|
4
|
-
populate:
|
|
5
|
+
populate: [ProductPopulate.Cover],
|
|
5
6
|
});
|
|
6
7
|
//# sourceMappingURL=product-service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-service.js","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"product-service.js","sourceRoot":"","sources":["../../src/services/product-service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAE1D,MAAM,wBAAwB,GAAG,CAAC,UAAyC,EAAE,EAAE,CAC7E,uBAAuB,CAAU,UAAU,CAAC,CAAA;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAY,CAAU,wBAAwB,EAAE;IAClF,QAAQ,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;CAClC,CAAC,CAAA"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { StrapiCollectionResponse, StrapiRestCollection, StrapiRestSingle, StrapiSingleResponse } from '../repositories/contracts.js';
|
|
2
|
+
export declare const normalizeCollectionResponse: <T>(input: StrapiCollectionResponse<T> | StrapiRestCollection<T> | any) => StrapiCollectionResponse<T>;
|
|
3
|
+
export declare const normalizeSingleResponse: <T>(input: StrapiSingleResponse<T> | StrapiRestSingle<T> | any) => StrapiSingleResponse<T>;
|
|
4
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,8BAA8B,CAAA;AAuCrC,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAC3C,OAAO,wBAAwB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,GAAG,KACjE,wBAAwB,CAAC,CAAC,CAG5B,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,CAAC,EACvC,OAAO,oBAAoB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,GAAG,GAAG,KACzD,oBAAoB,CAAC,CAAC,CAGxB,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
const normalizeValue = (value) => {
|
|
2
|
+
if (value === null || value === undefined)
|
|
3
|
+
return value;
|
|
4
|
+
if (Array.isArray(value)) {
|
|
5
|
+
return value.map(normalizeValue);
|
|
6
|
+
}
|
|
7
|
+
if (typeof value !== 'object') {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
// Relations/Media: { data: ... }
|
|
11
|
+
if ('data' in value) {
|
|
12
|
+
return normalizeValue(value.data);
|
|
13
|
+
}
|
|
14
|
+
// Strapi entity: { id, attributes }
|
|
15
|
+
if ('attributes' in value && 'id' in value) {
|
|
16
|
+
const { id, attributes, ...rest } = value;
|
|
17
|
+
const normalizedAttributes = normalizeValue(attributes);
|
|
18
|
+
const normalizedRest = normalizeObject(rest);
|
|
19
|
+
// Media objects often expose url; if attributes already normalized to primitive/url, keep it.
|
|
20
|
+
return normalizeValue({ id, ...normalizedAttributes, ...normalizedRest });
|
|
21
|
+
}
|
|
22
|
+
// Media objects: prefer url if present
|
|
23
|
+
if ('url' in value && typeof value.url === 'string') {
|
|
24
|
+
return value.url;
|
|
25
|
+
}
|
|
26
|
+
return normalizeObject(value);
|
|
27
|
+
};
|
|
28
|
+
const normalizeObject = (obj) => Object.fromEntries(Object.entries(obj).map(([key, val]) => [key, normalizeValue(val)]));
|
|
29
|
+
export const normalizeCollectionResponse = (input) => {
|
|
30
|
+
const data = Array.isArray(input?.data) ? input.data.map((item) => normalizeValue(item)) : [];
|
|
31
|
+
return { data, meta: input?.meta ?? {} };
|
|
32
|
+
};
|
|
33
|
+
export const normalizeSingleResponse = (input) => {
|
|
34
|
+
const entity = normalizeValue(input?.data ?? null);
|
|
35
|
+
return { data: entity, meta: input?.meta ?? {} };
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/utils/normalize.ts"],"names":[],"mappings":"AAOA,MAAM,cAAc,GAAG,CAAC,KAAU,EAAO,EAAE;IACzC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAA;IAEvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAA;IACd,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,OAAO,cAAc,CAAE,KAA2B,CAAC,IAAI,CAAC,CAAA;IAC1D,CAAC;IAED,oCAAoC;IACpC,IAAI,YAAY,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC;QAC3C,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,KAAmE,CAAA;QACvG,MAAM,oBAAoB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;QACvD,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QAE5C,8FAA8F;QAC9F,OAAO,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,oBAAoB,EAAE,GAAG,cAAc,EAAE,CAAC,CAAA;IAC3E,CAAC;IAED,uCAAuC;IACvC,IAAI,KAAK,IAAI,KAAK,IAAI,OAAQ,KAA2B,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC3E,OAAQ,KAA0B,CAAC,GAAG,CAAA;IACxC,CAAC;IAED,OAAO,eAAe,CAAC,KAAgC,CAAC,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,eAAe,GAAG,CAAC,GAA4B,EAA2B,EAAE,CAChF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAEzF,MAAM,CAAC,MAAM,2BAA2B,GAAG,CACzC,KAAkE,EACrC,EAAE;IAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACvG,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,KAA0D,EACjC,EAAE;IAC3B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAa,CAAA;IAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,CAAA;AAClD,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "strapi-rest-lite",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -30,8 +30,7 @@
|
|
|
30
30
|
},
|
|
31
31
|
"homepage": "https://github.com/yakku361/strapi-rest-lite",
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"ofetch": "^1.4.0"
|
|
34
|
-
"strapi-rest-lite": "^0.1.3"
|
|
33
|
+
"ofetch": "^1.4.0"
|
|
35
34
|
},
|
|
36
35
|
"peerDependencies": {
|
|
37
36
|
"nitropack": "^2.9.0"
|