Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Anson Hou
awesome-fed-test
Commits
46ecec93
Commit
46ecec93
authored
Apr 20, 2022
by
Anson Hou
Browse files
feat: first blood
parent
8f132aab
Changes
132
Expand all
Hide whitespace changes
Inline
Side-by-side
.gitignore
0 → 100644
View file @
46ecec93
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
node_modules
.pnp
.pnp.js
# testing
coverage
build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# turbo
.turbo
# lock
pnpm-lock.yaml
# ide
.idea
\ No newline at end of file
apps/crucio-review-admin/.eslintignore
0 → 100644
View file @
46ecec93
config/**/*.js
scripts/**/*.js
\ No newline at end of file
apps/crucio-review-admin/.eslintrc.js
0 → 100644
View file @
46ecec93
/* .eslintrc.js */
module
.
exports
=
{
"
env
"
:
{
"
browser
"
:
true
,
"
es6
"
:
true
},
"
extends
"
:
"
airbnb
"
,
"
parser
"
:
"
babel-eslint
"
,
"
parserOptions
"
:
{
"
ecmaFeatures
"
:
{
"
jsx
"
:
true
},
"
ecmaVersion
"
:
2017
,
"
sourceType
"
:
"
module
"
},
"
plugins
"
:
[
"
react-hooks
"
],
"
rules
"
:
{
"
camelcase
"
:
0
,
"
semi
"
:
[
2
,
"
never
"
],
"
jsx-a11y/click-events-have-key-events
"
:
0
,
'
jsx-a11y/no-static-element-interactions
'
:
0
,
'
jsx-a11y/no-noninteractive-element-interactions
'
:
0
,
'
jsx-a11y/media-has-caption
'
:
0
,
"
react/prop-types
"
:
1
,
"
react/forbid-prop-types
"
:
0
,
"
react/jsx-filename-extension
"
:
[
2
,
{
extensions
:
[
'
.js
'
,
'
.jsx
'
,
'
.tsx
'
]
}],
"
jsx-a11y/anchor-is-valid
"
:
0
,
"
react-hooks/rules-of-hooks
"
:
"
error
"
,
"
react-hooks/exhaustive-deps
"
:
"
warn
"
,
// VSCode 的 ESLint 扩展插件暂时无法正确修复这条规则带来的错误
"
react/jsx-one-expression-per-line
"
:
0
,
}
};
\ No newline at end of file
apps/crucio-review-admin/config/env.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
fs
=
require
(
'
fs
'
);
const
path
=
require
(
'
path
'
);
const
paths
=
require
(
'
./paths
'
);
// Make sure that including paths.js after env.js will read .env variables.
delete
require
.
cache
[
require
.
resolve
(
'
./paths
'
)];
const
NODE_ENV
=
process
.
env
.
NODE_ENV
;
if
(
!
NODE_ENV
)
{
throw
new
Error
(
'
The NODE_ENV environment variable is required but was not specified.
'
);
}
// https://github.com/bkeepers/dotenv#what-other-env-files-can-i-use
var
dotenvFiles
=
[
`
${
paths
.
dotenv
}
.
${
NODE_ENV
}
.local`
,
`
${
paths
.
dotenv
}
.
${
NODE_ENV
}
`
,
// Don't include `.env.local` for `test` environment
// since normally you expect tests to produce the same
// results for everyone
NODE_ENV
!==
'
test
'
&&
`
${
paths
.
dotenv
}
.local`
,
paths
.
dotenv
,
].
filter
(
Boolean
);
// Load environment variables from .env* files. Suppress warnings using silent
// if this file is missing. dotenv will never modify any environment variables
// that have already been set. Variable expansion is supported in .env files.
// https://github.com/motdotla/dotenv
// https://github.com/motdotla/dotenv-expand
dotenvFiles
.
forEach
(
dotenvFile
=>
{
if
(
fs
.
existsSync
(
dotenvFile
))
{
require
(
'
dotenv-expand
'
)(
require
(
'
dotenv
'
).
config
({
path
:
dotenvFile
,
})
);
}
});
// We support resolving modules according to `NODE_PATH`.
// This lets you use absolute paths in imports inside large monorepos:
// https://github.com/facebook/create-react-app/issues/253.
// It works similar to `NODE_PATH` in Node itself:
// https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
// Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
// Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
// https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421
// We also resolve them to make sure all tools using them work consistently.
const
appDirectory
=
fs
.
realpathSync
(
process
.
cwd
());
process
.
env
.
NODE_PATH
=
(
process
.
env
.
NODE_PATH
||
''
)
.
split
(
path
.
delimiter
)
.
filter
(
folder
=>
folder
&&
!
path
.
isAbsolute
(
folder
))
.
map
(
folder
=>
path
.
resolve
(
appDirectory
,
folder
))
.
join
(
path
.
delimiter
);
// Grab NODE_ENV and REACT_APP_* environment variables and prepare them to be
// injected into the application via DefinePlugin in Webpack configuration.
const
REACT_APP
=
/^REACT_APP_/i
;
function
getClientEnvironment
(
publicUrl
)
{
const
raw
=
Object
.
keys
(
process
.
env
)
.
filter
(
key
=>
REACT_APP
.
test
(
key
))
.
reduce
(
(
env
,
key
)
=>
{
env
[
key
]
=
process
.
env
[
key
];
return
env
;
},
{
// Useful for determining whether we’re running in production mode.
// Most importantly, it switches React into the correct mode.
NODE_ENV
:
process
.
env
.
NODE_ENV
||
'
development
'
,
// Useful for resolving the correct path to static assets in `public`.
// For example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />.
// This should only be used as an escape hatch. Normally you would put
// images into the `src` and `import` them in code to get their paths.
PUBLIC_URL
:
publicUrl
,
}
);
// Stringify all values so we can feed into Webpack DefinePlugin
const
stringified
=
{
'
process.env
'
:
Object
.
keys
(
raw
).
reduce
((
env
,
key
)
=>
{
env
[
key
]
=
JSON
.
stringify
(
raw
[
key
]);
return
env
;
},
{}),
};
return
{
raw
,
stringified
};
}
module
.
exports
=
getClientEnvironment
;
apps/crucio-review-admin/config/jest/cssTransform.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
// This is a custom Jest transformer turning style imports into empty objects.
// http://facebook.github.io/jest/docs/en/webpack.html
module
.
exports
=
{
process
()
{
return
'
module.exports = {};
'
;
},
getCacheKey
()
{
// The output is always the same.
return
'
cssTransform
'
;
},
};
apps/crucio-review-admin/config/jest/fileTransform.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
path
=
require
(
'
path
'
);
const
camelcase
=
require
(
'
camelcase
'
);
// This is a custom Jest transformer turning file imports into filenames.
// http://facebook.github.io/jest/docs/en/webpack.html
module
.
exports
=
{
process
(
src
,
filename
)
{
const
assetFilename
=
JSON
.
stringify
(
path
.
basename
(
filename
));
if
(
filename
.
match
(
/
\.
svg$/
))
{
// Based on how SVGR generates a component name:
// https://github.com/smooth-code/svgr/blob/01b194cf967347d43d4cbe6b434404731b87cf27/packages/core/src/state.js#L6
const
pascalCaseFileName
=
camelcase
(
path
.
parse
(
filename
).
name
,
{
pascalCase
:
true
,
});
const
componentName
=
`Svg
${
pascalCaseFileName
}
`
;
return
`const React = require('react');
module.exports = {
__esModule: true,
default:
${
assetFilename
}
,
ReactComponent: React.forwardRef(function
${
componentName
}
(props, ref) {
return {
$$typeof: Symbol.for('react.element'),
type: 'svg',
ref: ref,
key: null,
props: Object.assign({}, props, {
children:
${
assetFilename
}
})
};
}),
};`
;
}
return
`module.exports =
${
assetFilename
}
;`
;
},
};
apps/crucio-review-admin/config/modules.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
fs
=
require
(
'
fs
'
);
const
path
=
require
(
'
path
'
);
const
paths
=
require
(
'
./paths
'
);
const
chalk
=
require
(
'
react-dev-utils/chalk
'
);
/**
* Get the baseUrl of a compilerOptions object.
*
* @param {Object} options
*/
function
getAdditionalModulePaths
(
options
=
{})
{
const
baseUrl
=
options
.
baseUrl
;
// We need to explicitly check for null and undefined (and not a falsy value) because
// TypeScript treats an empty string as `.`.
if
(
baseUrl
==
null
)
{
// If there's no baseUrl set we respect NODE_PATH
// Note that NODE_PATH is deprecated and will be removed
// in the next major release of create-react-app.
const
nodePath
=
process
.
env
.
NODE_PATH
||
''
;
return
nodePath
.
split
(
path
.
delimiter
).
filter
(
Boolean
);
}
const
baseUrlResolved
=
path
.
resolve
(
paths
.
appPath
,
baseUrl
);
// We don't need to do anything if `baseUrl` is set to `node_modules`. This is
// the default behavior.
if
(
path
.
relative
(
paths
.
appNodeModules
,
baseUrlResolved
)
===
''
)
{
return
null
;
}
// Allow the user set the `baseUrl` to `appSrc`.
if
(
path
.
relative
(
paths
.
appSrc
,
baseUrlResolved
)
===
''
)
{
return
[
paths
.
appSrc
];
}
// Otherwise, throw an error.
throw
new
Error
(
chalk
.
red
.
bold
(
"
Your project's `baseUrl` can only be set to `src` or `node_modules`.
"
+
'
Create React App does not support other values at this time.
'
)
);
}
function
getModules
()
{
// Check if TypeScript is setup
const
hasTsConfig
=
fs
.
existsSync
(
paths
.
appTsConfig
);
const
hasJsConfig
=
fs
.
existsSync
(
paths
.
appJsConfig
);
if
(
hasTsConfig
&&
hasJsConfig
)
{
throw
new
Error
(
'
You have both a tsconfig.json and a jsconfig.json. If you are using TypeScript please remove your jsconfig.json file.
'
);
}
let
config
;
// If there's a tsconfig.json we assume it's a
// TypeScript project and set up the config
// based on tsconfig.json
if
(
hasTsConfig
)
{
config
=
require
(
paths
.
appTsConfig
);
// Otherwise we'll check if there is jsconfig.json
// for non TS projects.
}
else
if
(
hasJsConfig
)
{
config
=
require
(
paths
.
appJsConfig
);
}
config
=
config
||
{};
const
options
=
config
.
compilerOptions
||
{};
const
additionalModulePaths
=
getAdditionalModulePaths
(
options
);
return
{
additionalModulePaths
:
additionalModulePaths
,
hasTsConfig
,
};
}
module
.
exports
=
getModules
();
apps/crucio-review-admin/config/paths.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
path
=
require
(
'
path
'
);
const
fs
=
require
(
'
fs
'
);
const
url
=
require
(
'
url
'
);
// Make sure any symlinks in the project folder are resolved:
// https://github.com/facebook/create-react-app/issues/637
const
appDirectory
=
fs
.
realpathSync
(
process
.
cwd
());
const
resolveApp
=
relativePath
=>
path
.
resolve
(
appDirectory
,
relativePath
);
const
envPublicUrl
=
process
.
env
.
PUBLIC_URL
;
function
ensureSlash
(
inputPath
,
needsSlash
)
{
const
hasSlash
=
inputPath
.
endsWith
(
'
/
'
);
if
(
hasSlash
&&
!
needsSlash
)
{
return
inputPath
.
substr
(
0
,
inputPath
.
length
-
1
);
}
else
if
(
!
hasSlash
&&
needsSlash
)
{
return
`
${
inputPath
}
/`
;
}
else
{
return
inputPath
;
}
}
const
getPublicUrl
=
appPackageJson
=>
envPublicUrl
||
require
(
appPackageJson
).
homepage
;
// We use `PUBLIC_URL` environment variable or "homepage" field to infer
// "public path" at which the app is served.
// Webpack needs to know it to put the right <script> hrefs into HTML even in
// single-page apps that may serve index.html for nested URLs like /todos/42.
// We can't use a relative path in HTML because we don't want to load something
// like /todos/42/static/js/bundle.7289d.js. We have to know the root.
function
getServedPath
(
appPackageJson
)
{
const
publicUrl
=
getPublicUrl
(
appPackageJson
);
const
servedUrl
=
envPublicUrl
||
(
publicUrl
?
url
.
parse
(
publicUrl
).
pathname
:
'
/
'
);
return
ensureSlash
(
servedUrl
,
true
);
}
const
moduleFileExtensions
=
[
'
web.mjs
'
,
'
mjs
'
,
'
web.js
'
,
'
js
'
,
'
web.ts
'
,
'
ts
'
,
'
web.tsx
'
,
'
tsx
'
,
'
json
'
,
'
web.jsx
'
,
'
jsx
'
,
];
// Resolve file paths in the same order as webpack
const
resolveModule
=
(
resolveFn
,
filePath
)
=>
{
const
extension
=
moduleFileExtensions
.
find
(
extension
=>
fs
.
existsSync
(
resolveFn
(
`
${
filePath
}
.
${
extension
}
`
))
);
if
(
extension
)
{
return
resolveFn
(
`
${
filePath
}
.
${
extension
}
`
);
}
return
resolveFn
(
`
${
filePath
}
.js`
);
};
// config after eject: we're in ./config/
module
.
exports
=
{
dotenv
:
resolveApp
(
'
.env
'
),
appPath
:
resolveApp
(
'
.
'
),
appBuild
:
resolveApp
(
'
build
'
),
appPublic
:
resolveApp
(
'
public
'
),
appHtml
:
resolveApp
(
'
public/index.html
'
),
appIndexJs
:
resolveModule
(
resolveApp
,
'
src/index
'
),
appPackageJson
:
resolveApp
(
'
package.json
'
),
appSrc
:
resolveApp
(
'
src
'
),
appTsConfig
:
resolveApp
(
'
tsconfig.json
'
),
appJsConfig
:
resolveApp
(
'
jsconfig.json
'
),
yarnLockFile
:
resolveApp
(
'
yarn.lock
'
),
testsSetup
:
resolveModule
(
resolveApp
,
'
src/setupTests
'
),
proxySetup
:
resolveApp
(
'
src/setupProxy.js
'
),
appNodeModules
:
resolveApp
(
'
node_modules
'
),
publicUrl
:
getPublicUrl
(
resolveApp
(
'
package.json
'
)),
servedPath
:
getServedPath
(
resolveApp
(
'
package.json
'
)),
};
module
.
exports
.
moduleFileExtensions
=
moduleFileExtensions
;
apps/crucio-review-admin/config/pnpTs.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
{
resolveModuleName
}
=
require
(
'
ts-pnp
'
);
exports
.
resolveModuleName
=
(
typescript
,
moduleName
,
containingFile
,
compilerOptions
,
resolutionHost
)
=>
{
return
resolveModuleName
(
moduleName
,
containingFile
,
compilerOptions
,
resolutionHost
,
typescript
.
resolveModuleName
);
};
exports
.
resolveTypeReferenceDirective
=
(
typescript
,
moduleName
,
containingFile
,
compilerOptions
,
resolutionHost
)
=>
{
return
resolveModuleName
(
moduleName
,
containingFile
,
compilerOptions
,
resolutionHost
,
typescript
.
resolveTypeReferenceDirective
);
};
apps/crucio-review-admin/config/webpack.config.js
0 → 100644
View file @
46ecec93
This diff is collapsed.
Click to expand it.
apps/crucio-review-admin/config/webpackDevServer.config.js
0 → 100644
View file @
46ecec93
'
use strict
'
;
const
errorOverlayMiddleware
=
require
(
'
react-dev-utils/errorOverlayMiddleware
'
);
const
evalSourceMapMiddleware
=
require
(
'
react-dev-utils/evalSourceMapMiddleware
'
);
const
noopServiceWorkerMiddleware
=
require
(
'
react-dev-utils/noopServiceWorkerMiddleware
'
);
const
ignoredFiles
=
require
(
'
react-dev-utils/ignoredFiles
'
);
const
paths
=
require
(
'
./paths
'
);
const
fs
=
require
(
'
fs
'
);
const
protocol
=
process
.
env
.
HTTPS
===
'
true
'
?
'
https
'
:
'
http
'
;
const
host
=
process
.
env
.
HOST
||
'
0.0.0.0
'
;
module
.
exports
=
function
(
proxy
,
allowedHost
)
{
return
{
// WebpackDevServer 2.4.3 introduced a security fix that prevents remote
// websites from potentially accessing local content through DNS rebinding:
// https://github.com/webpack/webpack-dev-server/issues/887
// https://medium.com/webpack/webpack-dev-server-middleware-security-issues-1489d950874a
// However, it made several existing use cases such as development in cloud
// environment or subdomains in development significantly more complicated:
// https://github.com/facebook/create-react-app/issues/2271
// https://github.com/facebook/create-react-app/issues/2233
// While we're investigating better solutions, for now we will take a
// compromise. Since our WDS configuration only serves files in the `public`
// folder we won't consider accessing them a vulnerability. However, if you
// use the `proxy` feature, it gets more dangerous because it can expose
// remote code execution vulnerabilities in backends like Django and Rails.
// So we will disable the host check normally, but enable it if you have
// specified the `proxy` setting. Finally, we let you override it if you
// really know what you're doing with a special environment variable.
disableHostCheck
:
!
proxy
||
process
.
env
.
DANGEROUSLY_DISABLE_HOST_CHECK
===
'
true
'
,
// Enable gzip compression of generated files.
compress
:
true
,
// Silence WebpackDevServer's own logs since they're generally not useful.
// It will still show compile warnings and errors with this setting.
clientLogLevel
:
'
none
'
,
// By default WebpackDevServer serves physical files from current directory
// in addition to all the virtual build products that it serves from memory.
// This is confusing because those files won’t automatically be available in
// production build folder unless we copy them. However, copying the whole
// project directory is dangerous because we may expose sensitive files.
// Instead, we establish a convention that only files in `public` directory
// get served. Our build script will copy `public` into the `build` folder.
// In `index.html`, you can get URL of `public` folder with %PUBLIC_URL%:
// <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
// In JavaScript code, you can access it with `process.env.PUBLIC_URL`.
// Note that we only recommend to use `public` folder as an escape hatch
// for files like `favicon.ico`, `manifest.json`, and libraries that are
// for some reason broken when imported through Webpack. If you just want to
// use an image, put it in `src` and `import` it from JavaScript instead.
contentBase
:
paths
.
appPublic
,
// By default files from `contentBase` will not trigger a page reload.
watchContentBase
:
true
,
// Enable hot reloading server. It will provide /sockjs-node/ endpoint
// for the WebpackDevServer client so it can learn when the files were
// updated. The WebpackDevServer client is included as an entry point
// in the Webpack development configuration. Note that only changes
// to CSS are currently hot reloaded. JS changes will refresh the browser.
hot
:
true
,
// It is important to tell WebpackDevServer to use the same "root" path
// as we specified in the config. In development, we always serve from /.
publicPath
:
'
/
'
,
// WebpackDevServer is noisy by default so we emit custom message instead
// by listening to the compiler events with `compiler.hooks[...].tap` calls above.
quiet
:
true
,
// Reportedly, this avoids CPU overload on some systems.
// https://github.com/facebook/create-react-app/issues/293
// src/node_modules is not ignored to support absolute imports
// https://github.com/facebook/create-react-app/issues/1065
watchOptions
:
{
ignored
:
ignoredFiles
(
paths
.
appSrc
),
},
// Enable HTTPS if the HTTPS environment variable is set to 'true'
https
:
protocol
===
'
https
'
,
host
,
overlay
:
false
,
historyApiFallback
:
{
// Paths with dots should still use the history fallback.
// See https://github.com/facebook/create-react-app/issues/387.
disableDotRule
:
true
,
},
public
:
allowedHost
,
proxy
,
before
(
app
,
server
)
{
if
(
fs
.
existsSync
(
paths
.
proxySetup
))
{
// This registers user provided middleware for proxy reasons
require
(
paths
.
proxySetup
)(
app
);
}
// This lets us fetch source contents from webpack for the error overlay
app
.
use
(
evalSourceMapMiddleware
(
server
));
// This lets us open files from the runtime error overlay.
app
.
use
(
errorOverlayMiddleware
());
// This service worker file is effectively a 'no-op' that will reset any
// previous service worker registered for the same host:port combination.
// We do this in development to avoid hitting the production cache if
// it used the same host and port.
// https://github.com/facebook/create-react-app/issues/2272#issuecomment-302832432
app
.
use
(
noopServiceWorkerMiddleware
());
},
};
};
apps/crucio-review-admin/package.json
0 → 100644
View file @
46ecec93
{
"name"
:
"crucio-review-admin"
,
"version"
:
"0.1.0"
,
"private"
:
true
,
"dependencies"
:
{
"@ant-design/compatible"
:
"^1.0.4"
,
"@ant-design/icons"
:
"^4.2.1"
,
"@babel/core"
:
"7.4.3"
,
"@babel/plugin-proposal-class-properties"
:
"^7.5.0"
,
"@babel/plugin-transform-react-jsx"
:
"^7.3.0"
,
"@babel/plugin-transform-react-jsx-self"
:
"^7.2.0"
,
"@babel/preset-react"
:
"^7.0.0"
,
"@svgr/webpack"
:
"4.1.0"
,
"@typescript-eslint/eslint-plugin"
:
"1.6.0"
,
"@typescript-eslint/parser"
:
"1.6.0"
,
"antd"
:
"^4.15.0"
,
"axios"
:
"^0.19.0"
,
"babel-eslint"
:
"^10.0.3"
,
"babel-jest"
:
"^24.8.0"
,
"babel-loader"
:
"8.0.5"
,
"babel-plugin-import"
:
"^1.11.2"
,
"babel-plugin-named-asset-import"
:
"^0.3.2"
,
"babel-preset-react-app"
:
"^9.0.0"
,
"camelcase"
:
"^5.2.0"
,
"case-sensitive-paths-webpack-plugin"
:
"2.2.0"
,
"clipboard"
:
"^2.0.4"
,
"core-js"
:
"^3.1.4"
,
"css-loader"
:
"2.1.1"
,
"dotenv"
:
"6.2.0"
,
"dotenv-expand"
:
"4.2.0"
,
"eslint"
:
"^6.7.2"
,
"eslint-config-airbnb"
:
"^17.1.0"
,
"eslint-config-react-app"
:
"^4.0.1"
,
"eslint-loader"
:
"2.1.2"
,
"eslint-plugin-flowtype"
:
"2.50.1"
,
"eslint-plugin-html"
:
"^6.0.0"
,
"eslint-plugin-import"
:
"^2.17.3"
,
"eslint-plugin-jsx-a11y"
:
"^6.2.1"
,
"eslint-plugin-react"
:
"^7.13.0"
,
"eslint-plugin-react-hooks"
:
"^2.3.0"
,
"file-loader"
:
"3.0.1"
,
"flv.js"
:
"^1.5.0"
,
"fs-extra"
:
"7.0.1"
,
"history"
:
"^4.9.0"
,
"html-webpack-plugin"
:
"4.0.0-beta.5"
,