Summary:
Quick notes:
- This looks worse than it is. It adds mandatory parentheses to single argument lambdas. Lots of outrage on Twitter about it, personally I'm {emoji:1f937_200d_2642} about it.
- Space before function, e.g. `a = function ()` is now enforced. I like this because both were fine before.
- I added `eslint-config-prettier` to the config because otherwise a ton of rules conflict with eslint itself.
Close https://github.com/facebook/flipper/pull/915
Reviewed By: jknoxville
Differential Revision: D20594929
fbshipit-source-id: ca1c65376b90e009550dd6d1f4e0831d32cbff03
92 lines
2.5 KiB
TypeScript
92 lines
2.5 KiB
TypeScript
/**
|
|
* 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<string, string>();
|
|
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<string>,
|
|
) => {
|
|
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<string> = [];
|
|
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<string>) => {
|
|
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, '');
|
|
};
|