61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
"use strict";
 | 
						|
/* eslint-disable no-process-exit */
 | 
						|
const util = require("util");
 | 
						|
const { JSDOM } = require("../../../..");
 | 
						|
const { READY_STATES } = require("./xhr-utils");
 | 
						|
const idlUtils = require("../generated/utils");
 | 
						|
const tough = require("tough-cookie");
 | 
						|
 | 
						|
const dom = new JSDOM();
 | 
						|
const xhr = new dom.window.XMLHttpRequest();
 | 
						|
const xhrImpl = idlUtils.implForWrapper(xhr);
 | 
						|
 | 
						|
const chunks = [];
 | 
						|
 | 
						|
process.stdin.on("data", chunk => {
 | 
						|
  chunks.push(chunk);
 | 
						|
});
 | 
						|
 | 
						|
process.stdin.on("end", () => {
 | 
						|
  const buffer = Buffer.concat(chunks);
 | 
						|
 | 
						|
  const flag = JSON.parse(buffer.toString());
 | 
						|
  if (flag.body && flag.body.type === "Buffer" && flag.body.data) {
 | 
						|
    flag.body = Buffer.from(flag.body.data);
 | 
						|
  }
 | 
						|
  if (flag.cookieJar) {
 | 
						|
    flag.cookieJar = tough.CookieJar.fromJSON(flag.cookieJar);
 | 
						|
  }
 | 
						|
 | 
						|
  flag.synchronous = false;
 | 
						|
  Object.assign(xhrImpl.flag, flag);
 | 
						|
  const { properties } = xhrImpl;
 | 
						|
  xhrImpl.readyState = READY_STATES.OPENED;
 | 
						|
  try {
 | 
						|
    xhr.addEventListener("loadend", () => {
 | 
						|
      if (properties.error) {
 | 
						|
        properties.error = properties.error.stack || util.inspect(properties.error);
 | 
						|
      }
 | 
						|
      process.stdout.write(JSON.stringify({
 | 
						|
        responseURL: xhrImpl.responseURL,
 | 
						|
        status: xhrImpl.status,
 | 
						|
        statusText: xhrImpl.statusText,
 | 
						|
        properties
 | 
						|
      }), () => {
 | 
						|
        process.exit(0);
 | 
						|
      });
 | 
						|
    }, false);
 | 
						|
    xhr.send(flag.body);
 | 
						|
  } catch (error) {
 | 
						|
    properties.error += error.stack || util.inspect(error);
 | 
						|
    process.stdout.write(JSON.stringify({
 | 
						|
      responseURL: xhrImpl.responseURL,
 | 
						|
      status: xhrImpl.status,
 | 
						|
      statusText: xhrImpl.statusText,
 | 
						|
      properties
 | 
						|
    }), () => {
 | 
						|
      process.exit(0);
 | 
						|
    });
 | 
						|
  }
 | 
						|
});
 |