Skip to content

Commit 29affae

Browse files
authored
feat: add loader submodule (#160)
1 parent e867947 commit 29affae

File tree

4 files changed

+88
-30
lines changed

4 files changed

+88
-30
lines changed

package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@
114114
"jsx-runtime.mjs",
115115
"jsx-runtime.mjs.map",
116116
"jsx-runtime.d.ts",
117+
"loader/index.cjs",
118+
"loader/index.mjs",
119+
"loader/index.d.ts",
120+
"loader/package.json",
117121
"optimizer/package.json",
118122
"optimizer.cjs",
119123
"optimizer.mjs",

scripts/package-json.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,10 @@ export async function generatePackageJson(config: BuildConfig) {
3838
import: './jsx-runtime.mjs',
3939
require: './jsx-runtime.cjs',
4040
},
41+
'./loader': {
42+
import: './loader/index.mjs',
43+
require: './loader/index.cjs',
44+
},
4145
'./optimizer': {
4246
import: './optimizer.mjs',
4347
require: './optimizer.cjs',

scripts/submodule-qwikloader.ts

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import { InputOptions, OutputOptions, rollup } from 'rollup';
2-
import { BuildConfig, fileSize, rollupOnWarn, terser } from './util';
2+
import {
3+
BuildConfig,
4+
ensureDir,
5+
fileSize,
6+
PackageJSON,
7+
readFile,
8+
rollupOnWarn,
9+
terser,
10+
writeFile,
11+
} from './util';
312
import { join } from 'path';
413
import { transform } from 'esbuild';
14+
import { writePackageJson } from './package-json';
515

616
/**
717
* Builds the qwikloader javascript files. These files can be used
@@ -151,6 +161,73 @@ export async function submoduleQwikLoader(config: BuildConfig) {
151161
build.write(optimizeDebug),
152162
]);
153163

164+
await generateLoaderSubmodule(config);
165+
154166
const optimizeFileSize = await fileSize(join(config.distPkgDir, 'qwikloader.optimize.js'));
155167
console.log('🐸 qwikloader:', optimizeFileSize);
156168
}
169+
170+
/**
171+
* Load each of the qwik scripts to be inlined with esbuild "define" as const varialbles.
172+
*/
173+
export async function inlineQwikScriptsEsBuild(config: BuildConfig) {
174+
const variableToFileMap = [
175+
['QWIK_LOADER_DEFAULT_MINIFIED', 'qwikloader.js'],
176+
['QWIK_LOADER_DEFAULT_DEBUG', 'qwikloader.debug.js'],
177+
['QWIK_LOADER_OPTIMIZE_MINIFIED', 'qwikloader.optimize.js'],
178+
['QWIK_LOADER_OPTIMIZE_DEBUG', 'qwikloader.optimize.debug.js'],
179+
['QWIK_PREFETCH_MINIFIED', 'prefetch.js'],
180+
['QWIK_PREFETCH_DEBUG', 'prefetch.debug.js'],
181+
];
182+
183+
const define: { [varName: string]: string } = {};
184+
185+
await Promise.all(
186+
variableToFileMap.map(async (varToFile) => {
187+
const varName = `global.${varToFile[0]}`;
188+
const filePath = join(config.distPkgDir, varToFile[1]);
189+
const content = await readFile(filePath, 'utf-8');
190+
define[varName] = JSON.stringify(content.trim());
191+
})
192+
);
193+
194+
return define;
195+
}
196+
197+
async function generateLoaderSubmodule(config: BuildConfig) {
198+
const loaderDistDir = join(config.distPkgDir, 'loader');
199+
200+
const loaderCode = await readFile(join(config.distPkgDir, 'qwikloader.js'), 'utf-8');
201+
const loaderDebugCode = await readFile(join(config.distPkgDir, 'qwikloader.debug.js'), 'utf-8');
202+
203+
const code = [
204+
`const QWIK_LOADER = ${JSON.stringify(loaderCode.trim())};`,
205+
`const QWIK_LOADER_DEBUG = ${JSON.stringify(loaderDebugCode.trim())};`,
206+
];
207+
208+
const esmCode = [...code, `export { QWIK_LOADER, QWIK_LOADER_DEBUG };`];
209+
const cjsCode = [
210+
...code,
211+
`exports.QWIK_LOADER = QWIK_LOADER;`,
212+
`exports.QWIK_LOADER_DEBUG = QWIK_LOADER_DEBUG;`,
213+
];
214+
const dtsCode = [
215+
`export declare const QWIK_LOADER: string;`,
216+
`export declare const QWIK_LOADER_DEBUG: string;`,
217+
];
218+
219+
ensureDir(loaderDistDir);
220+
await writeFile(join(loaderDistDir, 'index.mjs'), esmCode.join('\n') + '\n');
221+
await writeFile(join(loaderDistDir, 'index.cjs'), cjsCode.join('\n') + '\n');
222+
await writeFile(join(loaderDistDir, 'index.d.ts'), dtsCode.join('\n') + '\n');
223+
224+
const loaderPkg: PackageJSON = {
225+
name: `@builder.io/qwik/loader`,
226+
version: config.distVersion,
227+
main: `index.cjs`,
228+
module: `index.mjs`,
229+
types: `index.d.ts`,
230+
private: true,
231+
};
232+
await writePackageJson(loaderDistDir, loaderPkg);
233+
}

scripts/submodule-server.ts

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ import {
88
nodeBuiltIns,
99
nodeTarget,
1010
PackageJSON,
11-
readFile,
1211
target,
1312
watcher,
1413
injectGlobalPoly,
1514
} from './util';
15+
import { inlineQwikScriptsEsBuild } from './submodule-qwikloader';
1616
import { readPackageJson, writePackageJson } from './package-json';
1717

1818
/**
@@ -35,7 +35,7 @@ export async function submoduleServer(config: BuildConfig) {
3535
banner,
3636
external: [...nodeBuiltIns, '@builder.io/qwik-dom'],
3737
define: {
38-
...(await inlineQwikScripts(config)),
38+
...(await inlineQwikScriptsEsBuild(config)),
3939
'globalThis.QWIK_VERSION': JSON.stringify(config.distVersion),
4040
'globalThis.DOMINO_VERSION': JSON.stringify(await getDominoVersion()),
4141
},
@@ -88,33 +88,6 @@ async function generateServerPackageJson(config: BuildConfig) {
8888
await writePackageJson(serverDistDir, pkg);
8989
}
9090

91-
/**
92-
* Load each of the qwik scripts to be inlined with esbuild "define" as const varialbles.
93-
*/
94-
async function inlineQwikScripts(config: BuildConfig) {
95-
const variableToFileMap = [
96-
['QWIK_LOADER_DEFAULT_MINIFIED', 'qwikloader.js'],
97-
['QWIK_LOADER_DEFAULT_DEBUG', 'qwikloader.debug.js'],
98-
['QWIK_LOADER_OPTIMIZE_MINIFIED', 'qwikloader.optimize.js'],
99-
['QWIK_LOADER_OPTIMIZE_DEBUG', 'qwikloader.optimize.debug.js'],
100-
['QWIK_PREFETCH_MINIFIED', 'prefetch.js'],
101-
['QWIK_PREFETCH_DEBUG', 'prefetch.debug.js'],
102-
];
103-
104-
const define: { [varName: string]: string } = {};
105-
106-
await Promise.all(
107-
variableToFileMap.map(async (varToFile) => {
108-
const varName = `global.${varToFile[0]}`;
109-
const filePath = join(config.distPkgDir, varToFile[1]);
110-
const content = await readFile(filePath, 'utf-8');
111-
define[varName] = JSON.stringify(content.trim());
112-
})
113-
);
114-
115-
return define;
116-
}
117-
11891
async function bundleQwikDom(config: BuildConfig) {
11992
const outfile = join(config.distDir, 'qwikdom.mjs');
12093

0 commit comments

Comments
 (0)