Skip to content

Commit

Permalink
Allow for more flexible addon-dev appReexports
Browse files Browse the repository at this point in the history
  • Loading branch information
krasnoukhov committed Oct 13, 2023
1 parent dfe4bc3 commit 30401ec
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 10 deletions.
15 changes: 8 additions & 7 deletions packages/addon-dev/src/rollup-app-reexports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export default function appReexports(opts: {
to: string;
include: string[];
mapFilename?: (filename: string) => string;
defaultExport?: string;
}): Plugin {
return {
name: 'app-reexports',
Expand All @@ -25,21 +26,21 @@ export default function appReexports(opts: {
this.emitFile({
type: 'asset',
fileName: `_app_/${appFilename}`,
source: `export { default } from "${pkg.name}/${addonFilename.slice(
0,
-extname(addonFilename).length
)}";\n`,
source: `export ${opts.defaultExport} from "${
pkg.name
}/${addonFilename.slice(0, -extname(addonFilename).length)}";\n`,
});
}
}
let originalAppJS = pkg['ember-addon']?.['app-js'];

let hasChanges = JSON.stringify(originalAppJS) !== JSON.stringify(appJS);
let newAppJs = Object.assign({}, originalAppJS || {}, appJS);
let hasChanges =
JSON.stringify(originalAppJS) !== JSON.stringify(newAppJs);

// Don't cause a file i/o event unless something actually changed
if (hasChanges) {
pkg['ember-addon'] = Object.assign({}, pkg['ember-addon'], {
'app-js': appJS,
'app-js': newAppJs,
});
writeJsonSync('package.json', pkg, { spaces: 2 });
}
Expand Down
11 changes: 10 additions & 1 deletion packages/addon-dev/src/rollup.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { readJsonSync, writeJsonSync } from 'fs-extra';
import { default as hbs } from './rollup-hbs-plugin';
import { default as gjs } from './rollup-gjs-plugin';
import { default as publicEntrypoints } from './rollup-public-entrypoints';
Expand All @@ -16,20 +17,28 @@ export class Addon {
constructor(params: { srcDir?: string; destDir?: string } = {}) {
this.#srcDir = params.srcDir ?? 'src';
this.#destDir = params.destDir ?? 'dist';

let pkg = readJsonSync('package.json');
delete pkg['ember-addon']['app-js'];
writeJsonSync('package.json', pkg, { spaces: 2 });
}

// Given a list of globs describing modules in your srcDir, this generates
// corresponding appTree modules that contain reexports, and updates your
// package.json metadata to list them all.
appReexports(
patterns: string[],
opts: { mapFilename?: (fileName: string) => string } = {}
opts: {
mapFilename?: (fileName: string) => string;
defaultExport?: string;
} = {}
): Plugin {
return appReexports({
from: this.#srcDir,
to: this.#destDir,
include: patterns,
mapFilename: opts.mapFilename,
defaultExport: opts.defaultExport || '{ default }',
});
}

Expand Down
3 changes: 1 addition & 2 deletions packages/router/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,7 @@
"ember-addon": {
"version": 2,
"type": "addon",
"main": "addon-main.js",
"app-js": {}
"main": "addon-main.js"
},
"exports": {
".": "./dist/index.js",
Expand Down
21 changes: 21 additions & 0 deletions tests/scenarios/v2-addon-dev-typescript-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ appScenarios
addon.pkg.scripts = {
build: 'node ./node_modules/rollup/dist/bin/rollup -c ./rollup.config.mjs',
};
addon.pkg['ember-addon']['app-js'] = {
'./components/previously-added.js': './dist/_app_/components/previously-added.js',
};

merge(addon.files, {
'babel.config.json': `
Expand Down Expand Up @@ -91,6 +94,7 @@ appScenarios
plugins: [
addon.publicEntrypoints([
'components/**/*.js',
'initializers/**/*.js',
]),
addon.appReexports([
Expand All @@ -100,6 +104,9 @@ appScenarios
], {
mapFilename: (name) => reexportMappings[name] || name,
}),
addon.appReexports(['initializers/**/*.js'], {
defaultExport: '{ default, initialize }',
}),
addon.dependencies(),
Expand Down Expand Up @@ -167,6 +174,18 @@ appScenarios
`,
},
},
initializers: {
'demo.js': `
export function initialize() {
// Wow, we're doing the init in the app
}
export default {
name: 'demo',
initialize,
};
`,
},
},
});

Expand Down Expand Up @@ -250,6 +269,7 @@ appScenarios
'./components/demo/index.js': './dist/_app_/components/demo/index.js',
'./components/demo/out.js': './dist/_app_/components/demo/out.js',
'./components/demo/namespace/namespace-me.js': './dist/_app_/components/demo/namespace/namespace-me.js',
'./initializers/demo.js': './dist/_app_/initializers/demo.js',
});
});

Expand All @@ -260,6 +280,7 @@ appScenarios
'./dist/_app_/components/demo/out.js': 'export { default } from "v2-addon/components/demo/out";\n',
'./dist/_app_/components/demo/namespace/namespace-me.js':
'export { default } from "v2-addon/components/demo/namespace-me";\n',
'./dist/_app_/initializers/demo.js': 'export { default, initialize } from "v2-addon/initializers/demo";\n',
};

assert.strictEqual(
Expand Down

0 comments on commit 30401ec

Please sign in to comment.