generateActorSpec.js (1712B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 "use strict"; 6 7 var { Request } = require("resource://devtools/shared/protocol/Request.js"); 8 const { Response } = require("resource://devtools/shared/protocol/Response.js"); 9 var { 10 types, 11 registeredTypes, 12 } = require("resource://devtools/shared/protocol/types.js"); 13 14 /** 15 * Generates an actor specification from an actor description. 16 */ 17 var generateActorSpec = function (actorDesc) { 18 const actorSpec = { 19 typeName: actorDesc.typeName, 20 methods: [], 21 }; 22 23 // Find additional method specifications 24 if (actorDesc.methods) { 25 for (const name in actorDesc.methods) { 26 const methodSpec = actorDesc.methods[name]; 27 const spec = {}; 28 29 spec.name = methodSpec.name || name; 30 spec.request = new Request(spec.name, methodSpec.request || undefined); 31 spec.response = new Response(methodSpec.response || undefined); 32 spec.release = methodSpec.release; 33 spec.oneway = methodSpec.oneway; 34 35 actorSpec.methods.push(spec); 36 } 37 } 38 39 // Find event specifications 40 if (actorDesc.events) { 41 actorSpec.events = new Map(); 42 for (const name in actorDesc.events) { 43 const eventRequest = actorDesc.events[name]; 44 Object.freeze(eventRequest); 45 actorSpec.events.set(name, new Request(name, eventRequest)); 46 } 47 } 48 49 if (!registeredTypes.has(actorSpec.typeName)) { 50 types.addActorType(actorSpec.typeName); 51 } 52 registeredTypes.get(actorSpec.typeName).actorSpec = actorSpec; 53 54 return actorSpec; 55 }; 56 57 exports.generateActorSpec = generateActorSpec;