| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | 'use strict'/*! * Canvas - Image * Copyright (c) 2010 LearnBoost <tj@learnboost.com> * MIT Licensed *//** * Module dependencies. */const bindings = require('./bindings')const Image = module.exports = bindings.Imageconst util = require('util')// Lazily loaded simple-getlet getconst { GetSource, SetSource } = bindingsObject.defineProperty(Image.prototype, 'src', {  /**   * src setter. Valid values:   *  * `data:` URI   *  * Local file path   *  * HTTP or HTTPS URL   *  * Buffer containing image data (i.e. not a `data:` URI stored in a Buffer)   *   * @param {String|Buffer} val filename, buffer, data URI, URL   * @api public   */  set (val) {    if (typeof val === 'string') {      if (/^\s*data:/.test(val)) { // data: URI        const commaI = val.indexOf(',')        // 'base64' must come before the comma        const isBase64 = val.lastIndexOf('base64', commaI) !== -1        const content = val.slice(commaI + 1)        setSource(this, Buffer.from(content, isBase64 ? 'base64' : 'utf8'), val)      } else if (/^\s*https?:\/\//.test(val)) { // remote URL        const onerror = err => {          if (typeof this.onerror === 'function') {            this.onerror(err)          } else {            throw err          }        }        if (!get) get = require('simple-get')        get.concat({          url: val,          headers: { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36' }        }, (err, res, data) => {          if (err) return onerror(err)          if (res.statusCode < 200 || res.statusCode >= 300) {            return onerror(new Error(`Server responded with ${res.statusCode}`))          }          setSource(this, data)        })      } else { // local file path assumed        setSource(this, val)      }    } else if (Buffer.isBuffer(val)) {      setSource(this, val)    }  },  get () {    // TODO https://github.com/Automattic/node-canvas/issues/118    return getSource(this)  },  configurable: true})// TODO || is for Node.js pre-v6.6.0Image.prototype[util.inspect.custom || 'inspect'] = function () {  return '[Image' +    (this.complete ? ':' + this.width + 'x' + this.height : '') +    (this.src ? ' ' + this.src : '') +    (this.complete ? ' complete' : '') +    ']'}function getSource (img) {  return img._originalSource || GetSource.call(img)}function setSource (img, src, origSrc) {  SetSource.call(img, src)  img._originalSource = origSrc}
 |