Replace getConfig helper to read value from process.env
This commit is contained in:
parent
11511a89e3
commit
65aefcd45b
10 changed files with 68 additions and 24 deletions
|
@ -10,14 +10,13 @@ import * as projectActions from '../modules/IDE/actions/project';
|
||||||
import { setAllAccessibleOutput } from '../modules/IDE/actions/preferences';
|
import { setAllAccessibleOutput } from '../modules/IDE/actions/preferences';
|
||||||
import { logoutUser } from '../modules/User/actions';
|
import { logoutUser } from '../modules/User/actions';
|
||||||
|
|
||||||
|
import getConfig from '../utils/getConfig';
|
||||||
import { metaKeyName, } from '../utils/metaKey';
|
import { metaKeyName, } from '../utils/metaKey';
|
||||||
|
|
||||||
import CaretLeftIcon from '../images/left-arrow.svg';
|
import CaretLeftIcon from '../images/left-arrow.svg';
|
||||||
import TriangleIcon from '../images/down-filled-triangle.svg';
|
import TriangleIcon from '../images/down-filled-triangle.svg';
|
||||||
import LogoIcon from '../images/p5js-logo-small.svg';
|
import LogoIcon from '../images/p5js-logo-small.svg';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
|
||||||
|
|
||||||
class Nav extends React.PureComponent {
|
class Nav extends React.PureComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
@ -272,7 +271,7 @@ class Nav extends React.PureComponent {
|
||||||
New
|
New
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
{ __process.env.LOGIN_ENABLED && (!this.props.project.owner || this.isUserOwner()) &&
|
{ getConfig('LOGIN_ENABLED') && (!this.props.project.owner || this.isUserOwner()) &&
|
||||||
<li className="nav__dropdown-item">
|
<li className="nav__dropdown-item">
|
||||||
<button
|
<button
|
||||||
onClick={this.handleSave}
|
onClick={this.handleSave}
|
||||||
|
@ -324,7 +323,7 @@ class Nav extends React.PureComponent {
|
||||||
Open
|
Open
|
||||||
</Link>
|
</Link>
|
||||||
</li> }
|
</li> }
|
||||||
{__process.env.UI_COLLECTIONS_ENABLED &&
|
{getConfig('UI_COLLECTIONS_ENABLED') &&
|
||||||
this.props.user.authenticated &&
|
this.props.user.authenticated &&
|
||||||
this.props.project.id &&
|
this.props.project.id &&
|
||||||
<li className="nav__dropdown-item">
|
<li className="nav__dropdown-item">
|
||||||
|
@ -337,7 +336,7 @@ class Nav extends React.PureComponent {
|
||||||
Add to Collection
|
Add to Collection
|
||||||
</Link>
|
</Link>
|
||||||
</li>}
|
</li>}
|
||||||
{ __process.env.EXAMPLES_ENABLED &&
|
{ getConfig('EXAMPLES_ENABLED') &&
|
||||||
<li className="nav__dropdown-item">
|
<li className="nav__dropdown-item">
|
||||||
<Link
|
<Link
|
||||||
to="/p5/sketches"
|
to="/p5/sketches"
|
||||||
|
@ -587,7 +586,7 @@ class Nav extends React.PureComponent {
|
||||||
My sketches
|
My sketches
|
||||||
</Link>
|
</Link>
|
||||||
</li>
|
</li>
|
||||||
{__process.env.UI_COLLECTIONS_ENABLED &&
|
{getConfig('UI_COLLECTIONS_ENABLED') &&
|
||||||
<li className="nav__dropdown-item">
|
<li className="nav__dropdown-item">
|
||||||
<Link
|
<Link
|
||||||
to={`/${this.props.user.username}/collections`}
|
to={`/${this.props.user.username}/collections`}
|
||||||
|
@ -635,7 +634,7 @@ class Nav extends React.PureComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
renderUserMenu(navDropdownState) {
|
renderUserMenu(navDropdownState) {
|
||||||
const isLoginEnabled = __process.env.LOGIN_ENABLED;
|
const isLoginEnabled = getConfig('LOGIN_ENABLED');
|
||||||
const isAuthenticated = this.props.user.authenticated;
|
const isAuthenticated = this.props.user.authenticated;
|
||||||
|
|
||||||
if (isLoginEnabled && isAuthenticated) {
|
if (isLoginEnabled && isAuthenticated) {
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
|
import getConfig from '../../utils/getConfig';
|
||||||
import DevTools from './components/DevTools';
|
import DevTools from './components/DevTools';
|
||||||
import { setPreviousPath } from '../IDE/actions/ide';
|
import { setPreviousPath } from '../IDE/actions/ide';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
|
||||||
|
|
||||||
class App extends React.Component {
|
class App extends React.Component {
|
||||||
constructor(props, context) {
|
constructor(props, context) {
|
||||||
super(props, context);
|
super(props, context);
|
||||||
|
@ -35,7 +34,7 @@ class App extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div className="app">
|
<div className="app">
|
||||||
{this.state.isMounted && !window.devToolsExtension && __process.env.NODE_ENV === 'development' && <DevTools />}
|
{this.state.isMounted && !window.devToolsExtension && getConfig('NODE_ENV') === 'development' && <DevTools />}
|
||||||
{this.props.children}
|
{this.props.children}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
import getConfig from '../../../utils/getConfig';
|
||||||
import { createFile } from './files';
|
import { createFile } from './files';
|
||||||
import { TEXT_FILE_REGEX } from '../../../../server/utils/fileUtils';
|
import { TEXT_FILE_REGEX } from '../../../../server/utils/fileUtils';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
const __process = (typeof global !== 'undefined' ? global : window).process;
|
||||||
const s3BucketHttps = __process.env.S3_BUCKET_URL_BASE ||
|
const s3BucketHttps = getConfig('S3_BUCKET_URL_BASE') ||
|
||||||
`https://s3-${__process.env.AWS_REGION}.amazonaws.com/${__process.env.S3_BUCKET}/`;
|
`https://s3-${getConfig('AWS_REGION')}.amazonaws.com/${getConfig('S3_BUCKET')}/`;
|
||||||
const ROOT_URL = __process.env.API_URL;
|
const ROOT_URL = __process.env.API_URL;
|
||||||
const MAX_LOCAL_FILE_SIZE = 80000; // bytes, aka 80 KB
|
const MAX_LOCAL_FILE_SIZE = 80000; // bytes, aka 80 KB
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,9 @@ import React from 'react';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import prettyBytes from 'pretty-bytes';
|
import prettyBytes from 'pretty-bytes';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
import getConfig from '../../../utils/getConfig';
|
||||||
const limit = __process.env.UPLOAD_LIMIT || 250000000;
|
|
||||||
|
const limit = getConfig('UPLOAD_LIMIT') || 250000000;
|
||||||
const MAX_SIZE_B = limit;
|
const MAX_SIZE_B = limit;
|
||||||
|
|
||||||
const formatPercent = (percent) => {
|
const formatPercent = (percent) => {
|
||||||
|
|
|
@ -4,11 +4,11 @@ import Dropzone from 'dropzone';
|
||||||
import { bindActionCreators } from 'redux';
|
import { bindActionCreators } from 'redux';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import * as UploaderActions from '../actions/uploader';
|
import * as UploaderActions from '../actions/uploader';
|
||||||
|
import getConfig from '../../../utils/getConfig';
|
||||||
import { fileExtensionsAndMimeTypes } from '../../../../server/utils/fileUtils';
|
import { fileExtensionsAndMimeTypes } from '../../../../server/utils/fileUtils';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
const s3Bucket = getConfig('S3_BUCKET_URL_BASE') ||
|
||||||
const s3Bucket = __process.env.S3_BUCKET_URL_BASE ||
|
`https://s3-${getConfig('AWS_REGION')}.amazonaws.com/${getConfig('S3_BUCKET')}/`;
|
||||||
`https://s3-${__process.env.AWS_REGION}.amazonaws.com/${__process.env.S3_BUCKET}/`;
|
|
||||||
|
|
||||||
class FileUploader extends React.Component {
|
class FileUploader extends React.Component {
|
||||||
componentDidMount() {
|
componentDidMount() {
|
||||||
|
|
|
@ -3,12 +3,12 @@ import PropTypes from 'prop-types';
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { Link } from 'react-router';
|
import { Link } from 'react-router';
|
||||||
import prettyBytes from 'pretty-bytes';
|
import prettyBytes from 'pretty-bytes';
|
||||||
|
import getConfig from '../../../utils/getConfig';
|
||||||
import FileUploader from './FileUploader';
|
import FileUploader from './FileUploader';
|
||||||
import { getreachedTotalSizeLimit } from '../selectors/users';
|
import { getreachedTotalSizeLimit } from '../selectors/users';
|
||||||
import ExitIcon from '../../../images/exit.svg';
|
import ExitIcon from '../../../images/exit.svg';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
const limit = getConfig('UPLOAD_LIMIT') || 250000000;
|
||||||
const limit = __process.env.UPLOAD_LIMIT || 250000000;
|
|
||||||
const limitText = prettyBytes(limit);
|
const limitText = prettyBytes(limit);
|
||||||
|
|
||||||
class UploadFileModal extends React.Component {
|
class UploadFileModal extends React.Component {
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import { createSelector } from 'reselect';
|
import { createSelector } from 'reselect';
|
||||||
|
import getConfig from '../../../utils/getConfig';
|
||||||
|
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
|
||||||
const getAuthenticated = state => state.user.authenticated;
|
const getAuthenticated = state => state.user.authenticated;
|
||||||
const getTotalSize = state => state.user.totalSize;
|
const getTotalSize = state => state.user.totalSize;
|
||||||
const getAssetsTotalSize = state => state.assets.totalSize;
|
const getAssetsTotalSize = state => state.assets.totalSize;
|
||||||
const limit = __process.env.UPLOAD_LIMIT || 250000000;
|
const limit = getConfig('UPLOAD_LIMIT') || 250000000;
|
||||||
|
|
||||||
export const getCanUploadMedia = createSelector(
|
export const getCanUploadMedia = createSelector(
|
||||||
getAuthenticated,
|
getAuthenticated,
|
||||||
|
|
|
@ -3,15 +3,14 @@ import thunk from 'redux-thunk';
|
||||||
import DevTools from './modules/App/components/DevTools';
|
import DevTools from './modules/App/components/DevTools';
|
||||||
import rootReducer from './reducers';
|
import rootReducer from './reducers';
|
||||||
import { clearState, loadState } from './persistState';
|
import { clearState, loadState } from './persistState';
|
||||||
|
import getConfig from './utils/getConfig';
|
||||||
const __process = (typeof global !== 'undefined' ? global : window).process;
|
|
||||||
|
|
||||||
export default function configureStore(initialState) {
|
export default function configureStore(initialState) {
|
||||||
const enhancers = [
|
const enhancers = [
|
||||||
applyMiddleware(thunk),
|
applyMiddleware(thunk),
|
||||||
];
|
];
|
||||||
|
|
||||||
if (__process.env.CLIENT && __process.env.NODE_ENV === 'development') {
|
if (getConfig('CLIENT') && getConfig('NODE_ENV') === 'development') {
|
||||||
// Enable DevTools only when rendering on client and during development.
|
// Enable DevTools only when rendering on client and during development.
|
||||||
enhancers.push(window.devToolsExtension ? window.devToolsExtension() : DevTools.instrument());
|
enhancers.push(window.devToolsExtension ? window.devToolsExtension() : DevTools.instrument());
|
||||||
}
|
}
|
||||||
|
|
17
client/utils/getConfig.js
Normal file
17
client/utils/getConfig.js
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* Returns config item from environment
|
||||||
|
*/
|
||||||
|
export default function getConfig(key) {
|
||||||
|
if (key == null) {
|
||||||
|
throw new Error('"key" must be provided to getConfig()');
|
||||||
|
}
|
||||||
|
|
||||||
|
const __process = (typeof global !== 'undefined' ? global : window).process;
|
||||||
|
const value = __process.env[key];
|
||||||
|
|
||||||
|
if (value == null) {
|
||||||
|
console.warn(`getConfig("${key}") returned null`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
28
client/utils/getConfig.test.js
Normal file
28
client/utils/getConfig.test.js
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import getConfig from './getConfig';
|
||||||
|
|
||||||
|
describe('utils/getConfig()', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
delete global.process.env.CONFIG_TEST_KEY_NAME;
|
||||||
|
delete window.process.env.CONFIG_TEST_KEY_NAME;
|
||||||
|
});
|
||||||
|
|
||||||
|
it('throws if key is not defined', () => {
|
||||||
|
expect(() => getConfig(/* key is missing */)).toThrow(/must be provided/);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fetches from global.process', () => {
|
||||||
|
global.process.env.CONFIG_TEST_KEY_NAME = 'editor.p5js.org';
|
||||||
|
|
||||||
|
expect(getConfig('CONFIG_TEST_KEY_NAME')).toBe('editor.p5js.org');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('fetches from window.process', () => {
|
||||||
|
window.process.env.CONFIG_TEST_KEY_NAME = 'editor.p5js.org';
|
||||||
|
|
||||||
|
expect(getConfig('CONFIG_TEST_KEY_NAME')).toBe('editor.p5js.org');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('warns but does not throw if no value found', () => {
|
||||||
|
expect(() => getConfig('CONFIG_TEST_KEY_NAME')).not.toThrow();
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue