Browse Source

Adding ability to specify ambient TypeScript decl to packages

Josh Engebretson 10 years ago
parent
commit
5d4f9006b9

+ 10 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/AtomicWork.d.ts

@@ -4,6 +4,14 @@
 
 
 declare module Atomic {
 declare module Atomic {
 
 
+    export interface PathInfo {
+
+      pathName: string;
+      fileName: string;
+      ext: string;
+      
+    }
+
     /*
     /*
         export enum UIWidgetEventType {
         export enum UIWidgetEventType {
 
 
@@ -52,6 +60,8 @@ declare module Atomic {
     export function addTrailingSlash(path: string): string;
     export function addTrailingSlash(path: string): string;
 		export function getExtension(path: string): string;
 		export function getExtension(path: string): string;
 
 
+    export function splitPath(path: string): PathInfo;
+
 }
 }
 
 
 declare module ToolCore {
 declare module ToolCore {

+ 1 - 2
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/MainFrame.ts

@@ -99,7 +99,7 @@ class MainFrame extends ScriptWidget {
         }
         }
     }
     }
 
 
-    handleResourceEditorChanged(data) {
+    handleResourceEditorChanged(data):void {
 
 
         var editor = <Editor.ResourceEditor> data.editor;
         var editor = <Editor.ResourceEditor> data.editor;
 
 
@@ -113,7 +113,6 @@ class MainFrame extends ScriptWidget {
 
 
         }
         }
 
 
-
     }
     }
 
 
 
 

+ 3 - 3
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ResourceFrame.ts

@@ -29,9 +29,9 @@ class ResourceFrame extends ScriptWidget {
 
 
     }
     }
 
 
-    handleEditResource(data) {
+    handleEditResource(ev: UIEvents.EditorResourceEvent) {
 
 
-        var path = data.path;
+        var path = ev.path;
 
 
         if (this.editors[path]) {
         if (this.editors[path]) {
 
 
@@ -39,7 +39,7 @@ class ResourceFrame extends ScriptWidget {
 
 
         }
         }
 
 
-        var ext = Atomic.getExtension(data.path);
+        var ext = Atomic.getExtension(path);
 
 
         var editor: Editor.ResourceEditor = null;
         var editor: Editor.ResourceEditor = null;
 
 

+ 3 - 4
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/ScriptWidget.ts

@@ -20,16 +20,15 @@ class ScriptWidget extends Atomic.UIWidget {
 
 
     }
     }
 
 
-    handleWidgetEvent(ev: Atomic.UIWidgetEvent): boolean {
+    handleWidgetEvent(ev: Atomic.UIWidgetEvent): void {
 
 
         if (ev.type == Atomic.UI.EVENT_TYPE_CLICK) {
         if (ev.type == Atomic.UI.EVENT_TYPE_CLICK) {
 
 
-            return this.onEventClick(ev.target, ev.refid);
+            this.onEventClick(ev.target, ev.refid);
+            return;
 
 
         }
         }
 
 
-        return false;
-
     }
     }
 
 
 }
 }

+ 9 - 0
Data/AtomicEditor/Resources/EditorData/AtomicEditor/typescript/ui/UIEvents.ts

@@ -1,5 +1,14 @@
 
 
 export const MessageModalEvent = "MessageModalEvent";
 export const MessageModalEvent = "MessageModalEvent";
+
 export const EditResource = "EditResource";
 export const EditResource = "EditResource";
+
+export interface EditorResourceEvent {
+
+  // The full path to the resource to edit
+  path: string;
+
+}
+
 export const CloseResourceEditor = "CloseResourceEditor";
 export const CloseResourceEditor = "CloseResourceEditor";
 export const ResourceEditorChanged = "ResourceEditorChanged";
 export const ResourceEditorChanged = "ResourceEditorChanged";

+ 38 - 0
Source/AtomicJS/Javascript/JSFileSystem.cpp

@@ -63,6 +63,38 @@ static int Atomic_GetParentPath(duk_context* ctx)
     return 1;
     return 1;
 }
 }
 
 
+static int FileSystem_ScanDir(duk_context* ctx)
+{
+    duk_push_this(ctx);
+
+    FileSystem* fs = js_to_class_instance<FileSystem>(ctx, -1, 0);
+
+    if ( !duk_is_string(ctx, 0) || !duk_is_string(ctx, 1) ||
+            !duk_is_number(ctx, 2) || !duk_is_boolean(ctx, 3))
+    {
+        duk_push_string(ctx, "FileSystem::ScanDir bad args");
+        duk_throw(ctx);
+    }
+
+    const char* pathName = duk_to_string(ctx, 0);
+    const char* filter = duk_to_string(ctx, 1);
+    unsigned flags = duk_to_number(ctx, 2);
+    bool recursive = duk_to_boolean(ctx, 3) ? true : false;
+
+    Vector<String> result;
+
+    fs->ScanDir(result, pathName, filter, flags, recursive);
+
+    duk_push_array(ctx);
+
+    for (unsigned i = 0; i < result.Size(); i++)
+    {
+        duk_push_string(ctx, result[i].CString());
+        duk_put_prop_index(ctx, -2, i);
+    }
+
+    return 1;
+}
 
 
 void jsapi_init_filesystem(JSVM* vm)
 void jsapi_init_filesystem(JSVM* vm)
 {
 {
@@ -83,6 +115,12 @@ void jsapi_init_filesystem(JSVM* vm)
     duk_put_prop_string(ctx, -2, "getExtension");
     duk_put_prop_string(ctx, -2, "getExtension");
 
 
     duk_pop(ctx); // pop Atomic object
     duk_pop(ctx); // pop Atomic object
+
+    js_class_get_prototype(ctx, "Atomic", "FileSystem");
+    duk_push_c_function(ctx, FileSystem_ScanDir, 4);
+    duk_put_prop_string(ctx, -2, "scanDir");
+    duk_pop(ctx);
+
 }
 }
 
 
 }
 }

+ 0 - 38
Source/AtomicJS/Javascript/JSIO.cpp

@@ -22,39 +22,6 @@ static int File_ReadText(duk_context* ctx)
     return 1;
     return 1;
 }
 }
 
 
-static int FileSystem_ScanDir(duk_context* ctx)
-{
-    duk_push_this(ctx);
-
-    FileSystem* fs = js_to_class_instance<FileSystem>(ctx, -1, 0);
-
-    if ( !duk_is_string(ctx, 0) || !duk_is_string(ctx, 1) ||
-            !duk_is_number(ctx, 2) || !duk_is_boolean(ctx, 3))
-    {
-        duk_push_string(ctx, "FileSystem::ScanDir bad args");
-        duk_throw(ctx);
-    }
-
-    const char* pathName = duk_to_string(ctx, 0);
-    const char* filter = duk_to_string(ctx, 1);
-    unsigned flags = duk_to_number(ctx, 2);
-    bool recursive = duk_to_boolean(ctx, 3) ? true : false;
-
-    Vector<String> result;
-
-    fs->ScanDir(result, pathName, filter, flags, recursive);
-
-    duk_push_array(ctx);
-
-    for (unsigned i = 0; i < result.Size(); i++)
-    {
-        duk_push_string(ctx, result[i].CString());
-        duk_put_prop_index(ctx, -2, i);
-    }
-
-    return 1;
-}
-
 void jsapi_init_io(JSVM* vm)
 void jsapi_init_io(JSVM* vm)
 {
 {
     duk_context* ctx = vm->GetJSContext();
     duk_context* ctx = vm->GetJSContext();
@@ -64,11 +31,6 @@ void jsapi_init_io(JSVM* vm)
     duk_put_prop_string(ctx, -2, "readText");
     duk_put_prop_string(ctx, -2, "readText");
     duk_pop(ctx);
     duk_pop(ctx);
 
 
-    js_class_get_prototype(ctx, "Atomic", "FileSystem");
-    duk_push_c_function(ctx, FileSystem_ScanDir, 4);
-    duk_put_prop_string(ctx, -2, "scanDir");
-    duk_pop(ctx);
-
 }
 }
 
 
 }
 }

+ 8 - 0
Source/AtomicJS/Packages/Atomic/Core.json

@@ -9,5 +9,13 @@
 		"Object" : {
 		"Object" : {
 			"SendEvent" : ["StringHash"]
 			"SendEvent" : ["StringHash"]
 		}
 		}
+	},
+	"typescript_decl" : {
+
+		"Object" : [
+			"sendEvent(eventType:string, data?:Object);",
+			"subscribeToEvent(eventType:string, callback:(data:any)=>void);",
+			"subscribeToEvent(sender:AObject, eventType:string, callback:(data:any)=>void);"
+		]
 	}
 	}
 }
 }

+ 5 - 1
Source/AtomicJS/Packages/Atomic/IO.json

@@ -6,6 +6,10 @@
 		"File" : {
 		"File" : {
 			"File" : ["Context", "String", "FileMode"]
 			"File" : ["Context", "String", "FileMode"]
 		}
 		}
+	},
+	"typescript_decl" : {
+		"FileSystem" : [
+			"scanDir(pathName:string, filter:string, flags:number, recursive:boolean);"
+		]
 	}
 	}
-
 }
 }

+ 6 - 0
Source/ToolCore/JSBind/JSBClass.h

@@ -105,6 +105,10 @@ public:
     void AddFunctionExclude(JSBFunctionSignature* exclude) { excludes_.Push(exclude); }
     void AddFunctionExclude(JSBFunctionSignature* exclude) { excludes_.Push(exclude); }
     void AddPropertyFunction(JSBFunction* function);
     void AddPropertyFunction(JSBFunction* function);
 
 
+    void AddTypeScriptDecl(const String& decl) { typeScriptDecls_.Push(decl); }
+    unsigned GetNumTypeScriptDecl() { return typeScriptDecls_.Size(); }
+    const String& GetTypeScriptDecl(unsigned idx) { return typeScriptDecls_[idx]; }
+
     void Preprocess();
     void Preprocess();
     void Process();
     void Process();
     void PostProcess();
     void PostProcess();
@@ -127,6 +131,8 @@ private:
     PODVector<JSBFunctionSignature*> overrides_;
     PODVector<JSBFunctionSignature*> overrides_;
     PODVector<JSBFunctionSignature*> excludes_;
     PODVector<JSBFunctionSignature*> excludes_;
 
 
+    Vector<String> typeScriptDecls_;
+
     bool isAbstract_;
     bool isAbstract_;
     bool isObject_;
     bool isObject_;
 
 

+ 35 - 1
Source/ToolCore/JSBind/JSBModule.cpp

@@ -65,6 +65,7 @@ void JSBModule::VisitHeaders()
 
 
     ProcessOverloads();
     ProcessOverloads();
     ProcessExcludes();
     ProcessExcludes();
+    ProcessTypeScriptDecl();
 
 
 }
 }
 
 
@@ -168,7 +169,7 @@ void JSBModule::ProcessExcludes()
 
 
             if (!klass)
             if (!klass)
             {
             {
-                ErrorExit("Bad overload klass");
+                ErrorExit("Bad exclude klass");
             }
             }
 
 
             JSONValue classexcludes = excludes.GetChild(classname);
             JSONValue classexcludes = excludes.GetChild(classname);
@@ -198,6 +199,39 @@ void JSBModule::ProcessExcludes()
     }
     }
 }
 }
 
 
+void JSBModule::ProcessTypeScriptDecl()
+{
+    // TypeScript declarations
+
+    JSONValue root = moduleJSON_->GetRoot();
+
+    JSONValue decl = root.GetChild("typescript_decl");
+
+    if (decl.IsObject())
+    {
+        Vector<String> childNames = decl.GetChildNames();
+
+        for (unsigned j = 0; j < childNames.Size(); j++)
+        {
+            String classname = childNames.At(j);
+
+            JSBClass* klass = GetClass(classname);
+
+            if (!klass)
+            {
+                ErrorExit("Bad TypeScript decl klass");
+            }
+
+            JSONValue classdecl = decl.GetChild(classname);
+
+            for (unsigned k = 0; k < classdecl.GetSize(); k++)
+            {
+                klass->AddTypeScriptDecl(classdecl.GetString(k));
+            }
+        }
+    }
+}
+
 void JSBModule::ScanHeaders()
 void JSBModule::ScanHeaders()
 {
 {
     JSBind* jsbind = GetSubsystem<JSBind>();
     JSBind* jsbind = GetSubsystem<JSBind>();

+ 1 - 0
Source/ToolCore/JSBind/JSBModule.h

@@ -62,6 +62,7 @@ private:
 
 
     void ProcessOverloads();
     void ProcessOverloads();
     void ProcessExcludes();
     void ProcessExcludes();
+    void ProcessTypeScriptDecl();
 
 
     void ScanHeaders();
     void ScanHeaders();
 
 

+ 5 - 0
Source/ToolCore/JSBind/JSBTypeScript.cpp

@@ -199,6 +199,11 @@ void JSBTypeScript::ExportModuleClasses(JSBModule* module)
 
 
         }
         }
 
 
+        for (unsigned j = 0; j < klass->GetNumTypeScriptDecl(); j++)
+        {
+            source_ += "      " + klass->GetTypeScriptDecl(j) + "\n";
+        }
+
 
 
 
 
         source_ += "\n   }\n\n";
         source_ += "\n   }\n\n";