core.files
Preface
The core.files object provides access to methods related to the files contained in the /mocks folder. You can use this API to force a reload of the files contents, or to get the content of any file in that folder, for example.
Use only the API methods described in this docs. Use other methods under your own risk, and take into account that they may change in minor versions without considering it as a breaking change.
API
reload()
core.files.reload(): Force a reload of all files in the /mocks folder, where usually the routes and collections are defined. It returns a Promise, resolved whenever all file contents are processed by the registered fileLoaders (Read createLoader for further info). Possible errors reading or processing files are handled internally, so the Promise will be never rejected.
Example
await core.files.reload();
stop()
core.files.stop(): Stop the files watch. It has no effect if the option files.enabled is false.
Example
core.files.stop();
// Now changes in the `/mocks` folder will be ignored
start()
core.files.start(): Start the files watch. It has no effect if the option files.enabled is false.
Example
core.files.start();
// Now changes in the `/mocks` folder will produce a reload
createLoader()
core.files.createLoader(fileLoaderOptions): Allows to get contents of files in the /mocks folder. The method returns a loader object (read loaders for further info).
fileLoaderOptions<Object>: Object containing next options:id<String>: ID for the new loader. It is used afterwards in traces, and it can also be used to access to the loader object through thefiles.loadersgetter.src<String> or <Array> of <Strings>: Globbing pattern/s matching the file paths to be read. The pattern should be relative to the/mocksfolder, and it should omit the file extension, because it is added afterwards based on the Mocks Server supported file types.onLoad(filesContents, filesErrors, coreTools)-<Function>Function that will be executed whenever any file matching thesrcpattern changes. If it returns a Promise, thefiles.reloadmethod will wait for it to have finished before resolving its own returned promise. It receives next arguments:filesContents<Array> of {path, content}- Array of objects withpathandcontentproperties containing the content of each file. The contents are already parsed when the file is of type YAML or JSON, and, about Javascript files, its default export is received as content.filesErrors<Array> of {path, error}- Array of objects withpathanderrorproperties containing errors produced when reading or parsing files.coreTools<Object>- Object containing next core tools:alerts- NamespacedalertsAPI created explicitly for this loader. Read the alerts API docs for further info.logger- NamespacedloggerAPI created explicitly for this loader. Read the logger API docs for further info.
Example
Next example shows how to create a files loader to load routes defined in any file the custom-routes folder:
// Create a routes loader using the mock API
const { loadRoutes } = core.mock.createLoaders();
const loader = core.files.createLoader({
id: "custom-routes", // loader ID
src: `custom-routes/**/*`, // Globule pattern matching any file in the `/mocks/custom-routes` folder and subfolders
onLoad: (filesContents, _errors, { logger }) => {
// Get the property `content` of every filesContents, and create a flat array with all contents.
const routes = filesContents
.map((fileDetails) => {
return fileDetails.content;
}).flat();
// Load routes
loadRoutes(routes);
// Use the loader logger to trace
logger.verbose(`Loaded routes from folder "${core.files.path}/custom-routes"`);
},
});
path
core.files.path: Returns the current absolute path of the files folder, usually /mocks until it is changed using the files.path option.
Example
console.log(core.files.path);
// -> `/~/projects/foo-project/mocks`
loaders
core.files.loaders: Returns an object containing all currently registered loaders created with the createLoader method. Object keys correspond with loaders IDs, and each loader contains next properties:
id- Loader's IDsrc- Globbing pattern/s matching the file paths read by this loaderlogger- Loader's namespaced logger APIalerts- Loader's namespaced alerts API
Example
const loaders = core.files.loaders;
Object.keys(loaders).forEach((loaderID) => {
console.log(`Found files loader with ID '${loaderID}'`);
});