Skip to content

Commit

Permalink
copy assets to correct folder
Browse files Browse the repository at this point in the history
  • Loading branch information
patricklx committed Feb 15, 2024
1 parent f56eaf1 commit e7b6465
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 1 deletion.
1 change: 1 addition & 0 deletions packages/vite/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,5 @@ export * from './src/hbs.js';
export * from './src/scripts.js';
export * from './src/template-tag.js';
export * from './src/optimize-deps.js';
export * from './src/assets.js';
export * from './src/build.js';
1 change: 1 addition & 0 deletions packages/vite/index.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ export * from './src/scripts.js';
export * from './src/template-tag.js';
export * from './src/optimize-deps.js';
export * from './src/build.js';
export * from './src/assets.js';
3 changes: 2 additions & 1 deletion packages/vite/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@
"fs-extra": "^10.0.0",
"jsdom": "^16.6.0",
"source-map-url": "^0.4.1",
"terser": "^5.7.0"
"terser": "^5.7.0",
"fast-glob": "^3.3.2"
},
"devDependencies": {
"@embroider/core": "workspace:^",
Expand Down
40 changes: 40 additions & 0 deletions packages/vite/src/assets.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { ResolverLoader } from '@embroider/core';
import type { Plugin } from 'vite';
import * as process from 'process';
import { dirname, join } from 'path';
import { copyFileSync, mkdirpSync } from 'fs-extra';
import glob from 'fast-glob';

export function assets(): Plugin {
const cwd = process.cwd();
const resolverLoader = new ResolverLoader(cwd);
return {
name: 'assets',
enforce: 'pre',
outputOptions(options) {
options.dir = join(process.cwd(), 'dist');
},
async writeBundle(options) {
const engines = resolverLoader.resolver.options.engines;
const pubDir = join(process.cwd(), 'public');
const publicAppFiles = glob.sync('**/*', {
cwd: pubDir,
});
for (const publicAppFile of publicAppFiles) {
mkdirpSync(dirname(join(options.dir!, publicAppFile)));
copyFileSync(join(pubDir, publicAppFile), join(options.dir!, publicAppFile));
}
for (const engine of engines) {
engine.activeAddons.forEach(addon => {
const pkg = resolverLoader.resolver.packageCache.ownerOfFile(addon.root);
if (!pkg || !pkg.isV2Addon()) return;
const assets = pkg.meta['public-assets'] || {};
Object.entries(assets).forEach(([path, dest]) => {
mkdirpSync(dirname(join(options.dir!, dest)));
copyFileSync(join(pkg.root, path), join(options.dir!, dest));
});
});
}
},
};
}
3 changes: 3 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions tests/scenarios/vite-app-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ viteAppScenarios
const distFiles = readdirSync(join(app.dir, 'dist'));
assert.ok(distFiles.length > 1, 'should have created dist folder');
assert.ok(distFiles.includes('assets'), 'should have created assets folder');
assert.ok(distFiles.includes('ember-welcome-page'), 'should have copied addon asset files');
assert.ok(distFiles.includes('robots.txt'), 'should have copied app assets');

const assetFiles = readdirSync(join(app.dir, 'dist', 'assets'));
assert.ok(assetFiles.length > 1, 'should have created asset files');
Expand Down
2 changes: 2 additions & 0 deletions tests/vite-app/vite.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import {
templateTag,
optimizeDeps,
compatPrebuild,
assets,
} from "@embroider/vite";
import { resolve } from "path";
import { babel } from "@rollup/plugin-babel";
Expand All @@ -23,6 +24,7 @@ export default defineConfig({
scripts(),
resolver(),
compatPrebuild(),
assets(),

babel({
babelHelpers: "runtime",
Expand Down

0 comments on commit e7b6465

Please sign in to comment.