@23blocks/block-content 0.1.0 → 1.0.3
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/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/content.block.js +22 -0
- package/dist/lib/content.block.js.map +1 -0
- package/dist/lib/mappers/category.mapper.js +38 -0
- package/dist/lib/mappers/category.mapper.js.map +1 -0
- package/dist/lib/mappers/comment.mapper.js +43 -0
- package/dist/lib/mappers/comment.mapper.js.map +1 -0
- package/dist/lib/mappers/index.js +6 -0
- package/dist/lib/mappers/index.js.map +1 -0
- package/dist/lib/mappers/post.mapper.js +51 -0
- package/dist/lib/mappers/post.mapper.js.map +1 -0
- package/dist/lib/mappers/tag.mapper.js +21 -0
- package/dist/lib/mappers/tag.mapper.js.map +1 -0
- package/dist/lib/mappers/utils.js +75 -0
- package/dist/lib/mappers/utils.js.map +1 -0
- package/dist/lib/services/categories.service.js +69 -0
- package/dist/lib/services/categories.service.js.map +1 -0
- package/dist/lib/services/comments.service.js +73 -0
- package/dist/lib/services/comments.service.js.map +1 -0
- package/dist/lib/services/index.js +6 -0
- package/dist/lib/services/index.js.map +1 -0
- package/dist/lib/services/posts.service.js +127 -0
- package/dist/lib/services/posts.service.js.map +1 -0
- package/dist/lib/services/tags.service.js +59 -0
- package/dist/lib/services/tags.service.js.map +1 -0
- package/dist/lib/types/category.js +3 -0
- package/dist/lib/types/category.js.map +1 -0
- package/dist/lib/types/comment.js +3 -0
- package/dist/lib/types/comment.js.map +1 -0
- package/dist/lib/types/index.js +6 -0
- package/dist/lib/types/index.js.map +1 -0
- package/dist/lib/types/post.js +3 -0
- package/dist/lib/types/post.js.map +1 -0
- package/dist/lib/types/tag.js +3 -0
- package/dist/lib/types/tag.js.map +1 -0
- package/package.json +6 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/block-content.d.ts +0 -2
- package/dist/lib/block-content.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
// Block factory and metadata
|
|
2
|
+
export { createContentBlock, contentBlockMetadata } from './lib/content.block';
|
|
3
|
+
export { createPostsService, createCommentsService, createCategoriesService, createTagsService } from './lib/services';
|
|
4
|
+
// Mappers (for advanced use cases)
|
|
5
|
+
export { postMapper, commentMapper, categoryMapper, tagMapper } from './lib/mappers';
|
|
2
6
|
|
|
3
7
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Block factory and metadata\nexport { createContentBlock, contentBlockMetadata } from './lib/content.block';\nexport type { ContentBlock, ContentBlockConfig } from './lib/content.block';\n\n// Types\nexport type {\n // Post types\n Post,\n CreatePostRequest,\n UpdatePostRequest,\n ListPostsParams,\n // Comment types\n Comment,\n CreateCommentRequest,\n UpdateCommentRequest,\n ListCommentsParams,\n // Category types\n Category,\n CreateCategoryRequest,\n UpdateCategoryRequest,\n ListCategoriesParams,\n // Tag types\n Tag,\n CreateTagRequest,\n UpdateTagRequest,\n ListTagsParams,\n} from './lib/types';\n\n// Services\nexport type {\n PostsService,\n CommentsService,\n CategoriesService,\n TagsService,\n} from './lib/services';\n\nexport {\n createPostsService,\n createCommentsService,\n createCategoriesService,\n createTagsService,\n} from './lib/services';\n\n// Mappers (for advanced use cases)\nexport {\n postMapper,\n commentMapper,\n categoryMapper,\n tagMapper,\n} from './lib/mappers';\n"],"names":["createContentBlock","contentBlockMetadata","createPostsService","createCommentsService","createCategoriesService","createTagsService","postMapper","commentMapper","categoryMapper","tagMapper"],"rangeMappings":";;;;","mappings":"AAAA,6BAA6B;AAC7B,SAASA,kBAAkB,EAAEC,oBAAoB,QAAQ,sBAAsB;AAmC/E,SACEC,kBAAkB,EAClBC,qBAAqB,EACrBC,uBAAuB,EACvBC,iBAAiB,QACZ,iBAAiB;AAExB,mCAAmC;AACnC,SACEC,UAAU,EACVC,aAAa,EACbC,cAAc,EACdC,SAAS,QACJ,gBAAgB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createPostsService, createCommentsService, createCategoriesService, createTagsService } from './services';
|
|
2
|
+
export function createContentBlock(transport, config) {
|
|
3
|
+
return {
|
|
4
|
+
posts: createPostsService(transport, config),
|
|
5
|
+
comments: createCommentsService(transport, config),
|
|
6
|
+
categories: createCategoriesService(transport, config),
|
|
7
|
+
tags: createTagsService(transport, config)
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export const contentBlockMetadata = {
|
|
11
|
+
name: 'content',
|
|
12
|
+
version: '0.1.0',
|
|
13
|
+
description: 'Content management for posts, comments, categories, and tags',
|
|
14
|
+
resourceTypes: [
|
|
15
|
+
'Post',
|
|
16
|
+
'Comment',
|
|
17
|
+
'Category',
|
|
18
|
+
'Tag'
|
|
19
|
+
]
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=content.block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/content.block.ts"],"sourcesContent":["import type { Transport, BlockConfig, BlockMetadata } from '@23blocks/contracts';\nimport {\n createPostsService,\n createCommentsService,\n createCategoriesService,\n createTagsService,\n type PostsService,\n type CommentsService,\n type CategoriesService,\n type TagsService,\n} from './services';\n\nexport interface ContentBlockConfig extends BlockConfig {\n appId: string;\n tenantId?: string;\n}\n\nexport interface ContentBlock {\n posts: PostsService;\n comments: CommentsService;\n categories: CategoriesService;\n tags: TagsService;\n}\n\nexport function createContentBlock(\n transport: Transport,\n config: ContentBlockConfig\n): ContentBlock {\n return {\n posts: createPostsService(transport, config),\n comments: createCommentsService(transport, config),\n categories: createCategoriesService(transport, config),\n tags: createTagsService(transport, config),\n };\n}\n\nexport const contentBlockMetadata: BlockMetadata = {\n name: 'content',\n version: '0.1.0',\n description: 'Content management for posts, comments, categories, and tags',\n resourceTypes: [\n 'Post',\n 'Comment',\n 'Category',\n 'Tag',\n ],\n};\n"],"names":["createPostsService","createCommentsService","createCategoriesService","createTagsService","createContentBlock","transport","config","posts","comments","categories","tags","contentBlockMetadata","name","version","description","resourceTypes"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":"AACA,SACEA,kBAAkB,EAClBC,qBAAqB,EACrBC,uBAAuB,EACvBC,iBAAiB,QAKZ,aAAa;AAcpB,OAAO,SAASC,mBACdC,SAAoB,EACpBC,MAA0B;IAE1B,OAAO;QACLC,OAAOP,mBAAmBK,WAAWC;QACrCE,UAAUP,sBAAsBI,WAAWC;QAC3CG,YAAYP,wBAAwBG,WAAWC;QAC/CI,MAAMP,kBAAkBE,WAAWC;IACrC;AACF;AAEA,OAAO,MAAMK,uBAAsC;IACjDC,MAAM;IACNC,SAAS;IACTC,aAAa;IACbC,eAAe;QACb;QACA;QACA;QACA;KACD;AACH,EAAE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';
|
|
2
|
+
export const categoryMapper = {
|
|
3
|
+
type: 'Category',
|
|
4
|
+
map: (resource)=>({
|
|
5
|
+
id: resource.id,
|
|
6
|
+
uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
|
|
7
|
+
createdAt: parseDate(resource.attributes['created_at']) || new Date(),
|
|
8
|
+
updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
|
|
9
|
+
code: parseString(resource.attributes['code']) || '',
|
|
10
|
+
name: parseString(resource.attributes['name']) || '',
|
|
11
|
+
description: parseString(resource.attributes['description']),
|
|
12
|
+
parentId: parseString(resource.attributes['parent_id']),
|
|
13
|
+
parentUniqueId: parseString(resource.attributes['parent_unique_id']),
|
|
14
|
+
// Display
|
|
15
|
+
displayOrder: parseOptionalNumber(resource.attributes['display_order']),
|
|
16
|
+
iconUrl: parseString(resource.attributes['icon_url']),
|
|
17
|
+
imageUrl: parseString(resource.attributes['image_url']),
|
|
18
|
+
contentUrl: parseString(resource.attributes['content_url']),
|
|
19
|
+
slug: parseString(resource.attributes['slug']),
|
|
20
|
+
// Business Logic
|
|
21
|
+
status: parseStatus(resource.attributes['status']),
|
|
22
|
+
enabled: parseBoolean(resource.attributes['enabled']),
|
|
23
|
+
// SEO
|
|
24
|
+
metaTitle: parseString(resource.attributes['meta_title']),
|
|
25
|
+
metaDescription: parseString(resource.attributes['meta_description']),
|
|
26
|
+
metaKeywords: parseString(resource.attributes['meta_keywords']),
|
|
27
|
+
// Source
|
|
28
|
+
source: parseString(resource.attributes['source']),
|
|
29
|
+
sourceAlias: parseString(resource.attributes['source_alias']),
|
|
30
|
+
sourceId: parseString(resource.attributes['source_id']),
|
|
31
|
+
sourceType: parseString(resource.attributes['source_type']),
|
|
32
|
+
// Extra
|
|
33
|
+
payload: resource.attributes['payload'],
|
|
34
|
+
postCount: parseOptionalNumber(resource.attributes['post_count'])
|
|
35
|
+
})
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
//# sourceMappingURL=category.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/category.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Category } from '../types/category';\nimport { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';\n\nexport const categoryMapper: ResourceMapper<Category> = {\n type: 'Category',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n code: parseString(resource.attributes['code']) || '',\n name: parseString(resource.attributes['name']) || '',\n description: parseString(resource.attributes['description']),\n parentId: parseString(resource.attributes['parent_id']),\n parentUniqueId: parseString(resource.attributes['parent_unique_id']),\n\n // Display\n displayOrder: parseOptionalNumber(resource.attributes['display_order']),\n iconUrl: parseString(resource.attributes['icon_url']),\n imageUrl: parseString(resource.attributes['image_url']),\n contentUrl: parseString(resource.attributes['content_url']),\n slug: parseString(resource.attributes['slug']),\n\n // Business Logic\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n\n // SEO\n metaTitle: parseString(resource.attributes['meta_title']),\n metaDescription: parseString(resource.attributes['meta_description']),\n metaKeywords: parseString(resource.attributes['meta_keywords']),\n\n // Source\n source: parseString(resource.attributes['source']),\n sourceAlias: parseString(resource.attributes['source_alias']),\n sourceId: parseString(resource.attributes['source_id']),\n sourceType: parseString(resource.attributes['source_type']),\n\n // Extra\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n postCount: parseOptionalNumber(resource.attributes['post_count']),\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseOptionalNumber","parseStatus","categoryMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","code","name","description","parentId","parentUniqueId","displayOrder","iconUrl","imageUrl","contentUrl","slug","status","enabled","metaTitle","metaDescription","metaKeywords","source","sourceAlias","sourceId","sourceType","payload","postCount"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,mBAAmB,EAAEC,WAAW,QAAQ,UAAU;AAEjG,OAAO,MAAMC,iBAA2C;IACtDC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUV,YAAYQ,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWX,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWb,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,MAAMf,YAAYQ,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDK,MAAMhB,YAAYQ,SAASG,UAAU,CAAC,OAAO,KAAK;YAClDM,aAAajB,YAAYQ,SAASG,UAAU,CAAC,cAAc;YAC3DO,UAAUlB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDQ,gBAAgBnB,YAAYQ,SAASG,UAAU,CAAC,mBAAmB;YAEnE,UAAU;YACVS,cAAcjB,oBAAoBK,SAASG,UAAU,CAAC,gBAAgB;YACtEU,SAASrB,YAAYQ,SAASG,UAAU,CAAC,WAAW;YACpDW,UAAUtB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDY,YAAYvB,YAAYQ,SAASG,UAAU,CAAC,cAAc;YAC1Da,MAAMxB,YAAYQ,SAASG,UAAU,CAAC,OAAO;YAE7C,iBAAiB;YACjBc,QAAQrB,YAAYI,SAASG,UAAU,CAAC,SAAS;YACjDe,SAASxB,aAAaM,SAASG,UAAU,CAAC,UAAU;YAEpD,MAAM;YACNgB,WAAW3B,YAAYQ,SAASG,UAAU,CAAC,aAAa;YACxDiB,iBAAiB5B,YAAYQ,SAASG,UAAU,CAAC,mBAAmB;YACpEkB,cAAc7B,YAAYQ,SAASG,UAAU,CAAC,gBAAgB;YAE9D,SAAS;YACTmB,QAAQ9B,YAAYQ,SAASG,UAAU,CAAC,SAAS;YACjDoB,aAAa/B,YAAYQ,SAASG,UAAU,CAAC,eAAe;YAC5DqB,UAAUhC,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDsB,YAAYjC,YAAYQ,SAASG,UAAU,CAAC,cAAc;YAE1D,QAAQ;YACRuB,SAAS1B,SAASG,UAAU,CAAC,UAAU;YACvCwB,WAAWhC,oBAAoBK,SAASG,UAAU,CAAC,aAAa;QAClE,CAAA;AACF,EAAE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';
|
|
2
|
+
export const commentMapper = {
|
|
3
|
+
type: 'Comment',
|
|
4
|
+
map: (resource)=>({
|
|
5
|
+
id: resource.id,
|
|
6
|
+
uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
|
|
7
|
+
createdAt: parseDate(resource.attributes['created_at']) || new Date(),
|
|
8
|
+
updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
|
|
9
|
+
postUniqueId: parseString(resource.attributes['post_unique_id']) || '',
|
|
10
|
+
postVersion: parseOptionalNumber(resource.attributes['post_version']),
|
|
11
|
+
content: parseString(resource.attributes['content']) || '',
|
|
12
|
+
thumbnailUrl: parseString(resource.attributes['thumbnail_url']),
|
|
13
|
+
imageUrl: parseString(resource.attributes['image_url']),
|
|
14
|
+
contentUrl: parseString(resource.attributes['content_url']),
|
|
15
|
+
mediaUrl: parseString(resource.attributes['media_url']),
|
|
16
|
+
// User
|
|
17
|
+
userUniqueId: parseString(resource.attributes['user_unique_id']),
|
|
18
|
+
userName: parseString(resource.attributes['user_name']),
|
|
19
|
+
userAlias: parseString(resource.attributes['user_alias']),
|
|
20
|
+
userAvatarUrl: parseString(resource.attributes['user_avatar_url']),
|
|
21
|
+
payload: resource.attributes['payload'],
|
|
22
|
+
status: parseStatus(resource.attributes['status']),
|
|
23
|
+
enabled: parseBoolean(resource.attributes['enabled']),
|
|
24
|
+
// Threading
|
|
25
|
+
parentId: parseString(resource.attributes['parent_id']),
|
|
26
|
+
// Engagement
|
|
27
|
+
likes: parseOptionalNumber(resource.attributes['likes']),
|
|
28
|
+
dislikes: parseOptionalNumber(resource.attributes['dislikes']),
|
|
29
|
+
followers: parseOptionalNumber(resource.attributes['followers']),
|
|
30
|
+
savers: parseOptionalNumber(resource.attributes['savers']),
|
|
31
|
+
// AI
|
|
32
|
+
aiGenerated: parseBoolean(resource.attributes['ai_generated']),
|
|
33
|
+
aiModel: parseString(resource.attributes['ai_model']),
|
|
34
|
+
// Moderation
|
|
35
|
+
moderated: parseBoolean(resource.attributes['moderated']),
|
|
36
|
+
moderatedBy: parseString(resource.attributes['moderated_by']),
|
|
37
|
+
moderatedAt: parseDate(resource.attributes['moderated_at']),
|
|
38
|
+
moderationReason: parseString(resource.attributes['moderation_reason']),
|
|
39
|
+
moderationDecision: parseString(resource.attributes['moderation_decision'])
|
|
40
|
+
})
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=comment.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/comment.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Comment } from '../types/comment';\nimport { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';\n\nexport const commentMapper: ResourceMapper<Comment> = {\n type: 'Comment',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n postUniqueId: parseString(resource.attributes['post_unique_id']) || '',\n postVersion: parseOptionalNumber(resource.attributes['post_version']),\n content: parseString(resource.attributes['content']) || '',\n thumbnailUrl: parseString(resource.attributes['thumbnail_url']),\n imageUrl: parseString(resource.attributes['image_url']),\n contentUrl: parseString(resource.attributes['content_url']),\n mediaUrl: parseString(resource.attributes['media_url']),\n\n // User\n userUniqueId: parseString(resource.attributes['user_unique_id']),\n userName: parseString(resource.attributes['user_name']),\n userAlias: parseString(resource.attributes['user_alias']),\n userAvatarUrl: parseString(resource.attributes['user_avatar_url']),\n\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n\n // Threading\n parentId: parseString(resource.attributes['parent_id']),\n\n // Engagement\n likes: parseOptionalNumber(resource.attributes['likes']),\n dislikes: parseOptionalNumber(resource.attributes['dislikes']),\n followers: parseOptionalNumber(resource.attributes['followers']),\n savers: parseOptionalNumber(resource.attributes['savers']),\n\n // AI\n aiGenerated: parseBoolean(resource.attributes['ai_generated']),\n aiModel: parseString(resource.attributes['ai_model']),\n\n // Moderation\n moderated: parseBoolean(resource.attributes['moderated']),\n moderatedBy: parseString(resource.attributes['moderated_by']),\n moderatedAt: parseDate(resource.attributes['moderated_at']),\n moderationReason: parseString(resource.attributes['moderation_reason']),\n moderationDecision: parseString(resource.attributes['moderation_decision']),\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseOptionalNumber","parseStatus","commentMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","postUniqueId","postVersion","content","thumbnailUrl","imageUrl","contentUrl","mediaUrl","userUniqueId","userName","userAlias","userAvatarUrl","payload","status","enabled","parentId","likes","dislikes","followers","savers","aiGenerated","aiModel","moderated","moderatedBy","moderatedAt","moderationReason","moderationDecision"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,mBAAmB,EAAEC,WAAW,QAAQ,UAAU;AAEjG,OAAO,MAAMC,gBAAyC;IACpDC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUV,YAAYQ,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWX,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWb,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,cAAcf,YAAYQ,SAASG,UAAU,CAAC,iBAAiB,KAAK;YACpEK,aAAab,oBAAoBK,SAASG,UAAU,CAAC,eAAe;YACpEM,SAASjB,YAAYQ,SAASG,UAAU,CAAC,UAAU,KAAK;YACxDO,cAAclB,YAAYQ,SAASG,UAAU,CAAC,gBAAgB;YAC9DQ,UAAUnB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDS,YAAYpB,YAAYQ,SAASG,UAAU,CAAC,cAAc;YAC1DU,UAAUrB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YAEtD,OAAO;YACPW,cAActB,YAAYQ,SAASG,UAAU,CAAC,iBAAiB;YAC/DY,UAAUvB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDa,WAAWxB,YAAYQ,SAASG,UAAU,CAAC,aAAa;YACxDc,eAAezB,YAAYQ,SAASG,UAAU,CAAC,kBAAkB;YAEjEe,SAASlB,SAASG,UAAU,CAAC,UAAU;YACvCgB,QAAQvB,YAAYI,SAASG,UAAU,CAAC,SAAS;YACjDiB,SAAS1B,aAAaM,SAASG,UAAU,CAAC,UAAU;YAEpD,YAAY;YACZkB,UAAU7B,YAAYQ,SAASG,UAAU,CAAC,YAAY;YAEtD,aAAa;YACbmB,OAAO3B,oBAAoBK,SAASG,UAAU,CAAC,QAAQ;YACvDoB,UAAU5B,oBAAoBK,SAASG,UAAU,CAAC,WAAW;YAC7DqB,WAAW7B,oBAAoBK,SAASG,UAAU,CAAC,YAAY;YAC/DsB,QAAQ9B,oBAAoBK,SAASG,UAAU,CAAC,SAAS;YAEzD,KAAK;YACLuB,aAAahC,aAAaM,SAASG,UAAU,CAAC,eAAe;YAC7DwB,SAASnC,YAAYQ,SAASG,UAAU,CAAC,WAAW;YAEpD,aAAa;YACbyB,WAAWlC,aAAaM,SAASG,UAAU,CAAC,YAAY;YACxD0B,aAAarC,YAAYQ,SAASG,UAAU,CAAC,eAAe;YAC5D2B,aAAarC,UAAUO,SAASG,UAAU,CAAC,eAAe;YAC1D4B,kBAAkBvC,YAAYQ,SAASG,UAAU,CAAC,oBAAoB;YACtE6B,oBAAoBxC,YAAYQ,SAASG,UAAU,CAAC,sBAAsB;QAC5E,CAAA;AACF,EAAE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/index.ts"],"sourcesContent":["export * from './post.mapper';\nexport * from './comment.mapper';\nexport * from './category.mapper';\nexport * from './tag.mapper';\n"],"names":[],"rangeMappings":";;;","mappings":"AAAA,cAAc,gBAAgB;AAC9B,cAAc,mBAAmB;AACjC,cAAc,oBAAoB;AAClC,cAAc,eAAe"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';
|
|
2
|
+
export const postMapper = {
|
|
3
|
+
type: 'Post',
|
|
4
|
+
map: (resource)=>({
|
|
5
|
+
id: resource.id,
|
|
6
|
+
uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
|
|
7
|
+
createdAt: parseDate(resource.attributes['created_at']) || new Date(),
|
|
8
|
+
updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
|
|
9
|
+
postVersionUniqueId: parseString(resource.attributes['post_version_unique_id']),
|
|
10
|
+
title: parseString(resource.attributes['title']) || '',
|
|
11
|
+
abstract: parseString(resource.attributes['abstract']),
|
|
12
|
+
keywords: parseString(resource.attributes['keywords']),
|
|
13
|
+
content: parseString(resource.attributes['content']),
|
|
14
|
+
thumbnailUrl: parseString(resource.attributes['thumbnail_url']),
|
|
15
|
+
imageUrl: parseString(resource.attributes['image_url']),
|
|
16
|
+
mediaUrl: parseString(resource.attributes['media_url']),
|
|
17
|
+
payload: resource.attributes['payload'],
|
|
18
|
+
status: parseStatus(resource.attributes['status']),
|
|
19
|
+
enabled: parseBoolean(resource.attributes['enabled']),
|
|
20
|
+
publishAt: parseDate(resource.attributes['publish_at']),
|
|
21
|
+
publishUntil: parseDate(resource.attributes['publish_until']),
|
|
22
|
+
// User
|
|
23
|
+
userUniqueId: parseString(resource.attributes['user_unique_id']),
|
|
24
|
+
userName: parseString(resource.attributes['user_name']),
|
|
25
|
+
userAlias: parseString(resource.attributes['user_alias']),
|
|
26
|
+
userAvatarUrl: parseString(resource.attributes['user_avatar_url']),
|
|
27
|
+
// Visibility
|
|
28
|
+
isPublic: parseBoolean(resource.attributes['is_public']),
|
|
29
|
+
// Versioning
|
|
30
|
+
version: parseOptionalNumber(resource.attributes['version']),
|
|
31
|
+
// Engagement
|
|
32
|
+
likes: parseOptionalNumber(resource.attributes['likes']),
|
|
33
|
+
dislikes: parseOptionalNumber(resource.attributes['dislikes']),
|
|
34
|
+
comments: parseOptionalNumber(resource.attributes['comments']),
|
|
35
|
+
followers: parseOptionalNumber(resource.attributes['followers']),
|
|
36
|
+
savers: parseOptionalNumber(resource.attributes['savers']),
|
|
37
|
+
// SEO
|
|
38
|
+
slug: parseString(resource.attributes['slug']),
|
|
39
|
+
// AI
|
|
40
|
+
aiGenerated: parseBoolean(resource.attributes['ai_generated']),
|
|
41
|
+
aiModel: parseString(resource.attributes['ai_model']),
|
|
42
|
+
// Moderation
|
|
43
|
+
moderated: parseBoolean(resource.attributes['moderated']),
|
|
44
|
+
moderatedBy: parseString(resource.attributes['moderated_by']),
|
|
45
|
+
moderatedAt: parseDate(resource.attributes['moderated_at']),
|
|
46
|
+
moderationReason: parseString(resource.attributes['moderation_reason']),
|
|
47
|
+
moderationDecision: parseString(resource.attributes['moderation_decision'])
|
|
48
|
+
})
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
//# sourceMappingURL=post.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/post.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Post } from '../types/post';\nimport { parseString, parseDate, parseBoolean, parseOptionalNumber, parseStatus } from './utils';\n\nexport const postMapper: ResourceMapper<Post> = {\n type: 'Post',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n postVersionUniqueId: parseString(resource.attributes['post_version_unique_id']),\n title: parseString(resource.attributes['title']) || '',\n abstract: parseString(resource.attributes['abstract']),\n keywords: parseString(resource.attributes['keywords']),\n content: parseString(resource.attributes['content']),\n thumbnailUrl: parseString(resource.attributes['thumbnail_url']),\n imageUrl: parseString(resource.attributes['image_url']),\n mediaUrl: parseString(resource.attributes['media_url']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n publishAt: parseDate(resource.attributes['publish_at']),\n publishUntil: parseDate(resource.attributes['publish_until']),\n\n // User\n userUniqueId: parseString(resource.attributes['user_unique_id']),\n userName: parseString(resource.attributes['user_name']),\n userAlias: parseString(resource.attributes['user_alias']),\n userAvatarUrl: parseString(resource.attributes['user_avatar_url']),\n\n // Visibility\n isPublic: parseBoolean(resource.attributes['is_public']),\n\n // Versioning\n version: parseOptionalNumber(resource.attributes['version']),\n\n // Engagement\n likes: parseOptionalNumber(resource.attributes['likes']),\n dislikes: parseOptionalNumber(resource.attributes['dislikes']),\n comments: parseOptionalNumber(resource.attributes['comments']),\n followers: parseOptionalNumber(resource.attributes['followers']),\n savers: parseOptionalNumber(resource.attributes['savers']),\n\n // SEO\n slug: parseString(resource.attributes['slug']),\n\n // AI\n aiGenerated: parseBoolean(resource.attributes['ai_generated']),\n aiModel: parseString(resource.attributes['ai_model']),\n\n // Moderation\n moderated: parseBoolean(resource.attributes['moderated']),\n moderatedBy: parseString(resource.attributes['moderated_by']),\n moderatedAt: parseDate(resource.attributes['moderated_at']),\n moderationReason: parseString(resource.attributes['moderation_reason']),\n moderationDecision: parseString(resource.attributes['moderation_decision']),\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseOptionalNumber","parseStatus","postMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","postVersionUniqueId","title","abstract","keywords","content","thumbnailUrl","imageUrl","mediaUrl","payload","status","enabled","publishAt","publishUntil","userUniqueId","userName","userAlias","userAvatarUrl","isPublic","version","likes","dislikes","comments","followers","savers","slug","aiGenerated","aiModel","moderated","moderatedBy","moderatedAt","moderationReason","moderationDecision"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,mBAAmB,EAAEC,WAAW,QAAQ,UAAU;AAEjG,OAAO,MAAMC,aAAmC;IAC9CC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUV,YAAYQ,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWX,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWb,UAAUO,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,qBAAqBf,YAAYQ,SAASG,UAAU,CAAC,yBAAyB;YAC9EK,OAAOhB,YAAYQ,SAASG,UAAU,CAAC,QAAQ,KAAK;YACpDM,UAAUjB,YAAYQ,SAASG,UAAU,CAAC,WAAW;YACrDO,UAAUlB,YAAYQ,SAASG,UAAU,CAAC,WAAW;YACrDQ,SAASnB,YAAYQ,SAASG,UAAU,CAAC,UAAU;YACnDS,cAAcpB,YAAYQ,SAASG,UAAU,CAAC,gBAAgB;YAC9DU,UAAUrB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDW,UAAUtB,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDY,SAASf,SAASG,UAAU,CAAC,UAAU;YACvCa,QAAQpB,YAAYI,SAASG,UAAU,CAAC,SAAS;YACjDc,SAASvB,aAAaM,SAASG,UAAU,CAAC,UAAU;YACpDe,WAAWzB,UAAUO,SAASG,UAAU,CAAC,aAAa;YACtDgB,cAAc1B,UAAUO,SAASG,UAAU,CAAC,gBAAgB;YAE5D,OAAO;YACPiB,cAAc5B,YAAYQ,SAASG,UAAU,CAAC,iBAAiB;YAC/DkB,UAAU7B,YAAYQ,SAASG,UAAU,CAAC,YAAY;YACtDmB,WAAW9B,YAAYQ,SAASG,UAAU,CAAC,aAAa;YACxDoB,eAAe/B,YAAYQ,SAASG,UAAU,CAAC,kBAAkB;YAEjE,aAAa;YACbqB,UAAU9B,aAAaM,SAASG,UAAU,CAAC,YAAY;YAEvD,aAAa;YACbsB,SAAS9B,oBAAoBK,SAASG,UAAU,CAAC,UAAU;YAE3D,aAAa;YACbuB,OAAO/B,oBAAoBK,SAASG,UAAU,CAAC,QAAQ;YACvDwB,UAAUhC,oBAAoBK,SAASG,UAAU,CAAC,WAAW;YAC7DyB,UAAUjC,oBAAoBK,SAASG,UAAU,CAAC,WAAW;YAC7D0B,WAAWlC,oBAAoBK,SAASG,UAAU,CAAC,YAAY;YAC/D2B,QAAQnC,oBAAoBK,SAASG,UAAU,CAAC,SAAS;YAEzD,MAAM;YACN4B,MAAMvC,YAAYQ,SAASG,UAAU,CAAC,OAAO;YAE7C,KAAK;YACL6B,aAAatC,aAAaM,SAASG,UAAU,CAAC,eAAe;YAC7D8B,SAASzC,YAAYQ,SAASG,UAAU,CAAC,WAAW;YAEpD,aAAa;YACb+B,WAAWxC,aAAaM,SAASG,UAAU,CAAC,YAAY;YACxDgC,aAAa3C,YAAYQ,SAASG,UAAU,CAAC,eAAe;YAC5DiC,aAAa3C,UAAUO,SAASG,UAAU,CAAC,eAAe;YAC1DkC,kBAAkB7C,YAAYQ,SAASG,UAAU,CAAC,oBAAoB;YACtEmC,oBAAoB9C,YAAYQ,SAASG,UAAU,CAAC,sBAAsB;QAC5E,CAAA;AACF,EAAE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { parseString, parseDate, parseBoolean, parseStatus } from './utils';
|
|
2
|
+
export const tagMapper = {
|
|
3
|
+
type: 'Tag',
|
|
4
|
+
map: (resource)=>({
|
|
5
|
+
id: resource.id,
|
|
6
|
+
uniqueId: parseString(resource.attributes['unique_id']) || resource.id,
|
|
7
|
+
createdAt: parseDate(resource.attributes['created_at']) || new Date(),
|
|
8
|
+
updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),
|
|
9
|
+
tag: parseString(resource.attributes['tag']) || '',
|
|
10
|
+
thumbnailUrl: parseString(resource.attributes['thumbnail_url']),
|
|
11
|
+
imageUrl: parseString(resource.attributes['image_url']),
|
|
12
|
+
contentUrl: parseString(resource.attributes['content_url']),
|
|
13
|
+
mediaUrl: parseString(resource.attributes['media_url']),
|
|
14
|
+
payload: resource.attributes['payload'],
|
|
15
|
+
status: parseStatus(resource.attributes['status']),
|
|
16
|
+
enabled: parseBoolean(resource.attributes['enabled']),
|
|
17
|
+
slug: parseString(resource.attributes['slug'])
|
|
18
|
+
})
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=tag.mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/tag.mapper.ts"],"sourcesContent":["import type { ResourceMapper } from '@23blocks/jsonapi-codec';\nimport type { Tag } from '../types/tag';\nimport { parseString, parseDate, parseBoolean, parseStatus } from './utils';\n\nexport const tagMapper: ResourceMapper<Tag> = {\n type: 'Tag',\n map: (resource) => ({\n id: resource.id,\n uniqueId: parseString(resource.attributes['unique_id']) || resource.id,\n createdAt: parseDate(resource.attributes['created_at']) || new Date(),\n updatedAt: parseDate(resource.attributes['updated_at']) || new Date(),\n\n tag: parseString(resource.attributes['tag']) || '',\n thumbnailUrl: parseString(resource.attributes['thumbnail_url']),\n imageUrl: parseString(resource.attributes['image_url']),\n contentUrl: parseString(resource.attributes['content_url']),\n mediaUrl: parseString(resource.attributes['media_url']),\n payload: resource.attributes['payload'] as Record<string, unknown> | undefined,\n status: parseStatus(resource.attributes['status']),\n enabled: parseBoolean(resource.attributes['enabled']),\n slug: parseString(resource.attributes['slug']),\n }),\n};\n"],"names":["parseString","parseDate","parseBoolean","parseStatus","tagMapper","type","map","resource","id","uniqueId","attributes","createdAt","Date","updatedAt","tag","thumbnailUrl","imageUrl","contentUrl","mediaUrl","payload","status","enabled","slug"],"rangeMappings":";;;;;;;;;;;;;;;;;;","mappings":"AAEA,SAASA,WAAW,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,QAAQ,UAAU;AAE5E,OAAO,MAAMC,YAAiC;IAC5CC,MAAM;IACNC,KAAK,CAACC,WAAc,CAAA;YAClBC,IAAID,SAASC,EAAE;YACfC,UAAUT,YAAYO,SAASG,UAAU,CAAC,YAAY,KAAKH,SAASC,EAAE;YACtEG,WAAWV,UAAUM,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAC/DC,WAAWZ,UAAUM,SAASG,UAAU,CAAC,aAAa,KAAK,IAAIE;YAE/DE,KAAKd,YAAYO,SAASG,UAAU,CAAC,MAAM,KAAK;YAChDK,cAAcf,YAAYO,SAASG,UAAU,CAAC,gBAAgB;YAC9DM,UAAUhB,YAAYO,SAASG,UAAU,CAAC,YAAY;YACtDO,YAAYjB,YAAYO,SAASG,UAAU,CAAC,cAAc;YAC1DQ,UAAUlB,YAAYO,SAASG,UAAU,CAAC,YAAY;YACtDS,SAASZ,SAASG,UAAU,CAAC,UAAU;YACvCU,QAAQjB,YAAYI,SAASG,UAAU,CAAC,SAAS;YACjDW,SAASnB,aAAaK,SAASG,UAAU,CAAC,UAAU;YACpDY,MAAMtB,YAAYO,SAASG,UAAU,CAAC,OAAO;QAC/C,CAAA;AACF,EAAE"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse a string value, returning undefined for empty/undefined
|
|
3
|
+
*/ export function parseString(value) {
|
|
4
|
+
if (value === null || value === undefined) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
const str = String(value);
|
|
8
|
+
return str.length > 0 ? str : undefined;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Parse a date value
|
|
12
|
+
*/ export function parseDate(value) {
|
|
13
|
+
if (value === null || value === undefined) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
if (value instanceof Date) {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
20
|
+
const date = new Date(value);
|
|
21
|
+
return isNaN(date.getTime()) ? undefined : date;
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parse a boolean value
|
|
27
|
+
*/ export function parseBoolean(value) {
|
|
28
|
+
if (typeof value === 'boolean') {
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
if (value === 'true' || value === '1' || value === 1) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse an array of strings
|
|
38
|
+
*/ export function parseStringArray(value) {
|
|
39
|
+
if (value === null || value === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
if (Array.isArray(value)) {
|
|
43
|
+
return value.map(String);
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse a number value
|
|
49
|
+
*/ export function parseNumber(value) {
|
|
50
|
+
if (value === null || value === undefined) {
|
|
51
|
+
return 0;
|
|
52
|
+
}
|
|
53
|
+
const num = Number(value);
|
|
54
|
+
return isNaN(num) ? 0 : num;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Parse an optional number value
|
|
58
|
+
*/ export function parseOptionalNumber(value) {
|
|
59
|
+
if (value === null || value === undefined) {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
const num = Number(value);
|
|
63
|
+
return isNaN(num) ? undefined : num;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Parse entity status
|
|
67
|
+
*/ export function parseStatus(value) {
|
|
68
|
+
const status = parseString(value);
|
|
69
|
+
if (status === 'active' || status === 'inactive' || status === 'pending' || status === 'archived' || status === 'deleted') {
|
|
70
|
+
return status;
|
|
71
|
+
}
|
|
72
|
+
return 'active';
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/mappers/utils.ts"],"sourcesContent":["/**\n * Parse a string value, returning undefined for empty/undefined\n */\nexport function parseString(value: unknown): string | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n const str = String(value);\n return str.length > 0 ? str : undefined;\n}\n\n/**\n * Parse a date value\n */\nexport function parseDate(value: unknown): Date | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n const date = new Date(value);\n return isNaN(date.getTime()) ? undefined : date;\n }\n\n return undefined;\n}\n\n/**\n * Parse a boolean value\n */\nexport function parseBoolean(value: unknown): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (value === 'true' || value === '1' || value === 1) {\n return true;\n }\n return false;\n}\n\n/**\n * Parse an array of strings\n */\nexport function parseStringArray(value: unknown): string[] | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n if (Array.isArray(value)) {\n return value.map(String);\n }\n return undefined;\n}\n\n/**\n * Parse a number value\n */\nexport function parseNumber(value: unknown): number {\n if (value === null || value === undefined) {\n return 0;\n }\n const num = Number(value);\n return isNaN(num) ? 0 : num;\n}\n\n/**\n * Parse an optional number value\n */\nexport function parseOptionalNumber(value: unknown): number | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n const num = Number(value);\n return isNaN(num) ? undefined : num;\n}\n\n/**\n * Parse entity status\n */\nexport function parseStatus(value: unknown): 'active' | 'inactive' | 'pending' | 'archived' | 'deleted' {\n const status = parseString(value);\n if (status === 'active' || status === 'inactive' || status === 'pending' || status === 'archived' || status === 'deleted') {\n return status;\n }\n return 'active';\n}\n"],"names":["parseString","value","undefined","str","String","length","parseDate","Date","date","isNaN","getTime","parseBoolean","parseStringArray","Array","isArray","map","parseNumber","num","Number","parseOptionalNumber","parseStatus","status"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;CAEC,GACD,OAAO,SAASA,YAAYC,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,MAAMC,MAAMC,OAAOH;IACnB,OAAOE,IAAIE,MAAM,GAAG,IAAIF,MAAMD;AAChC;AAEA;;CAEC,GACD,OAAO,SAASI,UAAUL,KAAc;IACtC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IAEA,IAAID,iBAAiBM,MAAM;QACzB,OAAON;IACT;IAEA,IAAI,OAAOA,UAAU,YAAY,OAAOA,UAAU,UAAU;QAC1D,MAAMO,OAAO,IAAID,KAAKN;QACtB,OAAOQ,MAAMD,KAAKE,OAAO,MAAMR,YAAYM;IAC7C;IAEA,OAAON;AACT;AAEA;;CAEC,GACD,OAAO,SAASS,aAAaV,KAAc;IACzC,IAAI,OAAOA,UAAU,WAAW;QAC9B,OAAOA;IACT;IACA,IAAIA,UAAU,UAAUA,UAAU,OAAOA,UAAU,GAAG;QACpD,OAAO;IACT;IACA,OAAO;AACT;AAEA;;CAEC,GACD,OAAO,SAASW,iBAAiBX,KAAc;IAC7C,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,IAAIW,MAAMC,OAAO,CAACb,QAAQ;QACxB,OAAOA,MAAMc,GAAG,CAACX;IACnB;IACA,OAAOF;AACT;AAEA;;CAEC,GACD,OAAO,SAASc,YAAYf,KAAc;IACxC,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAO;IACT;IACA,MAAMe,MAAMC,OAAOjB;IACnB,OAAOQ,MAAMQ,OAAO,IAAIA;AAC1B;AAEA;;CAEC,GACD,OAAO,SAASE,oBAAoBlB,KAAc;IAChD,IAAIA,UAAU,QAAQA,UAAUC,WAAW;QACzC,OAAOA;IACT;IACA,MAAMe,MAAMC,OAAOjB;IACnB,OAAOQ,MAAMQ,OAAOf,YAAYe;AAClC;AAEA;;CAEC,GACD,OAAO,SAASG,YAAYnB,KAAc;IACxC,MAAMoB,SAASrB,YAAYC;IAC3B,IAAIoB,WAAW,YAAYA,WAAW,cAAcA,WAAW,aAAaA,WAAW,cAAcA,WAAW,WAAW;QACzH,OAAOA;IACT;IACA,OAAO;AACT"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';
|
|
2
|
+
import { categoryMapper } from '../mappers/category.mapper';
|
|
3
|
+
export function createCategoriesService(transport, _config) {
|
|
4
|
+
return {
|
|
5
|
+
async list (params) {
|
|
6
|
+
const queryParams = {};
|
|
7
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
8
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
9
|
+
if (params == null ? void 0 : params.parentUniqueId) queryParams['parent_unique_id'] = params.parentUniqueId;
|
|
10
|
+
if (params == null ? void 0 : params.withChildren) queryParams['with'] = 'children';
|
|
11
|
+
if (params == null ? void 0 : params.withPosts) queryParams['with'] = params.withChildren ? 'children,posts' : 'posts';
|
|
12
|
+
const response = await transport.get('/content/categories', {
|
|
13
|
+
params: queryParams
|
|
14
|
+
});
|
|
15
|
+
return decodePageResult(response, categoryMapper);
|
|
16
|
+
},
|
|
17
|
+
async get (uniqueId) {
|
|
18
|
+
const response = await transport.get(`/content/categories/${uniqueId}`);
|
|
19
|
+
return decodeOne(response, categoryMapper);
|
|
20
|
+
},
|
|
21
|
+
async create (data) {
|
|
22
|
+
const response = await transport.post('/content/categories', {
|
|
23
|
+
data: {
|
|
24
|
+
type: 'Category',
|
|
25
|
+
attributes: {
|
|
26
|
+
name: data.name,
|
|
27
|
+
description: data.description,
|
|
28
|
+
parent_unique_id: data.parentUniqueId,
|
|
29
|
+
display_order: data.displayOrder,
|
|
30
|
+
image_url: data.imageUrl,
|
|
31
|
+
icon_url: data.iconUrl
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
return decodeOne(response, categoryMapper);
|
|
36
|
+
},
|
|
37
|
+
async update (uniqueId, data) {
|
|
38
|
+
const response = await transport.put(`/content/categories/${uniqueId}`, {
|
|
39
|
+
data: {
|
|
40
|
+
type: 'Category',
|
|
41
|
+
attributes: {
|
|
42
|
+
name: data.name,
|
|
43
|
+
description: data.description,
|
|
44
|
+
parent_unique_id: data.parentUniqueId,
|
|
45
|
+
display_order: data.displayOrder,
|
|
46
|
+
image_url: data.imageUrl,
|
|
47
|
+
icon_url: data.iconUrl,
|
|
48
|
+
enabled: data.enabled,
|
|
49
|
+
status: data.status
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
return decodeOne(response, categoryMapper);
|
|
54
|
+
},
|
|
55
|
+
async delete (uniqueId) {
|
|
56
|
+
await transport.delete(`/content/categories/${uniqueId}`);
|
|
57
|
+
},
|
|
58
|
+
async recover (uniqueId) {
|
|
59
|
+
const response = await transport.put(`/content/categories/${uniqueId}/recover`, {});
|
|
60
|
+
return decodeOne(response, categoryMapper);
|
|
61
|
+
},
|
|
62
|
+
async getChildren (uniqueId) {
|
|
63
|
+
const response = await transport.get(`/content/categories/${uniqueId}/children`);
|
|
64
|
+
return decodeMany(response, categoryMapper);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
//# sourceMappingURL=categories.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/services/categories.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodeMany, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Category,\n CreateCategoryRequest,\n UpdateCategoryRequest,\n ListCategoriesParams,\n} from '../types/category';\nimport { categoryMapper } from '../mappers/category.mapper';\n\nexport interface CategoriesService {\n list(params?: ListCategoriesParams): Promise<PageResult<Category>>;\n get(uniqueId: string): Promise<Category>;\n create(data: CreateCategoryRequest): Promise<Category>;\n update(uniqueId: string, data: UpdateCategoryRequest): Promise<Category>;\n delete(uniqueId: string): Promise<void>;\n recover(uniqueId: string): Promise<Category>;\n getChildren(uniqueId: string): Promise<Category[]>;\n}\n\nexport function createCategoriesService(transport: Transport, _config: { appId: string }): CategoriesService {\n return {\n async list(params?: ListCategoriesParams): Promise<PageResult<Category>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.parentUniqueId) queryParams['parent_unique_id'] = params.parentUniqueId;\n if (params?.withChildren) queryParams['with'] = 'children';\n if (params?.withPosts) queryParams['with'] = params.withChildren ? 'children,posts' : 'posts';\n\n const response = await transport.get<unknown>('/content/categories', { params: queryParams });\n return decodePageResult(response, categoryMapper);\n },\n\n async get(uniqueId: string): Promise<Category> {\n const response = await transport.get<unknown>(`/content/categories/${uniqueId}`);\n return decodeOne(response, categoryMapper);\n },\n\n async create(data: CreateCategoryRequest): Promise<Category> {\n const response = await transport.post<unknown>('/content/categories', {\n data: {\n type: 'Category',\n attributes: {\n name: data.name,\n description: data.description,\n parent_unique_id: data.parentUniqueId,\n display_order: data.displayOrder,\n image_url: data.imageUrl,\n icon_url: data.iconUrl,\n },\n },\n });\n return decodeOne(response, categoryMapper);\n },\n\n async update(uniqueId: string, data: UpdateCategoryRequest): Promise<Category> {\n const response = await transport.put<unknown>(`/content/categories/${uniqueId}`, {\n data: {\n type: 'Category',\n attributes: {\n name: data.name,\n description: data.description,\n parent_unique_id: data.parentUniqueId,\n display_order: data.displayOrder,\n image_url: data.imageUrl,\n icon_url: data.iconUrl,\n enabled: data.enabled,\n status: data.status,\n },\n },\n });\n return decodeOne(response, categoryMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/content/categories/${uniqueId}`);\n },\n\n async recover(uniqueId: string): Promise<Category> {\n const response = await transport.put<unknown>(`/content/categories/${uniqueId}/recover`, {});\n return decodeOne(response, categoryMapper);\n },\n\n async getChildren(uniqueId: string): Promise<Category[]> {\n const response = await transport.get<unknown>(`/content/categories/${uniqueId}/children`);\n return decodeMany(response, categoryMapper);\n },\n };\n}\n"],"names":["decodeOne","decodeMany","decodePageResult","categoryMapper","createCategoriesService","transport","_config","list","params","queryParams","page","String","perPage","parentUniqueId","withChildren","withPosts","response","get","uniqueId","create","data","post","type","attributes","name","description","parent_unique_id","display_order","displayOrder","image_url","imageUrl","icon_url","iconUrl","update","put","enabled","status","delete","recover","getChildren"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,UAAU,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOlF,SAASC,cAAc,QAAQ,6BAA6B;AAY5D,OAAO,SAASC,wBAAwBC,SAAoB,EAAEC,OAA0B;IACtF,OAAO;QACL,MAAMC,MAAKC,MAA6B;YACtC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,cAAc,EAAEJ,WAAW,CAAC,mBAAmB,GAAGD,OAAOK,cAAc;YACnF,IAAIL,0BAAAA,OAAQM,YAAY,EAAEL,WAAW,CAAC,OAAO,GAAG;YAChD,IAAID,0BAAAA,OAAQO,SAAS,EAAEN,WAAW,CAAC,OAAO,GAAGD,OAAOM,YAAY,GAAG,mBAAmB;YAEtF,MAAME,WAAW,MAAMX,UAAUY,GAAG,CAAU,uBAAuB;gBAAET,QAAQC;YAAY;YAC3F,OAAOP,iBAAiBc,UAAUb;QACpC;QAEA,MAAMc,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMX,UAAUY,GAAG,CAAU,CAAC,oBAAoB,EAAEC,SAAS,CAAC;YAC/E,OAAOlB,UAAUgB,UAAUb;QAC7B;QAEA,MAAMgB,QAAOC,IAA2B;YACtC,MAAMJ,WAAW,MAAMX,UAAUgB,IAAI,CAAU,uBAAuB;gBACpED,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,MAAMJ,KAAKI,IAAI;wBACfC,aAAaL,KAAKK,WAAW;wBAC7BC,kBAAkBN,KAAKP,cAAc;wBACrCc,eAAeP,KAAKQ,YAAY;wBAChCC,WAAWT,KAAKU,QAAQ;wBACxBC,UAAUX,KAAKY,OAAO;oBACxB;gBACF;YACF;YACA,OAAOhC,UAAUgB,UAAUb;QAC7B;QAEA,MAAM8B,QAAOf,QAAgB,EAAEE,IAA2B;YACxD,MAAMJ,WAAW,MAAMX,UAAU6B,GAAG,CAAU,CAAC,oBAAoB,EAAEhB,SAAS,CAAC,EAAE;gBAC/EE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,MAAMJ,KAAKI,IAAI;wBACfC,aAAaL,KAAKK,WAAW;wBAC7BC,kBAAkBN,KAAKP,cAAc;wBACrCc,eAAeP,KAAKQ,YAAY;wBAChCC,WAAWT,KAAKU,QAAQ;wBACxBC,UAAUX,KAAKY,OAAO;wBACtBG,SAASf,KAAKe,OAAO;wBACrBC,QAAQhB,KAAKgB,MAAM;oBACrB;gBACF;YACF;YACA,OAAOpC,UAAUgB,UAAUb;QAC7B;QAEA,MAAMkC,QAAOnB,QAAgB;YAC3B,MAAMb,UAAUgC,MAAM,CAAC,CAAC,oBAAoB,EAAEnB,SAAS,CAAC;QAC1D;QAEA,MAAMoB,SAAQpB,QAAgB;YAC5B,MAAMF,WAAW,MAAMX,UAAU6B,GAAG,CAAU,CAAC,oBAAoB,EAAEhB,SAAS,QAAQ,CAAC,EAAE,CAAC;YAC1F,OAAOlB,UAAUgB,UAAUb;QAC7B;QAEA,MAAMoC,aAAYrB,QAAgB;YAChC,MAAMF,WAAW,MAAMX,UAAUY,GAAG,CAAU,CAAC,oBAAoB,EAAEC,SAAS,SAAS,CAAC;YACxF,OAAOjB,WAAWe,UAAUb;QAC9B;IACF;AACF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';
|
|
2
|
+
import { commentMapper } from '../mappers/comment.mapper';
|
|
3
|
+
export function createCommentsService(transport, _config) {
|
|
4
|
+
return {
|
|
5
|
+
async list (params) {
|
|
6
|
+
const queryParams = {};
|
|
7
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
8
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
9
|
+
if (params == null ? void 0 : params.postUniqueId) queryParams['post_unique_id'] = params.postUniqueId;
|
|
10
|
+
if (params == null ? void 0 : params.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;
|
|
11
|
+
if (params == null ? void 0 : params.parentId) queryParams['parent_id'] = params.parentId;
|
|
12
|
+
if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
|
|
13
|
+
const response = await transport.get('/comments', {
|
|
14
|
+
params: queryParams
|
|
15
|
+
});
|
|
16
|
+
return decodePageResult(response, commentMapper);
|
|
17
|
+
},
|
|
18
|
+
async get (uniqueId) {
|
|
19
|
+
const response = await transport.get(`/comments/${uniqueId}`);
|
|
20
|
+
return decodeOne(response, commentMapper);
|
|
21
|
+
},
|
|
22
|
+
async create (data) {
|
|
23
|
+
const response = await transport.post('/comments', {
|
|
24
|
+
data: {
|
|
25
|
+
type: 'Comment',
|
|
26
|
+
attributes: {
|
|
27
|
+
post_unique_id: data.postUniqueId,
|
|
28
|
+
content: data.content,
|
|
29
|
+
thumbnail_url: data.thumbnailUrl,
|
|
30
|
+
image_url: data.imageUrl,
|
|
31
|
+
content_url: data.contentUrl,
|
|
32
|
+
media_url: data.mediaUrl,
|
|
33
|
+
parent_id: data.parentId,
|
|
34
|
+
payload: data.payload
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return decodeOne(response, commentMapper);
|
|
39
|
+
},
|
|
40
|
+
async update (uniqueId, data) {
|
|
41
|
+
const response = await transport.put(`/comments/${uniqueId}`, {
|
|
42
|
+
data: {
|
|
43
|
+
type: 'Comment',
|
|
44
|
+
attributes: {
|
|
45
|
+
content: data.content,
|
|
46
|
+
thumbnail_url: data.thumbnailUrl,
|
|
47
|
+
image_url: data.imageUrl,
|
|
48
|
+
content_url: data.contentUrl,
|
|
49
|
+
media_url: data.mediaUrl,
|
|
50
|
+
enabled: data.enabled,
|
|
51
|
+
status: data.status,
|
|
52
|
+
payload: data.payload
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
return decodeOne(response, commentMapper);
|
|
57
|
+
},
|
|
58
|
+
async delete (uniqueId) {
|
|
59
|
+
await transport.delete(`/comments/${uniqueId}`);
|
|
60
|
+
},
|
|
61
|
+
// Engagement
|
|
62
|
+
async like (uniqueId) {
|
|
63
|
+
const response = await transport.post(`/comments/${uniqueId}/like`, {});
|
|
64
|
+
return decodeOne(response, commentMapper);
|
|
65
|
+
},
|
|
66
|
+
async dislike (uniqueId) {
|
|
67
|
+
const response = await transport.post(`/comments/${uniqueId}/dislike`, {});
|
|
68
|
+
return decodeOne(response, commentMapper);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//# sourceMappingURL=comments.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/services/comments.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Comment,\n CreateCommentRequest,\n UpdateCommentRequest,\n ListCommentsParams,\n} from '../types/comment';\nimport { commentMapper } from '../mappers/comment.mapper';\n\nexport interface CommentsService {\n list(params?: ListCommentsParams): Promise<PageResult<Comment>>;\n get(uniqueId: string): Promise<Comment>;\n create(data: CreateCommentRequest): Promise<Comment>;\n update(uniqueId: string, data: UpdateCommentRequest): Promise<Comment>;\n delete(uniqueId: string): Promise<void>;\n\n // Engagement\n like(uniqueId: string): Promise<Comment>;\n dislike(uniqueId: string): Promise<Comment>;\n}\n\nexport function createCommentsService(transport: Transport, _config: { appId: string }): CommentsService {\n return {\n async list(params?: ListCommentsParams): Promise<PageResult<Comment>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.postUniqueId) queryParams['post_unique_id'] = params.postUniqueId;\n if (params?.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;\n if (params?.parentId) queryParams['parent_id'] = params.parentId;\n if (params?.status) queryParams['status'] = params.status;\n\n const response = await transport.get<unknown>('/comments', { params: queryParams });\n return decodePageResult(response, commentMapper);\n },\n\n async get(uniqueId: string): Promise<Comment> {\n const response = await transport.get<unknown>(`/comments/${uniqueId}`);\n return decodeOne(response, commentMapper);\n },\n\n async create(data: CreateCommentRequest): Promise<Comment> {\n const response = await transport.post<unknown>('/comments', {\n data: {\n type: 'Comment',\n attributes: {\n post_unique_id: data.postUniqueId,\n content: data.content,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n content_url: data.contentUrl,\n media_url: data.mediaUrl,\n parent_id: data.parentId,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, commentMapper);\n },\n\n async update(uniqueId: string, data: UpdateCommentRequest): Promise<Comment> {\n const response = await transport.put<unknown>(`/comments/${uniqueId}`, {\n data: {\n type: 'Comment',\n attributes: {\n content: data.content,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n content_url: data.contentUrl,\n media_url: data.mediaUrl,\n enabled: data.enabled,\n status: data.status,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, commentMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/comments/${uniqueId}`);\n },\n\n // Engagement\n async like(uniqueId: string): Promise<Comment> {\n const response = await transport.post<unknown>(`/comments/${uniqueId}/like`, {});\n return decodeOne(response, commentMapper);\n },\n\n async dislike(uniqueId: string): Promise<Comment> {\n const response = await transport.post<unknown>(`/comments/${uniqueId}/dislike`, {});\n return decodeOne(response, commentMapper);\n },\n };\n}\n"],"names":["decodeOne","decodePageResult","commentMapper","createCommentsService","transport","_config","list","params","queryParams","page","String","perPage","postUniqueId","userUniqueId","parentId","status","response","get","uniqueId","create","data","post","type","attributes","post_unique_id","content","thumbnail_url","thumbnailUrl","image_url","imageUrl","content_url","contentUrl","media_url","mediaUrl","parent_id","payload","update","put","enabled","delete","like","dislike"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOtE,SAASC,aAAa,QAAQ,4BAA4B;AAc1D,OAAO,SAASC,sBAAsBC,SAAoB,EAAEC,OAA0B;IACpF,OAAO;QACL,MAAMC,MAAKC,MAA2B;YACpC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,YAAY,EAAEJ,WAAW,CAAC,iBAAiB,GAAGD,OAAOK,YAAY;YAC7E,IAAIL,0BAAAA,OAAQM,YAAY,EAAEL,WAAW,CAAC,iBAAiB,GAAGD,OAAOM,YAAY;YAC7E,IAAIN,0BAAAA,OAAQO,QAAQ,EAAEN,WAAW,CAAC,YAAY,GAAGD,OAAOO,QAAQ;YAChE,IAAIP,0BAAAA,OAAQQ,MAAM,EAAEP,WAAW,CAAC,SAAS,GAAGD,OAAOQ,MAAM;YAEzD,MAAMC,WAAW,MAAMZ,UAAUa,GAAG,CAAU,aAAa;gBAAEV,QAAQC;YAAY;YACjF,OAAOP,iBAAiBe,UAAUd;QACpC;QAEA,MAAMe,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMZ,UAAUa,GAAG,CAAU,CAAC,UAAU,EAAEC,SAAS,CAAC;YACrE,OAAOlB,UAAUgB,UAAUd;QAC7B;QAEA,MAAMiB,QAAOC,IAA0B;YACrC,MAAMJ,WAAW,MAAMZ,UAAUiB,IAAI,CAAU,aAAa;gBAC1DD,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,gBAAgBJ,KAAKR,YAAY;wBACjCa,SAASL,KAAKK,OAAO;wBACrBC,eAAeN,KAAKO,YAAY;wBAChCC,WAAWR,KAAKS,QAAQ;wBACxBC,aAAaV,KAAKW,UAAU;wBAC5BC,WAAWZ,KAAKa,QAAQ;wBACxBC,WAAWd,KAAKN,QAAQ;wBACxBqB,SAASf,KAAKe,OAAO;oBACvB;gBACF;YACF;YACA,OAAOnC,UAAUgB,UAAUd;QAC7B;QAEA,MAAMkC,QAAOlB,QAAgB,EAAEE,IAA0B;YACvD,MAAMJ,WAAW,MAAMZ,UAAUiC,GAAG,CAAU,CAAC,UAAU,EAAEnB,SAAS,CAAC,EAAE;gBACrEE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVE,SAASL,KAAKK,OAAO;wBACrBC,eAAeN,KAAKO,YAAY;wBAChCC,WAAWR,KAAKS,QAAQ;wBACxBC,aAAaV,KAAKW,UAAU;wBAC5BC,WAAWZ,KAAKa,QAAQ;wBACxBK,SAASlB,KAAKkB,OAAO;wBACrBvB,QAAQK,KAAKL,MAAM;wBACnBoB,SAASf,KAAKe,OAAO;oBACvB;gBACF;YACF;YACA,OAAOnC,UAAUgB,UAAUd;QAC7B;QAEA,MAAMqC,QAAOrB,QAAgB;YAC3B,MAAMd,UAAUmC,MAAM,CAAC,CAAC,UAAU,EAAErB,SAAS,CAAC;QAChD;QAEA,aAAa;QACb,MAAMsB,MAAKtB,QAAgB;YACzB,MAAMF,WAAW,MAAMZ,UAAUiB,IAAI,CAAU,CAAC,UAAU,EAAEH,SAAS,KAAK,CAAC,EAAE,CAAC;YAC9E,OAAOlB,UAAUgB,UAAUd;QAC7B;QAEA,MAAMuC,SAAQvB,QAAgB;YAC5B,MAAMF,WAAW,MAAMZ,UAAUiB,IAAI,CAAU,CAAC,UAAU,EAAEH,SAAS,QAAQ,CAAC,EAAE,CAAC;YACjF,OAAOlB,UAAUgB,UAAUd;QAC7B;IACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/services/index.ts"],"sourcesContent":["export * from './posts.service';\nexport * from './comments.service';\nexport * from './categories.service';\nexport * from './tags.service';\n"],"names":[],"rangeMappings":";;;","mappings":"AAAA,cAAc,kBAAkB;AAChC,cAAc,qBAAqB;AACnC,cAAc,uBAAuB;AACrC,cAAc,iBAAiB"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';
|
|
2
|
+
import { postMapper } from '../mappers/post.mapper';
|
|
3
|
+
export function createPostsService(transport, _config) {
|
|
4
|
+
return {
|
|
5
|
+
async list (params) {
|
|
6
|
+
const queryParams = {};
|
|
7
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
8
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
9
|
+
if (params == null ? void 0 : params.status) queryParams['status'] = params.status;
|
|
10
|
+
if (params == null ? void 0 : params.categoryUniqueId) queryParams['category_unique_id'] = params.categoryUniqueId;
|
|
11
|
+
if (params == null ? void 0 : params.tagUniqueId) queryParams['tag_unique_id'] = params.tagUniqueId;
|
|
12
|
+
if (params == null ? void 0 : params.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;
|
|
13
|
+
if (params == null ? void 0 : params.search) queryParams['search'] = params.search;
|
|
14
|
+
if ((params == null ? void 0 : params.isPublic) !== undefined) queryParams['is_public'] = String(params.isPublic);
|
|
15
|
+
if (params == null ? void 0 : params.withComments) queryParams['with'] = 'comments';
|
|
16
|
+
if (params == null ? void 0 : params.withCategories) queryParams['with'] = params.withComments ? 'comments,categories' : 'categories';
|
|
17
|
+
if (params == null ? void 0 : params.withTags) {
|
|
18
|
+
queryParams['with'] = queryParams['with'] ? `${queryParams['with']},tags` : 'tags';
|
|
19
|
+
}
|
|
20
|
+
if (params == null ? void 0 : params.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;
|
|
21
|
+
const response = await transport.get('/posts', {
|
|
22
|
+
params: queryParams
|
|
23
|
+
});
|
|
24
|
+
return decodePageResult(response, postMapper);
|
|
25
|
+
},
|
|
26
|
+
async get (uniqueId) {
|
|
27
|
+
const response = await transport.get(`/posts/${uniqueId}`);
|
|
28
|
+
return decodeOne(response, postMapper);
|
|
29
|
+
},
|
|
30
|
+
async create (data) {
|
|
31
|
+
const response = await transport.post('/posts', {
|
|
32
|
+
data: {
|
|
33
|
+
type: 'Post',
|
|
34
|
+
attributes: {
|
|
35
|
+
title: data.title,
|
|
36
|
+
abstract: data.abstract,
|
|
37
|
+
keywords: data.keywords,
|
|
38
|
+
content: data.content,
|
|
39
|
+
thumbnail_url: data.thumbnailUrl,
|
|
40
|
+
image_url: data.imageUrl,
|
|
41
|
+
media_url: data.mediaUrl,
|
|
42
|
+
category_unique_ids: data.categoryUniqueIds,
|
|
43
|
+
tag_unique_ids: data.tagUniqueIds,
|
|
44
|
+
is_public: data.isPublic,
|
|
45
|
+
publish_at: data.publishAt,
|
|
46
|
+
publish_until: data.publishUntil,
|
|
47
|
+
payload: data.payload
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return decodeOne(response, postMapper);
|
|
52
|
+
},
|
|
53
|
+
async update (uniqueId, data) {
|
|
54
|
+
const response = await transport.put(`/posts/${uniqueId}`, {
|
|
55
|
+
data: {
|
|
56
|
+
type: 'Post',
|
|
57
|
+
attributes: {
|
|
58
|
+
title: data.title,
|
|
59
|
+
abstract: data.abstract,
|
|
60
|
+
keywords: data.keywords,
|
|
61
|
+
content: data.content,
|
|
62
|
+
thumbnail_url: data.thumbnailUrl,
|
|
63
|
+
image_url: data.imageUrl,
|
|
64
|
+
media_url: data.mediaUrl,
|
|
65
|
+
category_unique_ids: data.categoryUniqueIds,
|
|
66
|
+
tag_unique_ids: data.tagUniqueIds,
|
|
67
|
+
is_public: data.isPublic,
|
|
68
|
+
publish_at: data.publishAt,
|
|
69
|
+
publish_until: data.publishUntil,
|
|
70
|
+
enabled: data.enabled,
|
|
71
|
+
status: data.status,
|
|
72
|
+
payload: data.payload
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
return decodeOne(response, postMapper);
|
|
77
|
+
},
|
|
78
|
+
async delete (uniqueId) {
|
|
79
|
+
await transport.delete(`/posts/${uniqueId}`);
|
|
80
|
+
},
|
|
81
|
+
async recover (uniqueId) {
|
|
82
|
+
const response = await transport.put(`/posts/${uniqueId}/recover`, {});
|
|
83
|
+
return decodeOne(response, postMapper);
|
|
84
|
+
},
|
|
85
|
+
async search (query, params) {
|
|
86
|
+
const queryParams = {
|
|
87
|
+
search: query
|
|
88
|
+
};
|
|
89
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
90
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
91
|
+
const response = await transport.post('/posts/search', {
|
|
92
|
+
search: query
|
|
93
|
+
}, {
|
|
94
|
+
params: queryParams
|
|
95
|
+
});
|
|
96
|
+
return decodePageResult(response, postMapper);
|
|
97
|
+
},
|
|
98
|
+
async listDeleted (params) {
|
|
99
|
+
const queryParams = {};
|
|
100
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
101
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
102
|
+
const response = await transport.get('/posts/trash/show', {
|
|
103
|
+
params: queryParams
|
|
104
|
+
});
|
|
105
|
+
return decodePageResult(response, postMapper);
|
|
106
|
+
},
|
|
107
|
+
// Engagement
|
|
108
|
+
async like (uniqueId) {
|
|
109
|
+
const response = await transport.post(`/posts/${uniqueId}/like`, {});
|
|
110
|
+
return decodeOne(response, postMapper);
|
|
111
|
+
},
|
|
112
|
+
async dislike (uniqueId) {
|
|
113
|
+
const response = await transport.post(`/posts/${uniqueId}/dislike`, {});
|
|
114
|
+
return decodeOne(response, postMapper);
|
|
115
|
+
},
|
|
116
|
+
async save (uniqueId) {
|
|
117
|
+
const response = await transport.post(`/posts/${uniqueId}/save`, {});
|
|
118
|
+
return decodeOne(response, postMapper);
|
|
119
|
+
},
|
|
120
|
+
async follow (uniqueId) {
|
|
121
|
+
const response = await transport.post(`/posts/${uniqueId}/follow`, {});
|
|
122
|
+
return decodeOne(response, postMapper);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
//# sourceMappingURL=posts.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/services/posts.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Post,\n CreatePostRequest,\n UpdatePostRequest,\n ListPostsParams,\n} from '../types/post';\nimport { postMapper } from '../mappers/post.mapper';\n\nexport interface PostsService {\n // Posts\n list(params?: ListPostsParams): Promise<PageResult<Post>>;\n get(uniqueId: string): Promise<Post>;\n create(data: CreatePostRequest): Promise<Post>;\n update(uniqueId: string, data: UpdatePostRequest): Promise<Post>;\n delete(uniqueId: string): Promise<void>;\n recover(uniqueId: string): Promise<Post>;\n search(query: string, params?: ListPostsParams): Promise<PageResult<Post>>;\n listDeleted(params?: ListPostsParams): Promise<PageResult<Post>>;\n\n // Engagement\n like(uniqueId: string): Promise<Post>;\n dislike(uniqueId: string): Promise<Post>;\n save(uniqueId: string): Promise<Post>;\n follow(uniqueId: string): Promise<Post>;\n}\n\nexport function createPostsService(transport: Transport, _config: { appId: string }): PostsService {\n return {\n async list(params?: ListPostsParams): Promise<PageResult<Post>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.status) queryParams['status'] = params.status;\n if (params?.categoryUniqueId) queryParams['category_unique_id'] = params.categoryUniqueId;\n if (params?.tagUniqueId) queryParams['tag_unique_id'] = params.tagUniqueId;\n if (params?.userUniqueId) queryParams['user_unique_id'] = params.userUniqueId;\n if (params?.search) queryParams['search'] = params.search;\n if (params?.isPublic !== undefined) queryParams['is_public'] = String(params.isPublic);\n if (params?.withComments) queryParams['with'] = 'comments';\n if (params?.withCategories) queryParams['with'] = params.withComments ? 'comments,categories' : 'categories';\n if (params?.withTags) {\n queryParams['with'] = queryParams['with'] ? `${queryParams['with']},tags` : 'tags';\n }\n if (params?.sortBy) queryParams['sort'] = params.sortOrder === 'desc' ? `-${params.sortBy}` : params.sortBy;\n\n const response = await transport.get<unknown>('/posts', { params: queryParams });\n return decodePageResult(response, postMapper);\n },\n\n async get(uniqueId: string): Promise<Post> {\n const response = await transport.get<unknown>(`/posts/${uniqueId}`);\n return decodeOne(response, postMapper);\n },\n\n async create(data: CreatePostRequest): Promise<Post> {\n const response = await transport.post<unknown>('/posts', {\n data: {\n type: 'Post',\n attributes: {\n title: data.title,\n abstract: data.abstract,\n keywords: data.keywords,\n content: data.content,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n media_url: data.mediaUrl,\n category_unique_ids: data.categoryUniqueIds,\n tag_unique_ids: data.tagUniqueIds,\n is_public: data.isPublic,\n publish_at: data.publishAt,\n publish_until: data.publishUntil,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, postMapper);\n },\n\n async update(uniqueId: string, data: UpdatePostRequest): Promise<Post> {\n const response = await transport.put<unknown>(`/posts/${uniqueId}`, {\n data: {\n type: 'Post',\n attributes: {\n title: data.title,\n abstract: data.abstract,\n keywords: data.keywords,\n content: data.content,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n media_url: data.mediaUrl,\n category_unique_ids: data.categoryUniqueIds,\n tag_unique_ids: data.tagUniqueIds,\n is_public: data.isPublic,\n publish_at: data.publishAt,\n publish_until: data.publishUntil,\n enabled: data.enabled,\n status: data.status,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, postMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/posts/${uniqueId}`);\n },\n\n async recover(uniqueId: string): Promise<Post> {\n const response = await transport.put<unknown>(`/posts/${uniqueId}/recover`, {});\n return decodeOne(response, postMapper);\n },\n\n async search(query: string, params?: ListPostsParams): Promise<PageResult<Post>> {\n const queryParams: Record<string, string> = { search: query };\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n\n const response = await transport.post<unknown>('/posts/search', { search: query }, { params: queryParams });\n return decodePageResult(response, postMapper);\n },\n\n async listDeleted(params?: ListPostsParams): Promise<PageResult<Post>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n\n const response = await transport.get<unknown>('/posts/trash/show', { params: queryParams });\n return decodePageResult(response, postMapper);\n },\n\n // Engagement\n async like(uniqueId: string): Promise<Post> {\n const response = await transport.post<unknown>(`/posts/${uniqueId}/like`, {});\n return decodeOne(response, postMapper);\n },\n\n async dislike(uniqueId: string): Promise<Post> {\n const response = await transport.post<unknown>(`/posts/${uniqueId}/dislike`, {});\n return decodeOne(response, postMapper);\n },\n\n async save(uniqueId: string): Promise<Post> {\n const response = await transport.post<unknown>(`/posts/${uniqueId}/save`, {});\n return decodeOne(response, postMapper);\n },\n\n async follow(uniqueId: string): Promise<Post> {\n const response = await transport.post<unknown>(`/posts/${uniqueId}/follow`, {});\n return decodeOne(response, postMapper);\n },\n };\n}\n"],"names":["decodeOne","decodePageResult","postMapper","createPostsService","transport","_config","list","params","queryParams","page","String","perPage","status","categoryUniqueId","tagUniqueId","userUniqueId","search","isPublic","undefined","withComments","withCategories","withTags","sortBy","sortOrder","response","get","uniqueId","create","data","post","type","attributes","title","abstract","keywords","content","thumbnail_url","thumbnailUrl","image_url","imageUrl","media_url","mediaUrl","category_unique_ids","categoryUniqueIds","tag_unique_ids","tagUniqueIds","is_public","publish_at","publishAt","publish_until","publishUntil","payload","update","put","enabled","delete","recover","query","listDeleted","like","dislike","save","follow"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';
|
|
2
|
+
import { tagMapper } from '../mappers/tag.mapper';
|
|
3
|
+
export function createTagsService(transport, _config) {
|
|
4
|
+
return {
|
|
5
|
+
async list (params) {
|
|
6
|
+
const queryParams = {};
|
|
7
|
+
if (params == null ? void 0 : params.page) queryParams['page'] = String(params.page);
|
|
8
|
+
if (params == null ? void 0 : params.perPage) queryParams['records'] = String(params.perPage);
|
|
9
|
+
if (params == null ? void 0 : params.search) queryParams['search'] = params.search;
|
|
10
|
+
const response = await transport.get('/tags', {
|
|
11
|
+
params: queryParams
|
|
12
|
+
});
|
|
13
|
+
return decodePageResult(response, tagMapper);
|
|
14
|
+
},
|
|
15
|
+
async get (uniqueId) {
|
|
16
|
+
const response = await transport.get(`/tags/${uniqueId}`);
|
|
17
|
+
return decodeOne(response, tagMapper);
|
|
18
|
+
},
|
|
19
|
+
async create (data) {
|
|
20
|
+
const response = await transport.post('/tags', {
|
|
21
|
+
data: {
|
|
22
|
+
type: 'Tag',
|
|
23
|
+
attributes: {
|
|
24
|
+
tag: data.tag,
|
|
25
|
+
thumbnail_url: data.thumbnailUrl,
|
|
26
|
+
image_url: data.imageUrl,
|
|
27
|
+
content_url: data.contentUrl,
|
|
28
|
+
media_url: data.mediaUrl,
|
|
29
|
+
payload: data.payload
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return decodeOne(response, tagMapper);
|
|
34
|
+
},
|
|
35
|
+
async update (uniqueId, data) {
|
|
36
|
+
const response = await transport.put(`/tags/${uniqueId}`, {
|
|
37
|
+
data: {
|
|
38
|
+
type: 'Tag',
|
|
39
|
+
attributes: {
|
|
40
|
+
tag: data.tag,
|
|
41
|
+
thumbnail_url: data.thumbnailUrl,
|
|
42
|
+
image_url: data.imageUrl,
|
|
43
|
+
content_url: data.contentUrl,
|
|
44
|
+
media_url: data.mediaUrl,
|
|
45
|
+
enabled: data.enabled,
|
|
46
|
+
status: data.status,
|
|
47
|
+
payload: data.payload
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
return decodeOne(response, tagMapper);
|
|
52
|
+
},
|
|
53
|
+
async delete (uniqueId) {
|
|
54
|
+
await transport.delete(`/tags/${uniqueId}`);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=tags.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/services/tags.service.ts"],"sourcesContent":["import type { Transport, PageResult } from '@23blocks/contracts';\nimport { decodeOne, decodePageResult } from '@23blocks/jsonapi-codec';\nimport type {\n Tag,\n CreateTagRequest,\n UpdateTagRequest,\n ListTagsParams,\n} from '../types/tag';\nimport { tagMapper } from '../mappers/tag.mapper';\n\nexport interface TagsService {\n list(params?: ListTagsParams): Promise<PageResult<Tag>>;\n get(uniqueId: string): Promise<Tag>;\n create(data: CreateTagRequest): Promise<Tag>;\n update(uniqueId: string, data: UpdateTagRequest): Promise<Tag>;\n delete(uniqueId: string): Promise<void>;\n}\n\nexport function createTagsService(transport: Transport, _config: { appId: string }): TagsService {\n return {\n async list(params?: ListTagsParams): Promise<PageResult<Tag>> {\n const queryParams: Record<string, string> = {};\n if (params?.page) queryParams['page'] = String(params.page);\n if (params?.perPage) queryParams['records'] = String(params.perPage);\n if (params?.search) queryParams['search'] = params.search;\n\n const response = await transport.get<unknown>('/tags', { params: queryParams });\n return decodePageResult(response, tagMapper);\n },\n\n async get(uniqueId: string): Promise<Tag> {\n const response = await transport.get<unknown>(`/tags/${uniqueId}`);\n return decodeOne(response, tagMapper);\n },\n\n async create(data: CreateTagRequest): Promise<Tag> {\n const response = await transport.post<unknown>('/tags', {\n data: {\n type: 'Tag',\n attributes: {\n tag: data.tag,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n content_url: data.contentUrl,\n media_url: data.mediaUrl,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, tagMapper);\n },\n\n async update(uniqueId: string, data: UpdateTagRequest): Promise<Tag> {\n const response = await transport.put<unknown>(`/tags/${uniqueId}`, {\n data: {\n type: 'Tag',\n attributes: {\n tag: data.tag,\n thumbnail_url: data.thumbnailUrl,\n image_url: data.imageUrl,\n content_url: data.contentUrl,\n media_url: data.mediaUrl,\n enabled: data.enabled,\n status: data.status,\n payload: data.payload,\n },\n },\n });\n return decodeOne(response, tagMapper);\n },\n\n async delete(uniqueId: string): Promise<void> {\n await transport.delete(`/tags/${uniqueId}`);\n },\n };\n}\n"],"names":["decodeOne","decodePageResult","tagMapper","createTagsService","transport","_config","list","params","queryParams","page","String","perPage","search","response","get","uniqueId","create","data","post","type","attributes","tag","thumbnail_url","thumbnailUrl","image_url","imageUrl","content_url","contentUrl","media_url","mediaUrl","payload","update","put","enabled","status","delete"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AACA,SAASA,SAAS,EAAEC,gBAAgB,QAAQ,0BAA0B;AAOtE,SAASC,SAAS,QAAQ,wBAAwB;AAUlD,OAAO,SAASC,kBAAkBC,SAAoB,EAAEC,OAA0B;IAChF,OAAO;QACL,MAAMC,MAAKC,MAAuB;YAChC,MAAMC,cAAsC,CAAC;YAC7C,IAAID,0BAAAA,OAAQE,IAAI,EAAED,WAAW,CAAC,OAAO,GAAGE,OAAOH,OAAOE,IAAI;YAC1D,IAAIF,0BAAAA,OAAQI,OAAO,EAAEH,WAAW,CAAC,UAAU,GAAGE,OAAOH,OAAOI,OAAO;YACnE,IAAIJ,0BAAAA,OAAQK,MAAM,EAAEJ,WAAW,CAAC,SAAS,GAAGD,OAAOK,MAAM;YAEzD,MAAMC,WAAW,MAAMT,UAAUU,GAAG,CAAU,SAAS;gBAAEP,QAAQC;YAAY;YAC7E,OAAOP,iBAAiBY,UAAUX;QACpC;QAEA,MAAMY,KAAIC,QAAgB;YACxB,MAAMF,WAAW,MAAMT,UAAUU,GAAG,CAAU,CAAC,MAAM,EAAEC,SAAS,CAAC;YACjE,OAAOf,UAAUa,UAAUX;QAC7B;QAEA,MAAMc,QAAOC,IAAsB;YACjC,MAAMJ,WAAW,MAAMT,UAAUc,IAAI,CAAU,SAAS;gBACtDD,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,KAAKJ,KAAKI,GAAG;wBACbC,eAAeL,KAAKM,YAAY;wBAChCC,WAAWP,KAAKQ,QAAQ;wBACxBC,aAAaT,KAAKU,UAAU;wBAC5BC,WAAWX,KAAKY,QAAQ;wBACxBC,SAASb,KAAKa,OAAO;oBACvB;gBACF;YACF;YACA,OAAO9B,UAAUa,UAAUX;QAC7B;QAEA,MAAM6B,QAAOhB,QAAgB,EAAEE,IAAsB;YACnD,MAAMJ,WAAW,MAAMT,UAAU4B,GAAG,CAAU,CAAC,MAAM,EAAEjB,SAAS,CAAC,EAAE;gBACjEE,MAAM;oBACJE,MAAM;oBACNC,YAAY;wBACVC,KAAKJ,KAAKI,GAAG;wBACbC,eAAeL,KAAKM,YAAY;wBAChCC,WAAWP,KAAKQ,QAAQ;wBACxBC,aAAaT,KAAKU,UAAU;wBAC5BC,WAAWX,KAAKY,QAAQ;wBACxBI,SAAShB,KAAKgB,OAAO;wBACrBC,QAAQjB,KAAKiB,MAAM;wBACnBJ,SAASb,KAAKa,OAAO;oBACvB;gBACF;YACF;YACA,OAAO9B,UAAUa,UAAUX;QAC7B;QAEA,MAAMiC,QAAOpB,QAAgB;YAC3B,MAAMX,UAAU+B,MAAM,CAAC,CAAC,MAAM,EAAEpB,SAAS,CAAC;QAC5C;IACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/types/category.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Category extends IdentityCore {\n code: string;\n name: string;\n description?: string;\n parentId?: string;\n parentUniqueId?: string;\n\n // Display\n displayOrder?: number;\n iconUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n slug?: string;\n\n // Business Logic\n status: EntityStatus;\n enabled: boolean;\n\n // SEO\n metaTitle?: string;\n metaDescription?: string;\n metaKeywords?: string;\n\n // Source tracking\n source?: string;\n sourceAlias?: string;\n sourceId?: string;\n sourceType?: string;\n\n // Extra\n payload?: Record<string, unknown>;\n\n // Nested\n children?: Category[];\n postCount?: number;\n}\n\n// Request types\nexport interface CreateCategoryRequest {\n name: string;\n description?: string;\n parentUniqueId?: string;\n displayOrder?: number;\n imageUrl?: string;\n iconUrl?: string;\n}\n\nexport interface UpdateCategoryRequest {\n name?: string;\n description?: string;\n parentUniqueId?: string;\n displayOrder?: number;\n imageUrl?: string;\n iconUrl?: string;\n enabled?: boolean;\n status?: EntityStatus;\n}\n\nexport interface ListCategoriesParams {\n page?: number;\n perPage?: number;\n parentUniqueId?: string;\n withChildren?: boolean;\n withPosts?: boolean;\n}\n"],"names":[],"rangeMappings":"","mappings":"AA4DA,WAMC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/types/comment.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Comment extends IdentityCore {\n uniqueId: string;\n postUniqueId: string;\n postVersion?: number;\n content: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n\n // User (denormalized)\n userUniqueId?: string;\n userName?: string;\n userAlias?: string;\n userAvatarUrl?: string;\n\n payload?: Record<string, unknown>;\n status: EntityStatus;\n enabled: boolean;\n\n // Threading\n parentId?: string;\n\n // Engagement metrics\n likes?: number;\n dislikes?: number;\n followers?: number;\n savers?: number;\n\n // AI\n aiGenerated?: boolean;\n aiModel?: string;\n\n // Moderation\n moderated?: boolean;\n moderatedBy?: string;\n moderatedAt?: Date;\n moderationReason?: string;\n moderationDecision?: string;\n}\n\n// Request types\nexport interface CreateCommentRequest {\n postUniqueId: string;\n content: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n parentId?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface UpdateCommentRequest {\n content?: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n enabled?: boolean;\n status?: EntityStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface ListCommentsParams {\n page?: number;\n perPage?: number;\n postUniqueId?: string;\n userUniqueId?: string;\n parentId?: string;\n status?: EntityStatus;\n}\n"],"names":[],"rangeMappings":"","mappings":"AAkEA,WAOC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/types/index.ts"],"sourcesContent":["export * from './post';\nexport * from './comment';\nexport * from './category';\nexport * from './tag';\n"],"names":[],"rangeMappings":";;;","mappings":"AAAA,cAAc,SAAS;AACvB,cAAc,YAAY;AAC1B,cAAc,aAAa;AAC3B,cAAc,QAAQ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/types/post.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Post extends IdentityCore {\n uniqueId: string;\n postVersionUniqueId?: string;\n title: string;\n abstract?: string;\n keywords?: string;\n content?: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n mediaUrl?: string;\n payload?: Record<string, unknown>;\n status: EntityStatus;\n enabled: boolean;\n publishAt?: Date;\n publishUntil?: Date;\n\n // User (denormalized)\n userUniqueId?: string;\n userName?: string;\n userAlias?: string;\n userAvatarUrl?: string;\n\n // Visibility\n isPublic?: boolean;\n\n // Versioning\n version?: number;\n\n // Engagement metrics\n likes?: number;\n dislikes?: number;\n comments?: number;\n followers?: number;\n savers?: number;\n\n // SEO\n slug?: string;\n\n // AI\n aiGenerated?: boolean;\n aiModel?: string;\n\n // Moderation\n moderated?: boolean;\n moderatedBy?: string;\n moderatedAt?: Date;\n moderationReason?: string;\n moderationDecision?: string;\n}\n\n// Request types\nexport interface CreatePostRequest {\n title: string;\n abstract?: string;\n keywords?: string;\n content?: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n mediaUrl?: string;\n categoryUniqueIds?: string[];\n tagUniqueIds?: string[];\n isPublic?: boolean;\n publishAt?: Date;\n publishUntil?: Date;\n payload?: Record<string, unknown>;\n}\n\nexport interface UpdatePostRequest {\n title?: string;\n abstract?: string;\n keywords?: string;\n content?: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n mediaUrl?: string;\n categoryUniqueIds?: string[];\n tagUniqueIds?: string[];\n isPublic?: boolean;\n publishAt?: Date;\n publishUntil?: Date;\n enabled?: boolean;\n status?: EntityStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface ListPostsParams {\n page?: number;\n perPage?: number;\n status?: EntityStatus;\n categoryUniqueId?: string;\n tagUniqueId?: string;\n userUniqueId?: string;\n search?: string;\n withComments?: boolean;\n withCategories?: boolean;\n withTags?: boolean;\n isPublic?: boolean;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n}\n"],"names":[],"rangeMappings":"","mappings":"AAuFA,WAcC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/types/tag.ts"],"sourcesContent":["import type { IdentityCore, EntityStatus } from '@23blocks/contracts';\n\nexport interface Tag extends IdentityCore {\n uniqueId: string;\n tag: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n payload?: Record<string, unknown>;\n status: EntityStatus;\n enabled: boolean;\n slug?: string;\n}\n\n// Request types\nexport interface CreateTagRequest {\n tag: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n payload?: Record<string, unknown>;\n}\n\nexport interface UpdateTagRequest {\n tag?: string;\n thumbnailUrl?: string;\n imageUrl?: string;\n contentUrl?: string;\n mediaUrl?: string;\n enabled?: boolean;\n status?: EntityStatus;\n payload?: Record<string, unknown>;\n}\n\nexport interface ListTagsParams {\n page?: number;\n perPage?: number;\n search?: string;\n}\n"],"names":[],"rangeMappings":"","mappings":"AAoCA,WAIC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@23blocks/block-content",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/23blocks-OS/frontend-sdk.git",
|
|
8
|
+
"directory": "packages/block-content"
|
|
9
|
+
},
|
|
5
10
|
"main": "./dist/index.js",
|
|
6
11
|
"module": "./dist/index.js",
|
|
7
12
|
"types": "./dist/index.d.ts",
|
package/dist/index.d.ts
DELETED
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"block-content.d.ts","sourceRoot":"","sources":["../../src/lib/block-content.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,IAAI,MAAM,CAErC"}
|