@shopnex/cj-plugin 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,30 +4,54 @@ import { JSDOM } from "jsdom";
4
4
  import { cjSdk } from "../sdk/cj-sdk";
5
5
  import { retrieveAccessToken } from "./access-token";
6
6
  const delay = (ms)=>new Promise((resolve)=>setTimeout(resolve, ms));
7
+ const upsertImage = async ({ payload, imageUrl, filename, alt, shopId })=>{
8
+ const imageData = await payload.find({
9
+ collection: "media",
10
+ where: {
11
+ filename: {
12
+ equals: filename
13
+ },
14
+ shop: {
15
+ equals: shopId
16
+ }
17
+ },
18
+ limit: 1
19
+ });
20
+ if (imageData.totalDocs === 0) {
21
+ return payload.create({
22
+ collection: "media",
23
+ data: {
24
+ alt,
25
+ filename,
26
+ thumbnailURL: imageUrl,
27
+ url: imageUrl,
28
+ shop: shopId
29
+ }
30
+ });
31
+ }
32
+ return imageData.docs[0];
33
+ };
7
34
  async function mapMockProductToSchema({ product, payload, shopId }) {
8
35
  const variants = [];
9
36
  for (const variant of product.variants || []){
10
- // let imageData;
11
- // const filename = variant.variantImage?.split("/").pop();
12
- // const alt = filename?.split(".")[0];
13
- // try {
14
- // imageData = await payload.create({
15
- // collection: "media",
16
- // data: {
17
- // alt,
18
- // filename,
19
- // thumbnailURL: variant.variantImage,
20
- // url: variant.variantImage,
21
- // width: 1024,
22
- // shop: shopId,
23
- // },
24
- // });
25
- // } catch (error) {
26
- // console.error("Error creating media:", error);
27
- // }
28
- // const imageId = imageData?.id;
37
+ const filename = variant?.variantImage?.split("/").pop();
38
+ if (!filename || !variant.variantImage) {
39
+ continue;
40
+ }
41
+ const alt = filename.split(".")[0];
42
+ const imageUrl = variant.variantImage;
43
+ const imageData = await upsertImage({
44
+ payload,
45
+ imageUrl,
46
+ filename,
47
+ alt,
48
+ shopId
49
+ });
50
+ const imageId = imageData.id;
29
51
  variants.push({
30
- imageUrl: variant.variantImage,
52
+ gallery: [
53
+ imageId
54
+ ],
31
55
  options: variant.variantKey?.split("-").map((key, index)=>({
32
56
  option: index === 0 ? "Color" : "Size",
33
57
  value: key
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/service/sync-products.ts"],"sourcesContent":["import type {\n DefaultNodeTypes,\n TypedEditorState,\n} from \"@payloadcms/richtext-lexical\";\nimport type { BasePayload } from \"payload\";\n\nimport {\n convertHTMLToLexical,\n editorConfigFactory,\n} from \"@payloadcms/richtext-lexical\";\nimport decimal from \"decimal.js\";\nimport { JSDOM } from \"jsdom\";\n\nimport type { ProductDetails } from \"../sdk/products/product-types\";\n\nimport { cjSdk } from \"../sdk/cj-sdk\";\nimport { CjData } from \"../cj-settings\";\nimport { retrieveAccessToken } from \"./access-token\";\n\ninterface Product {\n description: TypedEditorState<DefaultNodeTypes>;\n pid: string;\n title: string;\n source: \"manual\" | \"cj\";\n variants?: Array<{\n gallery?: (string | number)[];\n imageUrl?: string;\n options?: Array<{ option: string; value: string }>;\n price?: number;\n vid: string;\n }>;\n}\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nasync function mapMockProductToSchema({\n product,\n payload,\n shopId,\n}: {\n product: ProductDetails;\n payload: BasePayload;\n shopId?: string;\n}) {\n const variants: Product[\"variants\"] = [];\n\n for (const variant of product.variants || []) {\n // let imageData;\n // const filename = variant.variantImage?.split(\"/\").pop();\n // const alt = filename?.split(\".\")[0];\n // try {\n // imageData = await payload.create({\n // collection: \"media\",\n // data: {\n // alt,\n // filename,\n // thumbnailURL: variant.variantImage,\n // url: variant.variantImage,\n // width: 1024,\n // shop: shopId,\n // },\n // });\n // } catch (error) {\n // console.error(\"Error creating media:\", error);\n // }\n\n // const imageId = imageData?.id;\n\n variants.push({\n imageUrl: variant.variantImage,\n options: variant.variantKey?.split(\"-\").map((key, index) => ({\n option: index === 0 ? \"Color\" : \"Size\",\n value: key,\n })),\n price: Number(\n new decimal(variant.variantSellPrice || 0).toNumber().toFixed(2)\n ),\n vid: variant.vid,\n });\n }\n\n const cleanHtml = product.description?.replace(/<img[^>]*>/g, \"\");\n\n return {\n description: convertHTMLToLexical({\n editorConfig: await editorConfigFactory.default({\n config: payload.config, // Your Payload Config\n }),\n html: cleanHtml || \"<p></p>\",\n JSDOM, // Pass in the JSDOM import; it's not bundled to keep package size small\n }),\n source: \"cj\" as any,\n pid: product.pid,\n title: product.productNameEn,\n variants,\n };\n}\n\nconst findProductById = async (productId: string, accessToken: string) => {\n const sdk = cjSdk({ accessToken });\n const result = await sdk.products.getProductDetails({\n pid: productId,\n });\n\n return result.data;\n};\n\nconst createOrUpdateProduct = async ({\n product,\n payload,\n shopId,\n}: {\n product: Omit<Product, \"createdAt\" | \"id\" | \"updatedAt\">;\n payload: BasePayload;\n shopId?: string;\n}) => {\n const { totalDocs } = await payload.count({\n collection: \"products\" as any,\n where: {\n pid: {\n equals: product.pid,\n },\n },\n });\n\n if (totalDocs === 0) {\n return payload.create({\n collection: \"products\" as any,\n data: {\n ...product,\n shop: shopId,\n } as any,\n });\n }\n};\n\nexport const syncProducts = async ({\n productIds,\n payload,\n shopId,\n data,\n}: {\n productIds: string[];\n payload: BasePayload;\n shopId?: string;\n data: Partial<CjData>;\n}) => {\n const accessToken = await retrieveAccessToken(data);\n\n const fetchedProducts: ProductDetails[] = [];\n\n for (const productId of productIds) {\n const product = await findProductById(productId, accessToken);\n if (product) {\n fetchedProducts.push(product);\n }\n await delay(1010); // throttle CJ API requests\n }\n\n // Wait for all async mapping to resolve\n const mappedProducts: Product[] = await Promise.all(\n fetchedProducts.map((product) =>\n mapMockProductToSchema({ product, payload, shopId })\n )\n );\n\n // Create or update each mapped product\n await Promise.all(\n mappedProducts.map((product) =>\n createOrUpdateProduct({ product, payload, shopId })\n )\n );\n\n return fetchedProducts;\n};\n"],"names":["convertHTMLToLexical","editorConfigFactory","decimal","JSDOM","cjSdk","retrieveAccessToken","delay","ms","Promise","resolve","setTimeout","mapMockProductToSchema","product","payload","shopId","variants","variant","push","imageUrl","variantImage","options","variantKey","split","map","key","index","option","value","price","Number","variantSellPrice","toNumber","toFixed","vid","cleanHtml","description","replace","editorConfig","default","config","html","source","pid","title","productNameEn","findProductById","productId","accessToken","sdk","result","products","getProductDetails","data","createOrUpdateProduct","totalDocs","count","collection","where","equals","create","shop","syncProducts","productIds","fetchedProducts","mappedProducts","all"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/service/sync-products.ts"],"sourcesContent":["import type {\n DefaultNodeTypes,\n TypedEditorState,\n} from \"@payloadcms/richtext-lexical\";\nimport type { BasePayload } from \"payload\";\n\nimport {\n convertHTMLToLexical,\n editorConfigFactory,\n} from \"@payloadcms/richtext-lexical\";\nimport decimal from \"decimal.js\";\nimport { JSDOM } from \"jsdom\";\n\nimport type { ProductDetails } from \"../sdk/products/product-types\";\n\nimport { cjSdk } from \"../sdk/cj-sdk\";\nimport { CjData } from \"../cj-settings\";\nimport { retrieveAccessToken } from \"./access-token\";\n\ninterface Product {\n description: TypedEditorState<DefaultNodeTypes>;\n pid: string;\n title: string;\n source: \"manual\" | \"cj\";\n variants?: Array<{\n gallery?: (string | number)[];\n imageUrl?: string;\n options?: Array<{ option: string; value: string }>;\n price?: number;\n vid: string;\n }>;\n}\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\nconst upsertImage = async ({\n payload,\n imageUrl,\n filename,\n alt,\n shopId,\n}: {\n payload: BasePayload;\n imageUrl: string;\n filename: string;\n alt: string;\n shopId?: string;\n}) => {\n const imageData = await payload.find({\n collection: \"media\",\n where: {\n filename: {\n equals: filename,\n },\n shop: {\n equals: shopId,\n },\n },\n limit: 1,\n });\n if (imageData.totalDocs === 0) {\n return payload.create({\n collection: \"media\",\n data: {\n alt,\n filename,\n thumbnailURL: imageUrl,\n url: imageUrl,\n shop: shopId,\n },\n });\n }\n return imageData.docs[0];\n};\n\nasync function mapMockProductToSchema({\n product,\n payload,\n shopId,\n}: {\n product: ProductDetails;\n payload: BasePayload;\n shopId?: string;\n}) {\n const variants: Product[\"variants\"] = [];\n\n for (const variant of product.variants || []) {\n const filename = variant?.variantImage?.split(\"/\").pop();\n if (!filename || !variant.variantImage) {\n continue;\n }\n const alt = filename.split(\".\")[0];\n const imageUrl = variant.variantImage;\n const imageData = await upsertImage({\n payload,\n imageUrl,\n filename,\n alt,\n shopId,\n });\n\n const imageId = imageData.id;\n\n variants.push({\n gallery: [imageId],\n options: variant.variantKey?.split(\"-\").map((key, index) => ({\n option: index === 0 ? \"Color\" : \"Size\",\n value: key,\n })),\n price: Number(\n new decimal(variant.variantSellPrice || 0).toNumber().toFixed(2)\n ),\n vid: variant.vid,\n });\n }\n\n const cleanHtml = product.description?.replace(/<img[^>]*>/g, \"\");\n\n return {\n description: convertHTMLToLexical({\n editorConfig: await editorConfigFactory.default({\n config: payload.config, // Your Payload Config\n }),\n html: cleanHtml || \"<p></p>\",\n JSDOM, // Pass in the JSDOM import; it's not bundled to keep package size small\n }),\n source: \"cj\" as any,\n pid: product.pid,\n title: product.productNameEn,\n variants,\n };\n}\n\nconst findProductById = async (productId: string, accessToken: string) => {\n const sdk = cjSdk({ accessToken });\n const result = await sdk.products.getProductDetails({\n pid: productId,\n });\n\n return result.data;\n};\n\nconst createOrUpdateProduct = async ({\n product,\n payload,\n shopId,\n}: {\n product: Omit<Product, \"createdAt\" | \"id\" | \"updatedAt\">;\n payload: BasePayload;\n shopId?: string;\n}) => {\n const { totalDocs } = await payload.count({\n collection: \"products\" as any,\n where: {\n pid: {\n equals: product.pid,\n },\n },\n });\n\n if (totalDocs === 0) {\n return payload.create({\n collection: \"products\" as any,\n data: {\n ...product,\n shop: shopId,\n } as any,\n });\n }\n};\n\nexport const syncProducts = async ({\n productIds,\n payload,\n shopId,\n data,\n}: {\n productIds: string[];\n payload: BasePayload;\n shopId?: string;\n data: Partial<CjData>;\n}) => {\n const accessToken = await retrieveAccessToken(data);\n\n const fetchedProducts: ProductDetails[] = [];\n\n for (const productId of productIds) {\n const product = await findProductById(productId, accessToken);\n if (product) {\n fetchedProducts.push(product);\n }\n await delay(1010); // throttle CJ API requests\n }\n\n // Wait for all async mapping to resolve\n const mappedProducts: Product[] = await Promise.all(\n fetchedProducts.map((product) =>\n mapMockProductToSchema({ product, payload, shopId })\n )\n );\n\n // Create or update each mapped product\n await Promise.all(\n mappedProducts.map((product) =>\n createOrUpdateProduct({ product, payload, shopId })\n )\n );\n\n return fetchedProducts;\n};\n"],"names":["convertHTMLToLexical","editorConfigFactory","decimal","JSDOM","cjSdk","retrieveAccessToken","delay","ms","Promise","resolve","setTimeout","upsertImage","payload","imageUrl","filename","alt","shopId","imageData","find","collection","where","equals","shop","limit","totalDocs","create","data","thumbnailURL","url","docs","mapMockProductToSchema","product","variants","variant","variantImage","split","pop","imageId","id","push","gallery","options","variantKey","map","key","index","option","value","price","Number","variantSellPrice","toNumber","toFixed","vid","cleanHtml","description","replace","editorConfig","default","config","html","source","pid","title","productNameEn","findProductById","productId","accessToken","sdk","result","products","getProductDetails","createOrUpdateProduct","count","syncProducts","productIds","fetchedProducts","mappedProducts","all"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shopnex/cj-plugin",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "A blank template to get started with Payload 3.0",
5
5
  "type": "module",
6
6
  "exports": {