@jungvonmatt/contentful-ssg 4.1.2 → 5.0.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.
Files changed (59) hide show
  1. package/dist/__test__/mock.js +5 -4
  2. package/dist/__test__/mock.js.map +1 -1
  3. package/dist/cli.js +8 -13
  4. package/dist/cli.js.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/array.js +1 -5
  8. package/dist/lib/array.js.map +1 -1
  9. package/dist/lib/config.js +2 -2
  10. package/dist/lib/config.js.map +1 -1
  11. package/dist/lib/contentful.js +20 -11
  12. package/dist/lib/contentful.js.map +1 -1
  13. package/dist/lib/hook-manager.js +6 -6
  14. package/dist/lib/hook-manager.js.map +1 -1
  15. package/dist/lib/stats.js +1 -1
  16. package/dist/lib/stats.js.map +1 -1
  17. package/dist/lib/ui.js +1 -1
  18. package/dist/lib/ui.js.map +1 -1
  19. package/dist/lib/utils.js +1 -1
  20. package/dist/lib/utils.js.map +1 -1
  21. package/dist/mapper/map-field.js.map +1 -1
  22. package/dist/server/index.js +10 -7
  23. package/dist/server/index.js.map +1 -1
  24. package/dist/tasks/localize.js +1 -1
  25. package/dist/tasks/localize.js.map +1 -1
  26. package/dist/tasks/write.js +1 -1
  27. package/dist/tasks/write.js.map +1 -1
  28. package/package.json +33 -51
  29. package/src/__test__/mock.ts +6 -5
  30. package/src/cli.ts +11 -13
  31. package/src/converter/index.test.ts +8 -0
  32. package/src/index.test.ts +31 -29
  33. package/src/index.ts +2 -2
  34. package/src/lib/array.test.ts +2 -3
  35. package/src/lib/array.ts +1 -7
  36. package/src/lib/cf-cache.test.ts +4 -1
  37. package/src/lib/config.ts +2 -2
  38. package/src/lib/contentful.test.ts +32 -29
  39. package/src/lib/contentful.ts +20 -16
  40. package/src/lib/file-manager.test.ts +24 -15
  41. package/src/lib/hook-manager.ts +6 -6
  42. package/src/lib/object.test.ts +9 -7
  43. package/src/lib/observable.test.ts +5 -5
  44. package/src/lib/stats.test.ts +53 -8
  45. package/src/lib/stats.ts +1 -1
  46. package/src/lib/ui.test.ts +16 -5
  47. package/src/lib/ui.ts +1 -1
  48. package/src/lib/utils.test.ts +2 -2
  49. package/src/lib/utils.ts +1 -1
  50. package/src/mapper/map-field.ts +1 -0
  51. package/src/server/index.test.ts +3 -2
  52. package/src/server/index.ts +10 -7
  53. package/src/tasks/fetch.test.ts +7 -6
  54. package/src/tasks/localize.test.ts +3 -4
  55. package/src/tasks/localize.ts +1 -1
  56. package/src/tasks/setup.test.ts +10 -9
  57. package/src/tasks/transform.test.ts +5 -4
  58. package/src/tasks/write.test.ts +8 -7
  59. package/src/tasks/write.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/tasks/localize.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"localize.js","sourceRoot":"","sources":["../../src/tasks/localize.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { join, extname } from 'path';
2
2
  import mm from 'micromatch';
3
3
  import { stringify, TYPE_YAML, TYPE_JSON, TYPE_MARKDOWN, TYPE_TOML } from '../converter/index.js';
4
- const { contains } = mm;
4
+ const contains = (str, pattern) => mm.contains(str, pattern);
5
5
  const formatMapping = {
6
6
  '.md': TYPE_MARKDOWN,
7
7
  '.json': TYPE_JSON,
@@ -1 +1 @@
1
- {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tasks/write.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write.js","sourceRoot":"","sources":["../../src/tasks/write.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,26 +1,27 @@
1
1
  {
2
2
  "name": "@jungvonmatt/contentful-ssg",
3
- "version": "4.1.2",
3
+ "version": "5.0.0",
4
4
  "description": "",
5
+ "bugs": {
6
+ "url": "https://github.com/jungvonmatt/contentful-ssg/issues"
7
+ },
8
+ "license": "MIT",
9
+ "author": "Jung von Matt TECH GmbH",
5
10
  "repository": {
6
11
  "type": "git",
7
12
  "url": "git+https://github.com/jungvonmatt/contentful-ssg.git"
8
13
  },
9
- "bugs": {
10
- "url": "https://github.com/jungvonmatt/contentful-ssg/issues"
14
+ "bin": {
15
+ "contentful-ssg": "./dist/cli.js",
16
+ "cssg": "./dist/cli.js"
11
17
  },
12
- "main": "./dist/index.js",
18
+ "files": [
19
+ "src",
20
+ "dist"
21
+ ],
13
22
  "type": "module",
23
+ "main": "./dist/index.js",
14
24
  "typings": "./dist/types.d.ts",
15
- "exports": {
16
- ".": "./dist/index.js",
17
- "./lib/*": "./dist/lib/*.js",
18
- "./converter": "./dist/converter/index.js",
19
- "./converter/*": "./dist/converter/*.js",
20
- "./mapper/*": "./dist/mapper/*.js",
21
- "./tasks/*": "./dist/tasks/*.js",
22
- "./__test__/mock": "./dist/__test__/mock.js"
23
- },
24
25
  "typesVersions": {
25
26
  "*": {
26
27
  ".": [
@@ -46,33 +47,32 @@
46
47
  ]
47
48
  }
48
49
  },
49
- "bin": {
50
- "cssg": "./dist/cli.js",
51
- "contentful-ssg": "./dist/cli.js"
50
+ "exports": {
51
+ ".": "./dist/index.js",
52
+ "./lib/*": "./dist/lib/*.js",
53
+ "./converter": "./dist/converter/index.js",
54
+ "./converter/*": "./dist/converter/*.js",
55
+ "./mapper/*": "./dist/mapper/*.js",
56
+ "./tasks/*": "./dist/tasks/*.js",
57
+ "./__test__/mock": "./dist/__test__/mock.js"
52
58
  },
53
59
  "publishConfig": {
54
60
  "access": "public"
55
61
  },
56
62
  "scripts": {
57
63
  "clean": "rimraf ./dist",
58
- "lint": "eslint --color src --fix --ext .ts",
59
- "test": "jest",
64
+ "lint": "oxlint --type-aware --fix src",
65
+ "test": "vitest run",
60
66
  "precompile": "pnpm run clean",
61
67
  "compile": "tsc --build",
62
68
  "postcompile": "chmod +x ./dist/cli.js",
63
69
  "watch": "tsc --build --watch"
64
70
  },
65
- "files": [
66
- "src",
67
- "dist"
68
- ],
69
- "author": "Jung von Matt TECH GmbH",
70
- "license": "MIT",
71
71
  "dependencies": {
72
72
  "@contentful/rich-text-html-renderer": "^16.3.0",
73
73
  "@contentful/rich-text-types": "^16.3.0",
74
74
  "@iarna/toml": "^2.2.5",
75
- "@jungvonmatt/contentful-config": "4.1.2",
75
+ "@jungvonmatt/contentful-config": "5.0.0",
76
76
  "@swc/core": "^1.3.104",
77
77
  "chalk": "^5.3.0",
78
78
  "change-case": "^5.4.2",
@@ -80,67 +80,49 @@
80
80
  "contentful": "^11.7.15",
81
81
  "contentful-management": "^11.54.4",
82
82
  "dlv": "^1.1.3",
83
- "esbuild": "^0.25.3",
84
83
  "exit-hook": "^4.0.0",
85
- "express": "^4.18.2",
84
+ "express": "^4.21.2",
86
85
  "find-cache-dir": "^5.0.0",
87
86
  "find-up": "^7.0.0",
88
87
  "fs-extra": "^11.1.0",
89
- "get-port": "^7.0.0",
90
88
  "globby": "^14.0.0",
91
89
  "gray-matter": "^4.0.3",
92
90
  "ignore": "^5.3.2",
93
91
  "inquirer": "^12.9.3",
94
92
  "js-yaml": "^4.1.0",
95
93
  "listr": "^0.14.3",
96
- "merge-options": "^3.0.4",
97
94
  "micromatch": "^4.0.5",
95
+ "oxfmt": "^0.47.0",
98
96
  "pirates": "^4.0.6",
99
- "prettier": "^3.2.4",
100
97
  "read-pkg-up": "^11.0.0",
101
98
  "rxjs": "^7.8.1",
102
99
  "serialize-error": "^11.0.3",
103
- "serializr": "^3.0.2",
104
100
  "slash": "^5.1.0",
105
- "tempy": "^3.1.0",
106
101
  "type-fest": "^4.9.0",
107
- "uuid": "^9.0.1"
102
+ "uuid": "^14.0.0"
108
103
  },
109
104
  "devDependencies": {
110
- "@swc/jest": "^0.2.29",
111
105
  "@types/dlv": "^1.1.4",
112
106
  "@types/express": "^4.17.21",
113
107
  "@types/fs-extra": "^11.0.4",
114
108
  "@types/inquirer": "^9.0.7",
115
- "@types/jest": "^29.5.11",
116
109
  "@types/js-yaml": "^4.0.4",
117
110
  "@types/listr": "^0.14.9",
118
111
  "@types/micromatch": "^4.0.6",
119
112
  "@types/node": "^20.11.5",
120
- "@typescript-eslint/eslint-plugin": "^6.19.0",
121
- "@typescript-eslint/parser": "^6.19.0",
122
- "eslint": "^8.56.0",
123
- "eslint-config-prettier": "^9.1.0",
124
- "eslint-config-xo": "^0.43.1",
125
- "eslint-config-xo-typescript": "^1.0.1",
126
- "eslint-import-resolver-typescript": "^3.6.1",
127
- "eslint-plugin-import": "^2.29.1",
128
- "eslint-plugin-prettier": "^5.1.3",
129
- "jest": "^29.7.0",
130
- "pkg-dir": "^8.0.0",
131
113
  "rimraf": "^5.0.5",
132
114
  "supertest": "^6.3.4",
133
- "ts-jest": "^29.1.1",
134
115
  "ts-node": "^10.9.2",
135
- "typescript": "^5.3.3"
116
+ "typescript": "^5.3.3",
117
+ "vitest": "^4.1.5"
136
118
  },
137
119
  "engines": {
138
- "node": ">=20"
120
+ "node": ">=22"
139
121
  },
140
122
  "ts-node": {
141
123
  "compilerOptions": {
142
124
  "module": "es2020"
143
125
  }
144
126
  },
145
- "gitHead": "03c3432540f82a9d81f05087d1ccc57b547e37a9"
146
- }
127
+ "gitHead": "dfbefe2c66877ed9411bdb242327e6915f58cf3e"
128
+ }
@@ -1,3 +1,4 @@
1
+ import { vi } from 'vitest';
1
2
  import fs from 'fs-extra';
2
3
  import path from 'path';
3
4
  import {
@@ -116,10 +117,10 @@ export const getRuntimeContext = (fixture: Partial<RuntimeContext> = {}): Runtim
116
117
 
117
118
  const hooks = new HookManager(result as RuntimeContext, result.config);
118
119
  const fileManager = new FileManager({ directory: '/testbase' });
119
- fileManager.cleanup = jest.fn();
120
- fileManager.initialize = jest.fn();
121
- fileManager.deleteFile = jest.fn();
122
- fileManager.writeFile = jest.fn();
120
+ fileManager.cleanup = vi.fn();
121
+ fileManager.initialize = vi.fn();
122
+ fileManager.deleteFile = vi.fn();
123
+ fileManager.writeFile = vi.fn();
123
124
 
124
125
  return { ...result, hooks, fileManager } as RuntimeContext;
125
126
  };
@@ -131,4 +132,4 @@ export const getTransformContext = (fixture: Partial<TransformContext> = {}): Tr
131
132
  assetMap: new Map(),
132
133
  entryMap: new Map(),
133
134
  ...fixture,
134
- }) as TransformContext;
135
+ }) as TransformContext;
package/src/cli.ts CHANGED
@@ -10,7 +10,7 @@ import { existsSync } from 'fs';
10
10
  import { outputFile } from 'fs-extra';
11
11
  import { readFile } from 'fs/promises';
12
12
  import path from 'path';
13
- import prettier from 'prettier';
13
+ import { format } from 'oxfmt';
14
14
  import { run } from './index.js';
15
15
  import { initializeCache } from './lib/cf-cache.js';
16
16
  import { ALL_PROMPTS, getConfig } from './lib/config.js';
@@ -77,7 +77,7 @@ program
77
77
  .option('--cwd <directory>', 'Working directory. Defaults to process.cwd()')
78
78
  .action(
79
79
  actionRunner(async (cmd: { typescript?: boolean; cwd?: string; config?: string }) => {
80
- const useTypescript = Boolean(cmd?.typescript ?? false);
80
+ const useTypescript = cmd?.typescript ?? false;
81
81
  const cwd = cmd?.cwd ?? process.cwd();
82
82
  const configFile = cmd?.config;
83
83
  const r = await getConfig(
@@ -93,7 +93,6 @@ program
93
93
 
94
94
  const filePath =
95
95
  configFile || path.join(cwd, `contentful-ssg.config.${useTypescript ? 'ts' : 'js'}`);
96
- const prettierOptions = await prettier.resolveConfig(filePath);
97
96
  if (config.directory?.startsWith('/')) {
98
97
  config.directory = path.relative(cwd, config.directory);
99
98
  }
@@ -140,19 +139,18 @@ program
140
139
 
141
140
  let content = '';
142
141
  if (useTypescript || filePath.endsWith('.ts')) {
143
- content = await prettier.format(
142
+ const result = await format(
143
+ 'contentful-ssg.config.ts',
144
144
  `import {Config} from '@jungvonmatt/contentful-ssg';
145
145
  export default <Config>${JSON.stringify(cleanedConfig)}`,
146
- {
147
- parser: 'typescript',
148
- ...prettierOptions,
149
- },
150
146
  );
147
+ content = result.code;
151
148
  } else if (filePath.endsWith('.js')) {
152
- content = await prettier.format(`module.exports = ${JSON.stringify(cleanedConfig)}`, {
153
- parser: 'babel',
154
- ...prettierOptions,
155
- });
149
+ const result = await format(
150
+ 'contentful-ssg.config.js',
151
+ `module.exports = ${JSON.stringify(cleanedConfig)}`,
152
+ );
153
+ content = result.code;
156
154
  }
157
155
 
158
156
  if (filePath.endsWith('.js') || filePath.endsWith('.ts')) {
@@ -277,7 +275,7 @@ program
277
275
  const poll = () => {
278
276
  setTimeout(
279
277
  () => {
280
- (async () => {
278
+ void (async () => {
281
279
  prev = await run({ ...config, sync: true }, prev);
282
280
  if (useCache) {
283
281
  await cache.setSyncState(prev);
@@ -35,4 +35,12 @@ describe('Converter', () => {
35
35
  const obj = parse(stringify(src, TYPE_MARKDOWN), TYPE_MARKDOWN);
36
36
  expect(obj).toMatchObject(src);
37
37
  });
38
+
39
+ test('stringify throws on unsupported format', () => {
40
+ expect(() => stringify(src, 'xml')).toThrowError(/not supported/);
41
+ });
42
+
43
+ test('parse throws on unsupported format', () => {
44
+ expect(() => parse('foo', 'xml')).toThrowError(/not supported/);
45
+ });
38
46
  });
package/src/index.test.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Mock, vi } from 'vitest';
1
2
  import chalk from 'chalk';
2
3
  import { run, cleanupPrevData } from './index.js';
3
4
  import { gracefulExit } from 'exit-hook';
@@ -5,56 +6,57 @@ import { write } from './tasks/write.js';
5
6
  import { Asset, Entry, RunResult, RuntimeContext } from './types.js';
6
7
  import { getContent } from './__test__/mock.js';
7
8
 
8
- const mockedGracefulExit = <jest.Mock<typeof gracefulExit>>gracefulExit;
9
+ const mockedGracefulExit = <Mock<typeof gracefulExit>>gracefulExit;
9
10
 
10
- jest.mock('./lib/contentful.js', () => {
11
- const originalModule = jest.requireActual('./lib/contentful.js');
11
+ vi.mock('./lib/contentful.js', async () => {
12
+ const originalModule =
13
+ await vi.importActual<typeof import('./lib/contentful.js')>('./lib/contentful.js');
12
14
  return {
13
15
  __esModule: true, // Use it when dealing with esModules
14
16
  ...originalModule,
15
- getContent: jest.fn().mockImplementation(async (context) => {
17
+ getContent: vi.fn().mockImplementation(async (context) => {
16
18
  const mocks = await import('./__test__/mock.js');
17
19
  return mocks.getContent();
18
20
  }),
19
21
  };
20
22
  });
21
23
 
22
- jest.mock('./lib/file-manager.js', () => ({
24
+ vi.mock('./lib/file-manager.js', () => ({
23
25
  FileManager: function () {
24
26
  return {
25
- initialize: jest.fn(),
26
- writeFile: jest.fn(),
27
- deleteFile: jest.fn(),
28
- cleanup: jest.fn(),
27
+ initialize: vi.fn(),
28
+ writeFile: vi.fn(),
29
+ deleteFile: vi.fn(),
30
+ cleanup: vi.fn(),
29
31
  count: 1,
30
32
  };
31
33
  },
32
34
  }));
33
35
 
34
- jest.mock('exit-hook', () => ({
35
- gracefulExit: jest.fn(),
36
+ vi.mock('exit-hook', () => ({
37
+ gracefulExit: vi.fn(),
36
38
  }));
37
39
 
38
40
  describe('Run', () => {
39
41
  test('main loop', async () => {
40
- console.log = jest.fn();
42
+ console.log = vi.fn();
41
43
 
42
44
  let fileManager;
43
45
  const hooks = {
44
- before: jest.fn().mockResolvedValue({}),
45
- after: jest.fn().mockResolvedValue({}),
46
- mapDirectory: jest.fn().mockImplementation((tc, rc, prev) => prev),
47
- mapFilename: jest.fn().mockImplementation((tc, rc, prev) => prev),
48
- mapMetaFields: jest.fn().mockImplementation((tc, rc, prev) => prev),
49
- mapAssetLink: jest.fn().mockImplementation((tc, rc, prev) => prev),
50
- mapEntryLink: jest.fn().mockImplementation((tc, rc, prev) => prev),
46
+ before: vi.fn().mockResolvedValue({}),
47
+ after: vi.fn().mockResolvedValue({}),
48
+ mapDirectory: vi.fn().mockImplementation((tc, rc, prev) => prev),
49
+ mapFilename: vi.fn().mockImplementation((tc, rc, prev) => prev),
50
+ mapMetaFields: vi.fn().mockImplementation((tc, rc, prev) => prev),
51
+ mapAssetLink: vi.fn().mockImplementation((tc, rc, prev) => prev),
52
+ mapEntryLink: vi.fn().mockImplementation((tc, rc, prev) => prev),
51
53
  };
52
54
 
53
55
  await run({
54
56
  directory: 'test',
55
57
  ...hooks,
56
58
  transform: (context) => {
57
- return { ...(context?.content ?? {}), test: [...(context?.content?.test ?? []), 'config'] };
59
+ return { ...context?.content, test: [...(context?.content?.test ?? []), 'config'] };
58
60
  },
59
61
  resolvedPlugins: [
60
62
  {
@@ -65,7 +67,7 @@ describe('Run', () => {
65
67
  {
66
68
  transform: (context) => {
67
69
  return {
68
- ...(context?.content ?? {}),
70
+ ...context?.content,
69
71
  test: [...(context?.content?.test ?? []), 'plugin'],
70
72
  };
71
73
  },
@@ -82,14 +84,14 @@ describe('Run', () => {
82
84
  expect(hooks.mapEntryLink).toHaveBeenCalled();
83
85
  expect(fileManager.writeFile).toHaveBeenCalledTimes(12);
84
86
 
85
- const output = ((console.log as jest.Mock)?.mock?.calls ?? []).flat().join('\n');
86
- const calls = (write as jest.Mock)?.mock?.calls ?? [];
87
+ const output = ((console.log as Mock)?.mock?.calls ?? []).flat().join('\n');
88
+ const calls = (write as Mock)?.mock?.calls ?? [];
87
89
  calls.forEach((call) => {
88
90
  expect(call?.[0]?.content).toMatchObject({ test: ['plugin', 'config'] });
89
91
  });
90
92
 
91
93
  expect(output).toMatch(
92
- `fieldTest: ${chalk.cyan(4)}(de) - ${chalk.cyan(4)}(en-US) - ${chalk.cyan(4)}(en-GB)`
94
+ `fieldTest: ${chalk.cyan(4)}(de) - ${chalk.cyan(4)}(en-US) - ${chalk.cyan(4)}(en-GB)`,
93
95
  );
94
96
  expect(output).toMatch(`Saved ${chalk.green(12)} entries`);
95
97
  expect(output).toMatch(`${chalk.cyan(0)} entries skipped due to validation issues`);
@@ -97,8 +99,8 @@ describe('Run', () => {
97
99
  });
98
100
 
99
101
  test('fails on exception before/after', async () => {
100
- console.log = jest.fn();
101
- const mockError = jest.fn().mockImplementation(() => {
102
+ console.log = vi.fn();
103
+ const mockError = vi.fn().mockImplementation(() => {
102
104
  throw new Error();
103
105
  });
104
106
 
@@ -118,7 +120,7 @@ describe('Run', () => {
118
120
  });
119
121
 
120
122
  test('fails on transform exception', async () => {
121
- console.log = jest.fn();
123
+ console.log = vi.fn();
122
124
 
123
125
  mockedGracefulExit.mockImplementation((number) => {
124
126
  throw new Error('process.exit: ' + number);
@@ -138,7 +140,7 @@ describe('Run', () => {
138
140
  });
139
141
 
140
142
  test('does not fail on transform exception with ignoreErrors option', async () => {
141
- console.log = jest.fn();
143
+ console.log = vi.fn();
142
144
 
143
145
  mockedGracefulExit.mockImplementation((number) => {
144
146
  throw new Error('process.exit: ' + number);
@@ -157,7 +159,7 @@ describe('Run', () => {
157
159
  });
158
160
 
159
161
  test('does not fail on transform exception in sync mode', async () => {
160
- console.log = jest.fn();
162
+ console.log = vi.fn();
161
163
  mockedGracefulExit.mockImplementation((number) => {
162
164
  throw new Error('process.exit: ' + number);
163
165
  });
package/src/index.ts CHANGED
@@ -160,7 +160,7 @@ export const run = async (
160
160
  async task(ctx) {
161
161
  const { locales = [], deletedEntries = [] } = ctx.data;
162
162
  const tasks = locales.map((locale) => ({
163
- title: `${locale.code}`,
163
+ title: locale.code,
164
164
  async task() {
165
165
  const data = ctx.localized.get(locale.code);
166
166
 
@@ -205,7 +205,7 @@ export const run = async (
205
205
  const { locales = [] } = ctx.data;
206
206
 
207
207
  const tasks = locales.map((locale) => ({
208
- title: `${locale.code}`,
208
+ title: locale.code,
209
209
  skip: (ctx: RuntimeContext) =>
210
210
  (ctx.localized?.get(locale.code)?.entryMap?.size ?? 0) +
211
211
  (ctx.localized?.get(locale.code)?.assetMap?.size ?? 0) ===
@@ -1,4 +1,3 @@
1
- /* eslint-env jest */
2
1
  import { mapAsync, reduceAsync, forEachAsync, filterAsync } from './array';
3
2
 
4
3
  const waitFor = async (ms) =>
@@ -70,7 +69,7 @@ test('async reduce (initial value)', async () => {
70
69
  const val = await Promise.resolve(`${i}!`);
71
70
  return str + val;
72
71
  },
73
- '0!'
72
+ '0!',
74
73
  );
75
74
 
76
75
  const results2 = await reduceAsync(
@@ -79,7 +78,7 @@ test('async reduce (initial value)', async () => {
79
78
  const val = `${i}!`;
80
79
  return `${typeof str === 'string' ? str : ''}${val}`;
81
80
  },
82
- '0!'
81
+ '0!',
83
82
  );
84
83
 
85
84
  expect(results).toEqual(expected);
package/src/lib/array.ts CHANGED
@@ -19,14 +19,8 @@ export async function mapAsync<T, U>(
19
19
  iterable: T[],
20
20
  callback: (value: T, index?: number, iterable?: T[]) => U | Promise<U>,
21
21
  ): Promise<U[]> {
22
- const result: U[] = [];
23
22
  const promises = iterable.map(async (item, index, array) => callback(item, index, array));
24
-
25
- for await (const mapped of promises) {
26
- result.push(mapped);
27
- }
28
-
29
- return result;
23
+ return Promise.all(promises);
30
24
  }
31
25
 
32
26
  /**
@@ -1,3 +1,4 @@
1
+ import { vi } from 'vitest';
1
2
  import { ReplaySubject } from 'rxjs';
2
3
  import { Asset, Config, Entry, Locale, ObservableContext, RunResult } from '../types.js';
3
4
  import { getContent } from '../__test__/mock.js';
@@ -12,7 +13,9 @@ const config = {
12
13
 
13
14
  const cache = initializeCache(config);
14
15
 
15
- jest.mock('find-cache-dir', () => jest.fn().mockImplementation(({ name }) => `CACHE-TEST/${name}`));
16
+ vi.mock('find-cache-dir', () => ({
17
+ default: vi.fn().mockImplementation(({ name }) => `CACHE-TEST/${name}`),
18
+ }));
16
19
 
17
20
  afterEach(async () => {
18
21
  await remove('CACHE-TEST');
package/src/lib/config.ts CHANGED
@@ -57,7 +57,7 @@ const resolvePlugin = async (
57
57
  }
58
58
 
59
59
  // Add named exports
60
- const pluginHooks: Hooks = { ...(pluginDefaultHooks || {}), ...(pluginModule || {}) };
60
+ const pluginHooks: Hooks = { ...pluginDefaultHooks, ...pluginModule };
61
61
 
62
62
  return pluginHooks;
63
63
  } catch (error: unknown) {
@@ -103,7 +103,7 @@ export const getConfig = async (
103
103
  prompt?: Array<Exclude<keyof Config, number | symbol>>;
104
104
  },
105
105
  ): Promise<ResolvedConfig<Config>> => {
106
- const { configFile, cwd, ...overrides } = args;
106
+ const { configFile: _configFile, cwd, ...overrides } = args;
107
107
  const required = options?.required ?? [];
108
108
  const prompt = options?.prompt ?? [];
109
109