Exemplo n.º 1
0
        public void Assets_Can_Be_Retrieved_From_Multiple_Configurations()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest1.json", AssetOutputPath = "~/dist/1"
            };
            var config2 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest2.json", AssetOutputPath = "~/dist/2"
            };
            var config3 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest3.json", AssetOutputPath = ""
            };
            var config4 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest4.json", AssetOutputPath = "~/dist/ignored"
            };

            SetupManifestFile(config1.AssetManifestPath, @"{ ""code"": { ""js"": ""file.1.js"" } }");
            SetupManifestFile(config2.AssetManifestPath, @"{ ""style"": { ""css"": ""file.2.css"" } }");
            SetupManifestFile(config3.AssetManifestPath, @"{ ""file"": { ""js"": ""file.3.js"" } }");
            SetupManifestFile(config4.AssetManifestPath, @"{ ""other"": { ""js"": ""http://server/file.4.js"" } }");

            var webpack = new Webpack(new[] { config1, config2, config3, config4 }, _pathMappingService.Object);

            Assert.That(webpack.GetAssetUrl("code", "js"), Is.EqualTo("~/dist/1/file.1.js"));
            Assert.That(webpack.GetAssetUrl("style", "css"), Is.EqualTo("~/dist/2/file.2.css"));
            Assert.That(webpack.GetAssetUrl("file", "js"), Is.EqualTo("file.3.js"));
            Assert.That(webpack.GetAssetUrl("other", "js"), Is.EqualTo("http://server/file.4.js"));
        }
Exemplo n.º 2
0
 public void Setup()
 {
     _server    = new Mock <HttpServerUtilityBase>();
     _config    = new WebpackConfig();
     _builder   = new WebpackBuilder(_server.Object);
     _tempFiles = new List <string>();
 }
        public void Assets_Can_Be_Retrieved_When_Entrypoints_Provides_Multiple_Assets()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest5.json", AssetOutputPath = ""
            };

            SetupManifestFile(config1, @"{
                                                            ""main"": {
                                                                ""js"": [
                                                                      ""/dist/first-script.js"",
                                                                      ""/dist/second-script.js"",
                                                                      ""/dist/third-script.js""
                                                                      ],
                                                                ""css"": [
                                                                    ""/dist/first-style.css"",
                                                                    ""/dist/second-style.css"",
                                                                    ]
                                                                }
                                                            }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(config1);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.That(webpack.GetAssetsUrl("main", "js").Count, Is.EqualTo(3));
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/dist/first-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[1], Is.EqualTo("/dist/second-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[2], Is.EqualTo("/dist/third-script.js"));

            Assert.That(webpack.GetAssetsUrl("main", "css").Count, Is.EqualTo(2));
            Assert.That(webpack.GetAssetsUrl("main", "css")[0], Is.EqualTo("/dist/first-style.css"));
            Assert.That(webpack.GetAssetsUrl("main", "css")[1], Is.EqualTo("/dist/second-style.css"));
        }
Exemplo n.º 4
0
        public void Assets_Can_Be_Retrieved_From_Multiple_Configurations()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest1.json", AssetOutputPath = "~/dist/1"
            };
            var config2 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest2.json", AssetOutputPath = "~/dist/2"
            };
            var config3 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest3.json", AssetOutputPath = ""
            };
            var config4 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest4.json", AssetOutputPath = "~/dist/ignored"
            };

            SetupManifestFile(config1, @"{ ""code"": { ""js"": ""file.1.js"" } }");
            SetupManifestFile(config2, @"{ ""style"": { ""css"": ""file.2.css"" } }");
            SetupManifestFile(config3, @"{ ""file"": { ""js"": ""file.3.js"" } }");
            SetupManifestFile(config4, @"{ ""other"": { ""js"": ""http://server/file.4.js"" } }");

            var manifest1 = WebpackAssetsDictionary.FromConfig(config1);
            var manifest2 = WebpackAssetsDictionary.FromConfig(config2);
            var manifest3 = WebpackAssetsDictionary.FromConfig(config3);
            var manifest4 = WebpackAssetsDictionary.FromConfig(config4);

            var webpack = new Webpack(new[] { manifest1, manifest2, manifest3, manifest4 });

            Assert.That(webpack.GetAssetUrl("code", "js"), Is.EqualTo("~/dist/1/file.1.js"));
            Assert.That(webpack.GetAssetUrl("style", "css"), Is.EqualTo("~/dist/2/file.2.css"));
            Assert.That(webpack.GetAssetUrl("file", "js"), Is.EqualTo("file.3.js"));
            Assert.That(webpack.GetAssetUrl("other", "js"), Is.EqualTo("http://server/file.4.js"));
        }
Exemplo n.º 5
0
        private void SetupManifestFile(WebpackConfig config, string manifestContent)
        {
            var tempFile = Path.GetTempFileName();

            _tempFiles.Add(tempFile);
            config.AssetManifestPath = tempFile;
            _server.Setup(s => s.MapPath(config.AssetManifestPath)).Returns(tempFile);
            File.WriteAllText(tempFile, manifestContent);
        }
Exemplo n.º 6
0
        public void Assets_Can_Be_Retrieved_From_Multiple_Configurations()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest1.json", AssetOutputPath = "~/dist/1"
            };
            var config2 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest2.json", AssetOutputPath = "~/dist/2"
            };

            SetupManifestFile(config1.AssetManifestPath, @"{ ""code"": { ""js"": ""file.1.js"" } }");
            SetupManifestFile(config2.AssetManifestPath, @"{ ""style"": { ""css"": ""file.2.css"" } }");

            var webpack = new Webpack(new[] { config1, config2 }, _server.Object);

            Assert.That(webpack.GetAssetUrl("code", "js"), Is.EqualTo("~/dist/1/file.1.js"));
            Assert.That(webpack.GetAssetUrl("style", "css"), Is.EqualTo("~/dist/2/file.2.css"));
        }
        public void Assets_have_proper_url_when_using_AsemblyOutputPath()
        {
            var config1 = new WebpackConfig {
                AssetManifestPath = "~/scripts/manifest5.json", AssetOutputPath = "//somecdn.com/path/"
            };

            SetupManifestFile(config1, @"{
                                                            ""main"": {
                                                                ""js"": [
                                                                      ""/dist/first-script.js"",
                                                                      ""/dist/second-script.js"",
                                                                      ""/dist/third-script.js""
                                                                      ],
                                                                ""css"": [
                                                                    ""/dist/first-style.css"",
                                                                    ""/dist/second-style.css"",
                                                                    ]
                                                                }
                                                            }");

            WebpackAssetsDictionary webpackAssetDictionary = WebpackAssetsDictionary.FromConfig(config1);

            var webpack = new Webpack(new[] { webpackAssetDictionary });

            Assert.That(webpack.GetAssetsUrl("main", "js").Count, Is.EqualTo(3));
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("//somecdn.com/path/dist/first-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[1], Is.EqualTo("//somecdn.com/path/dist/second-script.js"));
            Assert.That(webpack.GetAssetsUrl("main", "js")[2], Is.EqualTo("//somecdn.com/path/dist/third-script.js"));

            Assert.That(webpack.GetAssetsUrl("main", "css").Count, Is.EqualTo(2));
            Assert.That(webpack.GetAssetsUrl("main", "css")[0], Is.EqualTo("//somecdn.com/path/dist/first-style.css"));
            Assert.That(webpack.GetAssetsUrl("main", "css")[1], Is.EqualTo("//somecdn.com/path/dist/second-style.css"));

            // Test variations of the AssetOutputPath
            webpackAssetDictionary.RootFolder = "/root";
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));

            webpackAssetDictionary.RootFolder = "/root//////"; // extra slashes
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));

            webpackAssetDictionary.RootFolder = "\\root\\"; // back slash converted to forward slashes
            Assert.That(webpack.GetAssetsUrl("main", "js")[0], Is.EqualTo("/root/dist/first-script.js"));
        }
Exemplo n.º 8
0
        /// <summary>
        /// Generate Azure TypeScript client code
        /// </summary>
        /// <param name="cm"></param>
        /// <returns></returns>
        public override async Task Generate(CodeModel cm)
        {
            var codeModel = cm as CodeModelTSa;

            if (codeModel == null)
            {
                throw new InvalidCastException("CodeModel is not a Azure TypeScript code model.");
            }

            codeModel.PackageName    = Settings.Instance.PackageName;
            codeModel.PackageVersion = Settings.Instance.PackageVersion;

            // Service client
            var serviceClientTemplate = new AzureServiceClientTemplate {
                Model = codeModel
            };

            await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".ts");
            await Write(new AzureServiceClientContextTemplate { Model = codeModel }, codeModel.ContextName.ToCamelCase() + ".ts");

            var modelIndexTemplate = new AzureModelIndexTemplate {
                Model = codeModel
            };

            await Write(modelIndexTemplate, Path.Combine("models", "index.ts"));

            var mapperIndexTemplate = new AzureMapperIndexTemplate {
                Model = codeModel
            };

            await Write(mapperIndexTemplate, Path.Combine("models", "mappers.ts"));

            //MethodGroups
            if (codeModel.MethodGroupModels.Any())
            {
                var methodGroupIndexTemplate = new MethodGroupIndexTemplate {
                    Model = codeModel
                };
                await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.ts"));

                foreach (var methodGroupModel in codeModel.MethodGroupModels)
                {
                    var methodGroupTemplate = new AzureMethodGroupTemplate {
                        Model = methodGroupModel
                    };
                    await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".ts"));
                }
            }

            var generateMetadata = Singleton <GeneratorSettingsTS> .Instance.GenerateMetadata;

            if (generateMetadata)
            {
                // package.json
                var packageJson = new PackageJson {
                    Model = codeModel
                };
                await Write(packageJson, Path.Combine("../", "package.json"));

                // tsconfig.json
                var browserTsConfig = new TsConfig {
                    Model = new TsConfigModel(true)
                };
                await Write(browserTsConfig, Path.Combine("../", "tsconfig.json"));

                // webpack.config.js
                var webpackConfig = new WebpackConfig {
                    Model = codeModel
                };
                await Write(webpackConfig, Path.Combine("../", "webpack.config.js"));

                // .npmignore
                var npmIgnore = new NpmIgnore {
                    Model = codeModel
                };
                await Write(npmIgnore, Path.Combine("../", ".npmignore"));

                //README.md
                var readme = new AzureReadmeTemplate {
                    Model = codeModel
                };
                await Write(readme, Path.Combine("../", "README.md"));
            }
        }
Exemplo n.º 9
0
 public void Setup()
 {
     _config    = new WebpackConfig();
     _server    = new Mock <HttpServerUtilityBase>();
     _tempFiles = new List <string>();
 }
Exemplo n.º 10
0
 public void Setup()
 {
     _config             = new WebpackConfig();
     _pathMappingService = new Mock <IPathMappingService>();
     _tempFiles          = new List <string>();
 }
        /// <summary>
        ///     Generate TypeScript client code
        /// </summary>
        /// <param name="serviceClient"></param>
        /// <returns></returns>
        public override async Task Generate(CodeModel cm)
        {
            var codeModel = cm as CodeModelTS;

            if (codeModel == null)
            {
                throw new InvalidCastException("CodeModel is not a TypeScript code model.");
            }

            InitializeSettings(codeModel);

            // Service client
            var serviceClientTemplate = new ServiceClientTemplate {
                Model = codeModel
            };

            await Write(serviceClientTemplate, codeModel.Name.ToCamelCase() + ".ts");
            await Write(new ServiceClientContextTemplate { Model = codeModel }, codeModel.ContextName.ToCamelCase() + ".ts");

            //Models
            if (codeModel.ModelTypes.Any())
            {
                var modelIndexTemplate = new ModelIndexTemplate {
                    Model = codeModel
                };
                await Write(modelIndexTemplate, Path.Combine("models", "index.ts"));

                var mapperIndexTemplate = new MapperIndexTemplate {
                    Model = codeModel
                };
                await Write(mapperIndexTemplate, Path.Combine("models", "mappers.ts"));
            }

            bool serviceHasMappableParameters = codeModel.Methods
                                                .SelectMany(m => m.LogicalParameters)
                                                .Any(p => p.Location != ParameterLocation.Body);

            if (serviceHasMappableParameters)
            {
                await Write(new ParameterTemplate { Model = codeModel }, Path.Combine("models", "parameters.ts"));
            }

            //MethodGroups
            if (codeModel.MethodGroupModels.Any())
            {
                var methodGroupIndexTemplate = new MethodGroupIndexTemplate {
                    Model = codeModel
                };
                await Write(methodGroupIndexTemplate, Path.Combine("operations", "index.ts"));

                foreach (var methodGroupModel in codeModel.MethodGroupModels)
                {
                    var mappersTemplate = new MethodGroupMappersTemplate {
                        Model = methodGroupModel
                    };
                    await Write(mappersTemplate, Path.Combine("models", methodGroupModel.MappersModuleName + ".ts"));

                    var methodGroupTemplate = new MethodGroupTemplate {
                        Model = methodGroupModel
                    };
                    await Write(methodGroupTemplate, Path.Combine("operations", methodGroupModel.TypeName.ToCamelCase() + ".ts"));
                }
            }

            if (codeModel.GenerateMetadata)
            {
                // package.json
                var packageJson = new PackageJson {
                    Model = codeModel
                };
                await Write(packageJson, Path.Combine("../", "package.json"));

                //tsconfig.json
                var nodeTsConfig = new TsConfig {
                    Model = new TsConfigModel(false)
                };
                await Write(nodeTsConfig, Path.Combine("../", "tsconfig.json"));

                // webpack.config.js
                var webpackConfig = new WebpackConfig {
                    Model = codeModel
                };
                await Write(webpackConfig, Path.Combine("../", "webpack.config.js"));

                // .npmignore
                var npmIgnore = new NpmIgnore {
                    Model = codeModel
                };
                await Write(npmIgnore, Path.Combine("../", ".npmignore"));

                //README.md
                var readme = new ReadmeTemplate {
                    Model = codeModel
                };
                await Write(readme, Path.Combine("../", "README.md"));
            }
        }