Skip to content

Commit 201e461

Browse files
committed
fix(optimizer): let the bundler handle entries WIP
WIP because menus don't work in docs - removes entry creating from optimizer - adds manualChunks option that tells Rollup which chunks to put together - removes building at buildStart so other plugins can transform before the segment splitting
1 parent e15ff29 commit 201e461

14 files changed

+111
-448
lines changed

packages/qwik/src/optimizer/core/src/code_move.rs

+3-155
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
11
use crate::collector::{new_ident_from_id, GlobalCollect, Id, ImportKind};
2-
use crate::parse::{
3-
emit_source_code, might_need_handle_watch, HookAnalysis, PathData, TransformModule,
4-
TransformOutput,
5-
};
2+
use crate::parse::PathData;
63
use crate::transform::{add_handle_watch, create_synthetic_named_import};
74
use crate::words::*;
85

9-
use std::collections::BTreeMap;
10-
use std::path::Path;
11-
12-
use anyhow::{Context, Error};
13-
use path_slash::PathExt;
6+
use anyhow::Error;
147
use swc_atoms::JsWord;
158
use swc_common::comments::{SingleThreadedComments, SingleThreadedCommentsMap};
16-
use swc_common::{sync::Lrc, SourceMap, DUMMY_SP};
9+
use swc_common::DUMMY_SP;
1710
use swc_ecmascript::ast;
1811
use swc_ecmascript::utils::private_ident;
1912

@@ -152,32 +145,6 @@ pub fn new_module(ctx: NewModuleCtx) -> Result<(ast::Module, SingleThreadedComme
152145
Ok((module, comments))
153146
}
154147

155-
pub fn fix_path<S: AsRef<Path>, D: AsRef<Path>>(
156-
src: S,
157-
dest: D,
158-
ident: &str,
159-
) -> Result<JsWord, Error> {
160-
let src = src.as_ref();
161-
let dest = dest.as_ref();
162-
if ident.starts_with('.') {
163-
let diff = pathdiff::diff_paths(src, dest);
164-
165-
if let Some(diff) = diff {
166-
let normalize = diff.to_slash_lossy();
167-
let relative = relative_path::RelativePath::new(&normalize);
168-
let final_path = relative.join(ident).normalize();
169-
let final_str = final_path.as_str();
170-
return Ok(if final_str.starts_with('.') {
171-
JsWord::from(final_str)
172-
} else {
173-
JsWord::from(format!("./{}", final_str))
174-
});
175-
}
176-
}
177-
178-
Ok(JsWord::from(ident))
179-
}
180-
181148
fn create_named_export(expr: Box<ast::Expr>, name: &str) -> ast::ModuleItem {
182149
ast::ModuleItem::ModuleDecl(ast::ModuleDecl::ExportDecl(ast::ExportDecl {
183150
span: DUMMY_SP,
@@ -198,125 +165,6 @@ fn create_named_export(expr: Box<ast::Expr>, name: &str) -> ast::ModuleItem {
198165
}))
199166
}
200167

201-
#[test]
202-
fn test_fix_path() {
203-
assert_eq!(
204-
fix_path("src", "", "./state.qwik.mjs").unwrap(),
205-
JsWord::from("./src/state.qwik.mjs")
206-
);
207-
208-
assert_eq!(
209-
fix_path("src/path", "", "./state").unwrap(),
210-
JsWord::from("./src/path/state")
211-
);
212-
213-
assert_eq!(
214-
fix_path("src", "", "../state").unwrap(),
215-
JsWord::from("./state")
216-
);
217-
assert_eq!(
218-
fix_path("a", "a", "./state").unwrap(),
219-
JsWord::from("./state")
220-
);
221-
}
222-
223-
pub fn generate_entries(
224-
mut output: TransformOutput,
225-
core_module: &JsWord,
226-
explicit_extensions: bool,
227-
root_dir: Option<&Path>,
228-
) -> Result<TransformOutput, anyhow::Error> {
229-
let source_map = Lrc::new(SourceMap::default());
230-
let mut entries_map: BTreeMap<&str, Vec<&HookAnalysis>> = BTreeMap::new();
231-
let mut new_modules = Vec::with_capacity(output.modules.len());
232-
{
233-
let hooks: Vec<&HookAnalysis> = output.modules.iter().flat_map(|m| &m.hook).collect();
234-
for hook in hooks {
235-
if let Some(ref e) = hook.entry {
236-
entries_map
237-
.entry(e.as_ref())
238-
.or_insert_with(Vec::new)
239-
.push(hook);
240-
}
241-
}
242-
243-
for (entry, hooks) in &entries_map {
244-
let module = new_entry_module(entry, hooks, core_module, explicit_extensions);
245-
let (code, map) =
246-
emit_source_code(Lrc::clone(&source_map), None, &module, root_dir, false)
247-
.context("Emitting source code")?;
248-
new_modules.push(TransformModule {
249-
path: [entry, ".js"].concat(),
250-
code,
251-
map,
252-
is_entry: true,
253-
hook: None,
254-
order: 0,
255-
});
256-
}
257-
}
258-
output.modules.append(&mut new_modules);
259-
260-
Ok(output)
261-
}
262-
263-
fn new_entry_module(
264-
path: &str,
265-
hooks: &[&HookAnalysis],
266-
core_module: &JsWord,
267-
explicit_extensions: bool,
268-
) -> ast::Module {
269-
let mut module = ast::Module {
270-
span: DUMMY_SP,
271-
body: Vec::with_capacity(hooks.len()),
272-
shebang: None,
273-
};
274-
let mut need_handle_watch = false;
275-
for hook in hooks {
276-
// TODO fix the path from the entry to the hook in case of mismatched location
277-
let mut src = fix_path(
278-
&hook.path.to_string(),
279-
Path::new(path).parent().unwrap().to_str().unwrap(),
280-
&["./", &hook.canonical_filename].concat(),
281-
)
282-
.unwrap()
283-
.to_string();
284-
if explicit_extensions {
285-
src = src + "." + hook.extension.as_ref();
286-
}
287-
if might_need_handle_watch(&hook.ctx_kind, &hook.ctx_name) {
288-
need_handle_watch = true;
289-
}
290-
module
291-
.body
292-
.push(ast::ModuleItem::ModuleDecl(ast::ModuleDecl::ExportNamed(
293-
ast::NamedExport {
294-
span: DUMMY_SP,
295-
type_only: false,
296-
asserts: None,
297-
src: Some(Box::new(ast::Str {
298-
span: DUMMY_SP,
299-
value: JsWord::from(src),
300-
raw: None,
301-
})),
302-
specifiers: vec![ast::ExportSpecifier::Named(ast::ExportNamedSpecifier {
303-
is_type_only: false,
304-
span: DUMMY_SP,
305-
orig: ast::ModuleExportName::Ident(ast::Ident::new(
306-
hook.name.clone(),
307-
DUMMY_SP,
308-
)),
309-
exported: None,
310-
})],
311-
},
312-
)));
313-
}
314-
if need_handle_watch {
315-
add_handle_watch(&mut module.body, core_module);
316-
}
317-
module
318-
}
319-
320168
pub fn transform_function_expr(
321169
expr: ast::Expr,
322170
use_lexical_scope: &Id,

packages/qwik/src/optimizer/core/src/lib.rs

+1-35
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ use std::path::Path;
4444
use std::str;
4545
use swc_atoms::JsWord;
4646

47-
use crate::code_move::generate_entries;
4847
use crate::entry_strategy::parse_entry_strategy;
4948
pub use crate::entry_strategy::EntryStrategy;
5049
pub use crate::parse::EmitMode;
@@ -160,23 +159,7 @@ pub fn transform_fs(config: TransformFsOptions) -> Result<TransformOutput, Error
160159
.reduce(|| Ok(TransformOutput::new()), |x, y| Ok(x?.append(&mut y?)))?;
161160

162161
final_output.modules.sort_unstable_by_key(|key| key.order);
163-
if !matches!(
164-
config.entry_strategy,
165-
EntryStrategy::Hook | EntryStrategy::Inline | EntryStrategy::Hoist
166-
) {
167-
final_output = generate_entries(
168-
final_output,
169-
&core_module,
170-
config.explicit_extensions,
171-
root_dir,
172-
)?;
173-
}
174-
// final_output = generate_entries(
175-
// final_output,
176-
// &core_module,
177-
// config.explicit_extensions,
178-
// root_dir,
179-
// )?;
162+
180163
Ok(final_output)
181164
}
182165

@@ -229,23 +212,6 @@ pub fn transform_modules(config: TransformModulesOptions) -> Result<TransformOut
229212

230213
let mut final_output = final_output?;
231214
final_output.modules.sort_unstable_by_key(|key| key.order);
232-
if !matches!(
233-
config.entry_strategy,
234-
EntryStrategy::Hook | EntryStrategy::Inline | EntryStrategy::Hoist
235-
) {
236-
final_output = generate_entries(
237-
final_output,
238-
&core_module,
239-
config.explicit_extensions,
240-
root_dir,
241-
)?;
242-
}
243-
// final_output = generate_entries(
244-
// final_output,
245-
// &core_module,
246-
// config.explicit_extensions,
247-
// root_dir,
248-
// )?;
249215

250216
Ok(final_output)
251217
}

packages/qwik/src/optimizer/core/src/parse.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ pub fn transform_code(config: TransformCodeOptions) -> Result<TransformOutput, a
392392
]
393393
.concat();
394394
let need_handle_watch =
395-
might_need_handle_watch(&h.data.ctx_kind, &h.data.ctx_name) && is_entry;
395+
might_need_handle_watch(&h.data.ctx_kind, &h.data.ctx_name);
396396

397397
let (mut hook_module, comments) = new_module(NewModuleCtx {
398398
expr: h.expr,

packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_11.snap

+6-14
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export const App = component$(() => {
2929

3030
import dep3 from "dep3/something";
3131
export const Header_component_Header_onClick_KjD9TCNkNxY = (ev)=>dep3(ev);
32+
export { _hW } from "@builder.io/qwik";
3233

3334

3435
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\":[],\"mappings\":\";2DAQ2B,CAAC,KAAO,KAAK\"}")
@@ -59,15 +60,15 @@ import { bar as bbar } from "../state";
5960
import * as dep2 from "dep2";
6061
import { qrl } from "@builder.io/qwik";
6162
export const Header_component_UVBJuFYfvDo = ()=>{
62-
return <Header onClick={/*#__PURE__*/ qrl(()=>import("../entry_hooks"), "Header_component_Header_onClick_KjD9TCNkNxY")}>
63+
return <Header onClick={/*#__PURE__*/ qrl(()=>import("./header_component_header_onclick_kjd9tcnknxy"), "Header_component_Header_onClick_KjD9TCNkNxY")}>
6364

6465
{dep2.stuff()}{bbar()}
6566

6667
</Header>;
6768
};
6869

6970

70-
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\":[],\"mappings\":\";;;;4CAMiC,IAAM;IACnC,QACK,OAAO,yGAA8B;;YAClC,CAAC,KAAK,KAAK,IAAI,OAAO;;QAC1B,EAAE;AAEV\"}")
71+
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\":[],\"mappings\":\";;;;4CAMiC,IAAM;IACnC,QACK,OAAO,wIAA8B;;YAClC,CAAC,KAAK,KAAK,IAAI,OAAO;;QAC1B,EAAE;AAEV\"}")
7172
/*
7273
{
7374
"origin": "project/test.tsx",
@@ -122,20 +123,11 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\"
122123

123124
import { componentQrl } from "@builder.io/qwik";
124125
import { qrl } from "@builder.io/qwik";
125-
export const Header = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("../entry_hooks"), "Header_component_UVBJuFYfvDo"));
126-
export const App = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("../entry_hooks"), "App_component_wGkRHWXaqjs"));
127-
128-
129-
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\":[],\"mappings\":\";;AAMA,OAAO,MAAM,uBAAS,8FAMnB;AAEH,OAAO,MAAM,oBAAM,2FAIhB\"}")
130-
============================= entry_hooks.js (ENTRY POINT)==
131-
132-
export { Header_component_Header_onClick_KjD9TCNkNxY } from "./project/header_component_header_onclick_kjd9tcnknxy";
133-
export { Header_component_UVBJuFYfvDo } from "./project/header_component_uvbjufyfvdo";
134-
export { App_component_wGkRHWXaqjs } from "./project/app_component_wgkrhwxaqjs";
135-
export { _hW } from "@builder.io/qwik";
126+
export const Header = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./header_component_uvbjufyfvdo"), "Header_component_UVBJuFYfvDo"));
127+
export const App = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./app_component_wgkrhwxaqjs"), "App_component_wGkRHWXaqjs"));
136128

137129

138-
None
130+
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/test.tsx\"],\"names\":[],\"mappings\":\";;AAMA,OAAO,MAAM,uBAAS,8GAMnB;AAEH,OAAO,MAAM,oBAAM,wGAIhB\"}")
139131
== DIAGNOSTICS ==
140132

141133
[]

packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_default_export.snap

+2-8
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ export default component$(() => {
2121

2222
import { componentQrl } from "@builder.io/qwik";
2323
import { qrl } from "@builder.io/qwik";
24-
export default /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("../../../../src/routes/_repl/[id]/[[...slug]].tsx_entry_[[...slug]].js"), "slug_component_0AM8HPnkNs4"));
24+
export default /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./slug_component_0am8hpnkns4.js"), "slug_component_0AM8HPnkNs4"));
2525

2626

27-
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/src/routes/_repl/[id]/[[...slug]].tsx\"],\"names\":[],\"mappings\":\";;AAIA,6BAAe,oJAKZ\"}")
27+
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/src/routes/_repl/[id]/[[...slug]].tsx\"],\"names\":[],\"mappings\":\";;AAIA,6BAAe,6GAKZ\"}")
2828
============================= src/routes/_repl/[id]/slug_component_div_onclick_xevvy0qc7pa.js (ENTRY POINT)==
2929

3030
import { sibling } from "./sibling";
@@ -84,12 +84,6 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/src/routes/_repl/[id]/[[...sl
8484
]
8585
}
8686
*/
87-
============================= src/routes/_repl/[id]/[[...slug]].tsx_entry_[[...slug]].js (ENTRY POINT)==
88-
89-
export { slug_component_0AM8HPnkNs4 } from "./slug_component_0am8hpnkns4.js";
90-
91-
92-
None
9387
== DIAGNOSTICS ==
9488

9589
[]

packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_explicit_ext_no_transpile.snap

+5-13
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ export const App = component$((props) => {
1919

2020
import { componentQrl } from "@builder.io/qwik";
2121
import { qrl } from "@builder.io/qwik";
22-
export const App = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./entry_hooks.tsx"), "App_component_ckEPmXZlub0"));
22+
export const App = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./app_component_ckepmxzlub0.tsx"), "App_component_ckEPmXZlub0"));
2323

2424

25-
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;AAGA,OAAO,MAAM,oBAAM,8FAKhB\"}")
25+
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\";;AAGA,OAAO,MAAM,oBAAM,4GAKhB\"}")
2626
============================= app_component_usestyles_t35nsa5uv7u.tsx ==
2727

2828
export const App_component_useStyles_t35nSa5UV7U = 'hola';
@@ -54,8 +54,8 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
5454
import { qrl } from "@builder.io/qwik";
5555
import { useStylesQrl } from "@builder.io/qwik";
5656
export const App_component_ckEPmXZlub0 = (props)=>{
57-
useStylesQrl(/*#__PURE__*/ qrl(()=>import("./entry_hooks.tsx"), "App_component_useStyles_t35nSa5UV7U"));
58-
return /*#__PURE__*/ qrl(()=>import("./entry_hooks.tsx"), "App_component_1_w0t0o3QMovU");
57+
useStylesQrl(/*#__PURE__*/ qrl(()=>import("./app_component_usestyles_t35nsa5uv7u.tsx"), "App_component_useStyles_t35nSa5UV7U"));
58+
return /*#__PURE__*/ qrl(()=>import("./app_component_1_w0t0o3qmovu.tsx"), "App_component_1_w0t0o3QMovU");
5959
};
6060

6161

@@ -83,6 +83,7 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
8383
============================= app_component_1_w0t0o3qmovu.tsx ==
8484

8585
export const App_component_1_w0t0o3QMovU = ()=><div></div>;
86+
export { _hW } from "@builder.io/qwik";
8687

8788

8889
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"mappings\":\"2CAKa,KACJ,MAAM\"}")
@@ -106,15 +107,6 @@ Some("{\"version\":3,\"sources\":[\"/user/qwik/src/test.tsx\"],\"names\":[],\"ma
106107
]
107108
}
108109
*/
109-
============================= entry_hooks.js (ENTRY POINT)==
110-
111-
export { App_component_useStyles_t35nSa5UV7U } from "./app_component_usestyles_t35nsa5uv7u.tsx";
112-
export { App_component_ckEPmXZlub0 } from "./app_component_ckepmxzlub0.tsx";
113-
export { App_component_1_w0t0o3QMovU } from "./app_component_1_w0t0o3qmovu.tsx";
114-
export { _hW } from "@builder.io/qwik";
115-
116-
117-
None
118110
== DIAGNOSTICS ==
119111

120112
[]

packages/qwik/src/optimizer/core/src/snapshots/qwik_core__test__example_fix_dynamic_import.snap

+2-8
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,10 @@ import { qrl } from "@builder.io/qwik";
6464
export function foo() {
6565
return import("../foo/state2");
6666
}
67-
export const Header = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("../../entry_hooks"), "Header_component_RGgm7Ks9QWI"));
67+
export const Header = /*#__PURE__*/ componentQrl(/*#__PURE__*/ qrl(()=>import("./header_component_rggm7ks9qwi"), "Header_component_RGgm7Ks9QWI"));
6868

6969

70-
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/folder/test.tsx\"],\"names\":[],\"mappings\":\";;AAIA,OAAO,SAAS,MAAM;IAClB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,OAAO,MAAM,uBAAS,iGAOnB\"}")
71-
============================= entry_hooks.js (ENTRY POINT)==
72-
73-
export { Header_component_RGgm7Ks9QWI } from "./project/folder/header_component_rggm7ks9qwi";
74-
75-
76-
None
70+
Some("{\"version\":3,\"sources\":[\"/user/qwik/src/project/folder/test.tsx\"],\"names\":[],\"mappings\":\";;AAIA,OAAO,SAAS,MAAM;IAClB,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,OAAO,MAAM,uBAAS,8GAOnB\"}")
7771
== DIAGNOSTICS ==
7872

7973
[]

0 commit comments

Comments
 (0)