| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** Common methods used by transfomers. */ | 5 /** Common methods used by transfomers. */ |
| 6 library polymer.src.build.common; | 6 library polymer.src.build.common; |
| 7 | 7 |
| 8 import 'dart:async'; | 8 import 'dart:async'; |
| 9 | 9 |
| 10 import 'package:barback/barback.dart'; | 10 import 'package:barback/barback.dart'; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 118 // TODO(sigmund): delete once this is part of barback (dartbug.com/12610) | 118 // TODO(sigmund): delete once this is part of barback (dartbug.com/12610) |
| 119 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { | 119 AssetId resolve(AssetId source, String url, TransformLogger logger, Span span) { |
| 120 if (url == null || url == '') return null; | 120 if (url == null || url == '') return null; |
| 121 var uri = Uri.parse(url); | 121 var uri = Uri.parse(url); |
| 122 var urlBuilder = path.url; | 122 var urlBuilder = path.url; |
| 123 if (uri.host != '' || uri.scheme != '' || urlBuilder.isAbsolute(url)) { | 123 if (uri.host != '' || uri.scheme != '' || urlBuilder.isAbsolute(url)) { |
| 124 logger.error('absolute paths not allowed: "$url"', span: span); | 124 logger.error('absolute paths not allowed: "$url"', span: span); |
| 125 return null; | 125 return null; |
| 126 } | 126 } |
| 127 | 127 |
| 128 var package; | |
| 129 var targetPath; | |
| 130 var segments = urlBuilder.split(url); | 128 var segments = urlBuilder.split(url); |
| 131 if (segments[0] == 'packages') { | 129 var prefix = segments[0]; |
| 132 if (segments.length < 3) { | 130 var entryFolder = !source.path.startsWith('lib/') && |
| 133 logger.error("incomplete packages/ path. It should have at least 3 " | 131 !source.path.startsWith('asset/'); |
| 134 "segments packages/name/path-from-name's-lib-dir", span: span); | 132 |
| 135 return null; | 133 // URLs of the form "packages/foo/bar" seen under entry folders (like web/, |
| 136 } | 134 // test/, example/, etc) are resolved as an asset in another package. |
| 137 package = segments[1]; | 135 if (entryFolder && (prefix == 'packages' || prefix == 'assets')) { |
| 138 targetPath = urlBuilder.join('lib', | 136 return _extractOtherPackageId(0, segments, logger, span); |
| 139 urlBuilder.joinAll(segments.sublist(2))); | |
| 140 } else if (segments[0] == 'assets') { | |
| 141 if (segments.length < 3) { | |
| 142 logger.error("incomplete assets/ path. It should have at least 3 " | |
| 143 "segments assets/name/path-from-name's-asset-dir", span: span); | |
| 144 } | |
| 145 package = segments[1]; | |
| 146 targetPath = urlBuilder.join('asset', | |
| 147 urlBuilder.joinAll(segments.sublist(2))); | |
| 148 } else { | |
| 149 package = source.package; | |
| 150 targetPath = urlBuilder.normalize( | |
| 151 urlBuilder.join(urlBuilder.dirname(source.path), url)); | |
| 152 } | 137 } |
| 153 return new AssetId(package, targetPath); | 138 |
| 139 var targetPath = urlBuilder.normalize( |
| 140 urlBuilder.join(urlBuilder.dirname(source.path), url)); |
| 141 |
| 142 // Relative URLs of the form "../../packages/foo/bar" in an asset under lib/ |
| 143 // or asset/ are also resolved as an asset in another package. |
| 144 segments = urlBuilder.split(targetPath); |
| 145 if (!entryFolder && segments.length > 1 && segments[0] == '..' && |
| 146 (segments[1] == 'packages' || segments[1] == 'assets')) { |
| 147 return _extractOtherPackageId(1, segments, logger, span); |
| 148 } |
| 149 |
| 150 // Otherwise, resolve as a path in the same package. |
| 151 return new AssetId(source.package, targetPath); |
| 152 } |
| 153 |
| 154 AssetId _extractOtherPackageId(int index, List segments, |
| 155 TransformLogger logger, Span span) { |
| 156 if (index >= segments.length) return null; |
| 157 var prefix = segments[index]; |
| 158 if (prefix != 'packages' && prefix != 'assets') return null; |
| 159 var folder = prefix == 'packages' ? 'lib' : 'asset'; |
| 160 if (segments.length < index + 3) { |
| 161 logger.error("incomplete $prefix/ path. It should have at least 3 " |
| 162 "segments $prefix/name/path-from-name's-$folder-dir", span: span); |
| 163 return null; |
| 164 } |
| 165 return new AssetId(segments[index + 1], |
| 166 path.url.join(folder, path.url.joinAll(segments.sublist(index + 2)))); |
| 154 } | 167 } |
| 155 | 168 |
| 156 /** | 169 /** |
| 157 * Generate the import url for a file described by [id], referenced by a file | 170 * Generate the import url for a file described by [id], referenced by a file |
| 158 * with [sourceId]. | 171 * with [sourceId]. |
| 159 */ | 172 */ |
| 160 // TODO(sigmund): this should also be in barback (dartbug.com/12610) | 173 // TODO(sigmund): this should also be in barback (dartbug.com/12610) |
| 161 String assetUrlFor(AssetId id, AssetId sourceId, TransformLogger logger, | 174 String assetUrlFor(AssetId id, AssetId sourceId, TransformLogger logger, |
| 162 {bool allowAssetUrl: false}) { | 175 {bool allowAssetUrl: false}) { |
| 163 // use package: and asset: urls if possible | 176 // use package: and asset: urls if possible |
| (...skipping 20 matching lines...) Expand all Loading... |
| 184 return builder.relative(builder.join('/', id.path), | 197 return builder.relative(builder.join('/', id.path), |
| 185 from: builder.join('/', builder.dirname(sourceId.path))); | 198 from: builder.join('/', builder.dirname(sourceId.path))); |
| 186 } | 199 } |
| 187 | 200 |
| 188 | 201 |
| 189 /** Convert system paths to asset paths (asset paths are posix style). */ | 202 /** Convert system paths to asset paths (asset paths are posix style). */ |
| 190 String _systemToAssetPath(String assetPath) { | 203 String _systemToAssetPath(String assetPath) { |
| 191 if (path.Style.platform != path.Style.windows) return assetPath; | 204 if (path.Style.platform != path.Style.windows) return assetPath; |
| 192 return path.posix.joinAll(path.split(assetPath)); | 205 return path.posix.joinAll(path.split(assetPath)); |
| 193 } | 206 } |
| OLD | NEW |