{"library":"middleware-utils","title":"Middleware Utils","description":"The `middleware-utils` package provides a compact collection of utility functions designed to streamline the creation and management of middleware in Node.js applications. It's particularly useful within build or templating ecosystems, such as `assemble`, where middleware often requires sequential or parallel execution. Key functionalities include `series` and `parallel` for controlling middleware flow, `error` and `handleError` for standardized error reporting, and `delims` for escaping and unescaping template delimiters. The package's current stable version is 1.0.0, originally released in 2017. Due to its age and lack of updates, it effectively has an abandoned release cadence. Its API is callback-based, reflecting the common asynchronous patterns of its era, and it lacks native support for modern JavaScript features like Promises or ES Modules.","language":"javascript","status":"abandoned","last_verified":"Wed Apr 22","install":{"commands":["npm install middleware-utils"],"cli":null},"imports":["import utils from 'middleware-utils';","const utils = require('middleware-utils');\nconst seriesFn = utils.series;","const utils = require('middleware-utils');\nconst parallelFn = utils.parallel;"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"const utils = require('middleware-utils');\n\n// Simulate an application object that can register middleware\nconst app = {\n  _middleware: [],\n  preRender: function(pattern, fn) {\n    this._middleware.push({ pattern, fn });\n  },\n  // Simple handler to execute middleware\n  handle: function(view, done) {\n    const matchingFns = this._middleware.filter(m => view.name.match(m.pattern));\n    if (matchingFns.length === 0) {\n      return done(null, view);\n    }\n\n    const seriesRunner = utils.series(matchingFns.map(m => m.fn));\n    seriesRunner(view, done);\n  }\n};\n\nfunction createMiddleware(name) {\n  return function(file, next) {\n    console.log(`Executing middleware: ${name} for file: ${file.name}`);\n    // Simulate async work\n    setTimeout(() => next(), 50);\n  };\n}\n\n// Register middleware using utils.series\napp.preRender(/\\.hbs$/, utils.series([\n  createMiddleware('foo'),\n  createMiddleware('bar'),\n  createMiddleware('baz')\n]));\n\n// Register a single middleware\napp.preRender(/\\.txt$/, createMiddleware('text-processor'));\n\nconsole.log('Starting middleware processing...');\napp.handle({ name: 'template.hbs', content: '...' }, (err, result) => {\n  if (err) {\n    console.error('Error handling .hbs:', err);\n  } else {\n    console.log('Finished handling template.hbs.');\n  }\n});\n\napp.handle({ name: 'document.txt', content: '...' }, (err, result) => {\n  if (err) {\n    console.error('Error handling .txt:', err);\n  } else {\n    console.log('Finished handling document.txt.');\n  }\n});\n","lang":"javascript","description":"This example demonstrates how to use `middleware-utils.series` to run multiple middleware functions sequentially within a simulated application context, and how to define custom middleware functions.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}