From da0956fe2435dfccde1451ee3729d31e0660bf1b Mon Sep 17 00:00:00 2001 From: WolverinDEV Date: Fri, 8 Jan 2021 21:41:26 +0100 Subject: [PATCH] Fixed the declaration generation --- client/app/external.d.ts | 1 - loader/app/targets/shared.ts | 7 - package.json | 1 - scripts/build_declarations.sh | 22 - shared/generate_declarations.sh | 2 +- shared/js/connection/DummyVoiceConnection.ts | 9 +- shared/js/main.tsx | 1 - .../external-modal/PopoutEntrypoint.ts | 2 +- shared/tsconfig/tsconfig.declarations.json | 4 +- tools/build_dtsgen.sh | 13 - tools/dtsgen/declarator.ts | 475 ------------------ tools/dtsgen/declare_fixup.ts | 15 - tools/dtsgen/import_organizer.ts | 272 ---------- tools/dtsgen/index.ts | 129 ----- tools/dtsgen/test_modular/module_a.ts | 11 - tools/dtsgen/test_modular/test_01.ts | 9 - tools/dtsgen/test_modular/test_02.ts | 14 - tools/dtsgen/test_modular/test_03.ts | 8 - tools/dtsgen/test_modular/test_04.ts | 6 - tools/dtsgen/test_modular/test_05.ts | 11 - tools/dtsgen/test_modular/tools/dtsgen/out.d | 5 - tools/dtsgen/test_non_modular/test_01.ts | 47 -- tools/dtsgen/test_non_modular/test_02.ts | 49 -- tools/dtsgen/test_non_modular/test_03.ts | 13 - tools/dtsgen/test_non_modular/test_04.ts | 8 - tools/dtsgen/test_non_modular/test_05.ts | 13 - tools/dtsgen/test_non_modular/test_06.ts | 6 - tools/dtsgen/test_non_modular/test_07.ts | 7 - tools/dtsgen/tsconfig.json | 17 - webpack/build-definitions.d.ts | 9 + 30 files changed, 20 insertions(+), 1166 deletions(-) delete mode 100644 tools/build_dtsgen.sh delete mode 100644 tools/dtsgen/declarator.ts delete mode 100644 tools/dtsgen/declare_fixup.ts delete mode 100644 tools/dtsgen/import_organizer.ts delete mode 100644 tools/dtsgen/index.ts delete mode 100644 tools/dtsgen/test_modular/module_a.ts delete mode 100644 tools/dtsgen/test_modular/test_01.ts delete mode 100644 tools/dtsgen/test_modular/test_02.ts delete mode 100644 tools/dtsgen/test_modular/test_03.ts delete mode 100644 tools/dtsgen/test_modular/test_04.ts delete mode 100644 tools/dtsgen/test_modular/test_05.ts delete mode 100644 tools/dtsgen/test_modular/tools/dtsgen/out.d delete mode 100644 tools/dtsgen/test_non_modular/test_01.ts delete mode 100644 tools/dtsgen/test_non_modular/test_02.ts delete mode 100644 tools/dtsgen/test_non_modular/test_03.ts delete mode 100644 tools/dtsgen/test_non_modular/test_04.ts delete mode 100644 tools/dtsgen/test_non_modular/test_05.ts delete mode 100644 tools/dtsgen/test_non_modular/test_06.ts delete mode 100644 tools/dtsgen/test_non_modular/test_07.ts delete mode 100644 tools/dtsgen/tsconfig.json diff --git a/client/app/external.d.ts b/client/app/external.d.ts index 539aeb10..7a3e45af 100644 --- a/client/app/external.d.ts +++ b/client/app/external.d.ts @@ -3,6 +3,5 @@ interface Window { __native_client_init_shared: (webpackRequire: any) => void; } -declare const __webpack_require__; declare const __teaclient_preview_notice: any; declare const __teaclient_preview_error: any; \ No newline at end of file diff --git a/loader/app/targets/shared.ts b/loader/app/targets/shared.ts index 5a6a1892..84cc5518 100644 --- a/loader/app/targets/shared.ts +++ b/loader/app/targets/shared.ts @@ -2,13 +2,6 @@ import * as loader from "../loader/loader"; import {Stage} from "../loader/loader"; import {BrowserInfo, detect as detectBrowser,} from "detect-browser"; -declare global { - interface Window { - detectedBrowser: BrowserInfo, - removeLoaderContextMenuHook: () => void - } -} - loader.register_task(Stage.SETUP, { name: "app init", function: async () => { diff --git a/package.json b/package.json index ca6cd69e..745bbf82 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "description": "Welcome here! This repository is created with two reasons:\n 1. People can bring their own ideas and follow their implementation\n 2. People can see TeaSpeak Web client progress and avoid creating repetitive issues all the time.", "scripts": { "compile-project-base": "tsc -p tsbaseconfig.json", - "dtsgen": "node tools/dtsgen/index.js", "trgen": "node tools/trgen/index.js", "tsc": "tsc", "compile-scss": "sass loader/css/index.scss:loader/css/index.css", diff --git a/scripts/build_declarations.sh b/scripts/build_declarations.sh index 6ae0202b..a1ecdcef 100644 --- a/scripts/build_declarations.sh +++ b/scripts/build_declarations.sh @@ -5,28 +5,6 @@ BASEDIR=$(dirname "$0") source "${BASEDIR}/resolve_commands.sh" cd "$BASEDIR/../" || { echo "Failed to enter parent directory!"; exit 1; } -function generate_link() { - if [[ ! -L $2 ]] || [[ "${BASH_ARGV[0]}" == "force" ]]; then - if [[ -e $2 ]] || [[ -L $2 ]]; then - rm $2 - fi - ln -rs $1 $2 - fi -} - -function replace_tribble() { - #${1} => file name - echo "$(cat ${1} | sed -E 's/\/\/\/[ ]+.*/\n/')" > ${1} -} - - -#Building the generator -./tools/build_dtsgen.sh; _exit_code=$? -if [[ $_exit_code -ne 0 ]]; then - echo "Failed to build typescript declaration generator ($_exit_code)" - exit 1 -fi - #Shared ./shared/generate_declarations.sh; _exit_code=$? [[ $_exit_code -ne 0 ]] && { diff --git a/shared/generate_declarations.sh b/shared/generate_declarations.sh index aba560ad..8610126e 100644 --- a/shared/generate_declarations.sh +++ b/shared/generate_declarations.sh @@ -15,7 +15,7 @@ function generate_declaration() { fi fi - npm run dtsgen -- --config "$(pwd)/tsconfig/$1" -v + npm run tsc -- --project "$(pwd)/tsconfig/$1" if [[ ! -e $2 ]]; then echo "Failed to generate definitions" exit 1 diff --git a/shared/js/connection/DummyVoiceConnection.ts b/shared/js/connection/DummyVoiceConnection.ts index ca915ea5..8d68a916 100644 --- a/shared/js/connection/DummyVoiceConnection.ts +++ b/shared/js/connection/DummyVoiceConnection.ts @@ -60,8 +60,9 @@ export class DummyVoiceConnection extends AbstractVoiceConnection { } async acquireVoiceRecorder(recorder: RecorderProfile | undefined): Promise { - if(this.recorder === recorder) + if(this.recorder === recorder) { return; + } if(this.recorder) { this.recorder.callback_unmount = undefined; @@ -69,6 +70,7 @@ export class DummyVoiceConnection extends AbstractVoiceConnection { } await recorder?.unmount(); + const oldRecorder = this.recorder; this.recorder = recorder; if(this.recorder) { @@ -78,7 +80,10 @@ export class DummyVoiceConnection extends AbstractVoiceConnection { } } - this.events.fire("notify_recorder_changed", {}); + this.events.fire("notify_recorder_changed", { + oldRecorder, + newRecorder: recorder + }); } availableVoiceClients(): VoiceClient[] { diff --git a/shared/js/main.tsx b/shared/js/main.tsx index 6f43c985..71945824 100644 --- a/shared/js/main.tsx +++ b/shared/js/main.tsx @@ -20,7 +20,6 @@ import * as aplayer from "tc-backend/audio/player"; import * as ppt from "tc-backend/ppt"; import * as keycontrol from "./KeyControl"; import * as React from "react"; -import * as ReactDOM from "react-dom"; import * as global_ev_handler from "./events/ClientGlobalControlHandler"; import {global_client_actions} from "tc-shared/events/GlobalEvents"; import {FileTransferState, TransferProvider,} from "tc-shared/file/Transfer"; diff --git a/shared/js/ui/react-elements/external-modal/PopoutEntrypoint.ts b/shared/js/ui/react-elements/external-modal/PopoutEntrypoint.ts index b24650f7..3c414019 100644 --- a/shared/js/ui/react-elements/external-modal/PopoutEntrypoint.ts +++ b/shared/js/ui/react-elements/external-modal/PopoutEntrypoint.ts @@ -16,7 +16,7 @@ import "../../../file/RemoteAvatars"; import "../../../file/RemoteIcons"; if("__native_client_init_shared" in window) { - window.__native_client_init_shared(__webpack_require__); + (window as any).__native_client_init_shared(__webpack_require__); } let modalRenderer: ModalRenderer; diff --git a/shared/tsconfig/tsconfig.declarations.json b/shared/tsconfig/tsconfig.declarations.json index 24540810..c9c6bfea 100644 --- a/shared/tsconfig/tsconfig.declarations.json +++ b/shared/tsconfig/tsconfig.declarations.json @@ -10,7 +10,6 @@ "baseUrl": "../../", "paths": { "tc-shared/*": ["shared/js/*"], - // "tc-backend/web/*": ["web/app/*"], /* specific web part */ "tc-backend/*": ["shared/backend.d/*"], "tc-loader": ["loader/exports/loader.d.ts"], "svg-sprites/*": ["shared/svg-sprites/*"], @@ -23,6 +22,7 @@ "include": [ "../js/proto.ts", "../backend.d", - "../js/**/*.ts" + "../js/**/*.ts", + "../../webpack/build-definitions.d.ts" ] } \ No newline at end of file diff --git a/tools/build_dtsgen.sh b/tools/build_dtsgen.sh deleted file mode 100644 index d58f63a4..00000000 --- a/tools/build_dtsgen.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -BASEDIR=$(dirname "$0") -source "${BASEDIR}/../scripts/resolve_commands.sh" -cd "$BASEDIR/dtsgen" - -execute_tsc -p tsconfig.json -if [[ $? -ne 0 ]]; then - echo "Failed to build typescript declaration generator" - exit 1 -fi - -exit 0 \ No newline at end of file diff --git a/tools/dtsgen/declarator.ts b/tools/dtsgen/declarator.ts deleted file mode 100644 index 08947d67..00000000 --- a/tools/dtsgen/declarator.ts +++ /dev/null @@ -1,475 +0,0 @@ -import * as ts from "typescript"; -import {SyntaxKind} from "typescript"; -import * as webpack from "webpack"; - -interface Array { - last?(): T; -} - -if (!(Array).prototype.last){ - (Array).prototype.last = function(){ - if(this.length == 0) return undefined; - return this[this.length - 1]; - }; -} - -function has_modifier(modifiers: ts.ModifiersArray | undefined, target: T) : boolean { - if(modifiers) { - for(const modifier of modifiers) - if(modifier.kind == target) - return true; - } - return false; -} - -function append_modifier(modifiers: ts.ModifiersArray | undefined, target: T) : ts.ModifiersArray { - if(has_modifier(modifiers, target)) return modifiers; - - const sort_oder: {[key: number]:number} = {}; - sort_oder[SyntaxKind.AbstractKeyword] = 20; - sort_oder[SyntaxKind.AsyncKeyword] = 20; - sort_oder[SyntaxKind.ConstKeyword] = 20; - sort_oder[SyntaxKind.DeclareKeyword] = 20; - sort_oder[SyntaxKind.DefaultKeyword] = 20; - sort_oder[SyntaxKind.ExportKeyword] = 10; - sort_oder[SyntaxKind.PublicKeyword] = 30; - sort_oder[SyntaxKind.PrivateKeyword] = 30; - sort_oder[SyntaxKind.ProtectedKeyword] = 30; - sort_oder[SyntaxKind.ReadonlyKeyword] = 30; - sort_oder[SyntaxKind.StaticKeyword] = 30; - - const comparator = (a: ts.Modifier, b: ts.Modifier) => sort_oder[a.kind] - sort_oder[b.kind]; - return ts.createNodeArray( - [ts.createModifier(target as number), ...(modifiers || [])].sort(comparator).map((e, index, array) => { - const range = ts.getCommentRange(e); - if(range.end === -1 && range.pos === -1) - return e; - ts.setCommentRange(e, {pos: -1, end: -1}); - - const first_range = ts.getCommentRange(array[0]); - if(first_range.end === -1 && first_range.pos === -1) - ts.setCommentRange(array[0], range); - else - console.warn("Dropping comment on node because first node already has a comment"); - return e; - }), - (modifiers || {hasTrailingComma: false}).hasTrailingComma - ); -} - -//TODO: Transfer comments? -function remove_modifier(modifiers: ts.ModifiersArray | undefined, target: T) : ts.ModifiersArray { - if(!has_modifier(modifiers, target)) return modifiers; - - const new_modifiers: ts.Modifier[] = []; - for(const modifier of (modifiers || [])) - if(modifier.kind != target) - new_modifiers.push(modifier); - - return new_modifiers.length == 0 ? undefined : ts.createNodeArray(new_modifiers, (modifiers || {hasTrailingComma: false}).hasTrailingComma); -} - -const has_declare = (modifiers?: ts.ModifiersArray) => has_modifier(modifiers, SyntaxKind.DeclareKeyword); -const has_private = (modifiers?: ts.ModifiersArray) => has_modifier(modifiers, SyntaxKind.PrivateKeyword); -const append_declare = (modifiers?: ts.ModifiersArray, flag: boolean = true) => flag ? append_modifier(modifiers, SyntaxKind.DeclareKeyword) : remove_modifier(modifiers, SyntaxKind.DeclareKeyword); -const append_export = (modifiers?: ts.ModifiersArray, flag: boolean = true) => flag ? append_modifier(modifiers, SyntaxKind.ExportKeyword) : remove_modifier(modifiers, SyntaxKind.ExportKeyword); - -interface StackParameter { - flag_declare: boolean, - flag_namespace: boolean - flag_class: boolean; -} - -class StackParameters implements StackParameter { - flag_declare: boolean = false; - flag_namespace: boolean = false; - flag_class: boolean = false; - - stack: StackParameter[] = []; - - recalculate() { - { - this.flag_declare = false; - for(const layer of this.stack) { - if(layer.flag_declare) { - this.flag_declare = true; - break; - } - } - } - { - this.flag_namespace = false; - for(const layer of this.stack) { - if(layer.flag_namespace) { - this.flag_namespace = true; - break; - } - } - } - { - this.flag_class = false; - for(const layer of this.stack) { - if(layer.flag_class) { - this.flag_class = true; - break; - } - } - } - } - - push(layer: StackParameter) { - this.stack.push(layer); - this.recalculate(); - } - - pop?() : StackParameter { - const result = this.stack.pop(); - if(result) - this.recalculate(); - return result; - } -} - - -const generators: {[key: number]:((settings: _Settings, stack: StackParameters, node: ts.Node) => ts.Node | undefined) | undefined} = {}; - -function _generate(settings: _Settings, stack: StackParameters, layer: ts.Node[], node: ts.Node) { - //console.log(SyntaxKind[node.kind]); - if(generators[node.kind]) { - const result = generators[node.kind](settings, stack, node); - if(result) - layer.push(result); - return; - } - - switch(node.kind) { - case SyntaxKind.Identifier: - console.log("Unknown identifier %s", (node).text); - break; - case SyntaxKind.SourceFile: /* yeah we have something */ - node.forEachChild(n => _generate(settings, stack, layer, n)); - break; - case SyntaxKind.EndOfFileToken: /* oh no, we're at the end */ - break; - default: - //node.forEachChild(n => _generate(settings, stack, layer, n)); - const sf = node.getSourceFile(); - let { line, character } = sf ? sf.getLineAndCharacterOfPosition(node.getStart()) : {line: -1, character: -1}; - console.log(`${(sf || {fileName: "unknown"}).fileName} (${line + 1},${character + 1}): Unhandled type %s`, SyntaxKind[node.kind]); - } -} - -export interface Settings { - remove_private?: { - field?: boolean; - method?: boolean; - } | boolean; - - log?: { - unhandled_types: boolean; - } | boolean; - - module_mode?: boolean; -} - -class _Settings implements Settings { - remove_private: { - field: boolean; - method: boolean; - } = { - field: false, - method: false - }; - - log?: { - unhandled_types: boolean; - } = { - unhandled_types: false - }; - - module_mode?: boolean; -} - -function specify_settings(settings?: Settings) : _Settings { - const result: _Settings = new _Settings(); - Object.assign(result, settings); - if(!settings) - settings = {}; - - if(typeof(settings.remove_private) === "boolean") - result.remove_private = { - field: settings.remove_private, - method: settings.remove_private - }; - - if(typeof(settings.log) === "boolean") - result.log = { - unhandled_types: settings.log, - }; - if(typeof(settings.module_mode) !== "boolean") - result.module_mode = false; - return result; -} - -export function generate(file: ts.SourceFile, settings?: Settings) : ts.Node[]{ - const layer: ts.Node[] = []; - const stack = new StackParameters(); - const _settings = specify_settings(settings); - - stack.push({ - flag_class: false, - flag_declare: false, - flag_namespace: _settings.module_mode - }); - _generate(_settings, stack, layer, file); - stack.pop(); - - return layer; -} - -export function print(source: ts.SourceFile, nodes: ts.Node[]) : string { - const printer = ts.createPrinter({ - newLine: ts.NewLineKind.LineFeed - }); - - return printer.printList( - ts.ListFormat.SpaceBetweenBraces | ts.ListFormat.MultiLine | ts.ListFormat.PreferNewLine, - nodes as any, - source - ); -} - -/* generator impl */ -generators[SyntaxKind.ModuleBlock] = (settings, stack, node: ts.ModuleBlock) => { - const layer = [] as ts.Node[]; - node.forEachChild(n => _generate(settings, stack, layer, n)); - return ts.createModuleBlock(layer as any); -}; - -generators[SyntaxKind.ModuleDeclaration] = (settings, stack, node: ts.ModuleDeclaration) => { - //if (node.flags & ~(ts.NodeFlags.Namespace | ts.NodeFlags.NestedNamespace | ts.NodeFlags.ExportContext)) { - // throw "Some module declaration flags are not jet supported (flags: " + Object.keys(ts.NodeFlags).filter(e => node.flags & ts.NodeFlags[e]).join(", ") + ")"; - //} - - - stack.push({ - flag_declare: true, - flag_namespace: true, - flag_class: false - }); - const body = generators[node.body.kind](settings, stack, node.body) as ts.ModuleBlock; - stack.pop(); - - return ts.createModuleDeclaration(node.decorators, append_declare(node.modifiers, !stack.flag_declare), node.name, body, node.flags); -}; - - -const _generate_param_declare = (settings, stack, params: ts.NodeArray) => { - const parms: any[] = []; - for(const parm of params) - parms.push(generators[parm.kind](settings, stack, parm)); - return parms; -}; - -/* functions */ -generators[SyntaxKind.Parameter] = (settings, stack, node: ts.ParameterDeclaration) => { - return ts.createParameter(node.decorators, node.modifiers, node.dotDotDotToken, node.name, node.questionToken || (node.initializer ? ts.createToken(SyntaxKind.QuestionToken) : undefined), node.type, undefined); -}; - -generators[SyntaxKind.Constructor] = (settings, stack, node: ts.ConstructorDeclaration) => { - if(settings.remove_private.method && has_private(node.modifiers)) return; - - return ts.createConstructor(node.decorators, node.modifiers, _generate_param_declare(settings, stack, node.parameters), undefined); -}; - -generators[SyntaxKind.FunctionDeclaration] = (settings, stack, node: ts.FunctionDeclaration) => { - if(stack.flag_namespace && !has_modifier(node.modifiers, SyntaxKind.ExportKeyword)) return; - - let return_type = node.type; - if(has_modifier(node.modifiers, SyntaxKind.AsyncKeyword)) { - if(!return_type) - return_type = ts.createTypeReferenceNode("Promise", [ts.createIdentifier("any") as any]); - } - - return ts.createFunctionDeclaration(node.decorators, remove_modifier(append_declare(node.modifiers, !stack.flag_declare), SyntaxKind.AsyncKeyword), node.asteriskToken, node.name, node.typeParameters, _generate_param_declare(settings, stack, node.parameters), return_type, undefined); -}; - - -generators[SyntaxKind.MethodDeclaration] = (settings, stack, node: ts.MethodDeclaration) => { - if(settings.remove_private.method && has_private(node.modifiers)) return; - - return ts.createMethod(node.decorators, remove_modifier(node.modifiers, SyntaxKind.AsyncKeyword), node.asteriskToken, node.name, node.questionToken, node.typeParameters, _generate_param_declare(settings, stack, node.parameters), node.type, undefined); -}; - -generators[SyntaxKind.GetAccessor] = (settings, stack, node: ts.GetAccessorDeclaration) => { - if(settings.remove_private.method && has_private(node.modifiers)) return; - - node = ts.createGetAccessor(node.decorators, node.modifiers, node.name, _generate_param_declare(settings, stack, node.parameters), node.type, undefined); - return ts.addSyntheticLeadingComment(node, SyntaxKind.SingleLineCommentTrivia, " @ts-ignore", true); -}; -generators[SyntaxKind.SetAccessor] = (settings, stack, node: ts.SetAccessorDeclaration) => { - if(settings.remove_private.method && has_private(node.modifiers)) return; - node = ts.createSetAccessor(node.decorators, node.modifiers, node.name, _generate_param_declare(settings, stack, node.parameters), undefined); - return ts.addSyntheticLeadingComment(node, SyntaxKind.SingleLineCommentTrivia, " @ts-ignore", true); -}; - -/* variables or properties */ -generators[SyntaxKind.PropertyDeclaration] = (settings, stack, node: ts.PropertyDeclaration) => { - if(settings.remove_private.field && has_private(node.modifiers)) return; - - return ts.createProperty(node.decorators, append_declare(node.modifiers, !stack.flag_declare), node.name, node.questionToken, node.type, undefined); -}; - -/* class types */ -generators[SyntaxKind.ClassDeclaration] = (settings, stack, node: ts.ClassDeclaration) => { - if((stack.flag_namespace || settings.module_mode) && !has_modifier(node.modifiers, SyntaxKind.ExportKeyword)) - return; - - const members = [] as ts.Node[]; - { - stack.push({ - flag_declare: true, - flag_namespace: false, - flag_class: true - }); - - node.forEachChild(n => { - if(n.kind == SyntaxKind.Identifier) return; /* class identifier */ - if(ts.isModifier(n)) return; /* we have already class modifiers */ - - _generate(settings, stack, members, n) - }); - stack.pop(); - } - - /* - members.sort((a, b) => { - if(a.kind > b.kind) return 1; - if(a.kind < b.kind) return -1; - - if(a.kind == SyntaxKind.FunctionDeclaration) - return (b).name.escapedText.toString().localeCompare((a).name.escapedText.toString()); - - return 0; - }); - */ - - const decorators = node.decorators?.map(e => { - let text: string; - if(e.getSourceFile()) - text = e.getText(); - else - text = "*synthetic added annotation*"; - return ts.createIdentifier("/* " + text.replace("*/", "* /") + " */"); - }); - return ts.createClassDeclaration(decorators as any, append_export(append_declare(node.modifiers, !stack.flag_declare), stack.flag_namespace), node.name, node.typeParameters, node.heritageClauses, members as any); -}; - -generators[SyntaxKind.PropertySignature] = (settings, stack, node: ts.PropertySignature) => { - if(!node.type) - return node; - - let type: ts.TypeNode = node.type; - switch (node.type.kind) { - case SyntaxKind.LiteralType: - type = ts.createIdentifier("any") as any; - } - - return ts.createPropertySignature(node.modifiers, node.name, node.questionToken, type, undefined); -}; - -generators[SyntaxKind.InterfaceDeclaration] = (settings, stack, node: ts.InterfaceDeclaration) => { - if(settings.remove_private.field && has_private(node.modifiers)) return; - if(stack.flag_namespace && !has_modifier(node.modifiers, SyntaxKind.ExportKeyword)) return; - - const members: any[] = []; - for(const member of node.members) { - if(generators[member.kind]) - members.push(generators[member.kind](settings, stack, member)); - else - members.push(member); - } - - return ts.createInterfaceDeclaration(undefined, append_export(append_declare(node.modifiers, !stack.flag_declare), stack.flag_namespace), node.name, node.typeParameters, node.heritageClauses, members); -}; - -generators[SyntaxKind.VariableDeclaration] = (settings, stack, node: ts.VariableDeclaration) => { - return ts.createVariableDeclaration(node.name, node.type, undefined); -}; - -generators[SyntaxKind.VariableDeclarationList] = (settings, stack, node: ts.VariableDeclarationList) => { - const decls: any[] = []; - for(const decl of node.declarations) - decls.push(generators[SyntaxKind.VariableDeclaration](settings, stack, decl) as any); - return ts.createVariableDeclarationList(decls, node.flags); -}; - -generators[SyntaxKind.VariableStatement] = (settings, stack, node: ts.VariableStatement) => { - if(settings.remove_private.field && has_private(node.modifiers)) return; - - if(stack.flag_class) { - - } else if(stack.flag_namespace) { - if(!has_modifier(node.modifiers, SyntaxKind.ExportKeyword)) return; - } - - return ts.createVariableStatement(append_declare(node.modifiers, !stack.flag_declare), generators[node.declarationList.kind](settings, stack, node.declarationList) as any); -}; - -generators[SyntaxKind.TypeAliasDeclaration] = (settings, stack, node: ts.TypeAliasDeclaration) => { - if(stack.flag_namespace && !has_modifier(node.modifiers, SyntaxKind.ExportKeyword)) return; - - let type = node.type; - if(type.kind == SyntaxKind.UnionType) { - const union_members = []; - const union = node.type; - - for(const element of union.types as any as any[]) { - union_members.push(element); - } - - type = ts.createUnionTypeNode(union_members); - } - - return ts.createTypeAliasDeclaration(node.decorators, append_declare(node.modifiers, !stack.flag_declare), node.name, node.typeParameters, type); -}; - -generators[SyntaxKind.EnumMember] = (settings, stack, node: ts.EnumMember) => { - return ts.createEnumMember(node.name, node.initializer); -}; - -generators[SyntaxKind.EnumDeclaration] = (settings, stack, node: ts.EnumDeclaration) => { - const members: any[] = []; - - let uninitialized_index = 0; - for(const member of node.members) { - let initializer = member.initializer; - if(!initializer) - initializer = ts.createIdentifier((uninitialized_index++).toString()); - members.push(ts.createEnumMember(member.name, initializer)); - } - return ts.createEnumDeclaration(undefined, append_export(append_declare(node.modifiers, !stack.flag_declare), stack.flag_namespace), node.name, members); -}; - -generators[SyntaxKind.HeritageClause] = () => undefined; - -/* every variable in a block has no global scope! */ -generators[SyntaxKind.Block] = () => undefined; -generators[SyntaxKind.IfStatement] = () => undefined; - -/* Example for an ExpressionStatement would be: Module["text"] = "XXX"; */ -generators[SyntaxKind.ExpressionStatement] = () => undefined; -generators[SyntaxKind.SemicolonClassElement] = () => undefined; - -generators[SyntaxKind.ImportDeclaration] = (settings, stack, node: ts.ImportDeclaration) => { - const specifier = node.moduleSpecifier as ts.StringLiteral; - if(specifier.kind !== SyntaxKind.StringLiteral) - throw "cant handle import declaration with specifier of type " + specifier.kind; - - return ts.createImportDeclaration( - node.decorators, - node.modifiers, - node.importClause, - ts.createStringLiteral(specifier.text) - ); -}; \ No newline at end of file diff --git a/tools/dtsgen/declare_fixup.ts b/tools/dtsgen/declare_fixup.ts deleted file mode 100644 index b39eea28..00000000 --- a/tools/dtsgen/declare_fixup.ts +++ /dev/null @@ -1,15 +0,0 @@ -import * as ts from "typescript"; -import {SyntaxKind} from "typescript"; - -let has_export; -const visit = (node: ts.Node) => has_export = has_export || (node.modifiers || [] as any).filter(e => e.kind === SyntaxKind.ExportKeyword).length !== 0 || ts.forEachChild(node, visit); - -export function fix_declare_global(nodes: ts.Node[]) : ts.Node[] { - has_export = false; - - // nodes.forEach(visit); /* for a "deep" check */ - nodes.forEach(e => has_export = has_export || (e.modifiers || [] as any).filter(e => e.kind === SyntaxKind.ExportKeyword).length !== 0); - if(has_export) return nodes; - - return []; -} \ No newline at end of file diff --git a/tools/dtsgen/import_organizer.ts b/tools/dtsgen/import_organizer.ts deleted file mode 100644 index 36cbd262..00000000 --- a/tools/dtsgen/import_organizer.ts +++ /dev/null @@ -1,272 +0,0 @@ -import * as ts from "typescript"; -import {SyntaxKind} from "typescript"; - -interface RequiredType { - identifier: string; -} - -class ImportsParserData { - readonly source_file: ts.SourceFile; - required_type: RequiredType[]; - depth: number; - - constructor(sf: ts.SourceFile) { - this.source_file = sf; - this.required_type = []; - this.depth = 0; - } - - has_type(name: string) { - return this.required_type.findIndex(e => e.identifier === name) !== -1; - } -} - -export function remove_unused(source_file: ts.SourceFile, nodes: ts.Node[]) : ts.Node[] { - const data = new ImportsParserData(source_file); - - for(const node of nodes) - gather_required_types(node, data); - - //console.log(data.required_type); - const result2d = nodes.map(e => ts.transform(e, [ctx => node => eliminate_imports(node, ctx, data)])).map(e => e.transformed); - const result = []; - for(const entry of result2d) - result.push(...entry); - return result; -} - -function eliminate_imports(node: ts.Node, ctx: ts.TransformationContext, data: ImportsParserData) : ts.Node | undefined { - switch (node.kind) { - case SyntaxKind.ImportDeclaration: - const import_decl = node as ts.ImportDeclaration; - const clause = import_decl.importClause; - if(!clause?.namedBindings) return node; - - let new_binding; - if(clause.namedBindings.kind === SyntaxKind.NamedImports) { - const bindings = clause.namedBindings as ts.NamedImports; - const elements = bindings.elements.filter(e => data.has_type(e.name.text)); - if(!elements.length) return ts.createIdentifier(""); - - new_binding = ts.createNamedImports(elements); - } else if(clause.namedBindings.kind === SyntaxKind.NamespaceImport) { - const binding = clause.namedBindings as ts.NamespaceImport; - if(!data.has_type(binding.name.text)) - return ts.createIdentifier(""); - new_binding = binding; - } else - throw "unknown named binding"; - - return ts.createImportDeclaration(import_decl.decorators, import_decl.modifiers, new_binding, import_decl.moduleSpecifier); - default: - return ts.visitEachChild(node, e => eliminate_imports(e, ctx, data), ctx); - } -} - -const import_parsers: {[key: number]:(node: ts.Node, data: ImportsParserData) => void} = {}; -function gather_required_types(node: ts.Node, data: ImportsParserData) { - if(!node) return; - //console.log("%d %s", data.depth, SyntaxKind[node.kind]); - - if(import_parsers[node.kind]) { - import_parsers[node.kind](node, data); - return; - } - - data.depth++; - node.forEachChild(e => gather_required_types(e, data)); - data.depth--; -} - - -import_parsers[SyntaxKind.Parameter] = (node: ts.ParameterDeclaration, data) => { - if(!node.type) return; - - analyze_type_node(node.type, data); -}; - -import_parsers[SyntaxKind.TypeAliasDeclaration] = (node: ts.TypeAliasDeclaration, data) => { - (node.typeParameters || []).forEach(e => gather_required_types(e, data)); - if(node.type) analyze_type_node(node.type, data); - if(node.decorators) node.decorators.forEach(e => analyze_type_node(e.expression, data)); -}; - - -import_parsers[SyntaxKind.HeritageClause] = (node: ts.HeritageClause, data) => { - const heritage = node as ts.HeritageClause; - for(const type of heritage.types) - analyze_type_node(type, data); -}; - -import_parsers[SyntaxKind.TypeParameter] = (node: ts.TypeParameterDeclaration, data) => { - if(node.constraint) analyze_type_node(node.constraint, data); - if(node.default) analyze_type_node(node.default, data); -}; - -import_parsers[SyntaxKind.FunctionDeclaration] = (node: ts.FunctionDeclaration, data) => { - if(node.type) - analyze_type_node(node.type, data); - (node.typeParameters || []).forEach(e => gather_required_types(e, data)); - for(const param of node.parameters) - gather_required_types(param, data); -}; - -import_parsers[SyntaxKind.MethodSignature] = (node: ts.MethodSignature, data) => { - if(node.type) - analyze_type_node(node.type, data); - (node.typeParameters || []).forEach(e => gather_required_types(e, data)); - for(const param of node.parameters) - gather_required_types(param, data); -}; - -import_parsers[SyntaxKind.ClassDeclaration] = (node: ts.ClassDeclaration, data) => { - for(const e of node.heritageClauses || []) - gather_required_types(e, data); - - for(const e of node.typeParameters || []) - gather_required_types(e, data); - - for(const e of node.members || []) - gather_required_types(e, data); -}; - -import_parsers[SyntaxKind.PropertySignature] = (node: ts.PropertySignature, data) => { - analyze_type_node(node.type, data); -}; - -import_parsers[SyntaxKind.PropertyDeclaration] = (node: ts.PropertyDeclaration, data) => { - analyze_type_node(node.type, data); -}; - -import_parsers[SyntaxKind.MethodDeclaration] = (node: ts.MethodDeclaration, data) => { - for(const e of node.parameters || []) - gather_required_types(e, data); - for(const e of node.typeParameters || []) - gather_required_types(e, data); - analyze_type_node(node.type, data); -}; - -function analyze_type_node(node: ts.TypeNode | ts.LeftHandSideExpression, data: ImportsParserData) { - if(!node) return; - - //console.log("T: %s", SyntaxKind[node.kind]); - switch (node.kind) { - case SyntaxKind.AnyKeyword: - case SyntaxKind.VoidKeyword: - case SyntaxKind.ThisType: - case SyntaxKind.ThisKeyword: - case SyntaxKind.BooleanKeyword: - case SyntaxKind.StringKeyword: - case SyntaxKind.StringLiteral: - case SyntaxKind.LiteralType: - case SyntaxKind.NumberKeyword: - case SyntaxKind.ObjectKeyword: - case SyntaxKind.NullKeyword: - case SyntaxKind.NeverKeyword: - case SyntaxKind.UndefinedKeyword: - /* no special export type */ - break; - - case SyntaxKind.UnionType: - const union = node as ts.UnionTypeNode; - union.types.forEach(e => analyze_type_node(e, data)); - break; - - case SyntaxKind.IntersectionType: - const intersection = node as ts.IntersectionTypeNode; - intersection.types.forEach(e => analyze_type_node(e, data)); - break; - - case SyntaxKind.TypeReference: - const ref = node as ts.TypeReferenceNode; - if(ref.typeName.kind === SyntaxKind.Identifier) { - data.required_type.push({ - identifier: ref.typeName.text - }); - } else if(ref.typeName.kind === SyntaxKind.QualifiedName) { - let left: ts.Identifier | ts.QualifiedName = ref.typeName.left; - while(left.kind !== SyntaxKind.Identifier) - left = left.left; - data.required_type.push({ - identifier: left.text - }); - } else - throw "invalid type name"; - for(const e of ref.typeArguments || []) - analyze_type_node(e, data); - break; - - case SyntaxKind.Identifier: - data.required_type.push({ - identifier: (node as ts.Identifier).text - }); - break; - - case SyntaxKind.TypeLiteral: - const lit = node as ts.TypeLiteralNode; - for(const member of lit.members) - gather_required_types(member, data); - break; - - case SyntaxKind.ArrayType: - const array = node as ts.ArrayTypeNode; - analyze_type_node(array.elementType, data); - break; - - case SyntaxKind.FunctionType: - const fn = node as ts.FunctionTypeNode; - for(const param of fn.parameters || []) - gather_required_types(param, data); - - for(const type of fn.typeParameters || []) - gather_required_types(type, data); - break; - - case SyntaxKind.TypeOperator: - const to = node as ts.TypeOperatorNode; - analyze_type_node(to.type, data); - break; - - case SyntaxKind.ExpressionWithTypeArguments: - analyze_type_node((node as ts.ExpressionWithTypeArguments).expression, data); - break; - - case SyntaxKind.IndexedAccessType: - const ia = node as ts.IndexedAccessTypeNode; - analyze_type_node(ia.indexType, data); - analyze_type_node(ia.objectType, data); - break; - - case SyntaxKind.ParenthesizedType: - const parenthesized = node as ts.ParenthesizedTypeNode; - analyze_type_node(parenthesized.type, data); - break; - - case SyntaxKind.MappedType: - const mt = node as ts.MappedTypeNode; - analyze_type_node(mt.type, data); - break; - - case SyntaxKind.PropertyAccessExpression: - let pae = node as ts.PropertyAccessExpression; - while(pae.expression.kind == SyntaxKind.PropertyAccessExpression) - pae = pae.expression as ts.PropertyAccessExpression; - - analyze_type_node(pae.expression, data); - break; - - case SyntaxKind.ConstructorType: - let ct = node as ts.ConstructorTypeNode; - analyze_type_node(ct.type, data); - break; - - case SyntaxKind.TupleType: - break; - - case SyntaxKind.ConditionalType: - break; - - default: - throw "Unknown type " + SyntaxKind[node.kind] + ". Extend me :)"; - } -} diff --git a/tools/dtsgen/index.ts b/tools/dtsgen/index.ts deleted file mode 100644 index daa8fdad..00000000 --- a/tools/dtsgen/index.ts +++ /dev/null @@ -1,129 +0,0 @@ -import {readFileSync, writeFileSync, mkdir, existsSync} from "fs"; -import * as ts from "typescript"; -import * as decl from "./declarator"; -import * as glob from "glob"; -import * as path from "path"; -import * as mkdirp from "mkdirp"; -import {removeSync} from "fs-extra"; -import * as import_organizer from "./import_organizer"; -import * as declare_fixup from "./declare_fixup"; - -let source_files: string[] = []; -let exclude_files: string[] = []; -let target_directory: string = "out.d/"; -let verbose: boolean = false; -let config_file: string = undefined; -let base_path = process.cwd(); -let module_mode: boolean = false; - -let args = process.argv.slice(2); -while(args.length > 0) { - if(args[0] === "--file") { - source_files.push(args[1]); - args = args.slice(2); - } else if(args[0] === "--exclude") { - exclude_files.push(args[1]); - args = args.slice(2); - } else if(args[0] === "--destination") { - target_directory = args[1]; - args = args.slice(2); - } else if(args[0] === "-v" || args[0] === "--verbose") { - verbose = true; - args = args.slice(1); - } else if(args[0] === "-c" || args[0] === "--config") { - config_file = args[1]; - base_path = path.normalize(path.dirname(config_file)); - args = args.slice(2); - } else if(args[0] === "-b" || args[0] === "--base-directory") { - base_path = args[1]; - base_path = path.normalize(base_path); - args = args.slice(2); - } else if(args[0] === "-m" || args[0] === "--module") { - module_mode = true; - args = args.slice(1); - } else { - console.error("Invalid command line option %s", args[0]); - process.exit(1); - } -} - -if(config_file) { - console.log("Loading config file"); - const json = JSON.parse(readFileSync(config_file).toString()); - if(!json) { - console.error("Failed to parse config!"); - process.exit(1); - } - - if(Array.isArray(json["source_files"])) - source_files.push(...json["source_files"]); - if(Array.isArray(json["exclude"])) - exclude_files.push(...json["exclude"]); - if(typeof json["target_directory"] === "string") - target_directory = json["target_directory"]; - if(typeof json["base_directory"] === "string") - base_path = json["base_directory"]; - if(typeof json["modular"] === "boolean") - module_mode = json["modular"]; -} - -if(verbose) { - console.log("Base path: " + base_path); - console.log("Input files:"); - for(const file of source_files) - console.log(" - " + file); - console.log("Target directory: " + target_directory); -} - -if(existsSync(target_directory)) { - removeSync(target_directory); - if(existsSync(target_directory)) { - console.error("Failed to remove target directory (%s)", target_directory); - process.exit(1); - } -} - -const negate_files: string[] = [].concat.apply([], exclude_files.map(file => glob.sync(base_path + "/" + file))).map(file => path.normalize(file)); - -source_files.forEach(file => { - const glob_base = path.normalize(path.join(process.cwd(), base_path)); - if(verbose) - console.log("Globbing %s", glob_base); - glob.sync(glob_base + "/" + file).forEach(_file => { - _file = path.normalize(_file); - if(!_file.startsWith(glob_base)) { - /* this should never happen */ - console.log("Skipping %s because of unmatching base directory.", _file); - return; - } - for(const n_file of negate_files) { - if(n_file == _file) { - console.log("Skipping %s", _file); - return; - } - } - - const relpath = _file.substr(glob_base.length); - let source = ts.createSourceFile( - _file, - readFileSync(_file).toString(), - ts.ScriptTarget.ES2015, - true - ); - - console.log("Compile %s (%s)", _file, relpath); - const decl_nodes = decl.generate(source, { - remove_private: true, - module_mode: module_mode - }); - - const result = decl.print(source, declare_fixup.fix_declare_global(import_organizer.remove_unused(source, decl_nodes))); - - let fpath = path.join(base_path, target_directory, relpath); - fpath = fpath.substr(0, fpath.lastIndexOf(".")) + ".d.ts"; - mkdirp(path.normalize(path.dirname(fpath)), error => { - if(error) throw error; - writeFileSync(fpath, result); - }); - }); -}); diff --git a/tools/dtsgen/test_modular/module_a.ts b/tools/dtsgen/test_modular/module_a.ts deleted file mode 100644 index d8c86f08..00000000 --- a/tools/dtsgen/test_modular/module_a.ts +++ /dev/null @@ -1,11 +0,0 @@ -export class TestClass { - public say_hi() {} -} - -export function say_hello_a() { - -} - -export namespace X { - export class Y {} -} \ No newline at end of file diff --git a/tools/dtsgen/test_modular/test_01.ts b/tools/dtsgen/test_modular/test_01.ts deleted file mode 100644 index c492eb0c..00000000 --- a/tools/dtsgen/test_modular/test_01.ts +++ /dev/null @@ -1,9 +0,0 @@ -import * as module_a from "./module_a"; - -export class C extends module_a.TestClass {} - -export const say_a = module_a.say_hello_a; -export function say_b() { - console.log("B!"); - module_a.say_hello_a(); -} \ No newline at end of file diff --git a/tools/dtsgen/test_modular/test_02.ts b/tools/dtsgen/test_modular/test_02.ts deleted file mode 100644 index 478befd7..00000000 --- a/tools/dtsgen/test_modular/test_02.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* IMPOTZ COMMENT */ -import * as module_a from "./module_a"; - -/* CLASS COMMENT!*/ -export class C extends module_a.TestClass {} - -/* Say a comment */ -export const say_a = module_a.say_hello_a; - -/* Say b comment */ -export function say_b() { - console.log("B!"); - module_a.say_hello_a(); -} \ No newline at end of file diff --git a/tools/dtsgen/test_modular/test_03.ts b/tools/dtsgen/test_modular/test_03.ts deleted file mode 100644 index 40171465..00000000 --- a/tools/dtsgen/test_modular/test_03.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as a from "./module_a"; - -export declare class PokeModal { - //private source_map: a.TestClass[]; - private _awaiters_unique_ids: { - [unique_id: string]: ((resolved: a.TestClass) => any)[]; - }; -} \ No newline at end of file diff --git a/tools/dtsgen/test_modular/test_04.ts b/tools/dtsgen/test_modular/test_04.ts deleted file mode 100644 index 058d06c4..00000000 --- a/tools/dtsgen/test_modular/test_04.ts +++ /dev/null @@ -1,6 +0,0 @@ -declare global { - interface X { - - } -} -export = {}; \ No newline at end of file diff --git a/tools/dtsgen/test_modular/test_05.ts b/tools/dtsgen/test_modular/test_05.ts deleted file mode 100644 index 62a781dd..00000000 --- a/tools/dtsgen/test_modular/test_05.ts +++ /dev/null @@ -1,11 +0,0 @@ -enum A { - A = "_a", - B = 2, - C, - D = 3, - E -} - -export type B = { - a: A.B -} \ No newline at end of file diff --git a/tools/dtsgen/test_modular/tools/dtsgen/out.d b/tools/dtsgen/test_modular/tools/dtsgen/out.d deleted file mode 100644 index 2596a91c..00000000 --- a/tools/dtsgen/test_modular/tools/dtsgen/out.d +++ /dev/null @@ -1,5 +0,0 @@ - -/* File: tools\dtsgen\test_modular\test_01.ts */ -import * as module_a from "./module_a"; -export declare const say_a; -export declare function say_b(); diff --git a/tools/dtsgen/test_non_modular/test_01.ts b/tools/dtsgen/test_non_modular/test_01.ts deleted file mode 100644 index 2caafd2f..00000000 --- a/tools/dtsgen/test_non_modular/test_01.ts +++ /dev/null @@ -1,47 +0,0 @@ -function test() : string { - - return "IDK!"; -} - -class C { - -} -function test2() : C { - - return undefined; -} -// @ts-ignore -function test4() : D { - - return undefined; -} - -namespace T { - function C() { - - } - export function D() { - - } -} - -namespace T { - namespace Y { - function T() {} - - export function Y() {} - } -} - -namespace T { - export async function async_void() {} - export async function async_any() : Promise { - return "" as any; - } - export async function async_number() : Promise { - return 0; - } - export async function async_number_string() : Promise { - return 0; - } -} \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_02.ts b/tools/dtsgen/test_non_modular/test_02.ts deleted file mode 100644 index 477cfc9c..00000000 --- a/tools/dtsgen/test_non_modular/test_02.ts +++ /dev/null @@ -1,49 +0,0 @@ -class A { - constructor() {} - - a() : void{ } -} - -namespace B { - export class C { - constructor() {} - - a() : void{ } - - get c() { return undefined; } - set c(_) { } - } -} - - -declare class XXX { - private static _audioInstances; - private static _globalReplayScheduler; - private static _timeIndex; - private static _audioDestinationStream; - static initializeAudioController(): void; - speakerContext: AudioContext; - private playerState; - private audioCache; - private playingAudioCache; - private _volume; - private _codecCache; - private _timeIndex; - private _latencyBufferLength; - private _buffer_timeout; - allowBuffering: boolean; - onSpeaking: () => void; - onSilence: () => void; - constructor(); - initialize(): void; - close(): void; - playBuffer(buffer: AudioBuffer): void; - private playQueue; - private removeNode; - stopAudio(now?: boolean): void; - private testBufferQueue; - private reset_buffer_timeout; - volume: number; - private applyVolume; - codecCache(codec: number): CodecClientCache; -} \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_03.ts b/tools/dtsgen/test_non_modular/test_03.ts deleted file mode 100644 index e7e577fc..00000000 --- a/tools/dtsgen/test_non_modular/test_03.ts +++ /dev/null @@ -1,13 +0,0 @@ -enum YY { - H = "C", - B = "Y" -} - -interface X { - type: "", - c: YY.B -} - -class X { - static async x(); -} \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_04.ts b/tools/dtsgen/test_non_modular/test_04.ts deleted file mode 100644 index ea16fd7c..00000000 --- a/tools/dtsgen/test_non_modular/test_04.ts +++ /dev/null @@ -1,8 +0,0 @@ -type T = "a" | "b" | "c"; - -function _t(parm: T) {} -function __t() {} - -function __0(a: "a" | "b") { - -} \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_05.ts b/tools/dtsgen/test_non_modular/test_05.ts deleted file mode 100644 index 1168ff3b..00000000 --- a/tools/dtsgen/test_non_modular/test_05.ts +++ /dev/null @@ -1,13 +0,0 @@ -/// -/// - -abstract class InfoManagerBase { } - -/* Simple test case to fix the "decl" merge bug */ -/* -File: C:\Users\WolverinDEV\TeaSpeak\TeaWeb\tools\dtsgen\test\test_05.ts -declare /// -/// -abstract class InfoManagerBase { -} -*/ \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_06.ts b/tools/dtsgen/test_non_modular/test_06.ts deleted file mode 100644 index 08f30c6f..00000000 --- a/tools/dtsgen/test_non_modular/test_06.ts +++ /dev/null @@ -1,6 +0,0 @@ -/* get () is not allowed within decl files. So declare the variable instead */ - -class A { - get x() { return "X"; } - set x(value: string) {} -} \ No newline at end of file diff --git a/tools/dtsgen/test_non_modular/test_07.ts b/tools/dtsgen/test_non_modular/test_07.ts deleted file mode 100644 index 3585856f..00000000 --- a/tools/dtsgen/test_non_modular/test_07.ts +++ /dev/null @@ -1,7 +0,0 @@ -namespace C { - type B = string; -} -namespace C { - type B = string; - export function test(arg: string) {} -} \ No newline at end of file diff --git a/tools/dtsgen/tsconfig.json b/tools/dtsgen/tsconfig.json deleted file mode 100644 index 2d0faa7d..00000000 --- a/tools/dtsgen/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": ".", - "moduleResolution": "node", - "module": "commonjs", - "lib": ["es6", "dom"] - - /* - "typeRoots": [], - "types": [], - */ - }, - "files": [ - "declarator.ts", - "index.ts" - ] -} \ No newline at end of file diff --git a/webpack/build-definitions.d.ts b/webpack/build-definitions.d.ts index fd641c6f..960172d0 100644 --- a/webpack/build-definitions.d.ts +++ b/webpack/build-definitions.d.ts @@ -1,3 +1,5 @@ +import {BrowserInfo} from "detect-browser"; + declare global { interface BuildDefinitions { target: "web" | "client"; @@ -11,6 +13,13 @@ declare global { } const __build: BuildDefinitions; + const __webpack_require__; + + /* Well this isn't a build definition, but we have to declare it somewhere globally */ + interface Window { + detectedBrowser: BrowserInfo, + removeLoaderContextMenuHook: () => void + } } export {}; \ No newline at end of file