Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion src/helpers/filter-existing-npm-packages.spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'jest-extended';
import { resetAllWhenMocks, verifyAllWhenMocksCalled, when } from 'jest-when';

import * as npmUtils from '../npm-utils';
import * as npmUtils from '../utils/npm';
import { filterExistingNpmPackages } from './filter-existing-npm-packages';
import { Package } from '../storage-explorer';

Expand Down
2 changes: 1 addition & 1 deletion src/helpers/filter-existing-npm-packages.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Package } from '../storage-explorer';
import { getCurrentRegistry, isNpmPackagePublished } from '../npm-utils';
import { getCurrentRegistry, isNpmPackagePublished } from '../utils/npm';
import PromisePool from 'es6-promise-pool';
import { logger } from '../logger';

Expand Down
25 changes: 17 additions & 8 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import storageExplorer, { Package } from './storage-explorer';
import npmPublishScriptCreator from './npm-publish-script-creator';
import fileWriter from './file-writer';
import { userOptionGetter } from './user-option/user-options-getter';
import { userOptionGetter } from './options/';
import { logger } from './logger';
import { bold } from 'kleur';
import emoji from 'node-emoji';
import { UserOptions } from './user-option/user-options';
import { IUserOptionGetter } from './user-option/i-user-option-getter';
import { userOptionPromptGetter } from './user-option/interactive/user-option-prompt-getter';
import { UserOptions } from './options/user-options';
import path from 'path';
import { userOptionArgGetter } from './user-option/args';
import { validateUserOptions } from './user-option/validator';
import { getLineTransformer } from './utils';
import { validateUserOptions } from './options/validator';
import { getLineTransformer } from './utils/common';
import { filterExistingNpmPackages } from './helpers/filter-existing-npm-packages';
import { IUserOptionGetter } from './options/i-user-option-getter';
import { userOptionArgGetter } from './options/providers/args';
import { userOptionPromptGetter } from './options/providers/interactive';

// The order is important
const userOptionGetters: {
Expand All @@ -23,7 +23,7 @@ const userOptionGetters: {
interactive: userOptionPromptGetter,
};

const run = async () => {
const getConfigFromUser = async () => {
let config: UserOptions;
try {
config = await userOptionGetter(userOptionGetters);
Expand Down Expand Up @@ -51,6 +51,15 @@ const run = async () => {

// Make it absolute path in case the user move the file
config.storagePath = config.storagePath ?? path.resolve(config.storagePath);
return config;
};

const run = async () => {
const config = await getConfigFromUser();

if (!config) {
return;
}

logger.info('User configuration loaded');

Expand Down
File renamed without changes.
1 change: 1 addition & 0 deletions src/options/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { userOptionGetter } from './providers/';
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import 'jest-extended';

import { IUserOptionGetter as IUserOptionGetterLib } from '../i-user-option-getter';
import { UserOptions as UserOptionsLib } from '../user-options';
import { setPlatform } from '../../../tests/util';
import { IUserOptionGetter as IUserOptionGetterLib } from '../../i-user-option-getter';
import { UserOptions as UserOptionsLib } from '../../user-options';
import { setPlatform } from '../../../../tests/util';
import Mock = jest.Mock;
import { UserOptionArgGetterResult } from './index';
import { UserOptionArgGetterResult } from './';

interface TestDeps {
UserOptions: UserOptionsLib;
Expand All @@ -15,9 +15,9 @@ interface TestDeps {

function getDeps(): TestDeps {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { UserOptions } = require('../user-options');
const { UserOptions } = require('../../user-options');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { IUserOptionGetter } = require('../i-user-option-getter');
const { IUserOptionGetter } = require('../../i-user-option-getter');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const UserOptionGetter = require('./');

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IUserOptionGetter } from '../i-user-option-getter';
import { IUserOptionGetter } from '../../i-user-option-getter';
import yargs from 'yargs';
import { logger } from '../../logger';
import { getCurrentOS, getPackageName, OSTypes, removeEmpty } from '../../utils';
import { DEFAULT_USER_OPTIONS, UserOptions } from '../user-options';
import { logger } from '../../../logger';
import { getCurrentOS, getPackageName, OSTypes, removeEmpty } from '../../../utils/common';
import { DEFAULT_USER_OPTIONS, UserOptions } from '../../user-options';
import chalk from 'chalk';

const usageExamples: ((...params: any[]) => [string, string])[] = [
Expand Down
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
import 'jest-extended';
import { UserOptions as UserOptionsLib } from './user-options';
import { UserOptions as UserOptionsLib } from '../user-options';

import { IUserOptionGetter as IUserOptionGetterLib } from './i-user-option-getter';
import { setPlatform } from '../../tests/util';
import { IUserOptionGetter as IUserOptionGetterLib } from '../i-user-option-getter';
import { setPlatform } from '../../../tests/util';

interface TestsDep {
UserOptions: UserOptionsLib;
IUserOptionGetter: IUserOptionGetterLib;
UserOptions?: UserOptionsLib;
IUserOptionGetter?: IUserOptionGetterLib;
userOptionGetter: IUserOptionGetterLib;
}

function getDeps(): TestsDep {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { UserOptions } = require('./user-options');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { IUserOptionGetter } = require('./i-user-option-getter');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { userOptionGetter } = require('./user-options-getter');
const { userOptionGetter } = require('./');

return { UserOptions, IUserOptionGetter, userOptionGetter };
return { userOptionGetter };
}

describe('Get User Options (from the available option)', () => {
Expand All @@ -32,7 +28,6 @@ describe('Get User Options (from the available option)', () => {
}

beforeEach(() => {
// TODO(rluvaton): set reset modules option in the jest config instead
jest.resetModules(); // this is important - it clears the cache
});

Expand All @@ -51,30 +46,6 @@ describe('Get User Options (from the available option)', () => {
expect(userOptionGetter).toBeDefined();
});

it('should throw error when no userOptionGetters passed', async () => {
const { userOptionGetter } = startTest('linux');
const pr = userOptionGetter();

await expect(pr).toReject();

const rejectResult = await pr.catch((e) => e);
expect(rejectResult).toBeDefined();
expect(rejectResult).toBeInstanceOf(Error);
expect(rejectResult).toHaveProperty('message', 'One of the user option getter must be provided');
});

it('should throw error when empty userOptionGetters passed', async () => {
const { userOptionGetter } = startTest('linux');
const pr = getOptionsAndEnsureCalledTimeAndArgs(userOptionGetter, {});

await expect(pr).toReject();

const rejectResult = await pr.catch((e) => e);
expect(rejectResult).toBeDefined();
expect(rejectResult).toBeInstanceOf(Error);
expect(rejectResult).toHaveProperty('message', 'One of the user option getter must be provided');
});

it('should throw error when userOptionGetters rejected', async () => {
const { userOptionGetter } = startTest('linux');
const pr = getOptionsAndEnsureCalledTimeAndArgs(userOptionGetter, {
Expand Down Expand Up @@ -105,8 +76,8 @@ describe('Get User Options (from the available option)', () => {
});

it('should get the first user options that resolved', async () => {
const { IUserOptionGetter, UserOptions, userOptionGetter } = startTest('windows');
const expectedUserOptions: typeof UserOptions = {
const { userOptionGetter } = startTest('windows');
const expectedUserOptions: UserOptionsLib = {
storagePath: 'C://storage/',
destPublishScriptFilePath: './publish.bat',
npmPublishOptions: {
Expand All @@ -118,7 +89,7 @@ describe('Get User Options (from the available option)', () => {
},
};

const pr = getOptionsAndEnsureCalledTimeAndArgs<typeof IUserOptionGetter>(userOptionGetter, {
const pr = getOptionsAndEnsureCalledTimeAndArgs<IUserOptionGetterLib>(userOptionGetter, {
args: () =>
Promise.resolve({
storagePath: expectedUserOptions.storagePath,
Expand All @@ -137,9 +108,9 @@ describe('Get User Options (from the available option)', () => {
});

it('should get the first user options that not rejected', async () => {
const { UserOptions, userOptionGetter } = startTest('windows');
const { userOptionGetter } = startTest('windows');

const expectedUserOptions: typeof UserOptions = {
const expectedUserOptions: UserOptionsLib = {
storagePath: 'C://storage/',
destPublishScriptFilePath: './my-publish-script.bat',
npmPublishOptions: {
Expand Down Expand Up @@ -167,8 +138,8 @@ describe('Get User Options (from the available option)', () => {
});

it('should get provided storage path and default values for destPublishScriptFilePath npmPublishOptions.registry (on Windows)', async () => {
const { UserOptions, userOptionGetter } = startTest('windows');
const expectedUserOptions: typeof UserOptions = {
const { userOptionGetter } = startTest('windows');
const expectedUserOptions: UserOptionsLib = {
storagePath: 'C://storage/',
destPublishScriptFilePath: './publish.bat',
npmPublishOptions: {
Expand All @@ -190,9 +161,9 @@ describe('Get User Options (from the available option)', () => {
});

it('should get provided storage path and default values for destPublishScriptFilePath npmPublishOptions.registry (on Linux)', async () => {
const { UserOptions, userOptionGetter } = startTest('linux');
const { userOptionGetter } = startTest('linux');

const expectedUserOptions: typeof UserOptions = {
const expectedUserOptions: UserOptionsLib = {
storagePath: '/home/root/my-storage/',
destPublishScriptFilePath: './publish.sh',
npmPublishOptions: {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { IUserOptionGetter } from './i-user-option-getter';
import { DEFAULT_USER_OPTIONS, setDefaultUserOptionsProperties, UserOptions } from './user-options';
import { logger } from '../logger';
import { IUserOptionGetter } from '../i-user-option-getter';
import { DEFAULT_USER_OPTIONS, setDefaultUserOptionsProperties, UserOptions } from '../user-options';
import { logger } from '../../logger';

/**
* Get the user options from one of the provided getters
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import 'jest-extended';

import { IUserOptionGetter as IUserOptionGetterLib } from '../i-user-option-getter';
import { UserOptions as UserOptionsLib } from '../user-options';
import { setPlatform } from '../../../tests/util';
import { IUserOptionGetter as IUserOptionGetterLib } from '../../i-user-option-getter';
import { UserOptions as UserOptionsLib } from '../../user-options';
import { setPlatform } from '../../../../tests/util';
import Mock = jest.Mock;

interface TestDeps {
Expand All @@ -17,11 +17,11 @@ function getDeps(): TestDeps {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const prompts = require('prompts');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { UserOptions } = require('../user-options');
const { UserOptions } = require('../../user-options');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { IUserOptionGetter } = require('../i-user-option-getter');
const { IUserOptionGetter } = require('../../i-user-option-getter');
// eslint-disable-next-line @typescript-eslint/no-var-requires
const UserOptionPromptGetter = require('./user-option-prompt-getter');
const UserOptionPromptGetter = require('./');

return { prompts, UserOptions, IUserOptionGetter, UserOptionPromptGetter };
}
Expand Down Expand Up @@ -70,12 +70,6 @@ describe('Get User Options from User Interactive Input', () => {
setPlatform(originalPlatform);
});

it('userOptionPromptGetter should be define', () => {
// eslint-disable-next-line @typescript-eslint/no-var-requires
const { userOptionPromptGetter } = require('./user-option-prompt-getter');
expect(userOptionPromptGetter).toBeDefined();
});

describe('should get provided storage path and default values for destPublishScriptFilePath npmPublishOptions.registry', () => {
it.each([
['win32', 'C://storage-to-publish', './publish.bat'],
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { IUserOptionGetter } from '../i-user-option-getter';
import { DEFAULT_USER_OPTIONS } from '../user-options';
import { IUserOptionGetter } from '../../i-user-option-getter';
import prompts from 'prompts';
import { logger } from '../../logger';
import { deepClone } from '../../utils';
import { logger } from '../../../logger';
import { deepClone } from '../../../utils/common';
import { DEFAULT_USER_OPTIONS } from '../../user-options';
import {
validateStorage,
validateDestPublishScriptFilePath,
validateNpmPublishOptionsIfSpecified,
validateOnlyNewOptionsIfSpecified,
} from '../validator';
validateStorage,
} from '../../validator';

const _questions = [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import 'jest-extended';
import { DEFAULT_USER_OPTIONS, setDefaultUserOptionsProperties, UserOptions } from './user-options';
import { deepClone } from '../utils';
import { deepClone } from '../utils/common';

describe('UserOptions', () => {
describe('#setDefaultUserOptionsProperties', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { NpmPublishOptions } from '../npm-publish-script-creator';
import { getCurrentOS, OSTypes } from '../utils';
import { getCurrentOS, OSTypes } from '../utils/common';

export interface UserOptionsGetNewPackages {
enable?: boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import 'jest-extended';
import { when, verifyAllWhenMocksCalled, resetAllWhenMocks } from 'jest-when';

import { dirname } from 'path';
import { UserOptions } from './user-options';
import * as validator from './validator';
import * as fsUtils from '../fs-utils';
import * as npmUtils from '../npm-utils';
import { UserOptions } from '../user-options';
import * as validator from '../validator';
import * as fsUtils from '../../utils/fs';
import * as npmUtils from '../../utils/npm';

describe('User Options Validator', () => {
afterEach(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { UserOptions } from './user-options';
import { isDirectoryExists } from '../fs-utils';
import { UserOptions } from '../user-options';
import { isDirectoryExists } from '../../utils/fs';
import { dirname } from 'path';
import { isWebUri } from 'valid-url';
import isValidPath from 'is-valid-path';
import { getCurrentRegistry, pingNpmRegistry } from '../npm-utils';
import { getCurrentRegistry, pingNpmRegistry } from '../../utils/npm';

export const validateUserOptions = async (options: Partial<UserOptions>): Promise<boolean> => {
return (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as path from 'path';
import { fs, vol } from 'memfs';

jest.mock('fs', () => fs);
import storageExplorer, { Package } from './storage-explorer';
import storageExplorer, { Package } from './';

describe('Storage Explorer', () => {
const mockFs = (fakeFsStructure) => vol.fromNestedJSON(fakeFsStructure, '/');
Expand Down
2 changes: 1 addition & 1 deletion src/storage-explorer.ts → src/storage-explorer/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import dirTree from 'directory-tree';
import { logger } from './logger';
import { logger } from '../logger/';
import emoji from 'node-emoji';
import path from 'path';

Expand Down
1 change: 0 additions & 1 deletion src/type-utils.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/utils.ts → src/utils/common/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export const getLineTransformer = (outputFilePath: string) => {

export const getPackageName = () => {
if (!packageJson) {
packageJson = require('../package.json');
packageJson = require('../../../package.json');
}

return packageJson.name;
Expand Down
6 changes: 3 additions & 3 deletions src/fs-utils/index.ts → src/utils/fs/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import fs, { Stats } from 'fs';
import { Stats } from 'fs';
import fsPromises from 'fs/promises';

export const getPathType = (path: string): Promise<Stats> =>
new Promise((resolve, reject) => fs.lstat(path, (err, stats) => (err ? reject(err) : resolve(stats))));
export const getPathType = (path: string): Promise<Stats> => fsPromises.lstat(path);

export const isDirectoryExists = async (path?: string) => {
if (!path) {
Expand Down
Loading