skuba 3.15.1 → 3.16.1
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/README.md +61 -2
- package/lib/api/github/checkRun.d.ts +22 -0
- package/lib/api/github/checkRun.js +111 -0
- package/lib/api/github/checkRun.js.map +1 -0
- package/lib/api/github/environment.d.ts +3 -0
- package/lib/api/github/environment.js +21 -0
- package/lib/api/github/environment.js.map +1 -0
- package/lib/api/github/index.d.ts +2 -0
- package/lib/api/github/index.js +6 -0
- package/lib/api/github/index.js.map +1 -0
- package/lib/api/jest/index.d.ts +1 -1
- package/lib/api/jest/index.js.map +1 -1
- package/lib/cli/adapter/eslint.d.ts +7 -0
- package/lib/cli/adapter/eslint.js +21 -9
- package/lib/cli/adapter/eslint.js.map +1 -1
- package/lib/cli/adapter/prettier.d.ts +1 -4
- package/lib/cli/adapter/prettier.js +18 -20
- package/lib/cli/adapter/prettier.js.map +1 -1
- package/lib/cli/configure/analysis/git.d.ts +1 -1
- package/lib/cli/configure/analysis/git.js +11 -17
- package/lib/cli/configure/analysis/git.js.map +1 -1
- package/lib/cli/configure/index.js +2 -2
- package/lib/cli/configure/index.js.map +1 -1
- package/lib/cli/configure/processing/record.d.ts +2 -2
- package/lib/cli/configure/processing/record.js +2 -2
- package/lib/cli/configure/processing/record.js.map +1 -1
- package/lib/cli/configure/refreshIgnoreFiles.d.ts +2 -0
- package/lib/cli/configure/refreshIgnoreFiles.js +55 -0
- package/lib/cli/configure/refreshIgnoreFiles.js.map +1 -0
- package/lib/cli/format.js +2 -0
- package/lib/cli/format.js.map +1 -1
- package/lib/cli/init/getConfig.d.ts +1 -1
- package/lib/cli/init/git.d.ts +2 -3
- package/lib/cli/init/git.js +41 -10
- package/lib/cli/init/git.js.map +1 -1
- package/lib/cli/init/index.js +3 -3
- package/lib/cli/init/index.js.map +1 -1
- package/lib/cli/lint/annotate/buildkite/eslint.d.ts +2 -0
- package/lib/cli/lint/annotate/buildkite/eslint.js +26 -0
- package/lib/cli/lint/annotate/buildkite/eslint.js.map +1 -0
- package/lib/cli/lint/annotate/buildkite/index.d.ts +4 -0
- package/lib/cli/lint/annotate/buildkite/index.js +53 -0
- package/lib/cli/lint/annotate/buildkite/index.js.map +1 -0
- package/lib/cli/lint/annotate/buildkite/prettier.d.ts +2 -0
- package/lib/cli/lint/annotate/buildkite/prettier.js +33 -0
- package/lib/cli/lint/annotate/buildkite/prettier.js.map +1 -0
- package/lib/cli/lint/annotate/buildkite/tsc.d.ts +2 -0
- package/lib/cli/lint/annotate/buildkite/tsc.js +37 -0
- package/lib/cli/lint/annotate/buildkite/tsc.js.map +1 -0
- package/lib/cli/lint/annotate/github/eslint.d.ts +3 -0
- package/lib/cli/lint/annotate/github/eslint.js +13 -0
- package/lib/cli/lint/annotate/github/eslint.js.map +1 -0
- package/lib/cli/lint/annotate/github/index.d.ts +4 -0
- package/lib/cli/lint/annotate/github/index.js +61 -0
- package/lib/cli/lint/annotate/github/index.js.map +1 -0
- package/lib/cli/lint/annotate/github/prettier.d.ts +3 -0
- package/lib/cli/lint/annotate/github/prettier.js +16 -0
- package/lib/cli/lint/annotate/github/prettier.js.map +1 -0
- package/lib/cli/lint/annotate/github/tsc.d.ts +3 -0
- package/lib/cli/lint/annotate/github/tsc.js +59 -0
- package/lib/cli/lint/annotate/github/tsc.js.map +1 -0
- package/lib/cli/lint/annotate/index.d.ts +4 -0
- package/lib/cli/lint/annotate/index.js +22 -0
- package/lib/cli/lint/annotate/index.js.map +1 -0
- package/lib/cli/lint/external.d.ts +7 -0
- package/lib/cli/lint/external.js +38 -41
- package/lib/cli/lint/external.js.map +1 -1
- package/lib/cli/lint/index.d.ts +1 -1
- package/lib/cli/lint/index.js +4 -1
- package/lib/cli/lint/index.js.map +1 -1
- package/lib/cli/lint/types.d.ts +10 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/utils/args.d.ts +1 -1
- package/lib/utils/exec.d.ts +2 -1
- package/lib/utils/exec.js.map +1 -1
- package/lib/utils/logging.d.ts +1 -2
- package/lib/utils/logging.js +3 -2
- package/lib/utils/logging.js.map +1 -1
- package/lib/utils/worker.d.ts +0 -1
- package/lib/wrapper/functionHandler.js +8 -0
- package/lib/wrapper/functionHandler.js.map +1 -1
- package/lib/wrapper/http.js +11 -7
- package/lib/wrapper/http.js.map +1 -1
- package/package.json +17 -11
- package/template/base/_.gitignore +1 -0
- package/template/base/_.prettierignore +2 -0
- package/template/express-rest-api/.buildkite/pipeline.yml +4 -4
- package/template/express-rest-api/.nvmrc +1 -1
- package/template/express-rest-api/Dockerfile +1 -1
- package/template/express-rest-api/Dockerfile.dev-deps +1 -1
- package/template/express-rest-api/README.md +0 -12
- package/template/express-rest-api/docker-compose.yml +4 -2
- package/template/express-rest-api/package.json +5 -5
- package/template/express-rest-api/src/framework/logging.ts +2 -1
- package/template/greeter/.buildkite/pipeline.yml +1 -1
- package/template/greeter/.nvmrc +1 -1
- package/template/greeter/Dockerfile +1 -1
- package/template/greeter/README.md +0 -12
- package/template/greeter/docker-compose.yml +4 -2
- package/template/greeter/package.json +2 -2
- package/template/koa-rest-api/.buildkite/pipeline.yml +4 -4
- package/template/koa-rest-api/.nvmrc +1 -1
- package/template/koa-rest-api/Dockerfile +1 -1
- package/template/koa-rest-api/Dockerfile.dev-deps +1 -1
- package/template/koa-rest-api/README.md +0 -12
- package/template/koa-rest-api/docker-compose.yml +4 -2
- package/template/koa-rest-api/package.json +11 -11
- package/template/koa-rest-api/src/framework/logging.ts +2 -1
- package/template/lambda-sqs-worker/.buildkite/pipeline.yml +2 -2
- package/template/lambda-sqs-worker/README.md +0 -12
- package/template/lambda-sqs-worker/docker-compose.yml +3 -1
- package/template/lambda-sqs-worker/package.json +9 -9
- package/template/lambda-sqs-worker/serverless.yml +6 -2
- package/template/lambda-sqs-worker/src/framework/handler.ts +2 -2
- package/template/lambda-sqs-worker/src/framework/logging.ts +2 -1
- package/template/lambda-sqs-worker-cdk/.buildkite/pipeline.yml +2 -2
- package/template/lambda-sqs-worker-cdk/docker-compose.yml +3 -1
- package/template/lambda-sqs-worker-cdk/package.json +2 -2
- package/template/oss-npm-package/.github/workflows/release.yml +2 -2
- package/template/oss-npm-package/.github/workflows/validate.yml +2 -2
- package/template/oss-npm-package/.nvmrc +1 -1
- package/template/oss-npm-package/README.md +0 -14
- package/template/oss-npm-package/_package.json +1 -1
- package/template/private-npm-package/.nvmrc +1 -1
- package/template/private-npm-package/README.md +0 -14
- package/template/private-npm-package/_package.json +1 -1
package/README.md
CHANGED
|
@@ -1,8 +1,67 @@
|
|
|
1
|
-
# 
|
|
1
|
+
# [](https://seek-oss.github.io/skuba)
|
|
2
|
+
|
|
3
|
+
---
|
|
2
4
|
|
|
3
5
|
[](https://github.com/seek-oss/skuba/actions?query=workflow%3ARelease)
|
|
4
6
|
[](https://github.com/seek-oss/skuba/actions?query=workflow%3AValidate)
|
|
5
7
|
[](https://nodejs.org/en/)
|
|
6
8
|
[](https://www.npmjs.com/package/skuba)
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
**skuba** is a toolkit for backend application and package development on SEEK's gravel and paved roads:
|
|
13
|
+
|
|
14
|
+
- Write in [TypeScript]
|
|
15
|
+
- Enforce coding standards with [ESLint] and [Prettier]
|
|
16
|
+
- Test with [Jest]
|
|
17
|
+
- Deploy with [Gantry], [Serverless] or the [AWS CDK]
|
|
18
|
+
|
|
19
|
+
[aws cdk]: https://docs.aws.amazon.com/cdk/latest/guide/work-with-cdk-typescript.html
|
|
20
|
+
[gantry]: https://gantry.ssod.skinfra.xyz
|
|
21
|
+
[serverless]: https://serverless.com/
|
|
22
|
+
|
|
23
|
+
It provides you with:
|
|
24
|
+
|
|
25
|
+
- [CLI] commands for developing your project
|
|
26
|
+
- [Templates] to base your backend application or package on
|
|
27
|
+
- [Development] and optional [runtime] APIs for cross-cutting concerns
|
|
28
|
+
|
|
29
|
+
Learn more [about](docs/about.md) **skuba** and [contribute](CONTRIBUTING.md) to it.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
**skuba** is distributed as an npm package.
|
|
34
|
+
|
|
35
|
+
In projects that list it as a `devDependency`,
|
|
36
|
+
usage may look something like this:
|
|
37
|
+
|
|
38
|
+
```shell
|
|
39
|
+
# Install project dependencies.
|
|
40
|
+
yarn
|
|
41
|
+
|
|
42
|
+
# Run the skuba CLI.
|
|
43
|
+
yarn skuba help
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Global installations are also supported to speed up local development:
|
|
47
|
+
|
|
48
|
+
```shell
|
|
49
|
+
# Install skuba globally.
|
|
50
|
+
yarn global add skuba
|
|
51
|
+
|
|
52
|
+
# Look, no `npx`!
|
|
53
|
+
skuba help
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If you're new here, jump ahead to the [CLI] section to [create a new project] or [update an existing one].
|
|
57
|
+
|
|
58
|
+
[cli]: ./docs/cli
|
|
59
|
+
[create a new project]: ./docs/cli/init.md
|
|
60
|
+
[development]: ./docs/development-api
|
|
61
|
+
[eslint]: https://eslint.org/
|
|
62
|
+
[jest]: https://jestjs.io
|
|
63
|
+
[prettier]: https://prettier.io/
|
|
64
|
+
[runtime]: ./docs/runtime-api
|
|
65
|
+
[templates]: ./docs/templates
|
|
66
|
+
[typescript]: https://www.typescriptlang.org/
|
|
67
|
+
[update an existing one]: ./docs/cli/configure.md
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Endpoints } from '@octokit/types';
|
|
2
|
+
declare type Output = NonNullable<Endpoints['POST /repos/{owner}/{repo}/check-runs']['parameters']['output']>;
|
|
3
|
+
export declare type Annotation = NonNullable<Output['annotations']>[number];
|
|
4
|
+
interface CreateCheckRunParameters {
|
|
5
|
+
annotations: Annotation[];
|
|
6
|
+
conclusion: 'failure' | 'success';
|
|
7
|
+
name: string;
|
|
8
|
+
summary: string;
|
|
9
|
+
title: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Asynchronously creates a GitHub [check run] with annotations.
|
|
13
|
+
*
|
|
14
|
+
* The first 50 `annotations` are written in full to GitHub.
|
|
15
|
+
*
|
|
16
|
+
* A `GITHUB_API_TOKEN` or `GITHUB_TOKEN` with the `checks:write` permission
|
|
17
|
+
* must be present on the environment.
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
*/
|
|
21
|
+
export declare const createCheckRun: ({ annotations, conclusion, name, summary, title, }: CreateCheckRunParameters) => Promise<void>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.createCheckRun = void 0;
|
|
16
|
+
const rest_1 = require("@octokit/rest");
|
|
17
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
+
const isomorphic_git_1 = __importDefault(require("isomorphic-git"));
|
|
19
|
+
const logging_1 = require("../../utils/logging");
|
|
20
|
+
const GITHUB_MAX_ANNOTATIONS = 50;
|
|
21
|
+
/**
|
|
22
|
+
* Matches the owner and repository names in a GitHub repository URL.
|
|
23
|
+
*
|
|
24
|
+
* For example, given the following input strings:
|
|
25
|
+
*
|
|
26
|
+
* ```console
|
|
27
|
+
* git@github.com:seek-oss/skuba.git
|
|
28
|
+
* https://github.com/seek-oss/skuba.git
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* This pattern will produce the following matches:
|
|
32
|
+
*
|
|
33
|
+
* 1. seek-oss
|
|
34
|
+
* 2. skuba
|
|
35
|
+
*/
|
|
36
|
+
const ownerRepoRegex = /github.com(?::|\/)(.+)\/(.+).git$/;
|
|
37
|
+
const getOwnerRepo = (dir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
38
|
+
const remotes = yield isomorphic_git_1.default.listRemotes({ dir, fs: fs_extra_1.default });
|
|
39
|
+
for (const { url } of remotes) {
|
|
40
|
+
const match = ownerRepoRegex.exec(url);
|
|
41
|
+
const owner = match === null || match === void 0 ? void 0 : match[1];
|
|
42
|
+
const repo = match === null || match === void 0 ? void 0 : match[2];
|
|
43
|
+
if (owner && repo) {
|
|
44
|
+
return { owner, repo };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
throw new Error('Could not find a GitHub remote');
|
|
48
|
+
});
|
|
49
|
+
const getHeadSha = (dir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
50
|
+
const [commit] = yield isomorphic_git_1.default.log({ depth: 1, dir, fs: fs_extra_1.default });
|
|
51
|
+
return commit.oid;
|
|
52
|
+
});
|
|
53
|
+
/**
|
|
54
|
+
* Suffixes the title with the number of annotations added, e.g.
|
|
55
|
+
*
|
|
56
|
+
* ```text
|
|
57
|
+
* Build #12 failed (24 annotations added)
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
const suffixTitle = (title, inputAnnotations) => {
|
|
61
|
+
const addedAnnotations = inputAnnotations > GITHUB_MAX_ANNOTATIONS
|
|
62
|
+
? GITHUB_MAX_ANNOTATIONS
|
|
63
|
+
: inputAnnotations;
|
|
64
|
+
return `${title} (${(0, logging_1.pluralise)(addedAnnotations, 'annotation')} added)`;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Enriches the summary with more context about the check run.
|
|
68
|
+
*/
|
|
69
|
+
const createEnrichedSummary = (summary, inputAnnotations) => [
|
|
70
|
+
summary,
|
|
71
|
+
...(inputAnnotations > GITHUB_MAX_ANNOTATIONS
|
|
72
|
+
? [
|
|
73
|
+
`${inputAnnotations} annotations were provided, but only the first ${GITHUB_MAX_ANNOTATIONS} are visible in GitHub.`,
|
|
74
|
+
]
|
|
75
|
+
: []),
|
|
76
|
+
].join('\n\n');
|
|
77
|
+
/**
|
|
78
|
+
* Asynchronously creates a GitHub [check run] with annotations.
|
|
79
|
+
*
|
|
80
|
+
* The first 50 `annotations` are written in full to GitHub.
|
|
81
|
+
*
|
|
82
|
+
* A `GITHUB_API_TOKEN` or `GITHUB_TOKEN` with the `checks:write` permission
|
|
83
|
+
* must be present on the environment.
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
*/
|
|
87
|
+
const createCheckRun = ({ annotations, conclusion, name, summary, title, }) => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
+
var _a;
|
|
89
|
+
const dir = process.cwd();
|
|
90
|
+
const [headSha, { owner, repo }] = yield Promise.all([
|
|
91
|
+
getHeadSha(dir),
|
|
92
|
+
getOwnerRepo(dir),
|
|
93
|
+
]);
|
|
94
|
+
const client = new rest_1.Octokit({
|
|
95
|
+
auth: (_a = process.env.GITHUB_API_TOKEN) !== null && _a !== void 0 ? _a : process.env.GITHUB_TOKEN,
|
|
96
|
+
});
|
|
97
|
+
yield client.checks.create({
|
|
98
|
+
conclusion,
|
|
99
|
+
head_sha: headSha,
|
|
100
|
+
name,
|
|
101
|
+
output: {
|
|
102
|
+
annotations: annotations.slice(0, GITHUB_MAX_ANNOTATIONS),
|
|
103
|
+
summary: createEnrichedSummary(summary, annotations.length),
|
|
104
|
+
title: suffixTitle(title, annotations.length),
|
|
105
|
+
},
|
|
106
|
+
owner,
|
|
107
|
+
repo,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
exports.createCheckRun = createCheckRun;
|
|
111
|
+
//# sourceMappingURL=checkRun.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkRun.js","sourceRoot":"","sources":["../../../src/api/github/checkRun.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.enabledFromEnvironment = exports.buildNameFromEnvironment = void 0;
|
|
4
|
+
const buildNameFromEnvironment = (env = process.env) => {
|
|
5
|
+
var _a;
|
|
6
|
+
if (env.BUILDKITE_BUILD_NUMBER) {
|
|
7
|
+
return `Build #${env.BUILDKITE_BUILD_NUMBER}`;
|
|
8
|
+
}
|
|
9
|
+
if (env.GITHUB_RUN_NUMBER) {
|
|
10
|
+
return `${(_a = env.GITHUB_WORKFLOW) !== null && _a !== void 0 ? _a : 'Build'} #${env.GITHUB_RUN_NUMBER}`;
|
|
11
|
+
}
|
|
12
|
+
return 'Build';
|
|
13
|
+
};
|
|
14
|
+
exports.buildNameFromEnvironment = buildNameFromEnvironment;
|
|
15
|
+
const enabledFromEnvironment = (env = process.env) =>
|
|
16
|
+
// Running in a CI environment.
|
|
17
|
+
Boolean(env.BUILDKITE || env.CI || env.GITHUB_ACTIONS) &&
|
|
18
|
+
// Has an API token at the ready.
|
|
19
|
+
Boolean(env.GITHUB_API_TOKEN || env.GITHUB_TOKEN);
|
|
20
|
+
exports.enabledFromEnvironment = enabledFromEnvironment;
|
|
21
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/api/github/environment.ts"],"names":[],"mappings":";;;AAAO,MAAM,wBAAwB,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAU,EAAE;;IACpE,IAAI,GAAG,CAAC,sBAAsB,EAAE;QAC9B,OAAO,UAAU,GAAG,CAAC,sBAAsB,EAAE,CAAC;KAC/C;IAED,IAAI,GAAG,CAAC,iBAAiB,EAAE;QACzB,OAAO,GAAG,MAAA,GAAG,CAAC,eAAe,mCAAI,OAAO,KAAK,GAAG,CAAC,iBAAiB,EAAE,CAAC;KACtE;IAED,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAVW,QAAA,wBAAwB,4BAUnC;AAEK,MAAM,sBAAsB,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,EAAW,EAAE;AACnE,+BAA+B;AAC/B,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC;IACtD,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;AAJvC,QAAA,sBAAsB,0BAIiB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createCheckRun = void 0;
|
|
4
|
+
var checkRun_1 = require("./checkRun");
|
|
5
|
+
Object.defineProperty(exports, "createCheckRun", { enumerable: true, get: function () { return checkRun_1.createCheckRun; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/github/index.ts"],"names":[],"mappings":";;;AACA,uCAA4C;AAAnC,0GAAA,cAAc,OAAA"}
|
package/lib/api/jest/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Config } from '@jest/types';
|
|
2
|
-
declare type Props = Pick<Config.InitialOptions, 'collectCoverage' | 'collectCoverageFrom' | 'collectCoverageOnlyFrom' | 'coveragePathIgnorePatterns' | 'coverageThreshold' | 'globals' | 'globalSetup' | 'globalTeardown' | 'setupFiles' | 'setupFilesAfterEnv' | 'snapshotSerializers' | 'testPathIgnorePatterns' | 'testTimeout' | 'watchPathIgnorePatterns'>;
|
|
2
|
+
declare type Props = Pick<Config.InitialOptions, 'collectCoverage' | 'collectCoverageFrom' | 'collectCoverageOnlyFrom' | 'coveragePathIgnorePatterns' | 'coverageThreshold' | 'globals' | 'globalSetup' | 'globalTeardown' | 'setupFiles' | 'setupFilesAfterEnv' | 'snapshotSerializers' | 'testEnvironment' | 'testPathIgnorePatterns' | 'testTimeout' | 'watchPathIgnorePatterns'>;
|
|
3
3
|
/**
|
|
4
4
|
* Merge additional Jest options into the **skuba** preset.
|
|
5
5
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/jest/index.ts"],"names":[],"mappings":";;;;;;AAEA,uEAA8C;AAC9C,kEAAiE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/jest/index.ts"],"names":[],"mappings":";;;;;;AAEA,uEAA8C;AAC9C,kEAAiE;AAqBjE;;;;GAIG;AACI,MAAM,WAAW,GAAG,CAAC,KAAY,EAAyB,EAAE,CACjE,IAAA,iBAAQ,EAAC,qBAAU,EAAE,KAAK,CAAC,CAAC;AADjB,QAAA,WAAW,eACM"}
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
import { Linter } from 'eslint';
|
|
1
2
|
import { Logger } from '../../utils/logging';
|
|
3
|
+
export interface ESLintResult {
|
|
4
|
+
messages: Linter.LintMessage[];
|
|
5
|
+
filePath: string;
|
|
6
|
+
}
|
|
2
7
|
export interface ESLintOutput {
|
|
8
|
+
errors: ESLintResult[];
|
|
9
|
+
warnings: ESLintResult[];
|
|
3
10
|
ok: boolean;
|
|
4
11
|
output: string;
|
|
5
12
|
}
|
|
@@ -16,6 +16,7 @@ exports.runESLint = void 0;
|
|
|
16
16
|
const path_1 = __importDefault(require("path"));
|
|
17
17
|
const chalk_1 = __importDefault(require("chalk"));
|
|
18
18
|
const eslint_1 = require("eslint");
|
|
19
|
+
const logging_1 = require("../../utils/logging");
|
|
19
20
|
const symbolForResult = (result) => {
|
|
20
21
|
if (result.errorCount) {
|
|
21
22
|
return chalk_1.default.red('○');
|
|
@@ -25,9 +26,7 @@ const symbolForResult = (result) => {
|
|
|
25
26
|
const runESLint = (mode, logger) => __awaiter(void 0, void 0, void 0, function* () {
|
|
26
27
|
logger.debug('Initialising ESLint...');
|
|
27
28
|
const engine = new eslint_1.ESLint({
|
|
28
|
-
|
|
29
|
-
// everyone can apply to update their `.gitignore` files.
|
|
30
|
-
// cache: true,
|
|
29
|
+
cache: true,
|
|
31
30
|
extensions: ['js', 'ts', 'tsx'],
|
|
32
31
|
fix: mode === 'format',
|
|
33
32
|
reportUnusedDisableDirectives: 'error',
|
|
@@ -40,19 +39,32 @@ const runESLint = (mode, logger) => __awaiter(void 0, void 0, void 0, function*
|
|
|
40
39
|
engine.lintFiles('.'),
|
|
41
40
|
]);
|
|
42
41
|
const end = process.hrtime.bigint();
|
|
43
|
-
logger.plain(`Processed ${
|
|
44
|
-
|
|
42
|
+
logger.plain(`Processed ${(0, logging_1.pluralise)(results.length, 'file')} in ${logger.timing(start, end)}.`);
|
|
43
|
+
const errors = [];
|
|
44
|
+
const warnings = [];
|
|
45
45
|
for (const result of results) {
|
|
46
|
-
|
|
47
|
-
|
|
46
|
+
const relativePath = path_1.default.relative(cwd, result.filePath);
|
|
47
|
+
if (result.errorCount) {
|
|
48
|
+
errors.push({
|
|
49
|
+
filePath: relativePath,
|
|
50
|
+
messages: result.messages,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
if (result.warningCount) {
|
|
54
|
+
warnings.push({
|
|
55
|
+
filePath: relativePath,
|
|
56
|
+
messages: result.messages,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
logger.debug(symbolForResult(result), relativePath);
|
|
48
60
|
}
|
|
49
|
-
const ok = errors === 0;
|
|
61
|
+
const ok = errors.length === 0;
|
|
50
62
|
yield eslint_1.ESLint.outputFixes(results);
|
|
51
63
|
const output = formatter.format(results);
|
|
52
64
|
if (output) {
|
|
53
65
|
logger.plain(output);
|
|
54
66
|
}
|
|
55
|
-
return { ok, output };
|
|
67
|
+
return { ok, output, errors, warnings };
|
|
56
68
|
});
|
|
57
69
|
exports.runESLint = runESLint;
|
|
58
70
|
//# sourceMappingURL=eslint.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../../src/cli/adapter/eslint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,kDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"eslint.js","sourceRoot":"","sources":["../../../src/cli/adapter/eslint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,kDAA0B;AAC1B,mCAAwC;AAExC,iDAAwD;AAExD,MAAM,eAAe,GAAG,CAAC,MAAyB,EAAE,EAAE;IACpD,IAAI,MAAM,CAAC,UAAU,EAAE;QACrB,OAAO,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACvB;IAED,OAAO,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACpE,CAAC,CAAC;AAcK,MAAM,SAAS,GAAG,CACvB,IAAuB,EACvB,MAAc,EACS,EAAE;IACzB,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAEvC,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC;QACxB,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC;QAC/B,GAAG,EAAE,IAAI,KAAK,QAAQ;QACtB,6BAA6B,EAAE,OAAO;KACvC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAEpC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEtC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC7C,MAAM,CAAC,aAAa,EAAE;QACtB,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;KACtB,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEpC,MAAM,CAAC,KAAK,CACV,aAAa,IAAA,mBAAS,EAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAChE,KAAK,EACL,GAAG,CACJ,GAAG,CACL,CAAC;IAEF,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAmB,EAAE,CAAC;IAEpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;SACJ;QAED,IAAI,MAAM,CAAC,YAAY,EAAE;YACvB,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAAC,CAAC;SACJ;QAED,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;KACrD;IAED,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;IAE/B,MAAM,eAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAElC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzC,IAAI,MAAM,EAAE;QACV,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACtB;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC1C,CAAC,CAAA,CAAC;AAlEW,QAAA,SAAS,aAkEpB"}
|
|
@@ -15,11 +15,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.runPrettier = void 0;
|
|
16
16
|
const path_1 = __importDefault(require("path"));
|
|
17
17
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
18
|
-
const p_limit_1 = __importDefault(require("p-limit"));
|
|
19
18
|
const prettier_1 = require("prettier");
|
|
20
19
|
const dir_1 = require("../../utils/dir");
|
|
20
|
+
const logging_1 = require("../../utils/logging");
|
|
21
21
|
const manifest_1 = require("../../utils/manifest");
|
|
22
|
-
const fsLimit = (0, p_limit_1.default)(25);
|
|
23
22
|
const formatOrLintFile = ({ data, filepath, options, parser }, logger, mode, result) => {
|
|
24
23
|
logger.debug(filepath);
|
|
25
24
|
logger.debug(' parser:', parser !== null && parser !== void 0 ? parser : '-');
|
|
@@ -52,7 +51,8 @@ const formatOrLintFile = ({ data, filepath, options, parser }, logger, mode, res
|
|
|
52
51
|
if (formatted === data) {
|
|
53
52
|
return;
|
|
54
53
|
}
|
|
55
|
-
result.touched.push(
|
|
54
|
+
result.touched.push(filepath);
|
|
55
|
+
return formatted;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
58
58
|
* Formats/lints files with Prettier.
|
|
@@ -76,44 +76,42 @@ const runPrettier = (mode, logger) => __awaiter(void 0, void 0, void 0, function
|
|
|
76
76
|
// This avoids exhibiting different behaviour than a Prettier IDE integration,
|
|
77
77
|
// and the headache of conflicting `.gitignore` and `.prettierignore` rules.
|
|
78
78
|
const filepaths = yield (0, dir_1.crawlDirectory)(directory, '.prettierignore');
|
|
79
|
-
logger.debug(`Discovered ${
|
|
79
|
+
logger.debug(`Discovered ${(0, logging_1.pluralise)(filepaths.length, 'file')}.`);
|
|
80
80
|
const result = {
|
|
81
81
|
count: filepaths.length,
|
|
82
82
|
errored: [],
|
|
83
83
|
touched: [],
|
|
84
84
|
unparsed: [],
|
|
85
85
|
};
|
|
86
|
-
logger.debug('
|
|
87
|
-
const
|
|
86
|
+
logger.debug(mode === 'format' ? 'Formatting' : 'Linting', 'files...');
|
|
87
|
+
for (const filepath of filepaths) {
|
|
88
88
|
const [config, data, fileInfo] = yield Promise.all([
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
(0, prettier_1.resolveConfig)(filepath),
|
|
90
|
+
fs_extra_1.default.promises.readFile(filepath, 'utf-8'),
|
|
91
91
|
// Infer parser upfront so we can know to ignore unsupported file types.
|
|
92
|
-
|
|
92
|
+
(0, prettier_1.getFileInfo)(filepath, { resolveConfig: false }),
|
|
93
93
|
]);
|
|
94
|
-
|
|
94
|
+
const file = {
|
|
95
95
|
data,
|
|
96
96
|
filepath,
|
|
97
97
|
options: Object.assign(Object.assign({}, config), { filepath }),
|
|
98
98
|
parser: fileInfo.inferredParser,
|
|
99
99
|
};
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
const formatted = formatOrLintFile(file, logger, mode, result);
|
|
101
|
+
if (typeof formatted === 'string') {
|
|
102
|
+
yield fs_extra_1.default.promises.writeFile(filepath, formatted);
|
|
103
|
+
}
|
|
104
104
|
}
|
|
105
|
-
logger.debug(`Writing ${logger.pluralise(result.touched.length, 'file')}...`);
|
|
106
|
-
yield Promise.all(result.touched.map(({ data, filepath }) => fsLimit(() => fs_extra_1.default.promises.writeFile(filepath, data))));
|
|
107
105
|
const end = process.hrtime.bigint();
|
|
108
|
-
logger.plain(`Processed ${
|
|
106
|
+
logger.plain(`Processed ${(0, logging_1.pluralise)(result.count - result.unparsed.length, 'file')} in ${logger.timing(start, end)}.`);
|
|
109
107
|
if (result.touched.length) {
|
|
110
|
-
logger.plain(`Formatted ${
|
|
111
|
-
for (const
|
|
108
|
+
logger.plain(`Formatted ${(0, logging_1.pluralise)(result.touched.length, 'file')}:`);
|
|
109
|
+
for (const filepath of result.touched) {
|
|
112
110
|
logger.warn(filepath);
|
|
113
111
|
}
|
|
114
112
|
}
|
|
115
113
|
if (result.errored.length) {
|
|
116
|
-
logger.plain(`Flagged ${
|
|
114
|
+
logger.plain(`Flagged ${(0, logging_1.pluralise)(result.errored.length, 'file')}:`);
|
|
117
115
|
for (const { err, filepath } of result.errored) {
|
|
118
116
|
logger.warn(filepath, ...(err ? [String(err)] : []));
|
|
119
117
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../../src/cli/adapter/prettier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,wDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"prettier.js","sourceRoot":"","sources":["../../../src/cli/adapter/prettier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,wDAA0B;AAC1B,uCAA8E;AAE9E,yCAAiD;AACjD,iDAAwD;AACxD,mDAA2D;AAgB3D,MAAM,gBAAgB,GAAG,CACvB,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAQ,EACzC,MAAc,EACd,IAAuB,EACvB,MAAc,EACM,EAAE;IACtB,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEvB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,GAAG,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO;KACR;IAED,IAAI,IAAI,KAAK,MAAM,EAAE;QACnB,IAAI,EAAW,CAAC;QAChB,IAAI;YACF,EAAE,GAAG,IAAA,gBAAK,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;SAC3B;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvC,OAAO;SACR;QAED,IAAI,CAAC,EAAE,EAAE;YACP,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;SACnC;QAED,OAAO;KACR;IAED,IAAI,SAAiB,CAAC;IACtB,IAAI;QACF,SAAS,GAAG,IAAA,iBAAM,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KACnC;IAAC,OAAO,GAAG,EAAE;QACZ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvC,OAAO;KACR;IAED,IAAI,SAAS,KAAK,IAAI,EAAE;QACtB,OAAO;KACR;IAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAOF;;;;;;;GAOG;AACI,MAAM,WAAW,GAAG,CACzB,IAAuB,EACvB,MAAc,EACW,EAAE;IAC3B,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEtC,IAAI,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9B,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAmB,GAAE,CAAC;IAC7C,IAAI,QAAQ,EAAE;QACZ,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACzC;IAED,MAAM,CAAC,KAAK,CACV,QAAQ,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,6BAA6B,EACnE,SAAS,CACV,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAErC,2DAA2D;IAC3D,8EAA8E;IAC9E,4EAA4E;IAC5E,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAc,EAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;IAErE,MAAM,CAAC,KAAK,CAAC,cAAc,IAAA,mBAAS,EAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IAEnE,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,SAAS,CAAC,MAAM;QACvB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAEvE,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAChC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,IAAA,wBAAa,EAAC,QAAQ,CAAC;YACvB,kBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;YACvC,wEAAwE;YACxE,IAAA,sBAAW,EAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;SAChD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAS;YACjB,IAAI;YACJ,QAAQ;YACR,OAAO,kCAAO,MAAM,KAAE,QAAQ,GAAE;YAChC,MAAM,EAAE,QAAQ,CAAC,cAAc;SAChC,CAAC;QAEF,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAE/D,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACjC,MAAM,kBAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAClD;KACF;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;IAEpC,MAAM,CAAC,KAAK,CACV,aAAa,IAAA,mBAAS,EACpB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EACrC,MAAM,CACP,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,CACrC,CAAC;IAEF,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,aAAa,IAAA,mBAAS,EAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACvE,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,OAAO,EAAE;YACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACvB;KACF;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE;QACzB,MAAM,CAAC,KAAK,CAAC,WAAW,IAAA,mBAAS,EAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QACrE,KAAK,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,MAAM,CAAC,OAAO,EAAE;YAC9C,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtD;KACF;IAED,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;AACrD,CAAC,CAAA,CAAC;AApFW,QAAA,WAAW,eAoFtB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const auditWorkingTree: () => Promise<void>;
|
|
1
|
+
export declare const auditWorkingTree: (dir: string) => Promise<void>;
|
|
@@ -8,27 +8,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
11
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
15
|
exports.auditWorkingTree = void 0;
|
|
13
|
-
const
|
|
16
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
17
|
+
const isomorphic_git_1 = __importDefault(require("isomorphic-git"));
|
|
18
|
+
const dir_1 = require("../../../utils/dir");
|
|
14
19
|
const logging_1 = require("../../../utils/logging");
|
|
15
|
-
const auditWorkingTree = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
exec('git', 'status', '--short'),
|
|
20
|
-
]);
|
|
21
|
-
const workingTree = {
|
|
22
|
-
dirty: Boolean(diff.stdout),
|
|
23
|
-
untracked: Boolean(status.stdout),
|
|
24
|
-
};
|
|
25
|
-
if (workingTree.dirty || workingTree.untracked) {
|
|
26
|
-
const fileTypes = Object.entries(workingTree)
|
|
27
|
-
.filter(([, value]) => value)
|
|
28
|
-
.map(([key]) => key)
|
|
29
|
-
.join('/');
|
|
20
|
+
const auditWorkingTree = (dir) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
const filepaths = yield (0, dir_1.crawlDirectory)(dir);
|
|
22
|
+
const statuses = yield Promise.all(filepaths.map((filepath) => isomorphic_git_1.default.status({ dir, fs: fs_extra_1.default, filepath })));
|
|
23
|
+
if (statuses.some((status) => status !== 'absent' && status !== 'ignored' && status !== 'unmodified')) {
|
|
30
24
|
logging_1.log.newline();
|
|
31
|
-
logging_1.log.warn('You have
|
|
25
|
+
logging_1.log.warn('You have dirty/untracked files that may be overwritten.');
|
|
32
26
|
}
|
|
33
27
|
});
|
|
34
28
|
exports.auditWorkingTree = auditWorkingTree;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/cli/configure/analysis/git.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../src/cli/configure/analysis/git.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,wDAA0B;AAC1B,oEAAiC;AAEjC,4CAAoD;AACpD,oDAA6C;AAEtC,MAAM,gBAAgB,GAAG,CAAO,GAAW,EAAE,EAAE;IACpD,MAAM,SAAS,GAAG,MAAM,IAAA,oBAAc,EAAC,GAAG,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,wBAAG,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,EAAF,kBAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC/D,CAAC;IAEF,IACE,QAAQ,CAAC,IAAI,CACX,CAAC,MAAM,EAAE,EAAE,CACT,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,YAAY,CACzE,EACD;QACA,aAAG,CAAC,OAAO,EAAE,CAAC;QACd,aAAG,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;KACrE;AACH,CAAC,CAAA,CAAC;AAhBW,QAAA,gBAAgB,oBAgB3B"}
|
|
@@ -41,7 +41,7 @@ const configure = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
41
41
|
yield (0, logo_1.showLogoAndVersionInfo)();
|
|
42
42
|
const [manifest] = yield Promise.all([
|
|
43
43
|
(0, package_1.getDestinationManifest)(),
|
|
44
|
-
(0, exec_1.ensureCommands)('
|
|
44
|
+
(0, exec_1.ensureCommands)('yarn'),
|
|
45
45
|
]);
|
|
46
46
|
const destinationRoot = path_1.default.dirname(manifest.path);
|
|
47
47
|
logging_1.log.plain('Detected project root:', logging_1.log.bold(destinationRoot));
|
|
@@ -50,7 +50,7 @@ const configure = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
50
50
|
path_1.default.join(destinationRoot, '.gitignore'),
|
|
51
51
|
path_1.default.join(template_1.BASE_TEMPLATE_DIR, '_.gitignore'),
|
|
52
52
|
]),
|
|
53
|
-
(0, git_1.auditWorkingTree)(),
|
|
53
|
+
(0, git_1.auditWorkingTree)(destinationRoot),
|
|
54
54
|
]);
|
|
55
55
|
const templateConfig = yield (0, ensureTemplateCompletion_1.ensureTemplateCompletion)({
|
|
56
56
|
destinationRoot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/configure/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,gDAAwB;AAExB,uCAAkC;AAElC,yCAAwD;AACxD,2CAA8D;AAC9D,iDAA0C;AAC1C,2CAA0D;AAC1D,mDAAyD;AACzD,uDAAiD;AAEjD,iEAA8D;AAC9D,+DAA4D;AAC5D,wCAAkD;AAClD,gDAA4D;AAC5D,yEAAsE;AACtE,mDAAgD;AAChD,qDAAkD;AAElD,MAAM,WAAW,GAAG,CAAO,IAAY,EAAE,EAAE;IACzC,MAAM,MAAM,GAAG,IAAI,iBAAM,CAAC;QACxB,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,CAAU;QAC/B,OAAO,EAAE,gBAAgB;QACzB,IAAI;KACL,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;IAElC,OAAO,MAAM,KAAK,KAAK,CAAC;AAC1B,CAAC,CAAA,CAAC;AAEK,MAAM,SAAS,GAAG,GAAS,EAAE;IAClC,MAAM,IAAA,6BAAsB,GAAE,CAAC;IAE/B,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACnC,IAAA,gCAAsB,GAAE;QACxB,IAAA,qBAAc,EAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/configure/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@ export declare const getFirstDefined: <T>(record: Record<string, T | undefined>,
|
|
|
4
4
|
*
|
|
5
5
|
* Array properties are sorted and deduped.
|
|
6
6
|
*/
|
|
7
|
-
export declare const merge: <A, B>(obj: A, src: B) => A & B;
|
|
7
|
+
export declare const merge: <A, B>(obj: A, src: B) => {} & A & B;
|
|
8
8
|
/**
|
|
9
9
|
* Like `merge`, but arrays are not deduped or sorted to preserve order.
|
|
10
10
|
*/
|
|
11
|
-
export declare const mergeRaw: <A, B>(obj: A, src: B) => A & B;
|
|
11
|
+
export declare const mergeRaw: <A, B>(obj: A, src: B) => {} & A & B;
|
|
@@ -21,7 +21,7 @@ exports.getFirstDefined = getFirstDefined;
|
|
|
21
21
|
*
|
|
22
22
|
* Array properties are sorted and deduped.
|
|
23
23
|
*/
|
|
24
|
-
const merge = (obj, src) => (0, lodash_mergewith_1.default)(obj, src, (objValue, srcValue) => {
|
|
24
|
+
const merge = (obj, src) => (0, lodash_mergewith_1.default)({}, obj, src, (objValue, srcValue) => {
|
|
25
25
|
if (isArray(objValue) && isArray(srcValue)) {
|
|
26
26
|
return [...new Set(objValue.concat(srcValue))].sort();
|
|
27
27
|
}
|
|
@@ -31,7 +31,7 @@ exports.merge = merge;
|
|
|
31
31
|
/**
|
|
32
32
|
* Like `merge`, but arrays are not deduped or sorted to preserve order.
|
|
33
33
|
*/
|
|
34
|
-
const mergeRaw = (obj, src) => (0, lodash_mergewith_1.default)(obj, src, (objValue, srcValue) => isArray(objValue) && isArray(srcValue)
|
|
34
|
+
const mergeRaw = (obj, src) => (0, lodash_mergewith_1.default)({}, obj, src, (objValue, srcValue) => isArray(objValue) && isArray(srcValue)
|
|
35
35
|
? objValue.concat(srcValue)
|
|
36
36
|
: undefined);
|
|
37
37
|
exports.mergeRaw = mergeRaw;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/cli/configure/processing/record.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAyC;AAEzC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtE,MAAM,eAAe,GAAG,CAC7B,MAAqC,EACrC,IAAc,EACC,EAAE;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO;AACT,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AAEF;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAO,GAAM,EAAE,GAAM,EAAE,EAAE,CAC5C,IAAA,0BAAS,EAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAiB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/cli/configure/processing/record.ts"],"names":[],"mappings":";;;;;;AAAA,wEAAyC;AAEzC,MAAM,OAAO,GAAG,CAAC,KAAc,EAAsB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAEtE,MAAM,eAAe,GAAG,CAC7B,MAAqC,EACrC,IAAc,EACC,EAAE;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE;QACtB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;KACF;IAED,OAAO;AACT,CAAC,CAAC;AAZW,QAAA,eAAe,mBAY1B;AAEF;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAO,GAAM,EAAE,GAAM,EAAE,EAAE,CAC5C,IAAA,0BAAS,EAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAiB,EAAE,EAAE;IAC/D,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;QAC1C,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KACvD;IAED,OAAO;AACT,CAAC,CAAC,CAAC;AAPQ,QAAA,KAAK,SAOb;AAEL;;GAEG;AACI,MAAM,QAAQ,GAAG,CAAO,GAAM,EAAE,GAAM,EAAE,EAAE,CAC/C,IAAA,0BAAS,EAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAiB,EAAE,QAAiB,EAAE,EAAE,CAC/D,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC;IACpC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;IAC3B,CAAC,CAAC,SAAS,CACd,CAAC;AALS,QAAA,QAAQ,YAKjB"}
|