resume-cli 3.1.1 → 3.2.0
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 +14 -7
- package/build/builder.js +1 -1
- package/build/export-resume.js +1 -1
- package/build/get-resume.js +1 -1
- package/build/get-resume.test.js +16 -16
- package/build/get-schema.js +1 -1
- package/build/init.js +2 -2
- package/build/main.js +2 -2
- package/build/main.test.js +14 -7
- package/build/render-html.js +1 -1
- package/build/render-html.test.js +1 -1
- package/build/serve.js +6 -0
- package/build/test-utils/cli-test-entry.js +2 -3
- package/build/test-utils/mocked-volume-builder.js +3 -2
- package/build/validate.js +25 -15
- package/build/validate.test.js +13 -5
- package/package.json +24 -30
package/README.md
CHANGED
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
# resume-cli
|
|
2
2
|
|
|
3
|
-
[](https://matrix.to/#/#json-resume:one.ems.host)
|
|
4
|
-
[](https://github.com/jsonresume/resume-cli/actions)
|
|
5
3
|
[](https://www.npmjs.org/package/resume-cli)
|
|
6
4
|
|
|
7
5
|
This is the command line tool for [JSON Resume](https://jsonresume.org), the open-source initiative to create a JSON-based standard for resumes.
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
This repository is not actively maintained. It's recommended to use one of the third-party clients that support the JSON Resume standard instead:
|
|
12
|
-
|
|
13
|
-
* [Resumed](https://github.com/rbardini/resumed)
|
|
7
|
+
> **Note:** `resume-cli` has been revived and now lives in the [jsonresume.org monorepo](https://github.com/jsonresume/jsonresume.org) as `packages/cli` (modernized for Node.js 18+). It keeps its npm identity as [`resume-cli`](https://www.npmjs.com/package/resume-cli) and is published from this workspace. The old standalone [jsonresume/resume-cli](https://github.com/jsonresume/resume-cli) repository is archived — please open issues and PRs against the monorepo.
|
|
14
8
|
|
|
15
9
|
## Getting Started
|
|
16
10
|
|
|
11
|
+
Requires Node.js 18 or newer.
|
|
12
|
+
|
|
17
13
|
Install the command-line tool:
|
|
18
14
|
|
|
19
15
|
```
|
|
@@ -91,6 +87,17 @@ Supported resume data MIME types are:
|
|
|
91
87
|
- `application/json`
|
|
92
88
|
- `text/yaml`
|
|
93
89
|
|
|
90
|
+
## Development
|
|
91
|
+
|
|
92
|
+
This package is part of the [jsonresume.org monorepo](https://github.com/jsonresume/jsonresume.org). From `packages/cli`:
|
|
93
|
+
|
|
94
|
+
```
|
|
95
|
+
pnpm dev # run the CLI from source (babel-node lib/main.js)
|
|
96
|
+
pnpm build # compile lib/ to build/ with Babel
|
|
97
|
+
pnpm test # run the Jest test suite
|
|
98
|
+
pnpm lint # run ESLint
|
|
99
|
+
```
|
|
100
|
+
|
|
94
101
|
## License
|
|
95
102
|
|
|
96
103
|
Available under [the MIT license](http://mths.be/mit).
|
package/build/builder.js
CHANGED
|
@@ -28,7 +28,7 @@ module.exports = function resumeBuilder(theme, dir, resumeFilename, cb) {
|
|
|
28
28
|
if (err) {
|
|
29
29
|
console.log(chalk.yellow('Could not find:'), resumeFilename);
|
|
30
30
|
console.log(chalk.cyan('Using example resume.json from resume-schema instead...'));
|
|
31
|
-
resumeJson = require('resume
|
|
31
|
+
resumeJson = require('@jsonresume/schema/sample.resume.json');
|
|
32
32
|
} else {
|
|
33
33
|
try {
|
|
34
34
|
// todo: test resume schema
|
package/build/export-resume.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _renderHtml = _interopRequireDefault(require("./render-html"));
|
|
4
4
|
var _util = require("util");
|
|
5
5
|
var _fs = _interopRequireDefault(require("fs"));
|
|
6
|
-
function _interopRequireDefault(
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
7
|
const writeFile = (0, _util.promisify)(_fs.default.writeFile);
|
|
8
8
|
const path = require('path');
|
|
9
9
|
const puppeteer = require('puppeteer');
|
package/build/get-resume.js
CHANGED
|
@@ -11,7 +11,7 @@ var _quaff = _interopRequireDefault(require("quaff"));
|
|
|
11
11
|
var _streamToString = _interopRequireDefault(require("stream-to-string"));
|
|
12
12
|
var _yamlJs = _interopRequireDefault(require("yaml-js"));
|
|
13
13
|
var _util = require("util");
|
|
14
|
-
function _interopRequireDefault(
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
15
|
const {
|
|
16
16
|
createReadStream
|
|
17
17
|
} = _fs.default;
|
package/build/get-resume.test.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _waait = _interopRequireDefault(require("waait"));
|
|
4
4
|
var _getResume = _interopRequireDefault(require("./get-resume"));
|
|
5
5
|
var _mockStdin = require("mock-stdin");
|
|
6
|
-
function _interopRequireDefault(
|
|
6
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
7
7
|
jest.mock('fs', () => {
|
|
8
8
|
const build = require('./test-utils/mocked-volume-builder');
|
|
9
9
|
const {
|
|
@@ -17,8 +17,8 @@ describe('get-resume', () => {
|
|
|
17
17
|
expect(await (0, _getResume.default)({
|
|
18
18
|
path: '/resume.yaml'
|
|
19
19
|
})).toMatchInlineSnapshot(`
|
|
20
|
-
|
|
21
|
-
"basics":
|
|
20
|
+
{
|
|
21
|
+
"basics": {
|
|
22
22
|
"email": "thomas@example.com",
|
|
23
23
|
"name": "thomas",
|
|
24
24
|
},
|
|
@@ -29,25 +29,25 @@ describe('get-resume', () => {
|
|
|
29
29
|
expect(await (0, _getResume.default)({
|
|
30
30
|
path: '/resume.json'
|
|
31
31
|
})).toMatchInlineSnapshot(`
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
{
|
|
33
|
+
"basics": {
|
|
34
|
+
"email": "thomas@example.com",
|
|
35
|
+
"name": "thomas",
|
|
36
|
+
},
|
|
37
|
+
}
|
|
38
|
+
`);
|
|
39
39
|
});
|
|
40
40
|
it('should consume an entire directory as if it were a json object', async () => {
|
|
41
41
|
expect(await (0, _getResume.default)({
|
|
42
42
|
path: '/quaff'
|
|
43
43
|
})).toMatchInlineSnapshot(`
|
|
44
|
-
|
|
45
|
-
"basics":
|
|
44
|
+
{
|
|
45
|
+
"basics": {
|
|
46
46
|
"email": "thomas@example.com",
|
|
47
47
|
"name": "thomas",
|
|
48
48
|
},
|
|
49
|
-
"work":
|
|
50
|
-
|
|
49
|
+
"work": [
|
|
50
|
+
{
|
|
51
51
|
"company": "Pied Piper",
|
|
52
52
|
"endDate": "2014-12-01",
|
|
53
53
|
"position": "CEO/President",
|
|
@@ -71,8 +71,8 @@ describe('get-resume', () => {
|
|
|
71
71
|
}));
|
|
72
72
|
stdin.send(null);
|
|
73
73
|
expect(await gotResume).toMatchInlineSnapshot(`
|
|
74
|
-
|
|
75
|
-
"basics":
|
|
74
|
+
{
|
|
75
|
+
"basics": {
|
|
76
76
|
"email": "thomas@example.com",
|
|
77
77
|
"name": "thomas",
|
|
78
78
|
},
|
package/build/get-schema.js
CHANGED
|
@@ -12,7 +12,7 @@ var _default = async ({
|
|
|
12
12
|
} = {}) => {
|
|
13
13
|
let path = pathArg;
|
|
14
14
|
if (!path) {
|
|
15
|
-
path = require.resolve('
|
|
15
|
+
path = require.resolve('@jsonresume/schema/schema.json');
|
|
16
16
|
}
|
|
17
17
|
return JSON.parse(await readFile(path, {
|
|
18
18
|
encoding: 'utf-8'
|
package/build/init.js
CHANGED
|
@@ -11,10 +11,10 @@ var _yesno = _interopRequireDefault(require("yesno"));
|
|
|
11
11
|
var _objectPathImmutable = require("object-path-immutable");
|
|
12
12
|
var _fileExists = _interopRequireDefault(require("file-exists"));
|
|
13
13
|
var _read = _interopRequireDefault(require("read"));
|
|
14
|
-
function _interopRequireDefault(
|
|
14
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
15
15
|
const writeFile = (0, _util.promisify)(_fs.default.writeFile);
|
|
16
16
|
const read = (0, _util.promisify)(_read.default);
|
|
17
|
-
const resume = require('
|
|
17
|
+
const resume = require('@jsonresume/schema/sample.resume.json');
|
|
18
18
|
var _default = async ({
|
|
19
19
|
resumePath
|
|
20
20
|
}) => {
|
package/build/main.js
CHANGED
|
@@ -6,7 +6,7 @@ var _init = _interopRequireDefault(require("./init"));
|
|
|
6
6
|
var _getResume = _interopRequireDefault(require("./get-resume"));
|
|
7
7
|
var _getSchema = _interopRequireDefault(require("./get-schema"));
|
|
8
8
|
var _validate = _interopRequireDefault(require("./validate"));
|
|
9
|
-
function _interopRequireDefault(
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
const pkg = require('../package.json');
|
|
11
11
|
const exportResume = require('./export-resume');
|
|
12
12
|
const serve = require('./serve');
|
|
@@ -22,7 +22,7 @@ const normalizeTheme = (value, defaultValue) => {
|
|
|
22
22
|
return theme.match('jsonresume-theme-.*') ? theme : `jsonresume-theme-${theme}`;
|
|
23
23
|
};
|
|
24
24
|
(async () => {
|
|
25
|
-
program.name('resume').usage('[command] [options]').version(pkg.version).option('-F, --force', 'Used by `publish` and `export` - bypasses schema testing.').option('-t, --theme <theme name>', 'Specify theme used by `export` and `serve` or specify a path starting with . (use . for current directory or ../some/other/dir)', normalizeTheme, 'jsonresume-theme-
|
|
25
|
+
program.name('resume').usage('[command] [options]').version(pkg.version).option('-F, --force', 'Used by `publish` and `export` - bypasses schema testing.').option('-t, --theme <theme name>', 'Specify theme used by `export` and `serve` or specify a path starting with . (use . for current directory or ../some/other/dir)', normalizeTheme, 'jsonresume-theme-elegant').option('-f, --format <file type extension>', 'Used by `export`.').option('-r, --resume <resume filename>', "path to the resume in json format. Use '-' to read from stdin", 'resume.json').option('-p, --port <port>', 'Used by `serve` (default: 4000)', 4000).option('-s, --silent', 'Used by `serve` to tell it if open browser auto or not.', false).option('-d, --dir <path>', 'Used by `serve` to indicate a public directory path.', 'public').option('--schema <relativePath>', 'Used by `validate` to validate against a custom schema.');
|
|
26
26
|
program.command('init').description('Initialize a resume.json file').action(async () => {
|
|
27
27
|
await (0, _init.default)({
|
|
28
28
|
resumePath: program.resume
|
package/build/main.test.js
CHANGED
|
@@ -4,7 +4,7 @@ var _child_process = require("child_process");
|
|
|
4
4
|
var _streamToString = _interopRequireDefault(require("stream-to-string"));
|
|
5
5
|
var _util = require("util");
|
|
6
6
|
var _package = _interopRequireDefault(require("../package.json"));
|
|
7
|
-
function _interopRequireDefault(
|
|
7
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
8
|
const exec = (0, _util.promisify)(_child_process.exec);
|
|
9
9
|
const run = async (argv, {
|
|
10
10
|
waitForVolumeExport = true,
|
|
@@ -57,17 +57,17 @@ describe('cli configuration', () => {
|
|
|
57
57
|
\`serve\` or specify a path starting with .
|
|
58
58
|
(use . for current directory or
|
|
59
59
|
../some/other/dir) (default:
|
|
60
|
-
|
|
60
|
+
"jsonresume-theme-elegant")
|
|
61
61
|
-f, --format <file type extension> Used by \`export\`.
|
|
62
62
|
-r, --resume <resume filename> path to the resume in json format. Use
|
|
63
63
|
'-' to read from stdin (default:
|
|
64
|
-
|
|
64
|
+
"resume.json")
|
|
65
65
|
-p, --port <port> Used by \`serve\` (default: 4000) (default:
|
|
66
66
|
4000)
|
|
67
67
|
-s, --silent Used by \`serve\` to tell it if open
|
|
68
68
|
browser auto or not. (default: false)
|
|
69
69
|
-d, --dir <path> Used by \`serve\` to indicate a public
|
|
70
|
-
directory path. (default:
|
|
70
|
+
directory path. (default: "public")
|
|
71
71
|
--schema <relativePath> Used by \`validate\` to validate against a
|
|
72
72
|
custom schema.
|
|
73
73
|
-h, --help display help for command
|
|
@@ -105,8 +105,12 @@ describe('cli configuration', () => {
|
|
|
105
105
|
const {
|
|
106
106
|
stdout,
|
|
107
107
|
volume
|
|
108
|
-
} = await run(['export', '/test-resumes/exported-resume-from-stdin.html', '--resume', '-'
|
|
109
|
-
|
|
108
|
+
} = await run(['export', '/test-resumes/exported-resume-from-stdin.html', '--resume', '-',
|
|
109
|
+
// this is the dash
|
|
110
|
+
// The default theme (elegant) throws on resumes missing a
|
|
111
|
+
// `basics.location`; `even` renders minimal resumes, and this test
|
|
112
|
+
// only exercises the export plumbing, not a specific theme.
|
|
113
|
+
'--theme', 'even'], {
|
|
110
114
|
stdin: JSON.stringify({
|
|
111
115
|
basics: {
|
|
112
116
|
name: 'thomas-from-stdin'
|
|
@@ -124,7 +128,10 @@ describe('cli configuration', () => {
|
|
|
124
128
|
it('should export a resume from the path specified by --resume to the path specified immediately after the export command', async () => {
|
|
125
129
|
const {
|
|
126
130
|
stdout
|
|
127
|
-
} = await run(['export', '/test-resumes/exported-resume.html', '--resume', '/test-resumes/resume.json'
|
|
131
|
+
} = await run(['export', '/test-resumes/exported-resume.html', '--resume', '/test-resumes/resume.json',
|
|
132
|
+
// See note above: `even` renders minimal resumes; the default
|
|
133
|
+
// `elegant` theme requires a `basics.location`.
|
|
134
|
+
'--theme', 'even']);
|
|
128
135
|
expect(stdout).toMatchInlineSnapshot(`
|
|
129
136
|
"
|
|
130
137
|
Done! Find your new .html resume at:
|
package/build/render-html.js
CHANGED
|
@@ -39,7 +39,7 @@ var _default = async ({
|
|
|
39
39
|
throw new Error(`theme path ${themePath} could not be resolved from current working directory`);
|
|
40
40
|
}
|
|
41
41
|
const theme = require(path);
|
|
42
|
-
if (typeof
|
|
42
|
+
if (typeof theme?.render !== 'function') {
|
|
43
43
|
throw new Error('theme.render is not a function');
|
|
44
44
|
}
|
|
45
45
|
return theme.render(resume);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _renderHtml = _interopRequireDefault(require("./render-html"));
|
|
4
|
-
function _interopRequireDefault(
|
|
4
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
5
5
|
describe('renderHTML', () => {
|
|
6
6
|
beforeAll(() => {
|
|
7
7
|
const originalRequireResolve = require.resolve;
|
package/build/serve.js
CHANGED
|
@@ -6,6 +6,12 @@ const readline = require('readline');
|
|
|
6
6
|
const bs = require('browser-sync').create();
|
|
7
7
|
const builder = require('./builder');
|
|
8
8
|
const reBuildResume = (theme, dir, resumeFilename, cb) => {
|
|
9
|
+
console.log({
|
|
10
|
+
theme,
|
|
11
|
+
dir,
|
|
12
|
+
resumeFilename,
|
|
13
|
+
cb
|
|
14
|
+
});
|
|
9
15
|
builder(theme, dir, resumeFilename, (err, html) => {
|
|
10
16
|
if (err) {
|
|
11
17
|
readline.cursorTo(process.stdout, 0);
|
|
@@ -4,9 +4,8 @@ var _mockedVolumeBuilder = _interopRequireDefault(require("./mocked-volume-build
|
|
|
4
4
|
var _fsMonkey = require("fs-monkey");
|
|
5
5
|
var _unionfs = require("unionfs");
|
|
6
6
|
var fs = _interopRequireWildcard(require("fs"));
|
|
7
|
-
function
|
|
8
|
-
function
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
7
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
9
|
const mockVolume = (0, _mockedVolumeBuilder.default)({
|
|
11
10
|
mount: '/test-resumes'
|
|
12
11
|
});
|
|
@@ -14,8 +14,9 @@ module.exports = ({
|
|
|
14
14
|
}),
|
|
15
15
|
'only-number.json': '123',
|
|
16
16
|
'invalid-resume.json': JSON.stringify({
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
basics: {
|
|
18
|
+
// name must be a string per the JSON Resume schema
|
|
19
|
+
name: 123
|
|
19
20
|
}
|
|
20
21
|
}),
|
|
21
22
|
'resume.json': JSON.stringify({
|
package/build/validate.js
CHANGED
|
@@ -4,25 +4,35 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const
|
|
7
|
+
var _ajv = _interopRequireDefault(require("ajv"));
|
|
8
|
+
var _ajvFormats = _interopRequireDefault(require("ajv-formats"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
// Format a single Ajv error into a readable `field message` line.
|
|
11
|
+
const formatError = error => {
|
|
12
|
+
// instancePath is like "/basics/name"; the root is an empty string.
|
|
13
|
+
const field = error.instancePath ? `data${error.instancePath}` : 'data';
|
|
14
|
+
if (error.keyword === 'additionalProperties') {
|
|
15
|
+
return `${field} ${error.message} (${error.params.additionalProperty})`;
|
|
16
|
+
}
|
|
17
|
+
return `${field} ${error.message}`;
|
|
18
|
+
};
|
|
14
19
|
var _default = async ({
|
|
15
20
|
resume,
|
|
16
21
|
schema
|
|
17
22
|
}) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
// strict:false is required: the JSON Resume schema is an externally authored
|
|
24
|
+
// draft-07 document that uses keywords (e.g. additionalItems without an
|
|
25
|
+
// array `items`) that Ajv's strict mode would otherwise reject.
|
|
26
|
+
const ajv = new _ajv.default({
|
|
27
|
+
allErrors: true,
|
|
28
|
+
strict: false
|
|
29
|
+
});
|
|
30
|
+
(0, _ajvFormats.default)(ajv);
|
|
31
|
+
const validateFn = ajv.compile(schema);
|
|
32
|
+
if (validateFn(resume)) {
|
|
33
|
+
return true;
|
|
26
34
|
}
|
|
35
|
+
const details = (validateFn.errors || []).map(formatError).join('\n ');
|
|
36
|
+
throw new Error(`Invalid resume:\n ${details}`);
|
|
27
37
|
};
|
|
28
38
|
exports.default = _default;
|
package/build/validate.test.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var _validate = _interopRequireDefault(require("./validate"));
|
|
4
4
|
var _getSchema = _interopRequireDefault(require("./get-schema"));
|
|
5
|
-
function _interopRequireDefault(
|
|
5
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
6
|
describe('validate', () => {
|
|
7
7
|
let defaultSchema;
|
|
8
8
|
beforeEach(async () => {
|
|
@@ -16,13 +16,18 @@ describe('validate', () => {
|
|
|
16
16
|
schema: defaultSchema
|
|
17
17
|
});
|
|
18
18
|
});
|
|
19
|
-
it('should throw
|
|
19
|
+
it('should throw a per-field error for an invalid resume object', async () => {
|
|
20
20
|
await expect((0, _validate.default)({
|
|
21
21
|
resume: {
|
|
22
|
-
|
|
22
|
+
basics: {
|
|
23
|
+
name: 123
|
|
24
|
+
}
|
|
23
25
|
},
|
|
24
26
|
schema: defaultSchema
|
|
25
|
-
})).rejects.toMatchInlineSnapshot(`
|
|
27
|
+
})).rejects.toMatchInlineSnapshot(`
|
|
28
|
+
[Error: Invalid resume:
|
|
29
|
+
data/basics/name must be string]
|
|
30
|
+
`);
|
|
26
31
|
});
|
|
27
32
|
it('should accept a schema override', async () => {
|
|
28
33
|
await (0, _validate.default)({
|
|
@@ -36,6 +41,9 @@ describe('validate', () => {
|
|
|
36
41
|
schema: {
|
|
37
42
|
type: 'number'
|
|
38
43
|
}
|
|
39
|
-
})).rejects.toMatchInlineSnapshot(`
|
|
44
|
+
})).rejects.toMatchInlineSnapshot(`
|
|
45
|
+
[Error: Invalid resume:
|
|
46
|
+
data must be number]
|
|
47
|
+
`);
|
|
40
48
|
});
|
|
41
49
|
});
|
package/package.json
CHANGED
|
@@ -1,25 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "resume-cli",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.2.0",
|
|
4
4
|
"description": "The JSON Resume command line interface",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "build/main.js",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": ">=
|
|
7
|
+
"node": ">=18"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"build/*",
|
|
11
11
|
"!test-utils",
|
|
12
12
|
"!*.test.js"
|
|
13
13
|
],
|
|
14
|
-
"scripts": {
|
|
15
|
-
"dev": "babel-node lib/main.js",
|
|
16
|
-
"lint": "eslint --ignore-path .gitignore .",
|
|
17
|
-
"_postinstall": "husky install",
|
|
18
|
-
"prepublishOnly": "pinst --disable",
|
|
19
|
-
"postpublish": "pinst --enable",
|
|
20
|
-
"prepare": "babel lib -d build --copy-files",
|
|
21
|
-
"test": "jest"
|
|
22
|
-
},
|
|
23
14
|
"repository": {
|
|
24
15
|
"type": "git",
|
|
25
16
|
"url": "https://github.com/jsonresume/resume-cli.git"
|
|
@@ -29,6 +20,8 @@
|
|
|
29
20
|
"resume": "build/main.js"
|
|
30
21
|
},
|
|
31
22
|
"dependencies": {
|
|
23
|
+
"ajv": "^8.17.1",
|
|
24
|
+
"ajv-formats": "^3.0.1",
|
|
32
25
|
"async": "^3.2.0",
|
|
33
26
|
"browser-sync": "^2.29.3",
|
|
34
27
|
"btoa": "^1.2.1",
|
|
@@ -37,29 +30,26 @@
|
|
|
37
30
|
"dotenv": "^8.2.0",
|
|
38
31
|
"file-exists": "^5.0.1",
|
|
39
32
|
"jest-extended": "^0.11.5",
|
|
40
|
-
"jsonresume-theme-
|
|
33
|
+
"jsonresume-theme-elegant": "^1.16.1",
|
|
34
|
+
"jsonresume-theme-even": "0.6.0",
|
|
41
35
|
"mime-types": "^2.1.27",
|
|
42
36
|
"object-path-immutable": "^4.1.1",
|
|
43
|
-
"puppeteer": "^
|
|
37
|
+
"puppeteer": "^23.0.0",
|
|
44
38
|
"quaff": "^4.2.0",
|
|
45
39
|
"read": "^1.0.7",
|
|
46
|
-
"resume-schema": "^1.0.0",
|
|
47
40
|
"stream-to-string": "^1.2.1",
|
|
48
41
|
"superagent": "^6.0.0",
|
|
49
42
|
"yaml-js": "^0.2.3",
|
|
50
43
|
"yesno": "^0.3.1",
|
|
51
|
-
"
|
|
52
|
-
"z-schema-errors": "^0.2.1"
|
|
44
|
+
"@jsonresume/schema": "1.2.1"
|
|
53
45
|
},
|
|
54
46
|
"devDependencies": {
|
|
55
|
-
"@babel/cli": "7.
|
|
56
|
-
"@babel/core": "7.
|
|
57
|
-
"@babel/eslint-parser": "7.
|
|
58
|
-
"@babel/node": "7.
|
|
59
|
-
"@babel/
|
|
60
|
-
"
|
|
61
|
-
"babel-eslint": "10.1.0",
|
|
62
|
-
"babel-jest": "28.1.2",
|
|
47
|
+
"@babel/cli": "^7.25.0",
|
|
48
|
+
"@babel/core": "^7.25.0",
|
|
49
|
+
"@babel/eslint-parser": "^7.25.0",
|
|
50
|
+
"@babel/node": "^7.25.0",
|
|
51
|
+
"@babel/preset-env": "^7.25.0",
|
|
52
|
+
"babel-jest": "^29.7.0",
|
|
63
53
|
"dedent": "0.7.0",
|
|
64
54
|
"eslint": "7.15.0",
|
|
65
55
|
"eslint-config-prettier": "7.0.0",
|
|
@@ -67,13 +57,17 @@
|
|
|
67
57
|
"eslint-plugin-prettier": "3.2.0",
|
|
68
58
|
"flat": "5.0.2",
|
|
69
59
|
"fs-monkey": "1.0.1",
|
|
70
|
-
"
|
|
71
|
-
"
|
|
72
|
-
"lint-staged": "10.5.3",
|
|
73
|
-
"memfs": "3.2.0",
|
|
60
|
+
"jest": "^29.7.0",
|
|
61
|
+
"memfs": "3.6.0",
|
|
74
62
|
"mock-stdin": "1.0.0",
|
|
75
63
|
"prettier": "2.2.1",
|
|
76
64
|
"unionfs": "4.4.0",
|
|
77
65
|
"waait": "1.0.5"
|
|
66
|
+
},
|
|
67
|
+
"scripts": {
|
|
68
|
+
"dev": "babel-node lib/main.js",
|
|
69
|
+
"lint": "eslint --ignore-path .gitignore .",
|
|
70
|
+
"build": "babel lib -d build --copy-files",
|
|
71
|
+
"test": "jest"
|
|
78
72
|
}
|
|
79
|
-
}
|
|
73
|
+
}
|