/// <summary>
        /// Build the model of the specified type.
        /// </summary>
        /// <param name="model">The model to build.</param>
        /// <param name="output">The output type.</param>
        /// <param name="format">The format to apply.</param>
        public override void Build(Model model, string output, string format)
        {
            if (format == "single")
            {
                var template = new JavaScriptTemplate();
                template.Target = null;
                template.Model  = model;

                if (string.IsNullOrEmpty(output))
                {
                    output = @"JavaScript";
                }

                if (!Directory.Exists(output))
                {
                    Directory.CreateDirectory(output);
                }

                var compiled = template.TransformText();
                File.WriteAllText(Path.Combine(output, @"spike-sdk.js"), compiled);
                File.WriteAllText(Path.Combine(output, @"spike-sdk.min.js"), new Minifier().MinifyJavaScript(compiled));
            }
            else
            {
                if (string.IsNullOrEmpty(output))
                {
                    output = @"JavaScript";
                }

                if (!Directory.Exists(output))
                {
                    Directory.CreateDirectory(output);
                }

                var template = new JavaScriptTemplate();
                template.Model = model;

                // Build ByteArray.js
                this.BuildTarget("ByteArray", output, template);

                // Build PacketCompressor.js
                this.BuildTarget("PacketCompressor", output, template);

                // Build PacketReader.js
                this.BuildTarget("PacketReader", output, template);

                // Build PacketWriter.js
                this.BuildTarget("PacketWriter", output, template);

                // Build TcpEngine.js
                this.BuildTarget("TcpEngine", output, template);

                // Build TcpChannel.js
                this.BuildTarget("TcpChannel", output, template);
            }
        }
        /// <summary>
        /// Build the model of the specified type.
        /// </summary>
        /// <param name="model">The model to build.</param>
        /// <param name="output">The output type.</param>
        /// <param name="format">The format to apply.</param>
        public override void Build(Model model, string output, string format)
        {
            if (format == "single")
            {
                var template = new JavaScriptTemplate();
                template.Target = null;
                template.Model = model;

                if (string.IsNullOrEmpty(output))
                    output = @"JavaScript";

                if (!Directory.Exists(output))
                    Directory.CreateDirectory(output);

                var compiled = template.TransformText();
                File.WriteAllText(Path.Combine(output, @"spike-sdk.js"), compiled);
                File.WriteAllText(Path.Combine(output, @"spike-sdk.min.js"), new Minifier().MinifyJavaScript(compiled));
            }
            else
            {
                if (string.IsNullOrEmpty(output))
                    output = @"JavaScript";

                if (!Directory.Exists(output))
                    Directory.CreateDirectory(output);

                var template = new JavaScriptTemplate();
                template.Model = model;

                // Build ByteArray.js
                this.BuildTarget("ByteArray", output, template);

                // Build PacketCompressor.js
                this.BuildTarget("PacketCompressor", output, template);

                // Build PacketReader.js
                this.BuildTarget("PacketReader", output, template);

                // Build PacketWriter.js
                this.BuildTarget("PacketWriter", output, template);

                // Build TcpEngine.js
                this.BuildTarget("TcpEngine", output, template);

                // Build TcpChannel.js
                this.BuildTarget("TcpChannel", output, template);

            }
        }