Skip to content

Upgraded Typescript to 4.9, added basic tests #15

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
node_modules
tmp
.idea
39 changes: 31 additions & 8 deletions dist/cli.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,28 @@
#!/usr/bin/env node
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
Expand All @@ -15,7 +38,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
Expand All @@ -37,11 +60,11 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var yargs = require("yargs");
var yargs = __importStar(require("yargs"));
var parse_idl_1 = require("./parse-idl");
var convert_idl_1 = require("./convert-idl");
var print_ts_1 = require("./print-ts");
var fs = require("fs");
var fs = __importStar(require("fs"));
var fetch_idl_1 = require("./fetch-idl");
var fixes_1 = require("./fixes");
function main() {
Expand Down Expand Up @@ -106,10 +129,10 @@ function convert(options) {
var idlString, idl, ts, tsString;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, fetch_idl_1.fetchIDL(options.input)];
case 0: return [4 /*yield*/, (0, fetch_idl_1.fetchIDL)(options.input)];
case 1:
idlString = _a.sent();
return [4 /*yield*/, parse_idl_1.parseIDL(idlString, {
return [4 /*yield*/, (0, parse_idl_1.parseIDL)(idlString, {
preprocess: function (idl) {
if (options.emscripten) {
idl = fixes_1.fixes.inheritance(idl);
Expand All @@ -120,13 +143,13 @@ function convert(options) {
})];
case 2:
idl = _a.sent();
ts = convert_idl_1.convertIDL(idl, options);
ts = (0, convert_idl_1.convertIDL)(idl, options);
tsString = null;
if (options.emscripten) {
tsString = print_ts_1.printEmscriptenModule(options.module, ts, options.defaultExport);
tsString = (0, print_ts_1.printEmscriptenModule)(options.module, ts, options.defaultExport);
}
else {
tsString = print_ts_1.printTs(ts);
tsString = (0, print_ts_1.printTs)(ts);
}
fs.writeFileSync(options.output, tsString);
return [2 /*return*/];
Expand Down
237 changes: 162 additions & 75 deletions dist/convert-idl.js

Large diffs are not rendered by default.

31 changes: 27 additions & 4 deletions dist/fetch-idl.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,27 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
Expand All @@ -14,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
Expand All @@ -37,14 +60,14 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.fetchIDL = void 0;
var https = require("https");
var fs = require("fs");
var https = __importStar(require("https"));
var fs = __importStar(require("fs"));
var jsdom_1 = require("jsdom");
var idlSelector = [
'pre.idl:not(.extract):not(.example)',
'pre.code code.idl-code',
'pre:not(.extract) code.idl',
'#permission-registry + pre.highlight',
'#permission-registry + pre.highlight', // Permissions
].join(',');
function fetchIDL(uri) {
return __awaiter(this, void 0, void 0, function () {
Expand Down
6 changes: 3 additions & 3 deletions dist/fixes.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ exports.fixes = {
var inheritance = [];
idlString = idlString.replace(/([a-zA-Z0-9]+) implements ([a-zA-Z0-9]+);/gi, function (line, left, right) {
inheritance.push({ left: left, right: right });
return "// " + line;
return "// ".concat(line);
});
inheritance.forEach(function (_a) {
var left = _a.left, right = _a.right;
idlString = idlString.replace(new RegExp("interface " + left + " {"), "interface " + left + ": " + right + " {");
idlString = idlString.replace(new RegExp("interface ".concat(left, " {")), "interface ".concat(left, ": ").concat(right, " {"));
});
return idlString;
},
Expand All @@ -44,7 +44,7 @@ exports.fixes = {
// current solution: use sequence<float> type
return idlString
.replace(/attribute (\w+)\[\]/gi, function (match, group) {
return "attribute FrozenArray<" + group + ">";
return "attribute FrozenArray<".concat(group, ">");
})
.replace(/float\[\]/gi, 'FrozenArray<float>')
.replace(/long\[\]/gi, 'FrozenArray<long>');
Expand Down
1 change: 1 addition & 0 deletions dist/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ export * from './convert-idl';
export * from './print-ts';
export * from './parse-idl';
export * from './fetch-idl';
export * from './types';
7 changes: 6 additions & 1 deletion dist/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
Expand All @@ -14,3 +18,4 @@ __exportStar(require("./convert-idl"), exports);
__exportStar(require("./print-ts"), exports);
__exportStar(require("./parse-idl"), exports);
__exportStar(require("./fetch-idl"), exports);
__exportStar(require("./types"), exports);
27 changes: 25 additions & 2 deletions dist/parse-idl.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,27 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
Expand All @@ -14,7 +37,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
Expand All @@ -37,7 +60,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.parseIDL = void 0;
var webidl2 = require("webidl2");
var webidl2 = __importStar(require("webidl2"));
function parseIDL(idlString, options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
Expand Down
96 changes: 61 additions & 35 deletions dist/print-ts.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,39 @@
"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.printEmscriptenModule = exports.printTs = void 0;
var ts = require("typescript");
var ts = __importStar(require("typescript"));
function printTs(nodes) {
var file = ts.createSourceFile("index.d.ts", '', ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
var printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
Expand All @@ -20,36 +45,36 @@ function printEmscriptenModule(moduleName, nodes, defaultExport) {
if (defaultExport) {
// adds default export
// export default Module;
result.push(ts.createExportAssignment(
/* decorators */ [],
/* modifiers */ [ts.createModifier(ts.SyntaxKind.DefaultKeyword)],
result.push(ts.factory.createExportAssignment(
/* modifiers */ [ts.factory.createModifier(ts.SyntaxKind.DefaultKeyword)],
/* isExportEquals */ false,
/* expression */ ts.createIdentifier(moduleName)));
/* expression */ ts.factory.createIdentifier(moduleName)));
}
// adds module function
// declare function Module<T>(target?: T): Promise<T & typeof Module>;
result.push(ts.createFunctionDeclaration(
/* decorators */ [],
/* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)],
result.push(ts.factory.createFunctionDeclaration(
/* modifiers */ [ts.factory.createModifier(ts.SyntaxKind.DeclareKeyword)],
/* asteriskToken */ undefined,
/* name */ moduleName,
/* typeParameters */ [ts.createTypeParameterDeclaration('T')],
/* typeParameters */ [ts.factory.createTypeParameterDeclaration(undefined, 'T')],
/* parameters */ [
ts.createParameter([], [], undefined, 'target', ts.createToken(ts.SyntaxKind.QuestionToken), ts.createTypeReferenceNode('T', [])),
ts.factory.createParameterDeclaration([], undefined, 'target', ts.factory.createToken(ts.SyntaxKind.QuestionToken), ts.factory.createTypeReferenceNode('T', [])),
],
/* type */ ts.createTypeReferenceNode('Promise', [
ts.createIntersectionTypeNode([ts.createTypeReferenceNode('T', []), ts.createTypeQueryNode(ts.createIdentifier(moduleName))]),
/* type */ ts.factory.createTypeReferenceNode('Promise', [
ts.factory.createIntersectionTypeNode([
ts.factory.createTypeReferenceNode('T', []),
ts.factory.createTypeQueryNode(ts.factory.createIdentifier(moduleName)),
]),
]),
/* body */ undefined));
// adds module declaration with all types
// export declare module Module {
// ...
// }
result.push(ts.createModuleDeclaration(
/* decorators */ [],
/* modifiers */ [ts.createModifier(ts.SyntaxKind.DeclareKeyword)],
/* name */ ts.createIdentifier(moduleName),
/* body */ ts.createModuleBlock(__spreadArrays(emscriptenAdditions(), nodes))));
result.push(ts.factory.createModuleDeclaration(
/* modifiers */ [ts.factory.createModifier(ts.SyntaxKind.DeclareKeyword)],
/* name */ ts.factory.createIdentifier(moduleName),
/* body */ ts.factory.createModuleBlock(__spreadArray(__spreadArray([], emscriptenAdditions(), true), nodes, true))));
return printTs(result);
}
exports.printEmscriptenModule = printEmscriptenModule;
Expand All @@ -58,27 +83,28 @@ function emscriptenAdditions() {
// adds emscripten specific types
//
// function destroy(obj: any): void;
result.push(ts.createFunctionDeclaration(
/* decorators */ [],
result.push(ts.factory.createFunctionDeclaration(
/* modifiers */ [],
/* asteriskToken */ undefined,
/* name */ 'destroy',
/* typeParameters */ [],
/* parameters */ [ts.createParameter([], [], undefined, 'obj', undefined, ts.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword))],
/* type */ ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),
/* parameters */ [
ts.factory.createParameterDeclaration([], undefined, 'obj', undefined, ts.factory.createKeywordTypeNode(ts.SyntaxKind.AnyKeyword)),
],
/* type */ ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword),
/* body */ undefined));
// adds malloc function
//
// function _malloc(size: number): number;
result.push(ts.createFunctionDeclaration(undefined, undefined, undefined, ts.createIdentifier('_malloc'), undefined, [
ts.createParameter(undefined, undefined, undefined, ts.createIdentifier('size'), undefined, ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined),
], ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined));
result.push(ts.factory.createFunctionDeclaration(undefined, undefined, ts.factory.createIdentifier('_malloc'), undefined, [
ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('size'), undefined, ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined),
], ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined));
// adds free function
//
// function _free(size: number): number;
result.push(ts.createFunctionDeclaration(undefined, undefined, undefined, ts.createIdentifier('_free'), undefined, [
ts.createParameter(undefined, undefined, undefined, ts.createIdentifier('ptr'), undefined, ts.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined),
], ts.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), undefined));
result.push(ts.factory.createFunctionDeclaration(undefined, undefined, ts.factory.createIdentifier('_free'), undefined, [
ts.factory.createParameterDeclaration(undefined, undefined, ts.factory.createIdentifier('ptr'), undefined, ts.factory.createKeywordTypeNode(ts.SyntaxKind.NumberKeyword), undefined),
], ts.factory.createKeywordTypeNode(ts.SyntaxKind.VoidKeyword), undefined));
// adds HEAP* properties
var heaps = [
['HEAP8', Int8Array.name],
Expand All @@ -92,8 +118,8 @@ function emscriptenAdditions() {
];
for (var _i = 0, heaps_1 = heaps; _i < heaps_1.length; _i++) {
var _a = heaps_1[_i], name_1 = _a[0], type = _a[1];
result.push(ts.createVariableStatement(undefined, ts.createVariableDeclarationList([
ts.createVariableDeclaration(ts.createIdentifier(name_1), ts.createTypeReferenceNode(ts.createIdentifier(type), undefined), undefined),
result.push(ts.factory.createVariableStatement(undefined, ts.factory.createVariableDeclarationList([
ts.factory.createVariableDeclaration(ts.factory.createIdentifier(name_1), undefined, ts.factory.createTypeReferenceNode(ts.factory.createIdentifier(type), undefined), undefined),
], ts.NodeFlags.Const)));
}
return result;
Expand Down
Loading