Skip to content

Commit 47d921f

Browse files
authored
[Blueprints] Move blueprints.phar to the Blueprints package (#2471)
## Motivation for the change, related issues Moves the `blueprints.phar` file from the Playground CLI package into the `@wp-playground/blueprints` package to enable in-browser usage. ## Implementation details Exposes the `blueprints.phar` binary using a dynamic import that fetches a `.js` file with an inlined version of the base64 binary. In addition, this PR adds a `vite-global-extensions.ts` file with plugins applied in all vite config files across the entire Playground repository. Base64 encoding adds decoding time and increases the file size by ~30%. This isnot ideal, but there's no other standard solution for shipping static files with isomorphic npm CJS+ESM packages so this will have to do until a better solution emerges. Some other packages in this repository are published with lines such as `await import('php.wasm')` and rely on bundler configuration for correct handling. This is fine as they're fairly low-level, isomorphic, multi-purpose packages. `@wp-playground/blueprints`, however, is a higher-level package that's already consumed by projects without special configuration for importing non-JS files. We don't want to break them. ## Testing Instructions (or ideally a Blueprint) Confirm the CI checks are green. This PR only moves code around and does not change any features.
1 parent 89323c0 commit 47d921f

File tree

35 files changed

+164
-76
lines changed

35 files changed

+164
-76
lines changed

packages/meta/src/node-es-module-loader/loader.mts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ export async function resolve(
117117
}
118118

119119
const specifierUrl = new URL(specifier, 'file://');
120-
for (const format of ['raw', 'json', 'url']) {
120+
for (const format of ['raw', 'json', 'url', 'base64']) {
121121
if (specifierUrl.searchParams.has(format)) {
122122
// This is a custom format import and can be handled by our custom loader.
123123
return {
@@ -189,6 +189,19 @@ export async function load(
189189
};
190190
}
191191

192+
if (context.format === 'base64' || urlObj.searchParams.has('base64')) {
193+
// Load binary file content and export as base64 string
194+
const content = readFileSync(urlObj.pathname);
195+
const base64 = content.toString('base64');
196+
return {
197+
format: 'module',
198+
shortCircuit: true,
199+
source: `export default Uint8Array.from(atob(${JSON.stringify(
200+
base64
201+
)}), c => c.charCodeAt(0));`,
202+
};
203+
}
204+
192205
if (context.format === 'json' || urlObj.pathname.endsWith('.json')) {
193206
const source = readFileSync(urlObj.pathname, 'utf8');
194207
return {

packages/nx-extensions/vite.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
/// <reference types="vitest" />
22
import { defineConfig } from 'vite';
33
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
4+
// eslint-disable-next-line @nx/enforce-module-boundaries
5+
import viteGlobalExtensions from '../vite-extensions/vite-global-extensions';
46

57
export default defineConfig({
68
cacheDir: '../../../node_modules/.vite/nx-extensions',
79

8-
plugins: [nxViteTsPaths()],
10+
plugins: [nxViteTsPaths(), ...viteGlobalExtensions],
911

1012
test: {
1113
globals: true,

packages/php-wasm/cli/vite.config.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
/// <reference types="vitest" />
22
import { defineConfig } from 'vite';
33
import { nxViteTsPaths } from '@nx/vite/plugins/nx-tsconfig-paths.plugin';
4+
// eslint-disable-next-line @nx/enforce-module-boundaries
5+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
46

57
export default defineConfig({
68
assetsInclude: ['**/*.ini'],
79
cacheDir: '../../../node_modules/.vite/php-cli',
810

9-
plugins: [nxViteTsPaths()],
11+
plugins: [nxViteTsPaths(), ...viteGlobalExtensions],
1012

1113
// Configuration for building your library.
1214
// See: https://vitejs.dev/guide/build.html#library-mode

packages/php-wasm/fs-journal/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { join } from 'path';
88
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
99
// eslint-disable-next-line @nx/enforce-module-boundaries
1010
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
11+
// eslint-disable-next-line @nx/enforce-module-boundaries
12+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
1113

1214
export default defineConfig({
1315
cacheDir: '../../../node_modules/.vite/php-wasm-fs-journal',
@@ -22,6 +24,8 @@ export default defineConfig({
2224
viteTsConfigPaths({
2325
root: '../../../',
2426
}),
27+
28+
...viteGlobalExtensions,
2529
],
2630

2731
// Configuration for building your library.

packages/php-wasm/logger/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { join } from 'path';
88
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
99
// eslint-disable-next-line @nx/enforce-module-boundaries
1010
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
11+
// eslint-disable-next-line @nx/enforce-module-boundaries
12+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
1113

1214
export default defineConfig({
1315
cacheDir: '../../../node_modules/.vite/php-wasm-logger',
@@ -22,6 +24,8 @@ export default defineConfig({
2224
viteTsConfigPaths({
2325
root: '../../../',
2426
}),
27+
28+
...viteGlobalExtensions,
2529
],
2630

2731
// Configuration for building your library.

packages/php-wasm/node-polyfills/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import dts from 'vite-plugin-dts';
55
import viteTsConfigPaths from 'vite-tsconfig-paths';
66
// eslint-disable-next-line @nx/enforce-module-boundaries
77
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
8+
// eslint-disable-next-line @nx/enforce-module-boundaries
9+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
810

911
export default defineConfig({
1012
cacheDir: '../../../node_modules/.vite/php-wasm-node-polyfills',
@@ -18,6 +20,8 @@ export default defineConfig({
1820
tsconfigPath: join(__dirname, 'tsconfig.lib.json'),
1921
pathsToAliases: false,
2022
}),
23+
24+
...viteGlobalExtensions,
2125
],
2226

2327
// Uncomment this if you are using workers.

packages/php-wasm/node/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import path from 'path';
99
import type { Plugin } from 'vite';
1010
// eslint-disable-next-line @nx/enforce-module-boundaries
1111
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
12+
// eslint-disable-next-line @nx/enforce-module-boundaries
13+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
1214

1315
export default defineConfig(function () {
1416
return {
@@ -52,6 +54,8 @@ export default defineConfig(function () {
5254
return null;
5355
},
5456
} as Plugin,
57+
58+
...viteGlobalExtensions,
5559
],
5660

5761
// Configuration for building your library.

packages/php-wasm/progress/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { join } from 'path';
88
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
99
// eslint-disable-next-line @nx/enforce-module-boundaries
1010
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
11+
// eslint-disable-next-line @nx/enforce-module-boundaries
12+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
1113

1214
export default defineConfig({
1315
cacheDir: '../../../node_modules/.vite/php-wasm-progress',
@@ -22,6 +24,8 @@ export default defineConfig({
2224
viteTsConfigPaths({
2325
root: '../../../',
2426
}),
27+
28+
...viteGlobalExtensions,
2529
],
2630

2731
// Uncomment this if you are using workers.

packages/php-wasm/scopes/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import { join } from 'path';
88
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
99
// eslint-disable-next-line @nx/enforce-module-boundaries
1010
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
11+
// eslint-disable-next-line @nx/enforce-module-boundaries
12+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
1113

1214
export default defineConfig({
1315
cacheDir: '../../../node_modules/.vite/php-wasm-scope',
@@ -22,6 +24,8 @@ export default defineConfig({
2224
viteTsConfigPaths({
2325
root: '../../../',
2426
}),
27+
28+
...viteGlobalExtensions,
2529
],
2630

2731
// Configuration for building your library.

packages/php-wasm/stream-compression/vite.config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import * as path from 'path';
66
import { viteTsConfigPaths } from '../../vite-extensions/vite-ts-config-paths';
77
// eslint-disable-next-line @nx/enforce-module-boundaries
88
import { getExternalModules } from '../../vite-extensions/vite-external-modules';
9+
// eslint-disable-next-line @nx/enforce-module-boundaries
10+
import viteGlobalExtensions from '../../vite-extensions/vite-global-extensions';
911

1012
export default defineConfig({
1113
cacheDir: '../../../node_modules/.vite/php-wasm-stream-compression',
@@ -19,6 +21,8 @@ export default defineConfig({
1921
viteTsConfigPaths({
2022
root: '../../../',
2123
}),
24+
25+
...viteGlobalExtensions,
2226
],
2327

2428
// Uncomment this if you are using workers.

0 commit comments

Comments
 (0)