[feature] Add package to create cache key functions (#10587)

This commit is contained in:
Christoph Nakazawa 2020-10-05 17:15:12 +09:00 committed by GitHub
parent abf9f8d5e2
commit 82c74151d1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 148 additions and 0 deletions

View File

@ -0,0 +1 @@
[]

View File

@ -5,6 +5,7 @@
- `[jest-circus, jest-config, jest-runtime]` Add new `injectGlobals` config and CLI option to disable injecting global variables into the runtime ([#10484](https://github.com/facebook/jest/pull/10484))
- `[jest-each]` Fixes `.each` type to always be callable ([#10447](https://github.com/facebook/jest/pull/10447))
- `[jest-runner]` Add support for `moduleLoader`s with `default` exports ([#10541](https://github.com/facebook/jest/pull/10541))
- `[@jest/create-cache-key-function]` Added a new package for creating cache keys ([#10587](https://github.com/facebook/jest/pull/10587))
### Fixes

View File

@ -0,0 +1,5 @@
**/__mocks__/**
**/__tests__/**
src
tsconfig.json
tsconfig.tsbuildinfo

View File

@ -0,0 +1,22 @@
{
"name": "@jest/create-cache-key-function",
"version": "26.4.2",
"repository": {
"type": "git",
"url": "https://github.com/facebook/jest.git",
"directory": "packages/jest-create-cache-key-function"
},
"devDependencies": {
"@types/node": "*"
},
"engines": {
"node": ">= 10.14.2"
},
"license": "MIT",
"main": "build/index.js",
"types": "build/index.d.ts",
"publishConfig": {
"access": "public"
},
"gitHead": "170eee11d03b0ed5c60077982fdbc3bafd403638"
}

View File

@ -0,0 +1,42 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
let NODE_ENV: string;
let BABEL_ENV: string;
beforeEach(() => {
NODE_ENV = process.env.NODE_ENV;
process.env.NODE_ENV = 'test';
BABEL_ENV = process.env.BABEL_ENV;
process.env.BABEL_ENV = 'test';
});
afterEach(() => {
process.env.NODE_ENV = NODE_ENV;
process.env.BABEL_ENV = BABEL_ENV;
});
test('creation of a cache key', () => {
const createCacheKeyFunction = require('../index').default;
const createCacheKey = createCacheKeyFunction([], ['value']);
const hashA = createCacheKey('test', 'test.js', null, {
config: {},
instrument: false,
});
const hashB = createCacheKey('test code;', 'test.js', null, {
config: {},
instrument: false,
});
const hashC = createCacheKey('test', 'test.js', null, {
config: {},
instrument: true,
});
expect(hashA.length).toEqual(32);
expect(hashA).not.toEqual(hashB);
expect(hashA).not.toEqual(hashC);
});

View File

@ -0,0 +1,59 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import {createHash} from 'crypto';
import {relative} from 'path';
/* eslint-disable-next-line no-restricted-imports */
import {readFileSync} from 'fs';
import type {Config} from '@jest/types';
type CacheKeyOptions = {
config: Config.ProjectConfig;
instrument: boolean;
};
type GetCacheKeyFunction = (
fileData: string,
filePath: Config.Path,
configStr: string,
options: CacheKeyOptions,
) => string;
function getGlobalCacheKey(files: Array<string>, values: Array<string>) {
return [
process.env.NODE_ENV,
process.env.BABEL_ENV,
...values,
...files.map((file: string) => readFileSync(file)),
]
.reduce(
(hash, chunk) => hash.update('\0', 'utf8').update(chunk || ''),
createHash('md5'),
)
.digest('hex');
}
function getCacheKeyFunction(globalCacheKey: string): GetCacheKeyFunction {
return (src, file, _configString, options) => {
const {config, instrument} = options;
return createHash('md5')
.update(globalCacheKey)
.update('\0', 'utf8')
.update(src)
.update('\0', 'utf8')
.update(config.rootDir ? relative(config.rootDir, file) : '')
.update('\0', 'utf8')
.update(instrument ? 'instrument' : '')
.digest('hex');
};
}
export default (
files: Array<string> = [],
values: Array<string> = [],
): GetCacheKeyFunction => getCacheKeyFunction(getGlobalCacheKey(files, values));

View File

@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "src",
"outDir": "build"
},
"references": [
{"path": "../jest-types"}
]
}

View File

@ -1808,6 +1808,14 @@ __metadata:
languageName: unknown
linkType: soft
"@jest/create-cache-key-function@workspace:packages/jest-create-cache-key-function":
version: 0.0.0-use.local
resolution: "@jest/create-cache-key-function@workspace:packages/jest-create-cache-key-function"
dependencies:
"@types/node": "*"
languageName: unknown
linkType: soft
"@jest/environment@^26.3.0, @jest/environment@workspace:packages/jest-environment":
version: 0.0.0-use.local
resolution: "@jest/environment@workspace:packages/jest-environment"