Socket
Socket
Sign inDemoInstall

@webassemblyjs/ast

Package Overview
Dependencies
Maintainers
1
Versions
86
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@webassemblyjs/ast - npm Package Compare versions

Comparing version 1.5.2 to 1.5.3

lib/node-helpers.js

36

lib/definitions.js

@@ -143,6 +143,3 @@ var definitions = {};

});
defineType("Instruction", {
// TODO: ideally the naming of this type would be consistent across AST / Flow
astTypeName: "Instr",
flowTypeName: "GenericInstruction",
defineType("Instr", {
unionType: ["Expression", "Instruction"],

@@ -153,25 +150,4 @@ fields: {

},
args: {
array: true,
type: "Expression",
// TODO: should this be an optional property?
default: "[]"
},
namedArgs: {
object: {
optional: true,
type: "Object",
// TODO: should this be an optional property?
default: "{}"
}
}
});
defineType("ObjectInstruction", {
// TODO: ideally the naming of this type would be consistent across AST / Flow
astTypeName: "Instr",
unionType: ["Expression", "Instruction"],
fields: {
id: {
type: "string"
},
object: {
type: "Valtype"

@@ -181,11 +157,7 @@ },

array: true,
type: "Expression",
// TODO: should this be an optional property?
default: "[]"
type: "Expression"
},
namedArgs: {
optional: true,
type: "Object",
// TODO: should this be an optional property?
default: "{}"
type: "Object"
}

@@ -192,0 +164,0 @@ }

@@ -6,257 +6,74 @@ "use strict";

});
exports.signatureForOpcode = signatureForOpcode;
exports.numberLiteral = numberLiteral;
exports.getUniqueNameGenerator = getUniqueNameGenerator;
exports.withLoc = withLoc;
exports.withRaw = withRaw;
exports.funcParam = funcParam;
exports.indexLiteral = indexLiteral;
exports.memIndexLiteral = memIndexLiteral;
exports.isAnonymous = isAnonymous;
Object.defineProperty(exports, "signatures", {
var _exportNames = {
numberLiteralFromRaw: true,
withLoc: true,
withRaw: true,
funcParam: true,
indexLiteral: true,
memIndexLiteral: true,
instruction: true,
objectInstruction: true,
traverse: true,
traverseWithHooks: true,
signatures: true,
getSectionMetadata: true,
sortSectionMetadata: true,
orderedInsertNode: true,
assertHasLoc: true,
getEndOfSection: true,
shiftSection: true,
shiftLoc: true,
isAnonymous: true,
getUniqueNameGenerator: true,
signatureForOpcode: true,
cloneNode: true
};
Object.defineProperty(exports, "numberLiteralFromRaw", {
enumerable: true,
get: function get() {
return _signatures.signatures;
return _nodeHelpers.numberLiteralFromRaw;
}
});
Object.defineProperty(exports, "module", {
Object.defineProperty(exports, "withLoc", {
enumerable: true,
get: function get() {
return _nodes.module;
return _nodeHelpers.withLoc;
}
});
Object.defineProperty(exports, "moduleMetadata", {
Object.defineProperty(exports, "withRaw", {
enumerable: true,
get: function get() {
return _nodes.moduleMetadata;
return _nodeHelpers.withRaw;
}
});
Object.defineProperty(exports, "functionNameMetadata", {
Object.defineProperty(exports, "funcParam", {
enumerable: true,
get: function get() {
return _nodes.functionNameMetadata;
return _nodeHelpers.funcParam;
}
});
Object.defineProperty(exports, "moduleNameMetadata", {
Object.defineProperty(exports, "indexLiteral", {
enumerable: true,
get: function get() {
return _nodes.moduleNameMetadata;
return _nodeHelpers.indexLiteral;
}
});
Object.defineProperty(exports, "localNameMetadata", {
Object.defineProperty(exports, "memIndexLiteral", {
enumerable: true,
get: function get() {
return _nodes.localNameMetadata;
return _nodeHelpers.memIndexLiteral;
}
});
Object.defineProperty(exports, "quoteModule", {
enumerable: true,
get: function get() {
return _nodes.quoteModule;
}
});
Object.defineProperty(exports, "binaryModule", {
enumerable: true,
get: function get() {
return _nodes.binaryModule;
}
});
Object.defineProperty(exports, "sectionMetadata", {
enumerable: true,
get: function get() {
return _nodes.sectionMetadata;
}
});
Object.defineProperty(exports, "loopInstruction", {
enumerable: true,
get: function get() {
return _nodes.loopInstruction;
}
});
Object.defineProperty(exports, "instruction", {
enumerable: true,
get: function get() {
return _nodes.instruction;
return _nodeHelpers.instruction;
}
});
Object.defineProperty(exports, "ifInstruction", {
enumerable: true,
get: function get() {
return _nodes.ifInstruction;
}
});
Object.defineProperty(exports, "longNumberLiteral", {
enumerable: true,
get: function get() {
return _nodes.longNumberLiteral;
}
});
Object.defineProperty(exports, "stringLiteral", {
enumerable: true,
get: function get() {
return _nodes.stringLiteral;
}
});
Object.defineProperty(exports, "floatLiteral", {
enumerable: true,
get: function get() {
return _nodes.floatLiteral;
}
});
Object.defineProperty(exports, "indexInFuncSection", {
enumerable: true,
get: function get() {
return _nodes.indexInFuncSection;
}
});
Object.defineProperty(exports, "elem", {
enumerable: true,
get: function get() {
return _nodes.elem;
}
});
Object.defineProperty(exports, "start", {
enumerable: true,
get: function get() {
return _nodes.start;
}
});
Object.defineProperty(exports, "typeInstruction", {
enumerable: true,
get: function get() {
return _nodes.typeInstruction;
}
});
Object.defineProperty(exports, "leadingComment", {
enumerable: true,
get: function get() {
return _nodes.leadingComment;
}
});
Object.defineProperty(exports, "blockComment", {
enumerable: true,
get: function get() {
return _nodes.blockComment;
}
});
Object.defineProperty(exports, "globalType", {
enumerable: true,
get: function get() {
return _nodes.globalType;
}
});
Object.defineProperty(exports, "global", {
enumerable: true,
get: function get() {
return _nodes.global;
}
});
Object.defineProperty(exports, "data", {
enumerable: true,
get: function get() {
return _nodes.data;
}
});
Object.defineProperty(exports, "memory", {
enumerable: true,
get: function get() {
return _nodes.memory;
}
});
Object.defineProperty(exports, "table", {
enumerable: true,
get: function get() {
return _nodes.table;
}
});
Object.defineProperty(exports, "moduleImport", {
enumerable: true,
get: function get() {
return _nodes.moduleImport;
}
});
Object.defineProperty(exports, "program", {
enumerable: true,
get: function get() {
return _nodes.program;
}
});
Object.defineProperty(exports, "callInstruction", {
enumerable: true,
get: function get() {
return _nodes.callInstruction;
}
});
Object.defineProperty(exports, "blockInstruction", {
enumerable: true,
get: function get() {
return _nodes.blockInstruction;
}
});
Object.defineProperty(exports, "identifier", {
enumerable: true,
get: function get() {
return _nodes.identifier;
}
});
Object.defineProperty(exports, "byteArray", {
enumerable: true,
get: function get() {
return _nodes.byteArray;
}
});
Object.defineProperty(exports, "moduleExport", {
enumerable: true,
get: function get() {
return _nodes.moduleExport;
}
});
Object.defineProperty(exports, "moduleExportDescr", {
enumerable: true,
get: function get() {
return _nodes.moduleExportDescr;
}
});
Object.defineProperty(exports, "callIndirectInstruction", {
enumerable: true,
get: function get() {
return _nodes.callIndirectInstruction;
}
});
Object.defineProperty(exports, "signature", {
enumerable: true,
get: function get() {
return _nodes.signature;
}
});
Object.defineProperty(exports, "funcImportDescr", {
enumerable: true,
get: function get() {
return _nodes.funcImportDescr;
}
});
Object.defineProperty(exports, "func", {
enumerable: true,
get: function get() {
return _nodes.func;
}
});
Object.defineProperty(exports, "objectInstruction", {
enumerable: true,
get: function get() {
return _nodes.objectInstruction;
return _nodeHelpers.objectInstruction;
}
});
Object.defineProperty(exports, "valtype", {
enumerable: true,
get: function get() {
return _nodes.valtypeLiteral;
}
});
Object.defineProperty(exports, "limits", {
enumerable: true,
get: function get() {
return _nodes.limit;
}
});
Object.defineProperty(exports, "traverse", {

@@ -274,6 +91,6 @@ enumerable: true,

});
Object.defineProperty(exports, "isInstruction", {
Object.defineProperty(exports, "signatures", {
enumerable: true,
get: function get() {
return _utils.isInstruction;
return _signatures.signatures;
}

@@ -323,2 +140,20 @@ });

});
Object.defineProperty(exports, "isAnonymous", {
enumerable: true,
get: function get() {
return _utils.isAnonymous;
}
});
Object.defineProperty(exports, "getUniqueNameGenerator", {
enumerable: true,
get: function get() {
return _utils.getUniqueNameGenerator;
}
});
Object.defineProperty(exports, "signatureForOpcode", {
enumerable: true,
get: function get() {
return _utils.signatureForOpcode;
}
});
Object.defineProperty(exports, "cloneNode", {

@@ -331,139 +166,23 @@ enumerable: true,

var _signatures = require("./signatures");
var _nodes = require("./nodes");
var _traverse = require("./traverse");
var _utils = require("./utils");
var _clone = require("./clone");
var _require = require("@webassemblyjs/wast-parser/lib/number-literals"),
parse32F = _require.parse32F,
parse64F = _require.parse64F,
parse32I = _require.parse32I,
parse64I = _require.parse64I,
parseU32 = _require.parseU32,
isNanLiteral = _require.isNanLiteral,
isInfLiteral = _require.isInfLiteral;
function signatureForOpcode(object, name) {
var opcodeName = name;
if (object !== undefined && object !== "") {
opcodeName = object + "." + name;
}
var sign = _signatures.signatures[opcodeName];
if (sign == undefined) {
// TODO: Uncomment this when br_table and others has been done
//throw new Error("Invalid opcode: "+opcodeName);
return [object, object];
}
return sign[0];
}
function numberLiteral(rawValue) {
var instructionType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "i32";
var original = rawValue; // Remove numeric separators _
if (typeof rawValue === "string") {
rawValue = rawValue.replace(/_/g, "");
}
if (typeof rawValue === "number") {
return (0, _nodes.numberLiteral)(rawValue, String(original));
} else {
switch (instructionType) {
case "i32":
{
return (0, _nodes.numberLiteral)(parse32I(rawValue), String(original));
}
case "u32":
{
return (0, _nodes.numberLiteral)(parseU32(rawValue), String(original));
}
case "i64":
{
return (0, _nodes.longNumberLiteral)(parse64I(rawValue), String(original));
}
case "f32":
{
return (0, _nodes.floatLiteral)(parse32F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
}
// f64
default:
{
return (0, _nodes.floatLiteral)(parse64F(rawValue), isNanLiteral(rawValue), isInfLiteral(rawValue), String(original));
}
Object.keys(_nodes).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _nodes[key];
}
}
}
});
});
function getUniqueNameGenerator() {
var inc = {};
return function () {
var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
var _nodeHelpers = require("./node-helpers.js");
if (!(prefix in inc)) {
inc[prefix] = 0;
} else {
inc[prefix] = inc[prefix] + 1;
}
var _traverse = require("./traverse");
return prefix + "_" + inc[prefix];
};
}
/**
* Decorators
*/
var _signatures = require("./signatures");
var _utils = require("./utils");
function withLoc(n, end, start) {
var loc = {
start: start,
end: end
};
n.loc = loc;
return n;
}
function withRaw(n, raw) {
// $FlowIgnore
n.raw = raw;
return n;
}
/**
* Import
*/
function funcParam(valtype, id) {
return {
id: id,
valtype: valtype
};
}
function indexLiteral(value) {
// $FlowIgnore
var x = numberLiteral(value, "u32");
return x;
}
function memIndexLiteral(value) {
// $FlowIgnore
var x = numberLiteral(value, "u32");
return x;
}
function isAnonymous(ident) {
return ident.raw === "";
}
var _clone = require("./clone");

@@ -15,4 +15,3 @@ "use strict";

exports.loopInstruction = loopInstruction;
exports.instruction = instruction;
exports.objectInstruction = objectInstruction;
exports.instr = instr;
exports.ifInstruction = ifInstruction;

@@ -48,3 +47,3 @@ exports.stringLiteral = stringLiteral;

exports.func = func;
exports.assertFunc = exports.assertByteArray = exports.assertCallIndirectInstruction = exports.assertCallInstruction = exports.assertBlockInstruction = exports.assertIdentifier = exports.assertProgram = exports.assertSignature = exports.assertLimit = exports.assertModuleExport = exports.assertModuleExportDescr = exports.assertModuleImport = exports.assertFuncImportDescr = exports.assertMemory = exports.assertTable = exports.assertGlobal = exports.assertData = exports.assertBlockComment = exports.assertLeadingComment = exports.assertGlobalType = exports.assertStart = exports.assertTypeInstruction = exports.assertValtypeLiteral = exports.assertIndexInFuncSection = exports.assertElem = exports.assertFloatLiteral = exports.assertLongNumberLiteral = exports.assertNumberLiteral = exports.assertStringLiteral = exports.assertIfInstruction = exports.assertObjectInstruction = exports.assertInstruction = exports.assertLoopInstruction = exports.assertSectionMetadata = exports.assertQuoteModule = exports.assertBinaryModule = exports.assertLocalNameMetadata = exports.assertFunctionNameMetadata = exports.assertModuleNameMetadata = exports.assertModuleMetadata = exports.assertModule = exports.isFunc = exports.isByteArray = exports.isCallIndirectInstruction = exports.isCallInstruction = exports.isBlockInstruction = exports.isIdentifier = exports.isProgram = exports.isSignature = exports.isLimit = exports.isModuleExport = exports.isModuleExportDescr = exports.isModuleImport = exports.isFuncImportDescr = exports.isMemory = exports.isTable = exports.isGlobal = exports.isData = exports.isBlockComment = exports.isLeadingComment = exports.isGlobalType = exports.isStart = exports.isTypeInstruction = exports.isValtypeLiteral = exports.isIndexInFuncSection = exports.isElem = exports.isFloatLiteral = exports.isLongNumberLiteral = exports.isNumberLiteral = exports.isStringLiteral = exports.isIfInstruction = exports.isObjectInstruction = exports.isInstruction = exports.isLoopInstruction = exports.isSectionMetadata = exports.isQuoteModule = exports.isBinaryModule = exports.isLocalNameMetadata = exports.isFunctionNameMetadata = exports.isModuleNameMetadata = exports.isModuleMetadata = exports.isModule = void 0;
exports.assertFunc = exports.assertByteArray = exports.assertCallIndirectInstruction = exports.assertCallInstruction = exports.assertBlockInstruction = exports.assertIdentifier = exports.assertProgram = exports.assertSignature = exports.assertLimit = exports.assertModuleExport = exports.assertModuleExportDescr = exports.assertModuleImport = exports.assertFuncImportDescr = exports.assertMemory = exports.assertTable = exports.assertGlobal = exports.assertData = exports.assertBlockComment = exports.assertLeadingComment = exports.assertGlobalType = exports.assertStart = exports.assertTypeInstruction = exports.assertValtypeLiteral = exports.assertIndexInFuncSection = exports.assertElem = exports.assertFloatLiteral = exports.assertLongNumberLiteral = exports.assertNumberLiteral = exports.assertStringLiteral = exports.assertIfInstruction = exports.assertInstr = exports.assertLoopInstruction = exports.assertSectionMetadata = exports.assertQuoteModule = exports.assertBinaryModule = exports.assertLocalNameMetadata = exports.assertFunctionNameMetadata = exports.assertModuleNameMetadata = exports.assertModuleMetadata = exports.assertModule = exports.isImportDescr = exports.isNumericLiteral = exports.isExpression = exports.isInstruction = exports.isFunc = exports.isByteArray = exports.isCallIndirectInstruction = exports.isCallInstruction = exports.isBlockInstruction = exports.isIdentifier = exports.isProgram = exports.isSignature = exports.isLimit = exports.isModuleExport = exports.isModuleExportDescr = exports.isModuleImport = exports.isFuncImportDescr = exports.isMemory = exports.isTable = exports.isGlobal = exports.isData = exports.isBlockComment = exports.isLeadingComment = exports.isGlobalType = exports.isStart = exports.isTypeInstruction = exports.isValtypeLiteral = exports.isIndexInFuncSection = exports.isElem = exports.isFloatLiteral = exports.isLongNumberLiteral = exports.isNumberLiteral = exports.isStringLiteral = exports.isIfInstruction = exports.isInstr = exports.isLoopInstruction = exports.isSectionMetadata = exports.isQuoteModule = exports.isBinaryModule = exports.isLocalNameMetadata = exports.isFunctionNameMetadata = exports.isModuleNameMetadata = exports.isModuleMetadata = exports.isModule = void 0;

@@ -204,5 +203,3 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }

function instruction(id) {
var args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var namedArgs = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
function instr(id, object, args, namedArgs) {
assert(typeof id === "string");

@@ -216,22 +213,7 @@ assert(_typeof(args) === "object" && typeof args.length !== "undefined");

if (Object.keys(namedArgs).length !== 0) {
node.namedArgs = namedArgs;
if (typeof object !== "undefined") {
node.object = object;
}
return node;
}
function objectInstruction(id, object) {
var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
var namedArgs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
assert(typeof id === "string");
assert(_typeof(args) === "object" && typeof args.length !== "undefined");
var node = {
type: "Instr",
id: id,
object: object,
args: args
};
if (Object.keys(namedArgs).length !== 0) {
if (typeof namedArgs !== "undefined" && Object.keys(namedArgs).length !== 0) {
node.namedArgs = namedArgs;

@@ -637,6 +619,4 @@ }

exports.isLoopInstruction = isLoopInstruction;
var isInstruction = isTypeOf("GenericInstruction");
exports.isInstruction = isInstruction;
var isObjectInstruction = isTypeOf("ObjectInstruction");
exports.isObjectInstruction = isObjectInstruction;
var isInstr = isTypeOf("Instr");
exports.isInstr = isInstr;
var isIfInstruction = isTypeOf("IfInstruction");

@@ -702,2 +682,26 @@ exports.isIfInstruction = isIfInstruction;

exports.isFunc = isFunc;
var isInstruction = function isInstruction(node) {
return isLoopInstruction(node) || isInstr(node) || isIfInstruction(node) || isTypeInstruction(node) || isBlockInstruction(node) || isCallInstruction(node) || isCallIndirectInstruction(node);
};
exports.isInstruction = isInstruction;
var isExpression = function isExpression(node) {
return isInstr(node) || isStringLiteral(node) || isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node) || isValtypeLiteral(node) || isIdentifier(node);
};
exports.isExpression = isExpression;
var isNumericLiteral = function isNumericLiteral(node) {
return isNumberLiteral(node) || isLongNumberLiteral(node) || isFloatLiteral(node);
};
exports.isNumericLiteral = isNumericLiteral;
var isImportDescr = function isImportDescr(node) {
return isGlobalType(node) || isTable(node) || isMemory(node) || isFuncImportDescr(node);
};
exports.isImportDescr = isImportDescr;
var assertModule = assertTypeOf("Module");

@@ -721,6 +725,4 @@ exports.assertModule = assertModule;

exports.assertLoopInstruction = assertLoopInstruction;
var assertInstruction = assertTypeOf("GenericInstruction");
exports.assertInstruction = assertInstruction;
var assertObjectInstruction = assertTypeOf("ObjectInstruction");
exports.assertObjectInstruction = assertObjectInstruction;
var assertInstr = assertTypeOf("Instr");
exports.assertInstr = assertInstr;
var assertIfInstruction = assertTypeOf("IfInstruction");

@@ -727,0 +729,0 @@ exports.assertIfInstruction = assertIfInstruction;

@@ -126,3 +126,13 @@ "use strict";

(0, _index.traverse)(funcNode, {
Instr: function Instr(instrPath) {
Instr: function (_Instr) {
function Instr(_x6) {
return _Instr.apply(this, arguments);
}
Instr.toString = function () {
return _Instr.toString();
};
return Instr;
}(function (instrPath) {
var instrNode = instrPath.node;

@@ -170,5 +180,5 @@

}
},
}),
CallInstruction: function (_CallInstruction) {
function CallInstruction(_x6) {
function CallInstruction(_x7) {
return _CallInstruction.apply(this, arguments);

@@ -175,0 +185,0 @@ }

@@ -6,5 +6,5 @@ "use strict";

});
exports.isAnonymous = isAnonymous;
exports.getSectionMetadata = getSectionMetadata;
exports.sortSectionMetadata = sortSectionMetadata;
exports.isInstruction = isInstruction;
exports.orderedInsertNode = orderedInsertNode;

@@ -15,3 +15,7 @@ exports.assertHasLoc = assertHasLoc;

exports.shiftSection = shiftSection;
exports.signatureForOpcode = signatureForOpcode;
exports.getUniqueNameGenerator = getUniqueNameGenerator;
var _signatures = require("./signatures");
var _traverse = require("./traverse");

@@ -27,2 +31,6 @@

function isAnonymous(ident) {
return ident.raw === "";
}
function getSectionMetadata(ast, name) {

@@ -71,6 +79,2 @@ var section;

function isInstruction(n) {
return n.type === "Instr" || n.type === "CallInstruction" || n.type === "CallIndirectInstruction" || n.type === "BlockInstruction" || n.type === "LoopInstruction" || n.type === "IfInstruction";
}
function orderedInsertNode(m, n) {

@@ -156,2 +160,35 @@ assertHasLoc(n);

});
}
function signatureForOpcode(object, name) {
var opcodeName = name;
if (object !== undefined && object !== "") {
opcodeName = object + "." + name;
}
var sign = _signatures.signatures[opcodeName];
if (sign == undefined) {
// TODO: Uncomment this when br_table and others has been done
//throw new Error("Invalid opcode: "+opcodeName);
return [object, object];
}
return sign[0];
}
function getUniqueNameGenerator() {
var inc = {};
return function () {
var prefix = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "temp";
if (!(prefix in inc)) {
inc[prefix] = 0;
} else {
inc[prefix] = inc[prefix] + 1;
}
return prefix + "_" + inc[prefix];
};
}
{
"name": "@webassemblyjs/ast",
"version": "1.5.2",
"version": "1.5.3",
"description": "AST utils for webassemblyjs",

@@ -14,6 +14,6 @@ "keywords": [

"dependencies": {
"@webassemblyjs/helper-wasm-bytecode": "1.5.2",
"@webassemblyjs/wast-parser": "1.5.2",
"@webassemblyjs/helper-wasm-bytecode": "1.5.3",
"@webassemblyjs/wast-parser": "1.5.3",
"debug": "^3.1.0",
"webassemblyjs": "1.5.2"
"webassemblyjs": "1.5.3"
},

@@ -20,0 +20,0 @@ "repository": {

@@ -48,3 +48,3 @@ # @webassemblyjs/ast

- function `stringLiteral(value)`
- function `numberLiteral(value, raw)`
- function `numberLiteralFromRaw(value, raw)`
- function `longNumberLiteral(value, raw)`

@@ -51,0 +51,0 @@ - function `floatLiteral(value, nan, inf, raw)`

const definitions = require("../src/definitions");
const flatMap = require("array.prototype.flatmap");
const {

@@ -6,3 +7,4 @@ typeSignature,

mapProps,
filterProps
filterProps,
unique
} = require("./util");

@@ -68,3 +70,5 @@

return `
if (Object.keys(${meta.name}).length !== 0) {
if (typeof ${meta.name} !== "undefined" && Object.keys(${
meta.name
}).length !== 0) {
node.${meta.name} = ${meta.name};

@@ -100,3 +104,3 @@ }

const node: ${typeDef.flowTypeName || typeDef.name} = {
type: "${typeDef.astTypeName || typeDef.name}",
type: "${typeDef.name}",
${constants.concat(fields).join(",")}

@@ -143,3 +147,3 @@ }

${params(filterProps(typeDefinition.fields, f => !f.constant))}
): ${typeDefinition.flowTypeName || typeDefinition.name} {
): ${typeDefinition.name} {

@@ -158,6 +162,22 @@ ${assertParams(filterProps(typeDefinition.fields, f => !f.constant))}

export const is${typeDefinition.name} =
isTypeOf("${typeDefinition.flowTypeName || typeDefinition.name}");
isTypeOf("${typeDefinition.name}");
`);
});
// Node union type testers
const unionTypes = unique(
flatMap(mapProps(definitions).filter(d => d.unionType), d => d.unionType)
);
unionTypes.forEach(unionType => {
stdout.write(
`
export const is${unionType} = (node: Node) => ` +
mapProps(definitions)
.filter(d => d.unionType && d.unionType.includes(unionType))
.map(d => `is${d.name}(node) `)
.join("||") +
";\n\n"
);
});
// Node assertion

@@ -167,3 +187,3 @@ iterateProps(definitions, typeDefinition => {

export const assert${typeDefinition.name} =
assertTypeOf("${typeDefinition.flowTypeName || typeDefinition.name}");
assertTypeOf("${typeDefinition.name}");
`);

@@ -170,0 +190,0 @@ });

const definitions = require("../src/definitions");
const flatMap = require("array.prototype.flatmap");
const { typeSignature, mapProps, iterateProps } = require("./util");
const { typeSignature, mapProps, iterateProps, unique } = require("./util");
const stdout = process.stdout;
const unique = items => Array.from(new Set(items));
function params(fields) {

@@ -44,5 +42,5 @@ return mapProps(fields)

iterateProps(definitions, typeDef => {
stdout.write(`type ${typeDef.flowTypeName || typeDef.name} = {
stdout.write(`type ${typeDef.name} = {
...${typeDef.extends || "BaseNode"},
type: "${typeDef.astTypeName || typeDef.name}",
type: "${typeDef.name}",
${params(typeDef.fields)}

@@ -49,0 +47,0 @@ };\n\n`);

@@ -30,2 +30,4 @@ function iterateProps(obj, iterator) {

const unique = items => Array.from(new Set(items));
module.exports = {

@@ -35,3 +37,4 @@ iterateProps,

filterProps,
typeSignature
typeSignature,
unique
};
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc