turbopack_ecmascript/
runtime_functions.rs

1use std::fmt::{Display, Formatter};
2
3use swc_core::ecma::ast::{Expr, MemberExpr, MemberProp};
4use turbopack_core::compile_time_info::FreeVarReference;
5
6pub struct TurbopackRuntimeFunctionShortcut {
7    pub shortcut: &'static str,
8    pub full: &'static str,
9}
10
11impl TurbopackRuntimeFunctionShortcut {
12    pub const fn new(full: &'static str, shortcut: &'static str) -> Self {
13        Self { full, shortcut }
14    }
15}
16
17impl Display for TurbopackRuntimeFunctionShortcut {
18    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19        f.write_str(self.full)
20    }
21}
22
23impl From<&TurbopackRuntimeFunctionShortcut> for FreeVarReference {
24    fn from(val: &TurbopackRuntimeFunctionShortcut) -> Self {
25        FreeVarReference::Member("__turbopack_context__".into(), val.shortcut.into())
26    }
27}
28
29impl From<&TurbopackRuntimeFunctionShortcut> for Expr {
30    fn from(val: &TurbopackRuntimeFunctionShortcut) -> Self {
31        Expr::Member(MemberExpr {
32            obj: Box::new(Expr::Ident("__turbopack_context__".into())),
33            prop: MemberProp::Ident(val.shortcut.into()),
34            ..Default::default()
35        })
36    }
37}
38
39pub const TURBOPACK_REQUIRE: &TurbopackRuntimeFunctionShortcut =
40    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.r", "r");
41pub const TURBOPACK_MODULE_CONTEXT: &TurbopackRuntimeFunctionShortcut =
42    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.f", "f");
43pub const TURBOPACK_IMPORT: &TurbopackRuntimeFunctionShortcut =
44    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.i", "i");
45pub const TURBOPACK_ESM: &TurbopackRuntimeFunctionShortcut =
46    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.s", "s");
47pub const TURBOPACK_EXPORT_VALUE: &TurbopackRuntimeFunctionShortcut =
48    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.v", "v");
49pub const TURBOPACK_EXPORT_NAMESPACE: &TurbopackRuntimeFunctionShortcut =
50    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.n", "n");
51pub const TURBOPACK_CACHE: &TurbopackRuntimeFunctionShortcut =
52    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.c", "c");
53pub const TURBOPACK_MODULES: &TurbopackRuntimeFunctionShortcut =
54    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.M", "M");
55pub const TURBOPACK_LOAD: &TurbopackRuntimeFunctionShortcut =
56    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.l", "l");
57pub const TURBOPACK_LOAD_BY_URL: &TurbopackRuntimeFunctionShortcut =
58    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.L", "L");
59pub const TURBOPACK_DYNAMIC: &TurbopackRuntimeFunctionShortcut =
60    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.j", "j");
61pub const TURBOPACK_RESOLVE_ABSOLUTE_PATH: &TurbopackRuntimeFunctionShortcut =
62    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.P", "P");
63pub const TURBOPACK_RELATIVE_URL: &TurbopackRuntimeFunctionShortcut =
64    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.U", "U");
65pub const TURBOPACK_RESOLVE_MODULE_ID_PATH: &TurbopackRuntimeFunctionShortcut =
66    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.R", "R");
67pub const TURBOPACK_WORKER_BLOB_URL: &TurbopackRuntimeFunctionShortcut =
68    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.b", "b");
69pub const TURBOPACK_ASYNC_MODULE: &TurbopackRuntimeFunctionShortcut =
70    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.a", "a");
71pub const TURBOPACK_EXTERNAL_REQUIRE: &TurbopackRuntimeFunctionShortcut =
72    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.x", "x");
73pub const TURBOPACK_EXTERNAL_IMPORT: &TurbopackRuntimeFunctionShortcut =
74    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.y", "y");
75pub const TURBOPACK_REFRESH: &TurbopackRuntimeFunctionShortcut =
76    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.k", "k");
77pub const TURBOPACK_REQUIRE_STUB: &TurbopackRuntimeFunctionShortcut =
78    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.z", "z");
79pub const TURBOPACK_REQUIRE_REAL: &TurbopackRuntimeFunctionShortcut =
80    &TurbopackRuntimeFunctionShortcut::new("__turbopack_context__.t", "t");
81
82/// Adding an entry to this list will automatically ensure that `__turbopack_XXX__` can be called
83/// from user code (by inserting a replacement into free_var_references)
84pub const TURBOPACK_RUNTIME_FUNCTION_SHORTCUTS: [(&str, &TurbopackRuntimeFunctionShortcut); 21] = [
85    ("__turbopack_require__", TURBOPACK_REQUIRE),
86    ("__turbopack_module_context__", TURBOPACK_MODULE_CONTEXT),
87    ("__turbopack_import__", TURBOPACK_IMPORT),
88    ("__turbopack_esm__", TURBOPACK_ESM),
89    ("__turbopack_export_value__", TURBOPACK_EXPORT_VALUE),
90    ("__turbopack_export_namespace__", TURBOPACK_EXPORT_NAMESPACE),
91    ("__turbopack_cache__", TURBOPACK_CACHE),
92    ("__turbopack_modules__", TURBOPACK_MODULES),
93    ("__turbopack_load__", TURBOPACK_LOAD),
94    ("__turbopack_load_by_url__", TURBOPACK_LOAD_BY_URL),
95    ("__turbopack_dynamic__", TURBOPACK_DYNAMIC),
96    (
97        "__turbopack_resolve_absolute_path__",
98        TURBOPACK_RESOLVE_ABSOLUTE_PATH,
99    ),
100    ("__turbopack_relative_url__", TURBOPACK_RELATIVE_URL),
101    (
102        "__turbopack_resolve_module_id_path__",
103        TURBOPACK_RESOLVE_MODULE_ID_PATH,
104    ),
105    ("__turbopack_worker_blob_url__", TURBOPACK_WORKER_BLOB_URL),
106    ("__turbopack_async_module__", TURBOPACK_ASYNC_MODULE),
107    ("__turbopack_external_require__", TURBOPACK_EXTERNAL_REQUIRE),
108    ("__turbopack_external_import__", TURBOPACK_EXTERNAL_IMPORT),
109    ("__turbopack_refresh__", TURBOPACK_REFRESH),
110    ("__turbopack_require_stub__", TURBOPACK_REQUIRE_STUB),
111    ("__turbopack_require_real__", TURBOPACK_REQUIRE_REAL),
112];