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")); }
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")); }
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")); }
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); }
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")); }
/// <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")); } }
public void Setup() { _config = new WebpackConfig(); _server = new Mock <HttpServerUtilityBase>(); _tempFiles = new List <string>(); }
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")); } }