|
1 |
| -/* eslint-disable max-lines */ |
| 1 | +/** |
| 2 | + * Dependencies |
| 3 | + */ |
| 4 | + |
| 5 | +const _ = require('lodash'); |
| 6 | +const debug = require('@tryghost/debug')('models'); |
| 7 | +const glob = require('glob'); |
2 | 8 |
|
3 | 9 | // enable event listeners
|
4 | 10 | require('./base/listeners');
|
5 | 11 |
|
6 | 12 | /**
|
7 | 13 | * Expose all models
|
8 | 14 | */
|
9 |
| -module.exports = { |
10 |
| - // `base` file does not export a Base model |
11 |
| - Base: require('./base'), |
| 15 | +exports = module.exports; |
12 | 16 |
|
13 |
| - ...require('./action'), |
14 |
| - ...require('./author'), |
15 |
| - ...require('./api-key'), |
16 |
| - ...require('./benefit'), |
17 |
| - ...require('./collection-post'), |
18 |
| - ...require('./collection'), |
19 |
| - ...require('./comment-like'), |
20 |
| - ...require('./comment-report'), |
21 |
| - ...require('./comment'), |
22 |
| - ...require('./custom-theme-setting'), |
23 |
| - ...require('./donation-payment-event'), |
24 |
| - ...require('./email-batch'), |
25 |
| - ...require('./email-recipient-failure'), |
26 |
| - ...require('./email-recipient'), |
27 |
| - ...require('./email-spam-complaint-event'), |
28 |
| - ...require('./email'), |
29 |
| - ...require('./integration'), |
30 |
| - ...require('./invite'), |
31 |
| - ...require('./job'), |
32 |
| - ...require('./label'), |
33 |
| - ...require('./mail-event'), |
34 |
| - ...require('./member-cancel-event'), |
35 |
| - ...require('./member-click-event'), |
36 |
| - ...require('./member-created-event'), |
37 |
| - ...require('./member-email-change-event'), |
38 |
| - ...require('./member-feedback'), |
39 |
| - ...require('./member-login-event'), |
40 |
| - ...require('./member-newsletter'), |
41 |
| - ...require('./member-paid-subscription-event'), |
42 |
| - ...require('./member-payment-event'), |
43 |
| - ...require('./member-product-event'), |
44 |
| - ...require('./member-status-event'), |
45 |
| - ...require('./member-stripe-customer'), |
46 |
| - ...require('./member-subscribe-event'), |
47 |
| - ...require('./member'), |
48 |
| - ...require('./mention'), |
49 |
| - ...require('./milestone'), |
50 |
| - ...require('./mobiledoc-revision'), |
51 |
| - ...require('./newsletter'), |
52 |
| - ...require('./offer-redemption'), |
53 |
| - ...require('./offer'), |
54 |
| - ...require('./permission'), |
55 |
| - ...require('./post-revision'), |
56 |
| - ...require('./post'), |
57 |
| - ...require('./posts-meta'), |
58 |
| - ...require('./product'), |
59 |
| - ...require('./recommendation-click-event'), |
60 |
| - ...require('./recommendation-subscribe-event'), |
61 |
| - ...require('./recommendation'), |
62 |
| - ...require('./redirect'), |
63 |
| - ...require('./role'), |
64 |
| - ...require('./session'), |
65 |
| - ...require('./settings'), |
66 |
| - ...require('./single-use-token'), |
67 |
| - ...require('./snippet'), |
68 |
| - ...require('./stripe-customer-subscription'), |
69 |
| - ...require('./stripe-price'), |
70 |
| - ...require('./stripe-product'), |
71 |
| - ...require('./subscription-created-event'), |
72 |
| - ...require('./suppression'), |
73 |
| - ...require('./tag-public'), |
74 |
| - ...require('./tag'), |
75 |
| - ...require('./user'), |
76 |
| - ...require('./webhook') |
77 |
| -}; |
| 17 | +function init() { |
| 18 | + const baseNow = Date.now(); |
| 19 | + exports.Base = require('./base'); |
| 20 | + debug(`${Date.now() - baseNow}ms - Base.js require`); |
| 21 | + |
| 22 | + let modelsFiles = glob.sync('!(index).js', {cwd: __dirname}); |
| 23 | + modelsFiles.forEach((model) => { |
| 24 | + const name = model.replace(/.js$/, ''); |
| 25 | + const modelNow = Date.now(); |
| 26 | + _.extend(exports, require('./' + name)); |
| 27 | + debug(`${Date.now() - modelNow}ms - ${model} require`); |
| 28 | + }); |
| 29 | +} |
78 | 30 |
|
79 | 31 | /**
|
80 |
| - * @deprecated: remove this once we've removed it from everywhere |
| 32 | + * Expose `init` |
81 | 33 | */
|
82 |
| -module.exports.init = function init() { |
83 |
| - if (process.env.NODE_ENV !== 'production') { |
84 |
| - // eslint-disable-next-line no-console |
85 |
| - console.warn('@deprecated: models.init() is deprecated. Models are now automatically required.'); |
86 |
| - } |
87 |
| -}; |
| 34 | + |
| 35 | +exports.init = init; |
0 commit comments