diff --git a/Cargo.toml b/Cargo.toml index b19cde12..ceba7f6f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -86,7 +86,6 @@ members = [ "examples/without-a-bundler-no-modules", "tests/no-std", ] -exclude = ['crates/typescript'] [patch.crates-io] wasm-bindgen = { path = '.' } diff --git a/crates/typescript/Cargo.toml b/crates/typescript/Cargo.toml deleted file mode 100644 index 2c4bd337..00000000 --- a/crates/typescript/Cargo.toml +++ /dev/null @@ -1,15 +0,0 @@ -[package] -name = "wasm-bindgen-typescript" -version = "0.1.0" -authors = ["Santiago Pastorino "] - -[dependencies] -serde = "1.0" -serde_derive = "1.0" -serde_json = "1.0" - -proc-macro2 = "1.0" -quote = "1.0" -syn = { version = "1.0", default-features = false } -wasm-bindgen = { path = "../..", default-features = false } -wasm-bindgen-backend = { path = "../backend", default-features = false } diff --git a/crates/typescript/README.md b/crates/typescript/README.md deleted file mode 100644 index c75a400d..00000000 --- a/crates/typescript/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# TypeScript file - -Copy your TypeScript file over the one in `ts/index.d.ts` - -# Run - -``` -$ npm install -g @microsoft/api-extractor -$ cargo run -``` diff --git a/crates/typescript/api-extractor.json b/crates/typescript/api-extractor.json deleted file mode 100644 index 5c3bb943..00000000 --- a/crates/typescript/api-extractor.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "$schema": "https://dev.office.com/json-schemas/api-extractor/api-extractor.schema.json", - "compiler" : { - "configType": "tsconfig", - "rootFolder": "." - }, - "project": { - "entryPointSourceFile": "ts/index.d.ts" - } -} diff --git a/crates/typescript/package.json b/crates/typescript/package.json deleted file mode 100644 index 194ea04b..00000000 --- a/crates/typescript/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "wasm", - "version": "1.0.0", - "description": "", - "main": "index.js", - "directories": { - "lib": "lib", - "test": "test" - }, - "dependencies": { - "@microsoft/api-extractor": "^5.6.3" - }, - "devDependencies": {}, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "", - "license": "ISC" -} diff --git a/crates/typescript/src/api_extractor.rs b/crates/typescript/src/api_extractor.rs deleted file mode 100644 index 0e1711da..00000000 --- a/crates/typescript/src/api_extractor.rs +++ /dev/null @@ -1,16 +0,0 @@ -use std::process::Command; - -pub(crate) fn run() { - let output = Command::new("api-extractor") - .arg("run") - .output() - .expect("api-extractor not installed?"); - - let out = if output.status.success() { - output.stdout - } else { - output.stderr - }; - - print!("{}", String::from_utf8_lossy(out.as_slice())); -} diff --git a/crates/typescript/src/definitions.rs b/crates/typescript/src/definitions.rs deleted file mode 100644 index 6530946d..00000000 --- a/crates/typescript/src/definitions.rs +++ /dev/null @@ -1,80 +0,0 @@ -use std::collections::HashMap; - -// Public API types for a TypeScript project based on -// https://github.com/Microsoft/web-build-tools/blob/master/apps/api-extractor/src/api/api-json.schema.json -// -// There are some attributes that are omitted because they are not relevant to -// us. -#[derive(Serialize, Deserialize, Debug)] -pub(crate) struct TsPackage { - kind: String, - name: String, - pub(crate) exports: HashMap, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(tag = "kind")] -pub(crate) enum TsExport { - #[serde(rename = "class")] - TsClass { - members: HashMap, - }, - - #[serde(rename = "function")] - TsFunction { - parameters: HashMap, - #[serde(rename = "returnValue")] - return_value: TsReturnValue, - }, - //TODO: implement ... - //{ "$ref": "#/definitions/interfaceApiItem" }, - //{ "$ref": "#/definitions/namespaceApiItem" }, - //{ "$ref": "#/definitions/enumApiItem" }, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(tag = "kind")] -pub(crate) enum TsClassMembers { - #[serde(rename = "property")] - TsProperty { - #[serde(rename = "isStatic")] - is_static: bool, - #[serde(rename = "isReadOnly")] - is_read_only: bool, - #[serde(rename = "type")] - property_type: String, - }, - - #[serde(rename = "constructor")] - TsConstructor { - parameters: HashMap, - }, - - #[serde(rename = "method")] - TsMethod { - #[serde(rename = "accessModifier")] - access_modifier: String, - #[serde(rename = "isStatic")] - is_static: bool, - parameters: HashMap, - #[serde(rename = "returnValue")] - return_value: TsReturnValue, - }, -} - -#[derive(Serialize, Deserialize, Debug)] -pub(crate) struct TsMethodProperty { - name: String, - #[serde(rename = "type")] - pub(crate) property_type: String, - #[serde(rename = "isSpread")] - is_spread: bool, - #[serde(rename = "isOptional")] - is_optional: bool, -} - -#[derive(Serialize, Deserialize, Debug)] -pub(crate) struct TsReturnValue { - #[serde(rename = "type")] - pub(crate) property_type: String, -} diff --git a/crates/typescript/src/lib.rs b/crates/typescript/src/lib.rs deleted file mode 100644 index 0cfd591e..00000000 --- a/crates/typescript/src/lib.rs +++ /dev/null @@ -1,11 +0,0 @@ -extern crate proc_macro2; -extern crate serde; -#[macro_use] -extern crate serde_derive; -extern crate serde_json; -extern crate syn; -extern crate wasm_bindgen_backend as backend; - -pub mod api_extractor; -pub mod definitions; -pub mod parser; diff --git a/crates/typescript/src/main.rs b/crates/typescript/src/main.rs deleted file mode 100644 index 08149936..00000000 --- a/crates/typescript/src/main.rs +++ /dev/null @@ -1,16 +0,0 @@ -extern crate proc_macro2; -extern crate quote; -extern crate wasm_bindgen_typescript; - -use wasm_bindgen_typescript::parser; - -use proc_macro2::TokenStream; -use quote::ToTokens; - -fn main() { - let program = parser::ts_to_program("dist/wasm.api.json"); - - let mut tokens = TokenStream::new(); - program.to_tokens(&mut tokens); - println!("{:#?}", tokens); -} diff --git a/crates/typescript/src/parser.rs b/crates/typescript/src/parser.rs deleted file mode 100644 index 0421e551..00000000 --- a/crates/typescript/src/parser.rs +++ /dev/null @@ -1,134 +0,0 @@ -use std::collections::HashMap; -use std::fs::File; -use std::io::Read; - -use backend; -use backend::ast::{BindgenAttrs, Export, Function}; -use proc_macro2; -use serde_json; -use syn; - -use api_extractor; -use definitions::*; - -pub fn ts_to_program(file_name: &str) -> backend::ast::Program { - api_extractor::run(); - - let ts_package = parse_json(file_name); - - let mut program = backend::ast::Program::default(); - - for (name, export) in ts_package.exports { - match export { - TsExport::TsClass { members } => { - for (member_name, member) in members { - match member { - TsClassMembers::TsProperty { .. } => {} - TsClassMembers::TsConstructor { .. } => {} - TsClassMembers::TsMethod { - parameters, - return_value, - .. - } => { - let function = build_function(member_name, parameters, return_value); - - program.exports.push(Export { - class: Some(syn::Ident::new(&name, proc_macro2::Span::call_site())), - method: true, - mutable: false, - constructor: None, - function, - }); - } - } - } - } - - TsExport::TsFunction { - parameters, - return_value, - } => { - let function = build_function(name, parameters, return_value); - - program.exports.push(Export { - class: None, - method: false, - mutable: false, - constructor: None, - function, - }); - } - } - } - - program -} - -fn parse_json(file_name: &str) -> TsPackage { - let mut file = File::open(file_name).unwrap(); - let mut data = String::new(); - file.read_to_string(&mut data).unwrap(); - - serde_json::from_str(&data).unwrap() -} - -fn build_function( - name: String, - parameters: HashMap, - return_value: TsReturnValue, -) -> Function { - let arguments = parameters - .iter() - .map(|(_name, property)| { - let mut segments = syn::punctuated::Punctuated::new(); - segments.push(syn::PathSegment { - ident: syn::Ident::new(&property.property_type, proc_macro2::Span::call_site()), - arguments: syn::PathArguments::None, - }); - - syn::Type::Path(syn::TypePath { - qself: None, - path: syn::Path { - leading_colon: None, - segments, - }, - }) - }) - .collect::>(); - - let mut ret_segments = syn::punctuated::Punctuated::new(); - ret_segments.push(syn::PathSegment { - ident: syn::Ident::new(&return_value.property_type, proc_macro2::Span::call_site()), - arguments: syn::PathArguments::None, - }); - - let ret = syn::Type::Path(syn::TypePath { - qself: None, - path: syn::Path { - leading_colon: None, - segments: ret_segments, - }, - }); - - let rust_decl = Box::new(syn::FnDecl { - fn_token: Default::default(), - generics: Default::default(), - paren_token: Default::default(), - //TODO investigate if inputs should be taken from arguments - inputs: Default::default(), - variadic: None, - output: syn::ReturnType::Type(Default::default(), Box::new(ret.clone())), - }); - - Function { - name: syn::Ident::new(&name, proc_macro2::Span::call_site()), - arguments, - ret: Some(ret), - opts: BindgenAttrs::default(), - rust_attrs: Vec::new(), - rust_decl, - rust_vis: syn::Visibility::Public(syn::VisPublic { - pub_token: Default::default(), - }), - } -} diff --git a/crates/typescript/tsconfig.json b/crates/typescript/tsconfig.json deleted file mode 100644 index c0737c79..00000000 --- a/crates/typescript/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "version": "2.4.2", - "compilerOptions": { - "lib": ["es5", "es6"], - "target": "es6", - "module": "commonjs", - "moduleResolution": "node", - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "sourceMap": true - }, - "exclude": [ - "node_modules" - ] -}