flecks/packages/core/build/dox/hooks.js

125 lines
3.5 KiB
JavaScript
Raw Normal View History

export const hooks = {
2022-03-06 12:48:51 -06:00
/**
2023-11-30 21:41:42 -06:00
* Hook into webpack configuration.
* @param {string} target The build target; e.g. `server`.
2023-11-30 21:41:42 -06:00
* @param {Object} config The webpack configuration.
* @param {Object} env The webpack environment.
* @param {Object} argv The webpack commandline arguments.
* @see {@link https://webpack.js.org/configuration/configuration-types/#exporting-a-function}
*/
2023-11-30 21:41:42 -06:00
'@flecks/core.build': (target, config, env, argv) => {
if ('something' === target) {
2023-11-30 21:41:42 -06:00
if ('production' === argv.mode) {
config.plugins.push(new SomePlugin());
}
}
},
2022-03-06 12:48:51 -06:00
/**
2023-11-30 21:41:42 -06:00
* Alter build configurations after they have been hooked.
* @param {Object} configs The webpack configurations keyed by target.
* @param {Object} env The webpack environment.
* @param {Object} argv The webpack commandline arguments.
* @see {@link https://webpack.js.org/configuration/configuration-types/#exporting-a-function}
*/
'@flecks/core.build.alter': (configs) => {
2023-11-30 21:41:42 -06:00
// Maybe we want to do something if a target exists..?
if (configs.someTarget) {
// Do something...
2023-11-30 21:41:42 -06:00
// And then maybe we want to remove it from the build configuration..? That's ok!
delete configs.someTarget;
}
},
2022-03-09 07:25:58 -06:00
/**
2023-11-30 21:41:42 -06:00
* Register build configuration.
*/
'@flecks/core.build.config': () => [
2022-03-06 12:48:51 -06:00
/**
* If you document your config files like this, documentation will be automatically
* generated.
*/
'.myrc.js',
2022-03-06 12:48:51 -06:00
/**
* Make sure you return them as an array expression, like this.
*/
2023-12-02 22:31:14 -06:00
['something.config.js', {specifier: (specific) => `something.${specific}.config.js`}],
],
2022-03-06 12:48:51 -06:00
/**
2023-11-30 21:41:42 -06:00
* Define CLI commands.
*/
'@flecks/core.commands': (program) => ({
// So this could be invoked like:
// npx flecks something -t --blow-up blah
something: {
action: (...args) => {
// Run the command...
},
args: [
'<somearg>',
],
description: 'This command does tests and also blows up',
options: [
'-t, --test', 'Do a test',
'-b, --blow-up', 'Blow up instead of running the command',
],
2022-03-08 16:03:06 -06:00
},
}),
2022-03-08 16:03:06 -06:00
/**
2023-11-30 21:41:42 -06:00
* Define configuration.
*/
'@flecks/core.config': () => ({
whatever: 'configuration',
your: 1337,
fleck: 'needs',
2022-03-06 12:48:51 -06:00
/**
* Also, comments like this will be used to automatically generate documentation.
*/
though: 'you should keep the values serializable',
}),
2022-03-06 12:48:51 -06:00
/**
2023-11-30 21:41:42 -06:00
* Invoked when a fleck is HMR'd
* @param {string} path The path of the fleck
* @param {Module} updatedFleck The updated fleck module.
*/
'@flecks/core.hmr': (path, updatedFleck) => {
if ('my-fleck' === path) {
updatedFleck.doSomething();
}
},
2022-03-06 12:48:51 -06:00
2023-12-08 05:32:28 -06:00
/**
* Invoked when a gathered set is HMR'd.
* @param {constructor} gathered The gathered set.
* @param {string} hook The gather hook; e.g. `@flecks/db/server.models`.
*/
'@flecks/core.hmr.gathered': (gathered, hook) => {
// Do something with the gathered set...
},
/**
2023-11-30 21:41:42 -06:00
* Invoked when a gathered class is HMR'd.
* @param {constructor} Class The class.
* @param {string} hook The gather hook; e.g. `@flecks/db/server.models`.
*/
2023-12-08 05:32:28 -06:00
'@flecks/core.hmr.gathered.class': (Class, hook) => {
// Do something with Class...
},
2022-03-06 12:48:51 -06:00
/**
2023-11-30 21:41:42 -06:00
* Invoked when the application is starting. Use for order-independent initialization tasks.
*/
'@flecks/core.starting': (flecks) => {
flecks.set('$my-fleck/value', initializeMyValue());
2022-03-06 12:48:51 -06:00
},
/**
2023-11-30 21:41:42 -06:00
* Define build targets.
*/
'@flecks/core.targets': () => ['sometarget'],
};