/// <summary> /// Fills the list of TypeScript-files, references to which have been added to a TypeScript-asset /// by using the "reference" comments /// </summary> /// <param name="rootAssetUrl">URL of root TypeScript-asset file</param> /// <param name="parentScript">Parent TypeScript-script</param> /// <param name="dependencies">List of TypeScript-files, references to which have been /// added to a TypeScript-asset by using the "reference" comments</param> public void FillDependencies(string rootAssetUrl, TsScript parentScript, DependencyCollection dependencies) { foreach (string referenceUrl in parentScript.References) { string dependencyUrl = referenceUrl; if (string.Equals(dependencyUrl, rootAssetUrl, StringComparison.OrdinalIgnoreCase)) { continue; } if (!dependencies.ContainsUrl(dependencyUrl)) { string dependencyExtension = Path.GetExtension(dependencyUrl); if (TypeScriptFileExtensionHelpers.IsTypeScript(dependencyExtension) || CoreFileExtensionHelpers.IsJavaScript(dependencyExtension)) { if (TsScriptExists(dependencyUrl)) { TsScript script = GetTsScript(dependencyUrl); var dependency = new Dependency(dependencyUrl, script.Content); dependencies.Add(dependency); FillDependencies(rootAssetUrl, script, dependencies); } else { throw new FileNotFoundException( string.Format(CoreStrings.Common_FileNotExist, dependencyUrl)); } } } } }
/// <summary> /// Fills the list of LESS-files, that were added to a LESS-asset /// by using the LESS <code>@import</code> rules /// </summary> /// <param name="rootAssetUrl">URL of root LESS-asset file</param> /// <param name="parentStylesheet">Parent LESS-stylesheet</param> /// <param name="dependencies">List of LESS-files, that were added to a /// LESS-asset by using the LESS <code>@import</code> rules</param> public void FillDependencies(string rootAssetUrl, LessStylesheet parentStylesheet, DependencyCollection dependencies) { foreach (string dataUriFunctionImageUrl in parentStylesheet.DataUriFunctionAssetUrls) { var dependency = new Dependency(dataUriFunctionImageUrl, string.Empty); dependencies.Add(dependency); } foreach (LessImport import in parentStylesheet.Imports) { string dependencyUrl = import.Url; LessImportOptions dependencyOptions = import.ImportOptions; if (UrlHelpers.StartsWithProtocol(dependencyUrl)) { if (!dependencies.ContainsUrl(dependencyUrl)) { var dependency = new Dependency(dependencyUrl, string.Empty, false); dependencies.Add(dependency); } continue; } if (string.Equals(dependencyUrl, rootAssetUrl, StringComparison.OrdinalIgnoreCase)) { continue; } var duplicateDependency = dependencies.GetByUrl(dependencyUrl); bool isDuplicateDependency = (duplicateDependency != null); bool isEmptyDependency = isDuplicateDependency && (duplicateDependency.Content.Length == 0); bool isNonExistentOptionalDependency = false; if (!isDuplicateDependency || isEmptyDependency) { if (!LessStylesheetExists(dependencyUrl)) { if (dependencyOptions.Optional) { isNonExistentOptionalDependency = true; } else { throw new FileNotFoundException( string.Format(CoreStrings.Common_FileNotExist, dependencyUrl)); } } var stylesheet = new LessStylesheet(dependencyUrl, string.Empty); string dependencyContent = null; if (dependencyOptions.Less || dependencyOptions.Inline) { if (!isNonExistentOptionalDependency) { stylesheet = GetLessStylesheet(dependencyUrl, dependencyOptions); dependencyContent = stylesheet.Content; } if (isEmptyDependency && stylesheet.Content.Length > 0) { duplicateDependency.Content = dependencyContent; duplicateDependency.IsObservable = true; } else { var dependency = new Dependency(dependencyUrl, dependencyContent); dependencies.Add(dependency); } } else { if (!isNonExistentOptionalDependency) { dependencyContent = string.Empty; } if (!isDuplicateDependency) { var dependency = new Dependency(dependencyUrl, dependencyContent, false); dependencies.Add(dependency); } } FillDependencies(rootAssetUrl, stylesheet, dependencies); } } }