@rollipop/jest-preset 0.0.0 → 1.0.0-alpha.22
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/CHANGELOG.md +29 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/transformer-HX3qL8TF.js +108 -0
- package/dist/transformer.d.ts +26 -0
- package/dist/transformer.js +3 -0
- package/jest-preset.js +30 -0
- package/package.json +58 -2
- package/.editorconfig +0 -10
- package/.gitattributes +0 -4
- package/README.md +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# @rollipop/jest-preset
|
|
2
|
+
|
|
3
|
+
## 1.0.0-alpha.22
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [3c67f3a]
|
|
8
|
+
- Updated dependencies [53630e0]
|
|
9
|
+
- Updated dependencies [6c2ae0d]
|
|
10
|
+
- Updated dependencies [1c059a4]
|
|
11
|
+
- Updated dependencies [758fe67]
|
|
12
|
+
- Updated dependencies [6c97ee3]
|
|
13
|
+
- rollipop@1.0.0-alpha.22
|
|
14
|
+
|
|
15
|
+
## 1.0.0-alpha.21
|
|
16
|
+
|
|
17
|
+
### Minor Changes
|
|
18
|
+
|
|
19
|
+
- e45aedd: Add `@rollipop/jest-preset` — a jest preset and transformer that runs your tests through rollipop's rust-side transform pipeline.
|
|
20
|
+
|
|
21
|
+
### Patch Changes
|
|
22
|
+
|
|
23
|
+
- Updated dependencies [e45aedd]
|
|
24
|
+
- Updated dependencies [9d18670]
|
|
25
|
+
- Updated dependencies [7934e0d]
|
|
26
|
+
- Updated dependencies [757756b]
|
|
27
|
+
- Updated dependencies [14c92f6]
|
|
28
|
+
- Updated dependencies [3e58d68]
|
|
29
|
+
- rollipop@1.0.0-alpha.21
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
10
|
+
key = keys[i];
|
|
11
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
12
|
+
get: ((k) => from[k]).bind(null, key),
|
|
13
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
+
value: mod,
|
|
20
|
+
enumerable: true
|
|
21
|
+
}) : target, mod));
|
|
22
|
+
//#endregion
|
|
23
|
+
let node_crypto = require("node:crypto");
|
|
24
|
+
let node_path = require("node:path");
|
|
25
|
+
node_path = __toESM(node_path);
|
|
26
|
+
let rollipop = require("rollipop");
|
|
27
|
+
//#region src/env.ts
|
|
28
|
+
function defineEnvFromObject(env) {
|
|
29
|
+
return Object.fromEntries(Object.entries(env).map(([key, value]) => [`import.meta.env.${key}`, asLiteral(value)]));
|
|
30
|
+
}
|
|
31
|
+
function asLiteral(value) {
|
|
32
|
+
return JSON.stringify(value);
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/transformer.ts
|
|
36
|
+
function resolveMode(mode = process.env.NODE_ENV) {
|
|
37
|
+
switch (mode) {
|
|
38
|
+
case "development":
|
|
39
|
+
case "production": return mode;
|
|
40
|
+
default: return "development";
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function packageVersion() {
|
|
44
|
+
try {
|
|
45
|
+
return require(node_path.default.join(__dirname, "..", "package.json")).version;
|
|
46
|
+
} catch {
|
|
47
|
+
return "unknown";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function createTransformer(options = {}) {
|
|
51
|
+
const mode = resolveMode(options.mode);
|
|
52
|
+
const env = (0, rollipop.loadEnv)({
|
|
53
|
+
envDir: options.root ?? process.cwd(),
|
|
54
|
+
envFile: options.envFile ?? rollipop.Constants.DEFAULT_ENV_FILE,
|
|
55
|
+
envPrefix: options.envPrefix ?? rollipop.Constants.DEFAULT_ENV_PREFIX,
|
|
56
|
+
mode
|
|
57
|
+
});
|
|
58
|
+
const pipeline = new rollipop.rolldownExperimental.RollipopReactNativeTransformer({
|
|
59
|
+
envName: mode,
|
|
60
|
+
runtimeTarget: options.runtimeTarget,
|
|
61
|
+
swc: {
|
|
62
|
+
globals: {
|
|
63
|
+
"import.meta.hot": "undefined",
|
|
64
|
+
"import.meta.env": JSON.stringify({}),
|
|
65
|
+
...defineEnvFromObject(env),
|
|
66
|
+
...defineEnvFromObject({ MODE: mode })
|
|
67
|
+
},
|
|
68
|
+
react: {
|
|
69
|
+
development: mode === "development",
|
|
70
|
+
runtime: "Automatic"
|
|
71
|
+
},
|
|
72
|
+
module: { type: "commonjs" }
|
|
73
|
+
},
|
|
74
|
+
flow: options.flow,
|
|
75
|
+
worklets: options.worklets
|
|
76
|
+
});
|
|
77
|
+
const optionsHash = (0, node_crypto.createHash)("sha1").update(JSON.stringify({
|
|
78
|
+
version: packageVersion(),
|
|
79
|
+
options
|
|
80
|
+
})).digest("hex").slice(0, 16);
|
|
81
|
+
return {
|
|
82
|
+
canInstrument: false,
|
|
83
|
+
process(sourceText, sourcePath) {
|
|
84
|
+
const result = pipeline.transformSync(sourcePath, sourceText);
|
|
85
|
+
return {
|
|
86
|
+
code: result.code,
|
|
87
|
+
...result.map != null ? { map: result.map } : null
|
|
88
|
+
};
|
|
89
|
+
},
|
|
90
|
+
async processAsync(sourceText, sourcePath) {
|
|
91
|
+
const result = await pipeline.transform(sourcePath, sourceText);
|
|
92
|
+
return {
|
|
93
|
+
code: result.code,
|
|
94
|
+
...result.map != null ? { map: result.map } : null
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
getCacheKey(sourceText, sourcePath) {
|
|
98
|
+
return (0, node_crypto.createHash)("sha1").update(optionsHash).update("\0").update(sourcePath).update("\0").update(sourceText).digest("hex");
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//#endregion
|
|
103
|
+
Object.defineProperty(exports, "createTransformer", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function() {
|
|
106
|
+
return createTransformer;
|
|
107
|
+
}
|
|
108
|
+
});
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { rolldownExperimental } from "rollipop";
|
|
2
|
+
|
|
3
|
+
//#region src/transformer.d.ts
|
|
4
|
+
interface TransformerOptions {
|
|
5
|
+
mode?: 'development' | 'production';
|
|
6
|
+
root?: string;
|
|
7
|
+
runtimeTarget?: rolldownExperimental.RollipopReactNativeRuntimeTarget;
|
|
8
|
+
flow?: rolldownExperimental.RollipopReactNativeFlowConfig;
|
|
9
|
+
worklets?: rolldownExperimental.RollipopReactNativeWorkletsConfig;
|
|
10
|
+
envDir?: string;
|
|
11
|
+
envFile?: string;
|
|
12
|
+
envPrefix?: string;
|
|
13
|
+
}
|
|
14
|
+
interface JestTransformOutput {
|
|
15
|
+
code: string;
|
|
16
|
+
map?: string;
|
|
17
|
+
}
|
|
18
|
+
interface JestSyncTransformer {
|
|
19
|
+
canInstrument: false;
|
|
20
|
+
process(sourceText: string, sourcePath: string): JestTransformOutput;
|
|
21
|
+
processAsync(sourceText: string, sourcePath: string): Promise<JestTransformOutput>;
|
|
22
|
+
getCacheKey(sourceText: string, sourcePath: string): string;
|
|
23
|
+
}
|
|
24
|
+
declare function createTransformer(options?: TransformerOptions): JestSyncTransformer;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { TransformerOptions, createTransformer };
|
package/jest-preset.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const path = require('node:path');
|
|
2
|
+
|
|
3
|
+
function loadBasePreset() {
|
|
4
|
+
let preset;
|
|
5
|
+
try {
|
|
6
|
+
preset = require('@react-native/jest-preset');
|
|
7
|
+
return { preset, setup: '@react-native/jest-preset/setup.js' };
|
|
8
|
+
} catch {}
|
|
9
|
+
try {
|
|
10
|
+
preset = require('react-native/jest-preset');
|
|
11
|
+
return { preset, setup: 'react-native/jest/setup.js' };
|
|
12
|
+
} catch {}
|
|
13
|
+
throw new Error(
|
|
14
|
+
'@rollipop/jest-preset: could not resolve a React Native jest preset. ' +
|
|
15
|
+
'Install either `@react-native/jest-preset` (RN >= 0.85) or `react-native` (RN <= 0.84).',
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const { preset, setup } = loadBasePreset();
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
...preset,
|
|
23
|
+
setupFiles: [setup],
|
|
24
|
+
transform: Object.fromEntries(
|
|
25
|
+
Object.entries(preset.transform ?? {}).map(([key, value]) =>
|
|
26
|
+
// Replace 'babel-jest' with our transformer.
|
|
27
|
+
value === 'babel-jest' ? [key, path.join(__dirname, 'dist', 'transformer.js')] : [key, value],
|
|
28
|
+
),
|
|
29
|
+
),
|
|
30
|
+
};
|
package/package.json
CHANGED
|
@@ -1,4 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rollipop/jest-preset",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
|
|
3
|
+
"version": "1.0.0-alpha.22",
|
|
4
|
+
"homepage": "https://github.com/leegeunhyeok/rollipop#readme",
|
|
5
|
+
"bugs": {
|
|
6
|
+
"url": "https://github.com/leegeunhyeok/rollipop/issues"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"author": "leegeunhyeok <dev.ghlee@gmail.com> (https://github.com/leegeunhyeok)",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/leegeunhyeok/rollipop.git",
|
|
13
|
+
"directory": "packages/jest-preset"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"jest-preset.js"
|
|
18
|
+
],
|
|
19
|
+
"main": "./dist/index.js",
|
|
20
|
+
"types": "./dist/index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": {
|
|
23
|
+
"types": "./dist/index.d.ts",
|
|
24
|
+
"default": "./dist/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./transformer": {
|
|
27
|
+
"types": "./dist/transformer.d.ts",
|
|
28
|
+
"default": "./dist/transformer.js"
|
|
29
|
+
},
|
|
30
|
+
"./jest-preset": "./jest-preset.js",
|
|
31
|
+
"./package.json": "./package.json"
|
|
32
|
+
},
|
|
33
|
+
"scripts": {
|
|
34
|
+
"prepack": "yarn build",
|
|
35
|
+
"typecheck": "tsc --noEmit",
|
|
36
|
+
"build": "vp pack"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"rollipop": "1.0.0-alpha.22",
|
|
40
|
+
"typescript": "6.0.3",
|
|
41
|
+
"vite-plus": "latest"
|
|
42
|
+
},
|
|
43
|
+
"peerDependencies": {
|
|
44
|
+
"@react-native/jest-preset": "*",
|
|
45
|
+
"react": "*",
|
|
46
|
+
"react-native": "*",
|
|
47
|
+
"rollipop": "1.0.0-alpha.22"
|
|
48
|
+
},
|
|
49
|
+
"peerDependenciesMeta": {
|
|
50
|
+
"@react-native/jest-preset": {
|
|
51
|
+
"optional": true
|
|
52
|
+
},
|
|
53
|
+
"react": {
|
|
54
|
+
"optional": true
|
|
55
|
+
},
|
|
56
|
+
"react-native": {
|
|
57
|
+
"optional": true
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
package/.editorconfig
DELETED
package/.gitattributes
DELETED
package/README.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# rollipop-empty
|