George Kalpakas 1beb582050 fix(@angular/cli): fix the URL for doc search
In #16846, the URL for docs search was updated to point to the
corresponding vX.angular.io website (with an appropriate query for the
search). However, on the archive versions of the website (i.e. versions
older than the current stable), non-docs pages (including the home page)
are redirected to `/docs` (losing the query params).

This commit fixes the URL to include `/docs`, so that it is not
redirected (and preserve the query params that will trigger the search).
2020-02-07 08:28:56 -08:00

61 lines
1.9 KiB
TypeScript

/**
* @license
* Copyright Google Inc. All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import { Command } from '../models/command';
import { Arguments } from '../models/interface';
import { Schema as DocCommandSchema } from './doc';
const open = require('open');
export class DocCommand extends Command<DocCommandSchema> {
public async run(options: DocCommandSchema & Arguments) {
if (!options.keyword) {
this.logger.error('You should specify a keyword, for instance, `ng doc ActivatedRoute`.');
return 0;
}
let domain = 'angular.io';
if (options.version) {
// version can either be a string containing "next"
if (options.version == 'next') {
domain = 'next.angular.io';
// or a number where version must be a valid Angular version (i.e. not 0, 1 or 3)
} else if (!isNaN(+options.version) && ![0, 1, 3].includes(+options.version)) {
domain = `v${options.version}.angular.io`;
} else {
this.logger.error('Version should either be a number (2, 4, 5, 6...) or "next"');
return 0;
}
} else {
// we try to get the current Angular version of the project
// and use it if we can find it
try {
/* tslint:disable-next-line:no-implicit-dependencies */
const currentNgVersion = require('@angular/core').VERSION.major;
domain = `v${currentNgVersion}.angular.io`;
} catch (e) { }
}
let searchUrl = `https://${domain}/api?query=${options.keyword}`;
if (options.search) {
searchUrl = `https://${domain}/docs?search=${options.keyword}`;
}
// We should wrap `open` in a new Promise because `open` is already resolved
await new Promise(() => {
open(searchUrl, {
wait: false,
});
});
}
}