style: global and simpler prettier config

this also removes precommit scripts because they were cumbersome
This commit is contained in:
Sérgio Ramos 2018-03-15 19:00:19 +00:00
parent 90d6b31264
commit 23ddc68ade
28 changed files with 208 additions and 1222 deletions

View File

@ -17,9 +17,9 @@ perf
refactor
revert
style
test
test
```
And where scope is one of ui-toolkit, my-joy-beta, cloudapi-gql, boilerplate, and create-instance.
*The recommended method to commit should be by running npm run commit.*
_The recommended method to commit should be by running npm run commit._

View File

@ -1,27 +1,17 @@
## I'm submitting a...
- [ ] bug report
- [ ] feature request
- [ ] design request
* [ ] bug report
* [ ] feature request
* [ ] design request
## What is the current behavior?
## If the current behavior is a bug, please provide the steps to reproduce and if possible a minimal demo of the problem
## What is the expected behavior?
## What is the motivation / use case for changing the behavior?
## If the current behavior is a bug, please provide your browser
## Other information

View File

@ -1,22 +1,14 @@
**Please check if the PR fulfills these requirements**
- [ ] The commit message follows our [guidelines](https://github.com/yldio/joyent-portal/blob/master/.github/COMMIT_GUIDELINES.md)
- [ ] Tests for the changes have been added (for bug fixes / features)
* [ ] The commit message follows our [guidelines](https://github.com/yldio/joyent-portal/blob/master/.github/COMMIT_GUIDELINES.md)
* [ ] Tests for the changes have been added (for bug fixes / features)
**What kind of change does this PR introduce?** (Bug fix, feature, docs update, ...)
**Does this PR close an issue?** (If not please create one)
**What is the new behavior (if this is a feature change)?**
**Does this PR introduce a breaking change?** (What changes might users need to make in their application due to this PR?)
**Other information**

View File

@ -1,11 +1,14 @@
{
"ignoreDevDependencies": true,
"allowedPackages": [{
"name": "colors",
"extraFieldsForDocumentation": "Licence is MIT, but was not found by tool: https://github.com/Marak/colors.js/blob/v0.5.1/MIT-LICENSE.txt",
"date": "17 January 2017",
"reason": "MIT Licenced"
}],
"allowedPackages": [
{
"name": "colors",
"extraFieldsForDocumentation":
"Licence is MIT, but was not found by tool: https://github.com/Marak/colors.js/blob/v0.5.1/MIT-LICENSE.txt",
"date": "17 January 2017",
"reason": "MIT Licenced"
}
],
"allowedLicenses": [
"CC-BY-4.0",
"CC0-1.0",

24
.prettierignore Normal file
View File

@ -0,0 +1,24 @@
.git/*
.DS_Store
license
yarn.lock
.travis.yml
.yarnclean
.eslintignore
.prettierignore
.npmignore
.gitignore
.dockerignore
dist
build
*.ico
*.html
*.log
*.svg
*.map
*.png
*.snap

31
.prettierrc Normal file
View File

@ -0,0 +1,31 @@
{
"bracketSpacing": true,
"jsxBracketSameLine": false,
"printWidth": 80,
"semi": true,
"singleQuote": true,
"tabWidth": 2,
"trailingComma": "none",
"useTabs": false,
"overrides": [
{
"files": [
".prettierrc",
".eslintrc",
".babelrc",
".tern-project",
".stylelintrc",
".lighthouserc"
],
"options": {
"parser": "json"
}
},
{
"files": ["package.json"],
"options": {
"printWidth": 180
}
}
]
}

View File

@ -1,8 +1,5 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,
@ -12,4 +9,4 @@
"configPath": "./webpack/index.js"
}
}
}
}

28
.vscode/launch.json vendored
View File

@ -1,15 +1,15 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:3069/",
"webRoot": "${workspaceRoot}"
}
]
}
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:3069/",
"webRoot": "${workspaceRoot}"
}
]
}

View File

@ -16,29 +16,17 @@
"build:test": "lerna run build:test --parallel --stream",
"test:run": "lerna run test --parallel --stream",
"test:ci:run": "lerna exec 'yarn run test:ci'",
"format": "./scripts/format",
"lint-staged": "./scripts/run-staged-pkg --lint",
"format-staged": "./scripts/format --staged",
"lint-license": "./scripts/license-to-fail",
"lint-docs": "./scripts/quality-docs",
"format": "prettier --config .prettierrc --write '**/*'",
"clean": "lerna clean --yes",
"commitmsg": "commitlint -e",
"precommit": "CI=1 redrun -s lint-staged format-staged",
"precommit": "pretty-quick --staged",
"commit": "commit"
},
"devDependencies": {
"@commitlint/cli": "^4.2.1",
"@commitlint/config-angular": "^4.2.1",
"@commitlint/prompt-cli": "^4.2.1",
"apr-awaitify": "^3.0.3",
"apr-filter": "^3.0.3",
"apr-for-each": "^3.0.3",
"apr-main": "^4.0.3",
"apr-map": "^3.0.3",
"apr-parallel": "^3.0.3",
"apr-reduce": "^3.0.3",
"babel-eslint": "^8.2.2",
"checksum": "^0.1.1",
"eslint": "^4.18.1",
"eslint-config-prettier": "^2.9.0",
"eslint-config-react-app": "^2.1.0",
@ -49,17 +37,11 @@
"eslint-plugin-markdown": "^1.0.0-beta.6",
"eslint-plugin-prettier": "^2.6.0",
"eslint-plugin-react": "^7.7.0",
"execa": "^0.9.0",
"force-array": "^3.1.0",
"husky": "^0.14.3",
"lerna": "^2.9.0",
"license-to-fail": "^2.2.0",
"lodash.uniq": "^4.5.0",
"prettier": "1.11.0",
"quality-docs": "^3.3.0",
"redrun": "^5.10.5",
"staged-git-files": "0.0.4",
"yargs": "^10.0.3"
"pretty-quick": "^1.4.1",
"redrun": "^5.10.5"
},
"resolutions": {
"axios": "0.16.2",
@ -74,8 +56,5 @@
"breeze-nexttick": "0.2.1",
"isarray": "1.0.0"
},
"workspaces": [
"packages/*",
"bundle"
]
"workspaces": ["packages/*", "bundle"]
}

View File

@ -1,8 +1,5 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,

View File

@ -1,8 +1,5 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,

View File

@ -1,7 +1,12 @@
{
"ignore": ["_document.js"],
"presets": [["joyent-portal", {
"aliases": true,
"autoAliases": true
}]]
"presets": [
[
"joyent-portal",
{
"aliases": true,
"autoAliases": true
}
]
]
}

View File

@ -1,15 +1,13 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,
"jsx": true,
"node": true,
"webpack": {
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
"configPath":
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
}
}
}

View File

@ -28,7 +28,10 @@ export default (opts = {}) => {
credentials: 'same-origin',
fetch,
headers: {
'X-CSRF-Token': global.cookie.replace(/(?:(?:^|.*;\s*)crumb\s*=\s*([^;]*).*$)|^.*$/, '$1')
'X-CSRF-Token': global.cookie.replace(
/(?:(?:^|.*;\s*)crumb\s*=\s*([^;]*).*$)|^.*$/,
'$1'
)
}
}),
...opts

View File

@ -1,7 +1,12 @@
{
"ignore": ["_document.js", "_aliases.js"],
"presets": [["joyent-portal", {
"aliases": true,
"autoAliases": true
}]]
"presets": [
[
"joyent-portal",
{
"aliases": true,
"autoAliases": true
}
]
]
}

View File

@ -5,4 +5,4 @@
"href": "http://0.0.0.0:3069"
},
"extends": "lighthouse:default"
}
}

View File

@ -1,15 +1,13 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,
"jsx": true,
"node": true,
"webpack": {
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
"configPath":
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
}
}
}

View File

@ -1,4 +1,4 @@
{
"test": ["./src/**/*.js"],
"extends": ["stylelint-config-joyent-portal"]
}
}

View File

@ -1,8 +1,5 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,
@ -12,4 +9,4 @@
"configPath": "./webpack/index.js"
}
}
}
}

View File

@ -343,9 +343,19 @@ export const Tbody = Baseline(({ children, ...rest }) => (
export const Td = Baseline(({ children, ...rest }) => (
<Propagate {...rest}>
{value => (
<BaseTd {...rest} {...value} {...rest} name="td">
<BaseTd {...rest} {...value} name="td">
{children}
</BaseTd>
)}
</Propagate>
));
export const Pagination = ({ children, colSpan, ...rest }) => (
<Tfoot>
<Tr {...rest}>
<Th colSpan={colSpan} hasBorder="bottom" middle center>
{children}
</Th>
</Tr>
</Tfoot>
);

View File

@ -1,15 +1,13 @@
{
"libs": [
"ecmascript",
"browser"
],
"libs": ["ecmascript", "browser"],
"plugins": {
"doc_comment": true,
"local-scope": true,
"jsx": true,
"node": true,
"webpack": {
"configPath": "../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
"configPath":
"../../node_modules/joyent-react-scripts/src/webpack.config.dev.js"
}
}
}

View File

@ -9,10 +9,8 @@
"dev": "NODE_ENV=development joyent-react-scripts start",
"build": "NODE_ENV=production joyent-react-scripts build",
"fmt": "prettier --write --single-quote *.js src/*.js src/**/*.js",
"lint-ci":
"eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
"lint":
"eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
"lint-ci": "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
"lint": "eslint . --fix --ext .js --ext .md && echo 0 `# stylelint './src/**/*.js'`",
"prepublish": "echo 0"
},
"dependencies": {

View File

@ -1,14 +1,14 @@
# How to run the Joyent Portal
#### Requisites
#### Requisites
* [ ] [Install node.js](https://nodejs.org/en/download/current/)
* [ ] [Install Yarn](https://yarnpkg.com/en/docs/install)
* [ ] [Setup node-triton](https://github.com/joyent/node-triton#setup)
- [ ] [Install node.js](https://nodejs.org/en/download/current/)
- [ ] [Install Yarn](https://yarnpkg.com/en/docs/install)
- [ ] [Setup node-triton](https://github.com/joyent/node-triton#setup)
## via [webconsole-instances](https://github.com/joyent/webconsole-instances)
[webconsole-instances](https://github.com/joyent/webconsole-instances) is the stable version of the portal. It gets updated with stable releases from [joyent-portal](http://github.com/yldio/joyent-portal).
[webconsole-instances](https://github.com/joyent/webconsole-instances) is the stable version of the portal. It gets updated with stable releases from [joyent-portal](http://github.com/yldio/joyent-portal).
```
➜ git clone https://github.com/joyent/webconsole-instances

View File

@ -1,171 +0,0 @@
#!/usr/bin/env node
const { config } = require('../package.json');
const { exists } = require('mz/fs');
const sgf = require('staged-git-files');
const forceArray = require('force-array');
const awaitify = require('apr-awaitify');
const asyncFilter = require('apr-filter');
const map = require('apr-map');
const reduce = require('apr-reduce');
const parallel = require('apr-parallel');
const execa = require('execa');
const globby = require('globby');
const main = require('apr-main');
const argv = require('yargs').argv;
const path = require('path');
const checksum = require('checksum');
const getStaged = awaitify(sgf);
const asyncChecksum = awaitify(checksum.file);
const ROOT = path.join(__dirname, '../');
const SCRIPTS = path.resolve(__dirname);
const statuses = ['Added', 'Modified'];
const filter = (files = []) =>
files
.filter(file => !/node_modules|dist/.test(file))
.map(file => path.resolve(ROOT, file));
const run = async (files = []) => {
const filteredFiles = filter(files);
const _files = filteredFiles.reduce(
(files, file) => {
const ext = path.extname(file).replace(/^./, '');
if (!ext) {
return files;
}
return Object.assign(files, {
[ext]: (files[ext] || []).concat(file)
});
},
{
js: [],
gql: [],
json: []
}
);
return parallel({
js: () =>
_files.js.length
? execa(
'prettier',
['--write', '--single-quote', '--parser=babylon'].concat(_files.js),
{
stdio: 'inherit'
}
)
: Promise.resolve(),
gql: () =>
_files.gql.length
? execa(
'prettier',
['--write', '--single-quote', '--parser=graphql'].concat(
_files.gql
),
{
stdio: 'inherit'
}
)
: Promise.resolve(),
json: () =>
_files.json.length
? execa(
'prettier',
['--write', '--single-quote', '--parser=json'].concat(_files.json),
{
stdio: 'inherit'
}
)
: Promise.resolve()
});
};
const add = async filename => execa('git', ['add', filename]);
const all = async () => {
const files = await globby(
['{packages,prototypes}/**/*.{js,gql,json}', 'scripts/*'],
{
cwd: path.join(__dirname, '..')
}
);
return run(files);
};
const getUnstaged = async () => {
const unstaged = await execa('git', ['ls-files', '-m']);
return unstaged.stdout.split('\n');
};
const staged = async () => {
const unstaged = (await getUnstaged())
.map(file => path.resolve(ROOT, file))
.filter(file => /\.js|gql|json$/.test(file) || file.indexOf(SCRIPTS) === 0);
const files = (await getStaged())
.filter(({ status }) => statuses.indexOf(status) >= 0)
.map(file =>
Object.assign({}, file, { filename: path.resolve(ROOT, file.filename) })
)
.filter(
file =>
/\.js|gql|json$/.test(file.filename) ||
file.filename.indexOf(SCRIPTS) === 0
);
const existing = await asyncFilter(files, ({ filename }) => exists(filename));
if (!existing.length) {
return;
}
const checksums = await map(existing, async file => {
const checksum = await asyncChecksum(file.filename);
return Object.assign({}, file, { checksum });
});
const filenames = existing.map(file => file.filename);
await run(filenames);
const changed = await asyncFilter(
checksums,
async ({ filename, checksum }) => {
const newChecksum = await asyncChecksum(filename);
return checksum != newChecksum;
}
);
const modifieds = await reduce(
changed,
async (modifieds, file) => {
const isUnstaged = unstaged.filter(f => f === file.filename).length;
if (
(file.status === 'Modified' || file.status === 'Added') &&
isUnstaged
) {
modifieds.push(file);
} else {
await add(file.filename);
}
return modifieds;
},
[]
);
if (modifieds.length) {
modifieds.forEach(modified =>
console.log('PARTIALLY STAGED FILE ', modified.filename)
);
process.exit(0);
}
};
main(argv._.length ? run(argv._) : argv.staged ? staged() : all());

View File

@ -1,30 +0,0 @@
#!/usr/bin/env node
const forEach = require('apr-for-each');
const execa = require('execa');
const globby = require('globby');
const main = require('apr-main');
const argv = require('yargs').argv;
const path = require('path');
const config = path.join(__dirname, '../.licensesrc.json');
const CWD = path.join(__dirname, '..');
const BIN = path.join(CWD, 'node_modules/.bin/license-to-fail');
const run = async (dirs = []) =>
forEach(dirs, async dir =>
execa(BIN, [config], {
cwd: dir,
stdio: 'inherit'
})
);
const all = async () => {
const files = await globby(['{packages,prototypes}/*/', '.'], {
cwd: CWD
});
return run(files.filter(pathname => !/node_modules/.test(pathname)));
};
main(argv._.length ? run(argv._) : all());

View File

@ -1,25 +0,0 @@
#!/usr/bin/env node
const forEach = require('apr-for-each');
const execa = require('execa');
const globby = require('globby');
const main = require('apr-main');
const argv = require('yargs').argv;
const path = require('path');
const run = async (files = []) =>
forEach(files, async file =>
execa('quality-docs', [file], {
stdio: 'inherit'
})
);
const all = async () => {
const files = await globby(['{packages,prototypes}/**/*.md', './*.md'], {
cwd: path.join(__dirname, '..')
});
return run(files.filter(pathname => !/node_modules/.test(pathname)));
};
main(argv._.length ? run(argv._) : all());

View File

@ -1,151 +0,0 @@
#!/usr/bin/env node
const { readFile, exists } = require('mz/fs');
const sgf = require('staged-git-files');
const execa = require('execa');
const awaitify = require('apr-awaitify');
const asyncFilter = require('apr-filter');
const main = require('apr-main');
const map = require('apr-map');
const reduce = require('apr-reduce');
const globby = require('globby');
const path = require('path');
const uniq = require('lodash.uniq');
const argv = require('yargs').argv;
const checksum = require('checksum');
const { lstatSync, readdirSync } = require('fs');
const { join } = require('path');
const ROOT = path.join(__dirname, '..');
const getStaged = awaitify(sgf);
const statuses = [
'Added',
'Copied',
'Deleted',
'Modified',
'Renamed',
'Unmerged'
];
const exec = (args = []) =>
execa('lerna', args, {
stdio: 'inherit'
});
const lint = scope => exec(['run', 'lint', '--scope', scope]);
const test = scope => exec(['run', 'test', '--scope', scope]);
const run = async scope => {
if (argv.lint) {
await lint(scope);
}
if (argv.test) {
await test(scope);
}
};
const runLint = async scope => {
await lint(scope);
};
const runTest = async scope => {
await test(scope);
};
const getUnstaged = async () => {
const unstaged = await execa('git', ['ls-files', '-m']);
return unstaged.stdout.split('\n');
};
const asyncChecksum = awaitify(checksum.file);
const add = async filename => execa('git', ['add', filename]);
const runLintAndGitAdd = async (staged, pkgs) => {
const unstaged = (await getUnstaged()).map(file => path.resolve(ROOT, file));
const existing = await asyncFilter(staged, ({ filename }) =>
exists(filename)
);
const checksums = await map(existing, async file => {
const checksum = await asyncChecksum(file.filename);
return Object.assign({}, file, { checksum });
});
await map(pkgs.map(({ name }) => name), runLint);
const changed = await asyncFilter(
checksums,
async ({ filename, checksum }) => {
const newChecksum = await asyncChecksum(filename);
return checksum != newChecksum;
}
);
const modifieds = await reduce(
changed,
async (modifieds, file) => {
const isUnstaged = unstaged.filter(f => f === file.filename).length;
if (
(file.status === 'Modified' || file.status === 'Added') &&
isUnstaged
) {
modifieds.push(file);
} else {
await add(file.filename);
}
return modifieds;
},
[]
);
if (modifieds.length) {
modifieds.forEach(modified =>
console.log('PARTIALLY STAGED FILE ', modified.filename)
);
process.exit(0);
}
};
const gather = async () => {
const isDirectory = source => lstatSync(source).isDirectory();
const getDirectories = source =>
readdirSync(source)
.map(name => join(source, name))
.filter(isDirectory);
const locations = await globby(
getDirectories('./packages').concat(getDirectories('./prototypes')),
{ cwd: ROOT }
);
const staged = (await getStaged())
.filter(({ status }) => statuses.indexOf(status) >= 0)
// .map(({ filename }) => path.resolve(ROOT, filename));
.map(file =>
Object.assign({}, file, { filename: path.resolve(ROOT, file.filename) })
);
const folders = uniq(
locations
.map(folder => path.resolve(ROOT, folder))
.filter(folder => staged.some(i => i.filename.indexOf(folder) >= 0))
);
const pkgs = await map(folders, async folder =>
JSON.parse(await readFile(path.join(folder, 'package.json'), 'utf-8'))
);
if (argv.lint) {
await runLintAndGitAdd(staged, pkgs);
}
if (argv.test) {
await await map(pkgs.map(({ name }) => name), runTest);
}
};
main(gather());

779
yarn.lock

File diff suppressed because it is too large Load Diff