Index: pkg/docgen/lib/src/viewer.dart |
diff --git a/pkg/docgen/lib/src/viewer.dart b/pkg/docgen/lib/src/viewer.dart |
deleted file mode 100644 |
index f5b7172d4b7b3d006481fba541926bea697f558c..0000000000000000000000000000000000000000 |
--- a/pkg/docgen/lib/src/viewer.dart |
+++ /dev/null |
@@ -1,201 +0,0 @@ |
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-/// Convenience methods wrapped up in a class to pull down the docgen viewer for |
-/// a viewable website, and start up a server for viewing. |
-library docgen.viewer; |
- |
-import 'dart:io'; |
- |
-import 'package:path/path.dart' as path; |
- |
-import 'generator.dart' as gen; |
-import 'package_helpers.dart' show rootDirectory; |
- |
-final String _dartdocViewerString = |
- path.join(Directory.current.path, 'dartdoc-viewer'); |
- |
-final Directory _dartdocViewerDir = new Directory(_dartdocViewerString); |
- |
-Directory _topLevelTempDir; |
-Directory _webDocsDir; |
-bool _movedViewerCode = false; |
- |
-void createViewer(bool serve) { |
- _clone(); |
- _compile(); |
- if (serve) { |
- _runServer(); |
- } |
-} |
- |
-/* |
- * dartdoc-viewer currently has the web app code under a 'client' directory |
- * |
- * This is confusing for folks that want to clone and modify the code. |
- * It also includes a number of python files and other content related to |
- * app engine hosting that are not needed. |
- * |
- * This logic exists to support the current model and a (future) updated |
- * dartdoc-viewer repo where the 'client' content exists at the root of the |
- * project and the other content is removed. |
- */ |
-String get _viewerCodePath { |
- if (_viewerCodePathCache == null) { |
- var pubspecFileName = 'pubspec.yaml'; |
- |
- var thePath = _dartdocViewerDir.path; |
- |
- if (!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
- thePath = path.join(thePath, 'client'); |
- if (!FileSystemEntity.isFileSync(path.join(thePath, pubspecFileName))) { |
- throw new StateError('Could not find a pubspec file'); |
- } |
- } |
- |
- _viewerCodePathCache = thePath; |
- } |
- return _viewerCodePathCache; |
-} |
-String _viewerCodePathCache; |
- |
-/// If our dartdoc-viewer code is already checked out, move it to a temporary |
-/// directory outside of the package directory, so we don't try to process it |
-/// for documentation. |
-void ensureMovedViewerCode() { |
- // TODO(efortuna): This will need to be modified to run on anyone's package |
- // outside of the checkout! |
- if (_dartdocViewerDir.existsSync()) { |
- _topLevelTempDir = new Directory(rootDirectory).createTempSync(); |
- _dartdocViewerDir.renameSync(_topLevelTempDir.path); |
- } |
-} |
- |
-/// Move the dartdoc-viewer code back into place for "webpage deployment." |
-void addBackViewerCode() { |
- if (_movedViewerCode) _dartdocViewerDir.renameSync(_dartdocViewerString); |
-} |
- |
-/// Serve up our generated documentation for viewing in a browser. |
-void _clone() { |
- // If the viewer code is already there, then don't clone again. |
- if (_dartdocViewerDir.existsSync()) { |
- _moveDirectoryAndServe(); |
- } else { |
- var processResult = Process.runSync('git', ['clone', '-b', 'master', |
- 'https://github.com/dart-lang/dartdoc-viewer.git'], runInShell: true); |
- |
- if (processResult.exitCode == 0) { |
- /// Move the generated json/yaml docs directory to the dartdoc-viewer |
- /// directory, to run as a webpage. |
- var processResult = Process.runSync(gen.pubScript, ['get'], |
- runInShell: true, workingDirectory: _viewerCodePath); |
- print('process output: ${processResult.stdout}'); |
- print('process stderr: ${processResult.stderr}'); |
- |
- var dir = new Directory(gen.outputDirectory == null ? 'docs' : |
- gen.outputDirectory); |
- _webDocsDir = new Directory(path.join(_viewerCodePath, 'web', 'docs')); |
- if (dir.existsSync()) { |
- // Move the docs folder to dartdoc-viewer/client/web/docs |
- dir.renameSync(_webDocsDir.path); |
- } |
- } else { |
- print('Error cloning git repository:'); |
- print('process output: ${processResult.stdout}'); |
- print('process stderr: ${processResult.stderr}'); |
- } |
- } |
-} |
- |
-/// Move the generated json/yaml docs directory to the dartdoc-viewer |
-/// directory, to run as a webpage. |
-void _moveDirectoryAndServe() { |
- var processResult = Process.runSync(gen.pubScript, ['upgrade'], runInShell: |
- true, workingDirectory: path.join(_dartdocViewerDir.path, 'client')); |
- print('process output: ${processResult.stdout}'); |
- print('process stderr: ${processResult.stderr}'); |
- |
- var dir = new Directory(gen.outputDirectory == null ? 'docs' : |
- gen.outputDirectory); |
- var webDocsDir = new Directory(path.join(_dartdocViewerDir.path, 'client', |
- 'web', 'docs')); |
- if (dir.existsSync()) { |
- // Move the docs folder to dartdoc-viewer/client/web/docs |
- dir.renameSync(webDocsDir.path); |
- } |
- |
- if (webDocsDir.existsSync()) { |
- // Compile the code to JavaScript so we can run on any browser. |
- print('Compiling the app to JavaScript.'); |
- var processResult = Process.runSync(gen.dartBinary, ['deploy.dart'], |
- workingDirectory: path.join(_dartdocViewerDir.path, 'client'), |
- runInShell: true); |
- print('process output: ${processResult.stdout}'); |
- print('process stderr: ${processResult.stderr}'); |
- _runServer(); |
- } |
-} |
- |
-void _compile() { |
- if (_webDocsDir.existsSync()) { |
- // Compile the code to JavaScript so we can run on any browser. |
- print('Compiling the app to JavaScript.'); |
- var processResult = Process.runSync(gen.dartBinary, ['deploy.dart'], |
- workingDirectory: _viewerCodePath, runInShell: true); |
- print('process output: ${processResult.stdout}'); |
- print('process stderr: ${processResult.stderr}'); |
- var outputDir = path.join(_viewerCodePath, 'out', 'web'); |
- print('Docs are available at $outputDir'); |
- } |
-} |
- |
-/// A simple HTTP server. Implemented here because this is part of the SDK, |
-/// so it shouldn't have any external dependencies. |
-void _runServer() { |
- // Launch a server to serve out of the directory dartdoc-viewer/client/web. |
- HttpServer.bind(InternetAddress.ANY_IP_V6, 8080).then((HttpServer httpServer) |
- { |
- print('Server launched. Navigate your browser to: ' |
- 'http://localhost:${httpServer.port}'); |
- httpServer.listen((HttpRequest request) { |
- var response = request.response; |
- var basePath = path.join(_viewerCodePath, 'out', 'web'); |
- var requestPath = path.join(basePath, request.uri.path.substring(1)); |
- bool found = true; |
- var file = new File(requestPath); |
- if (file.existsSync()) { |
- // Set the correct header type. |
- if (requestPath.endsWith('.html')) { |
- response.headers.set('Content-Type', 'text/html'); |
- } else if (requestPath.endsWith('.js')) { |
- response.headers.set('Content-Type', 'application/javascript'); |
- } else if (requestPath.endsWith('.dart')) { |
- response.headers.set('Content-Type', 'application/dart'); |
- } else if (requestPath.endsWith('.css')) { |
- response.headers.set('Content-Type', 'text/css'); |
- } |
- } else { |
- if (requestPath == basePath) { |
- response.headers.set('Content-Type', 'text/html'); |
- file = new File(path.join(basePath, 'index.html')); |
- } else { |
- print('Path not found: $requestPath'); |
- found = false; |
- response.statusCode = HttpStatus.NOT_FOUND; |
- response.close(); |
- } |
- } |
- |
- if (found) { |
- // Serve up file contents. |
- file.openRead().pipe(response).catchError((e) { |
- print('HttpServer: error while closing the response stream $e'); |
- }); |
- } |
- }, onError: (e) { |
- print('HttpServer: an error occured $e'); |
- }); |
- }); |
-} |