@arcblock/crawler 1.3.0 → 1.3.1

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.
@@ -1,3 +1,3 @@
1
1
  import { Page } from '@blocklet/puppeteer';
2
2
  import { JobState } from '../store';
3
- export declare function createCarbonImage(page: Page, params?: JobState): Promise<Buffer<ArrayBuffer>>;
3
+ export declare function createCarbonImage(page: Page, params?: JobState): Promise<Buffer<ArrayBufferLike>>;
@@ -11,23 +11,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.createCarbonImage = createCarbonImage;
13
13
  const config_1 = require("../config");
14
- // TODO expose local version of dom-to-image
15
- const DOM_TO_IMAGE_URL = 'https://unpkg.com/dom-to-image@2.6.0/dist/dom-to-image.min.js';
16
14
  function createCarbonImage(page, params) {
17
15
  return __awaiter(this, void 0, void 0, function* () {
18
16
  try {
19
- yield page.addScriptTag({ url: DOM_TO_IMAGE_URL });
20
17
  yield page.waitForSelector('.export-container', { visible: true, timeout: (params === null || params === void 0 ? void 0 : params.timeout) || 120 });
21
- const targetElement = yield page.$('.export-container');
22
- const format = (params === null || params === void 0 ? void 0 : params.format) || 'png';
23
- const dataUrl = yield page.evaluate((target = document, imageFormat = 'png') => {
24
- const query = new URLSearchParams(document.location.search);
25
- const EXPORT_SIZES_HASH = {
26
- '1x': '1',
27
- '2x': '2',
28
- '4x': '4',
29
- };
30
- const exportSize = EXPORT_SIZES_HASH[query.get('es')] || '2';
18
+ const targetElement = (yield page.$('.export-container'));
19
+ yield page.evaluate((target = document) => {
31
20
  if (!target) {
32
21
  throw new Error('Target element not found');
33
22
  }
@@ -40,44 +29,9 @@ function createCarbonImage(page, params) {
40
29
  });
41
30
  }
42
31
  });
43
- const width = target.offsetWidth * exportSize;
44
- const height = query.get('si') === 'true'
45
- ? target.offsetWidth * exportSize
46
- : target.offsetHeight * exportSize;
47
- const config = {
48
- style: {
49
- transform: `scale(${exportSize})`,
50
- 'transform-origin': 'center',
51
- background: query.get('si') ? query.get('bg') : 'none',
52
- },
53
- filter: (n) => {
54
- if (n.className) {
55
- return String(n.className).indexOf('eliminateOnRender') < 0;
56
- }
57
- return true;
58
- },
59
- width,
60
- height,
61
- };
62
- switch (imageFormat) {
63
- case 'jpeg':
64
- // @ts-ignore: domtoimage is injected by addScriptTag
65
- return domtoimage.toJpeg(target, config);
66
- case 'webp':
67
- // dom-to-image doesn't support webp directly, fall back to png
68
- // @ts-ignore: domtoimage is injected by addScriptTag
69
- return domtoimage.toPng(target, config);
70
- case 'png':
71
- default:
72
- // @ts-ignore: domtoimage is injected by addScriptTag
73
- return domtoimage.toPng(target, config);
74
- }
75
- }, targetElement, format);
76
- const base64Data = dataUrl.split(',')[1];
77
- if (!base64Data) {
78
- throw new Error('Failed to extract base64 data from image');
79
- }
80
- return Buffer.from(base64Data, 'base64');
32
+ }, targetElement);
33
+ const buffer = yield targetElement.screenshot({ type: (params === null || params === void 0 ? void 0 : params.format) || 'webp', quality: (params === null || params === void 0 ? void 0 : params.quality) || 100 });
34
+ return buffer;
81
35
  }
82
36
  catch (e) {
83
37
  config_1.logger.error('failed to crawl from carbon', { error: e });
@@ -1,3 +1,3 @@
1
1
  import { Page } from '@blocklet/puppeteer';
2
2
  import { JobState } from '../store';
3
- export declare function createCarbonImage(page: Page, params?: JobState): Promise<Buffer<ArrayBuffer>>;
3
+ export declare function createCarbonImage(page: Page, params?: JobState): Promise<Buffer<ArrayBufferLike>>;
@@ -8,23 +8,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  });
9
9
  };
10
10
  import { logger } from '../config';
11
- // TODO expose local version of dom-to-image
12
- const DOM_TO_IMAGE_URL = 'https://unpkg.com/dom-to-image@2.6.0/dist/dom-to-image.min.js';
13
11
  export function createCarbonImage(page, params) {
14
12
  return __awaiter(this, void 0, void 0, function* () {
15
13
  try {
16
- yield page.addScriptTag({ url: DOM_TO_IMAGE_URL });
17
14
  yield page.waitForSelector('.export-container', { visible: true, timeout: (params === null || params === void 0 ? void 0 : params.timeout) || 120 });
18
- const targetElement = yield page.$('.export-container');
19
- const format = (params === null || params === void 0 ? void 0 : params.format) || 'png';
20
- const dataUrl = yield page.evaluate((target = document, imageFormat = 'png') => {
21
- const query = new URLSearchParams(document.location.search);
22
- const EXPORT_SIZES_HASH = {
23
- '1x': '1',
24
- '2x': '2',
25
- '4x': '4',
26
- };
27
- const exportSize = EXPORT_SIZES_HASH[query.get('es')] || '2';
15
+ const targetElement = (yield page.$('.export-container'));
16
+ yield page.evaluate((target = document) => {
28
17
  if (!target) {
29
18
  throw new Error('Target element not found');
30
19
  }
@@ -37,44 +26,9 @@ export function createCarbonImage(page, params) {
37
26
  });
38
27
  }
39
28
  });
40
- const width = target.offsetWidth * exportSize;
41
- const height = query.get('si') === 'true'
42
- ? target.offsetWidth * exportSize
43
- : target.offsetHeight * exportSize;
44
- const config = {
45
- style: {
46
- transform: `scale(${exportSize})`,
47
- 'transform-origin': 'center',
48
- background: query.get('si') ? query.get('bg') : 'none',
49
- },
50
- filter: (n) => {
51
- if (n.className) {
52
- return String(n.className).indexOf('eliminateOnRender') < 0;
53
- }
54
- return true;
55
- },
56
- width,
57
- height,
58
- };
59
- switch (imageFormat) {
60
- case 'jpeg':
61
- // @ts-ignore: domtoimage is injected by addScriptTag
62
- return domtoimage.toJpeg(target, config);
63
- case 'webp':
64
- // dom-to-image doesn't support webp directly, fall back to png
65
- // @ts-ignore: domtoimage is injected by addScriptTag
66
- return domtoimage.toPng(target, config);
67
- case 'png':
68
- default:
69
- // @ts-ignore: domtoimage is injected by addScriptTag
70
- return domtoimage.toPng(target, config);
71
- }
72
- }, targetElement, format);
73
- const base64Data = dataUrl.split(',')[1];
74
- if (!base64Data) {
75
- throw new Error('Failed to extract base64 data from image');
76
- }
77
- return Buffer.from(base64Data, 'base64');
29
+ }, targetElement);
30
+ const buffer = yield targetElement.screenshot({ type: (params === null || params === void 0 ? void 0 : params.format) || 'webp', quality: (params === null || params === void 0 ? void 0 : params.quality) || 100 });
31
+ return buffer;
78
32
  }
79
33
  catch (e) {
80
34
  logger.error('failed to crawl from carbon', { error: e });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arcblock/crawler",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "main": "lib/cjs/index.js",
5
5
  "module": "lib/esm/index.js",
6
6
  "types": "lib/cjs/index.d.ts",