Skip to content
This repository was archived by the owner on May 5, 2021. It is now read-only.

Commit de86fbb

Browse files
author
Jacob Peddicord
committed
TypeScript -> 2.6.2 & strict mode cleanup
1 parent a390914 commit de86fbb

File tree

17 files changed

+55
-36
lines changed

17 files changed

+55
-36
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
"selenium-webdriver": "^3.0.1",
6666
"ts-loader": "^2.3.2",
6767
"tslint": "^5.5.0",
68-
"typescript": "^2.4.1",
68+
"typescript": "^2.6.2",
6969
"url-loader": "^0.5.9",
7070
"webpack": "^3.6.0",
7171
"webpack-dev-server": "^2.7.1"

server/api/licenses/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ export async function listLicenses(): Promise<LicenseResponse> {
3838
function cacheLicenseData() {
3939
// a little silly, but keep two license lists; one for those that ask to be
4040
// displayed first and the other for those that don't care
41-
const first = [];
42-
const rest = [];
41+
const first: any[] = [];
42+
const rest: any[] = [];
4343

4444
// load each license...
4545
for (const [id, data] of (licenses as any).entries()) {

server/api/packages/index.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import * as db from '../../db/packages';
2020
import { assertCanValidate } from './auth';
2121
import { WebPackage } from './interfaces';
2222

23-
export async function searchPackages(req: any, query: string): Promise<{results: WebPackage[]}> {
23+
export async function searchPackages(req: any, query: string): Promise<{results: Array<Partial<WebPackage>>}> {
2424
const packages = await db.searchPackages(query, 25);
2525
return {results: packages.map((pkg) => ({
2626
packageId: pkg.package_id,
@@ -34,7 +34,7 @@ export async function searchPackages(req: any, query: string): Promise<{results:
3434
}))};
3535
}
3636

37-
export async function getPackage(req: any, packageId: number, extended = false): Promise<WebPackage> {
37+
export async function getPackage(req: any, packageId: number, extended = false): Promise<WebPackage | null> {
3838
const pkg = await db.getPackage(packageId);
3939
if (pkg == null) {
4040
return null;
@@ -68,6 +68,7 @@ export async function getPackage(req: any, packageId: number, extended = false):
6868
license: pkg.license,
6969
copyright: pkg.copyright,
7070
licenseText: pkg.license_text,
71+
createdBy: pkg.created_by,
7172
verified: pkg.verified,
7273
extra,
7374
};
@@ -113,8 +114,15 @@ export async function storePackage(req: any, packageId: number, info: Pick<WebPa
113114
let newId: number;
114115
if (shouldInsert) {
115116
const createdBy = auth.extractRequestUser(req);
116-
newId = await db.createPackageRevision(info.name, info.version, info.website,
117-
info.license, info.copyright, info.licenseText, createdBy);
117+
newId = await db.createPackageRevision(
118+
info.name,
119+
info.version,
120+
info.website as string,
121+
info.license as string,
122+
info.copyright as string,
123+
info.licenseText as string,
124+
createdBy,
125+
);
118126
winston.info('Created a new package revision with ID %s (previous revision at %s) by %s',
119127
newId, packageId ? packageId : '[none]', createdBy);
120128
} else {

server/api/packages/interfaces.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ export interface WebPackage {
2121
licenseText?: string;
2222
copyright?: string;
2323
createdBy?: string;
24-
verified?: boolean | null;
24+
verified: boolean | null;
2525
extra?: {verification?: PackageVerification, stats?: PackageStats, latest?: number};
2626
}
2727

server/api/projects/auth.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ export async function assertProjectAccess(req: any, project: ProjectAccess, leve
5050
throw new AccessError('This project does not exist or you do not have access to it.');
5151
}
5252

53-
export async function effectivePermission(req: any, project: ProjectAccess): Promise<AccessLevel> {
53+
export async function effectivePermission(req: any, project: ProjectAccess): Promise<AccessLevel | null> {
5454
const user = auth.extractRequestUser(req);
5555
const reqGroups = await auth.getGroups(user);
5656

@@ -61,7 +61,7 @@ export async function effectivePermission(req: any, project: ProjectAccess): Pro
6161
}
6262

6363
// then check the project ACL
64-
let effective: AccessLevel = null;
64+
let effective: AccessLevel | null = null;
6565
let effectiveStrength = 0;
6666
for (const entity of Object.keys(project.acl)) {
6767
// skip groups that aren't relevant for the requester

server/api/projects/index.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ describe('projects', function () {
132132
acl: {abc: 'owner'},
133133
metadata: {open_sourcing: true},
134134
},
135-
};
135+
} as any;
136136
}
137137

138138
});

server/api/projects/index.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,21 @@ import { AccessError } from '../../errors/index';
2424
import DocBuilder from '../../licenses/docbuilder';
2525
import { storePackage } from '../packages';
2626
import { assertProjectAccess, effectivePermission } from './auth';
27-
import { AccessLevelStrength, WebProject } from './interfaces';
27+
import { AccessLevelStrength, WebProject, AccessLevel } from './interfaces';
2828

2929
type ProjectIdPromise = Promise<Pick<WebProject, 'projectId'>>;
3030

3131
export async function getProject(req: Request, projectId: string): Promise<WebProject> {
3232
const project = await db.getProject(projectId);
3333
await assertProjectAccess(req, project, 'viewer');
34-
const accessLevel = await effectivePermission(req, project);
34+
const accessLevel = await effectivePermission(req, project) as AccessLevel;
3535

3636
// map DB types to a public API
3737
return {
3838
projectId,
3939
title: project.title,
4040
version: project.version,
41-
description: project.description,
41+
description: project.description || '',
4242
createdOn: project.created_on,
4343
plannedRelease: project.planned_release,
4444
contacts: project.contacts,
@@ -50,7 +50,7 @@ export async function getProject(req: Request, projectId: string): Promise<WebPr
5050
packageId: usage.package_id,
5151
};
5252
}),
53-
metadata: project.metadata,
53+
metadata: project.metadata || {},
5454
access: {
5555
level: accessLevel,
5656
canEdit: AccessLevelStrength[accessLevel] >= AccessLevelStrength.editor,
@@ -212,6 +212,9 @@ export async function generateAttributionDocument(req: Request, projectId: strin
212212
const builder = new DocBuilder();
213213
for (const usage of project.packages_used) {
214214
const pkg = packages.get(usage.package_id);
215+
if (pkg == null) {
216+
throw new Error(`Reference to package ${usage.package_id} was not found`);
217+
}
215218
builder.addPackage(pkg, usage);
216219
}
217220

server/api/projects/interfaces.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ export interface PackageUsage {
3333
packageId: number;
3434
notes?: string;
3535
// tag-added properties
36-
[key: string]: string | boolean | number;
36+
[key: string]: string | boolean | number | undefined;
3737
}
3838

3939
export const AccessLevelStrength: {[key: string]: number} = {
4040
viewer: 1,
4141
editor: 2,
4242
owner: 3,
4343
};
44-
export type AccessLevel = 'owner' | 'editor' | 'viewer' | null;
44+
export type AccessLevel = 'owner' | 'editor' | 'viewer';

server/auth/base.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ interface AuthBase {
6363
* For example, you could look up a user's full name in LDAP/AD.
6464
* Consider caching this method.
6565
*/
66-
getDisplayName(user: string): Promise<string>;
66+
getDisplayName(user: string): Promise<string | null>;
6767

6868
/**
6969
* Given a username, look up the list of groups the user is a member of.

server/auth/impl/nullauth.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export default class NullAuth implements AuthBase {
5959
|| request.user.user || process.env.USER || 'unknown';
6060
}
6161

62-
async getDisplayName(user: string): Promise<string> {
62+
async getDisplayName(user: string): Promise<string | null> {
6363
// special test case; this user will never "exist"
6464
if (user === 'nobody') {
6565
return null;

0 commit comments

Comments
 (0)