/** * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @format */ import querystring from 'querystring'; export const validateParameter = (value: string, parameter: string) => { return ( value && (parameterIsNumberType(parameter) ? !isNaN(parseInt(value, 10)) : true) && (parameterIsBooleanType(parameter) ? value === 'true' || value === 'false' : true) ); }; export const filterOptionalParameters = (uri: string) => { return uri.replace(/[/&]?([^&?={}\/]*=)?{\?.*?}/g, ''); }; export const parseURIParameters = (query: string) => { // get parameters from query string and store in Map const parameters = query .split('?') .splice(1) .join(''); const parametersObj = querystring.parse(parameters); const parametersMap = new Map(); for (const key in parametersObj) { parametersMap.set(key, parametersObj[key] as string); } return parametersMap; }; export const parameterIsNumberType = (parameter: string) => { const regExp = /^{(#|\?#)/g; return regExp.test(parameter); }; export const parameterIsBooleanType = (parameter: string) => { const regExp = /^{(!|\?!)/g; return regExp.test(parameter); }; export const replaceRequiredParametersWithValues = ( uri: string, values: Array, ) => { const parameterRegExp = /{[^?]*?}/g; const replaceRegExp = /{[^?]*?}/; let newURI = uri; let index = 0; let match = parameterRegExp.exec(uri); while (match != null) { newURI = newURI.replace(replaceRegExp, values[index]); match = parameterRegExp.exec(uri); index++; } return newURI; }; export const getRequiredParameters = (uri: string) => { const parameterRegExp = /{[^?]*?}/g; const matches: Array = []; let match = parameterRegExp.exec(uri); while (match != null) { if (match[0]) { matches.push(match[0]); } match = parameterRegExp.exec(uri); } return matches; }; export const liveEdit = (uri: string, formValues: Array) => { const parameterRegExp = /({[^?]*?})/g; const uriArray = uri.split(parameterRegExp); return uriArray.reduce((acc, uriComponent, idx) => { if (idx % 2 === 0 || !formValues[(idx - 1) / 2]) { return acc + uriComponent; } else { return acc + formValues[(idx - 1) / 2]; } }); }; export const stripQueryParameters = (uri: string) => { return uri.replace(/\?.*$/g, ''); };