UNPKG

2 kBJavaScriptView Raw
1'use strict';
2
3const writeFile = require('broccoli-file-creator');
4const MergeTrees = require('broccoli-merge-trees');
5const VersionChecker = require('ember-cli-version-checker');
6
7module.exports = {
8 name: '@glimmer/component',
9
10 included(includer) {
11 let pkg = 'pkg' in includer ? includer.pkg : includer.project.pkg;
12
13 if (
14 (pkg.dependencies && '@glimmer/application' in pkg.dependencies) ||
15 (pkg.devDependencies && '@glimmer/application' in pkg.devDependencies)
16 ) {
17 // this is a Glimmer application, don't include nested addons or run addon code
18 return;
19 }
20
21 this._super.included.apply(this, arguments);
22 },
23
24 treeForAddon(tree) {
25 let ownerOverride = writeFile(
26 '-private/owner.ts',
27 `
28 export { setOwner } from '@ember/application';
29 `
30 );
31
32 let trees = [
33 tree,
34 ownerOverride,
35 ];
36
37 let checker = new VersionChecker(this.project);
38 let dep = checker.for('ember-source');
39
40 // Ember shipped public API directly, this is more likely to be stable over time
41 if (dep.gte('3.22.0-beta.1')) {
42 let destroyablesOverride = writeFile(
43 '-private/destroyables.ts',
44 `
45 import Ember from 'ember';
46
47 export const isDestroying = Ember._isDestroying;
48 export const isDestroyed = Ember._isDestroyed;
49 `
50 );
51
52 trees.push(destroyablesOverride);
53 } else if (dep.gte('3.20.0-beta.4')) {
54 // using internals to access from `@glimmer/runtime`
55
56 let destroyablesOverride = writeFile(
57 '-private/destroyables.ts',
58 `
59 import Ember from 'ember';
60
61 export const isDestroying = Ember.__loader.require('@glimmer/runtime').isDestroying;
62 export const isDestroyed = Ember.__loader.require('@glimmer/runtime').isDestroyed;
63 `
64 );
65
66 trees.push(destroyablesOverride);
67 }
68
69 return this._super.treeForAddon.call(
70 this,
71 new MergeTrees(trees, {
72 overwrite: true,
73 })
74 );
75 },
76};