├── esm ├── index.d.ts ├── wsdl-to-ts.d.ts ├── index.js ├── index.js.map ├── wsdl-to-ts.js.map └── wsdl-to-ts.js ├── .travis.yml ├── .eslintrc.json ├── tslint.json ├── tsconfig.json ├── LICENSE ├── .gitignore ├── package.json ├── README.md ├── lib ├── index.js.map ├── index.js ├── wsdl-to-ts.js.map └── wsdl-to-ts.js ├── src ├── index.ts └── wsdl-to-ts.ts └── test └── index.js /esm/index.d.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | export {}; 3 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | node_js: 4 | - "6" 5 | - "8" 6 | - "10" 7 | env: 8 | global: 9 | - BUILD_TIMEOUT=10000 10 | install: 11 | - npm ci --ignore-scripts 12 | before_install: 13 | - npm install --global npm@latest 14 | script: 15 | - npm run ci -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["eslint:recommended"], 3 | "parserOptions": { 4 | "ecmaVersion": 2016 5 | }, 6 | "globals": { 7 | "require": true, 8 | "Promise": true 9 | }, 10 | "env": { 11 | "es6": true, 12 | "node": true 13 | }, 14 | "rules": { 15 | "arrow-parens": "warn", 16 | "no-console": "off", 17 | "semi": "error" 18 | } 19 | } -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "defaultSeverity": "warn", 3 | "extends": [ 4 | "tslint:recommended" 5 | ], 6 | "jsRules": {}, 7 | "rules": { 8 | "no-namespace":false, 9 | "no-console":false, 10 | "max-classes-per-file":false, 11 | "no-bitwise": false, 12 | "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"], 13 | "max-line-length": false 14 | }, 15 | "rulesDirectory": [] 16 | } 17 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES6", 4 | "module": "CommonJS", 5 | "moduleResolution": "node", 6 | "sourceMap": true, 7 | "emitDecoratorMetadata": true, 8 | "experimentalDecorators": true, 9 | "removeComments": false, 10 | "noImplicitAny": true, 11 | "noEmitOnError": true, 12 | "rootDir": "src", 13 | "outDir": "lib", 14 | "lib": [ 15 | "es6" 16 | ] 17 | }, 18 | "exclude": [ 19 | "node_modules", 20 | "lib", 21 | "esm" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2017-2018 Tim Lundqvist 2 | 3 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 4 | 5 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | # nyc test coverage 21 | .nyc_output 22 | 23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 24 | .grunt 25 | 26 | # Bower dependency directory (https://bower.io/) 27 | bower_components 28 | 29 | # node-waf configuration 30 | .lock-wscript 31 | 32 | # Compiled binary addons (http://nodejs.org/api/addons.html) 33 | build/Release 34 | 35 | # Dependency directories 36 | node_modules/ 37 | jspm_packages/ 38 | 39 | # Typescript v1 declaration files 40 | typings/ 41 | 42 | # Optional npm cache directory 43 | .npm 44 | 45 | # Optional eslint cache 46 | .eslintcache 47 | 48 | # Optional REPL history 49 | .node_repl_history 50 | 51 | # Output of 'npm pack' 52 | *.tgz 53 | 54 | # Yarn Integrity file 55 | .yarn-integrity 56 | 57 | # dotenv environment variables file 58 | .env 59 | 60 | # other 61 | *~ 62 | /test/results 63 | -------------------------------------------------------------------------------- /esm/wsdl-to-ts.d.ts: -------------------------------------------------------------------------------- 1 | import * as soap from "soap"; 2 | export declare const nsEnums: { 3 | [k: string]: boolean; 4 | }; 5 | interface ITwoDown { 6 | [k: string]: { 7 | [k: string]: T; 8 | }; 9 | } 10 | export interface IInterfaceOptions { 11 | quoteProperties?: boolean; 12 | } 13 | export interface ITypedWsdl { 14 | client: soap.Client | null; 15 | files: ITwoDown; 16 | methods: ITwoDown<{ 17 | [k: string]: string; 18 | }>; 19 | types: ITwoDown<{ 20 | [k: string]: string; 21 | }>; 22 | namespaces: ITwoDown<{ 23 | [k: string]: { 24 | [k: string]: string; 25 | }; 26 | }>; 27 | } 28 | export declare class TypeCollector { 29 | readonly ns: string; 30 | readonly registered: { 31 | [k: string]: string; 32 | }; 33 | readonly collected: { 34 | [k: string]: string; 35 | }; 36 | constructor(ns: string); 37 | registerCollected(): this; 38 | } 39 | export declare function wsdl2ts(wsdlUri: string, opts?: IInterfaceOptions): Promise; 40 | export declare function mergeTypedWsdl(a: ITypedWsdl, ...bs: ITypedWsdl[]): ITypedWsdl; 41 | export declare function outputTypedWsdl(a: ITypedWsdl): Array<{ 42 | file: string; 43 | data: string[]; 44 | }>; 45 | export {}; 46 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "wsdl-to-ts", 3 | "version": "0.2.3", 4 | "description": "Build TypeScript typings for SOAP WSDL", 5 | "main": "lib/wsdl-to-ts.js", 6 | "module": "esm/wsdl-to-ts.js", 7 | "types": "esm/wsdl-to-ts.d.ts", 8 | "scripts": { 9 | "test": "node test/index.js", 10 | "build": "npx tsc -p tsconfig.json && npx tsc -p tsconfig.json -d --outDir esm --module es2015 --target es2016", 11 | "ci": "npm run build && npm test" 12 | }, 13 | "bin": { 14 | "wsdl-to-ts": "lib/index.js" 15 | }, 16 | "keywords": [ 17 | "soap", 18 | "typescript", 19 | "wsdl", 20 | "ts" 21 | ], 22 | "author": { 23 | "name": "TimLuq", 24 | "url": "https://github.com/TimLuq" 25 | }, 26 | "license": "ISC", 27 | "devDependencies": { 28 | "@types/bluebird": "^3.5.23", 29 | "@types/minimist": "^1.2.0", 30 | "@types/mkdirp": ">=0.5.1 <1.0.0", 31 | "@types/node": ">=6.0.0 <12.0.0", 32 | "tslint": "^5.11.0", 33 | "typescript": "^2.2.0" 34 | }, 35 | "dependencies": { 36 | "minimist": "^1.2.0", 37 | "mkdirp": ">=0.5.1 <1.0.0", 38 | "soap": ">=0.21.0 <1.0.0" 39 | }, 40 | "bugs": { 41 | "url": "https://github.com/TimLuq/wsdl-to-ts/issues" 42 | }, 43 | "repository": { 44 | "type": "git", 45 | "url": "https://github.com/TimLuq/wsdl-to-ts.git" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # wsdl-to-ts 2 | 3 | 4 | build status 6 | 7 | 8 | npm version 10 | 11 | 12 | license 14 | 15 | 16 | dependency status 18 | 19 | 20 | A CLI tool and library for nodejs to generate TypeScript typings from a WSDL service. 21 | 22 | ## Installation 23 | Installation is done either through [npm](https://npmjs.com) or [yarn](https://yarnpkg.com). 24 | 25 | ### Installation for Command Line usage 26 | 27 | To install CLI tool globally run one of the following command as root or sudo: 28 | ```sh 29 | $ npm install -g wsdl-to-ts 30 | $ yarn global add wsdl-to-ts 31 | ``` 32 | 33 | To install CLI tool for the current user one of these commands may be used (which places working directory at users `$HOME`): 34 | ```sh 35 | $ cd && npm install wsdl-to-ts 36 | $ cd && yarn add wsdl-to-ts 37 | ``` 38 | 39 | ### Installation for Library usage 40 | 41 | To install a library as a dependency to your current npm project you enter your project directory as the current directory and run one of the following commands: 42 | ```sh 43 | $ npm install --save wsdl-to-ts 44 | $ yarn add wsdl-to-ts 45 | ``` 46 | 47 | ## Usage 48 | 49 | If any more documentation is needed for library usage, other than the IDE completions; feel free to open an [issue](https://github.com/TimLuq/wsdl-to-ts/issues). Also take a look at the [type definitions](https://github.com/TimLuq/wsdl-to-ts/blob/master/esm/wsdl-to-ts.d.ts) 50 | 51 | ### Usage for Command Line 52 | 53 | Check version: 54 | ```sh 55 | $ wsdl-to-ts --version 56 | ``` 57 | 58 | Generate typings for a WSDL located on an URI at the default output directory (multiple may be done at the same time by listing more on the command line): 59 | ```sh 60 | $ cd /tmp 61 | $ wsdl-to-ts "https://www.w3schools.com/xml/tempconvert.asmx?WSDL" 62 | $ ls wsdl/**/* 63 | wsdl/TempConvert/TempConvertSoap12.ts wsdl/TempConvert/TempConvertSoap.ts 64 | ``` 65 | 66 | The output directory may be changed to any directory using the `--outdir` flag. 67 | ```sh 68 | $ wsdl-to-ts --outdir="./some/other/dir" "https://www.w3schools.com/xml/tempconvert.asmx?WSDL" 69 | ``` 70 | 71 | #### CLI flags 72 | * `--version` - Display which version you are currently executing. 73 | * `--outdir=SOME/DIR/PATH` - Sets the path which will contain the type definitions. 74 | * `--tslint=RULE0,RULE1,RULE2` - Enable specified rules in all generated files. 75 | * `--tslint=false` - Disables tslint in all generated files. 76 | * `--tslint-disable=RULE0,RULE1,RULE2` - Disable specified rules in all generated files. 77 | -------------------------------------------------------------------------------- /lib/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /esm/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | import { rename, writeFile } from "fs"; 4 | import * as minimist from "minimist"; 5 | import * as mkdirp from "mkdirp"; 6 | import { mergeTypedWsdl, outputTypedWsdl, wsdl2ts } from "./wsdl-to-ts"; 7 | const opts = {}; 8 | const config = { outdir: "./wsdl", files: [], tslintDisable: ["max-line-length", "no-empty-interface"], tslintEnable: [] }; 9 | const args = minimist(process.argv.slice(2)); 10 | if (args.help) { 11 | // TODO 12 | } 13 | if (args.version) { 14 | /* tslint:disable:no-var-requires */ 15 | const pack = require("../package.json"); 16 | console.log("%s %s", "wsdl-to-ts", pack.version); 17 | process.exit(0); 18 | throw new Error("Exited"); 19 | } 20 | if (args.hasOwnProperty("tslint")) { 21 | if (args.tslint === "true") { 22 | config.tslintEnable = null; 23 | } 24 | else if (args.tslint === "false" || args.tslint === "disable") { 25 | config.tslintDisable = null; 26 | } 27 | else { 28 | config.tslintEnable = args.tslint ? args.tslint.split(",") : null; 29 | } 30 | } 31 | if (args.hasOwnProperty("tslint-disable")) { 32 | config.tslintDisable = args["tslint-disable"] ? args["tslint-disable"].split(",") : null; 33 | } 34 | if (args.outdir || args.outDir) { 35 | config.outdir = args.outdir || args.outDir; 36 | } 37 | if (args.hasOwnProperty("quote")) { 38 | if (args.quote === "false" || args.quote === "disable" || args.quote === "0") { 39 | opts.quoteProperties = false; 40 | } 41 | else if (args.quote === "true" || args.quote === "1" || !args.quote) { 42 | opts.quoteProperties = true; 43 | } 44 | } 45 | if (args._) { 46 | config.files.push.apply(config.files, args._); 47 | } 48 | if (config.files.length === 0) { 49 | console.error("No files given"); 50 | process.exit(1); 51 | throw new Error("No files"); 52 | } 53 | function mkdirpp(dir, mode) { 54 | return new Promise((resolve, reject) => { 55 | mkdirp(dir, mode || 0o755, (err, made) => { 56 | if (err) { 57 | reject(err); 58 | } 59 | else { 60 | resolve(made); 61 | } 62 | }); 63 | }); 64 | } 65 | Promise.all(config.files.map((a) => wsdl2ts(a, opts))). 66 | then((xs) => mergeTypedWsdl.apply(undefined, xs)). 67 | then(outputTypedWsdl). 68 | then((xs) => { 69 | return Promise.all(xs.map((x) => { 70 | console.log("-- %s --", x.file); 71 | console.log("%s", x.data.join("\n\n")); 72 | const file = config.outdir + "/" + x.file; 73 | const dir = file.replace(/\/[^/]+$/, ""); 74 | return mkdirpp(dir).then(() => { 75 | return new Promise((resolve, reject) => { 76 | const tsfile = file + ".ts.tmp"; 77 | const fileData = []; 78 | if (config.tslintEnable === null) { 79 | fileData.push("/* tslint:enable */"); 80 | } 81 | if (config.tslintDisable === null) { 82 | fileData.push("/* tslint:disable */"); 83 | } 84 | else if (config.tslintDisable.length !== 0) { 85 | fileData.push("/* tslint:disable:" + config.tslintDisable.join(" ") + " */"); 86 | } 87 | if (config.tslintEnable && config.tslintEnable.length !== 0) { 88 | fileData.push("/* tslint:enable:" + config.tslintEnable.join(" ") + " */"); 89 | } 90 | fileData.push(x.data.join("\n\n")); 91 | fileData.push(""); 92 | writeFile(tsfile, fileData.join("\n"), (err) => { 93 | if (err) { 94 | reject(err); 95 | } 96 | else { 97 | resolve(tsfile); 98 | } 99 | }); 100 | }); 101 | }); 102 | })); 103 | }). 104 | then((files) => Promise.all(files.map((file) => { 105 | return new Promise((resolve, reject) => { 106 | const realFile = file.replace(/\.[^.]+$/, ""); 107 | rename(file, realFile, (err) => { 108 | if (err) { 109 | reject(err); 110 | } 111 | else { 112 | resolve(realFile); 113 | } 114 | }); 115 | }); 116 | }))). 117 | catch((err) => { 118 | console.error(err); 119 | process.exitCode = 3; 120 | }); 121 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /esm/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | Object.defineProperty(exports, "__esModule", { value: true }); 4 | const fs_1 = require("fs"); 5 | const minimist = require("minimist"); 6 | const mkdirp = require("mkdirp"); 7 | const wsdl_to_ts_1 = require("./wsdl-to-ts"); 8 | const opts = {}; 9 | const config = { outdir: "./wsdl", files: [], tslintDisable: ["max-line-length", "no-empty-interface"], tslintEnable: [] }; 10 | const args = minimist(process.argv.slice(2)); 11 | if (args.help) { 12 | // TODO 13 | } 14 | if (args.version) { 15 | /* tslint:disable:no-var-requires */ 16 | const pack = require("../package.json"); 17 | console.log("%s %s", "wsdl-to-ts", pack.version); 18 | process.exit(0); 19 | throw new Error("Exited"); 20 | } 21 | if (args.hasOwnProperty("tslint")) { 22 | if (args.tslint === "true") { 23 | config.tslintEnable = null; 24 | } 25 | else if (args.tslint === "false" || args.tslint === "disable") { 26 | config.tslintDisable = null; 27 | } 28 | else { 29 | config.tslintEnable = args.tslint ? args.tslint.split(",") : null; 30 | } 31 | } 32 | if (args.hasOwnProperty("tslint-disable")) { 33 | config.tslintDisable = args["tslint-disable"] ? args["tslint-disable"].split(",") : null; 34 | } 35 | if (args.outdir || args.outDir) { 36 | config.outdir = args.outdir || args.outDir; 37 | } 38 | if (args.hasOwnProperty("quote")) { 39 | if (args.quote === "false" || args.quote === "disable" || args.quote === "0") { 40 | opts.quoteProperties = false; 41 | } 42 | else if (args.quote === "true" || args.quote === "1" || !args.quote) { 43 | opts.quoteProperties = true; 44 | } 45 | } 46 | if (args._) { 47 | config.files.push.apply(config.files, args._); 48 | } 49 | if (config.files.length === 0) { 50 | console.error("No files given"); 51 | process.exit(1); 52 | throw new Error("No files"); 53 | } 54 | function mkdirpp(dir, mode) { 55 | return new Promise((resolve, reject) => { 56 | mkdirp(dir, mode || 0o755, (err, made) => { 57 | if (err) { 58 | reject(err); 59 | } 60 | else { 61 | resolve(made); 62 | } 63 | }); 64 | }); 65 | } 66 | Promise.all(config.files.map((a) => wsdl_to_ts_1.wsdl2ts(a, opts))). 67 | then((xs) => wsdl_to_ts_1.mergeTypedWsdl.apply(undefined, xs)). 68 | then(wsdl_to_ts_1.outputTypedWsdl). 69 | then((xs) => { 70 | return Promise.all(xs.map((x) => { 71 | console.log("-- %s --", x.file); 72 | console.log("%s", x.data.join("\n\n")); 73 | const file = config.outdir + "/" + x.file; 74 | const dir = file.replace(/\/[^/]+$/, ""); 75 | return mkdirpp(dir).then(() => { 76 | return new Promise((resolve, reject) => { 77 | const tsfile = file + ".ts.tmp"; 78 | const fileData = []; 79 | if (config.tslintEnable === null) { 80 | fileData.push("/* tslint:enable */"); 81 | } 82 | if (config.tslintDisable === null) { 83 | fileData.push("/* tslint:disable */"); 84 | } 85 | else if (config.tslintDisable.length !== 0) { 86 | fileData.push("/* tslint:disable:" + config.tslintDisable.join(" ") + " */"); 87 | } 88 | if (config.tslintEnable && config.tslintEnable.length !== 0) { 89 | fileData.push("/* tslint:enable:" + config.tslintEnable.join(" ") + " */"); 90 | } 91 | fileData.push(x.data.join("\n\n")); 92 | fileData.push(""); 93 | fs_1.writeFile(tsfile, fileData.join("\n"), (err) => { 94 | if (err) { 95 | reject(err); 96 | } 97 | else { 98 | resolve(tsfile); 99 | } 100 | }); 101 | }); 102 | }); 103 | })); 104 | }). 105 | then((files) => Promise.all(files.map((file) => { 106 | return new Promise((resolve, reject) => { 107 | const realFile = file.replace(/\.[^.]+$/, ""); 108 | fs_1.rename(file, realFile, (err) => { 109 | if (err) { 110 | reject(err); 111 | } 112 | else { 113 | resolve(realFile); 114 | } 115 | }); 116 | }); 117 | }))). 118 | catch((err) => { 119 | console.error(err); 120 | process.exitCode = 3; 121 | }); 122 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | import { rename, writeFile } from "fs"; 5 | import * as minimist from "minimist"; 6 | import * as mkdirp from "mkdirp"; 7 | import { IInterfaceOptions, ITypedWsdl, mergeTypedWsdl, outputTypedWsdl, wsdl2ts } from "./wsdl-to-ts"; 8 | 9 | interface IConfigObject { 10 | outdir: string; 11 | files: string[]; 12 | tslintDisable: null | string[]; 13 | tslintEnable: null | string[]; 14 | } 15 | 16 | const opts: IInterfaceOptions = {}; 17 | const config: IConfigObject = { outdir: "./wsdl", files: [], tslintDisable: ["max-line-length", "no-empty-interface"], tslintEnable: [] }; 18 | 19 | const args = minimist(process.argv.slice(2)); 20 | 21 | if (args.help) { 22 | // TODO 23 | } 24 | 25 | if (args.version) { 26 | /* tslint:disable:no-var-requires */ 27 | const pack = require("../package.json"); 28 | console.log("%s %s", "wsdl-to-ts", pack.version); 29 | process.exit(0); 30 | throw new Error("Exited"); 31 | } 32 | 33 | if (args.hasOwnProperty("tslint")) { 34 | if (args.tslint === "true") { 35 | config.tslintEnable = null; 36 | } else if (args.tslint === "false" || args.tslint === "disable") { 37 | config.tslintDisable = null; 38 | } else { 39 | config.tslintEnable = args.tslint ? args.tslint.split(",") : null; 40 | } 41 | } 42 | 43 | if (args.hasOwnProperty("tslint-disable")) { 44 | config.tslintDisable = args["tslint-disable"] ? args["tslint-disable"].split(",") : null; 45 | } 46 | 47 | if (args.outdir || args.outDir) { 48 | config.outdir = args.outdir || args.outDir; 49 | } 50 | 51 | if (args.hasOwnProperty("quote")) { 52 | if (args.quote === "false" || args.quote === "disable" || args.quote === "0") { 53 | opts.quoteProperties = false; 54 | } else if (args.quote === "true" || args.quote === "1" || !args.quote) { 55 | opts.quoteProperties = true; 56 | } 57 | } 58 | 59 | if (args._) { 60 | config.files.push.apply(config.files, args._); 61 | } 62 | 63 | if (config.files.length === 0) { 64 | console.error("No files given"); 65 | process.exit(1); 66 | throw new Error("No files"); 67 | } 68 | 69 | function mkdirpp(dir: string, mode?: number): Promise { 70 | return new Promise((resolve, reject) => { 71 | mkdirp(dir, mode || 0o755, (err, made) => { 72 | if (err) { 73 | reject(err); 74 | } else { 75 | resolve(made); 76 | } 77 | }); 78 | }); 79 | } 80 | 81 | Promise.all(config.files.map((a) => wsdl2ts(a, opts))). 82 | then((xs) => mergeTypedWsdl.apply(undefined, xs)). 83 | then(outputTypedWsdl). 84 | then((xs: Array<{ file: string, data: string[] }>) => { 85 | return Promise.all(xs.map((x) => { 86 | console.log("-- %s --", x.file); 87 | console.log("%s", x.data.join("\n\n")); 88 | const file = config.outdir + "/" + x.file; 89 | const dir = file.replace(/\/[^/]+$/, ""); 90 | return mkdirpp(dir).then(() => { 91 | return new Promise((resolve, reject) => { 92 | const tsfile = file + ".ts.tmp"; 93 | const fileData: string[] = []; 94 | if (config.tslintEnable === null) { 95 | fileData.push("/* tslint:enable */"); 96 | } 97 | if (config.tslintDisable === null) { 98 | fileData.push("/* tslint:disable */"); 99 | } else if (config.tslintDisable.length !== 0) { 100 | fileData.push("/* tslint:disable:" + config.tslintDisable.join(" ") + " */"); 101 | } 102 | if (config.tslintEnable && config.tslintEnable.length !== 0) { 103 | fileData.push("/* tslint:enable:" + config.tslintEnable.join(" ") + " */"); 104 | } 105 | fileData.push(x.data.join("\n\n")); 106 | fileData.push(""); 107 | writeFile(tsfile, fileData.join("\n"), (err) => { 108 | if (err) { 109 | reject(err); 110 | } else { 111 | resolve(tsfile); 112 | } 113 | }); 114 | }); 115 | }); 116 | })); 117 | }). 118 | then((files: string[]) => Promise.all(files.map((file) => { 119 | return new Promise((resolve, reject) => { 120 | const realFile = file.replace(/\.[^.]+$/, ""); 121 | rename(file, realFile, (err) => { 122 | if (err) { 123 | reject(err); 124 | } else { 125 | resolve(realFile); 126 | } 127 | }); 128 | }); 129 | }))). 130 | catch((err) => { 131 | console.error(err); 132 | process.exitCode = 3; 133 | }); 134 | -------------------------------------------------------------------------------- /test/index.js: -------------------------------------------------------------------------------- 1 | const { wsdl2ts, mergeTypedWsdl, outputTypedWsdl } = require("../lib/wsdl-to-ts"); 2 | 3 | /** @type {Array.<{0: string; 1: Promise.}>} */ 4 | const testResults = []; 5 | 6 | // test simple case; disregard result 7 | 8 | const wsdl = "https://www2.agenciatributaria.gob.es" + 9 | "/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/"; 10 | const sentWsdl = wsdl + "SuministroFactEmitidas.wsdl"; 11 | const rcvdWsdl = wsdl + "SuministroFactRecibidas.wsdl"; 12 | 13 | testResults.push(["simple", Promise.all([ 14 | wsdl2ts(sentWsdl), 15 | wsdl2ts(rcvdWsdl), 16 | ]). 17 | then((xs) => mergeTypedWsdl.apply(undefined, xs)). 18 | then(outputTypedWsdl). 19 | then(() => "OK") 20 | ]); 21 | 22 | // test cases that need key excaping; write to files 23 | 24 | const sii11 = "https://www.agenciatributaria.es" + 25 | "/static_files/AEAT/Contenidos_Comunes/La_Agencia_Tributaria/Modelos_y_formularios/" + 26 | "Suministro_inmediato_informacion/FicherosSuministros/V_1_1/"; 27 | const sii11Sent = sii11 + "SuministroFactEmitidas.wsdl"; 28 | const sii11Rcvd = sii11 + "SuministroFactRecibidas.wsdl"; 29 | 30 | const { readdir, readFile, unlink, writeFile, stat } = require("fs"); 31 | const mkdirp = require("mkdirp"); 32 | 33 | /** 34 | * @param {string} dir 35 | * @returns {Promise.} 36 | */ 37 | function mkdirpP(dir) { 38 | return new Promise((resolve, reject) => { 39 | mkdirp(dir, (err, made) => { 40 | if (err) { 41 | reject(err); 42 | } else { 43 | resolve(made); 44 | } 45 | }); 46 | }); 47 | } 48 | 49 | /** 50 | * @param {string} dir 51 | * @returns {Promise.} 52 | */ 53 | function readdirP(dir) { 54 | return new Promise((resolve, reject) => { 55 | readdir(dir, "utf8", (err, files) => { 56 | if (err) { 57 | reject(err); 58 | } else { 59 | resolve(files); 60 | } 61 | }); 62 | }); 63 | } 64 | 65 | /** 66 | * @param {string} path 67 | * @returns {Promise.} 68 | */ 69 | function statP(path) { 70 | return new Promise((resolve, reject) => { 71 | stat(path, (err, stats) => { 72 | if (err) { 73 | reject(err); 74 | } else { 75 | resolve(stats); 76 | } 77 | }); 78 | }); 79 | } 80 | 81 | /** 82 | * @param {string} file 83 | * @returns {Promise.} 84 | */ 85 | function rmfileP(file) { 86 | return new Promise((resolve, reject) => { 87 | unlink(file, (err) => { 88 | if (err) { 89 | reject(err); 90 | } else { 91 | resolve(); 92 | } 93 | }); 94 | }); 95 | } 96 | 97 | /** 98 | * @param {string} file 99 | * @param {string} data 100 | * @returns {Promise.} 101 | */ 102 | function writefileP(file, data) { 103 | return new Promise((resolve, reject) => { 104 | writeFile(file, data, "utf8", (err) => { 105 | if (err) { 106 | reject(err); 107 | } else { 108 | resolve(); 109 | } 110 | }); 111 | }); 112 | } 113 | 114 | /** 115 | * @param {string} file 116 | * @returns {Promise.} 117 | */ 118 | function readfileP(file) { 119 | return new Promise((resolve, reject) => { 120 | readFile(file, "utf8", (err, data) => { 121 | if (err) { 122 | reject(err); 123 | } else { 124 | resolve(data); 125 | } 126 | }); 127 | }); 128 | } 129 | 130 | /** 131 | * @param {string} dir 132 | * @returns {Promise.} 133 | */ 134 | function requrfile(dir) { 135 | return readdirP(dir).then((files) => Promise.all(files.map((sf) => { 136 | const f = dir + "/" + sf; 137 | return statP(f).then((s) => { 138 | if (!s.isDirectory()) { 139 | return [f]; 140 | } else { 141 | return requrfile(f); 142 | } 143 | }); 144 | }))).then((fcoll) => { 145 | /** @type {string[]} */ 146 | const r = []; 147 | for (let i = 0; i < fcoll.length; i++) { 148 | r.push.apply(r, fcoll[i]); 149 | } 150 | return r; 151 | }); 152 | } 153 | 154 | /** 155 | * @param {string} dir 156 | * @param {RegExp} pattern 157 | * @returns {Promise.} 158 | */ 159 | function cleandir(dir, pattern) { 160 | return requrfile(dir).then((files) => { 161 | const fs = files.filter((f) => pattern.test(f)); 162 | if (fs.length) { 163 | return Promise.all(fs.map((f) => rmfileP(f))).then(() => undefined); 164 | } 165 | }); 166 | } 167 | 168 | testResults.push(["complex", Promise.all([ 169 | wsdl2ts(sii11Sent, { quoteProperties: true }), 170 | wsdl2ts(sii11Rcvd), 171 | ]). 172 | then((xs) => mergeTypedWsdl.apply(undefined, xs)). 173 | then(outputTypedWsdl). 174 | then((xs) => mkdirpP("test/results"). 175 | then(() => cleandir("test/results", /\.ts$/)). 176 | then(() => Promise.all(xs.map((x) => { 177 | const f = "test/results/" + x.file + ".d.ts"; 178 | return mkdirpP(f.replace(/\/[^/]+$/, "")). 179 | then(() => writefileP(f, x.data.join("\n\n"))); 180 | }))) 181 | ). 182 | then(() => "OK") 183 | ]); 184 | 185 | // test values in package.json 186 | const package = require("../package.json"); 187 | 188 | testResults.push(["valid main", !package.main ? Promise.reject("No main field in package.json") : 189 | readfileP(package.main).then(() => { 190 | if (!/^(?:.*\/)*lib\//.test(package.main)) { 191 | throw "Expected main js to be in a folder named `lib` but found: " + JSON.stringify(package.main); 192 | } 193 | if (!/\.js$/.test(package.main)) { 194 | throw "Expected main file to have file extension `.js` but found: " + JSON.stringify(package.main); 195 | } 196 | return "OK"; 197 | }) 198 | ]); 199 | 200 | testResults.push(["valid bin", !package.bin ? Promise.reject("No bin field in package.json") : 201 | !package.bin["wsdl-to-ts"] ? Promise.reject("No wsdl-to-ts property for the bin field in package.json") : 202 | readfileP(package.bin["wsdl-to-ts"]).then((d) => { 203 | const f3 = d.substring(0, 3); 204 | if (!/^(?:.*\/)*lib\//.test(package.bin["wsdl-to-ts"])) { 205 | throw "Expected bin js to be in a folder named `lib` but found: " + JSON.stringify(package.bin["wsdl-to-ts"]); 206 | } 207 | if (!/\.js$/.test(package.bin["wsdl-to-ts"])) { 208 | throw "Expected bin file to have file extension `.js` but found: " + JSON.stringify(package.bin["wsdl-to-ts"]); 209 | } 210 | if (f3 !== "#!/") { 211 | throw "Expected a hashbang sequence as the first tokens but found: " + JSON.stringify(f3) + " in " + package.bin["wsdl-to-ts"]; 212 | } 213 | return "OK"; 214 | }) 215 | ]); 216 | 217 | testResults.push(["valid module", !package.module ? Promise.reject("No module field in package.json") : 218 | readfileP(package.module).then((d) => { 219 | if (!/^export /m.test(d)) { 220 | throw "Expected at least one export in the module"; 221 | } 222 | if (!/^(?:.*\/)*esm\//.test(package.module)) { 223 | throw "Expected module js to be in a folder named `esm` but found: " + JSON.stringify(package.module); 224 | } 225 | if (!/\.m?js$/.test(package.module)) { 226 | throw "Expected module file to have file extension `.mjs` or `.js` but found: " + JSON.stringify(package.module); 227 | } 228 | return "OK"; 229 | }) 230 | ]); 231 | 232 | testResults.push(["valid types", !package.types ? Promise.reject("No types field in package.json") : 233 | readfileP(package.types).then((d) => { 234 | if (!/^export /m.test(d)) { 235 | throw "Expected at least one export in the types"; 236 | } 237 | if (!/^(?:.*\/)*esm\//.test(package.types)) { 238 | throw "Expected types source to be in a folder named `esm` but found: " + JSON.stringify(package.types); 239 | } 240 | if (!/\.d\.ts$/.test(package.types)) { 241 | throw "Expected types file to have file extension `.d.ts` but found: " + JSON.stringify(package.types); 242 | } 243 | return "OK"; 244 | }) 245 | ]); 246 | 247 | // Run the imossible test 248 | 249 | const recursiveWsdl = "https://srv6.demo-attendant.advam.com/makeBooking/webservice/booking.wsdl"; 250 | testResults.push(["recursive elements", Promise.all([ 251 | wsdl2ts(recursiveWsdl), 252 | ]). 253 | then((xs) => mergeTypedWsdl.apply(undefined, xs)). 254 | then(outputTypedWsdl). 255 | then(() => "OK", (e) => { 256 | if (e && e instanceof RangeError) { 257 | return "Expected error\n " + (e.stack || e); 258 | } 259 | throw e; 260 | }) 261 | ]); 262 | 263 | // handle results 264 | 265 | testResults.forEach((test) => { 266 | test[1].then((r) => { 267 | console.log("Test `%s`:", test[0], r); 268 | }, (e) => { 269 | console.error("Test `%s`: FAIL\n ", test[0], e); 270 | process.exitCode = 1; 271 | }); 272 | }); 273 | -------------------------------------------------------------------------------- /esm/wsdl-to-ts.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"wsdl-to-ts.js","sourceRoot":"","sources":["../src/wsdl-to-ts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,oCAAoC;AAEpC,MAAM,CAAC,MAAM,OAAO,GAA6B,EAAE,CAAC;AAsBpD,MAAM;IAKF,YAA4B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;QAClC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACxB,CAAC;IAEM,iBAAiB;QACpB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;YACzC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;gBACnB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;aAC1C;iBAAM;gBACH,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC7B;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC5B;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AAED,gCAAgC,GAAqB,EAAE,aAA6B;IAChF,MAAM,CAAC,GAAyB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QAC9B,IAAI,CAAC,KAAK,eAAe,IAAI,CAAC,KAAK,iBAAiB,EAAE;YAClD,SAAS;SACZ;QACD,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;QACjB,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC;QACnB,IAAI,CAAC,KAAK,QAAQ,EAAE;YAChB,MAAM,IAAI,GAAG,CAAW,CAAC;YACzB,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,GACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,YAAY,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,GAAG,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3F,IAAI,SAAS,GAAG,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC;YACzE,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,QAAQ,EAAE;gBACnC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;oBAClC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACZ,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW,CAAC;gBAC/F,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACnD,IAAI,OAAO,CAAC,MAAM,EAAE;oBAChB,SAAS,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;iBACrD;aACJ;YACD,IAAI,OAAO,EAAE;gBACT,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;oBACnC,SAAS,IAAI,IAAI,CAAC;iBACrB;qBAAM;oBACH,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC;iBAC1C;aACJ;YACD,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,YAAY,GAAG,GAAG,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;SAC9E;aAAM;YACH,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAqB,EAAE,aAAa,CAAC,CAAC;YACxE,IAAI,EAAiC,CAAC;YACtC,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;gBACtC,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,EAAE;oBACnC,IAAI,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;wBACnF,CAAC,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;qBAC1C;yBAAM,IAAI,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;wBACnD,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE;4BACnC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;yBACtC;qBACJ;yBAAM;wBACH,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;qBACnC;iBACJ;gBACD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAE/B,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;oBACrB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9B,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC;iBACtF;qBAAM;oBACH,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;oBAC/B,IAAI,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;wBAC3B,CAAC,IAAI,KAAK,CAAC;qBACd;yBAAM;wBACH,CAAC,GAAG,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC;qBAC3B;iBACJ;gBAED,EAAE,GAAG,CAAC,CAAC;aACV;iBAAM;gBACH,EAAE,GAAG,EAAE,CAAC;gBACR,IAAI,aAAa,IAAI,aAAa,CAAC,EAAE,EAAE;oBACnC,MAAM,EAAE,GAAG,yBAAyB,CAAC,EAAE,CAAC,CAAC;oBACzC,IAAI,aAAa,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;wBACpF,EAAE,GAAG,aAAa,CAAC,EAAE,GAAG,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC;qBAC3C;yBAAM,IAAI,aAAa,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;wBACnD,IAAI,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;4BACpC,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;yBACtC;qBACJ;yBAAM;wBACH,aAAa,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;qBACpC;iBACJ;aACJ;YACD,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;SACd;KACJ;IACD,6CAA6C;IAC7C,OAAO,CAAC,CAAC;AACb,CAAC;AAED,mCAAmC,CAAuB,EAAE,OAA0B,EAAE;IACpF,MAAM,CAAC,GAAa,EAAE,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,GAAW,CAAC,CAAC;QAClB,IAAI,IAAI,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,eAAe,KAAK,SAAS,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;YACrG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SACzB;QACD,IAAI,CAAC,KAAK,QAAQ,EAAE;YAChB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;gBACrB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAE1B,6DAA6D;gBAC7D,MAAM,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACnC,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBACd,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;iBACnD;qBAAM;oBACH,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;iBAC9B;aACJ;iBAAM;gBACH,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;aACxB;SACJ;aAAM;YACH,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,CAAC;SAC3F;KACJ;IACD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QAChB,OAAO,IAAI,CAAC;KACf;IACD,OAAO,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;AAChD,CAAC;AAED,6BAA6B,GAAyB,EAAE,aAA6B,EAAE,IAAwB;IAC3G,OAAO,yBAAyB,CAAC,sBAAsB,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,kBAAkB,OAAe,EAAE,IAAwB;IAC7D,OAAO,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAChD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YAC3C,IAAI,GAAG,EAAE;gBACL,MAAM,CAAC,GAAG,CAAC,CAAC;aACf;iBAAM;gBACH,OAAO,CAAC,MAAM,CAAC,CAAC;aACnB;QACL,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACf,MAAM,CAAC,GAAe;YAClB,MAAM;YACN,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,EAAE;SACZ,CAAC;QACF,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAE5B,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;YAClC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE;gBACxC,MAAM,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC;gBACpD,0CAA0C;gBAE1C,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;oBACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACtB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACxB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;oBACtB,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;oBACzB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC5B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC9B,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC;oBAC9C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;iBACpC;gBAED,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,EAAE,EAAE;oBAClC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;wBAChD,kCAAkC;wBAElC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;wBAC3E,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;qBAC/E;oBAED,MAAM,GAAG,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAC3C,SAAS,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,MAAM,QAAQ,GAAa,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;oBAC7D,MAAM,QAAQ,GAAa,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;wBACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;wBACpB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;4BACvB,IAAI,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE;gCACtC,QAAQ,GAAG,KAAK,CAAC;gCACjB,MAAM;6BACT;yBACJ;wBACD,IAAI,QAAQ,EAAE;4BACV,MAAM;yBACT;qBACJ;oBACD,IAAI,IAAI,KAAK,EAAE,EAAE;wBACb,OAAO,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;qBAChE;iBACJ;gBAED,MAAM,aAAa,GAAa,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBAClE,IAAI,aAAa,CAAC,MAAM,EAAE;oBACtB,MAAM,EAAE,GAA4B,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBACnF,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE;wBAC3B,EAAE,CAAC,CAAC,CAAC,GAAG,oBAAoB,GAAG,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;qBACpE;iBACJ;gBAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBAEhD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,OAAO,CAAC;wBAC1C,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC/E,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,QAAQ,CAAC;wBAC3C,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAChF,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;wBAC5B,WAAW,GAAG,MAAM,GAAG,SAAS;4BAChC,uBAAuB;4BACvB,YAAY,GAAG,MAAM,GAAG,SAAS;4BACjC,gBAAgB;4BAChB,6CAA6C;4BAC7C,iBAAiB;4BACjB,oBAAoB;4BACpB,WAAW,CAAC;iBACnB;aACJ;SACJ;QAED,OAAO,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;AACP,CAAC;AAED,kBAAkD,CAAI;IAClD,MAAM,CAAC,GAAM,EAAS,CAAC;IACvB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;QAC5B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC;YACnB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAClE;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,yBAAyB,CAAa,EAAE,GAAG,EAAgB;IAC7D,MAAM,CAAC,GAAe;QAClB,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;QACxB,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;QAC5B,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;QAClC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;KAC3B,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE;QAChB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;YACxC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE;gBAClC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;gBAClD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;aAC3D;iBAAM;gBACH,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;oBAC9C,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE;wBACxC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;wBAChD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC9D,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;wBAC1D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;qBACvE;yBAAM;wBACH,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;wBAChD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;4BACxD,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;yBACvE;wBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;4BACpD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;yBAC/D;wBACD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;4BACvD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE;gCACjD,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;6BAC/E;iCAAM;gCACH,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;oCAC5D,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;iCAC/E;6BACJ;yBACJ;qBACJ;iBACJ;aACJ;SACJ;KACJ;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,0BAA0B,CAAa;IACzC,MAAM,CAAC,GAA4C,EAAE,CAAC;IACtD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;QACxC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE;YAC9C,MAAM,CAAC,GAAqC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;YACvF,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;gBAC5C,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBACpD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBAChF;aACJ;YACD,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;gBAChD,MAAM,EAAE,GAAa,EAAE,CAAC;gBACxB,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBACxD,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;iBACnE;gBACD,IAAI,EAAE,CAAC,MAAM,EAAE;oBACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,GAAG,IAAI,GAAG,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;iBACzF;aACJ;YACD,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE;gBACtD,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBACvD,MAAM,EAAE,GAAa,EAAE,CAAC;oBACxB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;wBAC5D,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;qBAC1E;oBACD,IAAI,EAAE,CAAC,MAAM,EAAE;wBACX,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,CAAC;qBAClF;iBACJ;aACJ;YACD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACb;KACJ;IACD,OAAO,CAAC,CAAC;AACb,CAAC"} -------------------------------------------------------------------------------- /lib/wsdl-to-ts.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"wsdl-to-ts.js","sourceRoot":"","sources":["../src/wsdl-to-ts.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /esm/wsdl-to-ts.js: -------------------------------------------------------------------------------- 1 | import * as soap from "soap"; 2 | // import { diffLines } from "diff"; 3 | export const nsEnums = {}; 4 | export class TypeCollector { 5 | constructor(ns) { 6 | this.ns = ns; 7 | this.registered = {}; 8 | this.collected = {}; 9 | } 10 | registerCollected() { 11 | for (const k of Object.keys(this.collected)) { 12 | if (this.collected[k]) { 13 | this.registered[k] = this.collected[k]; 14 | } 15 | else { 16 | delete this.registered[k]; 17 | } 18 | delete this.collected[k]; 19 | } 20 | return this; 21 | } 22 | } 23 | function wsdlTypeToInterfaceObj(obj, typeCollector) { 24 | const r = {}; 25 | for (const k of Object.keys(obj)) { 26 | if (k === "targetNSAlias" || k === "targetNamespace") { 27 | continue; 28 | } 29 | const isArray = k.endsWith("[]"); 30 | const k2 = isArray ? k.substring(0, k.length - 2) : k; 31 | const v = obj[k]; 32 | const t = typeof v; 33 | if (t === "string") { 34 | const vstr = v; 35 | const [typeName, superTypeClass, typeData] = vstr.indexOf("|") === -1 ? [vstr, vstr, undefined] : vstr.split("|"); 36 | const typeFullName = obj.targetNamespace ? obj.targetNamespace + "#" + typeName : typeName; 37 | let typeClass = superTypeClass === "integer" ? "number" : superTypeClass; 38 | if (nsEnums[typeFullName] || typeData) { 39 | const filter = nsEnums[typeFullName] ? 40 | () => true : 41 | (x) => x !== "length" && x !== "pattern" && x !== "maxLength" && x !== "minLength"; 42 | const tdsplit = typeData.split(",").filter(filter); 43 | if (tdsplit.length) { 44 | typeClass = "\"" + tdsplit.join("\" | \"") + "\""; 45 | } 46 | } 47 | if (isArray) { 48 | if (/^[A-Za-z0-9.]+$/.test(typeClass)) { 49 | typeClass += "[]"; 50 | } 51 | else { 52 | typeClass = "Array<" + typeClass + ">"; 53 | } 54 | } 55 | r[k2] = "/** " + typeFullName + "(" + typeData + ") */ " + typeClass + ";"; 56 | } 57 | else { 58 | const to = wsdlTypeToInterfaceObj(v, typeCollector); 59 | let tr; 60 | if (isArray) { 61 | let s = wsdlTypeToInterfaceString(to); 62 | if (typeCollector && typeCollector.ns) { 63 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === s) { 64 | s = typeCollector.ns + ".I" + k2 + ";"; 65 | } 66 | else if (typeCollector.collected.hasOwnProperty(k2)) { 67 | if (typeCollector.collected[k2] !== s) { 68 | typeCollector.collected[k2] = null; 69 | } 70 | } 71 | else { 72 | typeCollector.collected[k2] = s; 73 | } 74 | } 75 | s = s.replace(/\n/g, "\n "); 76 | if (s.startsWith("/**")) { 77 | const i = s.indexOf("*/") + 2; 78 | s = s.substring(0, i) + " Array<" + s.substring(i).trim().replace(/;$/, "") + ">;"; 79 | } 80 | else { 81 | s = s.trim().replace(/;$/, ""); 82 | if (/^[A-Za-z0-9.]+$/.test(s)) { 83 | s += "[];"; 84 | } 85 | else { 86 | s = "Array<" + s + ">;"; 87 | } 88 | } 89 | tr = s; 90 | } 91 | else { 92 | tr = to; 93 | if (typeCollector && typeCollector.ns) { 94 | const ss = wsdlTypeToInterfaceString(to); 95 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === ss) { 96 | tr = typeCollector.ns + ".I" + k2 + ";"; 97 | } 98 | else if (typeCollector.collected.hasOwnProperty(k2)) { 99 | if (typeCollector.collected[k2] !== ss) { 100 | typeCollector.collected[k2] = null; 101 | } 102 | } 103 | else { 104 | typeCollector.collected[k2] = ss; 105 | } 106 | } 107 | } 108 | r[k2] = tr; 109 | } 110 | } 111 | // console.log("wsdlTypeToInterfaceObj:", r); 112 | return r; 113 | } 114 | function wsdlTypeToInterfaceString(d, opts = {}) { 115 | const r = []; 116 | for (const k of Object.keys(d)) { 117 | const t = typeof d[k]; 118 | let p = k; 119 | if (opts.quoteProperties || (opts.quoteProperties === undefined && !/^[A-Za-z][A-Za-z0-9_-]*$/.test(k))) { 120 | p = JSON.stringify(k); 121 | } 122 | if (t === "string") { 123 | const v = d[k]; 124 | if (v.startsWith("/**")) { 125 | const i = v.indexOf("*/") + 2; 126 | r.push(v.substring(0, i)); 127 | // for types like "xsd:string" only the "string" part is used 128 | const rawtype = v.substring(i).trim(); 129 | const colon = rawtype.indexOf(":"); 130 | if (colon !== -1) { 131 | r.push(p + ": " + rawtype.substring(colon + 1)); 132 | } 133 | else { 134 | r.push(p + ": " + rawtype); 135 | } 136 | } 137 | else { 138 | r.push(p + ": " + v); 139 | } 140 | } 141 | else { 142 | r.push(p + ": " + wsdlTypeToInterfaceString(d[k], opts).replace(/\n/g, "\n ") + ";"); 143 | } 144 | } 145 | if (r.length === 0) { 146 | return "{}"; 147 | } 148 | return "{\n " + r.join("\n ") + "\n}"; 149 | } 150 | function wsdlTypeToInterface(obj, typeCollector, opts) { 151 | return wsdlTypeToInterfaceString(wsdlTypeToInterfaceObj(obj, typeCollector), opts); 152 | } 153 | export function wsdl2ts(wsdlUri, opts) { 154 | return new Promise((resolve, reject) => { 155 | soap.createClient(wsdlUri, {}, (err, client) => { 156 | if (err) { 157 | reject(err); 158 | } 159 | else { 160 | resolve(client); 161 | } 162 | }); 163 | }).then((client) => { 164 | const r = { 165 | client, 166 | files: {}, 167 | methods: {}, 168 | namespaces: {}, 169 | types: {}, 170 | }; 171 | const d = client.describe(); 172 | for (const service of Object.keys(d)) { 173 | for (const port of Object.keys(d[service])) { 174 | const collector = new TypeCollector(port + "Types"); 175 | // console.log("-- %s.%s", service, port); 176 | if (!r.types[service]) { 177 | r.types[service] = {}; 178 | r.methods[service] = {}; 179 | r.files[service] = {}; 180 | r.namespaces[service] = {}; 181 | } 182 | if (!r.types[service][port]) { 183 | r.types[service][port] = {}; 184 | r.methods[service][port] = {}; 185 | r.files[service][port] = service + "/" + port; 186 | r.namespaces[service][port] = {}; 187 | } 188 | for (let maxi = 0; maxi < 32; maxi++) { 189 | for (const method of Object.keys(d[service][port])) { 190 | // console.log("---- %s", method); 191 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 192 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 193 | } 194 | const reg = cloneObj(collector.registered); 195 | collector.registerCollected(); 196 | const regKeys0 = Object.keys(collector.registered); 197 | const regKeys1 = Object.keys(reg); 198 | if (regKeys0.length === regKeys1.length) { 199 | let noChange = true; 200 | for (const rk of regKeys0) { 201 | if (collector.registered[rk] !== reg[rk]) { 202 | noChange = false; 203 | break; 204 | } 205 | } 206 | if (noChange) { 207 | break; 208 | } 209 | } 210 | if (maxi === 31) { 211 | console.warn("wsdl-to-ts: Aborted nested interface changes"); 212 | } 213 | } 214 | const collectedKeys = Object.keys(collector.registered); 215 | if (collectedKeys.length) { 216 | const ns = r.namespaces[service][port][collector.ns] = {}; 217 | for (const k of collectedKeys) { 218 | ns[k] = "export interface I" + k + " " + collector.registered[k]; 219 | } 220 | } 221 | for (const method of Object.keys(d[service][port])) { 222 | r.types[service][port]["I" + method + "Input"] = 223 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 224 | r.types[service][port]["I" + method + "Output"] = 225 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 226 | r.methods[service][port][method] = 227 | "(input: I" + method + "Input, " + 228 | "cb: (err: any | null," + 229 | " result: I" + method + "Output," + 230 | " raw: string, " + 231 | " soapHeader: {[k: string]: any; }) => any, " + 232 | "options?: any, " + 233 | "extraHeaders?: any" + 234 | ") => void"; 235 | } 236 | } 237 | } 238 | return r; 239 | }); 240 | } 241 | function cloneObj(a) { 242 | const b = {}; 243 | for (const k of Object.keys(a)) { 244 | const t = typeof a[k]; 245 | b[k] = t === "object" ? 246 | Array.isArray(a[k]) ? a[k].slice() : cloneObj(a[k]) : a[k]; 247 | } 248 | return b; 249 | } 250 | export function mergeTypedWsdl(a, ...bs) { 251 | const x = { 252 | client: null, 253 | files: cloneObj(a.files), 254 | methods: cloneObj(a.methods), 255 | namespaces: cloneObj(a.namespaces), 256 | types: cloneObj(a.types), 257 | }; 258 | for (const b of bs) { 259 | for (const service of Object.keys(b.files)) { 260 | if (!x.files.hasOwnProperty(service)) { 261 | x.files[service] = cloneObj(b.files[service]); 262 | x.methods[service] = cloneObj(b.methods[service]); 263 | x.types[service] = cloneObj(b.types[service]); 264 | x.namespaces[service] = cloneObj(b.namespaces[service]); 265 | } 266 | else { 267 | for (const port of Object.keys(b.files[service])) { 268 | if (!x.files[service].hasOwnProperty(port)) { 269 | x.files[service][port] = b.files[service][port]; 270 | x.methods[service][port] = cloneObj(b.methods[service][port]); 271 | x.types[service][port] = cloneObj(b.types[service][port]); 272 | x.namespaces[service][port] = cloneObj(b.namespaces[service][port]); 273 | } 274 | else { 275 | x.files[service][port] = b.files[service][port]; 276 | for (const method of Object.keys(b.methods[service][port])) { 277 | x.methods[service][port][method] = b.methods[service][port][method]; 278 | } 279 | for (const type of Object.keys(b.types[service][port])) { 280 | x.types[service][port][type] = b.types[service][port][type]; 281 | } 282 | for (const ns of Object.keys(b.namespaces[service][port])) { 283 | if (!x.namespaces[service][port].hasOwnProperty(ns)) { 284 | x.namespaces[service][port][ns] = cloneObj(b.namespaces[service][port][ns]); 285 | } 286 | else { 287 | for (const nsi of Object.keys(b.namespaces[service][port][ns])) { 288 | x.namespaces[service][port][ns][nsi] = b.namespaces[service][port][ns][nsi]; 289 | } 290 | } 291 | } 292 | } 293 | } 294 | } 295 | } 296 | } 297 | return x; 298 | } 299 | export function outputTypedWsdl(a) { 300 | const r = []; 301 | for (const service of Object.keys(a.files)) { 302 | for (const port of Object.keys(a.files[service])) { 303 | const d = { file: a.files[service][port], data: [] }; 304 | if (a.types[service] && a.types[service][port]) { 305 | for (const type of Object.keys(a.types[service][port])) { 306 | d.data.push("export interface " + type + " " + a.types[service][port][type]); 307 | } 308 | } 309 | if (a.methods[service] && a.methods[service][port]) { 310 | const ms = []; 311 | for (const method of Object.keys(a.methods[service][port])) { 312 | ms.push(method + ": " + a.methods[service][port][method] + ";"); 313 | } 314 | if (ms.length) { 315 | d.data.push("export interface I" + port + "Soap {\n " + ms.join("\n ") + "\n}"); 316 | } 317 | } 318 | if (a.namespaces[service] && a.namespaces[service][port]) { 319 | for (const ns of Object.keys(a.namespaces[service][port])) { 320 | const ms = []; 321 | for (const nsi of Object.keys(a.namespaces[service][port][ns])) { 322 | ms.push(a.namespaces[service][port][ns][nsi].replace(/\n/g, "\n ")); 323 | } 324 | if (ms.length) { 325 | d.data.push("export namespace " + ns + " {\n " + ms.join("\n ") + "\n}"); 326 | } 327 | } 328 | } 329 | r.push(d); 330 | } 331 | } 332 | return r; 333 | } 334 | //# sourceMappingURL=wsdl-to-ts.js.map -------------------------------------------------------------------------------- /lib/wsdl-to-ts.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | const soap = require("soap"); 4 | // import { diffLines } from "diff"; 5 | exports.nsEnums = {}; 6 | class TypeCollector { 7 | constructor(ns) { 8 | this.ns = ns; 9 | this.registered = {}; 10 | this.collected = {}; 11 | } 12 | registerCollected() { 13 | for (const k of Object.keys(this.collected)) { 14 | if (this.collected[k]) { 15 | this.registered[k] = this.collected[k]; 16 | } 17 | else { 18 | delete this.registered[k]; 19 | } 20 | delete this.collected[k]; 21 | } 22 | return this; 23 | } 24 | } 25 | exports.TypeCollector = TypeCollector; 26 | function wsdlTypeToInterfaceObj(obj, typeCollector) { 27 | const r = {}; 28 | for (const k of Object.keys(obj)) { 29 | if (k === "targetNSAlias" || k === "targetNamespace") { 30 | continue; 31 | } 32 | const isArray = k.endsWith("[]"); 33 | const k2 = isArray ? k.substring(0, k.length - 2) : k; 34 | const v = obj[k]; 35 | const t = typeof v; 36 | if (t === "string") { 37 | const vstr = v; 38 | const [typeName, superTypeClass, typeData] = vstr.indexOf("|") === -1 ? [vstr, vstr, undefined] : vstr.split("|"); 39 | const typeFullName = obj.targetNamespace ? obj.targetNamespace + "#" + typeName : typeName; 40 | let typeClass = superTypeClass === "integer" ? "number" : superTypeClass; 41 | if (exports.nsEnums[typeFullName] || typeData) { 42 | const filter = exports.nsEnums[typeFullName] ? 43 | () => true : 44 | (x) => x !== "length" && x !== "pattern" && x !== "maxLength" && x !== "minLength"; 45 | const tdsplit = typeData.split(",").filter(filter); 46 | if (tdsplit.length) { 47 | typeClass = "\"" + tdsplit.join("\" | \"") + "\""; 48 | } 49 | } 50 | if (isArray) { 51 | if (/^[A-Za-z0-9.]+$/.test(typeClass)) { 52 | typeClass += "[]"; 53 | } 54 | else { 55 | typeClass = "Array<" + typeClass + ">"; 56 | } 57 | } 58 | r[k2] = "/** " + typeFullName + "(" + typeData + ") */ " + typeClass + ";"; 59 | } 60 | else { 61 | const to = wsdlTypeToInterfaceObj(v, typeCollector); 62 | let tr; 63 | if (isArray) { 64 | let s = wsdlTypeToInterfaceString(to); 65 | if (typeCollector && typeCollector.ns) { 66 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === s) { 67 | s = typeCollector.ns + ".I" + k2 + ";"; 68 | } 69 | else if (typeCollector.collected.hasOwnProperty(k2)) { 70 | if (typeCollector.collected[k2] !== s) { 71 | typeCollector.collected[k2] = null; 72 | } 73 | } 74 | else { 75 | typeCollector.collected[k2] = s; 76 | } 77 | } 78 | s = s.replace(/\n/g, "\n "); 79 | if (s.startsWith("/**")) { 80 | const i = s.indexOf("*/") + 2; 81 | s = s.substring(0, i) + " Array<" + s.substring(i).trim().replace(/;$/, "") + ">;"; 82 | } 83 | else { 84 | s = s.trim().replace(/;$/, ""); 85 | if (/^[A-Za-z0-9.]+$/.test(s)) { 86 | s += "[];"; 87 | } 88 | else { 89 | s = "Array<" + s + ">;"; 90 | } 91 | } 92 | tr = s; 93 | } 94 | else { 95 | tr = to; 96 | if (typeCollector && typeCollector.ns) { 97 | const ss = wsdlTypeToInterfaceString(to); 98 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === ss) { 99 | tr = typeCollector.ns + ".I" + k2 + ";"; 100 | } 101 | else if (typeCollector.collected.hasOwnProperty(k2)) { 102 | if (typeCollector.collected[k2] !== ss) { 103 | typeCollector.collected[k2] = null; 104 | } 105 | } 106 | else { 107 | typeCollector.collected[k2] = ss; 108 | } 109 | } 110 | } 111 | r[k2] = tr; 112 | } 113 | } 114 | // console.log("wsdlTypeToInterfaceObj:", r); 115 | return r; 116 | } 117 | function wsdlTypeToInterfaceString(d, opts = {}) { 118 | const r = []; 119 | for (const k of Object.keys(d)) { 120 | const t = typeof d[k]; 121 | let p = k; 122 | if (opts.quoteProperties || (opts.quoteProperties === undefined && !/^[A-Za-z][A-Za-z0-9_-]*$/.test(k))) { 123 | p = JSON.stringify(k); 124 | } 125 | if (t === "string") { 126 | const v = d[k]; 127 | if (v.startsWith("/**")) { 128 | const i = v.indexOf("*/") + 2; 129 | r.push(v.substring(0, i)); 130 | // for types like "xsd:string" only the "string" part is used 131 | const rawtype = v.substring(i).trim(); 132 | const colon = rawtype.indexOf(":"); 133 | if (colon !== -1) { 134 | r.push(p + ": " + rawtype.substring(colon + 1)); 135 | } 136 | else { 137 | r.push(p + ": " + rawtype); 138 | } 139 | } 140 | else { 141 | r.push(p + ": " + v); 142 | } 143 | } 144 | else { 145 | r.push(p + ": " + wsdlTypeToInterfaceString(d[k], opts).replace(/\n/g, "\n ") + ";"); 146 | } 147 | } 148 | if (r.length === 0) { 149 | return "{}"; 150 | } 151 | return "{\n " + r.join("\n ") + "\n}"; 152 | } 153 | function wsdlTypeToInterface(obj, typeCollector, opts) { 154 | return wsdlTypeToInterfaceString(wsdlTypeToInterfaceObj(obj, typeCollector), opts); 155 | } 156 | function wsdl2ts(wsdlUri, opts) { 157 | return new Promise((resolve, reject) => { 158 | soap.createClient(wsdlUri, {}, (err, client) => { 159 | if (err) { 160 | reject(err); 161 | } 162 | else { 163 | resolve(client); 164 | } 165 | }); 166 | }).then((client) => { 167 | const r = { 168 | client, 169 | files: {}, 170 | methods: {}, 171 | namespaces: {}, 172 | types: {}, 173 | }; 174 | const d = client.describe(); 175 | for (const service of Object.keys(d)) { 176 | for (const port of Object.keys(d[service])) { 177 | const collector = new TypeCollector(port + "Types"); 178 | // console.log("-- %s.%s", service, port); 179 | if (!r.types[service]) { 180 | r.types[service] = {}; 181 | r.methods[service] = {}; 182 | r.files[service] = {}; 183 | r.namespaces[service] = {}; 184 | } 185 | if (!r.types[service][port]) { 186 | r.types[service][port] = {}; 187 | r.methods[service][port] = {}; 188 | r.files[service][port] = service + "/" + port; 189 | r.namespaces[service][port] = {}; 190 | } 191 | for (let maxi = 0; maxi < 32; maxi++) { 192 | for (const method of Object.keys(d[service][port])) { 193 | // console.log("---- %s", method); 194 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 195 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 196 | } 197 | const reg = cloneObj(collector.registered); 198 | collector.registerCollected(); 199 | const regKeys0 = Object.keys(collector.registered); 200 | const regKeys1 = Object.keys(reg); 201 | if (regKeys0.length === regKeys1.length) { 202 | let noChange = true; 203 | for (const rk of regKeys0) { 204 | if (collector.registered[rk] !== reg[rk]) { 205 | noChange = false; 206 | break; 207 | } 208 | } 209 | if (noChange) { 210 | break; 211 | } 212 | } 213 | if (maxi === 31) { 214 | console.warn("wsdl-to-ts: Aborted nested interface changes"); 215 | } 216 | } 217 | const collectedKeys = Object.keys(collector.registered); 218 | if (collectedKeys.length) { 219 | const ns = r.namespaces[service][port][collector.ns] = {}; 220 | for (const k of collectedKeys) { 221 | ns[k] = "export interface I" + k + " " + collector.registered[k]; 222 | } 223 | } 224 | for (const method of Object.keys(d[service][port])) { 225 | r.types[service][port]["I" + method + "Input"] = 226 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 227 | r.types[service][port]["I" + method + "Output"] = 228 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 229 | r.methods[service][port][method] = 230 | "(input: I" + method + "Input, " + 231 | "cb: (err: any | null," + 232 | " result: I" + method + "Output," + 233 | " raw: string, " + 234 | " soapHeader: {[k: string]: any; }) => any, " + 235 | "options?: any, " + 236 | "extraHeaders?: any" + 237 | ") => void"; 238 | } 239 | } 240 | } 241 | return r; 242 | }); 243 | } 244 | exports.wsdl2ts = wsdl2ts; 245 | function cloneObj(a) { 246 | const b = {}; 247 | for (const k of Object.keys(a)) { 248 | const t = typeof a[k]; 249 | b[k] = t === "object" ? 250 | Array.isArray(a[k]) ? a[k].slice() : cloneObj(a[k]) : a[k]; 251 | } 252 | return b; 253 | } 254 | function mergeTypedWsdl(a, ...bs) { 255 | const x = { 256 | client: null, 257 | files: cloneObj(a.files), 258 | methods: cloneObj(a.methods), 259 | namespaces: cloneObj(a.namespaces), 260 | types: cloneObj(a.types), 261 | }; 262 | for (const b of bs) { 263 | for (const service of Object.keys(b.files)) { 264 | if (!x.files.hasOwnProperty(service)) { 265 | x.files[service] = cloneObj(b.files[service]); 266 | x.methods[service] = cloneObj(b.methods[service]); 267 | x.types[service] = cloneObj(b.types[service]); 268 | x.namespaces[service] = cloneObj(b.namespaces[service]); 269 | } 270 | else { 271 | for (const port of Object.keys(b.files[service])) { 272 | if (!x.files[service].hasOwnProperty(port)) { 273 | x.files[service][port] = b.files[service][port]; 274 | x.methods[service][port] = cloneObj(b.methods[service][port]); 275 | x.types[service][port] = cloneObj(b.types[service][port]); 276 | x.namespaces[service][port] = cloneObj(b.namespaces[service][port]); 277 | } 278 | else { 279 | x.files[service][port] = b.files[service][port]; 280 | for (const method of Object.keys(b.methods[service][port])) { 281 | x.methods[service][port][method] = b.methods[service][port][method]; 282 | } 283 | for (const type of Object.keys(b.types[service][port])) { 284 | x.types[service][port][type] = b.types[service][port][type]; 285 | } 286 | for (const ns of Object.keys(b.namespaces[service][port])) { 287 | if (!x.namespaces[service][port].hasOwnProperty(ns)) { 288 | x.namespaces[service][port][ns] = cloneObj(b.namespaces[service][port][ns]); 289 | } 290 | else { 291 | for (const nsi of Object.keys(b.namespaces[service][port][ns])) { 292 | x.namespaces[service][port][ns][nsi] = b.namespaces[service][port][ns][nsi]; 293 | } 294 | } 295 | } 296 | } 297 | } 298 | } 299 | } 300 | } 301 | return x; 302 | } 303 | exports.mergeTypedWsdl = mergeTypedWsdl; 304 | function outputTypedWsdl(a) { 305 | const r = []; 306 | for (const service of Object.keys(a.files)) { 307 | for (const port of Object.keys(a.files[service])) { 308 | const d = { file: a.files[service][port], data: [] }; 309 | if (a.types[service] && a.types[service][port]) { 310 | for (const type of Object.keys(a.types[service][port])) { 311 | d.data.push("export interface " + type + " " + a.types[service][port][type]); 312 | } 313 | } 314 | if (a.methods[service] && a.methods[service][port]) { 315 | const ms = []; 316 | for (const method of Object.keys(a.methods[service][port])) { 317 | ms.push(method + ": " + a.methods[service][port][method] + ";"); 318 | } 319 | if (ms.length) { 320 | d.data.push("export interface I" + port + "Soap {\n " + ms.join("\n ") + "\n}"); 321 | } 322 | } 323 | if (a.namespaces[service] && a.namespaces[service][port]) { 324 | for (const ns of Object.keys(a.namespaces[service][port])) { 325 | const ms = []; 326 | for (const nsi of Object.keys(a.namespaces[service][port][ns])) { 327 | ms.push(a.namespaces[service][port][ns][nsi].replace(/\n/g, "\n ")); 328 | } 329 | if (ms.length) { 330 | d.data.push("export namespace " + ns + " {\n " + ms.join("\n ") + "\n}"); 331 | } 332 | } 333 | } 334 | r.push(d); 335 | } 336 | } 337 | return r; 338 | } 339 | exports.outputTypedWsdl = outputTypedWsdl; 340 | //# sourceMappingURL=wsdl-to-ts.js.map -------------------------------------------------------------------------------- /src/wsdl-to-ts.ts: -------------------------------------------------------------------------------- 1 | import * as soap from "soap"; 2 | // import { diffLines } from "diff"; 3 | 4 | export const nsEnums: { [k: string]: boolean } = {}; 5 | 6 | interface ITwoDown { 7 | [k: string]: { [k: string]: T }; 8 | } 9 | 10 | interface IInterfaceObject { 11 | [key: string]: string | IInterfaceObject; 12 | } 13 | 14 | export interface IInterfaceOptions { 15 | quoteProperties?: boolean; 16 | } 17 | 18 | export interface ITypedWsdl { 19 | client: soap.Client | null; 20 | files: ITwoDown; 21 | methods: ITwoDown<{ [k: string]: string }>; 22 | types: ITwoDown<{ [k: string]: string }>; 23 | namespaces: ITwoDown<{ [k: string]: { [k: string]: string } }>; 24 | } 25 | 26 | export class TypeCollector { 27 | 28 | public readonly registered: { [k: string]: string }; 29 | public readonly collected: { [k: string]: string }; 30 | 31 | constructor(public readonly ns: string) { 32 | this.registered = {}; 33 | this.collected = {}; 34 | } 35 | 36 | public registerCollected() { 37 | for (const k of Object.keys(this.collected)) { 38 | if (this.collected[k]) { 39 | this.registered[k] = this.collected[k]; 40 | } else { 41 | delete this.registered[k]; 42 | } 43 | delete this.collected[k]; 44 | } 45 | return this; 46 | } 47 | } 48 | 49 | function wsdlTypeToInterfaceObj(obj: IInterfaceObject, typeCollector?: TypeCollector): { [k: string]: any } { 50 | const r: { [k: string]: any } = {}; 51 | for (const k of Object.keys(obj)) { 52 | if (k === "targetNSAlias" || k === "targetNamespace") { 53 | continue; 54 | } 55 | const isArray = k.endsWith("[]"); 56 | const k2 = isArray ? k.substring(0, k.length - 2) : k; 57 | const v = obj[k]; 58 | const t = typeof v; 59 | if (t === "string") { 60 | const vstr = v as string; 61 | const [typeName, superTypeClass, typeData] = 62 | vstr.indexOf("|") === -1 ? [vstr, vstr, undefined] : vstr.split("|"); 63 | const typeFullName = obj.targetNamespace ? obj.targetNamespace + "#" + typeName : typeName; 64 | let typeClass = superTypeClass === "integer" ? "number" : superTypeClass; 65 | if (nsEnums[typeFullName] || typeData) { 66 | const filter = nsEnums[typeFullName] ? 67 | () => true : 68 | (x: string) => x !== "length" && x !== "pattern" && x !== "maxLength" && x !== "minLength"; 69 | const tdsplit = typeData.split(",").filter(filter); 70 | if (tdsplit.length) { 71 | typeClass = "\"" + tdsplit.join("\" | \"") + "\""; 72 | } 73 | } 74 | if (isArray) { 75 | if (/^[A-Za-z0-9.]+$/.test(typeClass)) { 76 | typeClass += "[]"; 77 | } else { 78 | typeClass = "Array<" + typeClass + ">"; 79 | } 80 | } 81 | r[k2] = "/** " + typeFullName + "(" + typeData + ") */ " + typeClass + ";"; 82 | } else { 83 | const to = wsdlTypeToInterfaceObj(v as IInterfaceObject, typeCollector); 84 | let tr: { [k: string]: any } | string; 85 | if (isArray) { 86 | let s = wsdlTypeToInterfaceString(to); 87 | if (typeCollector && typeCollector.ns) { 88 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === s) { 89 | s = typeCollector.ns + ".I" + k2 + ";"; 90 | } else if (typeCollector.collected.hasOwnProperty(k2)) { 91 | if (typeCollector.collected[k2] !== s) { 92 | typeCollector.collected[k2] = null; 93 | } 94 | } else { 95 | typeCollector.collected[k2] = s; 96 | } 97 | } 98 | s = s.replace(/\n/g, "\n "); 99 | 100 | if (s.startsWith("/**")) { 101 | const i = s.indexOf("*/") + 2; 102 | s = s.substring(0, i) + " Array<" + s.substring(i).trim().replace(/;$/, "") + ">;"; 103 | } else { 104 | s = s.trim().replace(/;$/, ""); 105 | if (/^[A-Za-z0-9.]+$/.test(s)) { 106 | s += "[];"; 107 | } else { 108 | s = "Array<" + s + ">;"; 109 | } 110 | } 111 | 112 | tr = s; 113 | } else { 114 | tr = to; 115 | if (typeCollector && typeCollector.ns) { 116 | const ss = wsdlTypeToInterfaceString(to); 117 | if (typeCollector.registered.hasOwnProperty(k2) && typeCollector.registered[k2] === ss) { 118 | tr = typeCollector.ns + ".I" + k2 + ";"; 119 | } else if (typeCollector.collected.hasOwnProperty(k2)) { 120 | if (typeCollector.collected[k2] !== ss) { 121 | typeCollector.collected[k2] = null; 122 | } 123 | } else { 124 | typeCollector.collected[k2] = ss; 125 | } 126 | } 127 | } 128 | r[k2] = tr; 129 | } 130 | } 131 | // console.log("wsdlTypeToInterfaceObj:", r); 132 | return r; 133 | } 134 | 135 | function wsdlTypeToInterfaceString(d: { [k: string]: any }, opts: IInterfaceOptions = {}): string { 136 | const r: string[] = []; 137 | for (const k of Object.keys(d)) { 138 | const t = typeof d[k]; 139 | let p: string = k; 140 | if (opts.quoteProperties || (opts.quoteProperties === undefined && !/^[A-Za-z][A-Za-z0-9_-]*$/.test(k))) { 141 | p = JSON.stringify(k); 142 | } 143 | if (t === "string") { 144 | const v = d[k]; 145 | if (v.startsWith("/**")) { 146 | const i = v.indexOf("*/") + 2; 147 | r.push(v.substring(0, i)); 148 | 149 | // for types like "xsd:string" only the "string" part is used 150 | const rawtype = v.substring(i).trim(); 151 | const colon = rawtype.indexOf(":"); 152 | if (colon !== -1) { 153 | r.push(p + ": " + rawtype.substring(colon + 1)); 154 | } else { 155 | r.push(p + ": " + rawtype); 156 | } 157 | } else { 158 | r.push(p + ": " + v); 159 | } 160 | } else { 161 | r.push(p + ": " + wsdlTypeToInterfaceString(d[k], opts).replace(/\n/g, "\n ") + ";"); 162 | } 163 | } 164 | if (r.length === 0) { 165 | return "{}"; 166 | } 167 | return "{\n " + r.join("\n ") + "\n}"; 168 | } 169 | 170 | function wsdlTypeToInterface(obj: { [k: string]: any }, typeCollector?: TypeCollector, opts?: IInterfaceOptions): string { 171 | return wsdlTypeToInterfaceString(wsdlTypeToInterfaceObj(obj, typeCollector), opts); 172 | } 173 | 174 | export function wsdl2ts(wsdlUri: string, opts?: IInterfaceOptions): Promise { 175 | return new Promise((resolve, reject) => { 176 | soap.createClient(wsdlUri, {}, (err, client) => { 177 | if (err) { 178 | reject(err); 179 | } else { 180 | resolve(client); 181 | } 182 | }); 183 | }).then((client) => { 184 | const r: ITypedWsdl = { 185 | client, 186 | files: {}, 187 | methods: {}, 188 | namespaces: {}, 189 | types: {}, 190 | }; 191 | const d = client.describe(); 192 | 193 | for (const service of Object.keys(d)) { 194 | for (const port of Object.keys(d[service])) { 195 | const collector = new TypeCollector(port + "Types"); 196 | // console.log("-- %s.%s", service, port); 197 | 198 | if (!r.types[service]) { 199 | r.types[service] = {}; 200 | r.methods[service] = {}; 201 | r.files[service] = {}; 202 | r.namespaces[service] = {}; 203 | } 204 | if (!r.types[service][port]) { 205 | r.types[service][port] = {}; 206 | r.methods[service][port] = {}; 207 | r.files[service][port] = service + "/" + port; 208 | r.namespaces[service][port] = {}; 209 | } 210 | 211 | for (let maxi = 0; maxi < 32; maxi++) { 212 | for (const method of Object.keys(d[service][port])) { 213 | // console.log("---- %s", method); 214 | 215 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 216 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 217 | } 218 | 219 | const reg = cloneObj(collector.registered); 220 | collector.registerCollected(); 221 | const regKeys0: string[] = Object.keys(collector.registered); 222 | const regKeys1: string[] = Object.keys(reg); 223 | if (regKeys0.length === regKeys1.length) { 224 | let noChange = true; 225 | for (const rk of regKeys0) { 226 | if (collector.registered[rk] !== reg[rk]) { 227 | noChange = false; 228 | break; 229 | } 230 | } 231 | if (noChange) { 232 | break; 233 | } 234 | } 235 | if (maxi === 31) { 236 | console.warn("wsdl-to-ts: Aborted nested interface changes"); 237 | } 238 | } 239 | 240 | const collectedKeys: string[] = Object.keys(collector.registered); 241 | if (collectedKeys.length) { 242 | const ns: { [k: string]: string } = r.namespaces[service][port][collector.ns] = {}; 243 | for (const k of collectedKeys) { 244 | ns[k] = "export interface I" + k + " " + collector.registered[k]; 245 | } 246 | } 247 | 248 | for (const method of Object.keys(d[service][port])) { 249 | 250 | r.types[service][port]["I" + method + "Input"] = 251 | wsdlTypeToInterface(d[service][port][method].input || {}, collector, opts); 252 | r.types[service][port]["I" + method + "Output"] = 253 | wsdlTypeToInterface(d[service][port][method].output || {}, collector, opts); 254 | r.methods[service][port][method] = 255 | "(input: I" + method + "Input, " + 256 | "cb: (err: any | null," + 257 | " result: I" + method + "Output," + 258 | " raw: string, " + 259 | " soapHeader: {[k: string]: any; }) => any, " + 260 | "options?: any, " + 261 | "extraHeaders?: any" + 262 | ") => void"; 263 | } 264 | } 265 | } 266 | 267 | return r; 268 | }); 269 | } 270 | 271 | function cloneObj(a: T): T { 272 | const b: T = {} as any; 273 | for (const k of Object.keys(a)) { 274 | const t = typeof a[k]; 275 | b[k] = t === "object" ? 276 | Array.isArray(a[k]) ? a[k].slice() : cloneObj(a[k]) : a[k]; 277 | } 278 | return b; 279 | } 280 | 281 | export function mergeTypedWsdl(a: ITypedWsdl, ...bs: ITypedWsdl[]): ITypedWsdl { 282 | const x: ITypedWsdl = { 283 | client: null, 284 | files: cloneObj(a.files), 285 | methods: cloneObj(a.methods), 286 | namespaces: cloneObj(a.namespaces), 287 | types: cloneObj(a.types), 288 | }; 289 | for (const b of bs) { 290 | for (const service of Object.keys(b.files)) { 291 | if (!x.files.hasOwnProperty(service)) { 292 | x.files[service] = cloneObj(b.files[service]); 293 | x.methods[service] = cloneObj(b.methods[service]); 294 | x.types[service] = cloneObj(b.types[service]); 295 | x.namespaces[service] = cloneObj(b.namespaces[service]); 296 | } else { 297 | for (const port of Object.keys(b.files[service])) { 298 | if (!x.files[service].hasOwnProperty(port)) { 299 | x.files[service][port] = b.files[service][port]; 300 | x.methods[service][port] = cloneObj(b.methods[service][port]); 301 | x.types[service][port] = cloneObj(b.types[service][port]); 302 | x.namespaces[service][port] = cloneObj(b.namespaces[service][port]); 303 | } else { 304 | x.files[service][port] = b.files[service][port]; 305 | for (const method of Object.keys(b.methods[service][port])) { 306 | x.methods[service][port][method] = b.methods[service][port][method]; 307 | } 308 | for (const type of Object.keys(b.types[service][port])) { 309 | x.types[service][port][type] = b.types[service][port][type]; 310 | } 311 | for (const ns of Object.keys(b.namespaces[service][port])) { 312 | if (!x.namespaces[service][port].hasOwnProperty(ns)) { 313 | x.namespaces[service][port][ns] = cloneObj(b.namespaces[service][port][ns]); 314 | } else { 315 | for (const nsi of Object.keys(b.namespaces[service][port][ns])) { 316 | x.namespaces[service][port][ns][nsi] = b.namespaces[service][port][ns][nsi]; 317 | } 318 | } 319 | } 320 | } 321 | } 322 | } 323 | } 324 | } 325 | return x; 326 | } 327 | 328 | export function outputTypedWsdl(a: ITypedWsdl): Array<{ file: string, data: string[] }> { 329 | const r: Array<{ file: string, data: string[] }> = []; 330 | for (const service of Object.keys(a.files)) { 331 | for (const port of Object.keys(a.files[service])) { 332 | const d: { file: string, data: string[] } = { file: a.files[service][port], data: [] }; 333 | if (a.types[service] && a.types[service][port]) { 334 | for (const type of Object.keys(a.types[service][port])) { 335 | d.data.push("export interface " + type + " " + a.types[service][port][type]); 336 | } 337 | } 338 | if (a.methods[service] && a.methods[service][port]) { 339 | const ms: string[] = []; 340 | for (const method of Object.keys(a.methods[service][port])) { 341 | ms.push(method + ": " + a.methods[service][port][method] + ";"); 342 | } 343 | if (ms.length) { 344 | d.data.push("export interface I" + port + "Soap {\n " + ms.join("\n ") + "\n}"); 345 | } 346 | } 347 | if (a.namespaces[service] && a.namespaces[service][port]) { 348 | for (const ns of Object.keys(a.namespaces[service][port])) { 349 | const ms: string[] = []; 350 | for (const nsi of Object.keys(a.namespaces[service][port][ns])) { 351 | ms.push(a.namespaces[service][port][ns][nsi].replace(/\n/g, "\n ")); 352 | } 353 | if (ms.length) { 354 | d.data.push("export namespace " + ns + " {\n " + ms.join("\n ") + "\n}"); 355 | } 356 | } 357 | } 358 | r.push(d); 359 | } 360 | } 361 | return r; 362 | } 363 | --------------------------------------------------------------------------------