@quick-game/cli
Version:
Command line interface for rapid qg development
73 lines • 3.17 kB
JavaScript
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// Helper functions for working with UserAgentMetadata protocol objects, in
// particular their plain string representation.
import { parseList, serializeItem, serializeList, } from './StructuredHeaders.js';
/* Returned string is for error, either parseErrorString or structErrorString.
*/
export function parseBrandsList(stringForm, parseErrorString, structErrorString) {
const brandList = [];
const parseResult = parseList(stringForm);
if (parseResult.kind === 0 /* ResultKind.ERROR */) {
return parseErrorString;
}
for (const listItem of parseResult.items) {
if (listItem.kind !== 4 /* ResultKind.ITEM */) {
return structErrorString;
}
const bareItem = listItem.value;
if (bareItem.kind !== 7 /* ResultKind.STRING */) {
return structErrorString;
}
if (listItem.parameters.items.length !== 1) {
return structErrorString;
}
const param = listItem.parameters.items[0];
if (param.name.value !== 'v') {
return structErrorString;
}
const paramValue = param.value;
if (paramValue.kind !== 7 /* ResultKind.STRING */) {
return structErrorString;
}
brandList.push({ brand: bareItem.value, version: paramValue.value });
}
return brandList;
}
export function serializeBrandsList(brands) {
const shList = { kind: 11 /* ResultKind.LIST */, items: [] };
const vParamName = { kind: 1 /* ResultKind.PARAM_NAME */, value: 'v' };
for (const brand of brands) {
const nameString = { kind: 7 /* ResultKind.STRING */, value: brand.brand };
const verString = { kind: 7 /* ResultKind.STRING */, value: brand.version };
const verParams = {
kind: 3 /* ResultKind.PARAMETERS */,
items: [{ kind: 2 /* ResultKind.PARAMETER */, name: vParamName, value: verString }],
};
const shItem = { kind: 4 /* ResultKind.ITEM */, value: nameString, parameters: verParams };
shList.items.push(shItem);
}
const serializeResult = serializeList(shList);
return serializeResult.kind === 0 /* ResultKind.ERROR */ ? '' : serializeResult.value;
}
/*
* This checks whether the value provided is representable as a structured headers string,
* which is the validity requirement for the fields in UserAgentMetadata that are not the brand list
* or mobile bool.
*
* errorMessage will be passed through on failure.
*/
export function validateAsStructuredHeadersString(value, errorString) {
const parsedResult = serializeItem({
kind: 4 /* ResultKind.ITEM */,
value: { kind: 7 /* ResultKind.STRING */, value: value },
parameters: { kind: 3 /* ResultKind.PARAMETERS */, items: [] },
});
if (parsedResult.kind === 0 /* ResultKind.ERROR */) {
return { valid: false, errorMessage: errorString };
}
return { valid: true, errorMessage: undefined };
}
//# sourceMappingURL=UserAgentMetadata.js.map