Repository navigation
Expand file tree
/
Copy pathutils.ts
More file actions
81 lines (75 loc) · 2.4 KB
/
Copy pathutils.ts
File metadata and controls
81 lines (75 loc) · 2.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import { readFileSync } from 'fs';
import { FirebaseRc, Project, WorkspaceProject } from './interfaces';
import { join } from 'path';
import { isUniversalApp } from './ng-add-ssr';
export async function listProjects() {
const firebase = require('firebase-tools');
await firebase.login();
return firebase.projects.list();
}
// `fuzzy` passes either the original list of projects or an internal object
// which contains the project as a property.
const isProject = (elem: Project | { original: Project }): elem is Project => {
return (elem as { original: Project }).original === undefined;
};
const searchProjects = (projects: Project[]) => {
return (_: any, input: string) => {
return Promise.resolve(
require('fuzzy')
.filter(input, projects, {
extract(el: Project) {
return `${el.projectId} ${el.displayName}`;
}
})
.map((result: Project | { original: Project }) => {
let original: Project;
if (isProject(result)) {
original = result;
} else {
original = result.original;
}
return {
name: `${original.displayName} (${original.projectId})`,
title: original.displayName,
value: original.projectId
};
})
);
};
};
export const projectPrompt = (projects: Project[]) => {
const inquirer = require('inquirer');
inquirer.registerPrompt(
'autocomplete',
require('inquirer-autocomplete-prompt')
);
return inquirer.prompt({
type: 'autocomplete',
name: 'firebaseProject',
source: searchProjects(projects),
message: 'Please select a project:'
});
};
export const projectTypePrompt = (project: WorkspaceProject) => {
if (isUniversalApp(project)) {
return require('inquirer').prompt({
type: 'confirm',
name: 'universalProject',
message: 'We detected an Angular Universal project. Do you want to deploy as a Firebase Function?'
});
}
return Promise.resolve({ universalProject: false });
};
export function getFirebaseProjectName(
workspaceRoot: string,
target: string
): string | undefined {
const rc: FirebaseRc = JSON.parse(
readFileSync(join(workspaceRoot, '.firebaserc'), 'UTF-8')
);
const targets = rc.targets || {};
const projects = Object.keys(targets || {});
return projects.find(
project => !!Object.keys(targets[project].hosting).find(t => t === target)
);
}