@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.
Files changed (41) hide show
  1. package/dist/index.js +5 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/lib/content.block.js +22 -0
  4. package/dist/lib/content.block.js.map +1 -0
  5. package/dist/lib/mappers/category.mapper.js +38 -0
  6. package/dist/lib/mappers/category.mapper.js.map +1 -0
  7. package/dist/lib/mappers/comment.mapper.js +43 -0
  8. package/dist/lib/mappers/comment.mapper.js.map +1 -0
  9. package/dist/lib/mappers/index.js +6 -0
  10. package/dist/lib/mappers/index.js.map +1 -0
  11. package/dist/lib/mappers/post.mapper.js +51 -0
  12. package/dist/lib/mappers/post.mapper.js.map +1 -0
  13. package/dist/lib/mappers/tag.mapper.js +21 -0
  14. package/dist/lib/mappers/tag.mapper.js.map +1 -0
  15. package/dist/lib/mappers/utils.js +75 -0
  16. package/dist/lib/mappers/utils.js.map +1 -0
  17. package/dist/lib/services/categories.service.js +69 -0
  18. package/dist/lib/services/categories.service.js.map +1 -0
  19. package/dist/lib/services/comments.service.js +73 -0
  20. package/dist/lib/services/comments.service.js.map +1 -0
  21. package/dist/lib/services/index.js +6 -0
  22. package/dist/lib/services/index.js.map +1 -0
  23. package/dist/lib/services/posts.service.js +127 -0
  24. package/dist/lib/services/posts.service.js.map +1 -0
  25. package/dist/lib/services/tags.service.js +59 -0
  26. package/dist/lib/services/tags.service.js.map +1 -0
  27. package/dist/lib/types/category.js +3 -0
  28. package/dist/lib/types/category.js.map +1 -0
  29. package/dist/lib/types/comment.js +3 -0
  30. package/dist/lib/types/comment.js.map +1 -0
  31. package/dist/lib/types/index.js +6 -0
  32. package/dist/lib/types/index.js.map +1 -0
  33. package/dist/lib/types/post.js +3 -0
  34. package/dist/lib/types/post.js.map +1 -0
  35. package/dist/lib/types/tag.js +3 -0
  36. package/dist/lib/types/tag.js.map +1 -0
  37. package/package.json +6 -1
  38. package/dist/index.d.ts +0 -2
  39. package/dist/index.d.ts.map +0 -1
  40. package/dist/lib/block-content.d.ts +0 -2
  41. package/dist/lib/block-content.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,3 +1,7 @@
1
- export * from './lib/block-content.js';
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":["export * from './lib/block-content.js';\n"],"names":[],"rangeMappings":"","mappings":"AAAA,cAAc,yBAAyB"}
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,6 @@
1
+ export * from './post.mapper';
2
+ export * from './comment.mapper';
3
+ export * from './category.mapper';
4
+ export * from './tag.mapper';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -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,6 @@
1
+ export * from './posts.service';
2
+ export * from './comments.service';
3
+ export * from './categories.service';
4
+ export * from './tags.service';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=category.js.map
@@ -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,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=comment.js.map
@@ -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,6 @@
1
+ export * from './post';
2
+ export * from './comment';
3
+ export * from './category';
4
+ export * from './tag';
5
+
6
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=post.js.map
@@ -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,3 @@
1
+ export { };
2
+
3
+ //# sourceMappingURL=tag.js.map
@@ -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": "0.1.0",
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
@@ -1,2 +0,0 @@
1
- export * from './lib/block-content.js';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function blockContent(): string;
2
- //# sourceMappingURL=block-content.d.ts.map
@@ -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"}