Skip to main content

use_js/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4pub mod prelude;
5
6#[cfg(feature = "angular")]
7pub mod angular {
8    pub use use_angular::*;
9}
10#[cfg(feature = "astro")]
11pub mod astro {
12    pub use use_astro::*;
13}
14#[cfg(feature = "bun")]
15pub mod bun {
16    pub use use_bun::*;
17}
18#[cfg(feature = "deno")]
19pub mod deno {
20    pub use use_deno::*;
21}
22#[cfg(feature = "ecmascript")]
23pub mod ecmascript {
24    pub use use_ecmascript::*;
25}
26#[cfg(feature = "export")]
27pub mod export {
28    pub use use_js_export::*;
29}
30#[cfg(feature = "identifier")]
31pub mod identifier {
32    pub use use_js_identifier::*;
33}
34#[cfg(feature = "import")]
35pub mod import {
36    pub use use_js_import::*;
37}
38#[cfg(feature = "keyword")]
39pub mod keyword {
40    pub use use_js_keyword::*;
41}
42#[cfg(feature = "jquery")]
43pub mod jquery {
44    pub use use_jquery::*;
45}
46#[cfg(feature = "lit")]
47pub mod lit {
48    pub use use_lit::*;
49}
50#[cfg(feature = "module")]
51pub mod module {
52    pub use use_js_module::*;
53}
54#[cfg(feature = "next")]
55pub mod next {
56    pub use use_next::*;
57}
58#[cfg(feature = "node-js")]
59pub mod node_js {
60    pub use use_node_js::*;
61}
62#[cfg(feature = "npm")]
63pub mod npm {
64    pub use use_npm::*;
65}
66#[cfg(feature = "nuxt")]
67pub mod nuxt {
68    pub use use_nuxt::*;
69}
70#[cfg(feature = "package-json")]
71pub mod package_json {
72    pub use use_package_json::*;
73}
74#[cfg(feature = "pnpm")]
75pub mod pnpm {
76    pub use use_pnpm::*;
77}
78#[cfg(feature = "preact")]
79pub mod preact {
80    pub use use_preact::*;
81}
82#[cfg(feature = "qwik")]
83pub mod qwik {
84    pub use use_qwik::*;
85}
86#[cfg(feature = "react")]
87pub mod react {
88    pub use use_react::*;
89}
90#[cfg(feature = "remix")]
91pub mod remix {
92    pub use use_remix::*;
93}
94#[cfg(feature = "solid")]
95pub mod solid {
96    pub use use_solid::*;
97}
98#[cfg(feature = "storybook")]
99pub mod storybook {
100    pub use use_storybook::*;
101}
102#[cfg(feature = "svelte")]
103pub mod svelte {
104    pub use use_svelte::*;
105}
106#[cfg(feature = "ts")]
107pub mod ts {
108    pub use use_ts::*;
109}
110#[cfg(feature = "tsconfig")]
111pub mod tsconfig {
112    pub use use_tsconfig::*;
113}
114#[cfg(feature = "value")]
115pub mod value {
116    pub use use_js_value::*;
117}
118#[cfg(feature = "vite")]
119pub mod vite {
120    pub use use_vite::*;
121}
122#[cfg(feature = "vue")]
123pub mod vue {
124    pub use use_vue::*;
125}
126#[cfg(feature = "yarn")]
127pub mod yarn {
128    pub use use_yarn::*;
129}
130
131#[cfg(feature = "angular")]
132pub use use_angular::{
133    AngularArtifactKind, AngularConfigFile, AngularDirectiveName, AngularFileKind,
134    AngularModuleName, AngularNameError, AngularSelector, AngularStandaloneMode,
135    AngularVersionFamily,
136};
137#[cfg(feature = "astro")]
138pub use use_astro::{
139    AstroConfigFile, AstroContentCollectionName, AstroDirectoryKind, AstroFileKind,
140    AstroIntegrationName, AstroRenderingMode, AstroTextError, AstroVersionFamily,
141};
142#[cfg(feature = "bun")]
143pub use use_bun::{BunCommand, BunLockfile, BunVersion};
144#[cfg(feature = "deno")]
145pub use use_deno::{DenoConfigFile, DenoPermission, DenoVersion};
146#[cfg(feature = "ecmascript")]
147pub use use_ecmascript::{
148    ES5, ES2015, ES2016, ES2017, ES2018, ES2019, ES2020, ES2021, ES2022, ES2023, ES2024, ESNEXT,
149    EcmaScriptEdition, EcmaScriptParseError, EcmaScriptTarget, EcmaScriptYear,
150};
151#[cfg(feature = "jquery")]
152pub use use_jquery::{
153    JqueryAjaxMethod, JqueryEffectName, JqueryEventName, JqueryPluginName, JquerySelector,
154    JqueryTextError, JqueryVersionFamily,
155};
156#[cfg(feature = "export")]
157pub use use_js_export::{JsExportKind, JsExportSpecifier, JsExportStatementParts};
158#[cfg(feature = "identifier")]
159pub use use_js_identifier::{
160    JsIdentifier, JsIdentifierError, is_ascii_js_identifier_continue, is_ascii_js_identifier_start,
161    is_valid_ascii_js_identifier,
162};
163#[cfg(feature = "import")]
164pub use use_js_import::{JsImportKind, JsImportSpecifier, JsImportStatementParts};
165#[cfg(feature = "keyword")]
166pub use use_js_keyword::{
167    JsKeyword, JsKeywordParseError, JsReservedWord, is_js_keyword, is_js_reserved_word,
168};
169#[cfg(feature = "module")]
170pub use use_js_module::{
171    JsModuleFormat, JsModuleKind, JsModuleKindParseError, JsModuleSpecifier, JsModuleSpecifierError,
172};
173#[cfg(feature = "value")]
174pub use use_js_value::JsPrimitiveValue;
175#[cfg(feature = "lit")]
176pub use use_lit::{
177    LitDecoratorName, LitElementName, LitFileKind, LitNameError, LitPropertyName, LitTemplateKind,
178};
179#[cfg(feature = "next")]
180pub use use_next::*;
181#[cfg(feature = "node-js")]
182pub use use_node_js::{
183    NodeMajorVersion, NodePackageManagerPreference, NodeRuntime, NodeVersion, NodeVersionParseError,
184};
185#[cfg(feature = "npm")]
186pub use use_npm::{
187    NpmCommand, NpmCommandParseError, NpmPackageSpec, NpmRegistryUrl, NpmScriptCommand,
188    NpmTextError,
189};
190#[cfg(feature = "nuxt")]
191pub use use_nuxt::{NuxtConfigFile, NuxtDirectoryKind, NuxtRenderingMode, NuxtVersionFamily};
192#[cfg(feature = "package-json")]
193pub use use_package_json::{
194    DependencyKind, DependencyMap, PackageJson, PackageJsonTextError, PackageName, PackageScript,
195    PackageScriptName, PackageType, PackageVersion,
196};
197#[cfg(feature = "pnpm")]
198pub use use_pnpm::{PnpmCommand, PnpmFilter, PnpmLockfile, PnpmTextError, PnpmWorkspace};
199#[cfg(feature = "preact")]
200pub use use_preact::{
201    PreactCompatMode, PreactComponentName, PreactFileKind, PreactHookName, PreactJsxRuntime,
202    PreactNameError,
203};
204#[cfg(feature = "qwik")]
205pub use use_qwik::{
206    QwikCityRouteKind, QwikComponentName, QwikConfigFile, QwikDirectoryKind, QwikFileKind,
207    QwikNameError, QwikOptimizerMode,
208};
209#[cfg(feature = "react")]
210pub use use_react::{
211    ReactComponentName, ReactFileKind, ReactHookName, ReactJsxRuntime, ReactNameError,
212};
213#[cfg(feature = "remix")]
214pub use use_remix::*;
215#[cfg(feature = "solid")]
216pub use use_solid::{
217    SolidComponentName, SolidFileKind, SolidJsxRuntime, SolidNameError, SolidPrimitiveKind,
218    SolidSignalName,
219};
220#[cfg(feature = "storybook")]
221pub use use_storybook::*;
222#[cfg(feature = "svelte")]
223pub use use_svelte::{
224    SvelteComponentName, SvelteConfigFile, SvelteDirectiveName, SvelteFileKind,
225    SvelteKitDirectoryKind, SvelteKitRenderingMode, SvelteNameError,
226};
227#[cfg(feature = "ts")]
228pub use use_ts::{
229    TsModuleResolution, TsOptionParseError, TsStrictness, TsTarget, TsTargetParseError,
230    TypeScriptVersion, TypeScriptVersionParseError,
231};
232#[cfg(feature = "tsconfig")]
233pub use use_tsconfig::{
234    CompilerOptions, TsConfig, TsConfigExclude, TsConfigExtends, TsConfigInclude, TsConfigTextError,
235};
236#[cfg(feature = "vite")]
237pub use use_vite::{ViteConfigFile, ViteFrameworkPreset, ViteMode, VitePluginName, ViteTextError};
238#[cfg(feature = "vue")]
239pub use use_vue::{VueApiStyle, VueComponentName, VueDirectiveName, VueFileKind, VueNameError};
240#[cfg(feature = "yarn")]
241pub use use_yarn::{YarnCommand, YarnLockfile, YarnTextError, YarnVersionFamily, YarnWorkspace};
242
243#[cfg(test)]
244mod tests {
245    #[cfg(all(
246        feature = "ecmascript",
247        feature = "identifier",
248        feature = "package-json",
249        feature = "react",
250        feature = "node-js"
251    ))]
252    #[test]
253    fn facade_reexports_common_primitives() -> Result<(), Box<dyn std::error::Error>> {
254        let target: crate::EcmaScriptTarget = "es2024".parse()?;
255        let identifier = crate::JsIdentifier::new("createApp")?;
256        let package = crate::PackageName::new("@rustuse/example")?;
257        let component = crate::ReactComponentName::new("AppShell")?;
258
259        assert_eq!(target.to_string(), "ES2024");
260        assert_eq!(identifier.as_str(), "createApp");
261        assert!(package.is_scoped());
262        assert_eq!(component.as_str(), "AppShell");
263        assert_eq!(
264            crate::node_js::NodePackageManagerPreference::Pnpm.as_str(),
265            "pnpm"
266        );
267        Ok(())
268    }
269
270    #[cfg(all(
271        feature = "astro",
272        feature = "angular",
273        feature = "preact",
274        feature = "svelte",
275        feature = "solid",
276        feature = "jquery",
277        feature = "qwik",
278        feature = "lit",
279        feature = "vue",
280        feature = "nuxt"
281    ))]
282    #[test]
283    fn facade_reexports_frontend_framework_primitives() -> Result<(), Box<dyn std::error::Error>> {
284        let integration = crate::AstroIntegrationName::new("@astrojs/mdx")?;
285        let angular_selector = crate::AngularSelector::new("app-root")?;
286        let preact_component = crate::PreactComponentName::new("AppShell")?;
287        let svelte_directive = crate::SvelteDirectiveName::new("on:click")?;
288        let solid_signal = crate::SolidSignalName::new("count")?;
289        let jquery_event = crate::JqueryEventName::new("click.app")?;
290        let qwik_component = crate::QwikComponentName::new("HeroPanel")?;
291        let lit_element = crate::LitElementName::new("app-shell")?;
292        let vue_component = crate::VueComponentName::new("AppShell")?;
293
294        assert_eq!(integration.as_str(), "@astrojs/mdx");
295        assert_eq!(angular_selector.as_str(), "app-root");
296        assert_eq!(preact_component.as_str(), "AppShell");
297        assert_eq!(svelte_directive.as_str(), "on:click");
298        assert_eq!(solid_signal.as_str(), "count");
299        assert_eq!(jquery_event.as_str(), "click.app");
300        assert_eq!(qwik_component.as_str(), "HeroPanel");
301        assert_eq!(lit_element.as_str(), "app-shell");
302        assert_eq!(vue_component.as_str(), "AppShell");
303        assert_eq!(crate::NuxtRenderingMode::Hybrid.as_str(), "hybrid");
304        Ok(())
305    }
306
307    #[cfg(all(feature = "next", feature = "remix", feature = "storybook"))]
308    #[test]
309    fn facade_reexports_route_and_story_primitives() -> Result<(), Box<dyn std::error::Error>> {
310        let next_segment = crate::NextJsRouteSegment::new("blog")?;
311        let remix_path = crate::RemixRoutePath::new("/products/$productId")?;
312        let story_name = crate::StorybookStoryName::new("Primary")?;
313
314        assert_eq!(next_segment.as_str(), "blog");
315        assert_eq!(crate::NextJsRuntimeKind::Edge.as_str(), "edge");
316        assert!(crate::RemixRouteKind::IndexRoute.is_index_route());
317        assert_eq!(remix_path.as_str(), "/products/$productId");
318        assert_eq!(story_name.as_str(), "Primary");
319        assert_eq!(crate::StorybookControlKind::Select.as_str(), "select");
320        Ok(())
321    }
322}