@roots/bud-compiler 4.7.0-7 → 5.0.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,59 +1,74 @@
1
1
  <p align="center">
2
- <img alt="Bud" src="https://cdn.roots.io/app/uploads/logo-bud.svg" height="100">
2
+ <img alt="Bud" src="https://cdn.roots.io/app/uploads/logo-bud.svg" height="100" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <img alt="MIT License" src="https://img.shields.io/github/license/roots/bud?color=%23525ddc&style=flat-square">
7
- <a href="https://twitter.com/rootswp">
8
- <img alt="Follow Roots" src="https://img.shields.io/twitter/follow/rootswp.svg?style=flat-square&color=1da1f2" />
6
+ <img
7
+ alt="MIT License"
8
+ src="https://img.shields.io/github/license/roots/bud?color=%23525ddc&style=flat-square"
9
+ />
10
+ <a href="https://app.fossa.com/projects/git%2Bgithub.com%2Froots%2Fbud?ref=badge_small" alt="FOSSA Status">
11
+ <img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2Froots%2Fbud.svg?type=small"/>
12
+ </a>
13
+ <a href="https://www.npmjs.com/package/@roots/bud">
14
+ <img src="https://img.shields.io/npm/v/@roots/bud.svg?color=%23525ddc&style=flat-square" />
15
+ </a>
16
+ <a href="https://codecov.io/gh/roots/bud">
17
+ <img src="https://codecov.io/gh/roots/bud/branch/next/graph/badge.svg?token=DRJ28OD8XD"/>
9
18
  </a>
10
- <a href="https://www.npmjs.com/package/@roots/bud-compiler">
11
- <img src="https://img.shields.io/npm/v/@roots/bud-compiler.svg?color=%23525ddc&style=flat-square" />
19
+ <a href="https://twitter.com/rootswp">
20
+ <img
21
+ alt="Follow Roots"
22
+ src="https://img.shields.io/twitter/follow/rootswp.svg?color=%23525ddc&style=flat-square"
23
+ />
12
24
  </a>
13
25
  </p>
14
26
 
27
+
15
28
  <h1 align="center">
16
29
  <strong>@roots/bud-compiler</strong>
17
30
  </h1>
18
31
 
19
- ## Overview
20
-
21
- The compiler provides controls and renders Bud's built-in development server.
22
-
32
+ > Compilation handler
23
33
  ## Installation
24
34
 
25
- ```sh
26
- yarn add @roots/bud-compiler --dev
35
+ Install **@roots/bud-compiler** to your project.
36
+
37
+ ```shell
38
+ yarn add @roots/bud-compiler
27
39
  ```
28
40
 
29
- ## Usage
41
+ ## Documentation
30
42
 
31
- The compiler is called as a function and expects a valid webpack configuration and an instance of Bud.
43
+ For more information on utilizing this package [check out our dedicated docs](https://budjs.netlify.app)
32
44
 
33
- It returns an object that includes a `compile` function. This initiates the compiler.
45
+ ## Community
34
46
 
35
- ```js
36
- const {compiler} = require('@roots/bud-compiler')
37
- const instance = compiler(bud, config)
38
- instance.compile()
39
- ```
47
+ Keep track of development and community news.
48
+
49
+ - Participate on the [Roots Discourse](https://discourse.roots.io)
50
+ - Follow [@rootswp on Twitter](https://twitter.com/rootswp)
51
+ - Read and subscribe to the [Roots blog](https://roots.io/blog/)
52
+ - Subscribe to the [Roots Newsletter](https://roots.io/subscribe/)
53
+ - Listen to the [Roots Radio podcast](https://roots.io/podcast/)
40
54
 
41
55
  ## Contributing
42
56
 
43
57
  Contributions are welcome from everyone.
44
58
 
45
- We have [contributing guidelines](https://github.com/roots/guidelines/blob/master/CONTRIBUTING.md) to help you get started.
59
+ We have [contribution guidelines](https://github.com/roots/guidelines/blob/master/CONTRIBUTING.md) to help you get started.
46
60
 
47
- ## Bud sponsors
61
+ ## Sponsors
48
62
 
49
63
  Help support our open-source development efforts by [becoming a patron](https://www.patreon.com/rootsdev).
50
64
 
51
- ## Community
52
-
53
- Keep track of development and community news.
54
-
55
- - Participate on the [Roots Discourse](https://discourse.roots.io/)
56
- - Follow [@rootswp on Twitter](https://twitter.com/rootswp)
57
- - Read and subscribe to the [Roots Blog](https://roots.io/blog/)
58
- - Subscribe to the [Roots Newsletter](https://roots.io/subscribe/)
59
- - Listen to the [Roots Radio podcast](https://roots.io/podcast/)
65
+ <a href="https://kinsta.com/?kaid=OFDHAJIXUDIV"><img src="https://cdn.roots.io/app/uploads/kinsta.svg" alt="Kinsta" width="200" height="150"/></a>
66
+ <a href="https://k-m.com/"><img src="https://cdn.roots.io/app/uploads/km-digital.svg" alt="KM Digital" width="200" height="150"/></a>
67
+ <a href="https://carrot.com/"><img src="https://cdn.roots.io/app/uploads/carrot.svg" alt="Carrot" width="200" height="150"/></a>
68
+ <a href="https://www.c21redwood.com/"><img src="https://cdn.roots.io/app/uploads/c21redwood.svg" alt="C21 Redwood Realty" width="200" height="150"/></a>
69
+ <a href="https://wordpress.com/"><img src="https://cdn.roots.io/app/uploads/wordpress.svg" alt="WordPress.com" width="200" height="150"/></a>
70
+ <a href="https://icons8.com/"><img src="https://cdn.roots.io/app/uploads/icons8.svg" alt="Icons8" width="200" height="150"/></a>
71
+ <a href="https://www.harnessup.com/"><img src="https://cdn.roots.io/app/uploads/harness-software.svg" alt="Harness Software" width="200" height="150"/></a>
72
+ <a href="https://www.codersclan.com/"><img src="https://cdn.roots.io/app/uploads/coders-clan.svg" alt="Coders Clan" width="200" height="150"/></a>
73
+ <a href="https://generodigital.com/"><img src="https://cdn.roots.io/app/uploads/genero.svg" alt="Genero" width="200" height="150"/></a>
74
+ <a href="https://motto.ca/roots"><img src="https://cdn.roots.io/app/uploads/motto.svg" alt="Motto" width="200" height="150"/></a>
@@ -1,85 +1,131 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Compiler = void 0;
3
4
  const tslib_1 = require("tslib");
4
5
  const bud_framework_1 = require("@roots/bud-framework");
5
- const webpack_1 = tslib_1.__importStar(require("webpack"));
6
- const lodash_1 = require("lodash");
7
6
  const autobind_decorator_1 = require("autobind-decorator");
8
- class default_1 extends bud_framework_1.Service {
7
+ const webpack_1 = require("webpack");
8
+ /**
9
+ * Initial state
10
+ *
11
+ * @public
12
+ */
13
+ const INITIAL_STATS = {
14
+ assets: [],
15
+ errors: [],
16
+ warnings: [],
17
+ };
18
+ /**
19
+ * Wepback compilation controller class
20
+ *
21
+ * @public
22
+ */
23
+ class Compiler extends bud_framework_1.Service {
9
24
  constructor() {
10
25
  super(...arguments);
11
- this.name = '@roots/bud-compiler';
12
- this._stats = {
13
- assets: [],
14
- errors: [],
15
- warnings: [],
16
- };
26
+ /**
27
+ * Compilation stats
28
+ *
29
+ * @public
30
+ */
31
+ this.stats = INITIAL_STATS;
32
+ /**
33
+ * True if compiler is already instantiated
34
+ *
35
+ * @public
36
+ */
17
37
  this.isCompiled = false;
18
38
  }
19
- get stats() {
20
- return this._stats;
21
- }
22
- set stats(stats) {
23
- this._stats = stats;
24
- }
25
- get progress() {
26
- return this._progress;
27
- }
28
- set progress(progress) {
29
- this._progress = progress;
30
- }
31
- get instance() {
32
- return this._instance;
33
- }
34
- set instance(instance) {
35
- this._instance = instance;
36
- }
39
+ /**
40
+ * {@inheritDoc @roots/bud-framework#Service.register}
41
+ *
42
+ * @public
43
+ * @decorator `@bind`
44
+ */
37
45
  register() {
38
- this.app.hooks.on('done', () => {
39
- this.isCompiled = true;
40
- });
46
+ this.app.hooks.on('before', () => []);
47
+ this.app.hooks.on('after', () => []);
41
48
  }
49
+ /**
50
+ * Initiates compilation
51
+ *
52
+ * @returns the compiler instance
53
+ *
54
+ * @public
55
+ * @decorator `@bind`
56
+ */
42
57
  compile() {
43
- this.isCompiled && this.instance.close(lodash_1.noop);
44
- return this.setup(this.before());
45
- }
46
- before() {
47
- const config = [];
48
- this.app.hooks.filter('before');
49
- const parent = this.app.build.config;
50
- if (parent.entry || !this.app.children.getEntries()[0]) {
51
- config.push(parent);
52
- }
53
- this.app.children.getValues().forEach(child => {
54
- var _a;
55
- ((_a = child === null || child === void 0 ? void 0 : child.build) === null || _a === void 0 ? void 0 : _a.config) && config.push(child.build.config);
56
- });
57
- this.app.info('Compilers: %s', config.map(({ name }) => name).join(' '));
58
- config.forEach(cfg => {
59
- var _a, _b, _c;
60
- cfg.entry &&
61
- this.app.info('%s entry count: %s', cfg.name, (_a = Object.entries(cfg.entry)) === null || _a === void 0 ? void 0 : _a.length);
62
- ((_c = (_b = cfg.module) === null || _b === void 0 ? void 0 : _b.rules[0]) === null || _c === void 0 ? void 0 : _c.oneOf) &&
63
- this.app.info('%s rules count: %s', cfg.name, cfg.module.rules[0].oneOf.length);
64
- });
65
- return config;
58
+ let instance;
59
+ if (this.isCompiled)
60
+ this.instance.close(() => {
61
+ instance = this.setup(this.before());
62
+ });
63
+ else
64
+ instance = this.setup(this.before());
65
+ return instance;
66
66
  }
67
+ /**
68
+ * @public
69
+ * @decorator `@bind`
70
+ */
67
71
  setup(config) {
68
- this.instance = webpack_1.default(config);
69
- this.instance.hooks.done.tap(this.app.name, stats => {
70
- stats && Object.assign(this.stats, stats.toJson());
71
- this.instance.close(err => {
72
- err && this.stats.errors.push(err);
73
- lodash_1.isEqual(this.app.mode, 'production') &&
74
- setTimeout(() => process.exit(), 100);
72
+ this.instance = this.app.isDevelopment
73
+ ? (0, webpack_1.webpack)(config, this.callback)
74
+ : (0, webpack_1.webpack)(config);
75
+ if (this.app.isProduction) {
76
+ this.instance.hooks.done.tap(this.app.name, stats => {
77
+ stats && Object.assign(this.stats, stats.toJson());
78
+ this.instance.close(err => {
79
+ err && this.stats.errors.push(err);
80
+ });
75
81
  });
76
- });
82
+ }
77
83
  new webpack_1.ProgressPlugin((...args) => {
78
84
  this.progress = args;
79
85
  }).apply(this.instance);
80
- this.app.hooks.filter('done');
81
86
  return this.instance;
82
87
  }
88
+ /**
89
+ * Returns final webpack configuration
90
+ *
91
+ * @public
92
+ * @decorator `@bind`
93
+ */
94
+ before() {
95
+ const config = [];
96
+ this.stats = INITIAL_STATS;
97
+ this.isCompiled = true;
98
+ this.app.hooks.filter('before').map(cb => cb(this.app));
99
+ this.app.parent &&
100
+ this.app.error(`Trying to compile a child directly.`);
101
+ /**
102
+ * Attempt to use the parent instance in the compilation if there are entries
103
+ * registered to it or if it has no child instances registered.
104
+ */
105
+ if (this.app.build.config.entry || !this.app.hasChildren) {
106
+ this.app.info('using parent compiler');
107
+ config.push(this.app.build.config);
108
+ }
109
+ /**
110
+ * If there are {@link Framework.children} instances, iterate through
111
+ * them and add to `config`
112
+ */
113
+ this.app.hasChildren &&
114
+ this.app.children.getValues().map(({ build, name }) => {
115
+ name &&
116
+ (() => {
117
+ this.app.info(`using ${name} compiler`);
118
+ config.push(build.config);
119
+ })();
120
+ });
121
+ return config;
122
+ }
123
+ /**
124
+ * Compilation callback
125
+ *
126
+ * @public
127
+ * @decorator `@bind`
128
+ */
83
129
  callback(...args) {
84
130
  /**
85
131
  * production mode callback takes two parameters (webpack err and stats)
@@ -92,29 +138,25 @@ class default_1 extends bud_framework_1.Service {
92
138
  this.app.when(stats, () => {
93
139
  this.stats = stats.toJson(this.app.build.config.stats);
94
140
  });
95
- this.app.when(err, () => {
96
- this.stats.errors.push(err);
97
- });
98
- this.app.when(this.app.store.get('ci'), () => {
99
- stats && console.log(stats.toString());
100
- err && console.error(err);
101
- });
141
+ err && this.stats.errors.push(err);
142
+ const doneCallbacks = this.app.hooks.filter('done');
143
+ doneCallbacks === null || doneCallbacks === void 0 ? void 0 : doneCallbacks.map((cb) => cb(this.app));
102
144
  }
103
145
  }
104
- tslib_1.__decorate([
146
+ (0, tslib_1.__decorate)([
105
147
  autobind_decorator_1.boundMethod
106
- ], default_1.prototype, "register", null);
107
- tslib_1.__decorate([
148
+ ], Compiler.prototype, "register", null);
149
+ (0, tslib_1.__decorate)([
108
150
  autobind_decorator_1.boundMethod
109
- ], default_1.prototype, "compile", null);
110
- tslib_1.__decorate([
151
+ ], Compiler.prototype, "compile", null);
152
+ (0, tslib_1.__decorate)([
111
153
  autobind_decorator_1.boundMethod
112
- ], default_1.prototype, "before", null);
113
- tslib_1.__decorate([
154
+ ], Compiler.prototype, "setup", null);
155
+ (0, tslib_1.__decorate)([
114
156
  autobind_decorator_1.boundMethod
115
- ], default_1.prototype, "setup", null);
116
- tslib_1.__decorate([
157
+ ], Compiler.prototype, "before", null);
158
+ (0, tslib_1.__decorate)([
117
159
  autobind_decorator_1.boundMethod
118
- ], default_1.prototype, "callback", null);
119
- exports.default = default_1;
160
+ ], Compiler.prototype, "callback", null);
161
+ exports.Compiler = Compiler;
120
162
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Compiler/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/Compiler/index.ts"],"names":[],"mappings":"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"}
package/lib/cjs/index.js CHANGED
@@ -1,7 +1,17 @@
1
1
  "use strict";
2
+ // Copyright (c) Roots Foundation, LLC. All rights reserved.
3
+ // Licensed under the MIT license.
2
4
  Object.defineProperty(exports, "__esModule", { value: true });
3
5
  exports.Compiler = void 0;
4
- const tslib_1 = require("tslib");
5
- const Compiler_1 = tslib_1.__importDefault(require("./Compiler"));
6
- exports.Compiler = Compiler_1.default;
6
+ /**
7
+ * The {@link @roots/bud-compiler# | @roots/bud-compiler} package implements the
8
+ * {@link @roots/bud-framework#Compiler | Compiler interface}
9
+ *
10
+ * @see https://roots.io/bud
11
+ * @see https://github.com/roots/bud
12
+ *
13
+ * @core @packageDocumentation @betaDocumentation
14
+ */
15
+ var Compiler_1 = require("./Compiler");
16
+ Object.defineProperty(exports, "Compiler", { enumerable: true, get: function () { return Compiler_1.Compiler; } });
7
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;AAAA,kEAAiC;AAEzB,mBAFD,kBAAQ,CAEC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;AAElC;;;;;;;;GAQG;AAEH,uCAAmC;AAA3B,oGAAA,QAAQ,OAAA"}
@@ -1,83 +1,128 @@
1
1
  import { __decorate } from "tslib";
2
- import { Service } from '@roots/bud-framework';
3
- import webpack, { ProgressPlugin } from 'webpack';
4
- import { noop, isEqual } from 'lodash';
2
+ import { Service, } from '@roots/bud-framework';
5
3
  import { boundMethod as bind } from 'autobind-decorator';
6
- export default class default_1 extends Service {
4
+ import { ProgressPlugin, webpack } from 'webpack';
5
+ /**
6
+ * Initial state
7
+ *
8
+ * @public
9
+ */
10
+ const INITIAL_STATS = {
11
+ assets: [],
12
+ errors: [],
13
+ warnings: [],
14
+ };
15
+ /**
16
+ * Wepback compilation controller class
17
+ *
18
+ * @public
19
+ */
20
+ export class Compiler extends Service {
7
21
  constructor() {
8
22
  super(...arguments);
9
- this.name = '@roots/bud-compiler';
10
- this._stats = {
11
- assets: [],
12
- errors: [],
13
- warnings: [],
14
- };
23
+ /**
24
+ * Compilation stats
25
+ *
26
+ * @public
27
+ */
28
+ this.stats = INITIAL_STATS;
29
+ /**
30
+ * True if compiler is already instantiated
31
+ *
32
+ * @public
33
+ */
15
34
  this.isCompiled = false;
16
35
  }
17
- get stats() {
18
- return this._stats;
19
- }
20
- set stats(stats) {
21
- this._stats = stats;
22
- }
23
- get progress() {
24
- return this._progress;
25
- }
26
- set progress(progress) {
27
- this._progress = progress;
28
- }
29
- get instance() {
30
- return this._instance;
31
- }
32
- set instance(instance) {
33
- this._instance = instance;
34
- }
36
+ /**
37
+ * {@inheritDoc @roots/bud-framework#Service.register}
38
+ *
39
+ * @public
40
+ * @decorator `@bind`
41
+ */
35
42
  register() {
36
- this.app.hooks.on('done', () => {
37
- this.isCompiled = true;
38
- });
43
+ this.app.hooks.on('before', () => []);
44
+ this.app.hooks.on('after', () => []);
39
45
  }
46
+ /**
47
+ * Initiates compilation
48
+ *
49
+ * @returns the compiler instance
50
+ *
51
+ * @public
52
+ * @decorator `@bind`
53
+ */
40
54
  compile() {
41
- this.isCompiled && this.instance.close(noop);
42
- return this.setup(this.before());
43
- }
44
- before() {
45
- const config = [];
46
- this.app.hooks.filter('before');
47
- const parent = this.app.build.config;
48
- if (parent.entry || !this.app.children.getEntries()[0]) {
49
- config.push(parent);
50
- }
51
- this.app.children.getValues().forEach(child => {
52
- var _a;
53
- ((_a = child === null || child === void 0 ? void 0 : child.build) === null || _a === void 0 ? void 0 : _a.config) && config.push(child.build.config);
54
- });
55
- this.app.info('Compilers: %s', config.map(({ name }) => name).join(' '));
56
- config.forEach(cfg => {
57
- var _a, _b, _c;
58
- cfg.entry &&
59
- this.app.info('%s entry count: %s', cfg.name, (_a = Object.entries(cfg.entry)) === null || _a === void 0 ? void 0 : _a.length);
60
- ((_c = (_b = cfg.module) === null || _b === void 0 ? void 0 : _b.rules[0]) === null || _c === void 0 ? void 0 : _c.oneOf) &&
61
- this.app.info('%s rules count: %s', cfg.name, cfg.module.rules[0].oneOf.length);
62
- });
63
- return config;
55
+ let instance;
56
+ if (this.isCompiled)
57
+ this.instance.close(() => {
58
+ instance = this.setup(this.before());
59
+ });
60
+ else
61
+ instance = this.setup(this.before());
62
+ return instance;
64
63
  }
64
+ /**
65
+ * @public
66
+ * @decorator `@bind`
67
+ */
65
68
  setup(config) {
66
- this.instance = webpack(config);
67
- this.instance.hooks.done.tap(this.app.name, stats => {
68
- stats && Object.assign(this.stats, stats.toJson());
69
- this.instance.close(err => {
70
- err && this.stats.errors.push(err);
71
- isEqual(this.app.mode, 'production') &&
72
- setTimeout(() => process.exit(), 100);
69
+ this.instance = this.app.isDevelopment
70
+ ? webpack(config, this.callback)
71
+ : webpack(config);
72
+ if (this.app.isProduction) {
73
+ this.instance.hooks.done.tap(this.app.name, stats => {
74
+ stats && Object.assign(this.stats, stats.toJson());
75
+ this.instance.close(err => {
76
+ err && this.stats.errors.push(err);
77
+ });
73
78
  });
74
- });
79
+ }
75
80
  new ProgressPlugin((...args) => {
76
81
  this.progress = args;
77
82
  }).apply(this.instance);
78
- this.app.hooks.filter('done');
79
83
  return this.instance;
80
84
  }
85
+ /**
86
+ * Returns final webpack configuration
87
+ *
88
+ * @public
89
+ * @decorator `@bind`
90
+ */
91
+ before() {
92
+ const config = [];
93
+ this.stats = INITIAL_STATS;
94
+ this.isCompiled = true;
95
+ this.app.hooks.filter('before').map(cb => cb(this.app));
96
+ this.app.parent &&
97
+ this.app.error(`Trying to compile a child directly.`);
98
+ /**
99
+ * Attempt to use the parent instance in the compilation if there are entries
100
+ * registered to it or if it has no child instances registered.
101
+ */
102
+ if (this.app.build.config.entry || !this.app.hasChildren) {
103
+ this.app.info('using parent compiler');
104
+ config.push(this.app.build.config);
105
+ }
106
+ /**
107
+ * If there are {@link Framework.children} instances, iterate through
108
+ * them and add to `config`
109
+ */
110
+ this.app.hasChildren &&
111
+ this.app.children.getValues().map(({ build, name }) => {
112
+ name &&
113
+ (() => {
114
+ this.app.info(`using ${name} compiler`);
115
+ config.push(build.config);
116
+ })();
117
+ });
118
+ return config;
119
+ }
120
+ /**
121
+ * Compilation callback
122
+ *
123
+ * @public
124
+ * @decorator `@bind`
125
+ */
81
126
  callback(...args) {
82
127
  /**
83
128
  * production mode callback takes two parameters (webpack err and stats)
@@ -90,28 +135,24 @@ export default class default_1 extends Service {
90
135
  this.app.when(stats, () => {
91
136
  this.stats = stats.toJson(this.app.build.config.stats);
92
137
  });
93
- this.app.when(err, () => {
94
- this.stats.errors.push(err);
95
- });
96
- this.app.when(this.app.store.get('ci'), () => {
97
- stats && console.log(stats.toString());
98
- err && console.error(err);
99
- });
138
+ err && this.stats.errors.push(err);
139
+ const doneCallbacks = this.app.hooks.filter('done');
140
+ doneCallbacks === null || doneCallbacks === void 0 ? void 0 : doneCallbacks.map((cb) => cb(this.app));
100
141
  }
101
142
  }
102
143
  __decorate([
103
144
  bind
104
- ], default_1.prototype, "register", null);
145
+ ], Compiler.prototype, "register", null);
105
146
  __decorate([
106
147
  bind
107
- ], default_1.prototype, "compile", null);
148
+ ], Compiler.prototype, "compile", null);
108
149
  __decorate([
109
150
  bind
110
- ], default_1.prototype, "before", null);
151
+ ], Compiler.prototype, "setup", null);
111
152
  __decorate([
112
153
  bind
113
- ], default_1.prototype, "setup", null);
154
+ ], Compiler.prototype, "before", null);
114
155
  __decorate([
115
156
  bind
116
- ], default_1.prototype, "callback", null);
157
+ ], Compiler.prototype, "callback", null);
117
158
  //# sourceMappingURL=index.js.map