Skip to content

Commit

Permalink
refactor ~ reduce per function complexity
Browse files Browse the repository at this point in the history
  • Loading branch information
rivy committed Jan 15, 2021
1 parent 8901b74 commit a966d13
Showing 1 changed file with 63 additions and 58 deletions.
121 changes: 63 additions & 58 deletions src/lib/OSPaths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,81 +13,86 @@ function isEmpty(s: string | null | undefined): boolean {
return !s; // reminder: JS "falsey" == [undefined, null, NaN, 0, '', false]
}

export function OSPathsAdaptionBuilder_(adapter_: Platform.Adapter): OSPaths {
const { env, os, path, process } = adapter_;
const AdaptingIsWinOS = (adapter_: Platform.Adapter) => /^win/i.test(adapter_.process.platform);

const AdaptingNormalizePath = (adapter_: Platform.Adapter) => {
return (path_: string | undefined): string | undefined => {
return path_ ? adapter_.path.normalize(adapter_.path.join(path_, '.')) : void 0;
};
};

const isWinOS = /^win/i.test(process.platform);
const AdaptingHome = (adapter_: Platform.Adapter) => {
const { env, os, path } = adapter_;
const isWinOS = AdaptingIsWinOS(adapter_);
const normalizePath = AdaptingNormalizePath(adapter_);

const posix = () =>
normalizePath((typeof os.homedir === 'function' ? os.homedir() : void 0) || env.get('HOME'));

const windows = () => {
const priorityList = [
typeof os.homedir === 'function' ? os.homedir() : void 0,
env.get('USERPROFILE'),
env.get('HOME'),
env.get('HOMEDRIVE') || env.get('HOMEPATH')
? path.join(env.get('HOMEDRIVE') || '', env.get('HOMEPATH') || '')
: void 0,
];
return normalizePath(priorityList.find((v) => !isEmpty(v)));
};

function normalizePath(path_: string | undefined): string | undefined {
return path_ ? path.normalize(path.join(path_, '.')) : void 0;
return isWinOS ? windows : posix;
};

const AdaptingTemp = (adapter_: Platform.Adapter) => {
const { env, os, path } = adapter_;
const isWinOS = AdaptingIsWinOS(adapter_);
const normalizePath = AdaptingNormalizePath(adapter_);
function joinPathToBase(base: string | undefined, segments: ReadonlyArray<string>) {
return base ? path.join(base, ...segments) : void 0;
}

const posix = () => {
const home = () =>
normalizePath((typeof os.homedir === 'function' ? os.homedir() : void 0) || env.get('HOME'));

const temp = () => {
const fallback = '/tmp';
const priorityList = [
typeof os.tmpdir === 'function' ? os.tmpdir() : void 0,
env.get('TMPDIR'),
env.get('TEMP'),
env.get('TMP'),
];
return normalizePath(priorityList.find((v) => !isEmpty(v))) || fallback;
};

return { home, temp };
const fallback = '/tmp';
const priorityList = [
typeof os.tmpdir === 'function' ? os.tmpdir() : void 0,
env.get('TMPDIR'),
env.get('TEMP'),
env.get('TMP'),
];
return normalizePath(priorityList.find((v) => !isEmpty(v))) || fallback;
};

const windows = () => {
const home = () => {
const priorityList = [
typeof os.homedir === 'function' ? os.homedir() : void 0,
env.get('USERPROFILE'),
env.get('HOME'),
env.get('HOMEDRIVE') || env.get('HOMEPATH')
? path.join(env.get('HOMEDRIVE') || '', env.get('HOMEPATH') || '')
: void 0,
];
return normalizePath(priorityList.find((v) => !isEmpty(v)));
};

function joinPathToBase(base: string | undefined, segments: ReadonlyArray<string>) {
return base ? path.join(base, ...segments) : void 0;
}

const temp = () => {
const fallback = 'C:\\Temp';
const priorityListLazy = [
os.tmpdir,
() => env.get('TEMP'),
() => env.get('TMP'),
() => joinPathToBase(env.get('LOCALAPPDATA'), ['Temp']),
() => joinPathToBase(home(), ['AppData', 'Local', 'Temp']),
() => joinPathToBase(env.get('ALLUSERSPROFILE'), ['Temp']),
() => joinPathToBase(env.get('SystemRoot'), ['Temp']),
() => joinPathToBase(env.get('windir'), ['Temp']),
() => joinPathToBase(env.get('SystemDrive'), ['\\', 'Temp']),
];
const v = priorityListLazy.find((v) => v && !isEmpty(v()));
return (v && normalizePath(v())) || fallback;
};

return { home, temp };
const fallback = 'C:\\Temp';
const priorityListLazy = [
os.tmpdir,
() => env.get('TEMP'),
() => env.get('TMP'),
() => joinPathToBase(env.get('LOCALAPPDATA'), ['Temp']),
() => joinPathToBase(AdaptingHome(adapter_)(), ['AppData', 'Local', 'Temp']),
() => joinPathToBase(env.get('ALLUSERSPROFILE'), ['Temp']),
() => joinPathToBase(env.get('SystemRoot'), ['Temp']),
() => joinPathToBase(env.get('windir'), ['Temp']),
() => joinPathToBase(env.get('SystemDrive'), ['\\', 'Temp']),
];
const v = priorityListLazy.find((v) => v && !isEmpty(v()));
return (v && normalizePath(v())) || fallback;
};

return isWinOS ? windows : posix;
};

export function OSPathsAdaptionBuilder_(adapter_: Platform.Adapter): OSPaths {
// eslint-disable-next-line functional/no-class
class OSPaths_ {
constructor() {
const OSPaths = function () {
return new OSPaths_() as OSPaths;
};

// Connect to platform-specific API functions by extension
const platformOS = isWinOS ? windows() : posix();
OSPaths.home = platformOS.home;
OSPaths.temp = platformOS.temp;
OSPaths.home = AdaptingHome(adapter_);
OSPaths.temp = AdaptingTemp(adapter_);

return OSPaths;
}
Expand Down

0 comments on commit a966d13

Please sign in to comment.