Strict mode-fixes

This commit is contained in:
Alexander Cerutti
2019-12-14 15:59:11 +01:00
parent 5bae211316
commit 93684948ef
3 changed files with 39 additions and 20 deletions

View File

@@ -30,13 +30,15 @@ export class Pass {
private [passProps]: schema.ValidPass = {};
private type: keyof schema.ValidPassType;
private fieldsKeys: Set<string> = new Set<string>();
private passCore: schema.ValidPass = {};
private passCore: schema.ValidPass;
public headerFields: FieldsArray;
public primaryFields: FieldsArray;
public secondaryFields: FieldsArray;
public auxiliaryFields: FieldsArray;
public backFields: FieldsArray;
// Setting these as possibly undefined because we set
// them all in an loop later
public headerFields: FieldsArray | undefined;
public primaryFields: FieldsArray | undefined;
public secondaryFields: FieldsArray | undefined;
public auxiliaryFields: FieldsArray | undefined;
public backFields: FieldsArray | undefined;
private Certificates: schema.FinalCertificates;
private [transitType]: string = "";
@@ -72,7 +74,8 @@ export class Pass {
}
// Parsing and validating pass.json keys
const validatedPassKeys = Object.keys(this.passCore).reduce((acc, current) => {
const passCoreKeys = Object.keys(this.passCore) as (keyof schema.ValidPass)[];
const validatedPassKeys = passCoreKeys.reduce((acc, current) => {
if (this.type === current) {
// We want to exclude type keys (eventTicket,
// boardingPass, ecc.) and their content
@@ -86,10 +89,13 @@ export class Pass {
return { ...acc, [current]: this.passCore[current] };
}
const currentSchema = propsSchemaMap.get(current);
const currentSchema = propsSchemaMap.get(current)!;
if (Array.isArray(this.passCore[current])) {
const valid = getValidInArray(currentSchema, this.passCore[current]);
const valid = getValidInArray<schema.ArrayPassSchema>(
currentSchema,
this.passCore[current] as schema.ArrayPassSchema[]
);
return { ...acc, [current]: valid };
} else {
return {
@@ -201,7 +207,7 @@ export class Pass {
* and returning the compiled manifest
*/
const archive = new ZipFile();
const manifest = Object.keys(finalBundle).reduce((acc, current) => {
const manifest = Object.keys(finalBundle).reduce<schema.Manifest>((acc, current) => {
let hashFlow = forge.md.sha1.create();
hashFlow.update(finalBundle[current].toString("binary"));
@@ -504,7 +510,7 @@ export class Pass {
* @returns {Buffer}
*/
private _sign(manifest: { [key: string]: string }): Buffer {
private _sign(manifest: schema.Manifest): Buffer {
const signature = forge.pkcs7.createSignedData();
signature.content = forge.util.createBuffer(JSON.stringify(manifest), "utf8");
@@ -577,8 +583,8 @@ export class Pass {
* and then delete it from the passFile.
*/
["backgroundColor", "foregroundColor", "labelColor"]
.filter(v => this[passProps][v] && !isValidRGB(this[passProps][v]))
const passColors = ["backgroundColor", "foregroundColor", "labelColor"] as Array<keyof schema.PassColors>;
passColors.filter(v => this[passProps][v] && !isValidRGB(this[passProps][v]))
.forEach(v => delete this[passProps][v]);
Object.assign(passFile, this[passProps]);
@@ -630,7 +636,7 @@ function barcodesFromUncompleteData(message: string): schema.Barcode[] {
"PKBarcodeFormatPDF417",
"PKBarcodeFormatAztec",
"PKBarcodeFormatCode128"
].map(format => schema.getValidated({ format, message }, "barcode"));
].map(format => schema.getValidated({ format, message }, "barcode") as schema.Barcode);
}
function processRelevancySet<T>(key: string, data: T[]): T[] {

View File

@@ -3,6 +3,10 @@ import debug from "debug";
const schemaDebug = debug("Schema");
export interface Manifest {
[key: string]: string;
}
export interface Certificates {
wwdr?: string;
signerCert?: string;
@@ -71,7 +75,7 @@ export interface OverridesSupportedOptions {
teamIdentifier?: string;
appLaunchURL?: string;
associatedStoreIdentifiers?: Array<number>;
userInfo?: Object | Array<any>;
userInfo?: { [key: string]: any };
webServiceURL?: string;
authenticationToken?: string;
sharingProhibited?: boolean;
@@ -294,7 +298,7 @@ export interface ValidPassType {
storeCard?: PassFields;
}
export interface ValidPass extends OverridesSupportedOptions, ValidPassType {
interface PassInterfacesProps {
barcode?: Barcode;
barcodes?: Barcode[];
beacons?: Beacon[];
@@ -306,6 +310,12 @@ export interface ValidPass extends OverridesSupportedOptions, ValidPassType {
voided?: boolean;
}
type AllPassProps = PassInterfacesProps & ValidPassType & OverridesSupportedOptions;
export type ValidPass = {
[K in keyof AllPassProps]: AllPassProps[K];
};
export type PassColors = Pick<OverridesSupportedOptions, "backgroundColor" | "foregroundColor" | "labelColor">;
export interface Barcode {
altText?: string;
messageEncoding?: string;
@@ -464,6 +474,7 @@ const schemas = {
};
export type Schema = keyof typeof schemas;
export type ArrayPassSchema = Beacon | Location | Barcode;
function resolveSchemaName(name: Schema) {
return schemas[name] || undefined;
@@ -500,7 +511,7 @@ export function isValid(opts: any, schemaName: Schema): boolean {
* @returns {object} the filtered value or empty object
*/
export function getValidated<T extends Object>(opts: any, schemaName: Schema): T {
export function getValidated<T extends Object>(opts: any, schemaName: Schema): T | null {
const resolvedSchema = resolveSchemaName(schemaName);
if (!resolvedSchema) {

View File

@@ -11,7 +11,7 @@ import { sep } from "path";
* @returns {Boolean} True if valid rgb, false otherwise
*/
export function isValidRGB(value: string): boolean {
export function isValidRGB(value?: string): boolean {
if (!value || typeof value !== "string") {
return false;
}
@@ -89,8 +89,10 @@ export function generateStringFile(lang: { [index: string]: string }): Buffer {
* @param origin
*/
export function splitBufferBundle(origin: Object): [PartitionedBundle["l10nBundle"], PartitionedBundle["bundle"]] {
return Object.keys(origin).reduce(([ l10n, bundle ], current) => {
type PartitionedBundleElements = [PartitionedBundle["l10nBundle"], PartitionedBundle["bundle"]];
export function splitBufferBundle(origin: any): PartitionedBundleElements {
return Object.keys(origin).reduce<PartitionedBundleElements>(([ l10n, bundle ], current) => {
if (!current.includes(".lproj")) {
return [ l10n, { ...bundle, [current]: origin[current] }];
}