@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 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
@@ -0,0 +1,2 @@
1
+ import { TransformerOptions, createTransformer } from "./transformer.js";
2
+ export { type TransformerOptions, createTransformer };
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_transformer = require("./transformer-HX3qL8TF.js");
3
+ exports.createTransformer = require_transformer.createTransformer;
@@ -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 };
@@ -0,0 +1,3 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_transformer = require("./transformer-HX3qL8TF.js");
3
+ exports.createTransformer = require_transformer.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.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
@@ -1,10 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- end_of_line = lf
5
- insert_final_newline = true
6
-
7
- [*.{js,json,yml}]
8
- charset = utf-8
9
- indent_style = space
10
- indent_size = 2
package/.gitattributes DELETED
@@ -1,4 +0,0 @@
1
- /.yarn/** linguist-vendored
2
- /.yarn/releases/* binary
3
- /.yarn/plugins/**/* binary
4
- /.pnp.* binary linguist-generated
package/README.md DELETED
@@ -1 +0,0 @@
1
- # rollipop-empty