├── .node-version
├── .npmrc
├── tests
├── fixture
│ ├── case_6
│ │ ├── input.js
│ │ └── output.js
│ ├── issue_55
│ │ ├── 1
│ │ │ ├── input.js
│ │ │ └── output.js
│ │ └── 2
│ │ │ ├── input.js
│ │ │ └── output.js
│ ├── issue_87
│ │ ├── input.js
│ │ └── output.js
│ ├── case_7
│ │ ├── input.js
│ │ └── output.js
│ ├── case_1
│ │ ├── input.js
│ │ └── output.js
│ ├── issue_133
│ │ ├── input.jsx
│ │ └── output.jsx
│ ├── case_2
│ │ ├── input.js
│ │ └── output.js
│ ├── case_4
│ │ ├── input.js
│ │ └── output.js
│ ├── case_3
│ │ ├── input.js
│ │ └── output.js
│ ├── case_11
│ │ ├── input.js
│ │ └── output.js
│ └── case_5
│ │ ├── input.js
│ │ └── output.js
└── test.rs
├── __test__
├── case_8
│ ├── nino.ts
│ ├── child.ts
│ ├── index.ts
│ ├── parent.ts
│ └── index.spec.ts
├── case_9
│ ├── nino.ts
│ ├── child.ts
│ ├── parent.ts
│ ├── index.ts
│ └── index.spec.ts
├── case_swc_9651
│ ├── index.ts
│ └── index.spec.ts
├── case_10
│ ├── children
│ │ ├── nino.ts
│ │ ├── index.ts
│ │ └── child.ts
│ ├── index.ts
│ ├── parent.ts
│ └── index.spec.ts
└── case_1
│ ├── index.js
│ └── index.spec.js
├── renovate.json
├── .taplo.toml
├── rust-toolchain.toml
├── .rustfmt.toml
├── jest.config.cjs
├── Cargo.toml
├── LICENSE
├── .github
└── workflows
│ ├── cron-latest.yml
│ ├── cron-nightly.yml
│ ├── test.yml
│ ├── swc-compat-test.yml
│ └── publish.yml
├── package.json
├── .gitignore
├── src
├── utils.rs
├── lib.rs
└── local_export_strip.rs
├── README.md
└── Cargo.lock
/.node-version:
--------------------------------------------------------------------------------
1 | 20.11.1
2 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | registry=https://registry.npmjs.org/
--------------------------------------------------------------------------------
/tests/fixture/case_6/input.js:
--------------------------------------------------------------------------------
1 | export default 42;
2 |
--------------------------------------------------------------------------------
/tests/fixture/issue_55/1/input.js:
--------------------------------------------------------------------------------
1 | export * from "./someModule";
2 |
--------------------------------------------------------------------------------
/tests/fixture/issue_87/input.js:
--------------------------------------------------------------------------------
1 | export { null } from "io-ts";
2 |
--------------------------------------------------------------------------------
/tests/fixture/case_7/input.js:
--------------------------------------------------------------------------------
1 | const foo = 42;
2 | export default foo;
3 |
--------------------------------------------------------------------------------
/__test__/case_8/nino.ts:
--------------------------------------------------------------------------------
1 | export const niño = () => console.log("¡Hola Mundo!");
2 |
--------------------------------------------------------------------------------
/__test__/case_9/nino.ts:
--------------------------------------------------------------------------------
1 | export const hola = () => console.log("¡Hola Mundo!");
2 |
--------------------------------------------------------------------------------
/__test__/case_swc_9651/index.ts:
--------------------------------------------------------------------------------
1 | export const enum TagType {
2 | tag = "tag",
3 | }
4 |
--------------------------------------------------------------------------------
/__test__/case_10/children/nino.ts:
--------------------------------------------------------------------------------
1 | export const niño = () => console.log("¡Hola Mundo!");
2 |
--------------------------------------------------------------------------------
/__test__/case_8/child.ts:
--------------------------------------------------------------------------------
1 | export const child = () => {
2 | console.log("Hello World!");
3 | };
4 |
--------------------------------------------------------------------------------
/__test__/case_9/child.ts:
--------------------------------------------------------------------------------
1 | export const hello = () => {
2 | console.log("Hello World!");
3 | };
4 |
--------------------------------------------------------------------------------
/__test__/case_10/children/index.ts:
--------------------------------------------------------------------------------
1 | export { child } from './child';
2 | export { niño } from './nino';
3 |
--------------------------------------------------------------------------------
/__test__/case_10/index.ts:
--------------------------------------------------------------------------------
1 | export * as children from './children';
2 | export { parent } from './parent';
3 |
--------------------------------------------------------------------------------
/__test__/case_10/children/child.ts:
--------------------------------------------------------------------------------
1 | export const child = () => {
2 | console.log("Hello World!");
3 | };
4 |
--------------------------------------------------------------------------------
/__test__/case_8/index.ts:
--------------------------------------------------------------------------------
1 | export { child } from './child';
2 | export { niño } from './nino';
3 | export { parent } from './parent';
4 |
--------------------------------------------------------------------------------
/__test__/case_8/parent.ts:
--------------------------------------------------------------------------------
1 | import { child, niño } from ".";
2 |
3 | export const parent = () => {
4 | child();
5 | niño();
6 | };
7 |
--------------------------------------------------------------------------------
/__test__/case_9/parent.ts:
--------------------------------------------------------------------------------
1 | import { child, niño } from ".";
2 |
3 | export const parent = () => {
4 | child();
5 | niño();
6 | };
7 |
--------------------------------------------------------------------------------
/__test__/case_10/parent.ts:
--------------------------------------------------------------------------------
1 | import { child, niño } from "./children";
2 |
3 | export const parent = () => {
4 | child();
5 | niño();
6 | };
7 |
--------------------------------------------------------------------------------
/renovate.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json",
3 | "extends": [
4 | "config:base"
5 | ]
6 | }
7 |
--------------------------------------------------------------------------------
/__test__/case_9/index.ts:
--------------------------------------------------------------------------------
1 | export { hello as child } from './child';
2 | export { hola as niño } from './nino';
3 | export { parent } from './parent';
4 |
--------------------------------------------------------------------------------
/tests/fixture/issue_55/2/input.js:
--------------------------------------------------------------------------------
1 | export * as mod from "./someModule";
2 | export * from "./someModule";
3 | export { foo, bar, baz } from "./someModule";
4 |
--------------------------------------------------------------------------------
/__test__/case_1/index.js:
--------------------------------------------------------------------------------
1 | export const child = () => {
2 | console.log("Hello World!");
3 | };
4 |
5 | export const callChild = () => {
6 | child();
7 | };
8 |
--------------------------------------------------------------------------------
/.taplo.toml:
--------------------------------------------------------------------------------
1 | # https://taplo.tamasfe.dev/configuration/formatter-options.html
2 | [formatting]
3 | align_entries = true
4 | indent_tables = true
5 | reorder_keys = true
6 |
--------------------------------------------------------------------------------
/rust-toolchain.toml:
--------------------------------------------------------------------------------
1 | [toolchain]
2 | channel = "1.81.0"
3 | components = ["rustfmt", "clippy"]
4 | profile = "minimal"
5 | targets = ["wasm32-unknown-unknown"]
6 |
--------------------------------------------------------------------------------
/tests/fixture/case_1/input.js:
--------------------------------------------------------------------------------
1 | export const child = () => {
2 | console.log("Hello World!");
3 | };
4 |
5 | export const callChild = () => {
6 | child();
7 | };
8 |
--------------------------------------------------------------------------------
/__test__/case_swc_9651/index.spec.ts:
--------------------------------------------------------------------------------
1 | import * as index from ".";
2 |
3 | describe("index", () => {
4 | it("enums should be transformed correctly", () => {
5 | expect(index.TagType.tag).toBe("tag");
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/tests/fixture/issue_133/input.jsx:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export const A = () => {
4 | return
real a
;
5 | };
6 |
7 | const B = () => {
8 | return ;
9 | };
10 |
11 | export default B;
12 |
--------------------------------------------------------------------------------
/tests/fixture/case_2/input.js:
--------------------------------------------------------------------------------
1 | import memoize from "p-memoize";
2 | import { getConfig } from "./config";
3 | export const getRedis = memoize(async () => {
4 | const config = await getConfig();
5 | return new Redis(config.redisUrl);
6 | });
7 |
--------------------------------------------------------------------------------
/tests/fixture/case_4/input.js:
--------------------------------------------------------------------------------
1 | export function foo() {
2 | foo = () => 1;
3 | foo.bar = () => 2;
4 | return 3;
5 | }
6 |
7 | export let bar = function () {
8 | bar = () => 1;
9 | bar.bar = () => bar();
10 | return 3;
11 | };
12 |
--------------------------------------------------------------------------------
/tests/fixture/case_3/input.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | export const App = () => {
4 | return React.createElement(
5 | "main",
6 | { className: "akari" },
7 | "Hello",
8 | "swc",
9 | "plugin"
10 | );
11 | };
12 |
--------------------------------------------------------------------------------
/tests/fixture/case_11/input.js:
--------------------------------------------------------------------------------
1 | import { foo } from "foo";
2 | export { foo, foofoo } from "foo";
3 |
4 | import { bar } from "bar";
5 | export { "b-a-r" as bar } from "bar";
6 |
7 | export { "x-1" as "y-1" } from "baz";
8 |
9 | export * as ns from "ns";
10 |
--------------------------------------------------------------------------------
/__test__/case_1/index.spec.js:
--------------------------------------------------------------------------------
1 | import * as index from ".";
2 |
3 | describe("index", () => {
4 | it("called", () => {
5 | const spiedChild = jest.spyOn(index, "child");
6 | index.callChild();
7 |
8 | expect(spiedChild).toHaveBeenCalled();
9 | });
10 | });
11 |
--------------------------------------------------------------------------------
/tests/fixture/case_6/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "default", {
3 | enumerable: true,
4 | get () {
5 | return _default;
6 | },
7 | set (v) {
8 | _default = v;
9 | },
10 | configurable: true
11 | });
12 | const _default = 42;
13 |
--------------------------------------------------------------------------------
/tests/fixture/case_5/input.js:
--------------------------------------------------------------------------------
1 | export let a = function () {};
2 |
3 | export function b() {}
4 |
5 | export class c {}
6 |
7 | a();
8 | b();
9 | new c();
10 |
11 | let _ = {
12 | a,
13 | b,
14 | c,
15 | };
16 |
17 | a = function () {};
18 | b = function () {};
19 |
20 | a``;
21 | b``;
22 |
--------------------------------------------------------------------------------
/tests/fixture/issue_87/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "null", {
3 | enumerable: true,
4 | get () {
5 | return _null;
6 | },
7 | set (v) {
8 | _null = v;
9 | },
10 | configurable: true
11 | });
12 | import { null as _null } from "io-ts";
13 |
--------------------------------------------------------------------------------
/.rustfmt.toml:
--------------------------------------------------------------------------------
1 | edition = "2021"
2 | format_strings = true
3 | group_imports = "StdExternalCrate"
4 | hex_literal_case = "Lower"
5 | imports_granularity = "Crate"
6 | reorder_impl_items = true
7 | use_field_init_shorthand = true
8 | wrap_comments = true
9 |
--------------------------------------------------------------------------------
/tests/fixture/case_7/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "default", {
3 | enumerable: true,
4 | get () {
5 | return _default;
6 | },
7 | set (v) {
8 | _default = v;
9 | },
10 | configurable: true
11 | });
12 | const foo = 42;
13 | const _default = foo;
14 |
--------------------------------------------------------------------------------
/__test__/case_8/index.spec.ts:
--------------------------------------------------------------------------------
1 | import * as index from ".";
2 | import { parent } from "./parent";
3 |
4 | describe("index", () => {
5 | beforeEach(() => {
6 | jest.spyOn(index, "child");
7 | jest.spyOn(index, "niño");
8 | })
9 |
10 | it("called", () => {
11 | parent();
12 |
13 | expect(index.child).toHaveBeenCalled();
14 | expect(index.niño).toHaveBeenCalled();
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/__test__/case_9/index.spec.ts:
--------------------------------------------------------------------------------
1 | import * as index from ".";
2 | import { parent } from "./parent";
3 |
4 | describe("index", () => {
5 | beforeEach(() => {
6 | jest.spyOn(index, "child");
7 | jest.spyOn(index, "niño");
8 | })
9 |
10 | it("called", () => {
11 | parent();
12 |
13 | expect(index.child).toHaveBeenCalled();
14 | expect(index.niño).toHaveBeenCalled();
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/tests/fixture/case_3/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "App", {
3 | enumerable: true,
4 | get () {
5 | return App;
6 | },
7 | set (v) {
8 | App = v;
9 | },
10 | configurable: true
11 | });
12 | import React from "react";
13 | const App = ()=>{
14 | return React.createElement("main", {
15 | className: "akari"
16 | }, "Hello", "swc", "plugin");
17 | };
18 |
--------------------------------------------------------------------------------
/__test__/case_10/index.spec.ts:
--------------------------------------------------------------------------------
1 | import * as index from ".";
2 | import { parent } from "./parent";
3 |
4 | describe("index", () => {
5 | beforeEach(() => {
6 | jest.spyOn(index.children, "child");
7 | jest.spyOn(index.children, "niño");
8 | })
9 |
10 | it("called", () => {
11 | parent();
12 |
13 | expect(index.children.child).toHaveBeenCalled();
14 | expect(index.children.niño).toHaveBeenCalled();
15 | });
16 | });
17 |
--------------------------------------------------------------------------------
/tests/fixture/issue_55/1/output.js:
--------------------------------------------------------------------------------
1 | Object.keys(mod).forEach(function(key) {
2 | if (key === "default" || key === "__esModule") return;
3 | if (Object.prototype.hasOwnProperty.call(exports, key)) return;
4 | Object.defineProperty(exports, key, {
5 | enumerable: true,
6 | get: function() {
7 | return mod[key];
8 | },
9 | configurable: true
10 | });
11 | });
12 | import * as mod from "./someModule";
13 |
--------------------------------------------------------------------------------
/tests/fixture/case_2/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "getRedis", {
3 | enumerable: true,
4 | get () {
5 | return getRedis;
6 | },
7 | set (v) {
8 | getRedis = v;
9 | },
10 | configurable: true
11 | });
12 | import memoize from "p-memoize";
13 | import { getConfig } from "./config";
14 | const getRedis = memoize(async ()=>{
15 | const config = await getConfig();
16 | return new Redis(config.redisUrl);
17 | });
18 |
--------------------------------------------------------------------------------
/tests/fixture/case_1/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "callChild", {
3 | enumerable: true,
4 | get () {
5 | return callChild;
6 | },
7 | set (v) {
8 | callChild = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "child", {
13 | enumerable: true,
14 | get () {
15 | return child;
16 | },
17 | set (v) {
18 | child = v;
19 | },
20 | configurable: true
21 | });
22 | const child = ()=>{
23 | console.log("Hello World!");
24 | };
25 | const callChild = ()=>{
26 | (0, exports.child)();
27 | };
28 |
--------------------------------------------------------------------------------
/tests/fixture/issue_133/output.jsx:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "A", {
3 | enumerable: true,
4 | get () {
5 | return A;
6 | },
7 | set (v) {
8 | A = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "default", {
13 | enumerable: true,
14 | get () {
15 | return _default;
16 | },
17 | set (v) {
18 | _default = v;
19 | },
20 | configurable: true
21 | });
22 | import React from "react";
23 | const A = ()=>{
24 | return real a
;
25 | };
26 | const B = ()=>{
27 | return ;
28 | };
29 | const _default = B;
30 |
--------------------------------------------------------------------------------
/tests/fixture/case_4/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "bar", {
3 | enumerable: true,
4 | get () {
5 | return bar;
6 | },
7 | set (v) {
8 | bar = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "foo", {
13 | enumerable: true,
14 | get () {
15 | return foo;
16 | },
17 | set (v) {
18 | foo = v;
19 | },
20 | configurable: true
21 | });
22 | function foo() {
23 | foo = ()=>1;
24 | foo.bar = ()=>2;
25 | return 3;
26 | }
27 | let bar = function() {
28 | bar = ()=>1;
29 | exports.bar.bar = ()=>(0, exports.bar)();
30 | return 3;
31 | };
32 |
--------------------------------------------------------------------------------
/jest.config.cjs:
--------------------------------------------------------------------------------
1 | const path = require("node:path");
2 |
3 | const isDev = process.env.WASM_ENV !== "release";
4 |
5 | const plugin = isDev
6 | ? path.resolve(
7 | "./target/wasm32-unknown-unknown/debug/swc_mut_cjs_exports.wasm",
8 | )
9 | : path.resolve(
10 | "./target/wasm32-unknown-unknown/release/swc_mut_cjs_exports.wasm",
11 | );
12 |
13 | module.exports = {
14 | transform: {
15 | "^.+\\.(t|j)sx?$": [
16 | "@swc/jest",
17 | {
18 | jsc: {
19 | experimental: {
20 | plugins: [[plugin, {}]],
21 | },
22 | },
23 | module: {
24 | type: "commonjs",
25 | },
26 | },
27 | ],
28 | },
29 | };
30 |
--------------------------------------------------------------------------------
/tests/fixture/case_5/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "a", {
3 | enumerable: true,
4 | get () {
5 | return a;
6 | },
7 | set (v) {
8 | a = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "b", {
13 | enumerable: true,
14 | get () {
15 | return b;
16 | },
17 | set (v) {
18 | b = v;
19 | },
20 | configurable: true
21 | });
22 | Object.defineProperty(exports, "c", {
23 | enumerable: true,
24 | get () {
25 | return c;
26 | },
27 | set (v) {
28 | c = v;
29 | },
30 | configurable: true
31 | });
32 | let a = function() {};
33 | function b() {}
34 | class c {
35 | }
36 | (0, exports.a)();
37 | b();
38 | new c();
39 | let _ = {
40 | a: exports.a,
41 | b,
42 | c
43 | };
44 | a = function() {};
45 | b = function() {};
46 | (0, exports.a)``;
47 | b``;
48 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | authors = ["magic-akari "]
3 | description = "[SWC plugin] mutable CJS exports"
4 | edition = "2021"
5 | homepage = "https://github.com/magic-akari/swc_mut_cjs_exports"
6 | keywords = ["swc-plugin", "swc", "jest", "cjs", "commonjs"]
7 | license = "MIT"
8 | name = "swc_mut_cjs_exports"
9 | readme = "README.md"
10 | repository = "https://github.com/magic-akari/swc_mut_cjs_exports"
11 | version = "10.7.0"
12 |
13 | [lib]
14 | crate-type = ["cdylib", "lib"]
15 |
16 | [dependencies]
17 | rustc-hash = "2.1.1"
18 | swc_core = { version = "10.7.0", features = [
19 | "ecma_ast",
20 | "ecma_visit",
21 | "swc_plugin",
22 | "ecma_utils",
23 | "swc_atoms",
24 | "ecma_plugin_transform",
25 | ] }
26 |
27 |
28 | [dev-dependencies]
29 | swc_core = { version = "10.7.0", features = [
30 | "testing_transform",
31 | "ecma_parser",
32 | ] }
33 | testing = "4.0.0"
34 |
35 | [profile.release]
36 | codegen-units = 1
37 | opt-level = "s"
38 | strip = "debuginfo"
39 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) magic-akari
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/.github/workflows/cron-latest.yml:
--------------------------------------------------------------------------------
1 | name: with @swc/core@latest
2 |
3 | on:
4 | schedule:
5 | - cron: "0 18 * * 1,3,5"
6 |
7 | env:
8 | CARGO_INCREMENTAL: 0
9 | RUST_LOG: "debug"
10 | DIFF: 0
11 | RUST_MIN_STACK: 4194304
12 | NODE_ENV: "development"
13 | CARGO_TERM_COLOR: always
14 |
15 | jobs:
16 | node-test-latest:
17 | name: "@swc/core@latest test"
18 | runs-on: macos-latest
19 | steps:
20 | - uses: actions/checkout@v4
21 |
22 | - uses: actions/setup-node@v4
23 | with:
24 | node-version-file: ".node-version"
25 | - uses: pnpm/action-setup@v2
26 |
27 | - name: Get pnpm store directory
28 | shell: bash
29 | run: |
30 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
31 |
32 | - uses: actions/cache@v4
33 | name: Setup pnpm cache
34 | with:
35 | path: ${{ env.STORE_PATH }}
36 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
37 | restore-keys: |
38 | ${{ runner.os }}-pnpm-store-
39 |
40 | - run: pnpm add -D --ignore-scripts @swc/core@latest @swc/jest@latest
41 | - run: pnpm build
42 | - run: pnpm test
43 |
--------------------------------------------------------------------------------
/.github/workflows/cron-nightly.yml:
--------------------------------------------------------------------------------
1 | name: with @swc/core@nightly
2 |
3 | on:
4 | schedule:
5 | - cron: "0 18 * * *"
6 |
7 | env:
8 | CARGO_INCREMENTAL: 0
9 | RUST_LOG: "debug"
10 | DIFF: 0
11 | RUST_MIN_STACK: 4194304
12 | NODE_ENV: "development"
13 | CARGO_TERM_COLOR: always
14 |
15 | jobs:
16 | node-test-nightly:
17 | name: "@swc/core@nightly test"
18 | runs-on: macos-latest
19 | steps:
20 | - uses: actions/checkout@v4
21 |
22 | - uses: actions/setup-node@v4
23 | with:
24 | node-version-file: ".node-version"
25 | - uses: pnpm/action-setup@v2
26 |
27 | - name: Get pnpm store directory
28 | shell: bash
29 | run: |
30 | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
31 |
32 | - uses: actions/cache@v4
33 | name: Setup pnpm cache
34 | with:
35 | path: ${{ env.STORE_PATH }}
36 | key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
37 | restore-keys: |
38 | ${{ runner.os }}-pnpm-store-
39 |
40 | - run: pnpm add -D --ignore-scripts @swc/core@nightly @swc/jest@latest
41 | - run: pnpm build
42 | - run: pnpm test
43 |
--------------------------------------------------------------------------------
/tests/test.rs:
--------------------------------------------------------------------------------
1 | use std::path::PathBuf;
2 | use swc_core::{
3 | common::Mark,
4 | ecma::{
5 | ast::Pass,
6 | parser::{EsSyntax, Syntax},
7 | transforms::{
8 | base::resolver,
9 | testing::{test, test_fixture},
10 | },
11 | visit::visit_mut_pass,
12 | },
13 | };
14 | use swc_mut_cjs_exports::TransformVisitor;
15 |
16 | fn tr() -> impl Pass {
17 | let unresolved_mark = Mark::new();
18 | let top_level_mark = Mark::new();
19 |
20 | (
21 | resolver(unresolved_mark, top_level_mark, false),
22 | visit_mut_pass(TransformVisitor::new(unresolved_mark)),
23 | )
24 | }
25 |
26 | #[testing::fixture("tests/fixture/**/input.js")]
27 | #[testing::fixture("tests/fixture/**/input.jsx")]
28 | fn test(input: PathBuf) {
29 | let dir = input.parent().unwrap().to_path_buf();
30 | let jsx = input.extension().unwrap() == "jsx";
31 | let output = if jsx {
32 | dir.join("output.jsx")
33 | } else {
34 | dir.join("output.js")
35 | };
36 |
37 | test_fixture(
38 | Syntax::Es(EsSyntax {
39 | jsx,
40 | ..Default::default()
41 | }),
42 | &|_| tr(),
43 | &input,
44 | &output,
45 | Default::default(),
46 | );
47 | }
48 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 |
3 | on:
4 | push:
5 | branches:
6 | - "*"
7 | pull_request:
8 | types: ["opened", "reopened", "synchronize"]
9 |
10 | env:
11 | CARGO_INCREMENTAL: 0
12 | RUST_LOG: "debug"
13 | DIFF: 0
14 | RUST_MIN_STACK: 4194304
15 | CARGO_TERM_COLOR: always
16 |
17 | jobs:
18 | cargo-fmt:
19 | name: Cargo fmt
20 | runs-on: macos-latest
21 | steps:
22 | - uses: actions/checkout@v4
23 | - run: cargo fmt -- --check
24 |
25 | cargo-clippy:
26 | name: Cargo clippy
27 | runs-on: macos-latest
28 | steps:
29 | - uses: actions/checkout@v4
30 | - run: cargo clippy
31 |
32 | cargo-test:
33 | name: Cargo test
34 | runs-on: macos-latest
35 | steps:
36 | - uses: actions/checkout@v4
37 |
38 | - run: cargo check --all-targets
39 | - run: cargo test
40 |
41 | swc-test:
42 | name: SWC test
43 | runs-on: macos-latest
44 | steps:
45 | - uses: actions/checkout@v4
46 |
47 | - uses: actions/setup-node@v4
48 | with:
49 | node-version-file: ".node-version"
50 |
51 | - uses: pnpm/action-setup@v2
52 | with:
53 | run_install: |
54 | - args: [--frozen-lockfile, --strict-peer-dependencies]
55 |
56 | - run: pnpm build
57 | - run: pnpm test
58 |
--------------------------------------------------------------------------------
/tests/fixture/case_11/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "bar", {
3 | enumerable: true,
4 | get () {
5 | return bar1;
6 | },
7 | set (v) {
8 | bar1 = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "foo", {
13 | enumerable: true,
14 | get () {
15 | return foo1;
16 | },
17 | set (v) {
18 | foo1 = v;
19 | },
20 | configurable: true
21 | });
22 | Object.defineProperty(exports, "foofoo", {
23 | enumerable: true,
24 | get () {
25 | return foofoo;
26 | },
27 | set (v) {
28 | foofoo = v;
29 | },
30 | configurable: true
31 | });
32 | Object.defineProperty(exports, "ns", {
33 | enumerable: true,
34 | get () {
35 | return ns;
36 | },
37 | set (v) {
38 | ns = v;
39 | },
40 | configurable: true
41 | });
42 | Object.defineProperty(exports, "y-1", {
43 | enumerable: true,
44 | get () {
45 | return x1;
46 | },
47 | set (v) {
48 | x1 = v;
49 | },
50 | configurable: true
51 | });
52 | import { foo } from "foo";
53 | import { foo as foo1, foofoo as foofoo } from "foo";
54 | import { bar } from "bar";
55 | import { "b-a-r" as bar1 } from "bar";
56 | import { "x-1" as x1 } from "baz";
57 | import * as ns from "ns";
58 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "swc_mut_cjs_exports",
3 | "version": "10.7.0",
4 | "description": "[SWC plugin] mutable CJS exports",
5 | "author": "magic-akari ",
6 | "license": "MIT",
7 | "keywords": [
8 | "swc-plugin",
9 | "swc",
10 | "jest",
11 | "cjs",
12 | "commonjs"
13 | ],
14 | "scripts": {
15 | "build": "cargo build --target wasm32-unknown-unknown",
16 | "test": "jest",
17 | "prepack": "cp -rf target/wasm32-unknown-unknown/release/swc_mut_cjs_exports.wasm ."
18 | },
19 | "packageManager": "pnpm@8.15.5",
20 | "main": "swc_mut_cjs_exports.wasm",
21 | "files": [
22 | "src",
23 | "swc_mut_cjs_exports.wasm"
24 | ],
25 | "homepage": "https://github.com/magic-akari/swc_mut_cjs_exports#readme",
26 | "repository": {
27 | "type": "git",
28 | "url": "git+https://github.com/magic-akari/swc_mut_cjs_exports.git"
29 | },
30 | "bugs": {
31 | "url": "https://github.com/magic-akari/swc_mut_cjs_exports/issues"
32 | },
33 | "devDependencies": {
34 | "@swc/core": "^1.10.0",
35 | "@swc/jest": "^0.2.37",
36 | "@types/jest": "^29.5.11",
37 | "jest": "^29.7.0"
38 | },
39 | "peerDependencies": {
40 | "@swc/core": "^1.10.0",
41 | "@swc/jest": "^0.2.37"
42 | }
43 | }
--------------------------------------------------------------------------------
/tests/fixture/issue_55/2/output.js:
--------------------------------------------------------------------------------
1 | export { };
2 | Object.defineProperty(exports, "bar", {
3 | enumerable: true,
4 | get () {
5 | return bar;
6 | },
7 | set (v) {
8 | bar = v;
9 | },
10 | configurable: true
11 | });
12 | Object.defineProperty(exports, "baz", {
13 | enumerable: true,
14 | get () {
15 | return baz;
16 | },
17 | set (v) {
18 | baz = v;
19 | },
20 | configurable: true
21 | });
22 | Object.defineProperty(exports, "foo", {
23 | enumerable: true,
24 | get () {
25 | return foo;
26 | },
27 | set (v) {
28 | foo = v;
29 | },
30 | configurable: true
31 | });
32 | Object.defineProperty(exports, "mod", {
33 | enumerable: true,
34 | get () {
35 | return mod;
36 | },
37 | set (v) {
38 | mod = v;
39 | },
40 | configurable: true
41 | });
42 | Object.keys(mod1).forEach(function(key) {
43 | if (key === "default" || key === "__esModule") return;
44 | if (Object.prototype.hasOwnProperty.call(exports, key)) return;
45 | Object.defineProperty(exports, key, {
46 | enumerable: true,
47 | get: function() {
48 | return mod1[key];
49 | },
50 | configurable: true
51 | });
52 | });
53 | import * as mod from "./someModule";
54 | import * as mod1 from "./someModule";
55 | import { foo as foo, bar as bar, baz as baz } from "./someModule";
56 |
--------------------------------------------------------------------------------
/.github/workflows/swc-compat-test.yml:
--------------------------------------------------------------------------------
1 | name: SWC Compat Test
2 |
3 | on:
4 | push:
5 | branches:
6 | - "*"
7 | pull_request:
8 | types: ["opened", "reopened", "synchronize"]
9 |
10 | env:
11 | CARGO_INCREMENTAL: 0
12 | RUST_LOG: "debug"
13 | DIFF: 0
14 | RUST_MIN_STACK: 4194304
15 | CARGO_TERM_COLOR: always
16 |
17 | jobs:
18 | wasm-build:
19 | runs-on: macos-latest
20 | steps:
21 | - uses: actions/checkout@v4
22 | - uses: pnpm/action-setup@v2
23 | - run: pnpm build
24 |
25 | - name: Upload Binary
26 | uses: actions/upload-artifact@v4
27 | with:
28 | if-no-files-found: error
29 | name: wasm
30 | path: |
31 | target/*/debug/*.wasm
32 |
33 | test:
34 | name: Test with ${{ matrix.swc_package }}
35 | runs-on: macos-latest
36 | needs: wasm-build
37 | strategy:
38 | fail-fast: false
39 | matrix:
40 | swc_package:
41 | - "@swc/core@1.10.0"
42 | - "@swc/core@1.11.5"
43 | - "@swc/core@1.11.9"
44 | - "@swc/core@1.11.13"
45 | - "@swc/core@latest"
46 | steps:
47 | - uses: actions/checkout@v4
48 |
49 | - uses: actions/setup-node@v4
50 | with:
51 | node-version-file: ".node-version"
52 |
53 | - uses: pnpm/action-setup@v2
54 | with:
55 | run_install: |
56 | - args: [--frozen-lockfile, --strict-peer-dependencies]
57 |
58 | - run: pnpm add -D --ignore-scripts ${{ matrix.swc_package }}
59 |
60 | - uses: actions/download-artifact@v4
61 | with:
62 | name: wasm
63 | path: target/
64 |
65 | - run: pnpm test
66 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish
2 |
3 | on:
4 | push:
5 | tags:
6 | - "v*"
7 |
8 | env:
9 | CARGO_INCREMENTAL: 0
10 | CARGO_PROFILE_RELEASE_LTO: "fat"
11 | CARGO_TERM_COLOR: always
12 |
13 | jobs:
14 | cargo-publish:
15 | if: startsWith(github.ref, 'refs/tags/v')
16 | runs-on: macos-latest
17 | steps:
18 | - uses: actions/checkout@v4
19 |
20 | - name: Pre-Release
21 | run: cargo publish --dry-run
22 |
23 | - name: Github Release
24 | uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564
25 | with:
26 | files: |
27 | target/package/swc_mut_cjs_exports-*.crate
28 |
29 | - name: publish crates
30 | run: cargo publish --token ${CRATES_TOKEN}
31 | env:
32 | CRATES_TOKEN: ${{ secrets.CRATES_TOKEN }}
33 |
34 | npm-publish:
35 | if: startsWith(github.ref, 'refs/tags/v')
36 | runs-on: macos-latest
37 | steps:
38 | - uses: actions/checkout@v4
39 |
40 | - uses: actions/setup-node@v4
41 | with:
42 | node-version-file: ".node-version"
43 | registry-url: "https://registry.npmjs.org"
44 |
45 | - uses: pnpm/action-setup@v2
46 | with:
47 | run_install: |
48 | - recursive: false
49 | args: [--ignore-scripts, --frozen-lockfile]
50 |
51 | - run: pnpm build --release
52 | - run: pnpm test
53 | env:
54 | WASM_ENV: release
55 | - run: pnpm pack
56 |
57 | - name: Github Release
58 | uses: softprops/action-gh-release@9d7c94cfd0a1f3ed45544c887983e9fa900f0564
59 | with:
60 | files: |
61 | target/wasm32-unknown-unknown/release/swc_mut_cjs_exports.wasm
62 | swc_mut_cjs_exports-*.tgz
63 |
64 | - name: NPM Release
65 | run: npm publish
66 | env:
67 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
68 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | jspm_packages/
43 |
44 | # TypeScript v1 declaration files
45 | typings/
46 |
47 | # TypeScript cache
48 | *.tsbuildinfo
49 |
50 | # Optional npm cache directory
51 | .npm
52 |
53 | # Optional eslint cache
54 | .eslintcache
55 |
56 | # Microbundle cache
57 | .rpt2_cache/
58 | .rts2_cache_cjs/
59 | .rts2_cache_es/
60 | .rts2_cache_umd/
61 |
62 | # Optional REPL history
63 | .node_repl_history
64 |
65 | # Output of 'npm pack'
66 | *.tgz
67 |
68 | # Yarn Integrity file
69 | .yarn-integrity
70 |
71 | # dotenv environment variables file
72 | .env
73 | .env.test
74 |
75 | # parcel-bundler cache (https://parceljs.org/)
76 | .cache
77 |
78 | # Next.js build output
79 | .next
80 |
81 | # Nuxt.js build / generate output
82 | .nuxt
83 | dist
84 |
85 | # Gatsby files
86 | .cache/
87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
88 | # https://nextjs.org/blog/next-9-1#public-directory-support
89 | # public
90 |
91 | # vuepress build output
92 | .vuepress/dist
93 |
94 | # Serverless directories
95 | .serverless/
96 |
97 | # FuseBox cache
98 | .fusebox/
99 |
100 | # DynamoDB Local files
101 | .dynamodb/
102 |
103 | # TernJS port file
104 | .tern-port
105 |
106 | .DS_Store
107 |
108 | /target
109 | ^target/
110 | target
111 | .swc
112 | *.wasm
--------------------------------------------------------------------------------
/src/utils.rs:
--------------------------------------------------------------------------------
1 | use swc_core::{
2 | atoms::Atom,
3 | common::{Span, DUMMY_SP},
4 | ecma::{
5 | ast::*,
6 | utils::{member_expr, private_ident, quote_ident, quote_str, ExprFactory},
7 | },
8 | };
9 |
10 | use crate::local_export_strip::Export;
11 |
12 | /// ```javascript
13 | /// {
14 | /// get() { return ident; }
15 | /// }
16 | /// ```
17 | pub(crate) fn prop_method_getter(ident: Ident) -> Prop {
18 | let key = quote_ident!("get").into();
19 |
20 | MethodProp {
21 | key,
22 | function: ident.into_lazy_fn(Default::default()).into(),
23 | }
24 | .into()
25 | }
26 |
27 | /// ```javascript
28 | /// {
29 | /// set(v) { ident = v; }
30 | /// }
31 | /// ```
32 | pub(crate) fn prop_method_setter(ident: Ident) -> Prop {
33 | let key = quote_ident!("set").into();
34 |
35 | let setter_param = private_ident!("v");
36 | let params = vec![setter_param.clone().into()];
37 |
38 | let body = BlockStmt {
39 | stmts: vec![setter_param
40 | .make_assign_to(op!("="), ident.clone().into())
41 | .into_stmt()],
42 | ..Default::default()
43 | };
44 |
45 | MethodProp {
46 | key,
47 | function: Function {
48 | params,
49 | body: Some(body),
50 | ..Default::default()
51 | }
52 | .into(),
53 | }
54 | .into()
55 | }
56 |
57 | /// Creates
58 | ///
59 | ///```js
60 | ///
61 | /// Object.defineProperty(target, prop_name, {
62 | /// ...props
63 | /// });
64 | /// ```
65 | pub(super) fn object_define_property(
66 | target: ExprOrSpread,
67 | prop_name: ExprOrSpread,
68 | descriptor: ExprOrSpread,
69 | ) -> Expr {
70 | member_expr!(Default::default(), DUMMY_SP, Object.defineProperty)
71 | .as_call(DUMMY_SP, vec![target, prop_name, descriptor])
72 | }
73 |
74 | pub(crate) fn object_define_enumerable_configurable(
75 | target: ExprOrSpread,
76 | prop_name: ExprOrSpread,
77 | getter: PropOrSpread,
78 | setter: PropOrSpread,
79 | ) -> Expr {
80 | object_define_property(
81 | target,
82 | prop_name,
83 | ObjectLit {
84 | span: DUMMY_SP,
85 | props: vec![
86 | PropOrSpread::Prop(Box::new(
87 | KeyValueProp {
88 | key: quote_ident!("enumerable").into(),
89 | value: Box::new(true.into()),
90 | }
91 | .into(),
92 | )),
93 | getter,
94 | setter,
95 | PropOrSpread::Prop(Box::new(
96 | KeyValueProp {
97 | key: quote_ident!("configurable").into(),
98 | value: Box::new(true.into()),
99 | }
100 | .into(),
101 | )),
102 | ],
103 | }
104 | .as_arg(),
105 | )
106 | }
107 |
108 | pub(crate) fn emit_export_stmts(exports: Ident, export: Export) -> Vec {
109 | export
110 | .into_iter()
111 | .map(|(export_name, export_item)| {
112 | let prop_name = quote_str!(export_item.export_name_span(), export_name);
113 | let local_ident = export_item.into_local_ident();
114 |
115 | object_define_enumerable_configurable(
116 | exports.clone().as_arg(),
117 | prop_name.as_arg(),
118 | prop_method_getter(local_ident.clone()).into(),
119 | prop_method_setter(local_ident).into(),
120 | )
121 | .into_stmt()
122 | })
123 | .collect()
124 | }
125 |
126 | pub(crate) fn key_from_export_name(n: &ModuleExportName) -> (Atom, Span) {
127 | match n {
128 | ModuleExportName::Ident(ident) => (ident.sym.clone(), ident.span),
129 | ModuleExportName::Str(str) => (str.value.clone(), str.span),
130 | }
131 | }
132 |
133 | pub(crate) fn local_ident_from_export_name(n: ModuleExportName) -> Ident {
134 | let name = match n {
135 | ModuleExportName::Ident(ident) => ident.sym,
136 | ModuleExportName::Str(str) => str.value,
137 | };
138 |
139 | match Ident::verify_symbol(&name) {
140 | Ok(_) => private_ident!(name),
141 | Err(s) => private_ident!(s),
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # [SWC plugin] mutable CJS exports
2 |
3 | > [!IMPORTANT]
4 | > This plugin has been migrated to the [swc official plugin repository](https://github.com/swc-project/plugins) and is available as [`@swc-contrib/mut-cjs-exports` on npm](https://www.npmjs.com/package/@swc-contrib/mut-cjs-exports).
5 |
6 | [](https://crates.io/crates/swc_mut_cjs_exports)
7 | [](https://www.npmjs.com/package/swc_mut_cjs_exports)
8 |
9 | [](https://github.com/magic-akari/swc_mut_cjs_exports/actions/workflows/test.yml)
10 | [](https://github.com/magic-akari/swc_mut_cjs_exports/actions/workflows/swc-compat-test.yml)
11 | [](https://github.com/magic-akari/swc_mut_cjs_exports/actions/workflows/cron-latest.yml)
12 | [](https://github.com/magic-akari/swc_mut_cjs_exports/actions/workflows/cron-nightly.yml)
13 |
14 | This is a SWC plugin to emit mutable CJS exports.
15 |
16 | This SWC plugin has only been tested for compatibility with jest. It should be used with `@swc/jest`.
17 |
18 | This project was previously called jest_workaround
19 |
20 | ## plugin version
21 |
22 | | swc_mut_cjs_exports | @swc/core version |
23 | | ------------------- | ----------------- |
24 | | 0.79.69 | >=1.3.78 <1.3.81 |
25 | | 0.85.0 | >=1.3.81 <1.3.106 |
26 | | 0.86.17 | >=1.3.81 <1.3.106 |
27 | | 0.89.2 | >=1.3.106 <1.4.0 |
28 | | 0.90.3 | 1.4.0 |
29 | | 0.90.6 | >=1.4.0 <1.7.0 |
30 | | 0.90.24 | >=1.4.0 <1.7.0 |
31 | | 0.99.0 | >=1.7.0 <1.7.28 |
32 | | 0.109.1 | >=1.7.28 <1.10.0 |
33 | | 8.0.1 | >=1.10.0 <1.13.0 |
34 | | 8.0.2 | >=1.10.0 <1.13.0 |
35 | | 10.7.0 | >=1.10.0 <1.13.0 |
36 |
37 | > [!NOTE]
38 | > The version of this plugin after 10.7.0 is migrated to the [swc official plugin repository](https://github.com/swc-project/plugins) and is available as [`@swc-contrib/mut-cjs-exports` on npm](https://www.npmjs.com/package/@swc-contrib/mut-cjs-exports).
39 | >
40 | > Please refer to https://swc.rs/docs/plugin/selecting-swc-core for version compatibility.
41 |
42 | ## usage
43 |
44 | install
45 |
46 | ```bash
47 | npm i -D jest @swc/core @swc/jest swc_mut_cjs_exports
48 | ```
49 |
50 | ```js
51 | // jest.config.js
52 | const fs = require("node:fs");
53 |
54 | const swcrc = JSON.parse(fs.readFileSync(".swcrc", "utf8"));
55 |
56 | // If you have other plugins, change this line.
57 | ((swcrc.jsc ??= {}).experimental ??= {}).plugins = [
58 | ["swc_mut_cjs_exports", {}],
59 | ];
60 |
61 | module.exports = {
62 | transform: {
63 | "^.+\\.(t|j)sx?$": ["@swc/jest", swcrc],
64 | },
65 | };
66 | ```
67 |
68 | Alternative implementation without .swcrc file
69 |
70 | ```JavaScript
71 | // jest.config.js
72 |
73 | module.exports = {
74 | transform: {
75 | "^.+\\.(t|j)sx?$": [
76 | "@swc/jest",
77 | {
78 | jsc: {
79 | experimental: {
80 | plugins: [["swc_mut_cjs_exports", {}]],
81 | },
82 | },
83 | },
84 | ],
85 | },
86 | };
87 | ```
88 |
89 | Make sure that `module.type` is `commonjs` in your `.swcrc` since this plugin
90 | does not touch non-workaround parts, such as import statements.
91 |
92 | ## FAQ
93 |
94 | #### 1. When do I need this?
95 |
96 | If you're using the swc compiler to transform your code to comply with the ESM
97 | specification, but you're also using Jest to test it in a CJS environment, you
98 | may encounter issues due to the immutable issue of `exports`.
99 |
100 | This plugin can help by transforming the `export` statements into mutable
101 | `exports`.
102 |
103 | #### 2. Do I have a better choice?
104 |
105 | You may have other options depending on your specific needs:
106 |
107 | - If you're able to run Jest in an ESM environment, you can use swc to transpile
108 | TypeScript/JSX syntax or downgrade JavaScript syntax without module
109 | conversion. Simply set the value of `module.type` to `es6` to achieve this.
110 |
111 | - It's possible that some issues related to running Jest in an ESM environment
112 | will be resolved over time. Keep an eye on
113 | [facebook/jest#9430](https://github.com/facebook/jest/issues/9430) for
114 | updates.
115 |
116 | - If you don't need the behavior of ESM specifically, you can stick with the CJS
117 | syntax to get the CJS behavior of `exports`.
118 |
119 | These options may be worth considering before using this plugin.
120 |
121 | CJS syntax
122 |
123 | ```JavaScript
124 | exports.foo = function foo() {
125 | return 42;
126 | };
127 | ```
128 |
129 | CTS(CJS in TypeScript) syntax
130 |
131 | ```TypeScript
132 | export = {
133 | foo: function foo() {
134 | return 42;
135 | },
136 | };
137 | ```
138 |
139 | Notes:
140 |
141 | - ESM style export means immutable exports when transformed into CJS
142 | - ESM style import means hoisted require when transformed into CJS
143 |
144 | #### 3. After upgrading the plugin version, the changes have not taken effect.
145 |
146 | This is a known issue. You could remove the Jest cache by running
147 | [`jest --clearCache`](https://jestjs.io/docs/cli#--clearcache) as a workaround.
148 |
--------------------------------------------------------------------------------
/src/lib.rs:
--------------------------------------------------------------------------------
1 | mod local_export_strip;
2 | mod utils;
3 |
4 | use local_export_strip::LocalExportStrip;
5 | use rustc_hash::FxHashSet;
6 | use swc_core::{
7 | common::{util::take::Take, Mark, SyntaxContext, DUMMY_SP},
8 | ecma::{
9 | ast::*,
10 | utils::{
11 | for_each_binding_ident, member_expr, private_ident, quote_ident, quote_str,
12 | ExprFactory, IntoIndirectCall,
13 | },
14 | visit::{noop_visit_mut_type, VisitMut, VisitMutWith},
15 | },
16 | plugin::{plugin_transform, proxies::TransformPluginProgramMetadata},
17 | };
18 | use utils::{emit_export_stmts, object_define_property};
19 |
20 | #[derive(Debug)]
21 | pub struct TransformVisitor {
22 | unresolved_mark: Mark,
23 |
24 | export_decl_id: FxHashSet,
25 | }
26 |
27 | impl VisitMut for TransformVisitor {
28 | noop_visit_mut_type!();
29 |
30 | fn visit_mut_script(&mut self, _: &mut Script) {
31 | // skip
32 | }
33 |
34 | fn visit_mut_module(&mut self, n: &mut Module) {
35 | let mut strip = LocalExportStrip::default();
36 | n.visit_mut_with(&mut strip);
37 |
38 | let LocalExportStrip {
39 | has_export_assign,
40 | export,
41 | export_all,
42 | export_decl_id,
43 | ..
44 | } = strip;
45 |
46 | self.export_decl_id = export_decl_id;
47 |
48 | let mut stmts: Vec = Vec::with_capacity(n.body.len() + 1);
49 |
50 | if !has_export_assign && !export.is_empty() {
51 | // keep module env
52 | stmts.push(ModuleItem::ModuleDecl(ModuleDecl::ExportNamed(
53 | NamedExport::dummy(),
54 | )));
55 |
56 | let exports = self.exports();
57 |
58 | stmts.extend(
59 | emit_export_stmts(exports, export)
60 | .into_iter()
61 | .map(Into::into),
62 | );
63 |
64 | if !self.export_decl_id.is_empty() {
65 | n.visit_mut_children_with(self);
66 | }
67 | }
68 |
69 | stmts.extend(export_all.into_iter().map(|id| self.export_all(id)));
70 |
71 | stmts.extend(n.body.take());
72 |
73 | n.body = stmts;
74 | }
75 |
76 | fn visit_mut_function(&mut self, node: &mut Function) {
77 | let export_decl_id = self.export_decl_id.clone();
78 |
79 | for_each_binding_ident(&node.params, |ident| {
80 | self.export_decl_id.remove(&ident.id.to_id());
81 | });
82 |
83 | node.visit_mut_children_with(self);
84 | self.export_decl_id = export_decl_id;
85 | }
86 |
87 | fn visit_mut_prop(&mut self, n: &mut Prop) {
88 | match n {
89 | Prop::Shorthand(ref_ident) => {
90 | if self.export_decl_id.contains(&ref_ident.to_id()) {
91 | *n = KeyValueProp {
92 | key: ref_ident.clone().into(),
93 | value: Box::new(self.exports().make_member(ref_ident.take().into()).into()),
94 | }
95 | .into()
96 | }
97 | }
98 | _ => n.visit_mut_children_with(self),
99 | }
100 | }
101 |
102 | fn visit_mut_expr(&mut self, n: &mut Expr) {
103 | match n {
104 | Expr::Ident(ref_ident) => {
105 | if self.export_decl_id.contains(&ref_ident.to_id()) {
106 | *n = self.exports().make_member(ref_ident.take().into()).into();
107 | }
108 | }
109 |
110 | _ => n.visit_mut_children_with(self),
111 | };
112 | }
113 |
114 | fn visit_mut_tagged_tpl(&mut self, n: &mut TaggedTpl) {
115 | let is_indirect = n
116 | .tag
117 | .as_ident()
118 | .map(|ident| self.export_decl_id.contains(&ident.to_id()))
119 | .unwrap_or_default();
120 |
121 | n.visit_mut_children_with(self);
122 |
123 | if is_indirect {
124 | *n = n.take().into_indirect()
125 | }
126 | }
127 |
128 | fn visit_mut_callee(&mut self, n: &mut Callee) {
129 | match n {
130 | Callee::Expr(e) if e.is_ident() => {
131 | let is_indirect_callee = e
132 | .as_ident()
133 | .map(|ident| self.export_decl_id.contains(&ident.to_id()))
134 | .unwrap_or_default();
135 |
136 | e.visit_mut_with(self);
137 |
138 | if is_indirect_callee {
139 | *n = n.take().into_indirect()
140 | }
141 | }
142 |
143 | _ => n.visit_mut_children_with(self),
144 | }
145 | }
146 |
147 | fn visit_mut_jsx_element_name(&mut self, n: &mut JSXElementName) {
148 | match n {
149 | JSXElementName::Ident(ref_ident) => {
150 | if self.export_decl_id.contains(&ref_ident.to_id()) {
151 | *n = JSXElementName::JSXMemberExpr(
152 | JSXMemberExpr {
153 | span: DUMMY_SP,
154 | obj: self.exports().into(),
155 | prop: ref_ident.clone().into(),
156 | }
157 | .into(),
158 | );
159 | }
160 | }
161 | _ => n.visit_mut_children_with(self),
162 | };
163 | }
164 | }
165 |
166 | impl TransformVisitor {
167 | pub fn new(unresolved_mark: Mark) -> Self {
168 | Self {
169 | unresolved_mark,
170 | export_decl_id: Default::default(),
171 | }
172 | }
173 |
174 | fn exports(&self) -> Ident {
175 | quote_ident!(
176 | SyntaxContext::empty().apply_mark(self.unresolved_mark),
177 | "exports"
178 | )
179 | }
180 |
181 | /// ```JavaScript
182 | /// Object.keys(_mod).forEach(function (key) {
183 | /// if (key === "default" || key === "__esModule") return;
184 | /// if (Object.prototype.hasOwnProperty.call(exports, key)) return;
185 | /// Object.defineProperty(exports, key, {
186 | /// enumerable: true,
187 | /// get: function () {
188 | /// return mod[key];
189 | /// },
190 | /// configurable: true
191 | /// });
192 | /// ```
193 | fn export_all(&self, id: Id) -> ModuleItem {
194 | let mod_name = Ident::from(id);
195 | let key = private_ident!("key");
196 |
197 | member_expr!(Default::default(), DUMMY_SP, Object.keys)
198 | .as_call(DUMMY_SP, vec![mod_name.clone().as_arg()])
199 | .make_member(quote_ident!("forEach"))
200 | .as_call(
201 | DUMMY_SP,
202 | vec![Function {
203 | params: vec![key.clone().into()],
204 | span: DUMMY_SP,
205 | body: Some(BlockStmt {
206 | stmts: vec![
207 | // if (key === "default" || key === "__esModule") return;
208 | IfStmt {
209 | span: DUMMY_SP,
210 | test: BinExpr {
211 | span: DUMMY_SP,
212 | op: op!("||"),
213 | left: BinExpr {
214 | span: DUMMY_SP,
215 | op: op!("==="),
216 | left: key.clone().into(),
217 | right: quote_str!("default").into(),
218 | }
219 | .into(),
220 | right: BinExpr {
221 | span: DUMMY_SP,
222 | op: op!("==="),
223 | left: key.clone().into(),
224 | right: quote_str!("__esModule").into(),
225 | }
226 | .into(),
227 | }
228 | .into(),
229 | cons: Box::new(
230 | ReturnStmt {
231 | span: DUMMY_SP,
232 | arg: None,
233 | }
234 | .into(),
235 | ),
236 | alt: None,
237 | }
238 | .into(),
239 | // if (Object.prototype.hasOwnProperty.call(exports, key)) return;
240 | IfStmt {
241 | span: DUMMY_SP,
242 | test: Box::new(
243 | member_expr!(
244 | Default::default(),
245 | DUMMY_SP,
246 | Object.prototype.hasOwnProperty.call
247 | )
248 | .as_call(
249 | DUMMY_SP,
250 | vec![self.exports().as_arg(), key.clone().as_arg()],
251 | ),
252 | ),
253 | cons: Box::new(
254 | ReturnStmt {
255 | span: DUMMY_SP,
256 | arg: None,
257 | }
258 | .into(),
259 | ),
260 | alt: None,
261 | }
262 | .into(),
263 | // Object.defineProperty(exports, key, {
264 | // enumerable: true,
265 | // get: function () {
266 | // return mod[key];
267 | // },
268 | // configurable: true
269 | // });
270 | object_define_property(
271 | self.exports().as_arg(),
272 | key.clone().as_arg(),
273 | ObjectLit {
274 | span: DUMMY_SP,
275 | props: vec![
276 | PropOrSpread::Prop(Box::new(
277 | KeyValueProp {
278 | key: quote_ident!("enumerable").into(),
279 | value: true.into(),
280 | }
281 | .into(),
282 | )),
283 | PropOrSpread::Prop(Box::new(
284 | KeyValueProp {
285 | key: quote_ident!("get").into(),
286 | value: mod_name
287 | .clone()
288 | .computed_member(key.clone())
289 | .into_lazy_fn(vec![])
290 | .into(),
291 | }
292 | .into(),
293 | )),
294 | PropOrSpread::Prop(Box::new(
295 | KeyValueProp {
296 | key: quote_ident!("configurable").into(),
297 | value: true.into(),
298 | }
299 | .into(),
300 | )),
301 | ],
302 | }
303 | .as_arg(),
304 | )
305 | .into_stmt(),
306 | ],
307 | ..Default::default()
308 | }),
309 | ..Default::default()
310 | }
311 | .as_arg()],
312 | )
313 | .into_stmt()
314 | .into()
315 | }
316 | }
317 |
318 | #[plugin_transform]
319 | pub fn process_transform(
320 | mut program: Program,
321 | metadata: TransformPluginProgramMetadata,
322 | ) -> Program {
323 | program.visit_mut_with(&mut TransformVisitor::new(metadata.unresolved_mark));
324 | program
325 | }
326 |
--------------------------------------------------------------------------------
/src/local_export_strip.rs:
--------------------------------------------------------------------------------
1 | use std::collections::BTreeMap;
2 |
3 | use rustc_hash::FxHashSet;
4 | use swc_core::{
5 | atoms::Atom,
6 | common::{util::take::Take, Span, DUMMY_SP},
7 | ecma::{
8 | ast::*,
9 | utils::{find_pat_ids, private_ident, ExprFactory},
10 | visit::{noop_visit_mut_type, VisitMut, VisitMutWith},
11 | },
12 | };
13 |
14 | use crate::utils::{key_from_export_name, local_ident_from_export_name};
15 |
16 | pub type Export = BTreeMap;
17 |
18 | #[derive(Debug)]
19 | pub struct ExportItem(Span, Ident);
20 |
21 | impl ExportItem {
22 | pub fn new(export_name_span: Span, local_ident: Ident) -> Self {
23 | Self(export_name_span, local_ident)
24 | }
25 |
26 | pub fn export_name_span(&self) -> Span {
27 | self.0
28 | }
29 |
30 | pub fn into_local_ident(self) -> Ident {
31 | self.1
32 | }
33 | }
34 |
35 | #[derive(Debug, Default)]
36 | pub(crate) struct LocalExportStrip {
37 | pub(crate) has_export_assign: bool,
38 | pub(crate) export: Export,
39 | pub(crate) export_all: FxHashSet,
40 | pub(crate) export_decl_id: FxHashSet,
41 | export_default: Option,
42 | }
43 |
44 | impl VisitMut for LocalExportStrip {
45 | noop_visit_mut_type!();
46 |
47 | fn visit_mut_script(&mut self, _: &mut Script) {
48 | // skip
49 | }
50 |
51 | fn visit_mut_module(&mut self, n: &mut Module) {
52 | let mut list = Vec::with_capacity(n.body.len());
53 |
54 | for item in n.body.drain(..) {
55 | match item {
56 | ModuleItem::Stmt(stmt) => list.push(stmt.into()),
57 |
58 | ModuleItem::ModuleDecl(mut module_decl) => {
59 | // collect link meta
60 | module_decl.visit_mut_with(self);
61 |
62 | // emit stmt
63 | match module_decl {
64 | ModuleDecl::ExportDecl(ExportDecl { decl, .. }) => {
65 | list.push(Stmt::Decl(decl).into());
66 | }
67 | ModuleDecl::ExportNamed(NamedExport { src: None, .. }) => continue,
68 | ModuleDecl::ExportNamed(
69 | item @ NamedExport {
70 | src: Some(..),
71 | type_only: false,
72 | ..
73 | },
74 | ) => {
75 | let decl: ModuleDecl = self.convert_export_decl(item).into();
76 | list.push(decl.into());
77 | }
78 | ModuleDecl::ExportAll(
79 | e @ ExportAll {
80 | type_only: false, ..
81 | },
82 | ) => {
83 | let decl: ModuleDecl = self.convert_export_all(e).into();
84 | list.push(decl.into());
85 | }
86 | ModuleDecl::ExportDefaultDecl(ExportDefaultDecl {
87 | decl:
88 | decl @ (DefaultDecl::Class(ClassExpr {
89 | ident: Some(..), ..
90 | })
91 | | DefaultDecl::Fn(FnExpr {
92 | ident: Some(..), ..
93 | })),
94 | ..
95 | }) => match decl {
96 | DefaultDecl::Class(class_expr) => list.extend(
97 | class_expr
98 | .as_class_decl()
99 | .map(|decl| Stmt::Decl(Decl::Class(decl)))
100 | .map(Into::into),
101 | ),
102 | DefaultDecl::Fn(fn_expr) => list.extend(
103 | fn_expr
104 | .as_fn_decl()
105 | .map(|decl| Stmt::Decl(Decl::Fn(decl)))
106 | .map(Into::into),
107 | ),
108 | _ => unreachable!(),
109 | },
110 | ModuleDecl::ExportDefaultExpr(..) => {
111 | list.extend(self.export_default.take().map(From::from))
112 | }
113 | ModuleDecl::TsExportAssignment(..) => {
114 | self.has_export_assign = true;
115 | list.push(module_decl.into());
116 | }
117 | _ => list.push(module_decl.into()),
118 | };
119 | }
120 | };
121 | }
122 |
123 | n.body = list;
124 | }
125 |
126 | /// ```javascript
127 | /// export const foo = 1, bar = 2, { baz } = { baz: 3 };
128 | /// export let a = 1, [b] = [2];
129 | /// export function x() {}
130 | /// export class y {}
131 | /// ```
132 | /// ->
133 | /// ```javascript
134 | /// const foo = 1, bar = 2, { baz } = { baz: 3 };
135 | /// let a = 1, [b] = [2];
136 | /// function x() {}
137 | /// class y {}
138 | /// ```
139 | fn visit_mut_export_decl(&mut self, n: &mut ExportDecl) {
140 | match &n.decl {
141 | Decl::Class(ClassDecl { ident, .. }) | Decl::Fn(FnDecl { ident, .. }) => {
142 | self.export.insert(
143 | ident.sym.clone(),
144 | ExportItem::new(ident.span, ident.clone()),
145 | );
146 | }
147 |
148 | Decl::Var(v) => {
149 | let ids = find_pat_ids::<_, Ident>(&v.decls);
150 |
151 | self.export_decl_id.extend(ids.iter().map(Ident::to_id));
152 |
153 | self.export.extend(
154 | find_pat_ids::<_, Ident>(&v.decls)
155 | .into_iter()
156 | .map(|id| (id.sym.clone(), ExportItem::new(id.span, id))),
157 | );
158 | }
159 | _ => {}
160 | };
161 | }
162 |
163 | /// ```javascript
164 | /// export { foo, foo as bar, foo as "baz" };
165 | /// export { "foo", foo as bar, "foo" as "baz" } from "mod";
166 | /// export * as foo from "mod";
167 | /// export * as "bar" from "mod";
168 | /// ```
169 | fn visit_mut_named_export(&mut self, n: &mut NamedExport) {
170 | if n.type_only || n.src.is_some() {
171 | return;
172 | }
173 |
174 | let NamedExport { specifiers, .. } = n.take();
175 |
176 | self.export.extend(specifiers.into_iter().map(|e| match e {
177 | ExportSpecifier::Namespace(..) => {
178 | unreachable!("`export *` without src is invalid")
179 | }
180 | ExportSpecifier::Default(..) => {
181 | unreachable!("`export foo` without src is invalid")
182 | }
183 | ExportSpecifier::Named(ExportNamedSpecifier { orig, exported, .. }) => {
184 | let orig = match orig {
185 | ModuleExportName::Ident(id) => id,
186 | ModuleExportName::Str(_) => {
187 | unreachable!(r#"`export {{ "foo" }}` without src is invalid"#)
188 | }
189 | };
190 |
191 | if let Some(exported) = exported {
192 | let (export_name, export_name_span) = match exported {
193 | ModuleExportName::Ident(Ident { span, sym, .. }) => (sym, span),
194 | ModuleExportName::Str(Str { span, value, .. }) => (value, span),
195 | };
196 |
197 | (export_name, ExportItem::new(export_name_span, orig))
198 | } else {
199 | (orig.sym.clone(), ExportItem::new(orig.span, orig))
200 | }
201 | }
202 | }))
203 | }
204 |
205 | /// ```javascript
206 | /// export default class foo {};
207 | /// export default class {};
208 | /// export default function bar () {};
209 | /// export default function () {};
210 | /// ```
211 | /// ->
212 | /// ```javascript
213 | /// class foo {};
214 | /// class _default {};
215 | /// function bar () {};
216 | /// function _default () {};
217 | /// ```
218 | fn visit_mut_export_default_decl(&mut self, n: &mut ExportDefaultDecl) {
219 | match &mut n.decl {
220 | DefaultDecl::Class(class_expr) => {
221 | if let Some(ident) = class_expr.ident.clone() {
222 | self.export
223 | .insert("default".into(), ExportItem::new(n.span, ident));
224 | }
225 | }
226 | DefaultDecl::Fn(fn_expr) => {
227 | if let Some(ident) = fn_expr.ident.clone() {
228 | self.export
229 | .insert("default".into(), ExportItem::new(n.span, ident));
230 | }
231 | }
232 | DefaultDecl::TsInterfaceDecl(_) => {}
233 | }
234 | }
235 |
236 | /// ```javascript
237 | /// export default foo;
238 | /// export default 1
239 | /// ```
240 | /// ->
241 | /// ```javascript
242 | /// var _default = foo;
243 | /// var _default = 1;
244 | /// ```
245 | fn visit_mut_export_default_expr(&mut self, n: &mut ExportDefaultExpr) {
246 | let ident = private_ident!(n.span, "_default");
247 |
248 | self.export
249 | .insert("default".into(), ExportItem::new(n.span, ident.clone()));
250 |
251 | self.export_default = Some(Stmt::Decl(
252 | n.expr
253 | .take()
254 | .into_var_decl(VarDeclKind::Const, ident.into())
255 | .into(),
256 | ));
257 | }
258 | }
259 |
260 | impl LocalExportStrip {
261 | fn convert_export_decl(&mut self, n: NamedExport) -> ImportDecl {
262 | let NamedExport {
263 | span,
264 | specifiers,
265 | src,
266 | type_only,
267 | with,
268 | } = n;
269 |
270 | let src = src.unwrap();
271 |
272 | let specifiers = specifiers
273 | .into_iter()
274 | .flat_map(|s| self.convert_export_specifier(s))
275 | .collect();
276 |
277 | ImportDecl {
278 | span,
279 | specifiers,
280 | src,
281 | type_only,
282 | with,
283 | phase: Default::default(),
284 | }
285 | }
286 |
287 | fn convert_export_specifier(&mut self, s: ExportSpecifier) -> Option {
288 | match s {
289 | ExportSpecifier::Namespace(ExportNamespaceSpecifier { span, name }) => {
290 | let (export_name, export_span) = key_from_export_name(&name);
291 | let local = local_ident_from_export_name(name);
292 | self.export
293 | .insert(export_name, ExportItem::new(export_span, local.clone()));
294 |
295 | Some(ImportSpecifier::Namespace(ImportStarAsSpecifier {
296 | span,
297 | local,
298 | }))
299 | }
300 | ExportSpecifier::Default(ExportDefaultSpecifier { exported }) => {
301 | let (export_name, export_span) = (exported.sym.clone(), exported.span);
302 | let local = exported.into_private();
303 | self.export
304 | .insert(export_name, ExportItem::new(export_span, local.clone()));
305 |
306 | Some(ImportSpecifier::Default(ImportDefaultSpecifier {
307 | local,
308 | span: DUMMY_SP,
309 | }))
310 | }
311 | ExportSpecifier::Named(ExportNamedSpecifier {
312 | span,
313 | orig,
314 | exported,
315 | is_type_only: false,
316 | }) => {
317 | // export { "x-1" as "y-1" } from "foo"
318 | // ->
319 | // import { "x-1" as x1 } from "foo"
320 | // export { x1 as "y-1" }
321 | let name = exported.as_ref().unwrap_or(&orig);
322 |
323 | let (export_name, export_span) = key_from_export_name(name);
324 | let local = local_ident_from_export_name(orig.clone());
325 | self.export
326 | .insert(export_name, ExportItem::new(export_span, local.clone()));
327 |
328 | Some(ImportSpecifier::Named(ImportNamedSpecifier {
329 | span,
330 | local,
331 | imported: Some(orig),
332 | is_type_only: false,
333 | }))
334 | }
335 | _ => None,
336 | }
337 | }
338 |
339 | fn convert_export_all(&mut self, e: ExportAll) -> ImportDecl {
340 | let ExportAll {
341 | span, src, with, ..
342 | } = e;
343 |
344 | let mod_name = private_ident!("mod");
345 |
346 | self.export_all.insert(mod_name.to_id());
347 |
348 | let star = ImportStarAsSpecifier {
349 | span,
350 | local: mod_name.clone(),
351 | };
352 |
353 | ImportDecl {
354 | span,
355 | specifiers: vec![star.into()],
356 | src,
357 | type_only: false,
358 | with,
359 | phase: Default::default(),
360 | }
361 | }
362 | }
363 |
--------------------------------------------------------------------------------
/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "Inflector"
7 | version = "0.11.4"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
10 |
11 | [[package]]
12 | name = "ahash"
13 | version = "0.7.6"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
16 | dependencies = [
17 | "getrandom",
18 | "once_cell",
19 | "version_check",
20 | ]
21 |
22 | [[package]]
23 | name = "ahash"
24 | version = "0.8.11"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
27 | dependencies = [
28 | "cfg-if",
29 | "once_cell",
30 | "version_check",
31 | "zerocopy",
32 | ]
33 |
34 | [[package]]
35 | name = "aho-corasick"
36 | version = "1.0.2"
37 | source = "registry+https://github.com/rust-lang/crates.io-index"
38 | checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41"
39 | dependencies = [
40 | "memchr",
41 | ]
42 |
43 | [[package]]
44 | name = "allocator-api2"
45 | version = "0.2.18"
46 | source = "registry+https://github.com/rust-lang/crates.io-index"
47 | checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f"
48 |
49 | [[package]]
50 | name = "ansi_term"
51 | version = "0.12.1"
52 | source = "registry+https://github.com/rust-lang/crates.io-index"
53 | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2"
54 | dependencies = [
55 | "winapi",
56 | ]
57 |
58 | [[package]]
59 | name = "anyhow"
60 | version = "1.0.89"
61 | source = "registry+https://github.com/rust-lang/crates.io-index"
62 | checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6"
63 |
64 | [[package]]
65 | name = "ast_node"
66 | version = "2.0.0"
67 | source = "registry+https://github.com/rust-lang/crates.io-index"
68 | checksum = "94741d66bdda032fcbf33e621b4e3a888d7d11bd3ac4446d82c5593a136936ff"
69 | dependencies = [
70 | "proc-macro2",
71 | "quote",
72 | "swc_macros_common",
73 | "syn 2.0.87",
74 | ]
75 |
76 | [[package]]
77 | name = "ast_node"
78 | version = "3.0.0"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "91fb5864e2f5bf9fd9797b94b2dfd1554d4c3092b535008b27d7e15c86675a2f"
81 | dependencies = [
82 | "proc-macro2",
83 | "quote",
84 | "swc_macros_common",
85 | "syn 2.0.87",
86 | ]
87 |
88 | [[package]]
89 | name = "autocfg"
90 | version = "1.1.0"
91 | source = "registry+https://github.com/rust-lang/crates.io-index"
92 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
93 |
94 | [[package]]
95 | name = "base64"
96 | version = "0.21.7"
97 | source = "registry+https://github.com/rust-lang/crates.io-index"
98 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
99 |
100 | [[package]]
101 | name = "base64-simd"
102 | version = "0.7.0"
103 | source = "registry+https://github.com/rust-lang/crates.io-index"
104 | checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5"
105 | dependencies = [
106 | "simd-abstraction",
107 | ]
108 |
109 | [[package]]
110 | name = "better_scoped_tls"
111 | version = "1.0.0"
112 | source = "registry+https://github.com/rust-lang/crates.io-index"
113 | checksum = "50fd297a11c709be8348aec039c8b91de16075d2b2bdaee1bd562c0875993664"
114 | dependencies = [
115 | "scoped-tls",
116 | ]
117 |
118 | [[package]]
119 | name = "bitflags"
120 | version = "1.3.2"
121 | source = "registry+https://github.com/rust-lang/crates.io-index"
122 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
123 |
124 | [[package]]
125 | name = "bitflags"
126 | version = "2.6.0"
127 | source = "registry+https://github.com/rust-lang/crates.io-index"
128 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
129 |
130 | [[package]]
131 | name = "bitvec"
132 | version = "1.0.1"
133 | source = "registry+https://github.com/rust-lang/crates.io-index"
134 | checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
135 | dependencies = [
136 | "funty",
137 | "radium",
138 | "tap",
139 | "wyz",
140 | ]
141 |
142 | [[package]]
143 | name = "block-buffer"
144 | version = "0.10.4"
145 | source = "registry+https://github.com/rust-lang/crates.io-index"
146 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
147 | dependencies = [
148 | "generic-array",
149 | ]
150 |
151 | [[package]]
152 | name = "bumpalo"
153 | version = "3.16.0"
154 | source = "registry+https://github.com/rust-lang/crates.io-index"
155 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
156 | dependencies = [
157 | "allocator-api2",
158 | ]
159 |
160 | [[package]]
161 | name = "bytecheck"
162 | version = "0.8.0"
163 | source = "registry+https://github.com/rust-lang/crates.io-index"
164 | checksum = "50c8f430744b23b54ad15161fcbc22d82a29b73eacbe425fea23ec822600bc6f"
165 | dependencies = [
166 | "bytecheck_derive",
167 | "ptr_meta 0.3.0",
168 | "rancor",
169 | "simdutf8",
170 | ]
171 |
172 | [[package]]
173 | name = "bytecheck_derive"
174 | version = "0.8.0"
175 | source = "registry+https://github.com/rust-lang/crates.io-index"
176 | checksum = "523363cbe1df49b68215efdf500b103ac3b0fb4836aed6d15689a076eadb8fff"
177 | dependencies = [
178 | "proc-macro2",
179 | "quote",
180 | "syn 2.0.87",
181 | ]
182 |
183 | [[package]]
184 | name = "bytes"
185 | version = "1.6.1"
186 | source = "registry+https://github.com/rust-lang/crates.io-index"
187 | checksum = "a12916984aab3fa6e39d655a33e09c0071eb36d6ab3aea5c2d78551f1df6d952"
188 |
189 | [[package]]
190 | name = "camino"
191 | version = "1.1.6"
192 | source = "registry+https://github.com/rust-lang/crates.io-index"
193 | checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c"
194 | dependencies = [
195 | "serde",
196 | ]
197 |
198 | [[package]]
199 | name = "cargo-platform"
200 | version = "0.1.2"
201 | source = "registry+https://github.com/rust-lang/crates.io-index"
202 | checksum = "cbdb825da8a5df079a43676dbe042702f1707b1109f713a01420fbb4cc71fa27"
203 | dependencies = [
204 | "serde",
205 | ]
206 |
207 | [[package]]
208 | name = "cargo_metadata"
209 | version = "0.18.1"
210 | source = "registry+https://github.com/rust-lang/crates.io-index"
211 | checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037"
212 | dependencies = [
213 | "camino",
214 | "cargo-platform",
215 | "semver 1.0.18",
216 | "serde",
217 | "serde_json",
218 | "thiserror",
219 | ]
220 |
221 | [[package]]
222 | name = "cc"
223 | version = "1.0.82"
224 | source = "registry+https://github.com/rust-lang/crates.io-index"
225 | checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
226 | dependencies = [
227 | "libc",
228 | ]
229 |
230 | [[package]]
231 | name = "cfg-if"
232 | version = "1.0.0"
233 | source = "registry+https://github.com/rust-lang/crates.io-index"
234 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
235 |
236 | [[package]]
237 | name = "cpufeatures"
238 | version = "0.2.9"
239 | source = "registry+https://github.com/rust-lang/crates.io-index"
240 | checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
241 | dependencies = [
242 | "libc",
243 | ]
244 |
245 | [[package]]
246 | name = "crypto-common"
247 | version = "0.1.6"
248 | source = "registry+https://github.com/rust-lang/crates.io-index"
249 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
250 | dependencies = [
251 | "generic-array",
252 | "typenum",
253 | ]
254 |
255 | [[package]]
256 | name = "darling"
257 | version = "0.20.10"
258 | source = "registry+https://github.com/rust-lang/crates.io-index"
259 | checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989"
260 | dependencies = [
261 | "darling_core",
262 | "darling_macro",
263 | ]
264 |
265 | [[package]]
266 | name = "darling_core"
267 | version = "0.20.10"
268 | source = "registry+https://github.com/rust-lang/crates.io-index"
269 | checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5"
270 | dependencies = [
271 | "fnv",
272 | "ident_case",
273 | "proc-macro2",
274 | "quote",
275 | "strsim",
276 | "syn 2.0.87",
277 | ]
278 |
279 | [[package]]
280 | name = "darling_macro"
281 | version = "0.20.10"
282 | source = "registry+https://github.com/rust-lang/crates.io-index"
283 | checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806"
284 | dependencies = [
285 | "darling_core",
286 | "quote",
287 | "syn 2.0.87",
288 | ]
289 |
290 | [[package]]
291 | name = "data-encoding"
292 | version = "2.3.3"
293 | source = "registry+https://github.com/rust-lang/crates.io-index"
294 | checksum = "23d8666cb01533c39dde32bcbab8e227b4ed6679b2c925eba05feabea39508fb"
295 |
296 | [[package]]
297 | name = "debugid"
298 | version = "0.8.0"
299 | source = "registry+https://github.com/rust-lang/crates.io-index"
300 | checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d"
301 | dependencies = [
302 | "serde",
303 | "uuid",
304 | ]
305 |
306 | [[package]]
307 | name = "derive_builder"
308 | version = "0.20.2"
309 | source = "registry+https://github.com/rust-lang/crates.io-index"
310 | checksum = "507dfb09ea8b7fa618fcf76e953f4f5e192547945816d5358edffe39f6f94947"
311 | dependencies = [
312 | "derive_builder_macro",
313 | ]
314 |
315 | [[package]]
316 | name = "derive_builder_core"
317 | version = "0.20.2"
318 | source = "registry+https://github.com/rust-lang/crates.io-index"
319 | checksum = "2d5bcf7b024d6835cfb3d473887cd966994907effbe9227e8c8219824d06c4e8"
320 | dependencies = [
321 | "darling",
322 | "proc-macro2",
323 | "quote",
324 | "syn 2.0.87",
325 | ]
326 |
327 | [[package]]
328 | name = "derive_builder_macro"
329 | version = "0.20.2"
330 | source = "registry+https://github.com/rust-lang/crates.io-index"
331 | checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c"
332 | dependencies = [
333 | "derive_builder_core",
334 | "syn 2.0.87",
335 | ]
336 |
337 | [[package]]
338 | name = "diff"
339 | version = "0.1.13"
340 | source = "registry+https://github.com/rust-lang/crates.io-index"
341 | checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
342 |
343 | [[package]]
344 | name = "difference"
345 | version = "2.0.0"
346 | source = "registry+https://github.com/rust-lang/crates.io-index"
347 | checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
348 |
349 | [[package]]
350 | name = "digest"
351 | version = "0.10.7"
352 | source = "registry+https://github.com/rust-lang/crates.io-index"
353 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
354 | dependencies = [
355 | "block-buffer",
356 | "crypto-common",
357 | ]
358 |
359 | [[package]]
360 | name = "either"
361 | version = "1.13.0"
362 | source = "registry+https://github.com/rust-lang/crates.io-index"
363 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
364 |
365 | [[package]]
366 | name = "equivalent"
367 | version = "1.0.1"
368 | source = "registry+https://github.com/rust-lang/crates.io-index"
369 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
370 |
371 | [[package]]
372 | name = "errno"
373 | version = "0.3.2"
374 | source = "registry+https://github.com/rust-lang/crates.io-index"
375 | checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
376 | dependencies = [
377 | "errno-dragonfly",
378 | "libc",
379 | "windows-sys",
380 | ]
381 |
382 | [[package]]
383 | name = "errno-dragonfly"
384 | version = "0.1.2"
385 | source = "registry+https://github.com/rust-lang/crates.io-index"
386 | checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
387 | dependencies = [
388 | "cc",
389 | "libc",
390 | ]
391 |
392 | [[package]]
393 | name = "fastrand"
394 | version = "2.0.0"
395 | source = "registry+https://github.com/rust-lang/crates.io-index"
396 | checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
397 |
398 | [[package]]
399 | name = "fnv"
400 | version = "1.0.7"
401 | source = "registry+https://github.com/rust-lang/crates.io-index"
402 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
403 |
404 | [[package]]
405 | name = "form_urlencoded"
406 | version = "1.2.0"
407 | source = "registry+https://github.com/rust-lang/crates.io-index"
408 | checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
409 | dependencies = [
410 | "percent-encoding",
411 | ]
412 |
413 | [[package]]
414 | name = "from_variant"
415 | version = "2.0.0"
416 | source = "registry+https://github.com/rust-lang/crates.io-index"
417 | checksum = "8d7ccf961415e7aa17ef93dcb6c2441faaa8e768abe09e659b908089546f74c5"
418 | dependencies = [
419 | "proc-macro2",
420 | "swc_macros_common",
421 | "syn 2.0.87",
422 | ]
423 |
424 | [[package]]
425 | name = "funty"
426 | version = "2.0.0"
427 | source = "registry+https://github.com/rust-lang/crates.io-index"
428 | checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
429 |
430 | [[package]]
431 | name = "generic-array"
432 | version = "0.14.7"
433 | source = "registry+https://github.com/rust-lang/crates.io-index"
434 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
435 | dependencies = [
436 | "typenum",
437 | "version_check",
438 | ]
439 |
440 | [[package]]
441 | name = "getrandom"
442 | version = "0.2.10"
443 | source = "registry+https://github.com/rust-lang/crates.io-index"
444 | checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
445 | dependencies = [
446 | "cfg-if",
447 | "libc",
448 | "wasi",
449 | ]
450 |
451 | [[package]]
452 | name = "glob"
453 | version = "0.3.1"
454 | source = "registry+https://github.com/rust-lang/crates.io-index"
455 | checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
456 |
457 | [[package]]
458 | name = "hashbrown"
459 | version = "0.12.3"
460 | source = "registry+https://github.com/rust-lang/crates.io-index"
461 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
462 | dependencies = [
463 | "ahash 0.7.6",
464 | ]
465 |
466 | [[package]]
467 | name = "hashbrown"
468 | version = "0.14.5"
469 | source = "registry+https://github.com/rust-lang/crates.io-index"
470 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
471 | dependencies = [
472 | "ahash 0.8.11",
473 | "allocator-api2",
474 | ]
475 |
476 | [[package]]
477 | name = "hashbrown"
478 | version = "0.15.2"
479 | source = "registry+https://github.com/rust-lang/crates.io-index"
480 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
481 |
482 | [[package]]
483 | name = "hermit-abi"
484 | version = "0.3.2"
485 | source = "registry+https://github.com/rust-lang/crates.io-index"
486 | checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
487 |
488 | [[package]]
489 | name = "hex"
490 | version = "0.4.3"
491 | source = "registry+https://github.com/rust-lang/crates.io-index"
492 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
493 |
494 | [[package]]
495 | name = "hstr"
496 | version = "0.2.17"
497 | source = "registry+https://github.com/rust-lang/crates.io-index"
498 | checksum = "a1a26def229ea95a8709dad32868d975d0dd40235bd2ce82920e4a8fe692b5e0"
499 | dependencies = [
500 | "hashbrown 0.14.5",
501 | "new_debug_unreachable",
502 | "once_cell",
503 | "phf",
504 | "rustc-hash 1.1.0",
505 | "triomphe",
506 | ]
507 |
508 | [[package]]
509 | name = "ident_case"
510 | version = "1.0.1"
511 | source = "registry+https://github.com/rust-lang/crates.io-index"
512 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
513 |
514 | [[package]]
515 | name = "idna"
516 | version = "0.4.0"
517 | source = "registry+https://github.com/rust-lang/crates.io-index"
518 | checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
519 | dependencies = [
520 | "unicode-bidi",
521 | "unicode-normalization",
522 | ]
523 |
524 | [[package]]
525 | name = "if_chain"
526 | version = "1.0.2"
527 | source = "registry+https://github.com/rust-lang/crates.io-index"
528 | checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed"
529 |
530 | [[package]]
531 | name = "indexmap"
532 | version = "2.1.0"
533 | source = "registry+https://github.com/rust-lang/crates.io-index"
534 | checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
535 | dependencies = [
536 | "equivalent",
537 | "hashbrown 0.14.5",
538 | ]
539 |
540 | [[package]]
541 | name = "is-macro"
542 | version = "0.3.5"
543 | source = "registry+https://github.com/rust-lang/crates.io-index"
544 | checksum = "59a85abdc13717906baccb5a1e435556ce0df215f242892f721dff62bf25288f"
545 | dependencies = [
546 | "Inflector",
547 | "proc-macro2",
548 | "quote",
549 | "syn 2.0.87",
550 | ]
551 |
552 | [[package]]
553 | name = "itoa"
554 | version = "1.0.9"
555 | source = "registry+https://github.com/rust-lang/crates.io-index"
556 | checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
557 |
558 | [[package]]
559 | name = "lazy_static"
560 | version = "1.4.0"
561 | source = "registry+https://github.com/rust-lang/crates.io-index"
562 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
563 |
564 | [[package]]
565 | name = "libc"
566 | version = "0.2.147"
567 | source = "registry+https://github.com/rust-lang/crates.io-index"
568 | checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
569 |
570 | [[package]]
571 | name = "linux-raw-sys"
572 | version = "0.4.5"
573 | source = "registry+https://github.com/rust-lang/crates.io-index"
574 | checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
575 |
576 | [[package]]
577 | name = "lock_api"
578 | version = "0.4.10"
579 | source = "registry+https://github.com/rust-lang/crates.io-index"
580 | checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
581 | dependencies = [
582 | "autocfg",
583 | "scopeguard",
584 | ]
585 |
586 | [[package]]
587 | name = "log"
588 | version = "0.4.19"
589 | source = "registry+https://github.com/rust-lang/crates.io-index"
590 | checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
591 |
592 | [[package]]
593 | name = "matchers"
594 | version = "0.1.0"
595 | source = "registry+https://github.com/rust-lang/crates.io-index"
596 | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558"
597 | dependencies = [
598 | "regex-automata 0.1.10",
599 | ]
600 |
601 | [[package]]
602 | name = "memchr"
603 | version = "2.6.4"
604 | source = "registry+https://github.com/rust-lang/crates.io-index"
605 | checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
606 |
607 | [[package]]
608 | name = "miette"
609 | version = "7.2.0"
610 | source = "registry+https://github.com/rust-lang/crates.io-index"
611 | checksum = "4edc8853320c2a0dab800fbda86253c8938f6ea88510dc92c5f1ed20e794afc1"
612 | dependencies = [
613 | "cfg-if",
614 | "miette-derive",
615 | "owo-colors",
616 | "textwrap",
617 | "thiserror",
618 | "unicode-width",
619 | ]
620 |
621 | [[package]]
622 | name = "miette-derive"
623 | version = "7.2.0"
624 | source = "registry+https://github.com/rust-lang/crates.io-index"
625 | checksum = "dcf09caffaac8068c346b6df2a7fc27a177fd20b39421a39ce0a211bde679a6c"
626 | dependencies = [
627 | "proc-macro2",
628 | "quote",
629 | "syn 2.0.87",
630 | ]
631 |
632 | [[package]]
633 | name = "munge"
634 | version = "0.4.1"
635 | source = "registry+https://github.com/rust-lang/crates.io-index"
636 | checksum = "64142d38c84badf60abf06ff9bd80ad2174306a5b11bd4706535090a30a419df"
637 | dependencies = [
638 | "munge_macro",
639 | ]
640 |
641 | [[package]]
642 | name = "munge_macro"
643 | version = "0.4.1"
644 | source = "registry+https://github.com/rust-lang/crates.io-index"
645 | checksum = "1bb5c1d8184f13f7d0ccbeeca0def2f9a181bce2624302793005f5ca8aa62e5e"
646 | dependencies = [
647 | "proc-macro2",
648 | "quote",
649 | "syn 2.0.87",
650 | ]
651 |
652 | [[package]]
653 | name = "new_debug_unreachable"
654 | version = "1.0.6"
655 | source = "registry+https://github.com/rust-lang/crates.io-index"
656 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
657 |
658 | [[package]]
659 | name = "nu-ansi-term"
660 | version = "0.46.0"
661 | source = "registry+https://github.com/rust-lang/crates.io-index"
662 | checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84"
663 | dependencies = [
664 | "overload",
665 | "winapi",
666 | ]
667 |
668 | [[package]]
669 | name = "num-bigint"
670 | version = "0.4.3"
671 | source = "registry+https://github.com/rust-lang/crates.io-index"
672 | checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f"
673 | dependencies = [
674 | "autocfg",
675 | "num-integer",
676 | "num-traits",
677 | "serde",
678 | ]
679 |
680 | [[package]]
681 | name = "num-integer"
682 | version = "0.1.45"
683 | source = "registry+https://github.com/rust-lang/crates.io-index"
684 | checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
685 | dependencies = [
686 | "autocfg",
687 | "num-traits",
688 | ]
689 |
690 | [[package]]
691 | name = "num-traits"
692 | version = "0.2.16"
693 | source = "registry+https://github.com/rust-lang/crates.io-index"
694 | checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2"
695 | dependencies = [
696 | "autocfg",
697 | ]
698 |
699 | [[package]]
700 | name = "num_cpus"
701 | version = "1.16.0"
702 | source = "registry+https://github.com/rust-lang/crates.io-index"
703 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
704 | dependencies = [
705 | "hermit-abi",
706 | "libc",
707 | ]
708 |
709 | [[package]]
710 | name = "once_cell"
711 | version = "1.19.0"
712 | source = "registry+https://github.com/rust-lang/crates.io-index"
713 | checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
714 |
715 | [[package]]
716 | name = "outref"
717 | version = "0.1.0"
718 | source = "registry+https://github.com/rust-lang/crates.io-index"
719 | checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
720 |
721 | [[package]]
722 | name = "overload"
723 | version = "0.1.1"
724 | source = "registry+https://github.com/rust-lang/crates.io-index"
725 | checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39"
726 |
727 | [[package]]
728 | name = "owo-colors"
729 | version = "4.0.0"
730 | source = "registry+https://github.com/rust-lang/crates.io-index"
731 | checksum = "caff54706df99d2a78a5a4e3455ff45448d81ef1bb63c22cd14052ca0e993a3f"
732 |
733 | [[package]]
734 | name = "parking_lot"
735 | version = "0.12.1"
736 | source = "registry+https://github.com/rust-lang/crates.io-index"
737 | checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
738 | dependencies = [
739 | "lock_api",
740 | "parking_lot_core",
741 | ]
742 |
743 | [[package]]
744 | name = "parking_lot_core"
745 | version = "0.9.8"
746 | source = "registry+https://github.com/rust-lang/crates.io-index"
747 | checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
748 | dependencies = [
749 | "cfg-if",
750 | "libc",
751 | "redox_syscall",
752 | "smallvec",
753 | "windows-targets",
754 | ]
755 |
756 | [[package]]
757 | name = "percent-encoding"
758 | version = "2.3.0"
759 | source = "registry+https://github.com/rust-lang/crates.io-index"
760 | checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
761 |
762 | [[package]]
763 | name = "phf"
764 | version = "0.11.2"
765 | source = "registry+https://github.com/rust-lang/crates.io-index"
766 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc"
767 | dependencies = [
768 | "phf_macros",
769 | "phf_shared",
770 | ]
771 |
772 | [[package]]
773 | name = "phf_generator"
774 | version = "0.11.2"
775 | source = "registry+https://github.com/rust-lang/crates.io-index"
776 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0"
777 | dependencies = [
778 | "phf_shared",
779 | "rand",
780 | ]
781 |
782 | [[package]]
783 | name = "phf_macros"
784 | version = "0.11.2"
785 | source = "registry+https://github.com/rust-lang/crates.io-index"
786 | checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b"
787 | dependencies = [
788 | "phf_generator",
789 | "phf_shared",
790 | "proc-macro2",
791 | "quote",
792 | "syn 2.0.87",
793 | ]
794 |
795 | [[package]]
796 | name = "phf_shared"
797 | version = "0.11.2"
798 | source = "registry+https://github.com/rust-lang/crates.io-index"
799 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b"
800 | dependencies = [
801 | "siphasher",
802 | ]
803 |
804 | [[package]]
805 | name = "pin-project-lite"
806 | version = "0.2.11"
807 | source = "registry+https://github.com/rust-lang/crates.io-index"
808 | checksum = "2c516611246607d0c04186886dbb3a754368ef82c79e9827a802c6d836dd111c"
809 |
810 | [[package]]
811 | name = "pretty_assertions"
812 | version = "1.4.0"
813 | source = "registry+https://github.com/rust-lang/crates.io-index"
814 | checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
815 | dependencies = [
816 | "diff",
817 | "yansi",
818 | ]
819 |
820 | [[package]]
821 | name = "proc-macro2"
822 | version = "1.0.86"
823 | source = "registry+https://github.com/rust-lang/crates.io-index"
824 | checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77"
825 | dependencies = [
826 | "unicode-ident",
827 | ]
828 |
829 | [[package]]
830 | name = "psm"
831 | version = "0.1.21"
832 | source = "registry+https://github.com/rust-lang/crates.io-index"
833 | checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874"
834 | dependencies = [
835 | "cc",
836 | ]
837 |
838 | [[package]]
839 | name = "ptr_meta"
840 | version = "0.1.4"
841 | source = "registry+https://github.com/rust-lang/crates.io-index"
842 | checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
843 | dependencies = [
844 | "ptr_meta_derive 0.1.4",
845 | ]
846 |
847 | [[package]]
848 | name = "ptr_meta"
849 | version = "0.3.0"
850 | source = "registry+https://github.com/rust-lang/crates.io-index"
851 | checksum = "fe9e76f66d3f9606f44e45598d155cb13ecf09f4a28199e48daf8c8fc937ea90"
852 | dependencies = [
853 | "ptr_meta_derive 0.3.0",
854 | ]
855 |
856 | [[package]]
857 | name = "ptr_meta_derive"
858 | version = "0.1.4"
859 | source = "registry+https://github.com/rust-lang/crates.io-index"
860 | checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
861 | dependencies = [
862 | "proc-macro2",
863 | "quote",
864 | "syn 1.0.109",
865 | ]
866 |
867 | [[package]]
868 | name = "ptr_meta_derive"
869 | version = "0.3.0"
870 | source = "registry+https://github.com/rust-lang/crates.io-index"
871 | checksum = "ca414edb151b4c8d125c12566ab0d74dc9cdba36fb80eb7b848c15f495fd32d1"
872 | dependencies = [
873 | "proc-macro2",
874 | "quote",
875 | "syn 2.0.87",
876 | ]
877 |
878 | [[package]]
879 | name = "quote"
880 | version = "1.0.36"
881 | source = "registry+https://github.com/rust-lang/crates.io-index"
882 | checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7"
883 | dependencies = [
884 | "proc-macro2",
885 | ]
886 |
887 | [[package]]
888 | name = "radium"
889 | version = "0.7.0"
890 | source = "registry+https://github.com/rust-lang/crates.io-index"
891 | checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
892 |
893 | [[package]]
894 | name = "rancor"
895 | version = "0.1.0"
896 | source = "registry+https://github.com/rust-lang/crates.io-index"
897 | checksum = "caf5f7161924b9d1cea0e4cabc97c372cea92b5f927fc13c6bca67157a0ad947"
898 | dependencies = [
899 | "ptr_meta 0.3.0",
900 | ]
901 |
902 | [[package]]
903 | name = "rand"
904 | version = "0.8.5"
905 | source = "registry+https://github.com/rust-lang/crates.io-index"
906 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
907 | dependencies = [
908 | "rand_core",
909 | ]
910 |
911 | [[package]]
912 | name = "rand_core"
913 | version = "0.6.4"
914 | source = "registry+https://github.com/rust-lang/crates.io-index"
915 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
916 |
917 | [[package]]
918 | name = "redox_syscall"
919 | version = "0.3.5"
920 | source = "registry+https://github.com/rust-lang/crates.io-index"
921 | checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
922 | dependencies = [
923 | "bitflags 1.3.2",
924 | ]
925 |
926 | [[package]]
927 | name = "regex"
928 | version = "1.11.0"
929 | source = "registry+https://github.com/rust-lang/crates.io-index"
930 | checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8"
931 | dependencies = [
932 | "aho-corasick",
933 | "memchr",
934 | "regex-automata 0.4.8",
935 | "regex-syntax 0.8.5",
936 | ]
937 |
938 | [[package]]
939 | name = "regex-automata"
940 | version = "0.1.10"
941 | source = "registry+https://github.com/rust-lang/crates.io-index"
942 | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
943 | dependencies = [
944 | "regex-syntax 0.6.29",
945 | ]
946 |
947 | [[package]]
948 | name = "regex-automata"
949 | version = "0.4.8"
950 | source = "registry+https://github.com/rust-lang/crates.io-index"
951 | checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3"
952 | dependencies = [
953 | "aho-corasick",
954 | "memchr",
955 | "regex-syntax 0.8.5",
956 | ]
957 |
958 | [[package]]
959 | name = "regex-syntax"
960 | version = "0.6.29"
961 | source = "registry+https://github.com/rust-lang/crates.io-index"
962 | checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1"
963 |
964 | [[package]]
965 | name = "regex-syntax"
966 | version = "0.8.5"
967 | source = "registry+https://github.com/rust-lang/crates.io-index"
968 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c"
969 |
970 | [[package]]
971 | name = "relative-path"
972 | version = "1.8.0"
973 | source = "registry+https://github.com/rust-lang/crates.io-index"
974 | checksum = "4bf2521270932c3c7bed1a59151222bd7643c79310f2916f01925e1e16255698"
975 |
976 | [[package]]
977 | name = "rend"
978 | version = "0.5.2"
979 | source = "registry+https://github.com/rust-lang/crates.io-index"
980 | checksum = "a35e8a6bf28cd121053a66aa2e6a2e3eaffad4a60012179f0e864aa5ffeff215"
981 | dependencies = [
982 | "bytecheck",
983 | ]
984 |
985 | [[package]]
986 | name = "rkyv"
987 | version = "0.8.9"
988 | source = "registry+https://github.com/rust-lang/crates.io-index"
989 | checksum = "b11a153aec4a6ab60795f8ebe2923c597b16b05bb1504377451e705ef1a45323"
990 | dependencies = [
991 | "bytecheck",
992 | "bytes",
993 | "hashbrown 0.15.2",
994 | "indexmap",
995 | "munge",
996 | "ptr_meta 0.3.0",
997 | "rancor",
998 | "rend",
999 | "rkyv_derive",
1000 | "tinyvec",
1001 | "uuid",
1002 | ]
1003 |
1004 | [[package]]
1005 | name = "rkyv_derive"
1006 | version = "0.8.9"
1007 | source = "registry+https://github.com/rust-lang/crates.io-index"
1008 | checksum = "beb382a4d9f53bd5c0be86b10d8179c3f8a14c30bf774ff77096ed6581e35981"
1009 | dependencies = [
1010 | "proc-macro2",
1011 | "quote",
1012 | "syn 2.0.87",
1013 | ]
1014 |
1015 | [[package]]
1016 | name = "rustc-hash"
1017 | version = "1.1.0"
1018 | source = "registry+https://github.com/rust-lang/crates.io-index"
1019 | checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
1020 |
1021 | [[package]]
1022 | name = "rustc-hash"
1023 | version = "2.1.1"
1024 | source = "registry+https://github.com/rust-lang/crates.io-index"
1025 | checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
1026 |
1027 | [[package]]
1028 | name = "rustc_version"
1029 | version = "0.2.3"
1030 | source = "registry+https://github.com/rust-lang/crates.io-index"
1031 | checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
1032 | dependencies = [
1033 | "semver 0.9.0",
1034 | ]
1035 |
1036 | [[package]]
1037 | name = "rustix"
1038 | version = "0.38.7"
1039 | source = "registry+https://github.com/rust-lang/crates.io-index"
1040 | checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399"
1041 | dependencies = [
1042 | "bitflags 2.6.0",
1043 | "errno",
1044 | "libc",
1045 | "linux-raw-sys",
1046 | "windows-sys",
1047 | ]
1048 |
1049 | [[package]]
1050 | name = "rustversion"
1051 | version = "1.0.18"
1052 | source = "registry+https://github.com/rust-lang/crates.io-index"
1053 | checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248"
1054 |
1055 | [[package]]
1056 | name = "ryu"
1057 | version = "1.0.15"
1058 | source = "registry+https://github.com/rust-lang/crates.io-index"
1059 | checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
1060 |
1061 | [[package]]
1062 | name = "ryu-js"
1063 | version = "1.0.1"
1064 | source = "registry+https://github.com/rust-lang/crates.io-index"
1065 | checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5"
1066 |
1067 | [[package]]
1068 | name = "scoped-tls"
1069 | version = "1.0.1"
1070 | source = "registry+https://github.com/rust-lang/crates.io-index"
1071 | checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294"
1072 |
1073 | [[package]]
1074 | name = "scopeguard"
1075 | version = "1.2.0"
1076 | source = "registry+https://github.com/rust-lang/crates.io-index"
1077 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1078 |
1079 | [[package]]
1080 | name = "semver"
1081 | version = "0.9.0"
1082 | source = "registry+https://github.com/rust-lang/crates.io-index"
1083 | checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
1084 | dependencies = [
1085 | "semver-parser",
1086 | ]
1087 |
1088 | [[package]]
1089 | name = "semver"
1090 | version = "1.0.18"
1091 | source = "registry+https://github.com/rust-lang/crates.io-index"
1092 | checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
1093 | dependencies = [
1094 | "serde",
1095 | ]
1096 |
1097 | [[package]]
1098 | name = "semver-parser"
1099 | version = "0.7.0"
1100 | source = "registry+https://github.com/rust-lang/crates.io-index"
1101 | checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
1102 |
1103 | [[package]]
1104 | name = "serde"
1105 | version = "1.0.204"
1106 | source = "registry+https://github.com/rust-lang/crates.io-index"
1107 | checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12"
1108 | dependencies = [
1109 | "serde_derive",
1110 | ]
1111 |
1112 | [[package]]
1113 | name = "serde_derive"
1114 | version = "1.0.204"
1115 | source = "registry+https://github.com/rust-lang/crates.io-index"
1116 | checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
1117 | dependencies = [
1118 | "proc-macro2",
1119 | "quote",
1120 | "syn 2.0.87",
1121 | ]
1122 |
1123 | [[package]]
1124 | name = "serde_json"
1125 | version = "1.0.120"
1126 | source = "registry+https://github.com/rust-lang/crates.io-index"
1127 | checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
1128 | dependencies = [
1129 | "itoa",
1130 | "ryu",
1131 | "serde",
1132 | ]
1133 |
1134 | [[package]]
1135 | name = "sha2"
1136 | version = "0.10.8"
1137 | source = "registry+https://github.com/rust-lang/crates.io-index"
1138 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
1139 | dependencies = [
1140 | "cfg-if",
1141 | "cpufeatures",
1142 | "digest",
1143 | ]
1144 |
1145 | [[package]]
1146 | name = "sharded-slab"
1147 | version = "0.1.4"
1148 | source = "registry+https://github.com/rust-lang/crates.io-index"
1149 | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31"
1150 | dependencies = [
1151 | "lazy_static",
1152 | ]
1153 |
1154 | [[package]]
1155 | name = "simd-abstraction"
1156 | version = "0.7.1"
1157 | source = "registry+https://github.com/rust-lang/crates.io-index"
1158 | checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987"
1159 | dependencies = [
1160 | "outref",
1161 | ]
1162 |
1163 | [[package]]
1164 | name = "simdutf8"
1165 | version = "0.1.4"
1166 | source = "registry+https://github.com/rust-lang/crates.io-index"
1167 | checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
1168 |
1169 | [[package]]
1170 | name = "siphasher"
1171 | version = "0.3.10"
1172 | source = "registry+https://github.com/rust-lang/crates.io-index"
1173 | checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de"
1174 |
1175 | [[package]]
1176 | name = "smallvec"
1177 | version = "1.13.1"
1178 | source = "registry+https://github.com/rust-lang/crates.io-index"
1179 | checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
1180 |
1181 | [[package]]
1182 | name = "smartstring"
1183 | version = "1.0.1"
1184 | source = "registry+https://github.com/rust-lang/crates.io-index"
1185 | checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29"
1186 | dependencies = [
1187 | "autocfg",
1188 | "static_assertions",
1189 | "version_check",
1190 | ]
1191 |
1192 | [[package]]
1193 | name = "smawk"
1194 | version = "0.3.1"
1195 | source = "registry+https://github.com/rust-lang/crates.io-index"
1196 | checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
1197 |
1198 | [[package]]
1199 | name = "sourcemap"
1200 | version = "9.0.0"
1201 | source = "registry+https://github.com/rust-lang/crates.io-index"
1202 | checksum = "dab08a862c70980b8e23698b507e272317ae52a608a164a844111f5372374f1f"
1203 | dependencies = [
1204 | "base64-simd",
1205 | "bitvec",
1206 | "data-encoding",
1207 | "debugid",
1208 | "if_chain",
1209 | "rustc-hash 1.1.0",
1210 | "rustc_version",
1211 | "serde",
1212 | "serde_json",
1213 | "unicode-id-start",
1214 | "url",
1215 | ]
1216 |
1217 | [[package]]
1218 | name = "stable_deref_trait"
1219 | version = "1.2.0"
1220 | source = "registry+https://github.com/rust-lang/crates.io-index"
1221 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1222 |
1223 | [[package]]
1224 | name = "stacker"
1225 | version = "0.1.15"
1226 | source = "registry+https://github.com/rust-lang/crates.io-index"
1227 | checksum = "c886bd4480155fd3ef527d45e9ac8dd7118a898a46530b7b94c3e21866259fce"
1228 | dependencies = [
1229 | "cc",
1230 | "cfg-if",
1231 | "libc",
1232 | "psm",
1233 | "winapi",
1234 | ]
1235 |
1236 | [[package]]
1237 | name = "static_assertions"
1238 | version = "1.1.0"
1239 | source = "registry+https://github.com/rust-lang/crates.io-index"
1240 | checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
1241 |
1242 | [[package]]
1243 | name = "string_enum"
1244 | version = "1.0.0"
1245 | source = "registry+https://github.com/rust-lang/crates.io-index"
1246 | checksum = "c9fe66b8ee349846ce2f9557a26b8f1e74843c4a13fb381f9a3d73617a5f956a"
1247 | dependencies = [
1248 | "proc-macro2",
1249 | "quote",
1250 | "swc_macros_common",
1251 | "syn 2.0.87",
1252 | ]
1253 |
1254 | [[package]]
1255 | name = "strsim"
1256 | version = "0.11.1"
1257 | source = "registry+https://github.com/rust-lang/crates.io-index"
1258 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
1259 |
1260 | [[package]]
1261 | name = "swc_allocator"
1262 | version = "1.0.0"
1263 | source = "registry+https://github.com/rust-lang/crates.io-index"
1264 | checksum = "52cacc28f0ada8e4e31a720dd849ff06864b10e6ab0a1aaa99c06456cfe046af"
1265 | dependencies = [
1266 | "bumpalo",
1267 | "hashbrown 0.14.5",
1268 | "ptr_meta 0.1.4",
1269 | "rustc-hash 1.1.0",
1270 | "triomphe",
1271 | ]
1272 |
1273 | [[package]]
1274 | name = "swc_allocator"
1275 | version = "2.0.0"
1276 | source = "registry+https://github.com/rust-lang/crates.io-index"
1277 | checksum = "117d5d3289663f53022ebf157df8a42b3872d7ac759e63abf96b5987b85d4af3"
1278 | dependencies = [
1279 | "bumpalo",
1280 | "hashbrown 0.14.5",
1281 | "ptr_meta 0.3.0",
1282 | "rustc-hash 1.1.0",
1283 | "triomphe",
1284 | ]
1285 |
1286 | [[package]]
1287 | name = "swc_atoms"
1288 | version = "2.0.0"
1289 | source = "registry+https://github.com/rust-lang/crates.io-index"
1290 | checksum = "5d7211e5c57ea972f32b8a104d7006c4a68d094ec30c6a73bcd20d4d6c473c7c"
1291 | dependencies = [
1292 | "hstr",
1293 | "once_cell",
1294 | "rustc-hash 1.1.0",
1295 | "serde",
1296 | ]
1297 |
1298 | [[package]]
1299 | name = "swc_atoms"
1300 | version = "3.1.0"
1301 | source = "registry+https://github.com/rust-lang/crates.io-index"
1302 | checksum = "c24077f986f0bc1c07823f850f688dd9be91b186efdb03fe1d52f7c2f2a4a346"
1303 | dependencies = [
1304 | "bytecheck",
1305 | "hstr",
1306 | "once_cell",
1307 | "rancor",
1308 | "rkyv",
1309 | "rustc-hash 2.1.1",
1310 | "serde",
1311 | ]
1312 |
1313 | [[package]]
1314 | name = "swc_common"
1315 | version = "4.0.1"
1316 | source = "registry+https://github.com/rust-lang/crates.io-index"
1317 | checksum = "4f87a21612a324493fd065e9c6fea960b4031088a213db782e2ca71d2fabb3ec"
1318 | dependencies = [
1319 | "ast_node 2.0.0",
1320 | "better_scoped_tls",
1321 | "cfg-if",
1322 | "either",
1323 | "from_variant",
1324 | "new_debug_unreachable",
1325 | "num-bigint",
1326 | "once_cell",
1327 | "parking_lot",
1328 | "rustc-hash 1.1.0",
1329 | "serde",
1330 | "siphasher",
1331 | "swc_allocator 1.0.0",
1332 | "swc_atoms 2.0.0",
1333 | "swc_eq_ignore_macros",
1334 | "swc_visit",
1335 | "termcolor",
1336 | "tracing",
1337 | "unicode-width",
1338 | "url",
1339 | ]
1340 |
1341 | [[package]]
1342 | name = "swc_common"
1343 | version = "5.0.0"
1344 | source = "registry+https://github.com/rust-lang/crates.io-index"
1345 | checksum = "a521e8120dc0401580864a643b5bffa035c29fc3fc41697c972743d4f008ed22"
1346 | dependencies = [
1347 | "anyhow",
1348 | "ast_node 3.0.0",
1349 | "better_scoped_tls",
1350 | "bytecheck",
1351 | "cfg-if",
1352 | "either",
1353 | "from_variant",
1354 | "new_debug_unreachable",
1355 | "num-bigint",
1356 | "once_cell",
1357 | "parking_lot",
1358 | "rancor",
1359 | "rkyv",
1360 | "rustc-hash 1.1.0",
1361 | "serde",
1362 | "siphasher",
1363 | "sourcemap",
1364 | "swc_allocator 2.0.0",
1365 | "swc_atoms 3.1.0",
1366 | "swc_eq_ignore_macros",
1367 | "swc_visit",
1368 | "termcolor",
1369 | "tracing",
1370 | "unicode-width",
1371 | "url",
1372 | ]
1373 |
1374 | [[package]]
1375 | name = "swc_core"
1376 | version = "10.7.0"
1377 | source = "registry+https://github.com/rust-lang/crates.io-index"
1378 | checksum = "9a2e50df9008ca01c05c914d3970b74e6b32ae7cbafb4fb0776f6e46b6db891b"
1379 | dependencies = [
1380 | "once_cell",
1381 | "swc_allocator 2.0.0",
1382 | "swc_atoms 3.1.0",
1383 | "swc_common 5.0.0",
1384 | "swc_ecma_ast",
1385 | "swc_ecma_parser",
1386 | "swc_ecma_transforms_base",
1387 | "swc_ecma_transforms_testing",
1388 | "swc_ecma_utils",
1389 | "swc_ecma_visit",
1390 | "swc_plugin",
1391 | "swc_plugin_macro",
1392 | "swc_plugin_proxy",
1393 | "vergen",
1394 | ]
1395 |
1396 | [[package]]
1397 | name = "swc_ecma_ast"
1398 | version = "5.0.3"
1399 | source = "registry+https://github.com/rust-lang/crates.io-index"
1400 | checksum = "a05e7518b3052102506969009cabb027a88259ccde64ed675aa4ea8703b651f5"
1401 | dependencies = [
1402 | "bitflags 2.6.0",
1403 | "bytecheck",
1404 | "is-macro",
1405 | "num-bigint",
1406 | "phf",
1407 | "rancor",
1408 | "rkyv",
1409 | "scoped-tls",
1410 | "string_enum",
1411 | "swc_atoms 3.1.0",
1412 | "swc_common 5.0.0",
1413 | "swc_visit",
1414 | "unicode-id-start",
1415 | ]
1416 |
1417 | [[package]]
1418 | name = "swc_ecma_codegen"
1419 | version = "5.1.0"
1420 | source = "registry+https://github.com/rust-lang/crates.io-index"
1421 | checksum = "389a3f4f9f28425fe0e3994ade4f099ad4f3a788cfe781cba36a9f4288eae222"
1422 | dependencies = [
1423 | "memchr",
1424 | "num-bigint",
1425 | "once_cell",
1426 | "regex",
1427 | "serde",
1428 | "sourcemap",
1429 | "swc_allocator 2.0.0",
1430 | "swc_atoms 3.1.0",
1431 | "swc_common 5.0.0",
1432 | "swc_ecma_ast",
1433 | "swc_ecma_codegen_macros",
1434 | "tracing",
1435 | ]
1436 |
1437 | [[package]]
1438 | name = "swc_ecma_codegen_macros"
1439 | version = "1.0.0"
1440 | source = "registry+https://github.com/rust-lang/crates.io-index"
1441 | checksum = "5f9a42f479a6475647e248fa9750982c87cd985e19d1016a1fc18a70682305d1"
1442 | dependencies = [
1443 | "proc-macro2",
1444 | "quote",
1445 | "swc_macros_common",
1446 | "syn 2.0.87",
1447 | ]
1448 |
1449 | [[package]]
1450 | name = "swc_ecma_parser"
1451 | version = "6.0.2"
1452 | source = "registry+https://github.com/rust-lang/crates.io-index"
1453 | checksum = "b92d3a25349d7f612c38d940f09f9c19c7b7aa3bf4d22fbe31ea44fd5354de02"
1454 | dependencies = [
1455 | "either",
1456 | "new_debug_unreachable",
1457 | "num-bigint",
1458 | "num-traits",
1459 | "phf",
1460 | "serde",
1461 | "smallvec",
1462 | "smartstring",
1463 | "stacker",
1464 | "swc_atoms 3.1.0",
1465 | "swc_common 5.0.0",
1466 | "swc_ecma_ast",
1467 | "tracing",
1468 | "typed-arena",
1469 | ]
1470 |
1471 | [[package]]
1472 | name = "swc_ecma_testing"
1473 | version = "5.0.0"
1474 | source = "registry+https://github.com/rust-lang/crates.io-index"
1475 | checksum = "e8ac0df7dbb231e54ebbdf9b5f4f83cc3e3830e7329fa4365e5da510f373f158"
1476 | dependencies = [
1477 | "anyhow",
1478 | "hex",
1479 | "sha2",
1480 | "testing 5.0.0",
1481 | "tracing",
1482 | ]
1483 |
1484 | [[package]]
1485 | name = "swc_ecma_transforms_base"
1486 | version = "7.1.1"
1487 | source = "registry+https://github.com/rust-lang/crates.io-index"
1488 | checksum = "4596fe5bcb4ed0836c71e69fb4cbf0071bb832669ae57ba28aaa4b6a67b6ddfd"
1489 | dependencies = [
1490 | "better_scoped_tls",
1491 | "bitflags 2.6.0",
1492 | "indexmap",
1493 | "once_cell",
1494 | "phf",
1495 | "rustc-hash 1.1.0",
1496 | "serde",
1497 | "smallvec",
1498 | "swc_atoms 3.1.0",
1499 | "swc_common 5.0.0",
1500 | "swc_ecma_ast",
1501 | "swc_ecma_parser",
1502 | "swc_ecma_utils",
1503 | "swc_ecma_visit",
1504 | "swc_parallel",
1505 | "tracing",
1506 | ]
1507 |
1508 | [[package]]
1509 | name = "swc_ecma_transforms_testing"
1510 | version = "7.0.1"
1511 | source = "registry+https://github.com/rust-lang/crates.io-index"
1512 | checksum = "6595f97e02012d9d284c34c6f328be674a8631502629c921f606da88b59b3743"
1513 | dependencies = [
1514 | "ansi_term",
1515 | "anyhow",
1516 | "base64",
1517 | "hex",
1518 | "serde",
1519 | "serde_json",
1520 | "sha2",
1521 | "sourcemap",
1522 | "swc_allocator 2.0.0",
1523 | "swc_common 5.0.0",
1524 | "swc_ecma_ast",
1525 | "swc_ecma_codegen",
1526 | "swc_ecma_parser",
1527 | "swc_ecma_testing",
1528 | "swc_ecma_transforms_base",
1529 | "swc_ecma_utils",
1530 | "swc_ecma_visit",
1531 | "tempfile",
1532 | "testing 5.0.0",
1533 | ]
1534 |
1535 | [[package]]
1536 | name = "swc_ecma_utils"
1537 | version = "7.0.4"
1538 | source = "registry+https://github.com/rust-lang/crates.io-index"
1539 | checksum = "971099632f1a9117debf5ca8451615c3014eea519e9ad31e386396b6e0ac8fb5"
1540 | dependencies = [
1541 | "indexmap",
1542 | "num_cpus",
1543 | "once_cell",
1544 | "rustc-hash 1.1.0",
1545 | "ryu-js",
1546 | "swc_atoms 3.1.0",
1547 | "swc_common 5.0.0",
1548 | "swc_ecma_ast",
1549 | "swc_ecma_visit",
1550 | "swc_parallel",
1551 | "tracing",
1552 | "unicode-id",
1553 | ]
1554 |
1555 | [[package]]
1556 | name = "swc_ecma_visit"
1557 | version = "5.0.0"
1558 | source = "registry+https://github.com/rust-lang/crates.io-index"
1559 | checksum = "b04c06c1805bda18c27165560f1617a57453feb9fb0638d90839053641af42d4"
1560 | dependencies = [
1561 | "new_debug_unreachable",
1562 | "num-bigint",
1563 | "swc_atoms 3.1.0",
1564 | "swc_common 5.0.0",
1565 | "swc_ecma_ast",
1566 | "swc_visit",
1567 | "tracing",
1568 | ]
1569 |
1570 | [[package]]
1571 | name = "swc_eq_ignore_macros"
1572 | version = "1.0.0"
1573 | source = "registry+https://github.com/rust-lang/crates.io-index"
1574 | checksum = "e96e15288bf385ab85eb83cff7f9e2d834348da58d0a31b33bdb572e66ee413e"
1575 | dependencies = [
1576 | "proc-macro2",
1577 | "quote",
1578 | "syn 2.0.87",
1579 | ]
1580 |
1581 | [[package]]
1582 | name = "swc_error_reporters"
1583 | version = "5.0.0"
1584 | source = "registry+https://github.com/rust-lang/crates.io-index"
1585 | checksum = "fb4a3c124af5d297d98e6c18776ba04024087cde14602621017e8e9c6cd1c2d1"
1586 | dependencies = [
1587 | "anyhow",
1588 | "miette",
1589 | "once_cell",
1590 | "parking_lot",
1591 | "swc_common 4.0.1",
1592 | ]
1593 |
1594 | [[package]]
1595 | name = "swc_error_reporters"
1596 | version = "6.0.0"
1597 | source = "registry+https://github.com/rust-lang/crates.io-index"
1598 | checksum = "4f741b530b2df577a287e193c4a111182de01b43361617af228ec9e6e6222fa4"
1599 | dependencies = [
1600 | "anyhow",
1601 | "miette",
1602 | "once_cell",
1603 | "parking_lot",
1604 | "swc_common 5.0.0",
1605 | ]
1606 |
1607 | [[package]]
1608 | name = "swc_macros_common"
1609 | version = "1.0.0"
1610 | source = "registry+https://github.com/rust-lang/crates.io-index"
1611 | checksum = "a509f56fca05b39ba6c15f3e58636c3924c78347d63853632ed2ffcb6f5a0ac7"
1612 | dependencies = [
1613 | "proc-macro2",
1614 | "quote",
1615 | "syn 2.0.87",
1616 | ]
1617 |
1618 | [[package]]
1619 | name = "swc_mut_cjs_exports"
1620 | version = "10.7.0"
1621 | dependencies = [
1622 | "rustc-hash 2.1.1",
1623 | "swc_core",
1624 | "testing 4.0.0",
1625 | ]
1626 |
1627 | [[package]]
1628 | name = "swc_parallel"
1629 | version = "1.3.0"
1630 | source = "registry+https://github.com/rust-lang/crates.io-index"
1631 | checksum = "8f16052d5123ec45c1c49100781363f3f4e4a6be2da6d82f473b79db1e3abeb8"
1632 | dependencies = [
1633 | "once_cell",
1634 | ]
1635 |
1636 | [[package]]
1637 | name = "swc_plugin"
1638 | version = "1.0.0"
1639 | source = "registry+https://github.com/rust-lang/crates.io-index"
1640 | checksum = "6b45099a38ed45528bef939d0eac1a0c1347749d0c67d3dd744d545316c5fd05"
1641 | dependencies = [
1642 | "once_cell",
1643 | ]
1644 |
1645 | [[package]]
1646 | name = "swc_plugin_macro"
1647 | version = "1.0.0"
1648 | source = "registry+https://github.com/rust-lang/crates.io-index"
1649 | checksum = "0917ccfdcd3fa6cf41bdacef2388702a3b274f9ea708d930e1e8db37c7c3e1c6"
1650 | dependencies = [
1651 | "proc-macro2",
1652 | "quote",
1653 | "syn 2.0.87",
1654 | ]
1655 |
1656 | [[package]]
1657 | name = "swc_plugin_proxy"
1658 | version = "5.0.0"
1659 | source = "registry+https://github.com/rust-lang/crates.io-index"
1660 | checksum = "5aad63126fed3ee4885416b2f206153a10b51ca13808cdc8ff68f244d1bd32ec"
1661 | dependencies = [
1662 | "better_scoped_tls",
1663 | "bytecheck",
1664 | "rancor",
1665 | "rkyv",
1666 | "swc_common 5.0.0",
1667 | "swc_ecma_ast",
1668 | "swc_trace_macro",
1669 | "tracing",
1670 | ]
1671 |
1672 | [[package]]
1673 | name = "swc_trace_macro"
1674 | version = "2.0.0"
1675 | source = "registry+https://github.com/rust-lang/crates.io-index"
1676 | checksum = "4c78717a841565df57f811376a3d19c9156091c55175e12d378f3a522de70cef"
1677 | dependencies = [
1678 | "proc-macro2",
1679 | "quote",
1680 | "syn 2.0.87",
1681 | ]
1682 |
1683 | [[package]]
1684 | name = "swc_visit"
1685 | version = "2.0.0"
1686 | source = "registry+https://github.com/rust-lang/crates.io-index"
1687 | checksum = "9138b6a36bbe76dd6753c4c0794f7e26480ea757bee499738bedbbb3ae3ec5f3"
1688 | dependencies = [
1689 | "either",
1690 | "new_debug_unreachable",
1691 | ]
1692 |
1693 | [[package]]
1694 | name = "syn"
1695 | version = "1.0.109"
1696 | source = "registry+https://github.com/rust-lang/crates.io-index"
1697 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1698 | dependencies = [
1699 | "proc-macro2",
1700 | "quote",
1701 | "unicode-ident",
1702 | ]
1703 |
1704 | [[package]]
1705 | name = "syn"
1706 | version = "2.0.87"
1707 | source = "registry+https://github.com/rust-lang/crates.io-index"
1708 | checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
1709 | dependencies = [
1710 | "proc-macro2",
1711 | "quote",
1712 | "unicode-ident",
1713 | ]
1714 |
1715 | [[package]]
1716 | name = "tap"
1717 | version = "1.0.1"
1718 | source = "registry+https://github.com/rust-lang/crates.io-index"
1719 | checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
1720 |
1721 | [[package]]
1722 | name = "tempfile"
1723 | version = "3.7.1"
1724 | source = "registry+https://github.com/rust-lang/crates.io-index"
1725 | checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
1726 | dependencies = [
1727 | "cfg-if",
1728 | "fastrand",
1729 | "redox_syscall",
1730 | "rustix",
1731 | "windows-sys",
1732 | ]
1733 |
1734 | [[package]]
1735 | name = "termcolor"
1736 | version = "1.2.0"
1737 | source = "registry+https://github.com/rust-lang/crates.io-index"
1738 | checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
1739 | dependencies = [
1740 | "winapi-util",
1741 | ]
1742 |
1743 | [[package]]
1744 | name = "testing"
1745 | version = "4.0.0"
1746 | source = "registry+https://github.com/rust-lang/crates.io-index"
1747 | checksum = "1c6b200c27382caadd583563c79cdf870d854e14c4c078731d447ecbfe27c35f"
1748 | dependencies = [
1749 | "ansi_term",
1750 | "cargo_metadata",
1751 | "difference",
1752 | "once_cell",
1753 | "pretty_assertions",
1754 | "regex",
1755 | "serde",
1756 | "serde_json",
1757 | "swc_common 4.0.1",
1758 | "swc_error_reporters 5.0.0",
1759 | "testing_macros",
1760 | "tracing",
1761 | "tracing-subscriber",
1762 | ]
1763 |
1764 | [[package]]
1765 | name = "testing"
1766 | version = "5.0.0"
1767 | source = "registry+https://github.com/rust-lang/crates.io-index"
1768 | checksum = "fd6bafc289474aa56e277aa3f54f91cfdaac75656b6bea37af999bc91ba2b49f"
1769 | dependencies = [
1770 | "ansi_term",
1771 | "cargo_metadata",
1772 | "difference",
1773 | "once_cell",
1774 | "pretty_assertions",
1775 | "regex",
1776 | "serde",
1777 | "serde_json",
1778 | "swc_common 5.0.0",
1779 | "swc_error_reporters 6.0.0",
1780 | "testing_macros",
1781 | "tracing",
1782 | "tracing-subscriber",
1783 | ]
1784 |
1785 | [[package]]
1786 | name = "testing_macros"
1787 | version = "1.0.0"
1788 | source = "registry+https://github.com/rust-lang/crates.io-index"
1789 | checksum = "a2d27bf245b90a80d5aa231133418ae7db98f032855ce5292e12071ab29c4b26"
1790 | dependencies = [
1791 | "anyhow",
1792 | "glob",
1793 | "once_cell",
1794 | "proc-macro2",
1795 | "quote",
1796 | "regex",
1797 | "relative-path",
1798 | "syn 2.0.87",
1799 | ]
1800 |
1801 | [[package]]
1802 | name = "textwrap"
1803 | version = "0.16.1"
1804 | source = "registry+https://github.com/rust-lang/crates.io-index"
1805 | checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
1806 | dependencies = [
1807 | "smawk",
1808 | "unicode-linebreak",
1809 | "unicode-width",
1810 | ]
1811 |
1812 | [[package]]
1813 | name = "thiserror"
1814 | version = "1.0.63"
1815 | source = "registry+https://github.com/rust-lang/crates.io-index"
1816 | checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724"
1817 | dependencies = [
1818 | "thiserror-impl",
1819 | ]
1820 |
1821 | [[package]]
1822 | name = "thiserror-impl"
1823 | version = "1.0.63"
1824 | source = "registry+https://github.com/rust-lang/crates.io-index"
1825 | checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261"
1826 | dependencies = [
1827 | "proc-macro2",
1828 | "quote",
1829 | "syn 2.0.87",
1830 | ]
1831 |
1832 | [[package]]
1833 | name = "thread_local"
1834 | version = "1.1.7"
1835 | source = "registry+https://github.com/rust-lang/crates.io-index"
1836 | checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152"
1837 | dependencies = [
1838 | "cfg-if",
1839 | "once_cell",
1840 | ]
1841 |
1842 | [[package]]
1843 | name = "tinyvec"
1844 | version = "1.6.0"
1845 | source = "registry+https://github.com/rust-lang/crates.io-index"
1846 | checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
1847 | dependencies = [
1848 | "tinyvec_macros",
1849 | ]
1850 |
1851 | [[package]]
1852 | name = "tinyvec_macros"
1853 | version = "0.1.1"
1854 | source = "registry+https://github.com/rust-lang/crates.io-index"
1855 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
1856 |
1857 | [[package]]
1858 | name = "tracing"
1859 | version = "0.1.40"
1860 | source = "registry+https://github.com/rust-lang/crates.io-index"
1861 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
1862 | dependencies = [
1863 | "pin-project-lite",
1864 | "tracing-attributes",
1865 | "tracing-core",
1866 | ]
1867 |
1868 | [[package]]
1869 | name = "tracing-attributes"
1870 | version = "0.1.27"
1871 | source = "registry+https://github.com/rust-lang/crates.io-index"
1872 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
1873 | dependencies = [
1874 | "proc-macro2",
1875 | "quote",
1876 | "syn 2.0.87",
1877 | ]
1878 |
1879 | [[package]]
1880 | name = "tracing-core"
1881 | version = "0.1.32"
1882 | source = "registry+https://github.com/rust-lang/crates.io-index"
1883 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
1884 | dependencies = [
1885 | "once_cell",
1886 | "valuable",
1887 | ]
1888 |
1889 | [[package]]
1890 | name = "tracing-log"
1891 | version = "0.2.0"
1892 | source = "registry+https://github.com/rust-lang/crates.io-index"
1893 | checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
1894 | dependencies = [
1895 | "log",
1896 | "once_cell",
1897 | "tracing-core",
1898 | ]
1899 |
1900 | [[package]]
1901 | name = "tracing-subscriber"
1902 | version = "0.3.18"
1903 | source = "registry+https://github.com/rust-lang/crates.io-index"
1904 | checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
1905 | dependencies = [
1906 | "matchers",
1907 | "nu-ansi-term",
1908 | "once_cell",
1909 | "regex",
1910 | "sharded-slab",
1911 | "smallvec",
1912 | "thread_local",
1913 | "tracing",
1914 | "tracing-core",
1915 | "tracing-log",
1916 | ]
1917 |
1918 | [[package]]
1919 | name = "triomphe"
1920 | version = "0.1.13"
1921 | source = "registry+https://github.com/rust-lang/crates.io-index"
1922 | checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369"
1923 | dependencies = [
1924 | "serde",
1925 | "stable_deref_trait",
1926 | ]
1927 |
1928 | [[package]]
1929 | name = "typed-arena"
1930 | version = "2.0.2"
1931 | source = "registry+https://github.com/rust-lang/crates.io-index"
1932 | checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a"
1933 |
1934 | [[package]]
1935 | name = "typenum"
1936 | version = "1.16.0"
1937 | source = "registry+https://github.com/rust-lang/crates.io-index"
1938 | checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
1939 |
1940 | [[package]]
1941 | name = "unicode-bidi"
1942 | version = "0.3.13"
1943 | source = "registry+https://github.com/rust-lang/crates.io-index"
1944 | checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
1945 |
1946 | [[package]]
1947 | name = "unicode-id"
1948 | version = "0.3.3"
1949 | source = "registry+https://github.com/rust-lang/crates.io-index"
1950 | checksum = "d70b6494226b36008c8366c288d77190b3fad2eb4c10533139c1c1f461127f1a"
1951 |
1952 | [[package]]
1953 | name = "unicode-id-start"
1954 | version = "1.2.0"
1955 | source = "registry+https://github.com/rust-lang/crates.io-index"
1956 | checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea"
1957 |
1958 | [[package]]
1959 | name = "unicode-ident"
1960 | version = "1.0.11"
1961 | source = "registry+https://github.com/rust-lang/crates.io-index"
1962 | checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
1963 |
1964 | [[package]]
1965 | name = "unicode-linebreak"
1966 | version = "0.1.4"
1967 | source = "registry+https://github.com/rust-lang/crates.io-index"
1968 | checksum = "c5faade31a542b8b35855fff6e8def199853b2da8da256da52f52f1316ee3137"
1969 | dependencies = [
1970 | "hashbrown 0.12.3",
1971 | "regex",
1972 | ]
1973 |
1974 | [[package]]
1975 | name = "unicode-normalization"
1976 | version = "0.1.22"
1977 | source = "registry+https://github.com/rust-lang/crates.io-index"
1978 | checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
1979 | dependencies = [
1980 | "tinyvec",
1981 | ]
1982 |
1983 | [[package]]
1984 | name = "unicode-width"
1985 | version = "0.1.13"
1986 | source = "registry+https://github.com/rust-lang/crates.io-index"
1987 | checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
1988 |
1989 | [[package]]
1990 | name = "url"
1991 | version = "2.4.0"
1992 | source = "registry+https://github.com/rust-lang/crates.io-index"
1993 | checksum = "50bff7831e19200a85b17131d085c25d7811bc4e186efdaf54bbd132994a88cb"
1994 | dependencies = [
1995 | "form_urlencoded",
1996 | "idna",
1997 | "percent-encoding",
1998 | ]
1999 |
2000 | [[package]]
2001 | name = "uuid"
2002 | version = "1.4.1"
2003 | source = "registry+https://github.com/rust-lang/crates.io-index"
2004 | checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d"
2005 |
2006 | [[package]]
2007 | name = "valuable"
2008 | version = "0.1.0"
2009 | source = "registry+https://github.com/rust-lang/crates.io-index"
2010 | checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
2011 |
2012 | [[package]]
2013 | name = "vergen"
2014 | version = "9.0.1"
2015 | source = "registry+https://github.com/rust-lang/crates.io-index"
2016 | checksum = "349ed9e45296a581f455bc18039878f409992999bc1d5da12a6800eb18c8752f"
2017 | dependencies = [
2018 | "anyhow",
2019 | "cargo_metadata",
2020 | "derive_builder",
2021 | "regex",
2022 | "rustversion",
2023 | "vergen-lib",
2024 | ]
2025 |
2026 | [[package]]
2027 | name = "vergen-lib"
2028 | version = "0.1.4"
2029 | source = "registry+https://github.com/rust-lang/crates.io-index"
2030 | checksum = "229eaddb0050920816cf051e619affaf18caa3dd512de8de5839ccbc8e53abb0"
2031 | dependencies = [
2032 | "anyhow",
2033 | "derive_builder",
2034 | "rustversion",
2035 | ]
2036 |
2037 | [[package]]
2038 | name = "version_check"
2039 | version = "0.9.4"
2040 | source = "registry+https://github.com/rust-lang/crates.io-index"
2041 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
2042 |
2043 | [[package]]
2044 | name = "wasi"
2045 | version = "0.11.0+wasi-snapshot-preview1"
2046 | source = "registry+https://github.com/rust-lang/crates.io-index"
2047 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
2048 |
2049 | [[package]]
2050 | name = "winapi"
2051 | version = "0.3.9"
2052 | source = "registry+https://github.com/rust-lang/crates.io-index"
2053 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
2054 | dependencies = [
2055 | "winapi-i686-pc-windows-gnu",
2056 | "winapi-x86_64-pc-windows-gnu",
2057 | ]
2058 |
2059 | [[package]]
2060 | name = "winapi-i686-pc-windows-gnu"
2061 | version = "0.4.0"
2062 | source = "registry+https://github.com/rust-lang/crates.io-index"
2063 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
2064 |
2065 | [[package]]
2066 | name = "winapi-util"
2067 | version = "0.1.5"
2068 | source = "registry+https://github.com/rust-lang/crates.io-index"
2069 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
2070 | dependencies = [
2071 | "winapi",
2072 | ]
2073 |
2074 | [[package]]
2075 | name = "winapi-x86_64-pc-windows-gnu"
2076 | version = "0.4.0"
2077 | source = "registry+https://github.com/rust-lang/crates.io-index"
2078 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
2079 |
2080 | [[package]]
2081 | name = "windows-sys"
2082 | version = "0.48.0"
2083 | source = "registry+https://github.com/rust-lang/crates.io-index"
2084 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
2085 | dependencies = [
2086 | "windows-targets",
2087 | ]
2088 |
2089 | [[package]]
2090 | name = "windows-targets"
2091 | version = "0.48.1"
2092 | source = "registry+https://github.com/rust-lang/crates.io-index"
2093 | checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
2094 | dependencies = [
2095 | "windows_aarch64_gnullvm",
2096 | "windows_aarch64_msvc",
2097 | "windows_i686_gnu",
2098 | "windows_i686_msvc",
2099 | "windows_x86_64_gnu",
2100 | "windows_x86_64_gnullvm",
2101 | "windows_x86_64_msvc",
2102 | ]
2103 |
2104 | [[package]]
2105 | name = "windows_aarch64_gnullvm"
2106 | version = "0.48.0"
2107 | source = "registry+https://github.com/rust-lang/crates.io-index"
2108 | checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
2109 |
2110 | [[package]]
2111 | name = "windows_aarch64_msvc"
2112 | version = "0.48.0"
2113 | source = "registry+https://github.com/rust-lang/crates.io-index"
2114 | checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
2115 |
2116 | [[package]]
2117 | name = "windows_i686_gnu"
2118 | version = "0.48.0"
2119 | source = "registry+https://github.com/rust-lang/crates.io-index"
2120 | checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
2121 |
2122 | [[package]]
2123 | name = "windows_i686_msvc"
2124 | version = "0.48.0"
2125 | source = "registry+https://github.com/rust-lang/crates.io-index"
2126 | checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
2127 |
2128 | [[package]]
2129 | name = "windows_x86_64_gnu"
2130 | version = "0.48.0"
2131 | source = "registry+https://github.com/rust-lang/crates.io-index"
2132 | checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
2133 |
2134 | [[package]]
2135 | name = "windows_x86_64_gnullvm"
2136 | version = "0.48.0"
2137 | source = "registry+https://github.com/rust-lang/crates.io-index"
2138 | checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
2139 |
2140 | [[package]]
2141 | name = "windows_x86_64_msvc"
2142 | version = "0.48.0"
2143 | source = "registry+https://github.com/rust-lang/crates.io-index"
2144 | checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
2145 |
2146 | [[package]]
2147 | name = "wyz"
2148 | version = "0.5.1"
2149 | source = "registry+https://github.com/rust-lang/crates.io-index"
2150 | checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
2151 | dependencies = [
2152 | "tap",
2153 | ]
2154 |
2155 | [[package]]
2156 | name = "yansi"
2157 | version = "0.5.1"
2158 | source = "registry+https://github.com/rust-lang/crates.io-index"
2159 | checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
2160 |
2161 | [[package]]
2162 | name = "zerocopy"
2163 | version = "0.7.35"
2164 | source = "registry+https://github.com/rust-lang/crates.io-index"
2165 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
2166 | dependencies = [
2167 | "zerocopy-derive",
2168 | ]
2169 |
2170 | [[package]]
2171 | name = "zerocopy-derive"
2172 | version = "0.7.35"
2173 | source = "registry+https://github.com/rust-lang/crates.io-index"
2174 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
2175 | dependencies = [
2176 | "proc-macro2",
2177 | "quote",
2178 | "syn 2.0.87",
2179 | ]
2180 |
--------------------------------------------------------------------------------