@apollion-dsi/scripts 0.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.prettierignore +6 -0
- package/.prettierrc.js +1 -0
- package/CHANGELOG.md +8 -0
- package/README.MD +91 -0
- package/audit-ci.json +5 -0
- package/eslint.config.js +33 -0
- package/lib/bin.d.ts +2 -0
- package/lib/bin.js +34 -0
- package/lib/bin.js.map +1 -0
- package/lib/command/build.d.ts +3 -0
- package/lib/command/build.js +145 -0
- package/lib/command/build.js.map +1 -0
- package/lib/command/create/helper.d.ts +7 -0
- package/lib/command/create/helper.js +98 -0
- package/lib/command/create/helper.js.map +1 -0
- package/lib/command/create/index.d.ts +1 -0
- package/lib/command/create/index.js +149 -0
- package/lib/command/create/index.js.map +1 -0
- package/lib/command/dev.d.ts +3 -0
- package/lib/command/dev.js +85 -0
- package/lib/command/dev.js.map +1 -0
- package/lib/command/test.d.ts +1 -0
- package/lib/command/test.js +32 -0
- package/lib/command/test.js.map +1 -0
- package/lib/config/env.d.ts +15 -0
- package/lib/config/env.js +78 -0
- package/lib/config/env.js.map +1 -0
- package/lib/config/modules.d.ts +15 -0
- package/lib/config/modules.js +92 -0
- package/lib/config/modules.js.map +1 -0
- package/lib/config/paths.d.ts +22 -0
- package/lib/config/paths.js +61 -0
- package/lib/config/paths.js.map +1 -0
- package/lib/config/shared.d.ts +24 -0
- package/lib/config/shared.js +14 -0
- package/lib/config/shared.js.map +1 -0
- package/lib/config/webpack.config.d.ts +187 -0
- package/lib/config/webpack.config.js +300 -0
- package/lib/config/webpack.config.js.map +1 -0
- package/lib/config/webpackDevServer.config.d.ts +34 -0
- package/lib/config/webpackDevServer.config.js +67 -0
- package/lib/config/webpackDevServer.config.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +10 -0
- package/lib/index.js.map +1 -0
- package/lib/utils/FileSizeReporter.d.ts +12 -0
- package/lib/utils/FileSizeReporter.js +151 -0
- package/lib/utils/FileSizeReporter.js.map +1 -0
- package/lib/utils/InlineChunkHtmlPlugin.d.ts +8 -0
- package/lib/utils/InlineChunkHtmlPlugin.js +54 -0
- package/lib/utils/InlineChunkHtmlPlugin.js.map +1 -0
- package/lib/utils/InterpolateHtmlPlugin.d.ts +7 -0
- package/lib/utils/InterpolateHtmlPlugin.js +21 -0
- package/lib/utils/InterpolateHtmlPlugin.js.map +1 -0
- package/lib/utils/ModuleNotFoundPlugin.d.ts +5 -0
- package/lib/utils/ModuleNotFoundPlugin.js +11 -0
- package/lib/utils/ModuleNotFoundPlugin.js.map +1 -0
- package/lib/utils/ModuleScopePlugin.d.ts +5 -0
- package/lib/utils/ModuleScopePlugin.js +11 -0
- package/lib/utils/ModuleScopePlugin.js.map +1 -0
- package/lib/utils/WebpackDevServerUtils.d.ts +22 -0
- package/lib/utils/WebpackDevServerUtils.js +154 -0
- package/lib/utils/WebpackDevServerUtils.js.map +1 -0
- package/lib/utils/checkRequiredFiles.d.ts +1 -0
- package/lib/utils/checkRequiredFiles.js +28 -0
- package/lib/utils/checkRequiredFiles.js.map +1 -0
- package/lib/utils/devServerMiddleware.d.ts +8 -0
- package/lib/utils/devServerMiddleware.js +19 -0
- package/lib/utils/devServerMiddleware.js.map +1 -0
- package/lib/utils/formatWebpackMessages.d.ts +5 -0
- package/lib/utils/formatWebpackMessages.js +32 -0
- package/lib/utils/formatWebpackMessages.js.map +1 -0
- package/lib/utils/getPublicUrlOrPath.d.ts +1 -0
- package/lib/utils/getPublicUrlOrPath.js +39 -0
- package/lib/utils/getPublicUrlOrPath.js.map +1 -0
- package/lib/utils/printBuildError.d.ts +1 -0
- package/lib/utils/printBuildError.js +14 -0
- package/lib/utils/printBuildError.js.map +1 -0
- package/lib/utils/printHostingInstructions.d.ts +1 -0
- package/lib/utils/printHostingInstructions.js +12 -0
- package/lib/utils/printHostingInstructions.js.map +1 -0
- package/package.json +81 -0
- package/scripts/validate.sh +16 -0
- package/src/bin.ts +41 -0
- package/src/command/build.ts +188 -0
- package/src/command/create/helper.ts +97 -0
- package/src/command/create/index.ts +200 -0
- package/src/command/dev.ts +95 -0
- package/src/command/test.ts +33 -0
- package/src/config/env.ts +82 -0
- package/src/config/modules.ts +115 -0
- package/src/config/paths.ts +88 -0
- package/src/config/shared.ts +27 -0
- package/src/config/webpack.config.js +308 -0
- package/src/config/webpackDevServer.config.ts +78 -0
- package/src/index.ts +3 -0
- package/src/utils/FileSizeReporter.ts +168 -0
- package/src/utils/InlineChunkHtmlPlugin.js +67 -0
- package/src/utils/InterpolateHtmlPlugin.js +27 -0
- package/src/utils/ModuleNotFoundPlugin.js +13 -0
- package/src/utils/ModuleScopePlugin.js +13 -0
- package/src/utils/WebpackDevServerUtils.ts +179 -0
- package/src/utils/checkRequiredFiles.ts +22 -0
- package/src/utils/devServerMiddleware.ts +20 -0
- package/src/utils/formatWebpackMessages.ts +30 -0
- package/src/utils/getPublicUrlOrPath.ts +39 -0
- package/src/utils/printBuildError.ts +8 -0
- package/src/utils/printHostingInstructions.ts +12 -0
- package/template/.editorconfig +43 -0
- package/template/.prettierignore +6 -0
- package/template/.prettierrc.js +1 -0
- package/template/audit-ci.json +5 -0
- package/template/commitlint.config.js +1 -0
- package/template/eslint.config.js +3 -0
- package/template/jest.config.js +4 -0
- package/template/public/index.html +20 -0
- package/template/src/App.test.tsx +10 -0
- package/template/src/App.tsx +35 -0
- package/template/src/index.tsx +10 -0
- package/template/tsconfig.json +25 -0
- package/tsconfig.json +18 -0
package/.prettierignore
ADDED
package/.prettierrc.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
module.exports = require('@apollion-dsi/eslint-config/prettier.config');
|
package/CHANGELOG.md
ADDED
package/README.MD
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Apollion Scripts
|
|
2
|
+
|
|
3
|
+
Interface de linha de comando, contendo o template para iniciar, desenvolver e fazer o build de uma aplicação com Apollion Design System.
|
|
4
|
+
|
|
5
|
+
## Desenvolvimento
|
|
6
|
+
|
|
7
|
+
### Criando um novo projeto
|
|
8
|
+
|
|
9
|
+
Você pode iniciar um novo projeto usando a nossa `CLI` com o comando a seguir:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
$ npx @captalys-platform/scripts create project-name
|
|
13
|
+
$ cd project-name
|
|
14
|
+
$ yarn start
|
|
15
|
+
# ou
|
|
16
|
+
$ npm start
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Você não precisa instalar ou configurar ferramentas como `webpack` e `babel`, ambos já vem configurados para que você possa focar no código. Além disso o template inclui `eslint`, `prettier`, `jest`, `commitLint` e `Typescript`. O template tem a seguinte estrutura:
|
|
20
|
+
|
|
21
|
+
```
|
|
22
|
+
project-name
|
|
23
|
+
├── node_modules
|
|
24
|
+
├── package.json
|
|
25
|
+
├── tsconfig.json
|
|
26
|
+
├── jest.config.js
|
|
27
|
+
├── commitlint.config.js
|
|
28
|
+
├── .eslintrc.js
|
|
29
|
+
├── .editorconfig.js
|
|
30
|
+
├── .gitignore
|
|
31
|
+
├── .prettierrc.js
|
|
32
|
+
├── public
|
|
33
|
+
│ ├── index.html
|
|
34
|
+
└── src
|
|
35
|
+
├── index.tsx
|
|
36
|
+
├── App.tsx
|
|
37
|
+
├── App.test.tsx
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Projetos existentes
|
|
41
|
+
|
|
42
|
+
1. Para projetos existentes, você pode usar nossa `CLI` da seguinte forma (na raiz do projeto)
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
$ npm install @captalys-platform/scripts --save-dev
|
|
46
|
+
# ou
|
|
47
|
+
$ yarn add @captalys-platform/scripts --dev
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
2. Você deve atualizar o campo `scripts` do `package.json`
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"scripts": {
|
|
55
|
+
"dev": "scripts dev",
|
|
56
|
+
"build": "scripts build",
|
|
57
|
+
"test": "scripts test"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
3. Para a aplicação funcionar é necessário utilizar a estrutura de pasta a seguir
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
project-name
|
|
66
|
+
├── package.json
|
|
67
|
+
├── public
|
|
68
|
+
│ ├── index.html
|
|
69
|
+
└── src
|
|
70
|
+
├── index.tsx
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Comandos
|
|
74
|
+
|
|
75
|
+
Estes são os comandos disponíveis no nosso template
|
|
76
|
+
|
|
77
|
+
- `yarn start` ou `npm start`
|
|
78
|
+
|
|
79
|
+
Roda o projeto em um servidor de desenvolvimento, com reload automático, em http://localhost:3000/.
|
|
80
|
+
|
|
81
|
+
- `yarn build` ou `npm build`
|
|
82
|
+
|
|
83
|
+
Cria o projeto para ser distribuído para produção, na pasta **build**.
|
|
84
|
+
|
|
85
|
+
- `yarn test` ou `npm test`
|
|
86
|
+
|
|
87
|
+
Roda os testes com `jest --watch` nos arquivos alterados a partir do ultimo commit.
|
|
88
|
+
|
|
89
|
+
## Licença
|
|
90
|
+
|
|
91
|
+
© 2021 Captalys - Todos os direitos reservados.
|
package/audit-ci.json
ADDED
package/eslint.config.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const { peerDependencies } = require('./package.json');
|
|
2
|
+
const sharedConfig = require('@apollion-dsi/eslint-config');
|
|
3
|
+
|
|
4
|
+
module.exports = [
|
|
5
|
+
...sharedConfig,
|
|
6
|
+
{
|
|
7
|
+
files: ['**/*.ts', '**/*.tsx'],
|
|
8
|
+
ignores: ['node_modules/**', 'lib/**', 'src/template/**'],
|
|
9
|
+
rules: {
|
|
10
|
+
'import/no-unresolved': ['error', { ignore: Object.keys(peerDependencies) }],
|
|
11
|
+
'import/no-extraneous-dependencies': [
|
|
12
|
+
'error',
|
|
13
|
+
{ devDependencies: ['**/test.ts{,x}', 'src/__tests__/**'] },
|
|
14
|
+
],
|
|
15
|
+
'no-shadow': 'off',
|
|
16
|
+
'import/first': 'off',
|
|
17
|
+
'global-require': 'off',
|
|
18
|
+
'consistent-return': 'off',
|
|
19
|
+
'import/no-dynamic-require': 'off',
|
|
20
|
+
'@typescript-eslint/no-require-imports': 'off',
|
|
21
|
+
'@typescript-eslint/ban-ts-comment': 'off',
|
|
22
|
+
'@typescript-eslint/no-shadow': ['error'],
|
|
23
|
+
'@typescript-eslint/no-use-before-define': 'off',
|
|
24
|
+
'import/extensions': 'off',
|
|
25
|
+
'jest/no-restricted-matchers': 'off',
|
|
26
|
+
'jest/no-try-expect': 'off',
|
|
27
|
+
'require-await': 'off',
|
|
28
|
+
'no-console': 'off',
|
|
29
|
+
'require-atomic-updates': 'off',
|
|
30
|
+
'jest/no-jest-import': 'off',
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
];
|
package/lib/bin.d.ts
ADDED
package/lib/bin.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const cross_spawn_1 = __importDefault(require("cross-spawn"));
|
|
9
|
+
const update_notifier_1 = __importDefault(require("update-notifier"));
|
|
10
|
+
const create_1 = require("./command/create");
|
|
11
|
+
const notifier = (0, update_notifier_1.default)({
|
|
12
|
+
pkg: require('../package.json'),
|
|
13
|
+
updateCheckInterval: 1000 * 60 * 60, // 1hr
|
|
14
|
+
});
|
|
15
|
+
notifier.notify({
|
|
16
|
+
defer: false,
|
|
17
|
+
message: `Update available ${chalk_1.default.dim('{currentVersion}')} ${chalk_1.default.reset(' → ')} ${chalk_1.default.green('{latestVersion}')} \nRun ${chalk_1.default.cyan('yarn add {packageName}')} to update.`,
|
|
18
|
+
});
|
|
19
|
+
(async (cmd) => {
|
|
20
|
+
const [command, ...options] = cmd;
|
|
21
|
+
if (['build', 'dev', 'test'].includes(command)) {
|
|
22
|
+
const result = cross_spawn_1.default.sync(process.execPath, [require.resolve(`./command/${command}`), ...options], {
|
|
23
|
+
stdio: 'inherit',
|
|
24
|
+
});
|
|
25
|
+
return process.exit(result.status);
|
|
26
|
+
}
|
|
27
|
+
if (command === 'create') {
|
|
28
|
+
await (0, create_1.createTemplate)(options[0]);
|
|
29
|
+
return process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
console.log(`${chalk_1.default.red('Commando não reconhecido:')} ${chalk_1.default.yellow(command)}`);
|
|
32
|
+
process.exit(1);
|
|
33
|
+
})(process.argv.slice(2));
|
|
34
|
+
//# sourceMappingURL=bin.js.map
|
package/lib/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA0B;AAC1B,8DAAgC;AAChC,sEAA6C;AAE7C,6CAAkD;AAElD,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC;IAC9B,GAAG,EAAE,OAAO,CAAC,iBAAiB,CAAC;IAC/B,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM;CAC5C,CAAC,CAAC;AAEH,QAAQ,CAAC,MAAM,CAAC;IACd,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,oBAAoB,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,eAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,eAAK,CAAC,KAAK,CAC7F,iBAAiB,CAClB,UAAU,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,aAAa;CAC7D,CAAC,CAAC;AAEH,CAAC,KAAK,EAAE,GAAa,EAAE,EAAE;IACvB,MAAM,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC;IAElC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,qBAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE;YACjG,KAAK,EAAE,SAAS;SACjB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,IAAA,uBAAc,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAEjC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,eAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAElF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createProductionBuild = createProductionBuild;
|
|
7
|
+
process.env.BABEL_ENV = 'production';
|
|
8
|
+
process.env.NODE_ENV = 'production';
|
|
9
|
+
// Makes the script crash on unhandled rejections instead of silently
|
|
10
|
+
// ignoring them. In the future, promise rejections that are not handled will
|
|
11
|
+
// terminate the Node.js process with a non-zero exit code.
|
|
12
|
+
process.on('unhandledRejection', (err) => {
|
|
13
|
+
throw err;
|
|
14
|
+
});
|
|
15
|
+
const path_1 = __importDefault(require("path"));
|
|
16
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
17
|
+
const deepmerge_1 = __importDefault(require("deepmerge"));
|
|
18
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
19
|
+
const webpack_1 = __importDefault(require("webpack"));
|
|
20
|
+
const env_1 = require("../config/env");
|
|
21
|
+
const paths_1 = __importDefault(require("../config/paths"));
|
|
22
|
+
const shared_1 = require("../config/shared");
|
|
23
|
+
const webpack_config_1 = __importDefault(require("../config/webpack.config"));
|
|
24
|
+
const checkRequiredFiles_1 = __importDefault(require("../utils/checkRequiredFiles"));
|
|
25
|
+
const FileSizeReporter_1 = require("../utils/FileSizeReporter");
|
|
26
|
+
const formatWebpackMessages_1 = __importDefault(require("../utils/formatWebpackMessages"));
|
|
27
|
+
const printBuildError_1 = __importDefault(require("../utils/printBuildError"));
|
|
28
|
+
const printHostingInstructions_1 = __importDefault(require("../utils/printHostingInstructions"));
|
|
29
|
+
// These sizes are pretty large. We'll warn for bundles exceeding them.
|
|
30
|
+
const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
|
|
31
|
+
const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
|
|
32
|
+
function copyPublicFolder(paths) {
|
|
33
|
+
fs_extra_1.default.copySync(paths.appPublic, paths.appBuild, {
|
|
34
|
+
dereference: true,
|
|
35
|
+
filter: (file) => file !== paths.appHtml,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
// Generate configuration
|
|
39
|
+
// const config = configFactory('production', paths);
|
|
40
|
+
// Create the production build and print the deployment instructions.
|
|
41
|
+
function build(config, previousFileSizes) {
|
|
42
|
+
console.log('Creating an optimized production build...');
|
|
43
|
+
const compiler = (0, webpack_1.default)(config);
|
|
44
|
+
return new Promise((resolve, reject) => {
|
|
45
|
+
compiler.run((err, stats) => {
|
|
46
|
+
let messages;
|
|
47
|
+
if (err) {
|
|
48
|
+
if (!err.message) {
|
|
49
|
+
return reject(err);
|
|
50
|
+
}
|
|
51
|
+
const errMessage = err.message;
|
|
52
|
+
messages = (0, formatWebpackMessages_1.default)({
|
|
53
|
+
errors: [errMessage],
|
|
54
|
+
warnings: [],
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
messages = (0, formatWebpackMessages_1.default)(stats?.toJson({ all: false, warnings: true, errors: true }));
|
|
59
|
+
}
|
|
60
|
+
if (messages.errors.length) {
|
|
61
|
+
// Only keep the first error. Others are often indicative
|
|
62
|
+
// of the same problem, but confuse the reader with noise.
|
|
63
|
+
if (messages.errors.length > 1) {
|
|
64
|
+
messages.errors.length = 1;
|
|
65
|
+
}
|
|
66
|
+
return reject(new Error(messages.errors.join('\n\n')));
|
|
67
|
+
}
|
|
68
|
+
if (process.env.CI &&
|
|
69
|
+
(typeof process.env.CI !== 'string' || process.env.CI.toLowerCase() !== 'false') &&
|
|
70
|
+
messages.warnings.length) {
|
|
71
|
+
console.log(chalk_1.default.yellow('\nTreating warnings as errors because process.env.CI = true.\n' +
|
|
72
|
+
'Most CI servers set it automatically.\n'));
|
|
73
|
+
return reject(new Error(messages.warnings.join('\n\n')));
|
|
74
|
+
}
|
|
75
|
+
const resolveArgs = {
|
|
76
|
+
stats,
|
|
77
|
+
previousFileSizes,
|
|
78
|
+
warnings: messages.warnings,
|
|
79
|
+
};
|
|
80
|
+
return resolve(resolveArgs);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
async function createProductionBuild(paths, userConfig = shared_1.defaultDevConfig) {
|
|
85
|
+
// Warn and crash if required files are missing
|
|
86
|
+
if (!(0, checkRequiredFiles_1.default)([paths.appHtml, paths.appIndexJs])) {
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
const useCustomConfig = fs_extra_1.default.existsSync(paths.appCustomConfig);
|
|
90
|
+
const { configureWebpack, ...options } = useCustomConfig
|
|
91
|
+
? deepmerge_1.default.all([shared_1.defaultDevConfig, userConfig, require(paths.appCustomConfig) ?? {}])
|
|
92
|
+
: Object.assign(shared_1.defaultDevConfig, userConfig);
|
|
93
|
+
const baseConfig = (0, webpack_config_1.default)('production', paths, options);
|
|
94
|
+
const config = configureWebpack && typeof configureWebpack === 'function'
|
|
95
|
+
? configureWebpack(baseConfig, 'production')
|
|
96
|
+
: baseConfig;
|
|
97
|
+
const previousSizes = await (0, FileSizeReporter_1.measureFileSizesBeforeBuild)(paths.appBuild);
|
|
98
|
+
try {
|
|
99
|
+
// Remove all content but keep the directory so that
|
|
100
|
+
// if you're in it, you don't end up in Trash
|
|
101
|
+
fs_extra_1.default.emptyDirSync(paths.appBuild);
|
|
102
|
+
// Merge with the public folder
|
|
103
|
+
copyPublicFolder(paths);
|
|
104
|
+
if (useCustomConfig) {
|
|
105
|
+
console.log(`${chalk_1.default.cyan('Using custom config from:')} ${chalk_1.default.yellow(paths.appCustomConfig)}\n`);
|
|
106
|
+
}
|
|
107
|
+
// Start the webpack build
|
|
108
|
+
const { stats, previousFileSizes, warnings } = (await build(config, previousSizes));
|
|
109
|
+
if (warnings.length) {
|
|
110
|
+
console.log(chalk_1.default.yellow('Compiled with warnings.\n'));
|
|
111
|
+
console.log(warnings.join('\n\n'));
|
|
112
|
+
console.log(`\nSearch for the ${chalk_1.default.underline(chalk_1.default.yellow('keywords'))} to learn more about each warning.`);
|
|
113
|
+
console.log(`To ignore, add ${chalk_1.default.cyan('// eslint-disable-next-line')} to the line before.\n`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
console.log(chalk_1.default.green('Compiled successfully.\n'));
|
|
117
|
+
}
|
|
118
|
+
console.log('File sizes after gzip:\n');
|
|
119
|
+
(0, FileSizeReporter_1.printFileSizesAfterBuild)(stats, previousFileSizes, paths.appBuild, WARN_AFTER_BUNDLE_GZIP_SIZE, WARN_AFTER_CHUNK_GZIP_SIZE);
|
|
120
|
+
console.log();
|
|
121
|
+
const useYarn = fs_extra_1.default.existsSync(paths.yarnLockFile);
|
|
122
|
+
const appPackage = require(paths.appPackageJson);
|
|
123
|
+
const publicUrl = paths.publicUrlOrPath;
|
|
124
|
+
const { publicPath } = config.output;
|
|
125
|
+
const buildFolder = path_1.default.relative(process.cwd(), paths.appBuild);
|
|
126
|
+
(0, printHostingInstructions_1.default)(appPackage, publicUrl, typeof publicPath === 'string' ? publicPath : '', buildFolder, useYarn);
|
|
127
|
+
}
|
|
128
|
+
catch (err) {
|
|
129
|
+
const tscCompileOnError = process.env.TSC_COMPILE_ON_ERROR === 'true';
|
|
130
|
+
if (tscCompileOnError) {
|
|
131
|
+
console.log(chalk_1.default.yellow('Compiled with the following type errors (you may want to check these before deploying your app):\n'));
|
|
132
|
+
(0, printBuildError_1.default)(err);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
console.log(chalk_1.default.red('Failed to compile.\n'));
|
|
136
|
+
(0, printBuildError_1.default)(err);
|
|
137
|
+
process.exit(1);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (require.main === module) {
|
|
142
|
+
(0, env_1.getEnviroment)(paths_1.default);
|
|
143
|
+
createProductionBuild(paths_1.default);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/command/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const templateFolder: string;
|
|
2
|
+
export declare const templateDependencies: string[];
|
|
3
|
+
export declare function projectNameInput(): Promise<any>;
|
|
4
|
+
export declare function validProjectName(appName: string): (string | boolean)[];
|
|
5
|
+
export declare function shouldUseYarn(): boolean;
|
|
6
|
+
export declare function tryGitInit(): boolean;
|
|
7
|
+
export declare function tryGitCommit(appPath: string): boolean;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.templateDependencies = exports.templateFolder = void 0;
|
|
7
|
+
exports.projectNameInput = projectNameInput;
|
|
8
|
+
exports.validProjectName = validProjectName;
|
|
9
|
+
exports.shouldUseYarn = shouldUseYarn;
|
|
10
|
+
exports.tryGitInit = tryGitInit;
|
|
11
|
+
exports.tryGitCommit = tryGitCommit;
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
|
+
const cross_spawn_1 = __importDefault(require("cross-spawn"));
|
|
14
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
15
|
+
const validate_npm_package_name_1 = __importDefault(require("validate-npm-package-name"));
|
|
16
|
+
// inquirer is ESM-only — use dynamic import to bridge CommonJS.
|
|
17
|
+
const importInquirer = new Function('m', 'return import(m)');
|
|
18
|
+
const inquirerPromise = importInquirer('inquirer').then((m) => m.default);
|
|
19
|
+
exports.templateFolder = path_1.default.resolve(__dirname, '../../template');
|
|
20
|
+
exports.templateDependencies = [
|
|
21
|
+
'react',
|
|
22
|
+
'react-dom',
|
|
23
|
+
'typescript',
|
|
24
|
+
'react-router-dom',
|
|
25
|
+
'@types/react',
|
|
26
|
+
'@types/react-dom',
|
|
27
|
+
'@types/react-router-dom',
|
|
28
|
+
'styled-components',
|
|
29
|
+
'@types/styled-components',
|
|
30
|
+
'@apollion-dsi/core',
|
|
31
|
+
'@apollion-dsi/scripts',
|
|
32
|
+
'@apollion-dsi/eslint-config',
|
|
33
|
+
'audit-ci',
|
|
34
|
+
];
|
|
35
|
+
async function projectNameInput() {
|
|
36
|
+
const inquirer = await inquirerPromise;
|
|
37
|
+
return inquirer.prompt({
|
|
38
|
+
type: 'input',
|
|
39
|
+
name: 'inputName',
|
|
40
|
+
message: 'Nome do Projeto: ',
|
|
41
|
+
validate: (query) => {
|
|
42
|
+
const [result, reason] = validProjectName(query);
|
|
43
|
+
return result || `Nome Invalido: ${reason}`;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
function validProjectName(appName) {
|
|
48
|
+
const validationResult = (0, validate_npm_package_name_1.default)(appName);
|
|
49
|
+
if (!validationResult.validForNewPackages) {
|
|
50
|
+
return [false, 'npm naming restrictions'];
|
|
51
|
+
}
|
|
52
|
+
if (exports.templateDependencies.includes(appName)) {
|
|
53
|
+
return [false, 'dependency with the same name exists'];
|
|
54
|
+
}
|
|
55
|
+
if (fs_extra_1.default.existsSync(appName)) {
|
|
56
|
+
const currentDirectory = process.cwd();
|
|
57
|
+
const files = fs_extra_1.default.readdirSync(path_1.default.resolve(currentDirectory, appName));
|
|
58
|
+
return files.length === 0 ? [true] : [false, `folder with the same name exist in ${currentDirectory}`];
|
|
59
|
+
}
|
|
60
|
+
return [true];
|
|
61
|
+
}
|
|
62
|
+
function shouldUseYarn() {
|
|
63
|
+
try {
|
|
64
|
+
cross_spawn_1.default.sync('yarnpkg', ['--version']);
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function tryGitInit() {
|
|
72
|
+
try {
|
|
73
|
+
cross_spawn_1.default.sync('git', ['init'], { stdio: 'ignore' });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function tryGitCommit(appPath) {
|
|
81
|
+
try {
|
|
82
|
+
cross_spawn_1.default.sync('git', ['add', '-A'], { stdio: 'ignore' });
|
|
83
|
+
cross_spawn_1.default.sync('git', ['commit', '-m', 'chore: project started'], {
|
|
84
|
+
stdio: 'ignore',
|
|
85
|
+
});
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch (e) {
|
|
89
|
+
try {
|
|
90
|
+
fs_extra_1.default.removeSync(path_1.default.join(appPath, '.git'));
|
|
91
|
+
}
|
|
92
|
+
catch (removeErr) {
|
|
93
|
+
// Do nothing
|
|
94
|
+
}
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/command/create/helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function createTemplate(projectName: string): Promise<void>;
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createTemplate = createTemplate;
|
|
7
|
+
const os_1 = __importDefault(require("os"));
|
|
8
|
+
const path_1 = __importDefault(require("path"));
|
|
9
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
10
|
+
const cross_spawn_1 = __importDefault(require("cross-spawn"));
|
|
11
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
12
|
+
const helper_1 = require("./helper");
|
|
13
|
+
async function createTemplate(projectName) {
|
|
14
|
+
return getProjectName({ projectName })
|
|
15
|
+
.then(createProjectFolder)
|
|
16
|
+
.then(copyTemplate)
|
|
17
|
+
.then(createPackageJson)
|
|
18
|
+
.then(changeCurrentDirectory)
|
|
19
|
+
.then(installDependencies)
|
|
20
|
+
.then(startGitRepo)
|
|
21
|
+
.then(successMessage);
|
|
22
|
+
}
|
|
23
|
+
async function getProjectName(config) {
|
|
24
|
+
const { projectName } = config;
|
|
25
|
+
const [result, reason] = (0, helper_1.validProjectName)(projectName);
|
|
26
|
+
const isValidName = result && !!projectName;
|
|
27
|
+
if (!isValidName) {
|
|
28
|
+
if (projectName) {
|
|
29
|
+
console.error(chalk_1.default.red(`Nome Invalido: ${reason}`));
|
|
30
|
+
}
|
|
31
|
+
const { inputName } = await (0, helper_1.projectNameInput)();
|
|
32
|
+
config.projectName = inputName;
|
|
33
|
+
}
|
|
34
|
+
return config;
|
|
35
|
+
}
|
|
36
|
+
async function createProjectFolder(config) {
|
|
37
|
+
const projectFolder = path_1.default.resolve(config.projectName);
|
|
38
|
+
await fs_extra_1.default.ensureDir(projectFolder);
|
|
39
|
+
config.projectFolder = projectFolder;
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
async function copyTemplate(config) {
|
|
43
|
+
const { projectFolder } = config;
|
|
44
|
+
await fs_extra_1.default.copy(helper_1.templateFolder, projectFolder);
|
|
45
|
+
console.log(chalk_1.default.green(`Criando novo projeto em:\n${chalk_1.default.cyan(projectFolder)}\n`));
|
|
46
|
+
return config;
|
|
47
|
+
}
|
|
48
|
+
async function createPackageJson(config) {
|
|
49
|
+
const { projectName, projectFolder } = config;
|
|
50
|
+
await fs_extra_1.default.writeJson(path_1.default.join(projectFolder, 'package.json'), {
|
|
51
|
+
name: projectName,
|
|
52
|
+
version: '0.1.0',
|
|
53
|
+
private: true,
|
|
54
|
+
author: process.env.USER || os_1.default.hostname(),
|
|
55
|
+
license: 'MIT',
|
|
56
|
+
scripts: {
|
|
57
|
+
start: 'scripts dev',
|
|
58
|
+
build: 'scripts build',
|
|
59
|
+
test: 'scripts test -- --config=jest.config.js',
|
|
60
|
+
lint: 'eslint --quiet src --ext ts,tsx',
|
|
61
|
+
'lint:full': 'eslint src --ext ts,tsx',
|
|
62
|
+
'lint:fix': 'eslint --fix src --ext ts,tsx',
|
|
63
|
+
'prettier:write': 'prettier src/ --write',
|
|
64
|
+
'audit-dependencies': 'audit-ci --config audit-ci.json',
|
|
65
|
+
},
|
|
66
|
+
husky: {
|
|
67
|
+
hooks: {
|
|
68
|
+
'pre-commit': 'lint-staged',
|
|
69
|
+
'commit-msg': 'commitlint -E HUSKY_GIT_PARAMS',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
'lint-staged': {
|
|
73
|
+
'*.{json,css,md}': ['yarn prettier:write'],
|
|
74
|
+
'*.{ts,tsx}': ['yarn audit-dependencies', 'yarn lint', 'yarn prettier:write'],
|
|
75
|
+
},
|
|
76
|
+
}, {
|
|
77
|
+
spaces: 2,
|
|
78
|
+
});
|
|
79
|
+
return config;
|
|
80
|
+
}
|
|
81
|
+
async function changeCurrentDirectory(config) {
|
|
82
|
+
process.chdir(config.projectFolder);
|
|
83
|
+
return config;
|
|
84
|
+
}
|
|
85
|
+
async function installDependencies(config) {
|
|
86
|
+
const useYarn = (0, helper_1.shouldUseYarn)();
|
|
87
|
+
const displayCommand = useYarn ? 'yarn' : 'npm';
|
|
88
|
+
console.log(`Instalando dependencias com ${chalk_1.default.yellow(useYarn ? 'yarn' : 'npm')}\n`);
|
|
89
|
+
config.useYarn = useYarn;
|
|
90
|
+
config.displayCommand = displayCommand;
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
let command = 'npm';
|
|
93
|
+
let args = ['install', '--save', '--loglevel', 'error'].concat(helper_1.templateDependencies);
|
|
94
|
+
if (useYarn) {
|
|
95
|
+
command = 'yarnpkg';
|
|
96
|
+
args = ['add', '--exact'].concat(helper_1.templateDependencies);
|
|
97
|
+
}
|
|
98
|
+
const child = (0, cross_spawn_1.default)(command, args, { stdio: 'inherit' });
|
|
99
|
+
child.on('close', (code) => {
|
|
100
|
+
if (code !== 0) {
|
|
101
|
+
reject(new Error(`${command} ${args.join(' ')}`));
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
resolve(config);
|
|
105
|
+
}
|
|
106
|
+
});
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async function startGitRepo(config) {
|
|
110
|
+
const success = (0, helper_1.tryGitInit)();
|
|
111
|
+
config.gitStarted = success;
|
|
112
|
+
if (success) {
|
|
113
|
+
const { useYarn, projectFolder } = config;
|
|
114
|
+
const hooks = ['lint-staged', 'husky', '@commitlint/cli', '@commitlint/config-conventional'];
|
|
115
|
+
let command = 'npm';
|
|
116
|
+
let args = ['install', '--save', '--loglevel', 'error'].concat(hooks);
|
|
117
|
+
if (useYarn) {
|
|
118
|
+
command = 'yarnpkg';
|
|
119
|
+
args = ['add', '--dev', '--exact'].concat(hooks);
|
|
120
|
+
}
|
|
121
|
+
console.log(`Iniciando Git Hooks\n`);
|
|
122
|
+
return new Promise((resolve, reject) => {
|
|
123
|
+
const child = (0, cross_spawn_1.default)(command, args, { stdio: 'inherit' });
|
|
124
|
+
child.on('close', (code) => {
|
|
125
|
+
if (code !== 0) {
|
|
126
|
+
reject(new Error(`${command} ${args.join(' ')}`));
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
config.gitInitialCommit = (0, helper_1.tryGitCommit)(projectFolder);
|
|
130
|
+
resolve(config);
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return config;
|
|
136
|
+
}
|
|
137
|
+
async function successMessage(config) {
|
|
138
|
+
if (config.gitStarted && config.gitInitialCommit) {
|
|
139
|
+
const { projectName, projectFolder, displayCommand, useYarn } = config;
|
|
140
|
+
console.log();
|
|
141
|
+
console.log(chalk_1.default.green(`Sucesso! Projeto ${chalk_1.default.white(projectName)} Criado em:\n${chalk_1.default.white(projectFolder)}`));
|
|
142
|
+
console.log();
|
|
143
|
+
console.log('Comandos:\n');
|
|
144
|
+
console.log(chalk_1.default.cyan(`${displayCommand} start`));
|
|
145
|
+
console.log(chalk_1.default.cyan(`${displayCommand} ${useYarn ? '' : 'run '}build`));
|
|
146
|
+
console.log(`\n\n`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/command/create/index.ts"],"names":[],"mappings":"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"}
|